diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js index 52f9fe4e84..5ede3ae437 100644 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js +++ b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { hasPermissions, useRBACProvider, useStrapiApp, useAppInfo } from '@strapi/helper-plugin'; import { useSelector } from 'react-redux'; @@ -19,25 +19,15 @@ const useSettingsMenu = () => { const { shouldUpdateStrapi } = useAppInfo(); const { settings } = useStrapiApp(); const permissions = useSelector(selectAdminPermissions); + const { global: globalLinks, admin: adminLinks } = useEnterprise( LINKS_CE, async () => (await import('../../../../ee/admin/hooks/useSettingsMenu/constants')).LINKS_EE, { combine(ceLinks, eeLinks) { - function addPermissions(link) { - if (!link.id) { - throw new Error('The settings menu item must have an id attribute.'); - } - - return { - ...link, - permissions: permissions.settings?.[link.id]?.main, - }; - } - return { - admin: [...eeLinks.admin, ...ceLinks.admin].map(addPermissions), - global: [...ceLinks.global, ...eeLinks.global].map(addPermissions), + admin: [...eeLinks.admin, ...ceLinks.admin], + global: [...ceLinks.global, ...eeLinks.global], }; }, defaultValue: { @@ -47,6 +37,20 @@ const useSettingsMenu = () => { } ); + const addPermissions = useCallback( + (link) => { + if (!link.id) { + throw new Error('The settings menu item must have an id attribute.'); + } + + return { + ...link, + permissions: permissions.settings?.[link.id]?.main, + }; + }, + [permissions.settings] + ); + useEffect(() => { const getData = async () => { const buildMenuPermissions = (sections) => @@ -86,26 +90,36 @@ const useSettingsMenu = () => { }; const { global, ...otherSections } = settings; + const sections = formatLinks([ { ...settings.global, - links: sortLinks([...settings.global.links, ...globalLinks]).map((link) => ({ - ...link, - hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi, - })), + links: sortLinks([...settings.global.links, ...globalLinks.map(addPermissions)]).map( + (link) => ({ + ...link, + hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi, + }) + ), }, { id: 'permissions', intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' }, - links: adminLinks, + links: adminLinks.map(addPermissions), }, ...Object.values(otherSections), ]); getData(); - }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi]); + }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]); - return { isLoading, menu }; + const filterMenu = (menuItem) => { + return { + ...menuItem, + links: menuItem.links.filter((link) => link.isDisplayed), + }; + }; + + return { isLoading, menu: menu.map(filterMenu) }; }; export default useSettingsMenu; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js index 1ceea2a1ad..4c86686c7a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js @@ -50,17 +50,19 @@ const SettingsNav = ({ menu }) => { {sections.map((section) => ( - {section.links.map((link) => ( - handleClickOnLink(link.to)} - key={link.id} - > - {formatMessage(link.intlLabel)} - - ))} + {section.links.map((link) => { + return ( + handleClickOnLink(link.to)} + key={link.id} + > + {formatMessage(link.intlLabel)} + + ); + })} ))}