@strapi/admin 4.15.5-alpha.2 → 4.15.5-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{AuthenticatedApp-fa931d1d.mjs → AuthenticatedApp-2cfb41e2.mjs} +21 -21
- package/dist/_chunks/{AuthenticatedApp-fa931d1d.mjs.map → AuthenticatedApp-2cfb41e2.mjs.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-4b160235.js → AuthenticatedApp-79e3f141.js} +21 -21
- package/dist/_chunks/{AuthenticatedApp-4b160235.js.map → AuthenticatedApp-79e3f141.js.map} +1 -1
- package/dist/_chunks/{HomePage-8e98be60.mjs → HomePage-1376624b.mjs} +4 -4
- package/dist/_chunks/{HomePage-8e98be60.mjs.map → HomePage-1376624b.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-b91d1592.js → HomePage-a617d19a.js} +4 -4
- package/dist/_chunks/{HomePage-b91d1592.js.map → HomePage-a617d19a.js.map} +1 -1
- package/dist/_chunks/{HomePage-b6967648.js → HomePage-a9e9942a.js} +4 -4
- package/dist/_chunks/{HomePage-b6967648.js.map → HomePage-a9e9942a.js.map} +1 -1
- package/dist/_chunks/{HomePage-9bda39b5.mjs → HomePage-e333ff90.mjs} +4 -4
- package/dist/_chunks/{HomePage-9bda39b5.mjs.map → HomePage-e333ff90.mjs.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-ee6d69b0.mjs → InstalledPluginsPage-c7ccd2b2.mjs} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-ee6d69b0.mjs.map → InstalledPluginsPage-c7ccd2b2.mjs.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-d4b90e9c.js → InstalledPluginsPage-fb2aaa1f.js} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-d4b90e9c.js.map → InstalledPluginsPage-fb2aaa1f.js.map} +1 -1
- package/dist/_chunks/{Login-4fc5dcbb.mjs → Login-69bf063c.mjs} +2 -2
- package/dist/_chunks/{Login-4fc5dcbb.mjs.map → Login-69bf063c.mjs.map} +1 -1
- package/dist/_chunks/{Login-5fbf37c3.js → Login-d6fd38ea.js} +2 -2
- package/dist/_chunks/{Login-5fbf37c3.js.map → Login-d6fd38ea.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-ff0d02c6.js → MarketplacePage-7c516084.js} +3 -3
- package/dist/_chunks/{MarketplacePage-ff0d02c6.js.map → MarketplacePage-7c516084.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-ec9bf1db.mjs → MarketplacePage-c829d0de.mjs} +3 -3
- package/dist/_chunks/{MarketplacePage-ec9bf1db.mjs.map → MarketplacePage-c829d0de.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-96a8404e.js → ProfilePage-a2e54283.js} +3 -3
- package/dist/_chunks/{ProfilePage-96a8404e.js.map → ProfilePage-a2e54283.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-caeace8c.mjs → ProfilePage-c6d8c69f.mjs} +3 -3
- package/dist/_chunks/{ProfilePage-caeace8c.mjs.map → ProfilePage-c6d8c69f.mjs.map} +1 -1
- package/dist/_chunks/{build-f011d8dc.mjs → build-20299009.mjs} +2 -2
- package/dist/_chunks/{build-f011d8dc.mjs.map → build-20299009.mjs.map} +1 -1
- package/dist/_chunks/{build-b285bccd.js → build-58827c7a.js} +2 -2
- package/dist/_chunks/{build-b285bccd.js.map → build-58827c7a.js.map} +1 -1
- package/dist/_chunks/{constants-86882708.js → constants-4c06740e.js} +3 -3
- package/dist/_chunks/{constants-86882708.js.map → constants-4c06740e.js.map} +1 -1
- package/dist/_chunks/{constants-ffa23daa.mjs → constants-5f0670d7.mjs} +5 -5
- package/dist/_chunks/{constants-ffa23daa.mjs.map → constants-5f0670d7.mjs.map} +1 -1
- package/dist/_chunks/{constants-129cf022.mjs → constants-842c6449.mjs} +6 -6
- package/dist/_chunks/{constants-129cf022.mjs.map → constants-842c6449.mjs.map} +1 -1
- package/dist/_chunks/{constants-1bd1239d.js → constants-9212941b.js} +6 -6
- package/dist/_chunks/{constants-1bd1239d.js.map → constants-9212941b.js.map} +1 -1
- package/dist/_chunks/{constants-cd5a4e71.js → constants-962e9922.js} +5 -5
- package/dist/_chunks/{constants-cd5a4e71.js.map → constants-962e9922.js.map} +1 -1
- package/dist/_chunks/{constants-916debf1.js → constants-a16f9961.js} +2 -2
- package/dist/_chunks/{constants-916debf1.js.map → constants-a16f9961.js.map} +1 -1
- package/dist/_chunks/{constants-39df4f04.mjs → constants-a3372db6.mjs} +3 -3
- package/dist/_chunks/{constants-39df4f04.mjs.map → constants-a3372db6.mjs.map} +1 -1
- package/dist/_chunks/{constants-7bfc7134.mjs → constants-fad06b7f.mjs} +2 -2
- package/dist/_chunks/{constants-7bfc7134.mjs.map → constants-fad06b7f.mjs.map} +1 -1
- package/dist/_chunks/{develop-3c9f7452.mjs → develop-7066af5e.mjs} +2 -2
- package/dist/_chunks/{develop-3c9f7452.mjs.map → develop-7066af5e.mjs.map} +1 -1
- package/dist/_chunks/{develop-9765d7ba.js → develop-a7d5cf0c.js} +2 -2
- package/dist/_chunks/{develop-9765d7ba.js.map → develop-a7d5cf0c.js.map} +1 -1
- package/dist/_chunks/{index-653e1ab3.js → index-07d155a0.js} +2 -2
- package/dist/_chunks/{index-653e1ab3.js.map → index-07d155a0.js.map} +1 -1
- package/dist/_chunks/{index-1eaab33f.js → index-12b7d75f.js} +4 -4
- package/dist/_chunks/{index-1eaab33f.js.map → index-12b7d75f.js.map} +1 -1
- package/dist/_chunks/{index-4343f97f.mjs → index-1316edb2.mjs} +4 -4
- package/dist/_chunks/{index-4343f97f.mjs.map → index-1316edb2.mjs.map} +1 -1
- package/dist/_chunks/{index-3fb94612.js → index-174cc6b9.js} +4 -4
- package/dist/_chunks/{index-3fb94612.js.map → index-174cc6b9.js.map} +1 -1
- package/dist/_chunks/{index-05f82f02.js → index-18fed2cd.js} +3 -3
- package/dist/_chunks/{index-05f82f02.js.map → index-18fed2cd.js.map} +1 -1
- package/dist/_chunks/{index-77124563.mjs → index-1e3a2719.mjs} +5 -5
- package/dist/_chunks/{index-77124563.mjs.map → index-1e3a2719.mjs.map} +1 -1
- package/dist/_chunks/{index-0bd0d840.mjs → index-242c514c.mjs} +3 -3
- package/dist/_chunks/{index-0bd0d840.mjs.map → index-242c514c.mjs.map} +1 -1
- package/dist/_chunks/{index-cdc1221a.js → index-252284ed.js} +3 -3
- package/dist/_chunks/{index-cdc1221a.js.map → index-252284ed.js.map} +1 -1
- package/dist/_chunks/{index-4e8af716.js → index-25bb4a4d.js} +5 -5
- package/dist/_chunks/{index-4e8af716.js.map → index-25bb4a4d.js.map} +1 -1
- package/dist/_chunks/{index-f3c67f77.js → index-25c9158f.js} +2 -2
- package/dist/_chunks/{index-f3c67f77.js.map → index-25c9158f.js.map} +1 -1
- package/dist/_chunks/{index-8acbbabe.js → index-25feef65.js} +6 -6
- package/dist/_chunks/{index-8acbbabe.js.map → index-25feef65.js.map} +1 -1
- package/dist/_chunks/{index-05ada54b.js → index-2aed5618.js} +3 -3
- package/dist/_chunks/{index-05ada54b.js.map → index-2aed5618.js.map} +1 -1
- package/dist/_chunks/{index-f18d27fd.js → index-2b331655.js} +3 -3
- package/dist/_chunks/{index-f18d27fd.js.map → index-2b331655.js.map} +1 -1
- package/dist/_chunks/{index-a220f0b2.mjs → index-314f72f4.mjs} +4 -4
- package/dist/_chunks/{index-a220f0b2.mjs.map → index-314f72f4.mjs.map} +1 -1
- package/dist/_chunks/{index-006ef0ac.js → index-341222f2.js} +3 -3
- package/dist/_chunks/{index-006ef0ac.js.map → index-341222f2.js.map} +1 -1
- package/dist/_chunks/{index-7c0dcf2b.js → index-3444ab6f.js} +4 -4
- package/dist/_chunks/{index-7c0dcf2b.js.map → index-3444ab6f.js.map} +1 -1
- package/dist/_chunks/{index-09752dfe.js → index-35fc9959.js} +3 -3
- package/dist/_chunks/{index-09752dfe.js.map → index-35fc9959.js.map} +1 -1
- package/dist/_chunks/{index-9b3ff96c.mjs → index-45a78b18.mjs} +20 -20
- package/dist/_chunks/{index-9b3ff96c.mjs.map → index-45a78b18.mjs.map} +1 -1
- package/dist/_chunks/{index-d5711ebb.js → index-48ebb88c.js} +5 -5
- package/dist/_chunks/{index-d5711ebb.js.map → index-48ebb88c.js.map} +1 -1
- package/dist/_chunks/{index-05001647.js → index-4a241498.js} +8 -8
- package/dist/_chunks/{index-05001647.js.map → index-4a241498.js.map} +1 -1
- package/dist/_chunks/{index-54dc318d.js → index-4c29f67c.js} +3 -3
- package/dist/_chunks/{index-54dc318d.js.map → index-4c29f67c.js.map} +1 -1
- package/dist/_chunks/{index-c184f4d7.mjs → index-517fbe00.mjs} +5 -5
- package/dist/_chunks/{index-c184f4d7.mjs.map → index-517fbe00.mjs.map} +1 -1
- package/dist/_chunks/{index-7028ad70.js → index-563a992a.js} +4 -4
- package/dist/_chunks/{index-7028ad70.js.map → index-563a992a.js.map} +1 -1
- package/dist/_chunks/{index-782c0685.mjs → index-5b44cba5.mjs} +2 -2
- package/dist/_chunks/{index-782c0685.mjs.map → index-5b44cba5.mjs.map} +1 -1
- package/dist/_chunks/{index-f4a061be.mjs → index-61c915cd.mjs} +2 -2
- package/dist/_chunks/{index-f4a061be.mjs.map → index-61c915cd.mjs.map} +1 -1
- package/dist/_chunks/{index-f0f40db4.mjs → index-61e392e8.mjs} +5 -5
- package/dist/_chunks/{index-f0f40db4.mjs.map → index-61e392e8.mjs.map} +1 -1
- package/dist/_chunks/{index-7a956856.js → index-66177bc5.js} +4 -4
- package/dist/_chunks/{index-7a956856.js.map → index-66177bc5.js.map} +1 -1
- package/dist/_chunks/{index-9c88e73f.js → index-68ae52b6.js} +5 -5
- package/dist/_chunks/{index-9c88e73f.js.map → index-68ae52b6.js.map} +1 -1
- package/dist/_chunks/{index-43e86c36.mjs → index-693383db.mjs} +5 -5
- package/dist/_chunks/{index-43e86c36.mjs.map → index-693383db.mjs.map} +1 -1
- package/dist/_chunks/{index-8d895e56.mjs → index-6b7dceb1.mjs} +3 -3
- package/dist/_chunks/{index-8d895e56.mjs.map → index-6b7dceb1.mjs.map} +1 -1
- package/dist/_chunks/{index-d9f9de85.mjs → index-703c58c8.mjs} +4 -4
- package/dist/_chunks/{index-d9f9de85.mjs.map → index-703c58c8.mjs.map} +1 -1
- package/dist/_chunks/{index-96af3a65.js → index-7338912f.js} +5 -5
- package/dist/_chunks/{index-96af3a65.js.map → index-7338912f.js.map} +1 -1
- package/dist/_chunks/{index-1bf08614.mjs → index-7a1a0c5c.mjs} +3 -3
- package/dist/_chunks/{index-1bf08614.mjs.map → index-7a1a0c5c.mjs.map} +1 -1
- package/dist/_chunks/{index-6861cd84.mjs → index-7d449292.mjs} +3 -3
- package/dist/_chunks/{index-6861cd84.mjs.map → index-7d449292.mjs.map} +1 -1
- package/dist/_chunks/{index-de154c58.mjs → index-80574f48.mjs} +3 -3
- package/dist/_chunks/{index-de154c58.mjs.map → index-80574f48.mjs.map} +1 -1
- package/dist/_chunks/{index-55a46be8.mjs → index-9910aa5a.mjs} +3 -3
- package/dist/_chunks/{index-55a46be8.mjs.map → index-9910aa5a.mjs.map} +1 -1
- package/dist/_chunks/{index-df043af5.mjs → index-996f7ad1.mjs} +3 -3
- package/dist/_chunks/{index-df043af5.mjs.map → index-996f7ad1.mjs.map} +1 -1
- package/dist/_chunks/{index-a684490c.mjs → index-9b3107a4.mjs} +3 -3
- package/dist/_chunks/{index-a684490c.mjs.map → index-9b3107a4.mjs.map} +1 -1
- package/dist/_chunks/{index-e013fe86.js → index-9d03d359.js} +3 -3
- package/dist/_chunks/{index-e013fe86.js.map → index-9d03d359.js.map} +1 -1
- package/dist/_chunks/{index-cd2af4a0.mjs → index-9e5d59f5.mjs} +5 -5
- package/dist/_chunks/{index-cd2af4a0.mjs.map → index-9e5d59f5.mjs.map} +1 -1
- package/dist/_chunks/{index-57ae9065.mjs → index-9f88ad83.mjs} +3 -3
- package/dist/_chunks/{index-57ae9065.mjs.map → index-9f88ad83.mjs.map} +1 -1
- package/dist/_chunks/{index-f67d8e8d.mjs → index-adb714e8.mjs} +2 -2
- package/dist/_chunks/{index-f67d8e8d.mjs.map → index-adb714e8.mjs.map} +1 -1
- package/dist/_chunks/{index-b593ff2a.mjs → index-b53ba38d.mjs} +4 -4
- package/dist/_chunks/{index-b593ff2a.mjs.map → index-b53ba38d.mjs.map} +1 -1
- package/dist/_chunks/{index-c075b5a1.mjs → index-b53cf07d.mjs} +52 -40
- package/dist/_chunks/index-b53cf07d.mjs.map +1 -0
- package/dist/_chunks/{index-62b7bdbe.js → index-b84b9fee.js} +52 -40
- package/dist/_chunks/index-b84b9fee.js.map +1 -0
- package/dist/_chunks/{index-326b9481.mjs → index-bef99193.mjs} +4 -4
- package/dist/_chunks/{index-326b9481.mjs.map → index-bef99193.mjs.map} +1 -1
- package/dist/_chunks/{index-6bfd0b33.js → index-c2b86584.js} +3 -3
- package/dist/_chunks/{index-6bfd0b33.js.map → index-c2b86584.js.map} +1 -1
- package/dist/_chunks/{index-82f22c48.js → index-c3469f69.js} +3 -3
- package/dist/_chunks/{index-82f22c48.js.map → index-c3469f69.js.map} +1 -1
- package/dist/_chunks/{index-e2db7aa8.mjs → index-c4116296.mjs} +6 -6
- package/dist/_chunks/{index-e2db7aa8.mjs.map → index-c4116296.mjs.map} +1 -1
- package/dist/_chunks/{index-d33c8d9f.mjs → index-cf4fe6b7.mjs} +8 -8
- package/dist/_chunks/{index-d33c8d9f.mjs.map → index-cf4fe6b7.mjs.map} +1 -1
- package/dist/_chunks/{index-d196ac50.js → index-d4029932.js} +4 -4
- package/dist/_chunks/{index-d196ac50.js.map → index-d4029932.js.map} +1 -1
- package/dist/_chunks/{index-eea1e084.mjs → index-dcbab202.mjs} +3 -3
- package/dist/_chunks/{index-eea1e084.mjs.map → index-dcbab202.mjs.map} +1 -1
- package/dist/_chunks/{index-dff777b7.js → index-dcd31235.js} +3 -3
- package/dist/_chunks/{index-dff777b7.js.map → index-dcd31235.js.map} +1 -1
- package/dist/_chunks/{index-332b3702.mjs → index-dede2234.mjs} +3 -3
- package/dist/_chunks/{index-332b3702.mjs.map → index-dede2234.mjs.map} +1 -1
- package/dist/_chunks/{index-853bad50.mjs → index-df70cfd7.mjs} +5 -5
- package/dist/_chunks/{index-853bad50.mjs.map → index-df70cfd7.mjs.map} +1 -1
- package/dist/_chunks/{index-c40ee26a.mjs → index-dfc0437b.mjs} +4 -4
- package/dist/_chunks/{index-c40ee26a.mjs.map → index-dfc0437b.mjs.map} +1 -1
- package/dist/_chunks/{index-455d0b3e.js → index-e8b17b94.js} +5 -5
- package/dist/_chunks/{index-455d0b3e.js.map → index-e8b17b94.js.map} +1 -1
- package/dist/_chunks/{index-539c5eac.js → index-ea8946fb.js} +2 -2
- package/dist/_chunks/{index-539c5eac.js.map → index-ea8946fb.js.map} +1 -1
- package/dist/_chunks/{index-0c5f6415.js → index-ecb3cfba.js} +5 -5
- package/dist/_chunks/{index-0c5f6415.js.map → index-ecb3cfba.js.map} +1 -1
- package/dist/_chunks/{index-d80de23d.mjs → index-ed287ba8.mjs} +3 -3
- package/dist/_chunks/{index-d80de23d.mjs.map → index-ed287ba8.mjs.map} +1 -1
- package/dist/_chunks/{index-891d1527.mjs → index-edf62e62.mjs} +4 -4
- package/dist/_chunks/{index-891d1527.mjs.map → index-edf62e62.mjs.map} +1 -1
- package/dist/_chunks/{index-706ae836.js → index-ef0c2ffb.js} +4 -4
- package/dist/_chunks/{index-706ae836.js.map → index-ef0c2ffb.js.map} +1 -1
- package/dist/_chunks/{index-2ed87ac8.js → index-f088fe2c.js} +3 -3
- package/dist/_chunks/{index-2ed87ac8.js.map → index-f088fe2c.js.map} +1 -1
- package/dist/_chunks/{index-234ed67d.mjs → index-f097ccea.mjs} +3 -3
- package/dist/_chunks/{index-234ed67d.mjs.map → index-f097ccea.mjs.map} +1 -1
- package/dist/_chunks/{index-55d6d65a.js → index-fbe9dba1.js} +3 -3
- package/dist/_chunks/{index-55d6d65a.js.map → index-fbe9dba1.js.map} +1 -1
- package/dist/_chunks/{index-b6c497e5.js → index-fc7a00f0.js} +20 -20
- package/dist/_chunks/{index-b6c497e5.js.map → index-fc7a00f0.js.map} +1 -1
- package/dist/_chunks/{schema-82ad2cb1.mjs → schema-1808aa2d.mjs} +2 -2
- package/dist/_chunks/{schema-82ad2cb1.mjs.map → schema-1808aa2d.mjs.map} +1 -1
- package/dist/_chunks/{schema-8bb5b01b.js → schema-e73a6250.js} +2 -2
- package/dist/_chunks/{schema-8bb5b01b.js.map → schema-e73a6250.js.map} +1 -1
- package/dist/_chunks/{validateWorkflow-f5761727.js → validateWorkflow-11ecf8ee.js} +3 -3
- package/dist/_chunks/{validateWorkflow-f5761727.js.map → validateWorkflow-11ecf8ee.js.map} +1 -1
- package/dist/_chunks/{validateWorkflow-23b1ee38.mjs → validateWorkflow-1ec1040b.mjs} +3 -3
- package/dist/_chunks/{validateWorkflow-23b1ee38.mjs.map → validateWorkflow-1ec1040b.mjs.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.mjs +1 -1
- package/package.json +12 -12
- package/dist/_chunks/index-62b7bdbe.js.map +0 -1
- package/dist/_chunks/index-c075b5a1.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-9b3ff96c.mjs","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/SettingsPage/components/SettingsNav/index.js","../../admin/src/pages/SettingsPage/constants.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/constants.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/urlToFile.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/stepper.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/init.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/getFormData.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js","../../admin/src/pages/SettingsPage/utils/makeUniqueRoutes.ts","../../admin/src/pages/SettingsPage/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport {\n hasPermissions,\n StrapiAppSetting,\n StrapiAppSettingLink,\n useRBACProvider,\n useStrapiApp,\n useAppInfo,\n} from '@strapi/helper-plugin';\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { selectAdminPermissions } from '../selectors';\n\nimport { useEnterprise } from './useEnterprise';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: StrapiAppSettingLink['permissions'];\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { settings } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: await hasPermissions(userPermissions, link.permissions),\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import React from 'react';\n\nimport { Icon } from '@strapi/design-system';\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Lock } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\n/**\n * TODO: refactor the SubNav entirely, we shouldn't have\n * to do this hack to work a lock at the end. It's a bit hacky.\n */\n\nconst CustomIcon = styled(Icon)`\n right: 15px;\n position: absolute;\n`;\n\nconst SettingsNav = ({ menu }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination = null) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <SubNavLink\n as={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={() => handleClickOnLink(link.to)}\n key={link.id}\n >\n {formatMessage(link.intlLabel)}\n {link?.lockIcon && (\n <CustomIcon width={`${15 / 16}rem`} height={`${15 / 16}rem`} as={Lock} />\n )}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nSettingsNav.propTypes = {\n menu: PropTypes.array.isRequired,\n};\n\nexport default SettingsNav;\n","export const ROUTES_CE = [\n {\n async Component() {\n const component = await import('./pages/Roles/ProtectedListPage');\n\n return component;\n },\n to: '/settings/roles',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/CreatePage');\n\n return component;\n },\n to: '/settings/roles/duplicate/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/CreatePage');\n\n return component;\n },\n to: '/settings/roles/new',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/ProtectedEditPage');\n\n return component;\n },\n to: '/settings/roles/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Users/ProtectedListPage');\n\n return component;\n },\n to: '/settings/users',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Users/ProtectedEditPage');\n\n return component;\n },\n to: '/settings/users/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/webhooks/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedEditView');\n\n return component;\n },\n to: '/settings/webhooks/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedListView');\n\n return component;\n },\n to: '/settings/webhooks',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedListView');\n\n return component;\n },\n to: '/settings/api-tokens',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/api-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedEditView');\n\n return component;\n },\n to: '/settings/api-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/transfer-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedListView');\n\n return component;\n },\n to: '/settings/transfer-tokens',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedEditView');\n\n return component;\n },\n to: '/settings/transfer-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/AuditLogs/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-audit-logs',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ReviewWorkflows/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-review-workflows',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/SingleSignOn/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-single-sign-on',\n exact: true,\n },\n];\n","export const DIMENSION = 750;\nexport const SIZE = 100;\nexport const ACCEPTED_FORMAT = ['image/jpeg', 'image/png', 'image/svg+xml'];\n","/* eslint-disable consistent-return */\n/*\n *\n * LogoModalStepper reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n localImage: undefined,\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_LOCAL_IMAGE': {\n draftState.localImage = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer } from 'react';\n\nimport { ModalHeader, ModalLayout, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport reducer, { initialState } from './reducer';\n\nconst LogoModalStepper = ({\n onChangeLogo,\n customLogo,\n goTo,\n Component,\n modalTitle,\n next,\n prev,\n currentStep,\n}) => {\n const [{ localImage }, dispatch] = useReducer(reducer, initialState);\n const { formatMessage } = useIntl();\n\n const setLocalImage = (asset) => {\n dispatch({\n type: 'SET_LOCAL_IMAGE',\n value: asset,\n });\n };\n\n const handleCloseModal = () => {\n goTo(null);\n };\n\n if (!currentStep) {\n return null;\n }\n\n return (\n <ModalLayout labelledBy=\"modal\" onClose={handleCloseModal}>\n <ModalHeader>\n <Typography fontWeight=\"bold\" as=\"h2\" id=\"modal\">\n {formatMessage(modalTitle)}\n </Typography>\n </ModalHeader>\n <Component\n setLocalImage={setLocalImage}\n goTo={goTo}\n next={next}\n prev={prev}\n onClose={handleCloseModal}\n asset={localImage || customLogo}\n onChangeLogo={onChangeLogo}\n />\n </ModalLayout>\n );\n};\n\nLogoModalStepper.defaultProps = {\n Component: undefined,\n currentStep: undefined,\n customLogo: undefined,\n modalTitle: undefined,\n next: null,\n prev: null,\n};\n\nLogoModalStepper.propTypes = {\n Component: PropTypes.elementType,\n currentStep: PropTypes.string,\n customLogo: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }),\n goTo: PropTypes.func.isRequired,\n modalTitle: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n next: PropTypes.string,\n onChangeLogo: PropTypes.func.isRequired,\n prev: PropTypes.string,\n};\n\nexport default LogoModalStepper;\n","/* eslint-disable consistent-return */\n/*\n *\n * LogoInput reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n currentStep: undefined,\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GO_TO': {\n draftState.currentStep = action.to;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import { ACCEPTED_FORMAT, DIMENSION, SIZE } from './constants';\n\nconst FILE_FORMAT_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-format',\n defaultMessage: 'Wrong format uploaded (accepted formats only: jpeg, jpg, png, svg).',\n};\n\nconst FILE_SIZING_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-size',\n defaultMessage:\n 'The file uploaded is too large (max dimension: {dimension}x{dimension}, max file size: {size}KB)',\n};\n\nconst getFileDimensions = (file) => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const img = new Image();\n img.onload = function () {\n resolve({ width: img.width, height: img.height });\n };\n img.src = reader.result;\n };\n reader.readAsDataURL(file);\n });\n};\n\nconst rawFileToAsset = (rawFile, fileDimensions) => {\n return {\n ext: rawFile.name.split('.').pop(),\n size: rawFile.size / 1000,\n name: rawFile.name,\n url: URL.createObjectURL(rawFile),\n rawFile,\n width: fileDimensions.width,\n height: fileDimensions.height,\n };\n};\n\nexport const parseFileMetadatas = async (file) => {\n let error;\n\n const isFormatAuthorized = ACCEPTED_FORMAT.includes(file.type);\n\n if (!isFormatAuthorized) {\n error = new Error('File format');\n error.displayMessage = FILE_FORMAT_ERROR_MESSAGE;\n\n throw error;\n }\n\n const fileDimensions = await getFileDimensions(file);\n\n const areDimensionsAuthorized =\n fileDimensions.width <= DIMENSION && fileDimensions.height <= DIMENSION;\n\n if (!areDimensionsAuthorized) {\n error = new Error('File sizing');\n error.displayMessage = FILE_SIZING_ERROR_MESSAGE;\n\n throw error;\n }\n\n const asset = rawFileToAsset(file, fileDimensions);\n\n const isSizeAuthorized = asset.size <= SIZE;\n\n if (!isSizeAuthorized) {\n error = new Error('File sizing');\n error.displayMessage = FILE_SIZING_ERROR_MESSAGE;\n\n throw error;\n }\n\n return asset;\n};\n","import React, { useRef, useState } from 'react';\n\nimport {\n Box,\n Button,\n Field,\n FieldError,\n FieldInput,\n Flex,\n Icon,\n ModalFooter,\n Typography,\n} from '@strapi/design-system';\nimport { PicturePlus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ACCEPTED_FORMAT, DIMENSION, SIZE } from '../../utils/constants';\nimport { parseFileMetadatas } from '../../utils/parseFileMetadatas';\n\nconst FileInput = styled(FieldInput)`\n opacity: 0;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n`;\n\nconst FromComputerForm = ({ setLocalImage, goTo, next, onClose }) => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = useState(false);\n const [fileError, setFileError] = useState(undefined);\n const inputRef = useRef(null);\n\n const handleDragEnter = () => setDragOver(true);\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick = (e) => {\n e.preventDefault();\n inputRef.current.click();\n };\n\n const handleChange = async () => {\n handleDragLeave();\n const file = inputRef.current.files[0];\n\n if (!file) {\n return;\n }\n\n try {\n const asset = await parseFileMetadatas(file);\n setLocalImage(asset);\n goTo(next);\n } catch (err) {\n if (err.displayMessage) {\n setFileError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n inputRef.current.focus();\n } else {\n throw err;\n }\n }\n };\n\n const getBorderColor = () => {\n if (dragOver) {\n return 'primary500';\n }\n if (fileError) {\n return 'danger600';\n }\n\n return 'neutral300';\n };\n\n return (\n <>\n <form>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Field name=\"logo-upload\" error={fileError}>\n <label htmlFor=\"logo-upload\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex\n paddingTop={9}\n paddingBottom={7}\n hasRadius\n justifyContent=\"center\"\n direction=\"column\"\n background={dragOver ? 'primary100' : 'neutral100'}\n borderColor={getBorderColor()}\n borderStyle=\"dashed\"\n borderWidth=\"1px\"\n position=\"relative\"\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n >\n <Icon\n color=\"primary600\"\n width={`${60 / 16}rem`}\n height={`${60 / 16}rem`}\n as={PicturePlus}\n aria-hidden\n />\n\n <Box paddingTop={3} paddingBottom={5}>\n <Typography variant=\"delta\" as=\"span\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.drag-drop',\n defaultMessage: 'Drag and Drop here or',\n })}\n </Typography>\n </Box>\n\n <FileInput\n accept={ACCEPTED_FORMAT}\n cursor=\"pointer\"\n as=\"input\"\n type=\"file\"\n name=\"files\"\n tabIndex={-1}\n zIndex={1}\n onChange={handleChange}\n ref={inputRef}\n id=\"logo-upload\"\n />\n\n <Button type=\"button\" onClick={handleClick}>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.cta.browse',\n defaultMessage: 'Browse files',\n })}\n </Button>\n\n <Box paddingTop={6}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.modal.upload.file-validation',\n defaultMessage:\n 'Max dimension: {dimension}x{dimension}, Max size: {size}KB',\n },\n { size: SIZE, dimension: DIMENSION }\n )}\n </Typography>\n </Box>\n </Flex>\n <FieldError />\n </Flex>\n </label>\n </Field>\n </Box>\n </form>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nFromComputerForm.defaultProps = {\n next: null,\n};\n\nFromComputerForm.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default FromComputerForm;\n","import { getFetchClient } from '@strapi/helper-plugin';\n\nconst urlToFile = async (url) => {\n try {\n const { get } = getFetchClient();\n const res = await get(url, { responseType: 'blob', timeout: 8000 });\n const loadedFile = new File([res.data], res.config.url, {\n type: res.headers['content-type'],\n });\n\n return loadedFile;\n } catch (err) {\n err.displayMessage = {\n id: 'Settings.application.customization.modal.upload.error-network',\n defaultMessage: 'Network error',\n };\n\n throw err;\n }\n};\n\nexport default urlToFile;\n","import React, { useState } from 'react';\n\nimport { Box, Button, ModalFooter, TextInput } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { DIMENSION, SIZE } from '../../utils/constants';\nimport { parseFileMetadatas } from '../../utils/parseFileMetadatas';\nimport urlToFile from '../../utils/urlToFile';\n\nconst FromUrlForm = ({ goTo, next, onClose, setLocalImage }) => {\n const { formatMessage } = useIntl();\n const [logoUrl, setLogoUrl] = useState('');\n const [error, setError] = useState(null);\n\n const handleChange = (e) => {\n setLogoUrl(e.target.value);\n };\n\n const handleSubmit = async () => {\n try {\n const file = await urlToFile(logoUrl);\n const asset = await parseFileMetadatas(file);\n\n setLocalImage(asset);\n goTo(next);\n } catch (err) {\n if (err.displayMessage) {\n setError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n } else {\n throw err;\n }\n }\n };\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n handleSubmit();\n }}\n >\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <TextInput\n label={formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url.input-label',\n defaultMessage: 'URL',\n })}\n error={error}\n onChange={handleChange}\n value={logoUrl}\n name=\"logo-url\"\n />\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.next',\n defaultMessage: 'Next',\n })}\n </Button>\n }\n />\n </form>\n );\n};\n\nFromUrlForm.defaultProps = {\n next: null,\n};\n\nFromUrlForm.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default FromUrlForm;\n","import React from 'react';\n\nimport { Box, Divider, Tab, TabGroup, TabPanel, TabPanels, Tabs } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport FromComputerForm from './FromComputerForm';\nimport FromUrlForm from './FromUrlForm';\n\nconst AddLogoDialog = ({ setLocalImage, goTo, next, onClose }) => {\n const { formatMessage } = useIntl();\n\n return (\n <TabGroup\n label={formatMessage({\n id: 'Settings.application.customization.modal.tab.label',\n defaultMessage: 'How do you want to upload your assets?',\n })}\n variant=\"simple\"\n >\n <Box paddingLeft={8} paddingRight={8}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-computer',\n defaultMessage: 'From computer',\n })}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url',\n defaultMessage: 'From url',\n })}\n </Tab>\n </Tabs>\n\n <Divider />\n </Box>\n <TabPanels>\n <TabPanel>\n <FromComputerForm\n onClose={onClose}\n setLocalImage={setLocalImage}\n goTo={goTo}\n next={next}\n />\n </TabPanel>\n <TabPanel>\n <FromUrlForm onClose={onClose} setLocalImage={setLocalImage} goTo={goTo} next={next} />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n );\n};\n\nAddLogoDialog.defaultProps = {\n next: null,\n};\n\nAddLogoDialog.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default AddLogoDialog;\n","import React from 'react';\n\nimport {\n Card,\n CardAsset,\n CardBadge,\n CardBody,\n CardContent,\n CardHeader,\n CardSubtitle,\n CardTitle,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst ImageCardAsset = ({ asset }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Card>\n <CardHeader>\n <CardAsset size=\"S\" src={asset.url} />\n </CardHeader>\n <CardBody>\n <CardContent>\n <CardTitle>{asset.name}</CardTitle>\n <CardSubtitle>\n {`${asset.ext.toUpperCase()} - ${asset.width}✕${asset.height}`}\n </CardSubtitle>\n </CardContent>\n <CardBadge>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.card-badge',\n defaultMessage: 'image',\n })}\n </CardBadge>\n </CardBody>\n </Card>\n );\n};\n\nImageCardAsset.propTypes = {\n asset: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }).isRequired,\n};\n\nexport default ImageCardAsset;\n","import React from 'react';\n\nimport { Box, Button, Flex, ModalFooter, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport ImageCardAsset from './ImageCardAsset';\n\nconst PendingLogoDialog = ({ onClose, asset, prev, next, goTo, setLocalImage, onChangeLogo }) => {\n const { formatMessage } = useIntl();\n\n const handleGoBack = () => {\n setLocalImage(undefined);\n goTo(prev);\n };\n\n const handleUpload = () => {\n onChangeLogo(asset);\n goTo(next);\n };\n\n return (\n <>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Flex justifyContent=\"space-between\" paddingBottom={6}>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.title',\n defaultMessage: 'Logo ready to upload',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.subtitle',\n defaultMessage: 'Manage the chosen logo before uploading it',\n })}\n </Typography>\n </Flex>\n <Button onClick={handleGoBack} variant=\"secondary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.choose-another',\n defaultMessage: 'Choose another logo',\n })}\n </Button>\n </Flex>\n <Box maxWidth={pxToRem(180)}>{asset.url ? <ImageCardAsset asset={asset} /> : null}</Box>\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Button onClick={handleUpload}>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.upload',\n defaultMessage: 'Upload logo',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nPendingLogoDialog.defaultProps = {\n next: null,\n prev: null,\n};\n\nPendingLogoDialog.propTypes = {\n goTo: PropTypes.func.isRequired,\n asset: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }).isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n onChangeLogo: PropTypes.func.isRequired,\n prev: PropTypes.string,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default PendingLogoDialog;\n","import AddLogoDialog from '../LogoModalStepper/AddLogoDialog';\nimport PendingLogoDialog from '../LogoModalStepper/PendingLogoDialog';\n\nconst stepper = {\n upload: {\n Component: AddLogoDialog,\n modalTitle: {\n id: 'Settings.application.customization.modal.upload',\n defaultMessage: 'Upload logo',\n },\n next: 'pending',\n prev: null,\n },\n pending: {\n Component: PendingLogoDialog,\n modalTitle: {\n id: 'Settings.application.customization.modal.pending',\n defaultMessage: 'Pending logo',\n },\n next: null,\n prev: 'upload',\n },\n};\n\nexport default stepper;\n","import React, { useReducer } from 'react';\n\nimport {\n Box,\n CarouselActions,\n CarouselInput,\n CarouselSlide,\n IconButton,\n} from '@strapi/design-system';\nimport { Plus, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport LogoModalStepper from '../LogoModalStepper';\n\nimport reducer, { initialState } from './reducer';\nimport stepper from './stepper';\n\nconst LogoInput = ({\n canUpdate,\n customLogo,\n defaultLogo,\n hint,\n label,\n onChangeLogo,\n onResetLogo,\n}) => {\n const [{ currentStep }, dispatch] = useReducer(reducer, initialState);\n const { Component, next, prev, modalTitle } = stepper[currentStep] || {};\n const { formatMessage } = useIntl();\n\n const goTo = (to) => {\n dispatch({\n type: 'GO_TO',\n to,\n });\n };\n\n return (\n <>\n <CarouselInput\n label={label}\n selectedSlide={0}\n hint={hint}\n // Carousel is used here for a single media,\n // we don't need previous and next labels but these props are required\n previousLabel=\"\"\n nextLabel=\"\"\n onNext={() => {}}\n onPrevious={() => {}}\n secondaryLabel={customLogo?.name || 'logo.png'}\n actions={\n <CarouselActions>\n <IconButton\n disabled={!canUpdate}\n onClick={() => goTo(customLogo ? 'pending' : 'upload')}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.change-action',\n defaultMessage: 'Change logo',\n })}\n icon={<Plus />}\n />\n {customLogo && (\n <IconButton\n disabled={!canUpdate}\n onClick={onResetLogo}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.reset-action',\n defaultMessage: 'Reset logo',\n })}\n icon={<Refresh />}\n />\n )}\n </CarouselActions>\n }\n >\n <CarouselSlide\n label={formatMessage({\n id: 'Settings.application.customization.carousel-slide.label',\n defaultMessage: 'Logo slide',\n })}\n >\n <Box\n maxHeight=\"40%\"\n maxWidth=\"40%\"\n as=\"img\"\n src={customLogo?.url || defaultLogo}\n alt={formatMessage({\n id: 'Settings.application.customization.carousel.title',\n defaultMessage: 'Logo',\n })}\n />\n </CarouselSlide>\n </CarouselInput>\n <LogoModalStepper\n Component={Component}\n currentStep={currentStep}\n onChangeLogo={onChangeLogo}\n customLogo={customLogo}\n goTo={goTo}\n next={next}\n prev={prev}\n modalTitle={modalTitle}\n />\n </>\n );\n};\n\nLogoInput.defaultProps = {\n canUpdate: false,\n customLogo: null,\n hint: null,\n};\n\nLogoInput.propTypes = {\n canUpdate: PropTypes.bool,\n customLogo: PropTypes.shape({\n url: PropTypes.string,\n name: PropTypes.string,\n }),\n label: PropTypes.string.isRequired,\n hint: PropTypes.string,\n defaultLogo: PropTypes.string.isRequired,\n onChangeLogo: PropTypes.func.isRequired,\n onResetLogo: PropTypes.func.isRequired,\n};\n\nexport default LogoInput;\n","import merge from 'lodash/merge';\n\nconst init = (initialState, projectSettingsStored) => {\n const copyInitialState = merge(initialState, {\n menuLogo: {\n display: projectSettingsStored.menuLogo,\n },\n authLogo: {\n display: projectSettingsStored.authLogo,\n },\n });\n\n return copyInitialState;\n};\n\nexport default init;\n","/* eslint-disable consistent-return */\n/*\n *\n * ApplicationInfosPage Form reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n menuLogo: {\n display: null,\n submit: {\n rawFile: null,\n isReset: false,\n },\n },\n authLogo: {\n display: null,\n submit: {\n rawFile: null,\n isReset: false,\n },\n },\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CUSTOM_MENU_LOGO': {\n draftState.menuLogo.display = action.value;\n draftState.menuLogo.submit.rawFile = action.value.rawFile;\n break;\n }\n case 'SET_CUSTOM_AUTH_LOGO': {\n draftState.authLogo.display = action.value;\n draftState.authLogo.submit.rawFile = action.value.rawFile;\n break;\n }\n case 'RESET_CUSTOM_MENU_LOGO': {\n draftState.menuLogo.display = null;\n draftState.menuLogo.submit = {\n rawFile: null,\n isReset: true,\n };\n break;\n }\n case 'RESET_CUSTOM_AUTH_LOGO': {\n draftState.authLogo.display = null;\n draftState.authLogo.submit = {\n rawFile: null,\n isReset: true,\n };\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { forwardRef, useImperativeHandle, useReducer } from 'react';\n\nimport { Box, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useConfiguration } from '../../../../../../contexts/configuration';\nimport { DIMENSION, SIZE } from '../../utils/constants';\nimport LogoInput from '../LogoInput';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nconst CustomizationInfos = forwardRef(({ canUpdate, projectSettingsStored }, ref) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const {\n logos: { menu, auth },\n } = useConfiguration();\n const [{ menuLogo, authLogo }, dispatch] = useReducer(reducer, initialState, () =>\n init(initialState, projectSettingsStored)\n );\n\n const handleChangeMenuLogo = (asset) => {\n dispatch({\n type: 'SET_CUSTOM_MENU_LOGO',\n value: asset,\n });\n };\n\n const handleResetMenuLogo = () => {\n trackUsage('didClickResetLogo', {\n logo: 'menu',\n });\n\n dispatch({\n type: 'RESET_CUSTOM_MENU_LOGO',\n });\n };\n\n const handleChangeAuthLogo = (asset) => {\n dispatch({\n type: 'SET_CUSTOM_AUTH_LOGO',\n value: asset,\n });\n };\n\n const handleResetAuthLogo = () => {\n trackUsage('didClickResetLogo', {\n logo: 'auth',\n });\n\n dispatch({\n type: 'RESET_CUSTOM_AUTH_LOGO',\n });\n };\n\n useImperativeHandle(ref, () => ({\n getValues: () => ({ menuLogo: menuLogo.submit, authLogo: authLogo.submit }),\n }));\n\n return (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage: 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid paddingTop={4} gap={4}>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={menuLogo.display}\n defaultLogo={menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeMenuLogo}\n onResetLogo={handleResetMenuLogo}\n />\n </GridItem>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={authLogo.display}\n defaultLogo={auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeAuthLogo}\n onResetLogo={handleResetAuthLogo}\n />\n </GridItem>\n </Grid>\n </Box>\n );\n});\n\nCustomizationInfos.defaultProps = {\n canUpdate: false,\n projectSettingsStored: null,\n};\n\nCustomizationInfos.propTypes = {\n canUpdate: PropTypes.bool,\n projectSettingsStored: PropTypes.shape({\n menuLogo: PropTypes.shape({\n url: PropTypes.string,\n name: PropTypes.string,\n }),\n }),\n};\n\nexport default CustomizationInfos;\n","const getFormData = (data) => {\n const formData = new FormData();\n\n Object.entries(data).forEach(([key, value]) => {\n if (value && value.rawFile instanceof File) {\n formData.append(key, value.rawFile);\n }\n\n if (value && value.isReset) {\n formData.append(key, null);\n }\n });\n\n return formData;\n};\n\nexport default getFormData;\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Link,\n Loader,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n prefixFileUrlWithBackendUrl,\n SettingsPageTitle,\n useAPIErrorHandler,\n useAppInfo,\n useFetchClient,\n useFocusWhenNavigate,\n useNotification,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\n\nimport { useConfiguration } from '../../../../contexts/configuration';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport CustomizationInfos from './components/CustomizationInfos';\nimport getFormData from './utils/getFormData';\n\nconst AdminSeatInfoCE = () => null;\n\nconst ApplicationInfosPage = () => {\n const inputsRef = React.useRef();\n const toggleNotification = useNotification();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get, post } = useFetchClient();\n const { updateProjectSettings } = useConfiguration();\n const permissions = useSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n\n const {\n communityEdition,\n latestStrapiReleaseTag,\n nodeVersion,\n shouldUpdateStrapi,\n strapiVersion,\n } = useAppInfo();\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(permissions.settings['project-settings']);\n\n useFocusWhenNavigate();\n\n const { data, isLoading } = useQuery(\n ['project-settings'],\n async () => {\n const { data } = await get('/admin/project-settings');\n\n return data;\n },\n {\n cacheTime: 0,\n enabled: canRead,\n select(data) {\n return {\n ...data,\n\n authLogo: data.authLogo\n ? {\n ...data.authLogo,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : data.authLogo,\n\n menuLogo: data.menuLogo\n ? {\n ...data.menuLogo,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : data.menuLogo,\n };\n },\n }\n );\n\n const submitMutation = useMutation(\n (body) =>\n post('/admin/project-settings', body, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n }),\n {\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n },\n\n async onSuccess(data) {\n const { menuLogo, authLogo } = data;\n\n updateProjectSettings({ menuLogo: menuLogo?.url, authLogo: authLogo?.url });\n\n if (menuLogo?.rawFile) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (authLogo?.rawFile) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n },\n }\n );\n\n const handleSubmit = (e) => {\n e.preventDefault();\n\n submitMutation.mutate(getFormData(inputsRef.current.getValues()));\n };\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n return (\n <Layout>\n {/* TODO: Add missing translation */}\n <SettingsPageTitle name=\"Application\" />\n <Main>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.application.isLoading',\n defaultMessage: 'Loading',\n })}\n </Loader>\n ) : (\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button type=\"submit\" startIcon={<Check />}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid gap={5} as=\"dl\">\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </GridItem>\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current plan',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>\n {formatMessage(\n {\n id: 'Settings.application.ee-or-ce',\n defaultMessage:\n '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}',\n },\n { communityEdition }\n )}\n </Typography>\n <Link\n href=\"https://strapi.io/pricing-self-hosted\"\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </GridItem>\n\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography as=\"dd\">{nodeVersion}</Typography>\n </GridItem>\n <AdminSeatInfo />\n </Grid>\n </Flex>\n {canRead && data && (\n <CustomizationInfos\n canUpdate={canUpdate}\n ref={inputsRef}\n projectSettingsStored={data}\n />\n )}\n </Flex>\n </ContentLayout>\n </form>\n )}\n </Main>\n </Layout>\n );\n};\n\nexport default ApplicationInfosPage;\n","import { MenuItem } from '@strapi/helper-plugin';\n\ninterface UniqueRouteProps\n extends Pick<MenuItem, 'to' | 'exact'>,\n Required<Pick<MenuItem, 'Component'>> {\n key: string;\n}\n\nexport function makeUniqueRoutes(routes: UniqueRouteProps[]) {\n return routes.filter(\n (route, index, refArray) => refArray.findIndex((obj) => obj.key === route.key) === index\n );\n}\n","import * as React from 'react';\n\nimport { Layout } from '@strapi/design-system';\nimport { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { Redirect, Route, Switch, useParams } from 'react-router-dom';\n\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\nimport { createRoute } from '../../utils/createRoute';\n\nimport SettingsNav from './components/SettingsNav';\nimport { ROUTES_CE } from './constants';\nimport ApplicationInfosPage from './pages/ApplicationInfosPage';\n// TODO: inline utility once the file is converted to TypeScript\nimport { makeUniqueRoutes } from './utils/makeUniqueRoutes';\n\nexport function SettingsPage() {\n const { settingId } = useParams();\n const { settings } = useStrapiApp();\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../../../ee/admin/src/pages/SettingsPage/constants')).ROUTES_EE,\n {\n combine(ceRoutes, eeRoutes) {\n return [...ceRoutes, ...eeRoutes];\n },\n defaultValue: [],\n }\n );\n\n // Creates the admin routes\n const adminRoutes = React.useMemo(() => {\n return makeUniqueRoutes(\n routes.map(({ to, Component, exact }) => createRoute(Component, to, exact))\n );\n }, [routes]);\n\n const pluginsRoutes = Object.values(settings).flatMap((section) => {\n const { links } = section;\n\n return links.map((link) => createRoute(link.Component, link.to, link.exact || false));\n });\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!settingId) {\n return <Redirect to=\"/settings/application-infos\" />;\n }\n\n return (\n <Layout sideNav={<SettingsNav menu={menu} />}>\n <Helmet\n title={formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n />\n\n <Switch>\n <Route path=\"/settings/application-infos\" component={ApplicationInfosPage} exact />\n {adminRoutes}\n {pluginsRoutes}\n </Switch>\n </Layout>\n );\n}\n"],"names":["ceLinks","sections","permission","initialState","reducer","data"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-45a78b18.mjs","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/SettingsPage/components/SettingsNav/index.js","../../admin/src/pages/SettingsPage/constants.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/constants.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/urlToFile.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/stepper.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/init.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/reducer.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/getFormData.js","../../admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js","../../admin/src/pages/SettingsPage/utils/makeUniqueRoutes.ts","../../admin/src/pages/SettingsPage/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport {\n hasPermissions,\n StrapiAppSetting,\n StrapiAppSettingLink,\n useRBACProvider,\n useStrapiApp,\n useAppInfo,\n} from '@strapi/helper-plugin';\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { selectAdminPermissions } from '../selectors';\n\nimport { useEnterprise } from './useEnterprise';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: StrapiAppSettingLink['permissions'];\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { settings } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: await hasPermissions(userPermissions, link.permissions),\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import React from 'react';\n\nimport { Icon } from '@strapi/design-system';\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Lock } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\n/**\n * TODO: refactor the SubNav entirely, we shouldn't have\n * to do this hack to work a lock at the end. It's a bit hacky.\n */\n\nconst CustomIcon = styled(Icon)`\n right: 15px;\n position: absolute;\n`;\n\nconst SettingsNav = ({ menu }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination = null) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <SubNavLink\n as={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={() => handleClickOnLink(link.to)}\n key={link.id}\n >\n {formatMessage(link.intlLabel)}\n {link?.lockIcon && (\n <CustomIcon width={`${15 / 16}rem`} height={`${15 / 16}rem`} as={Lock} />\n )}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nSettingsNav.propTypes = {\n menu: PropTypes.array.isRequired,\n};\n\nexport default SettingsNav;\n","export const ROUTES_CE = [\n {\n async Component() {\n const component = await import('./pages/Roles/ProtectedListPage');\n\n return component;\n },\n to: '/settings/roles',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/CreatePage');\n\n return component;\n },\n to: '/settings/roles/duplicate/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/CreatePage');\n\n return component;\n },\n to: '/settings/roles/new',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Roles/ProtectedEditPage');\n\n return component;\n },\n to: '/settings/roles/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Users/ProtectedListPage');\n\n return component;\n },\n to: '/settings/users',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Users/ProtectedEditPage');\n\n return component;\n },\n to: '/settings/users/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/webhooks/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedEditView');\n\n return component;\n },\n to: '/settings/webhooks/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/Webhooks/ProtectedListView');\n\n return component;\n },\n to: '/settings/webhooks',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedListView');\n\n return component;\n },\n to: '/settings/api-tokens',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/api-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ApiTokens/ProtectedEditView');\n\n return component;\n },\n to: '/settings/api-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedCreateView');\n\n return component;\n },\n to: '/settings/transfer-tokens/create',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedListView');\n\n return component;\n },\n to: '/settings/transfer-tokens',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/TransferTokens/ProtectedEditView');\n\n return component;\n },\n to: '/settings/transfer-tokens/:id',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/AuditLogs/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-audit-logs',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/ReviewWorkflows/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-review-workflows',\n exact: true,\n },\n {\n async Component() {\n const component = await import('./pages/SingleSignOn/SalesPage');\n\n return component;\n },\n to: '/settings/purchase-single-sign-on',\n exact: true,\n },\n];\n","export const DIMENSION = 750;\nexport const SIZE = 100;\nexport const ACCEPTED_FORMAT = ['image/jpeg', 'image/png', 'image/svg+xml'];\n","/* eslint-disable consistent-return */\n/*\n *\n * LogoModalStepper reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n localImage: undefined,\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_LOCAL_IMAGE': {\n draftState.localImage = action.value;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer } from 'react';\n\nimport { ModalHeader, ModalLayout, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport reducer, { initialState } from './reducer';\n\nconst LogoModalStepper = ({\n onChangeLogo,\n customLogo,\n goTo,\n Component,\n modalTitle,\n next,\n prev,\n currentStep,\n}) => {\n const [{ localImage }, dispatch] = useReducer(reducer, initialState);\n const { formatMessage } = useIntl();\n\n const setLocalImage = (asset) => {\n dispatch({\n type: 'SET_LOCAL_IMAGE',\n value: asset,\n });\n };\n\n const handleCloseModal = () => {\n goTo(null);\n };\n\n if (!currentStep) {\n return null;\n }\n\n return (\n <ModalLayout labelledBy=\"modal\" onClose={handleCloseModal}>\n <ModalHeader>\n <Typography fontWeight=\"bold\" as=\"h2\" id=\"modal\">\n {formatMessage(modalTitle)}\n </Typography>\n </ModalHeader>\n <Component\n setLocalImage={setLocalImage}\n goTo={goTo}\n next={next}\n prev={prev}\n onClose={handleCloseModal}\n asset={localImage || customLogo}\n onChangeLogo={onChangeLogo}\n />\n </ModalLayout>\n );\n};\n\nLogoModalStepper.defaultProps = {\n Component: undefined,\n currentStep: undefined,\n customLogo: undefined,\n modalTitle: undefined,\n next: null,\n prev: null,\n};\n\nLogoModalStepper.propTypes = {\n Component: PropTypes.elementType,\n currentStep: PropTypes.string,\n customLogo: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }),\n goTo: PropTypes.func.isRequired,\n modalTitle: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n next: PropTypes.string,\n onChangeLogo: PropTypes.func.isRequired,\n prev: PropTypes.string,\n};\n\nexport default LogoModalStepper;\n","/* eslint-disable consistent-return */\n/*\n *\n * LogoInput reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n currentStep: undefined,\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GO_TO': {\n draftState.currentStep = action.to;\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import { ACCEPTED_FORMAT, DIMENSION, SIZE } from './constants';\n\nconst FILE_FORMAT_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-format',\n defaultMessage: 'Wrong format uploaded (accepted formats only: jpeg, jpg, png, svg).',\n};\n\nconst FILE_SIZING_ERROR_MESSAGE = {\n id: 'Settings.application.customization.modal.upload.error-size',\n defaultMessage:\n 'The file uploaded is too large (max dimension: {dimension}x{dimension}, max file size: {size}KB)',\n};\n\nconst getFileDimensions = (file) => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const img = new Image();\n img.onload = function () {\n resolve({ width: img.width, height: img.height });\n };\n img.src = reader.result;\n };\n reader.readAsDataURL(file);\n });\n};\n\nconst rawFileToAsset = (rawFile, fileDimensions) => {\n return {\n ext: rawFile.name.split('.').pop(),\n size: rawFile.size / 1000,\n name: rawFile.name,\n url: URL.createObjectURL(rawFile),\n rawFile,\n width: fileDimensions.width,\n height: fileDimensions.height,\n };\n};\n\nexport const parseFileMetadatas = async (file) => {\n let error;\n\n const isFormatAuthorized = ACCEPTED_FORMAT.includes(file.type);\n\n if (!isFormatAuthorized) {\n error = new Error('File format');\n error.displayMessage = FILE_FORMAT_ERROR_MESSAGE;\n\n throw error;\n }\n\n const fileDimensions = await getFileDimensions(file);\n\n const areDimensionsAuthorized =\n fileDimensions.width <= DIMENSION && fileDimensions.height <= DIMENSION;\n\n if (!areDimensionsAuthorized) {\n error = new Error('File sizing');\n error.displayMessage = FILE_SIZING_ERROR_MESSAGE;\n\n throw error;\n }\n\n const asset = rawFileToAsset(file, fileDimensions);\n\n const isSizeAuthorized = asset.size <= SIZE;\n\n if (!isSizeAuthorized) {\n error = new Error('File sizing');\n error.displayMessage = FILE_SIZING_ERROR_MESSAGE;\n\n throw error;\n }\n\n return asset;\n};\n","import React, { useRef, useState } from 'react';\n\nimport {\n Box,\n Button,\n Field,\n FieldError,\n FieldInput,\n Flex,\n Icon,\n ModalFooter,\n Typography,\n} from '@strapi/design-system';\nimport { PicturePlus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ACCEPTED_FORMAT, DIMENSION, SIZE } from '../../utils/constants';\nimport { parseFileMetadatas } from '../../utils/parseFileMetadatas';\n\nconst FileInput = styled(FieldInput)`\n opacity: 0;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n`;\n\nconst FromComputerForm = ({ setLocalImage, goTo, next, onClose }) => {\n const { formatMessage } = useIntl();\n const [dragOver, setDragOver] = useState(false);\n const [fileError, setFileError] = useState(undefined);\n const inputRef = useRef(null);\n\n const handleDragEnter = () => setDragOver(true);\n const handleDragLeave = () => setDragOver(false);\n\n const handleClick = (e) => {\n e.preventDefault();\n inputRef.current.click();\n };\n\n const handleChange = async () => {\n handleDragLeave();\n const file = inputRef.current.files[0];\n\n if (!file) {\n return;\n }\n\n try {\n const asset = await parseFileMetadatas(file);\n setLocalImage(asset);\n goTo(next);\n } catch (err) {\n if (err.displayMessage) {\n setFileError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n inputRef.current.focus();\n } else {\n throw err;\n }\n }\n };\n\n const getBorderColor = () => {\n if (dragOver) {\n return 'primary500';\n }\n if (fileError) {\n return 'danger600';\n }\n\n return 'neutral300';\n };\n\n return (\n <>\n <form>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Field name=\"logo-upload\" error={fileError}>\n <label htmlFor=\"logo-upload\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex\n paddingTop={9}\n paddingBottom={7}\n hasRadius\n justifyContent=\"center\"\n direction=\"column\"\n background={dragOver ? 'primary100' : 'neutral100'}\n borderColor={getBorderColor()}\n borderStyle=\"dashed\"\n borderWidth=\"1px\"\n position=\"relative\"\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n >\n <Icon\n color=\"primary600\"\n width={`${60 / 16}rem`}\n height={`${60 / 16}rem`}\n as={PicturePlus}\n aria-hidden\n />\n\n <Box paddingTop={3} paddingBottom={5}>\n <Typography variant=\"delta\" as=\"span\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.drag-drop',\n defaultMessage: 'Drag and Drop here or',\n })}\n </Typography>\n </Box>\n\n <FileInput\n accept={ACCEPTED_FORMAT}\n cursor=\"pointer\"\n as=\"input\"\n type=\"file\"\n name=\"files\"\n tabIndex={-1}\n zIndex={1}\n onChange={handleChange}\n ref={inputRef}\n id=\"logo-upload\"\n />\n\n <Button type=\"button\" onClick={handleClick}>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.cta.browse',\n defaultMessage: 'Browse files',\n })}\n </Button>\n\n <Box paddingTop={6}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.modal.upload.file-validation',\n defaultMessage:\n 'Max dimension: {dimension}x{dimension}, Max size: {size}KB',\n },\n { size: SIZE, dimension: DIMENSION }\n )}\n </Typography>\n </Box>\n </Flex>\n <FieldError />\n </Flex>\n </label>\n </Field>\n </Box>\n </form>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nFromComputerForm.defaultProps = {\n next: null,\n};\n\nFromComputerForm.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default FromComputerForm;\n","import { getFetchClient } from '@strapi/helper-plugin';\n\nconst urlToFile = async (url) => {\n try {\n const { get } = getFetchClient();\n const res = await get(url, { responseType: 'blob', timeout: 8000 });\n const loadedFile = new File([res.data], res.config.url, {\n type: res.headers['content-type'],\n });\n\n return loadedFile;\n } catch (err) {\n err.displayMessage = {\n id: 'Settings.application.customization.modal.upload.error-network',\n defaultMessage: 'Network error',\n };\n\n throw err;\n }\n};\n\nexport default urlToFile;\n","import React, { useState } from 'react';\n\nimport { Box, Button, ModalFooter, TextInput } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { DIMENSION, SIZE } from '../../utils/constants';\nimport { parseFileMetadatas } from '../../utils/parseFileMetadatas';\nimport urlToFile from '../../utils/urlToFile';\n\nconst FromUrlForm = ({ goTo, next, onClose, setLocalImage }) => {\n const { formatMessage } = useIntl();\n const [logoUrl, setLogoUrl] = useState('');\n const [error, setError] = useState(null);\n\n const handleChange = (e) => {\n setLogoUrl(e.target.value);\n };\n\n const handleSubmit = async () => {\n try {\n const file = await urlToFile(logoUrl);\n const asset = await parseFileMetadatas(file);\n\n setLocalImage(asset);\n goTo(next);\n } catch (err) {\n if (err.displayMessage) {\n setError(formatMessage(err.displayMessage, { size: SIZE, dimension: DIMENSION }));\n } else {\n throw err;\n }\n }\n };\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n handleSubmit();\n }}\n >\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <TextInput\n label={formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url.input-label',\n defaultMessage: 'URL',\n })}\n error={error}\n onChange={handleChange}\n value={logoUrl}\n name=\"logo-url\"\n />\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.next',\n defaultMessage: 'Next',\n })}\n </Button>\n }\n />\n </form>\n );\n};\n\nFromUrlForm.defaultProps = {\n next: null,\n};\n\nFromUrlForm.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default FromUrlForm;\n","import React from 'react';\n\nimport { Box, Divider, Tab, TabGroup, TabPanel, TabPanels, Tabs } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport FromComputerForm from './FromComputerForm';\nimport FromUrlForm from './FromUrlForm';\n\nconst AddLogoDialog = ({ setLocalImage, goTo, next, onClose }) => {\n const { formatMessage } = useIntl();\n\n return (\n <TabGroup\n label={formatMessage({\n id: 'Settings.application.customization.modal.tab.label',\n defaultMessage: 'How do you want to upload your assets?',\n })}\n variant=\"simple\"\n >\n <Box paddingLeft={8} paddingRight={8}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-computer',\n defaultMessage: 'From computer',\n })}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'Settings.application.customization.modal.upload.from-url',\n defaultMessage: 'From url',\n })}\n </Tab>\n </Tabs>\n\n <Divider />\n </Box>\n <TabPanels>\n <TabPanel>\n <FromComputerForm\n onClose={onClose}\n setLocalImage={setLocalImage}\n goTo={goTo}\n next={next}\n />\n </TabPanel>\n <TabPanel>\n <FromUrlForm onClose={onClose} setLocalImage={setLocalImage} goTo={goTo} next={next} />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n );\n};\n\nAddLogoDialog.defaultProps = {\n next: null,\n};\n\nAddLogoDialog.propTypes = {\n goTo: PropTypes.func.isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default AddLogoDialog;\n","import React from 'react';\n\nimport {\n Card,\n CardAsset,\n CardBadge,\n CardBody,\n CardContent,\n CardHeader,\n CardSubtitle,\n CardTitle,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst ImageCardAsset = ({ asset }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Card>\n <CardHeader>\n <CardAsset size=\"S\" src={asset.url} />\n </CardHeader>\n <CardBody>\n <CardContent>\n <CardTitle>{asset.name}</CardTitle>\n <CardSubtitle>\n {`${asset.ext.toUpperCase()} - ${asset.width}✕${asset.height}`}\n </CardSubtitle>\n </CardContent>\n <CardBadge>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.card-badge',\n defaultMessage: 'image',\n })}\n </CardBadge>\n </CardBody>\n </Card>\n );\n};\n\nImageCardAsset.propTypes = {\n asset: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }).isRequired,\n};\n\nexport default ImageCardAsset;\n","import React from 'react';\n\nimport { Box, Button, Flex, ModalFooter, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport ImageCardAsset from './ImageCardAsset';\n\nconst PendingLogoDialog = ({ onClose, asset, prev, next, goTo, setLocalImage, onChangeLogo }) => {\n const { formatMessage } = useIntl();\n\n const handleGoBack = () => {\n setLocalImage(undefined);\n goTo(prev);\n };\n\n const handleUpload = () => {\n onChangeLogo(asset);\n goTo(next);\n };\n\n return (\n <>\n <Box paddingLeft={8} paddingRight={8} paddingTop={6} paddingBottom={6}>\n <Flex justifyContent=\"space-between\" paddingBottom={6}>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.title',\n defaultMessage: 'Logo ready to upload',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.subtitle',\n defaultMessage: 'Manage the chosen logo before uploading it',\n })}\n </Typography>\n </Flex>\n <Button onClick={handleGoBack} variant=\"secondary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.choose-another',\n defaultMessage: 'Choose another logo',\n })}\n </Button>\n </Flex>\n <Box maxWidth={pxToRem(180)}>{asset.url ? <ImageCardAsset asset={asset} /> : null}</Box>\n </Box>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'Settings.application.customization.modal.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Button onClick={handleUpload}>\n {formatMessage({\n id: 'Settings.application.customization.modal.pending.upload',\n defaultMessage: 'Upload logo',\n })}\n </Button>\n }\n />\n </>\n );\n};\n\nPendingLogoDialog.defaultProps = {\n next: null,\n prev: null,\n};\n\nPendingLogoDialog.propTypes = {\n goTo: PropTypes.func.isRequired,\n asset: PropTypes.shape({\n name: PropTypes.string,\n url: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n ext: PropTypes.string,\n }).isRequired,\n next: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n onChangeLogo: PropTypes.func.isRequired,\n prev: PropTypes.string,\n setLocalImage: PropTypes.func.isRequired,\n};\n\nexport default PendingLogoDialog;\n","import AddLogoDialog from '../LogoModalStepper/AddLogoDialog';\nimport PendingLogoDialog from '../LogoModalStepper/PendingLogoDialog';\n\nconst stepper = {\n upload: {\n Component: AddLogoDialog,\n modalTitle: {\n id: 'Settings.application.customization.modal.upload',\n defaultMessage: 'Upload logo',\n },\n next: 'pending',\n prev: null,\n },\n pending: {\n Component: PendingLogoDialog,\n modalTitle: {\n id: 'Settings.application.customization.modal.pending',\n defaultMessage: 'Pending logo',\n },\n next: null,\n prev: 'upload',\n },\n};\n\nexport default stepper;\n","import React, { useReducer } from 'react';\n\nimport {\n Box,\n CarouselActions,\n CarouselInput,\n CarouselSlide,\n IconButton,\n} from '@strapi/design-system';\nimport { Plus, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport LogoModalStepper from '../LogoModalStepper';\n\nimport reducer, { initialState } from './reducer';\nimport stepper from './stepper';\n\nconst LogoInput = ({\n canUpdate,\n customLogo,\n defaultLogo,\n hint,\n label,\n onChangeLogo,\n onResetLogo,\n}) => {\n const [{ currentStep }, dispatch] = useReducer(reducer, initialState);\n const { Component, next, prev, modalTitle } = stepper[currentStep] || {};\n const { formatMessage } = useIntl();\n\n const goTo = (to) => {\n dispatch({\n type: 'GO_TO',\n to,\n });\n };\n\n return (\n <>\n <CarouselInput\n label={label}\n selectedSlide={0}\n hint={hint}\n // Carousel is used here for a single media,\n // we don't need previous and next labels but these props are required\n previousLabel=\"\"\n nextLabel=\"\"\n onNext={() => {}}\n onPrevious={() => {}}\n secondaryLabel={customLogo?.name || 'logo.png'}\n actions={\n <CarouselActions>\n <IconButton\n disabled={!canUpdate}\n onClick={() => goTo(customLogo ? 'pending' : 'upload')}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.change-action',\n defaultMessage: 'Change logo',\n })}\n icon={<Plus />}\n />\n {customLogo && (\n <IconButton\n disabled={!canUpdate}\n onClick={onResetLogo}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.reset-action',\n defaultMessage: 'Reset logo',\n })}\n icon={<Refresh />}\n />\n )}\n </CarouselActions>\n }\n >\n <CarouselSlide\n label={formatMessage({\n id: 'Settings.application.customization.carousel-slide.label',\n defaultMessage: 'Logo slide',\n })}\n >\n <Box\n maxHeight=\"40%\"\n maxWidth=\"40%\"\n as=\"img\"\n src={customLogo?.url || defaultLogo}\n alt={formatMessage({\n id: 'Settings.application.customization.carousel.title',\n defaultMessage: 'Logo',\n })}\n />\n </CarouselSlide>\n </CarouselInput>\n <LogoModalStepper\n Component={Component}\n currentStep={currentStep}\n onChangeLogo={onChangeLogo}\n customLogo={customLogo}\n goTo={goTo}\n next={next}\n prev={prev}\n modalTitle={modalTitle}\n />\n </>\n );\n};\n\nLogoInput.defaultProps = {\n canUpdate: false,\n customLogo: null,\n hint: null,\n};\n\nLogoInput.propTypes = {\n canUpdate: PropTypes.bool,\n customLogo: PropTypes.shape({\n url: PropTypes.string,\n name: PropTypes.string,\n }),\n label: PropTypes.string.isRequired,\n hint: PropTypes.string,\n defaultLogo: PropTypes.string.isRequired,\n onChangeLogo: PropTypes.func.isRequired,\n onResetLogo: PropTypes.func.isRequired,\n};\n\nexport default LogoInput;\n","import merge from 'lodash/merge';\n\nconst init = (initialState, projectSettingsStored) => {\n const copyInitialState = merge(initialState, {\n menuLogo: {\n display: projectSettingsStored.menuLogo,\n },\n authLogo: {\n display: projectSettingsStored.authLogo,\n },\n });\n\n return copyInitialState;\n};\n\nexport default init;\n","/* eslint-disable consistent-return */\n/*\n *\n * ApplicationInfosPage Form reducer\n *\n */\n\nimport produce from 'immer';\n\nconst initialState = {\n menuLogo: {\n display: null,\n submit: {\n rawFile: null,\n isReset: false,\n },\n },\n authLogo: {\n display: null,\n submit: {\n rawFile: null,\n isReset: false,\n },\n },\n};\n\nconst reducer = (state = initialState, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_CUSTOM_MENU_LOGO': {\n draftState.menuLogo.display = action.value;\n draftState.menuLogo.submit.rawFile = action.value.rawFile;\n break;\n }\n case 'SET_CUSTOM_AUTH_LOGO': {\n draftState.authLogo.display = action.value;\n draftState.authLogo.submit.rawFile = action.value.rawFile;\n break;\n }\n case 'RESET_CUSTOM_MENU_LOGO': {\n draftState.menuLogo.display = null;\n draftState.menuLogo.submit = {\n rawFile: null,\n isReset: true,\n };\n break;\n }\n case 'RESET_CUSTOM_AUTH_LOGO': {\n draftState.authLogo.display = null;\n draftState.authLogo.submit = {\n rawFile: null,\n isReset: true,\n };\n break;\n }\n default: {\n return draftState;\n }\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { forwardRef, useImperativeHandle, useReducer } from 'react';\n\nimport { Box, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useTracking } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useConfiguration } from '../../../../../../contexts/configuration';\nimport { DIMENSION, SIZE } from '../../utils/constants';\nimport LogoInput from '../LogoInput';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nconst CustomizationInfos = forwardRef(({ canUpdate, projectSettingsStored }, ref) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const {\n logos: { menu, auth },\n } = useConfiguration();\n const [{ menuLogo, authLogo }, dispatch] = useReducer(reducer, initialState, () =>\n init(initialState, projectSettingsStored)\n );\n\n const handleChangeMenuLogo = (asset) => {\n dispatch({\n type: 'SET_CUSTOM_MENU_LOGO',\n value: asset,\n });\n };\n\n const handleResetMenuLogo = () => {\n trackUsage('didClickResetLogo', {\n logo: 'menu',\n });\n\n dispatch({\n type: 'RESET_CUSTOM_MENU_LOGO',\n });\n };\n\n const handleChangeAuthLogo = (asset) => {\n dispatch({\n type: 'SET_CUSTOM_AUTH_LOGO',\n value: asset,\n });\n };\n\n const handleResetAuthLogo = () => {\n trackUsage('didClickResetLogo', {\n logo: 'auth',\n });\n\n dispatch({\n type: 'RESET_CUSTOM_AUTH_LOGO',\n });\n };\n\n useImperativeHandle(ref, () => ({\n getValues: () => ({ menuLogo: menuLogo.submit, authLogo: authLogo.submit }),\n }));\n\n return (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage: 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid paddingTop={4} gap={4}>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={menuLogo.display}\n defaultLogo={menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeMenuLogo}\n onResetLogo={handleResetMenuLogo}\n />\n </GridItem>\n <GridItem col={6} s={12}>\n <LogoInput\n canUpdate={canUpdate}\n customLogo={authLogo.display}\n defaultLogo={auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeAuthLogo}\n onResetLogo={handleResetAuthLogo}\n />\n </GridItem>\n </Grid>\n </Box>\n );\n});\n\nCustomizationInfos.defaultProps = {\n canUpdate: false,\n projectSettingsStored: null,\n};\n\nCustomizationInfos.propTypes = {\n canUpdate: PropTypes.bool,\n projectSettingsStored: PropTypes.shape({\n menuLogo: PropTypes.shape({\n url: PropTypes.string,\n name: PropTypes.string,\n }),\n }),\n};\n\nexport default CustomizationInfos;\n","const getFormData = (data) => {\n const formData = new FormData();\n\n Object.entries(data).forEach(([key, value]) => {\n if (value && value.rawFile instanceof File) {\n formData.append(key, value.rawFile);\n }\n\n if (value && value.isReset) {\n formData.append(key, null);\n }\n });\n\n return formData;\n};\n\nexport default getFormData;\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Link,\n Loader,\n Main,\n Typography,\n} from '@strapi/design-system';\nimport {\n prefixFileUrlWithBackendUrl,\n SettingsPageTitle,\n useAPIErrorHandler,\n useAppInfo,\n useFetchClient,\n useFocusWhenNavigate,\n useNotification,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\n\nimport { useConfiguration } from '../../../../contexts/configuration';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport CustomizationInfos from './components/CustomizationInfos';\nimport getFormData from './utils/getFormData';\n\nconst AdminSeatInfoCE = () => null;\n\nconst ApplicationInfosPage = () => {\n const inputsRef = React.useRef();\n const toggleNotification = useNotification();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { get, post } = useFetchClient();\n const { updateProjectSettings } = useConfiguration();\n const permissions = useSelector(selectAdminPermissions);\n const { formatAPIError } = useAPIErrorHandler();\n\n const {\n communityEdition,\n latestStrapiReleaseTag,\n nodeVersion,\n shouldUpdateStrapi,\n strapiVersion,\n } = useAppInfo();\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(permissions.settings['project-settings']);\n\n useFocusWhenNavigate();\n\n const { data, isLoading } = useQuery(\n ['project-settings'],\n async () => {\n const { data } = await get('/admin/project-settings');\n\n return data;\n },\n {\n cacheTime: 0,\n enabled: canRead,\n select(data) {\n return {\n ...data,\n\n authLogo: data.authLogo\n ? {\n ...data.authLogo,\n url: prefixFileUrlWithBackendUrl(data.authLogo.url),\n }\n : data.authLogo,\n\n menuLogo: data.menuLogo\n ? {\n ...data.menuLogo,\n url: prefixFileUrlWithBackendUrl(data.menuLogo.url),\n }\n : data.menuLogo,\n };\n },\n }\n );\n\n const submitMutation = useMutation(\n (body) =>\n post('/admin/project-settings', body, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n }),\n {\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n },\n\n async onSuccess(data) {\n const { menuLogo, authLogo } = data;\n\n updateProjectSettings({ menuLogo: menuLogo?.url, authLogo: authLogo?.url });\n\n if (menuLogo?.rawFile) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (authLogo?.rawFile) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n },\n }\n );\n\n const handleSubmit = (e) => {\n e.preventDefault();\n\n submitMutation.mutate(getFormData(inputsRef.current.getValues()));\n };\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n return (\n <Layout>\n {/* TODO: Add missing translation */}\n <SettingsPageTitle name=\"Application\" />\n <Main>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.application.isLoading',\n defaultMessage: 'Loading',\n })}\n </Loader>\n ) : (\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button type=\"submit\" startIcon={<Check />}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid gap={5} as=\"dl\">\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </GridItem>\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.edition-title',\n defaultMessage: 'current plan',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" as=\"dd\">\n <Typography>\n {formatMessage(\n {\n id: 'Settings.application.ee-or-ce',\n defaultMessage:\n '{communityEdition, select, true {Community Edition} other {Enterprise Edition}}',\n },\n { communityEdition }\n )}\n </Typography>\n <Link\n href=\"https://strapi.io/pricing-self-hosted\"\n isExternal\n endIcon={<ExternalLink />}\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </GridItem>\n\n <GridItem col={6} s={12}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" as=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography as=\"dd\">{nodeVersion}</Typography>\n </GridItem>\n <AdminSeatInfo />\n </Grid>\n </Flex>\n {canRead && data && (\n <CustomizationInfos\n canUpdate={canUpdate}\n ref={inputsRef}\n projectSettingsStored={data}\n />\n )}\n </Flex>\n </ContentLayout>\n </form>\n )}\n </Main>\n </Layout>\n );\n};\n\nexport default ApplicationInfosPage;\n","import { MenuItem } from '@strapi/helper-plugin';\n\ninterface UniqueRouteProps\n extends Pick<MenuItem, 'to' | 'exact'>,\n Required<Pick<MenuItem, 'Component'>> {\n key: string;\n}\n\nexport function makeUniqueRoutes(routes: UniqueRouteProps[]) {\n return routes.filter(\n (route, index, refArray) => refArray.findIndex((obj) => obj.key === route.key) === index\n );\n}\n","import * as React from 'react';\n\nimport { Layout } from '@strapi/design-system';\nimport { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { Redirect, Route, Switch, useParams } from 'react-router-dom';\n\nimport { useEnterprise } from '../../hooks/useEnterprise';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\nimport { createRoute } from '../../utils/createRoute';\n\nimport SettingsNav from './components/SettingsNav';\nimport { ROUTES_CE } from './constants';\nimport ApplicationInfosPage from './pages/ApplicationInfosPage';\n// TODO: inline utility once the file is converted to TypeScript\nimport { makeUniqueRoutes } from './utils/makeUniqueRoutes';\n\nexport function SettingsPage() {\n const { settingId } = useParams();\n const { settings } = useStrapiApp();\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n const routes = useEnterprise(\n ROUTES_CE,\n async () => (await import('../../../../ee/admin/src/pages/SettingsPage/constants')).ROUTES_EE,\n {\n combine(ceRoutes, eeRoutes) {\n return [...ceRoutes, ...eeRoutes];\n },\n defaultValue: [],\n }\n );\n\n // Creates the admin routes\n const adminRoutes = React.useMemo(() => {\n return makeUniqueRoutes(\n routes.map(({ to, Component, exact }) => createRoute(Component, to, exact))\n );\n }, [routes]);\n\n const pluginsRoutes = Object.values(settings).flatMap((section) => {\n const { links } = section;\n\n return links.map((link) => createRoute(link.Component, link.to, link.exact || false));\n });\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n if (!settingId) {\n return <Redirect to=\"/settings/application-infos\" />;\n }\n\n return (\n <Layout sideNav={<SettingsNav menu={menu} />}>\n <Helmet\n title={formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n />\n\n <Switch>\n <Route path=\"/settings/application-infos\" component={ApplicationInfosPage} exact />\n {adminRoutes}\n {pluginsRoutes}\n </Switch>\n </Layout>\n );\n}\n"],"names":["ceLinks","sections","permission","initialState","reducer","data"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const helperPlugin = require("@strapi/helper-plugin");
|
|
5
5
|
const reactRedux = require("react-redux");
|
|
6
|
-
const AuthenticatedApp = require("./AuthenticatedApp-
|
|
6
|
+
const AuthenticatedApp = require("./AuthenticatedApp-79e3f141.js");
|
|
7
7
|
const React = require("react");
|
|
8
8
|
const designSystem = require("@strapi/design-system");
|
|
9
9
|
const Icons = require("@strapi/icons");
|
|
@@ -14,7 +14,7 @@ const reactQuery = require("react-query");
|
|
|
14
14
|
const reactRouterDom = require("react-router-dom");
|
|
15
15
|
const useAdminRoles = require("./useAdminRoles-68d5d608.js");
|
|
16
16
|
const useContentTypes = require("./useContentTypes-7da293cc.js");
|
|
17
|
-
const validateWorkflow = require("./validateWorkflow-
|
|
17
|
+
const validateWorkflow = require("./validateWorkflow-11ecf8ee.js");
|
|
18
18
|
const useLicenseLimits = require("./useLicenseLimits-81ef3cce.js");
|
|
19
19
|
const Layout = require("./Layout-4b3e434a.js");
|
|
20
20
|
const LimitsModal = require("./LimitsModal-203482b8.js");
|
|
@@ -22,7 +22,7 @@ const constants = require("./constants-85da8cc4.js");
|
|
|
22
22
|
const useReviewWorkflows = require("./useReviewWorkflows-799e0305.js");
|
|
23
23
|
require("semver/functions/lt");
|
|
24
24
|
require("semver/functions/valid");
|
|
25
|
-
require("./index-
|
|
25
|
+
require("./index-3444ab6f.js");
|
|
26
26
|
require("react-dom/client");
|
|
27
27
|
require("invariant");
|
|
28
28
|
require("lodash/isFunction");
|
|
@@ -45,7 +45,7 @@ require("react-dnd-html5-backend");
|
|
|
45
45
|
require("lodash/cloneDeep");
|
|
46
46
|
require("axios");
|
|
47
47
|
require("prop-types");
|
|
48
|
-
require("./schema-
|
|
48
|
+
require("./schema-e73a6250.js");
|
|
49
49
|
require("lodash/isBoolean");
|
|
50
50
|
require("lodash/isEmpty");
|
|
51
51
|
require("lodash/isNaN");
|
|
@@ -377,4 +377,4 @@ function index() {
|
|
|
377
377
|
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings["review-workflows"].main, children: /* @__PURE__ */ jsxRuntime.jsx(ReviewWorkflowsEditView, {}) });
|
|
378
378
|
}
|
|
379
379
|
exports.default = index;
|
|
380
|
-
//# sourceMappingURL=index-
|
|
380
|
+
//# sourceMappingURL=index-48ebb88c.js.map
|