create Custom Repo Role

This commit is contained in:
Eduard Heimbuch
2019-05-15 14:48:12 +02:00
parent b4eb6e94da
commit 77d8a3ad21
4 changed files with 86 additions and 8 deletions

View File

@@ -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<Props> {
/>
<Route
path={`${url}/roles/create`}
render={() => <CreatePermissionRole />}
render={() => <CreateRepositoryRole disabled={false} />}
/>
<ExtensionPoint
name="config.route"

View File

@@ -0,0 +1,75 @@
// @flow
import React from "react";
import RepositoryRoleForm from "./RepositoryRoleForm";
import { connect } from "react-redux";
import { translate } from "react-i18next";
import {
createRole,
getFetchVerbsFailure,
isFetchVerbsPending
} from "../modules/roles";
import type { Role } from "@scm-manager/ui-types";
import {
getRepositoryRolesLink,
getRepositoryVerbsLink
} from "../../../modules/indexResource";
type Props = {
disabled: boolean,
repositoryRolesLink: string,
//dispatch function
addRole: (link: string, role: Role) => void
};
class CreateRepositoryRole extends React.Component<Props> {
//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 (
<>
<RepositoryRoleForm
disabled={this.props.disabled}
submitForm={role => 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));

View File

@@ -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<Props, State> {
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<Props, State> {
label={t("roles.create.name")}
onChange={this.handleNameChange}
value={role.name ? role.name : ""}
disabled={!!role.name || disabled}
disabled={disabled}
/>
</div>
</div>
@@ -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)
// }
};
};

View File

@@ -21,6 +21,7 @@ type Props = {
loading: boolean,
error: Error,
repositoryRolesLink: string,
disabled: boolean,
// dispatcher function
fetchRoleByName: (string, string) => void,