mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-11 07:55:47 +01:00
use only one reset state for all permissions
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user