// @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 TypeSelector from "../components/TypeSelector"; import AdvancedPermissionsDialog from "./AdvancedPermissionsDialog"; type Props = { availablePermissions: AvailableRepositoryPermissions, submitForm: Permission => void, modifyPermission: (Permission, string, string) => void, permission: Permission, t: string => string, namespace: string, repoName: string, match: any, history: History, loading: boolean, deletePermission: (Permission, string, 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 { availablePermissions, loading, namespace, repoName } = this.props; const availableRoleNames = availablePermissions.availableRoles.map( r => r.name ); const typeSelector = this.props.permission._links && this.props.permission._links.update ? (