From a6039629982166d01ee3a496e680077623f665cf Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 28 Nov 2019 02:04:18 +0100 Subject: [PATCH] Build new PermissionsWrapper and use doubled-row for permissions and repositoryRoles overview, Remove duplicated PermissionCheckbox --- .../roles/containers/RepositoryRoleForm.tsx | 30 ++++----- .../components/PermissionCheckbox.tsx | 24 ++++--- .../components/PermissionsWrapper.tsx | 63 +++++++++++++++++++ .../permissions/components/SetPermissions.tsx | 52 ++++----------- .../components/PermissionCheckbox.tsx | 29 --------- .../containers/AdvancedPermissionsDialog.tsx | 11 +++- 6 files changed, 116 insertions(+), 93 deletions(-) create mode 100644 scm-ui/ui-webapp/src/permissions/components/PermissionsWrapper.tsx delete mode 100644 scm-ui/ui-webapp/src/repos/permissions/components/PermissionCheckbox.tsx diff --git a/scm-ui/ui-webapp/src/admin/roles/containers/RepositoryRoleForm.tsx b/scm-ui/ui-webapp/src/admin/roles/containers/RepositoryRoleForm.tsx index f5a9c19549..3dd47b0feb 100644 --- a/scm-ui/ui-webapp/src/admin/roles/containers/RepositoryRoleForm.tsx +++ b/scm-ui/ui-webapp/src/admin/roles/containers/RepositoryRoleForm.tsx @@ -2,10 +2,10 @@ import React from "react"; import { connect } from "react-redux"; import { WithTranslation, withTranslation } from "react-i18next"; import { RepositoryRole } from "@scm-manager/ui-types"; -import { InputField, SubmitButton } from "@scm-manager/ui-components"; +import { InputField, Level, SubmitButton } from "@scm-manager/ui-components"; import { getRepositoryRolesLink, getRepositoryVerbsLink } from "../../../modules/indexResource"; import { fetchAvailableVerbs, getFetchVerbsFailure, getVerbsFromState, isFetchVerbsPending } from "../modules/roles"; -import PermissionCheckbox from "../../../repos/permissions/components/PermissionCheckbox"; +import PermissionsWrapper from "../../../permissions/components/PermissionsWrapper"; type Props = WithTranslation & { role?: RepositoryRole; @@ -89,16 +89,9 @@ class RepositoryRoleForm extends React.Component { const { loading, availableVerbs, t } = this.props; const { role } = this.state; - const verbSelectBoxes = !availableVerbs - ? null - : availableVerbs.map(verb => ( - - )); + const selectedVerbs = availableVerbs + ? availableVerbs.reduce((obj, verb) => ({ ...obj, [verb]: role.verbs.includes(verb) }), {}) + : {}; return (
@@ -111,16 +104,23 @@ class RepositoryRoleForm extends React.Component { />
- {verbSelectBoxes} +

- + } + /> ); } } -const mapStateToProps = (state) => { +const mapStateToProps = state => { const loading = isFetchVerbsPending(state); const error = getFetchVerbsFailure(state); const verbsLink = getRepositoryVerbsLink(state); diff --git a/scm-ui/ui-webapp/src/permissions/components/PermissionCheckbox.tsx b/scm-ui/ui-webapp/src/permissions/components/PermissionCheckbox.tsx index 505d65d7d1..3223336099 100644 --- a/scm-ui/ui-webapp/src/permissions/components/PermissionCheckbox.tsx +++ b/scm-ui/ui-webapp/src/permissions/components/PermissionCheckbox.tsx @@ -3,24 +3,34 @@ import { WithTranslation, withTranslation } from "react-i18next"; import { Checkbox } from "@scm-manager/ui-components"; type Props = WithTranslation & { - permission: string; + name: string; checked: boolean; - onChange: (value: boolean, name: string) => void; + onChange?: (value: boolean, name?: string) => void; disabled: boolean; + role?: boolean; }; class PermissionCheckbox extends React.Component { render() { - const { t, permission, checked, onChange, disabled } = this.props; - const key = permission.split(":").join("."); + const { name, checked, onChange, disabled, role, t } = this.props; + + const key = name.split(":").join("."); + const label = role + ? t("verbs.repository." + name + ".displayName") + : this.translateOrDefault("permissions." + key + ".displayName", key); + const helpText = role + ? t("verbs.repository." + name + ".description") + : this.translateOrDefault("permissions." + key + ".description", t("permissions.unknown")); + return ( ); } diff --git a/scm-ui/ui-webapp/src/permissions/components/PermissionsWrapper.tsx b/scm-ui/ui-webapp/src/permissions/components/PermissionsWrapper.tsx new file mode 100644 index 0000000000..c5d0a90ae0 --- /dev/null +++ b/scm-ui/ui-webapp/src/permissions/components/PermissionsWrapper.tsx @@ -0,0 +1,63 @@ +import React from "react"; +import classNames from "classnames"; +import styled from "styled-components"; +import PermissionCheckbox from "./PermissionCheckbox"; +import { Loading } from "@scm-manager/ui-components"; + +type Props = { + permissions: { + [key: string]: boolean; + }; + onChange: (value: boolean, name: string) => void; + disabled: boolean; + role?: boolean; +}; + +const StyledWrapper = styled.div` + padding-bottom: 0; + + & .field .control { + width: 100%; + word-wrap: break-word; + } +`; + +export default class PermissionsWrapper extends React.Component { + render() { + const { permissions, onChange, disabled, role } = this.props; + + if (!permissions) { + return ; + } + + const permissionArray = Object.keys(permissions); + return ( +
+ + {permissionArray.slice(0, permissionArray.length / 2 + 1).map(p => ( + + ))} + + + {permissionArray.slice(permissionArray.length / 2 + 1, permissionArray.length).map(p => ( + + ))} + +
+ ); + } +} diff --git a/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx b/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx index e9db6cac17..83c3b2e284 100644 --- a/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx +++ b/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx @@ -1,13 +1,11 @@ import React from "react"; import { connect } from "react-redux"; import { WithTranslation, withTranslation } from "react-i18next"; -import classNames from "classnames"; -import styled from "styled-components"; import { Link } from "@scm-manager/ui-types"; -import { Notification, ErrorNotification, SubmitButton } from "@scm-manager/ui-components"; +import { Notification, ErrorNotification, SubmitButton, Level } from "@scm-manager/ui-components"; import { getLink } from "../../modules/indexResource"; import { loadPermissionsForEntity, setPermissions } from "./handlePermissions"; -import PermissionCheckbox from "./PermissionCheckbox"; +import PermissionsWrapper from "./PermissionsWrapper"; type Props = WithTranslation & { availablePermissionLink: string; @@ -25,15 +23,6 @@ type State = { overwritePermissionsLink?: Link; }; -const PermissionsWrapper = styled.div` - padding-bottom: 0; - - & .field .control { - width: 100%; - word-wrap: break-word; - } -`; - class SetPermissions extends React.Component { constructor(props: Props) { super(props); @@ -43,7 +32,6 @@ class SetPermissions extends React.Component { loading: true, permissionsChanged: false, permissionsSubmitted: false, - modifiable: false, overwritePermissionsLink: undefined }; } @@ -125,39 +113,23 @@ class SetPermissions extends React.Component {
{message} {this.renderPermissions()} - + + } + /> ); } renderPermissions = () => { const { overwritePermissionsLink, permissions } = this.state; - const permissionArray = Object.keys(permissions); return ( -
- - {permissionArray.slice(0, permissionArray.length / 2 + 1).map(p => ( - - ))} - - - {permissionArray.slice(permissionArray.length / 2 + 1, permissionArray.length).map(p => ( - - ))} - -
+ ); }; diff --git a/scm-ui/ui-webapp/src/repos/permissions/components/PermissionCheckbox.tsx b/scm-ui/ui-webapp/src/repos/permissions/components/PermissionCheckbox.tsx deleted file mode 100644 index 2f677d4deb..0000000000 --- a/scm-ui/ui-webapp/src/repos/permissions/components/PermissionCheckbox.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from "react"; -import { WithTranslation, withTranslation } from "react-i18next"; -import { Checkbox } from "@scm-manager/ui-components"; - -type Props = WithTranslation & { - disabled: boolean; - name: string; - checked: boolean; - onChange?: (value: boolean, name?: string) => void; -}; - -class PermissionCheckbox extends React.Component { - render() { - const { t } = this.props; - return ( - - ); - } -} - -export default withTranslation("plugins")(PermissionCheckbox); diff --git a/scm-ui/ui-webapp/src/repos/permissions/containers/AdvancedPermissionsDialog.tsx b/scm-ui/ui-webapp/src/repos/permissions/containers/AdvancedPermissionsDialog.tsx index aa4d7aaa07..5ab3461638 100644 --- a/scm-ui/ui-webapp/src/repos/permissions/containers/AdvancedPermissionsDialog.tsx +++ b/scm-ui/ui-webapp/src/repos/permissions/containers/AdvancedPermissionsDialog.tsx @@ -1,7 +1,7 @@ import React from "react"; import { WithTranslation, withTranslation } from "react-i18next"; import { ButtonGroup, Button, SubmitButton, Modal } from "@scm-manager/ui-components"; -import PermissionCheckbox from "../components/PermissionCheckbox"; +import PermissionCheckbox from "../../../permissions/components/PermissionCheckbox"; type Props = WithTranslation & { readOnly: boolean; @@ -33,7 +33,14 @@ class AdvancedPermissionsDialog extends React.Component { const { verbs } = this.state; const verbSelectBoxes = Object.entries(verbs).map(e => ( - + )); const submitButton = !readOnly ? : null;