From 3a441934590df408d1fa5b1e2ce0f7f651ba4ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 25 Jan 2019 12:21:05 +0100 Subject: [PATCH] Add advanced permission button for new permissions --- scm-ui/public/locales/en/repos.json | 1 + .../CreatePermissionForm.js | 81 ++++++++++++++----- .../permissions/containers/Permissions.js | 2 +- 3 files changed, 64 insertions(+), 20 deletions(-) rename scm-ui/src/repos/permissions/{components => containers}/CreatePermissionForm.js (73%) diff --git a/scm-ui/public/locales/en/repos.json b/scm-ui/public/locales/en/repos.json index ead950d0a6..91fa3a06c6 100644 --- a/scm-ui/public/locales/en/repos.json +++ b/scm-ui/public/locales/en/repos.json @@ -94,6 +94,7 @@ "name": "User or Group", "role": "Role", "permissions": "Permissions", + "permissions-help": "Use this to specify your own set of permissions regardless of predefined roles", "group-permission": "Group Permission", "user-permission": "User Permission", "edit-permission": { diff --git a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js b/scm-ui/src/repos/permissions/containers/CreatePermissionForm.js similarity index 73% rename from scm-ui/src/repos/permissions/components/CreatePermissionForm.js rename to scm-ui/src/repos/permissions/containers/CreatePermissionForm.js index ce7a1ee512..21c6c54091 100644 --- a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/repos/permissions/containers/CreatePermissionForm.js @@ -1,16 +1,22 @@ // @flow import React from "react"; import { translate } from "react-i18next"; -import { Autocomplete, SubmitButton } from "@scm-manager/ui-components"; -import RoleSelector from "./RoleSelector"; +import { + Autocomplete, + SubmitButton, + Button, + LabelWithHelpIcon +} from "@scm-manager/ui-components"; +import RoleSelector from "../components/RoleSelector"; import type { AvailableRepositoryPermissions, PermissionCollection, PermissionCreateEntry, SelectValue } from "@scm-manager/ui-types"; -import * as validator from "./permissionValidation"; +import * as validator from "../components/permissionValidation"; import { findMatchingRoleName } from "../modules/permissions"; +import AdvancedPermissionsDialog from "./AdvancedPermissionsDialog"; type Props = { t: string => string, @@ -27,7 +33,8 @@ type State = { verbs: string[], groupPermission: boolean, valid: boolean, - value?: SelectValue + value?: SelectValue, + showAdvancedDialog: boolean }; class CreatePermissionForm extends React.Component { @@ -39,7 +46,8 @@ class CreatePermissionForm extends React.Component { verbs: props.availablePermissions.availableRoles[0].verbs, groupPermission: false, valid: true, - value: undefined + value: undefined, + showAdvancedDialog: false }; } @@ -126,19 +134,29 @@ class CreatePermissionForm extends React.Component { render() { const { t, availablePermissions, loading } = this.props; - const { verbs } = this.state; + const { verbs, showAdvancedDialog } = this.state; const availableRoleNames = availablePermissions.availableRoles.map( r => r.name ); const matchingRole = findMatchingRoleName(availablePermissions, verbs); + const advancedDialog = showAdvancedDialog ? ( + + ) : null; + return (

{t("permission.add-permission.add-permission-heading")}

+ {advancedDialog}
-
+
{this.renderAutocompletionField()}
-
- +
+
+
+ +
+
+ +
+
@@ -195,6 +223,21 @@ class CreatePermissionForm extends React.Component { ); } + handleDetailedPermissionsPressed = () => { + this.setState({ showAdvancedDialog: true }); + }; + + closeAdvancedPermissionsDialog = () => { + this.setState({ showAdvancedDialog: false }); + }; + + submitAdvancedPermissionsDialog = (newVerbs: string[]) => { + this.setState({ + showAdvancedDialog: false, + verbs: newVerbs + }); + }; + submit = e => { this.props.createPermission({ name: this.state.name, diff --git a/scm-ui/src/repos/permissions/containers/Permissions.js b/scm-ui/src/repos/permissions/containers/Permissions.js index dc723f55fb..a141c7ebe0 100644 --- a/scm-ui/src/repos/permissions/containers/Permissions.js +++ b/scm-ui/src/repos/permissions/containers/Permissions.js @@ -29,7 +29,7 @@ import type { PermissionCreateEntry } from "@scm-manager/ui-types"; import SinglePermission from "./SinglePermission"; -import CreatePermissionForm from "../components/CreatePermissionForm"; +import CreatePermissionForm from "./CreatePermissionForm"; import type { History } from "history"; import { getPermissionsLink } from "../../modules/repos"; import {