// @flow import React from "react"; import { translate } from "react-i18next"; import { Autocomplete, SubmitButton } from "@scm-manager/ui-components"; import TypeSelector from "./TypeSelector"; import type { PermissionCollection, PermissionCreateEntry, SelectValue } from "@scm-manager/ui-types"; import * as validator from "./permissionValidation"; type Props = { t: string => string, createPermission: (permission: PermissionCreateEntry) => void, loading: boolean, currentPermissions: PermissionCollection, groupAutoCompleteLink: string, userAutoCompleteLink: string }; type State = { name: string, type: string, groupPermission: boolean, valid: boolean, value?: SelectValue }; class CreatePermissionForm extends React.Component { constructor(props: Props) { super(props); this.state = { name: "", type: "READ", groupPermission: false, valid: true, value: undefined }; } permissionScopeChanged = event => { const groupPermission = event.target.value === "GROUP_PERMISSION"; this.setState({ groupPermission: groupPermission, valid: validator.isPermissionValid( this.state.name, groupPermission, this.props.currentPermissions ) }); this.setState({ ...this.state, groupPermission }); }; loadUserAutocompletion = (inputValue: string) => { return this.loadAutocompletion(this.props.userAutoCompleteLink, inputValue); }; loadGroupAutocompletion = (inputValue: string) => { return this.loadAutocompletion( this.props.groupAutoCompleteLink, inputValue ); }; loadAutocompletion(url: string, inputValue: string) { const link = url + "?q="; return fetch(link + inputValue) .then(response => response.json()) .then(json => { return json.map(element => { const label = element.displayName ? `${element.displayName} (${element.id})` : element.id; return { value: element, label }; }); }); } renderAutocompletionField = () => { const { t } = this.props; if (this.state.groupPermission) { return ( ); } return ( ); }; groupOrUserSelected = (value: SelectValue) => { this.setState({ value, name: value.value.id, valid: validator.isPermissionValid( value.value.id, this.state.groupPermission, this.props.currentPermissions ) }); }; render() { const { t, loading } = this.props; const { type } = this.state; return (

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

{this.renderAutocompletionField()}
); } submit = e => { this.props.createPermission({ name: this.state.name, type: this.state.type, groupPermission: this.state.groupPermission }); this.removeState(); e.preventDefault(); }; removeState = () => { this.setState({ name: "", type: "READ", groupPermission: false, valid: true }); }; handleTypeChange = (type: string) => { this.setState({ type: type }); }; } export default translate("repos")(CreatePermissionForm);