use only one reset state for all permissions

This commit is contained in:
Maren Süwer
2018-09-11 15:45:55 +02:00
parent e6253c47e1
commit a31914f7ca
5 changed files with 65 additions and 47 deletions

View File

@@ -13,6 +13,20 @@ function extractIdentifierFromFailure(action: Action) {
return identifier;
}
function removeAllEntriesOfIdentifierFromState(
state: Object,
payload: any,
identifier: string
) {
const newState = {};
for (let failureType in state) {
if (failureType !== identifier && !failureType.startsWith(identifier)) {
newState[failureType] = state[failureType];
}
}
return newState;
}
function removeFromState(state: Object, identifier: string) {
const newState = {};
for (let failureType in state) {
@@ -47,7 +61,9 @@ export default function reducer(
if (action.itemId) {
identifier += "/" + action.itemId;
}
return removeFromState(state, identifier);
if (action.payload)
return removeAllEntriesOfIdentifierFromState(state, action.payload, identifier);
else return removeFromState(state, identifier);
}
}
return state;

View File

@@ -19,6 +19,20 @@ function removeFromState(state: Object, identifier: string) {
return newState;
}
function removeAllEntriesOfIdentifierFromState(
state: Object,
payload: any,
identifier: string
) {
const newState = {};
for (let childType in state) {
if (childType !== identifier && !childType.startsWith(identifier)) {
newState[childType] = state[childType];
}
}
return newState;
}
function extractIdentifierFromPending(action: Action) {
const type = action.type;
let identifier = type.substring(0, type.length - PENDING_SUFFIX.length);
@@ -48,7 +62,10 @@ export default function reducer(
if (action.itemId) {
identifier += "/" + action.itemId;
}
return removeFromState(state, identifier);
if (action.payload)
return removeAllEntriesOfIdentifierFromState(state, action.payload, identifier);
else
return removeFromState(state, identifier);
}
}
}

View File

@@ -12,7 +12,10 @@ import {
isCreatePermissionPending,
getCreatePermissionFailure,
createPermissionReset,
getDeletePermissionsFailure, getModifyPermissionsFailure
getDeletePermissionsFailure,
getModifyPermissionsFailure,
modifyPermissionReset,
deletePermissionReset
} from "../modules/permissions";
import { Loading, ErrorPage } from "@scm-manager/ui-components";
import type {
@@ -42,7 +45,8 @@ type Props = {
callback?: () => void
) => void,
createPermissionReset: (string, string) => void,
modifyPermissionReset: (string, string) => void,
deletePermissionReset: (string, string) => void,
// context props
t: string => string,
match: any,
@@ -55,10 +59,14 @@ class Permissions extends React.Component<Props> {
fetchPermissions,
namespace,
repoName,
createPermissionReset
modifyPermissionReset,
createPermissionReset,
deletePermissionReset
} = this.props;
createPermissionReset(namespace, repoName);
modifyPermissionReset(namespace, repoName);
deletePermissionReset(namespace, repoName);
fetchPermissions(namespace, repoName);
}
@@ -174,6 +182,12 @@ const mapDispatchToProps = dispatch => {
},
createPermissionReset: (namespace: string, repoName: string) => {
dispatch(createPermissionReset(namespace, repoName));
},
modifyPermissionReset: (namespace: string, repoName: string) => {
dispatch(modifyPermissionReset(namespace, repoName));
},
deletePermissionReset: (namespace: string, repoName: string) => {
dispatch(deletePermissionReset(namespace, repoName));
}
};
};

View File

@@ -5,10 +5,8 @@ import { translate } from "react-i18next";
import {
modifyPermission,
isModifyPermissionPending,
modifyPermissionReset,
deletePermission,
isDeletePermissionPending,
deletePermissionReset
isDeletePermissionPending
} from "../modules/permissions";
import { connect } from "react-redux";
import type { History } from "history";
@@ -26,8 +24,6 @@ type Props = {
match: any,
history: History,
loading: boolean,
permissionReset: (string, string, string) => void,
deletePermissionReset: (string, string, string) => void,
deletePermission: (Permission, string, string) => void,
deleteLoading: boolean
};
@@ -52,16 +48,6 @@ class SinglePermission extends React.Component<Props, State> {
componentDidMount() {
const { permission } = this.props;
this.props.permissionReset(
this.props.namespace,
this.props.repoName,
permission.name
);
this.props.deletePermissionReset(
this.props.namespace,
this.props.repoName,
permission.name
);
if (permission) {
this.setState({
permission: {
@@ -175,26 +161,12 @@ const mapDispatchToProps = dispatch => {
) => {
dispatch(modifyPermission(permission, namespace, repoName));
},
permissionReset: (
namespace: string,
repoName: string,
permissionname: string
) => {
dispatch(modifyPermissionReset(namespace, repoName, permissionname));
},
deletePermission: (
permission: Permission,
namespace: string,
repoName: string
) => {
dispatch(deletePermission(permission, namespace, repoName));
},
deletePermissionReset: (
namespace: string,
repoName: string,
permissionname: string
) => {
dispatch(deletePermissionReset(namespace, repoName, permissionname));
}
};
};

View File

@@ -206,14 +206,14 @@ function newPermissions(
}
}
export function modifyPermissionReset(
namespace: string,
repoName: string,
permissionname: string
) {
export function modifyPermissionReset(namespace: string, repoName: string) {
return {
type: MODIFY_PERMISSION_RESET,
itemId: namespace + "/" + repoName + "/" + permissionname
payload: {
namespace,
repoName
},
itemId: namespace + "/" + repoName
};
}
@@ -377,14 +377,14 @@ export function deletePermissionFailure(
};
}
export function deletePermissionReset(
namespace: string,
repoName: string,
permissionname: string
) {
export function deletePermissionReset(namespace: string, repoName: string) {
return {
type: DELETE_PERMISSION_RESET,
itemId: namespace + "/" + repoName + "/" + permissionname
payload: {
namespace,
repoName
},
itemId: namespace + "/" + repoName
};
}
function deletePermissionFromState(
@@ -408,7 +408,6 @@ export default function reducer(
if (!action.payload) {
return state;
}
switch (action.type) {
case FETCH_PERMISSIONS_SUCCESS:
return {