From a31914f7ca460c6c5e7a5b025eb0874bc49d1214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 15:45:55 +0200 Subject: [PATCH] use only one reset state for all permissions --- scm-ui/src/modules/failure.js | 18 ++++++++++- scm-ui/src/modules/pending.js | 19 +++++++++++- .../src/permissions/containers/Permissions.js | 20 +++++++++++-- .../containers/SinglePermission.js | 30 +------------------ scm-ui/src/permissions/modules/permissions.js | 25 ++++++++-------- 5 files changed, 65 insertions(+), 47 deletions(-) diff --git a/scm-ui/src/modules/failure.js b/scm-ui/src/modules/failure.js index 67df22623b..49a48e7876 100644 --- a/scm-ui/src/modules/failure.js +++ b/scm-ui/src/modules/failure.js @@ -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; diff --git a/scm-ui/src/modules/pending.js b/scm-ui/src/modules/pending.js index e83345aee6..306d8a157a 100644 --- a/scm-ui/src/modules/pending.js +++ b/scm-ui/src/modules/pending.js @@ -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); } } } diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 53ccc4b84a..93409a47ad 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -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 { 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)); } }; }; diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 2b1c469f1e..a96788296f 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -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 { 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)); } }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 298a909aac..aa05f37fda 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -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 {