fix fetching available_repository_roles & available_repository_verbs

This commit is contained in:
Eduard Heimbuch
2019-05-13 15:44:43 +02:00
parent fad50b7319
commit 623e32809b
5 changed files with 99 additions and 41 deletions

View File

@@ -10,7 +10,7 @@ import {
} from "@scm-manager/ui-components";
import RoleSelector from "../components/RoleSelector";
import type {
AvailableRepositoryPermissions,
RepositoryRole,
PermissionCollection,
PermissionCreateEntry,
SelectValue
@@ -21,7 +21,8 @@ import AdvancedPermissionsDialog from "./AdvancedPermissionsDialog";
type Props = {
t: string => string,
availablePermissions: AvailableRepositoryPermissions,
availableRoles: RepositoryRole[],
availableVerbs: string[],
createPermission: (permission: PermissionCreateEntry) => void,
loading: boolean,
currentPermissions: PermissionCollection,
@@ -44,7 +45,7 @@ class CreatePermissionForm extends React.Component<Props, State> {
this.state = {
name: "",
verbs: props.availablePermissions.availableRoles[0].verbs,
verbs: props.availableRoles[0].verbs,
groupPermission: false,
valid: true,
value: undefined,
@@ -132,18 +133,18 @@ class CreatePermissionForm extends React.Component<Props, State> {
};
render() {
const { t, availablePermissions, loading } = this.props;
const { t, availableRoles, availableVerbs, loading } = this.props;
const { verbs, showAdvancedDialog } = this.state;
const availableRoleNames = availablePermissions.availableRoles.map(
const availableRoleNames = availableRoles.map(
r => r.name
);
const matchingRole = findMatchingRoleName(availablePermissions, verbs);
const matchingRole = findMatchingRoleName(availableRoles, verbs);
const advancedDialog = showAdvancedDialog ? (
<AdvancedPermissionsDialog
availableVerbs={availablePermissions.availableVerbs}
availableVerbs={availableVerbs}
selectedVerbs={verbs}
onClose={this.closeAdvancedPermissionsDialog}
onSubmit={this.submitAdvancedPermissionsDialog}
@@ -246,7 +247,7 @@ class CreatePermissionForm extends React.Component<Props, State> {
removeState = () => {
this.setState({
name: "",
verbs: this.props.availablePermissions.availableRoles[0].verbs,
verbs: this.props.availableRoles[0].verbs,
valid: true,
value: undefined
});
@@ -263,7 +264,7 @@ class CreatePermissionForm extends React.Component<Props, State> {
};
findAvailableRole = (roleName: string) => {
return this.props.availablePermissions.availableRoles.find(
return this.props.availableRoles.find(
role => role.name === roleName
);
};

View File

@@ -19,7 +19,7 @@ import {
getDeletePermissionsFailure,
getModifyPermissionsFailure,
modifyPermissionReset,
deletePermissionReset
deletePermissionReset, getAvailableRepositoryRoles, getAvailableRepositoryVerbs
} from "../modules/permissions";
import {
Loading,
@@ -28,22 +28,23 @@ import {
LabelWithHelpIcon
} from "@scm-manager/ui-components";
import type {
AvailableRepositoryPermissions,
Permission,
PermissionCollection,
PermissionCreateEntry
PermissionCreateEntry,
RepositoryRole
} from "@scm-manager/ui-types";
import SinglePermission from "./SinglePermission";
import CreatePermissionForm from "./CreatePermissionForm";
import type { History } from "history";
import { getPermissionsLink } from "../../modules/repos";
import {
getGroupAutoCompleteLink,
getGroupAutoCompleteLink, getRepositoryRolesLink, getRepositoryVerbsLink,
getUserAutoCompleteLink
} from "../../../modules/indexResource";
type Props = {
availablePermissions: AvailableRepositoryPermissions,
availableRepositoryRoles: RepositoryRole[],
availableVerbs: string[],
namespace: string,
repoName: string,
loading: boolean,
@@ -51,6 +52,8 @@ type Props = {
permissions: PermissionCollection,
hasPermissionToCreate: boolean,
loadingCreatePermission: boolean,
repositoryRolesLink: string,
repositoryVerbsLink: string,
permissionsLink: string,
groupAutoCompleteLink: string,
userAutoCompleteLink: string,
@@ -85,13 +88,15 @@ class Permissions extends React.Component<Props> {
modifyPermissionReset,
createPermissionReset,
deletePermissionReset,
permissionsLink
permissionsLink,
repositoryRolesLink,
repositoryVerbsLink
} = this.props;
createPermissionReset(namespace, repoName);
modifyPermissionReset(namespace, repoName);
deletePermissionReset(namespace, repoName);
fetchAvailablePermissionsIfNeeded();
fetchAvailablePermissionsIfNeeded(repositoryRolesLink, repositoryVerbsLink);
fetchPermissions(permissionsLink, namespace, repoName);
}
@@ -107,6 +112,8 @@ class Permissions extends React.Component<Props> {
render() {
const {
availablePermissions,
availableRepositoryRoles,
availableVerbs,
loading,
error,
permissions,
@@ -134,7 +141,8 @@ class Permissions extends React.Component<Props> {
const createPermissionForm = hasPermissionToCreate ? (
<CreatePermissionForm
availablePermissions={availablePermissions}
availableRoles={availableRepositoryRoles}
availableVerbs={availableVerbs}
createPermission={permission => this.createPermission(permission)}
loading={loadingCreatePermission}
currentPermissions={permissions}
@@ -174,7 +182,8 @@ class Permissions extends React.Component<Props> {
{permissions.map(permission => {
return (
<SinglePermission
availablePermissions={availablePermissions}
availableRepositoryRoles={availableRepositoryRoles}
availableRepositoryVerbs={availableVerbs}
key={permission.name + permission.groupPermission.toString()}
namespace={namespace}
repoName={repoName}
@@ -209,14 +218,23 @@ const mapStateToProps = (state, ownProps) => {
repoName
);
const hasPermissionToCreate = hasCreatePermission(state, namespace, repoName);
const repositoryRolesLink = getRepositoryRolesLink(state);
const repositoryVerbsLink = getRepositoryVerbsLink(state);
const permissionsLink = getPermissionsLink(state, namespace, repoName);
const groupAutoCompleteLink = getGroupAutoCompleteLink(state);
const userAutoCompleteLink = getUserAutoCompleteLink(state);
const availablePermissions = getAvailablePermissions(state);
const availableRepositoryRoles = getAvailableRepositoryRoles(state);
const availableVerbs = getAvailableRepositoryVerbs(state);
return {
availablePermissions,
availableRepositoryRoles,
availableVerbs,
namespace,
repoName,
repositoryRolesLink,
repositoryVerbsLink,
error,
loading,
permissions,
@@ -233,8 +251,8 @@ const mapDispatchToProps = dispatch => {
fetchPermissions: (link: string, namespace: string, repoName: string) => {
dispatch(fetchPermissions(link, namespace, repoName));
},
fetchAvailablePermissionsIfNeeded: () => {
dispatch(fetchAvailablePermissionsIfNeeded());
fetchAvailablePermissionsIfNeeded: (repositoryRolesLink: string, repositoryVerbsLink: string) => {
dispatch(fetchAvailablePermissionsIfNeeded(repositoryRolesLink, repositoryVerbsLink));
},
createPermission: (
link: string,

View File

@@ -1,7 +1,7 @@
// @flow
import React from "react";
import type {
AvailableRepositoryPermissions,
RepositoryRole,
Permission
} from "@scm-manager/ui-types";
import { translate } from "react-i18next";
@@ -22,7 +22,8 @@ import classNames from "classnames";
import injectSheet from "react-jss";
type Props = {
availablePermissions: AvailableRepositoryPermissions,
availableRepositoryRoles: RepositoryRole[],
availableRepositoryVerbs: string[],
submitForm: Permission => void,
modifyPermission: (
permission: Permission,
@@ -68,8 +69,8 @@ class SinglePermission extends React.Component<Props, State> {
constructor(props: Props) {
super(props);
const defaultPermission = props.availablePermissions.availableRoles
? props.availablePermissions.availableRoles[0]
const defaultPermission = props.availableRoles
? props.availableRoles[0]
: {};
this.state = {
@@ -85,10 +86,10 @@ class SinglePermission extends React.Component<Props, State> {
}
componentDidMount() {
const { availablePermissions, permission } = this.props;
const { availableRepositoryRoles, permission } = this.props;
const matchingRole = findMatchingRoleName(
availablePermissions,
availableRepositoryRoles,
permission.verbs
);
@@ -117,13 +118,14 @@ class SinglePermission extends React.Component<Props, State> {
const { role, permission, showAdvancedDialog } = this.state;
const {
t,
availablePermissions,
availableRepositoryRoles,
availableRepositoryVerbs,
loading,
namespace,
repoName,
classes
} = this.props;
const availableRoleNames = availablePermissions.availableRoles.map(
const availableRoleNames = !!availableRepositoryRoles && availableRepositoryRoles.map(
r => r.name
);
const readOnly = !this.mayChangePermissions();
@@ -143,7 +145,7 @@ class SinglePermission extends React.Component<Props, State> {
const advancedDialg = showAdvancedDialog ? (
<AdvancedPermissionsDialog
readOnly={readOnly}
availableVerbs={availablePermissions.availableVerbs}
availableVerbs={availableRepositoryVerbs}
selectedVerbs={permission.verbs}
onClose={this.closeAdvancedPermissionsDialog}
onSubmit={this.submitAdvancedPermissionsDialog}
@@ -198,7 +200,7 @@ class SinglePermission extends React.Component<Props, State> {
submitAdvancedPermissionsDialog = (newVerbs: string[]) => {
const { permission } = this.state;
const newRole = findMatchingRoleName(
this.props.availablePermissions,
this.props.availableRoles,
newVerbs
);
this.setState(
@@ -226,7 +228,8 @@ class SinglePermission extends React.Component<Props, State> {
};
findAvailableRole = (roleName: string) => {
return this.props.availablePermissions.availableRoles.find(
const { availableRepositoryRoles } = this.props;
return availableRepositoryRoles.find(
role => role.name === roleName
);
};