diff --git a/packages/strapi-admin/admin/src/containers/Admin/actions.js b/packages/strapi-admin/admin/src/containers/Admin/actions.js index d44bc8be5b..83eae199d6 100644 --- a/packages/strapi-admin/admin/src/containers/Admin/actions.js +++ b/packages/strapi-admin/admin/src/containers/Admin/actions.js @@ -4,13 +4,7 @@ * */ -import { - GET_STRAPI_LATEST_RELEASE_SUCCEEDED, - GET_USER_PERMISSIONS, - GET_USER_PERMISSIONS_ERROR, - GET_USER_PERMISSIONS_SUCCEEDED, - SET_APP_ERROR, -} from './constants'; +import { GET_STRAPI_LATEST_RELEASE_SUCCEEDED, SET_APP_ERROR } from './constants'; export function getStrapiLatestReleaseSucceeded(latestStrapiReleaseTag, shouldUpdateStrapi) { return { @@ -20,26 +14,6 @@ export function getStrapiLatestReleaseSucceeded(latestStrapiReleaseTag, shouldUp }; } -export function getUserPermissions() { - return { - type: GET_USER_PERMISSIONS, - }; -} - -export function getUserPermissionsError(error) { - return { - type: GET_USER_PERMISSIONS_ERROR, - error, - }; -} - -export function getUserPermissionsSucceeded(data) { - return { - type: GET_USER_PERMISSIONS_SUCCEEDED, - data, - }; -} - export function setAppError() { return { type: SET_APP_ERROR, diff --git a/packages/strapi-admin/admin/src/containers/Admin/constants.js b/packages/strapi-admin/admin/src/containers/Admin/constants.js index dca1515264..b23f5e1750 100644 --- a/packages/strapi-admin/admin/src/containers/Admin/constants.js +++ b/packages/strapi-admin/admin/src/containers/Admin/constants.js @@ -7,6 +7,3 @@ export const SET_APP_ERROR = 'StrapiAdmin/Admin/SET_APP_ERROR'; export const GET_STRAPI_LATEST_RELEASE_SUCCEEDED = 'StrapiAdmin/Admin/GET_STRAPI_LATEST_RELEASE_SUCCEEDED'; -export const GET_USER_PERMISSIONS = 'StrapiAdmin/Admin/GET_USER_PERMISSIONS'; -export const GET_USER_PERMISSIONS_ERROR = 'StrapiAdmin/Admin/GET_USER_PERMISSIONS_ERROR'; -export const GET_USER_PERMISSIONS_SUCCEEDED = 'StrapiAdmin/Admin/GET_USER_PERMISSIONS_SUCCEEDED'; diff --git a/packages/strapi-admin/admin/src/containers/Admin/index.js b/packages/strapi-admin/admin/src/containers/Admin/index.js index 6696983a68..0624111160 100644 --- a/packages/strapi-admin/admin/src/containers/Admin/index.js +++ b/packages/strapi-admin/admin/src/containers/Admin/index.js @@ -19,7 +19,6 @@ import { GlobalContextProvider, LoadingIndicatorPage, OverlayBlocker, - UserProvider, CheckPagePermissions, request, } from 'strapi-helper-plugin'; @@ -31,14 +30,14 @@ import Header from '../../components/Header/index'; import NavTopRightWrapper from '../../components/NavTopRightWrapper'; import LeftMenu from '../LeftMenu'; import InstalledPluginsPage from '../InstalledPluginsPage'; - import HomePage from '../HomePage'; import MarketplacePage from '../MarketplacePage'; import NotFoundPage from '../NotFoundPage'; import OnboardingVideos from '../Onboarding'; -import SettingsPage from '../SettingsPage'; +import PermissionsManager from '../PermissionsManager'; import PluginDispatcher from '../PluginDispatcher'; import ProfilePage from '../ProfilePage'; +import SettingsPage from '../SettingsPage'; import Logout from './Logout'; import { disableGlobalOverlayBlocker, @@ -47,13 +46,7 @@ import { updatePlugin, } from '../App/actions'; import makeSelecApp from '../App/selectors'; -import { - getStrapiLatestReleaseSucceeded, - getUserPermissions, - getUserPermissionsError, - getUserPermissionsSucceeded, - setAppError, -} from './actions'; +import { getStrapiLatestReleaseSucceeded, setAppError } from './actions'; import makeSelectAdmin from './selectors'; import Wrapper from './Wrapper'; import Content from './Content'; @@ -165,24 +158,6 @@ export class Admin extends React.Component { } }; - fetchUserPermissions = async (resetState = false) => { - const { getUserPermissions, getUserPermissionsError, getUserPermissionsSucceeded } = this.props; - - if (resetState) { - // Show a loader - getUserPermissions(); - } - - try { - const { data } = await request('/admin/users/me/permissions', { method: 'GET' }); - - getUserPermissionsSucceeded(data); - } catch (err) { - console.error(err); - getUserPermissionsError(err); - } - }; - hasApluginNotReady = props => { const { global: { plugins }, @@ -194,7 +169,6 @@ export class Admin extends React.Component { initApp = async () => { await this.fetchAppInfo(); await this.fetchStrapiLatestRelease(); - await this.fetchUserPermissions(true); }; /** @@ -233,7 +207,7 @@ export class Admin extends React.Component { render() { const { - admin: { isLoading, shouldUpdateStrapi, userPermissions }, + admin: { shouldUpdateStrapi }, global: { autoReload, blockApp, @@ -259,29 +233,23 @@ export class Admin extends React.Component { ); } - // Show a loader while permissions are being fetched - if (isLoading) { - return ; - } - return ( - - + + {SHOW_TUTORIALS && } - - + + ); } } @@ -343,17 +311,12 @@ Admin.defaultProps = { Admin.propTypes = { admin: PropTypes.shape({ appError: PropTypes.bool, - isLoading: PropTypes.bool, shouldUpdateStrapi: PropTypes.bool.isRequired, - userPermissions: PropTypes.array, }).isRequired, disableGlobalOverlayBlocker: PropTypes.func.isRequired, enableGlobalOverlayBlocker: PropTypes.func.isRequired, getInfosDataSucceeded: PropTypes.func.isRequired, getStrapiLatestReleaseSucceeded: PropTypes.func.isRequired, - getUserPermissions: PropTypes.func.isRequired, - getUserPermissionsError: PropTypes.func.isRequired, - getUserPermissionsSucceeded: PropTypes.func.isRequired, global: PropTypes.shape({ autoReload: PropTypes.bool, blockApp: PropTypes.bool, @@ -385,9 +348,6 @@ export function mapDispatchToProps(dispatch) { enableGlobalOverlayBlocker, getInfosDataSucceeded, getStrapiLatestReleaseSucceeded, - getUserPermissions, - getUserPermissionsError, - getUserPermissionsSucceeded, setAppError, updatePlugin, }, diff --git a/packages/strapi-admin/admin/src/containers/Admin/reducer.js b/packages/strapi-admin/admin/src/containers/Admin/reducer.js index fae68ebaba..d4f8d6959f 100644 --- a/packages/strapi-admin/admin/src/containers/Admin/reducer.js +++ b/packages/strapi-admin/admin/src/containers/Admin/reducer.js @@ -7,21 +7,13 @@ import produce from 'immer'; import packageJSON from '../../../../package.json'; -import { - GET_STRAPI_LATEST_RELEASE_SUCCEEDED, - GET_USER_PERMISSIONS, - GET_USER_PERMISSIONS_ERROR, - GET_USER_PERMISSIONS_SUCCEEDED, - SET_APP_ERROR, -} from './constants'; +import { GET_STRAPI_LATEST_RELEASE_SUCCEEDED, SET_APP_ERROR } from './constants'; const packageVersion = packageJSON.version; const initialState = { appError: false, - isLoading: true, latestStrapiReleaseTag: `v${packageVersion}`, shouldUpdateStrapi: false, - userPermissions: [], }; const reducer = (state = initialState, action) => @@ -33,21 +25,7 @@ const reducer = (state = initialState, action) => draftState.shouldUpdateStrapi = action.shouldUpdateStrapi; break; } - case GET_USER_PERMISSIONS: { - draftState.isLoading = true; - break; - } - case GET_USER_PERMISSIONS_ERROR: { - draftState.error = action.error; - draftState.isLoading = false; - break; - } - case GET_USER_PERMISSIONS_SUCCEEDED: { - draftState.isLoading = false; - draftState.userPermissions = action.data; - break; - } case SET_APP_ERROR: { draftState.appError = true; break; diff --git a/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js b/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js index a167a4fdee..b3215c2cac 100644 --- a/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js +++ b/packages/strapi-admin/admin/src/containers/Admin/tests/reducer.test.js @@ -1,12 +1,6 @@ import produce from 'immer'; import packageJSON from '../../../../../package.json'; -import { - setAppError, - getUserPermissions, - getUserPermissionsError, - getUserPermissionsSucceeded, - getStrapiLatestReleaseSucceeded, -} from '../actions'; +import { setAppError, getStrapiLatestReleaseSucceeded } from '../actions'; import adminReducer from '../reducer'; describe('adminReducer', () => { @@ -15,9 +9,7 @@ describe('adminReducer', () => { beforeEach(() => { state = { appError: false, - isLoading: true, latestStrapiReleaseTag: `v${packageJSON.version}`, - userPermissions: [], shouldUpdateStrapi: false, }; }); @@ -44,32 +36,4 @@ describe('adminReducer', () => { expect(adminReducer(state, setAppError())).toEqual(expected); }); - - it('should handle the getUserPermissions action correctly', () => { - const expected = produce(state, draft => { - draft.isLoading = true; - }); - - expect(adminReducer(state, getUserPermissions())).toEqual(expected); - }); - - it('should handle the getUserPermissionsError action correctly', () => { - const error = 'Error'; - const expected = produce(state, draft => { - draft.isLoading = false; - draft.error = error; - }); - - expect(adminReducer(state, getUserPermissionsError(error))).toEqual(expected); - }); - - it('should handle the getUserPermissionsSucceeded action correctly', () => { - const data = ['permission 1', 'permission 2']; - const expected = produce(state, draft => { - draft.isLoading = false; - draft.userPermissions = data; - }); - - expect(adminReducer(state, getUserPermissionsSucceeded(data))).toEqual(expected); - }); }); diff --git a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js index 61afeed016..f69aa8323c 100644 --- a/packages/strapi-admin/admin/src/containers/LeftMenu/index.js +++ b/packages/strapi-admin/admin/src/containers/LeftMenu/index.js @@ -32,7 +32,7 @@ import Wrapper from './Wrapper'; const LeftMenu = forwardRef(({ shouldUpdateStrapi, version, plugins }, ref) => { const location = useLocation(); - const permissions = useContext(UserContext); + const { userPermissions: permissions } = useContext(UserContext); const { menu: settingsMenu } = useSettingsMenu(true); // TODO: this needs to be added to the settings API in the v4 diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/actions.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/actions.js new file mode 100644 index 0000000000..d4af9867ec --- /dev/null +++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/actions.js @@ -0,0 +1,25 @@ +import { + GET_USER_PERMISSIONS, + GET_USER_PERMISSIONS_SUCCEEDED, + GET_USER_PERMISSIONS_ERROR, +} from './constants'; + +export function getUserPermissions() { + return { + type: GET_USER_PERMISSIONS, + }; +} + +export function getUserPermissionsError(error) { + return { + type: GET_USER_PERMISSIONS_ERROR, + error, + }; +} + +export function getUserPermissionsSucceeded(data) { + return { + type: GET_USER_PERMISSIONS_SUCCEEDED, + data, + }; +} diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/constants.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/constants.js new file mode 100644 index 0000000000..03d7c86e1c --- /dev/null +++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/constants.js @@ -0,0 +1,5 @@ +export const GET_USER_PERMISSIONS = 'StrapiAdmin/PermissionsManager/GET_USER_PERMISSIONS'; +export const GET_USER_PERMISSIONS_ERROR = + 'StrapiAdmin/PermissionsManager/GET_USER_PERMISSIONS_ERROR'; +export const GET_USER_PERMISSIONS_SUCCEEDED = + 'StrapiAdmin/PermissionsManager/GET_USER_PERMISSIONS_SUCCEEDED'; diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/index.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/index.js new file mode 100644 index 0000000000..46f9baa8f8 --- /dev/null +++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/index.js @@ -0,0 +1,49 @@ +import React, { useEffect } from 'react'; +import PropTypes from 'prop-types'; +import { useSelector, useDispatch } from 'react-redux'; +import { LoadingIndicatorPage, UserProvider, request } from 'strapi-helper-plugin'; +import { + getUserPermissions, + getUserPermissionsError, + getUserPermissionsSucceeded, +} from './actions'; + +const PermissionsManager = ({ children }) => { + const { isLoading, userPermissions } = useSelector(state => state.get('permissionsManager')); + + const dispatch = useDispatch(); + const fetchUserPermissions = async (resetState = false) => { + if (resetState) { + // Show a loader + dispatch(getUserPermissions()); + } + + try { + const { data } = await request('/admin/users/me/permissions', { method: 'GET' }); + + dispatch(getUserPermissionsSucceeded(data)); + } catch (err) { + console.error(err); + dispatch(getUserPermissionsError(err)); + } + }; + + useEffect(() => { + fetchUserPermissions(true); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + if (isLoading) { + return ; + } + + return {children}; +}; + +PermissionsManager.defaultProps = {}; + +PermissionsManager.propTypes = { + children: PropTypes.node.isRequired, +}; + +export default PermissionsManager; diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/reducer.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/reducer.js new file mode 100644 index 0000000000..dc1d6407a4 --- /dev/null +++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/reducer.js @@ -0,0 +1,66 @@ +/* + * + * PermissionsManager reducer + * The goal of this reducer is to provide + * the plugins with an access to the user's permissions + * in our middleware system + * + */ + +import produce from 'immer'; + +import { + GET_USER_PERMISSIONS, + GET_USER_PERMISSIONS_ERROR, + GET_USER_PERMISSIONS_SUCCEEDED, +} from './constants'; + +const initialState = { + isLoading: true, + userPermissions: [], + collectionTypesRelatedPermissions: {}, +}; + +const reducer = (state = initialState, action) => + // eslint-disable-next-line consistent-return + produce(state, draftState => { + switch (action.type) { + case GET_USER_PERMISSIONS: { + draftState.isLoading = true; + draftState.userPermissions = []; + draftState.collectionTypesRelatedPermissions = {}; + break; + } + + case GET_USER_PERMISSIONS_ERROR: { + draftState.error = action.error; + draftState.isLoading = false; + break; + } + case GET_USER_PERMISSIONS_SUCCEEDED: { + draftState.isLoading = false; + draftState.userPermissions = action.data; + draftState.collectionTypesRelatedPermissions = action.data + .filter(perm => perm.subject) + .reduce((acc, current) => { + const { subject, action } = current; + + if (!acc[subject]) { + acc[subject] = {}; + } + + acc[subject] = acc[subject][action] + ? { ...acc[subject], [action]: [...acc[subject][action], current] } + : { ...acc[subject], [action]: [current] }; + + return acc; + }, {}); + break; + } + default: + return state; + } + }); + +export default reducer; +export { initialState }; diff --git a/packages/strapi-admin/admin/src/containers/PermissionsManager/tests/reducer.test.js b/packages/strapi-admin/admin/src/containers/PermissionsManager/tests/reducer.test.js new file mode 100644 index 0000000000..214a4148bc --- /dev/null +++ b/packages/strapi-admin/admin/src/containers/PermissionsManager/tests/reducer.test.js @@ -0,0 +1,103 @@ +import produce from 'immer'; +import { + getUserPermissions, + getUserPermissionsError, + getUserPermissionsSucceeded, +} from '../actions'; +import permissionsManagerReducer from '../reducer'; + +describe('permissionsManagerReducer', () => { + let state; + + beforeEach(() => { + state = { + isLoading: true, + userPermissions: [], + collectionTypesRelatedPermissions: {}, + }; + }); + + it('returns the initial state', () => { + const expected = state; + + expect(permissionsManagerReducer(undefined, {})).toEqual(expected); + }); + + it('should handle the getUserPermissions action correctly', () => { + state.userPermissions = ['test']; + state.collectionTypesRelatedPermissions = null; + + const expected = produce(state, draft => { + draft.isLoading = true; + draft.userPermissions = []; + draft.collectionTypesRelatedPermissions = {}; + }); + + expect(permissionsManagerReducer(state, getUserPermissions())).toEqual(expected); + }); + + it('should handle the getUserPermissionsError action correctly', () => { + const error = 'Error'; + const expected = produce(state, draft => { + draft.isLoading = false; + draft.error = error; + }); + + expect(permissionsManagerReducer(state, getUserPermissionsError(error))).toEqual(expected); + }); + + it('should handle the getUserPermissionsSucceeded action correctly', () => { + const data = [ + { + action: 'create', + subject: 'address', + properties: { + fields: ['f1'], + }, + conditions: [], + }, + { + action: 'create', + subject: 'address', + properties: { + fields: ['f2'], + }, + conditions: [], + }, + { + action: 'tes', + subject: null, + properties: {}, + conditions: [], + }, + ]; + const expected = produce(state, draft => { + draft.isLoading = false; + draft.userPermissions = data; + draft.collectionTypesRelatedPermissions = { + address: { + create: [ + { + action: 'create', + subject: 'address', + properties: { + fields: ['f1'], + }, + conditions: [], + }, + { + action: 'create', + subject: 'address', + properties: { + fields: ['f2'], + }, + conditions: [], + }, + ], + }, + }; + }); + + expect(permissionsManagerReducer(state, getUserPermissionsSucceeded(data))).toEqual(expected); + }); +}); diff --git a/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js b/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js index 6e4d4713a8..0971fd35e1 100644 --- a/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js +++ b/packages/strapi-admin/admin/src/hooks/useSettingsMenu/index.js @@ -5,7 +5,7 @@ import reducer, { initialState } from './reducer'; import init from './init'; const useSettingsMenu = (noCheck = false) => { - const permissions = useContext(UserContext); + const { userPermissions: permissions } = useContext(UserContext); const { plugins } = useGlobalContext(); const [{ isLoading, menu }, dispatch] = useReducer(reducer, initialState, () => diff --git a/packages/strapi-admin/admin/src/reducers.js b/packages/strapi-admin/admin/src/reducers.js index c4582291ea..2c6fed0a5f 100644 --- a/packages/strapi-admin/admin/src/reducers.js +++ b/packages/strapi-admin/admin/src/reducers.js @@ -9,7 +9,7 @@ import adminReducer from './containers/Admin/reducer'; import languageProviderReducer from './containers/LanguageProvider/reducer'; import notificationProviderReducer from './containers/NotificationProvider/reducer'; import newNotificationReducer from './containers/NewNotification/reducer'; - +import permissionsManagerReducer from './containers/PermissionsManager/reducer'; /** * Creates the main reducer with the dynamically injected ones */ @@ -20,6 +20,7 @@ export default function createReducer(injectedReducers) { language: languageProviderReducer, notification: notificationProviderReducer, newNotification: newNotificationReducer, + permissionsManager: permissionsManagerReducer, ...injectedReducers, }); } diff --git a/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js b/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js index 92e2b72943..84b6e969c5 100644 --- a/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js +++ b/packages/strapi-helper-plugin/lib/src/components/CheckPagePermissions/index.js @@ -8,7 +8,8 @@ import LoadingIndicatorPage from '../LoadingIndicatorPage'; const CheckPagePermissions = ({ permissions, children }) => { const abortController = new AbortController(); const { signal } = abortController; - const userPermissions = useUser(); + const { userPermissions } = useUser(); + const [state, setState] = useState({ isLoading: true, canAccess: false }); const isMounted = useRef(true); diff --git a/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js b/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js index fd8a026ab8..48145923ca 100644 --- a/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js +++ b/packages/strapi-helper-plugin/lib/src/components/CheckPermissions/index.js @@ -8,7 +8,7 @@ import hasPermissions from '../../utils/hasPermissions'; // except that it does not handle redirections nor loading state const CheckPermissions = ({ permissions, children }) => { - const userPermissions = useUser(); + const { userPermissions } = useUser(); const [state, setState] = useState({ isLoading: true, canAccess: false }); const isMounted = useRef(true); const abortController = new AbortController(); diff --git a/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js b/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js index 5fab26dc90..03ae08ab5d 100644 --- a/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js +++ b/packages/strapi-helper-plugin/lib/src/hooks/useUserPermissions/index.js @@ -14,7 +14,7 @@ const useUserPermissions = pluginPermissions => { const permissionNames = useMemo(() => { return Object.keys(pluginPermissions); }, [pluginPermissions]); - const currentUserPermissions = useUser(); + const { userPermissions: currentUserPermissions } = useUser(); const [state, dispatch] = useReducer(reducer, {}, () => init(permissionNames)); const checkPermissionsRef = useRef(); const generateArrayOfPromisesRef = useRef(); diff --git a/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js b/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js index af5b8af990..234f120ea1 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js @@ -11,7 +11,7 @@ const DynamicComponent = ({ componentUid, friendlyName, icon, setIsOverDynamicZo const [isOver, setIsOver] = useState(false); const [{ isLoading, canAccess }, setState] = useState({ isLoading: true, canAccess: false }); const { push } = useHistory(); - const userPermissions = useUser(); + const { userPermissions } = useUser(); useEffect(() => { const checkPermission = async () => { diff --git a/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js b/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js index 9418530f96..a29ac2e0af 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js @@ -34,7 +34,7 @@ function FilterPicker({ }) { const { emitEvent } = useGlobalContext(); const emitEventRef = useRef(emitEvent); - const userPermissions = useUser(); + const { userPermissions } = useUser(); const readActionAllowedFields = useMemo(() => { const matchingPermissions = findMatchingPermissions(userPermissions, [ { diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js index 417658d872..eb517596a4 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js @@ -39,7 +39,7 @@ const EditView = ({ isSingleType, goBack, layout, slug, state, id, origin }) => const { allowedActions, isLoading: isLoadingForPermissions } = useUserPermissions( viewPermissions ); - const userPermissions = useUser(); + const { userPermissions } = useUser(); // Here in case of a 403 response when fetching data we will either redirect to the previous page // Or to the homepage if there's no state in the history stack diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js index c88dc0c753..77f4c1647e 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/DataManagerProvider/index.js @@ -7,6 +7,7 @@ import { useGlobalContext, PopUpWarning, useStrapi, + useUser, } from 'strapi-helper-plugin'; import { useHistory, useLocation, useRouteMatch, Redirect } from 'react-router-dom'; import { connect, useDispatch } from 'react-redux'; @@ -67,7 +68,9 @@ const DataManagerProvider = ({ } = useStrapi(); const { apis } = getPlugin(pluginId); const [infoModals, toggleInfoModal] = useState({ cancel: false }); - const { autoReload, emitEvent, fetchUserPermissions, formatMessage, menu } = useGlobalContext(); + const { autoReload, emitEvent, formatMessage } = useGlobalContext(); + const { fetchUserPermissions } = useUser(); + const { pathname } = useLocation(); const { push } = useHistory(); const contentTypeMatch = useRouteMatch(`/plugins/${pluginId}/content-types/:uid`); @@ -301,8 +304,6 @@ const DataManagerProvider = ({ // Refetch the permissions await updatePermissions(); - // Update the app menu - await updateAppMenu(); // Refetch all the data getDataRef.current(); } @@ -399,7 +400,6 @@ const DataManagerProvider = ({ const dataShape = orderAllDataAttributesWithImmutable(newSchemaToSet, isInContentTypeView); - // This prevents from losing the created content type or component when clicking on the link from the left menu const hasJustCreatedSchema = get(schemaToSet, 'isTemporary', false) && size(get(schemaToSet, 'schema.attributes', {})) === 0; @@ -471,9 +471,6 @@ const DataManagerProvider = ({ await updatePermissions(); - // Update the app menu - await updateAppMenu(); - // Submit ct tracking success if (isInContentTypeView) { emitEvent('didSaveContentType'); @@ -512,13 +509,6 @@ const DataManagerProvider = ({ toggleInfoModal(prev => ({ ...prev, cancel: !prev.cancel })); }; - // Update the menu using the internal API - const updateAppMenu = async () => { - if (menu.getModels) { - await menu.getModels(); - } - }; - const updatePermissions = async () => { await fetchUserPermissions(); };