diff --git a/scm-ui/src/config/containers/Config.js b/scm-ui/src/config/containers/Config.js index 75f26003d7..8c5a3b1fcc 100644 --- a/scm-ui/src/config/containers/Config.js +++ b/scm-ui/src/config/containers/Config.js @@ -12,6 +12,7 @@ import { getLinks } from "../../modules/indexResource"; import GlobalConfig from "./GlobalConfig"; import RepositoryRoles from "../roles/containers/RepositoryRoles"; import SingleRepositoryRole from "../roles/containers/SingleRepositoryRole"; +import CreateRepositoryRole from "../roles/containers/CreateRepositoryRole"; type Props = { links: Links, @@ -65,7 +66,7 @@ class Config extends React.Component { /> } + render={() => } /> void +}; + +class CreateRepositoryRole extends React.Component { + //Callback after dispatch + repositoryRoleCreated = (role: Role) => { + const { history } = this.props; + history.push("/role/" + role.name); + }; + + createRepositoryRole = (role: Role) => { + this.props.addRole(this.props.repositoryRolesLink, role, () => + this.repositoryRoleCreated(role) + ); + }; + + render() { + return ( + <> + this.createRepositoryRole(role)} + /> + + ); + } +} + +const mapStateToProps = (state, ownProps) => { + const loading = isFetchVerbsPending(state); + const error = getFetchVerbsFailure(state); + const verbsLink = getRepositoryVerbsLink(state); + const repositoryRolesLink = getRepositoryRolesLink(state); + + return { + loading, + error, + verbsLink, + repositoryRolesLink + }; +}; + +const mapDispatchToProps = dispatch => { + return { + addRole: (link: string, role: Role) => { + dispatch(createRole(link, role)); + } + }; +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(translate("roles")(CreateRepositoryRole)); diff --git a/scm-ui/src/config/roles/containers/RepositoryRoleForm.js b/scm-ui/src/config/roles/containers/RepositoryRoleForm.js index 20f3faa713..0e0065ce16 100644 --- a/scm-ui/src/config/roles/containers/RepositoryRoleForm.js +++ b/scm-ui/src/config/roles/containers/RepositoryRoleForm.js @@ -20,13 +20,14 @@ type Props = { disabled: boolean, availableVerbs: string[], verbsLink: string, + submitForm: Role => void, // context objects t: string => string, // dispatch functions - fetchAvailableVerbs: (link: string) => void, - addRole: (link: string, role: Role) => void + fetchAvailableVerbs: (link: string) => void + // addRole: (link: string, role: Role) => void }; type State = { @@ -93,7 +94,7 @@ class RepositoryRoleForm extends React.Component { submit = (event: Event) => { event.preventDefault(); if (this.isValid()) { - this.props.addRole(this.props.repositoryRolesLink, this.state.role) + this.props.submitForm(this.state.role) } }; @@ -122,7 +123,7 @@ class RepositoryRoleForm extends React.Component { label={t("roles.create.name")} onChange={this.handleNameChange} value={role.name ? role.name : ""} - disabled={!!role.name || disabled} + disabled={disabled} /> @@ -163,9 +164,9 @@ const mapDispatchToProps = dispatch => { fetchAvailableVerbs: (link: string) => { dispatch(fetchAvailableVerbs(link)); }, - addRole: (link: string, role: Role) => { - createRole(link, role) - } + // addRole: (link: string, role: Role) => { + // createRole(link, role) + // } }; }; diff --git a/scm-ui/src/config/roles/containers/SingleRepositoryRole.js b/scm-ui/src/config/roles/containers/SingleRepositoryRole.js index e1aa171152..f39d55ab77 100644 --- a/scm-ui/src/config/roles/containers/SingleRepositoryRole.js +++ b/scm-ui/src/config/roles/containers/SingleRepositoryRole.js @@ -21,6 +21,7 @@ type Props = { loading: boolean, error: Error, repositoryRolesLink: string, + disabled: boolean, // dispatcher function fetchRoleByName: (string, string) => void,