From e1012e5b51d0ee95c8bcdb40c83ee0a5df44d6f1 Mon Sep 17 00:00:00 2001 From: Bassel Kanso Date: Fri, 15 Jul 2022 18:21:27 +0300 Subject: [PATCH] create getActionState --- .../pages/ApiTokens/EditView/data.js | 4 +- .../pages/ApiTokens/EditView/index.js | 80 ++++++++----------- .../EditView/utils/getActionsState.js | 13 +++ .../pages/ApiTokens/EditView/utils/index.js | 6 ++ .../utils/tests/getActionsState.test.js | 33 ++++++++ 5 files changed, 89 insertions(+), 47 deletions(-) create mode 100644 packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/getActionsState.js create mode 100644 packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/index.js create mode 100644 packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/tests/getActionsState.test.js diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/data.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/data.js index 7119636860..d69899fda1 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/data.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/data.js @@ -1,8 +1,8 @@ export const permissions = { collectionTypes: { 'api::category': { - create: true, - findOne: true, + create: false, + findOne: false, find: false, update: false, delete: false, diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js index e2307d0662..6d65243a44 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js @@ -29,8 +29,7 @@ import { useRouteMatch, useHistory } from 'react-router-dom'; import { useQuery } from 'react-query'; import { formatAPIErrors } from '../../../../../utils'; import { axiosInstance } from '../../../../../core/utils'; -import schema from './utils/schema'; -import getDateOfExpiration from './utils/getDateOfExpiration'; +import { getDateOfExpiration, schema, getActionsState } from './utils'; import LoadingView from './components/LoadingView'; import HeaderContentBox from './components/ContentBox'; import Permissions from './components/Permissions'; @@ -140,13 +139,23 @@ const ApiTokenCreateView = () => { const dataToCheck = { ...collectionTypes, ...singleTypes, ...custom }; - const areAllActionsSelected = Object.values(dataToCheck).every(actions => - Object.values(actions).every(action => action) - ); + const areAllActionsSelected = getActionsState(dataToCheck, true); return areAllActionsSelected; }, [state]); + const hasAllActionsNotSelected = useMemo(() => { + const { + modifiedData: { collectionTypes, singleTypes, custom }, + } = state; + + const dataToCheck = { ...collectionTypes, ...singleTypes, ...custom }; + + const areAllActionsNotSelected = getActionsState(dataToCheck, false); + + return areAllActionsNotSelected; + }, [state]); + const hasReadOnlyActionsSelected = useMemo(() => { const { modifiedData: { collectionTypes, singleTypes, custom }, @@ -154,15 +163,7 @@ const ApiTokenCreateView = () => { const dataToCheck = { ...collectionTypes, ...singleTypes, ...custom }; - const areAllActionsReadOnly = Object.values(dataToCheck).every(actions => - Object.values(actions).every(action => { - if (action === 'find' || action === 'findOne') { - return actions[action]; - } - - return actions[action] === false; - }) - ); + const areAllActionsReadOnly = getActionsState(dataToCheck, false, ['find', 'findOne']); return areAllActionsReadOnly; }, [state]); @@ -172,8 +173,10 @@ const ApiTokenCreateView = () => { if (hasReadOnlyActionsSelected) return 'read-only'; + if (hasAllActionsNotSelected) return null; + return 'custom'; - }, [hasAllActionsSelected, hasReadOnlyActionsSelected]); + }, [hasAllActionsSelected, hasReadOnlyActionsSelected, hasAllActionsNotSelected]); const handleChangeCheckbox = ({ target: { name, value } }) => { dispatch({ @@ -191,41 +194,27 @@ const ApiTokenCreateView = () => { }); const handleChangeSelectApiTokenType = ({ target: { value } }) => { - const { - modifiedData: { collectionTypes, singleTypes }, - } = state; + const { modifiedData } = state; if (value === 'full-access') { - Object.keys(collectionTypes).forEach(collectionType => { - dispatch({ - type: 'ON_CHANGE_SELECT_ALL', - keys: ['collectionTypes', collectionType], - value: true, - }); - }); - - Object.keys(singleTypes).forEach(singleType => { - dispatch({ - type: 'ON_CHANGE_SELECT_ALL', - keys: ['singleTypes', singleType], - value: true, + Object.keys(modifiedData).forEach(contentTypes => { + Object.keys(modifiedData[contentTypes]).forEach(contentType => { + dispatch({ + type: 'ON_CHANGE_SELECT_ALL', + keys: [contentTypes, contentType], + value: true, + }); }); }); } if (value === 'read-only') { - Object.keys(collectionTypes).forEach(collectionType => { - dispatch({ - type: 'ON_CHANGE_READ_ONLY', - keys: ['collectionTypes', collectionType], - value: false, - }); - }); - - Object.keys(singleTypes).forEach(singleType => { - dispatch({ - type: 'ON_CHANGE_READ_ONLY', - keys: ['singleTypes', singleType], - value: false, + Object.keys(modifiedData).forEach(contentTypes => { + Object.keys(modifiedData[contentTypes]).forEach(contentType => { + dispatch({ + type: 'ON_CHANGE_READ_ONLY', + keys: [contentTypes, contentType], + value: false, + }); }); }); } @@ -253,7 +242,7 @@ const ApiTokenCreateView = () => { initialValues={{ name: apiToken?.name || '', description: apiToken?.description || '', - type: apiToken?.type || 'read-only', + type: apiToken?.type, duration: apiToken?.duration, }} onSubmit={handleSubmit} @@ -440,6 +429,7 @@ const ApiTokenCreateView = () => { handleChangeSelectApiTokenType({ target: { value } }); handleChange({ target: { name: 'type', value } }); }} + placeholder="Select" required >