// @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 } from "@scm-manager/ui-components"; import DeletePermissionButton from "../components/buttons/DeletePermissionButton"; import RoleSelector from "../components/RoleSelector"; import AdvancedPermissionsDialog from "./AdvancedPermissionsDialog"; import classNames from "classnames"; import injectSheet from "react-jss"; 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, classes: any }; type State = { role: string, permission: Permission, showAdvancedDialog: boolean }; const styles = { iconColor: { color: "#9a9a9a" }, centerMiddle: { display: "table-cell", verticalAlign: "middle !important" }, columnWidth: { width: "100%" } }; 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, classes } = this.props; const availableRoleNames = availablePermissions.availableRoles.map( r => r.name ); const readOnly = !this.mayChangePermissions(); const roleSelector = readOnly ? ( {role} ) : ( ); const advancedDialg = showAdvancedDialog ? ( ) : null; const type = permission && permission.groupPermission ? t("permission.group") : t("permission.user"); const iconType = permission && permission.groupPermission ? ( ) : ( ); return ( {iconType} {permission.name} {roleSelector}