// @flow import React from "react"; import type { AvailableRepositoryPermissions, Permission } from "@scm-manager/ui-types"; import { translate } from "react-i18next"; import { modifyPermission, isModifyPermissionPending, deletePermission, isDeletePermissionPending, findMatchingRoleName } from "../modules/permissions"; import { connect } from "react-redux"; import type { History } from "history"; import { Button, Checkbox } from "@scm-manager/ui-components"; import DeletePermissionButton from "../components/buttons/DeletePermissionButton"; import RoleSelector from "../components/RoleSelector"; import AdvancedPermissionsDialog from "./AdvancedPermissionsDialog"; type Props = { availablePermissions: AvailableRepositoryPermissions, submitForm: Permission => void, modifyPermission: (permission: Permission, namespace: string, name: string) => void, permission: Permission, t: string => string, namespace: string, repoName: string, match: any, history: History, loading: boolean, deletePermission: (permission: Permission, namespace: string, name: string) => void, deleteLoading: boolean }; type State = { role: string, permission: Permission, showAdvancedDialog: boolean }; class SinglePermission extends React.Component { constructor(props: Props) { super(props); const defaultPermission = props.availablePermissions.availableRoles ? props.availablePermissions.availableRoles[0] : {}; this.state = { permission: { name: "", verbs: defaultPermission.verbs, groupPermission: false, _links: {} }, role: defaultPermission.name, showAdvancedDialog: false }; } componentDidMount() { const { availablePermissions, permission } = this.props; const matchingRole = findMatchingRoleName( availablePermissions, permission.verbs ); if (permission) { this.setState({ permission: { name: permission.name, verbs: permission.verbs, groupPermission: permission.groupPermission, _links: permission._links }, role: matchingRole }); } } deletePermission = () => { this.props.deletePermission( this.props.permission, this.props.namespace, this.props.repoName ); }; render() { const { role, permission, showAdvancedDialog } = this.state; const { t, availablePermissions, loading, namespace, repoName } = this.props; const availableRoleNames = availablePermissions.availableRoles.map( r => r.name ); const readOnly = !this.mayChangePermissions(); const roleSelector = readOnly ? ( {role} ) : ( ); const advancedDialg = showAdvancedDialog ? ( ) : null; return ( {permission.name} {roleSelector}