diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js index 8fc1da63e4..37f7bd92d6 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/ContentTypeCollapse/Collapse/index.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import { get } from 'lodash'; import PropTypes from 'prop-types'; import { Flex, Padded } from '@buffetjs/core'; @@ -9,7 +9,7 @@ import ConditionsButton from '../../ConditionsButton'; import HiddenAction from '../../HiddenAction'; import Wrapper from './Wrapper'; import RowLabel from '../../RowLabel'; -import { getCheckboxState } from '../../utils'; +import { getCheckboxState, removeConditionKeyFromData } from '../../utils'; const Collapse = ({ availableActions, isActive, isGrey, name, onClickToggle, pathToData }) => { const { modifiedData } = usePermissionsDataManager(); @@ -17,7 +17,14 @@ const Collapse = ({ availableActions, isActive, isGrey, name, onClickToggle, pat // This corresponds to the data related to the CT left checkboxe // modifiedData: { collectionTypes: { [ctuid]: {create: {fields: {f1: true} } } } } const mainData = get(modifiedData, pathToData.split('..'), {}); - const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(mainData); + const dataWithoutCondition = useMemo(() => { + return Object.keys(mainData).reduce((acc, current) => { + acc[current] = removeConditionKeyFromData(mainData[current]); + + return acc; + }, {}); + }, [mainData]); + const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition); return ( diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/GlobalActions/utils/getRowLabelCheckboxesState.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/GlobalActions/utils/getRowLabelCheckboxesState.js index d2d8d52027..2d1468dcb6 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/GlobalActions/utils/getRowLabelCheckboxesState.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/GlobalActions/utils/getRowLabelCheckboxesState.js @@ -1,5 +1,5 @@ import { get } from 'lodash'; -import { getCheckboxState } from '../../utils'; +import { getCheckboxState, removeConditionKeyFromData } from '../../utils'; const getCheckboxesState = (properties, modifiedData) => { const actionsIds = properties.map(({ actionId }) => actionId); @@ -8,7 +8,7 @@ const getCheckboxesState = (properties, modifiedData) => { Object.keys(modifiedData).forEach(ctUid => { const actionIdData = get(modifiedData, [ctUid, actionId], {}); - const actionIdState = { [ctUid]: actionIdData }; + const actionIdState = { [ctUid]: removeConditionKeyFromData(actionIdData) }; if (!acc[actionId]) { acc[actionId] = actionIdState; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/reducer.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/reducer.js index d3de1112c2..f15b8d6b1d 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/reducer.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/Permissions/reducer.js @@ -14,6 +14,10 @@ const initialState = { images: true, city: true, }, + conditions: { + 'admin::is-creator': false, + 'admin::has-same-role-as-creator': false, + }, }, 'content-manager.explorer.read': { fields: { @@ -23,6 +27,10 @@ const initialState = { images: true, city: true, }, + conditions: { + 'admin::is-creator': false, + 'admin::has-same-role-as-creator': false, + }, }, 'content-manager.explorer.update': { fields: { @@ -32,6 +40,10 @@ const initialState = { images: true, city: true, }, + conditions: { + 'admin::is-creator': false, + 'admin::has-same-role-as-creator': false, + }, }, }, restaurant: { @@ -86,6 +98,9 @@ const initialState = { const reducer = (state, action) => produce(state, draftState => { switch (action.type) { + case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': { + break; + } case 'ON_CHANGE_SIMPLE_CHECKBOX': { set(draftState, ['modifiedData', ...action.keys.split('..')], action.value); break; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/getCheckboxState.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/getCheckboxState.js index 72708195dd..843b458da2 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/getCheckboxState.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/getCheckboxState.js @@ -1,7 +1,10 @@ import createArrayOfValues from './createArrayOfValues'; +import removeConditionKeyFromData from './removeConditionKeyFromData'; -const getCheckboxState = data => { - const arrayOfValues = createArrayOfValues(data); +const getCheckboxState = dataObj => { + const dataWithoutCondition = removeConditionKeyFromData(dataObj); + + const arrayOfValues = createArrayOfValues(dataWithoutCondition); if (!arrayOfValues.length) { return { hasAllActionsSelected: false, hasSomeActionsSelected: false }; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/index.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/index.js index b78386af5f..b972a728f1 100644 --- a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/index.js +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/index.js @@ -1,2 +1,3 @@ export { default as getCheckboxState } from './getCheckboxState'; export { default as createArrayOfValues } from './createArrayOfValues'; +export { default as removeConditionKeyFromData } from './removeConditionKeyFromData'; diff --git a/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/removeConditionKeyFromData.js b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/removeConditionKeyFromData.js new file mode 100644 index 0000000000..bb05080e2d --- /dev/null +++ b/packages/strapi-admin/ee/admin/containers/Roles/CreatePage/utils/removeConditionKeyFromData.js @@ -0,0 +1,15 @@ +const removeConditionKeyFromData = obj => { + if (!obj) { + return null; + } + + return Object.keys(obj).reduce((acc, current) => { + if (current !== 'conditions') { + acc[current] = obj[current]; + } + + return acc; + }, {}); +}; + +export default removeConditionKeyFromData;