@strapi/admin 4.15.1 → 4.15.2
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-092ef2be.js → AuthenticatedApp-d1e28164.js} +30 -30
- package/dist/_chunks/{AuthenticatedApp-092ef2be.js.map → AuthenticatedApp-d1e28164.js.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs → AuthenticatedApp-fd7e406d.mjs} +30 -30
- package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs.map → AuthenticatedApp-fd7e406d.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-5798ba6f.mjs → HomePage-2a7f678a.mjs} +7 -8
- package/dist/_chunks/{HomePage-5798ba6f.mjs.map → HomePage-2a7f678a.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-5ae473e6.js → HomePage-2ac5c213.js} +7 -8
- package/dist/_chunks/{HomePage-5ae473e6.js.map → HomePage-2ac5c213.js.map} +1 -1
- package/dist/_chunks/{HomePage-bdcb51be.js → HomePage-616a2985.js} +12 -13
- package/dist/_chunks/HomePage-616a2985.js.map +1 -0
- package/dist/_chunks/{HomePage-a3cc32d2.mjs → HomePage-ded37c60.mjs} +12 -13
- package/dist/_chunks/HomePage-ded37c60.mjs.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js → InstalledPluginsPage-189010c1.js} +10 -12
- package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js.map → InstalledPluginsPage-189010c1.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs → InstalledPluginsPage-afa9edc3.mjs} +10 -12
- package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs.map → InstalledPluginsPage-afa9edc3.mjs.map} +1 -1
- package/dist/_chunks/{index-305a03f4.mjs → Login-02ddabf7.mjs} +25 -29
- package/dist/_chunks/Login-02ddabf7.mjs.map +1 -0
- package/dist/_chunks/{index-137490ba.js → Login-28127829.js} +25 -30
- package/dist/_chunks/Login-28127829.js.map +1 -0
- package/dist/_chunks/{MarketplacePage-7dee72f5.mjs → MarketplacePage-40f76f3d.mjs} +6 -8
- package/dist/_chunks/{MarketplacePage-7dee72f5.mjs.map → MarketplacePage-40f76f3d.mjs.map} +1 -1
- package/dist/_chunks/{MarketplacePage-209ec658.js → MarketplacePage-946134e6.js} +6 -8
- package/dist/_chunks/{MarketplacePage-209ec658.js.map → MarketplacePage-946134e6.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-26c14ba4.mjs → ProfilePage-4c94e332.mjs} +7 -9
- package/dist/_chunks/{ProfilePage-26c14ba4.mjs.map → ProfilePage-4c94e332.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-4f8c127b.js → ProfilePage-6506e401.js} +7 -9
- package/dist/_chunks/{ProfilePage-4f8c127b.js.map → ProfilePage-6506e401.js.map} +1 -1
- package/dist/_chunks/{SSOProviders-1d062c95.mjs → SSOProviders-62bfad92.mjs} +29 -61
- package/dist/_chunks/SSOProviders-62bfad92.mjs.map +1 -0
- package/dist/_chunks/{SSOProviders-1ef0a89e.js → SSOProviders-b395a4e6.js} +28 -80
- package/dist/_chunks/SSOProviders-b395a4e6.js.map +1 -0
- package/dist/_chunks/{build-f36bfc97.js → build-55ba3e68.js} +4 -2
- package/dist/_chunks/{build-f36bfc97.js.map → build-55ba3e68.js.map} +1 -1
- package/dist/_chunks/{build-e1ca35da.mjs → build-b67ecc59.mjs} +4 -2
- package/dist/_chunks/{build-e1ca35da.mjs.map → build-b67ecc59.mjs.map} +1 -1
- package/dist/_chunks/{constants-70e05152.js → constants-42f4f7b3.js} +6 -6
- package/dist/_chunks/{constants-70e05152.js.map → constants-42f4f7b3.js.map} +1 -1
- package/dist/_chunks/{constants-921eda17.mjs → constants-6ecddc43.mjs} +43 -15
- package/dist/_chunks/constants-6ecddc43.mjs.map +1 -0
- package/dist/_chunks/{constants-727a113c.js → constants-733b0568.js} +26 -26
- package/dist/_chunks/constants-733b0568.js.map +1 -0
- package/dist/_chunks/{constants-86aa3e70.js → constants-7596f6f3.js} +60 -13
- package/dist/_chunks/constants-7596f6f3.js.map +1 -0
- package/dist/_chunks/{constants-32975b2e.js → constants-82e97fee.js} +11 -12
- package/dist/_chunks/{constants-32975b2e.js.map → constants-82e97fee.js.map} +1 -1
- package/dist/_chunks/{constants-90c20a6f.mjs → constants-952c50be.mjs} +11 -12
- package/dist/_chunks/{constants-90c20a6f.mjs.map → constants-952c50be.mjs.map} +1 -1
- package/dist/_chunks/{constants-9de7641c.mjs → constants-c0280aed.mjs} +28 -28
- package/dist/_chunks/constants-c0280aed.mjs.map +1 -0
- package/dist/_chunks/{constants-a773ff9b.js → constants-c9fce26f.js} +13 -12
- package/dist/_chunks/{constants-a773ff9b.js.map → constants-c9fce26f.js.map} +1 -1
- package/dist/_chunks/{constants-6157f648.mjs → constants-cbadfd36.mjs} +6 -6
- package/dist/_chunks/{constants-6157f648.mjs.map → constants-cbadfd36.mjs.map} +1 -1
- package/dist/_chunks/{constants-27319180.mjs → constants-cd1acf1b.mjs} +13 -12
- package/dist/_chunks/{constants-27319180.mjs.map → constants-cd1acf1b.mjs.map} +1 -1
- package/dist/_chunks/{develop-513c9644.js → develop-69e28e61.js} +4 -2
- package/dist/_chunks/{develop-513c9644.js.map → develop-69e28e61.js.map} +1 -1
- package/dist/_chunks/{develop-e45b460e.mjs → develop-d97e7494.mjs} +4 -2
- package/dist/_chunks/{develop-e45b460e.mjs.map → develop-d97e7494.mjs.map} +1 -1
- package/dist/_chunks/formatAPIErrors-b599cf27.js +20 -0
- package/dist/_chunks/formatAPIErrors-b599cf27.js.map +1 -0
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs +21 -0
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs.map +1 -0
- package/dist/_chunks/{index-af69bc98.mjs → index-01dfec54.mjs} +11 -11
- package/dist/_chunks/{index-af69bc98.mjs.map → index-01dfec54.mjs.map} +1 -1
- package/dist/_chunks/{index-fcd5bc14.mjs → index-0ed0c104.mjs} +14 -13
- package/dist/_chunks/{index-fcd5bc14.mjs.map → index-0ed0c104.mjs.map} +1 -1
- package/dist/_chunks/{index-1f1e2465.js → index-13a78498.js} +9 -11
- package/dist/_chunks/{index-1f1e2465.js.map → index-13a78498.js.map} +1 -1
- package/dist/_chunks/{index-6b9e3d60.js → index-150ec200.js} +9 -10
- package/dist/_chunks/{index-6b9e3d60.js.map → index-150ec200.js.map} +1 -1
- package/dist/_chunks/{index-b2257157.js → index-17acbe23.js} +49 -12
- package/dist/_chunks/index-17acbe23.js.map +1 -0
- package/dist/_chunks/{index-f5342ea5.js → index-17fbff58.js} +14 -13
- package/dist/_chunks/{index-f5342ea5.js.map → index-17fbff58.js.map} +1 -1
- package/dist/_chunks/{index-bb8093ea.mjs → index-18155022.mjs} +12 -12
- package/dist/_chunks/{index-bb8093ea.mjs.map → index-18155022.mjs.map} +1 -1
- package/dist/_chunks/{index-e22d1a84.mjs → index-22993544.mjs} +14 -13
- package/dist/_chunks/{index-e22d1a84.mjs.map → index-22993544.mjs.map} +1 -1
- package/dist/_chunks/{index-16030b74.js → index-2f4b78ee.js} +3 -3
- package/dist/_chunks/index-2f4b78ee.js.map +1 -0
- package/dist/_chunks/{index-35e4bad6.mjs → index-30933e3e.mjs} +8 -9
- package/dist/_chunks/{index-35e4bad6.mjs.map → index-30933e3e.mjs.map} +1 -1
- package/dist/_chunks/{index-928b18d2.mjs → index-31227291.mjs} +3 -3
- package/dist/_chunks/{index-928b18d2.mjs.map → index-31227291.mjs.map} +1 -1
- package/dist/_chunks/{index-24189ec9.js → index-3b888524.js} +6 -6
- package/dist/_chunks/{index-24189ec9.js.map → index-3b888524.js.map} +1 -1
- package/dist/_chunks/{index-5752584c.mjs → index-44360544.mjs} +182 -76
- package/dist/_chunks/index-44360544.mjs.map +1 -0
- package/dist/_chunks/{index-be2ca313.mjs → index-45ae7be1.mjs} +13 -13
- package/dist/_chunks/{index-be2ca313.mjs.map → index-45ae7be1.mjs.map} +1 -1
- package/dist/_chunks/{index-62b4b3fc.js → index-470a72bf.js} +11 -11
- package/dist/_chunks/{index-62b4b3fc.js.map → index-470a72bf.js.map} +1 -1
- package/dist/_chunks/{index-00202c8a.mjs → index-4a46c368.mjs} +13 -12
- package/dist/_chunks/{index-00202c8a.mjs.map → index-4a46c368.mjs.map} +1 -1
- package/dist/_chunks/{index-332f319e.mjs → index-52b70b56.mjs} +8 -10
- package/dist/_chunks/{index-332f319e.mjs.map → index-52b70b56.mjs.map} +1 -1
- package/dist/_chunks/{index-5ad8482b.mjs → index-55f9b6b3.mjs} +7 -7
- package/dist/_chunks/{index-5ad8482b.mjs.map → index-55f9b6b3.mjs.map} +1 -1
- package/dist/_chunks/{index-6cc54f3b.mjs → index-59e31a9f.mjs} +8 -9
- package/dist/_chunks/{index-6cc54f3b.mjs.map → index-59e31a9f.mjs.map} +1 -1
- package/dist/_chunks/{index-1e973c03.mjs → index-5df8a59e.mjs} +14 -13
- package/dist/_chunks/{index-1e973c03.mjs.map → index-5df8a59e.mjs.map} +1 -1
- package/dist/_chunks/{index-34de382e.mjs → index-60a57d31.mjs} +688 -824
- package/dist/_chunks/index-60a57d31.mjs.map +1 -0
- package/dist/_chunks/{index-77e0e5d7.js → index-62264743.js} +8 -7
- package/dist/_chunks/{index-77e0e5d7.js.map → index-62264743.js.map} +1 -1
- package/dist/_chunks/{index-4565fcbd.js → index-6931e33c.js} +3 -3
- package/dist/_chunks/{index-4565fcbd.js.map → index-6931e33c.js.map} +1 -1
- package/dist/_chunks/{index-3c58de6f.js → index-748f8264.js} +14 -13
- package/dist/_chunks/{index-3c58de6f.js.map → index-748f8264.js.map} +1 -1
- package/dist/_chunks/{index-bdfc1149.mjs → index-768b7de9.mjs} +49 -12
- package/dist/_chunks/index-768b7de9.mjs.map +1 -0
- package/dist/_chunks/{index-1763a04f.js → index-7739ddf5.js} +8 -9
- package/dist/_chunks/{index-1763a04f.js.map → index-7739ddf5.js.map} +1 -1
- package/dist/_chunks/{index-89d27faa.js → index-794eb0b6.js} +14 -13
- package/dist/_chunks/{index-89d27faa.js.map → index-794eb0b6.js.map} +1 -1
- package/dist/_chunks/{index-f448aed2.js → index-7e9cd960.js} +13 -12
- package/dist/_chunks/{index-f448aed2.js.map → index-7e9cd960.js.map} +1 -1
- package/dist/_chunks/{index-0af587c3.js → index-7f642760.js} +78 -147
- package/dist/_chunks/index-7f642760.js.map +1 -0
- package/dist/_chunks/{index-56ced4ab.mjs → index-853bd239.mjs} +8 -7
- package/dist/_chunks/{index-56ced4ab.mjs.map → index-853bd239.mjs.map} +1 -1
- package/dist/_chunks/{index-b98ea3ce.mjs → index-8a4d0275.mjs} +13 -14
- package/dist/_chunks/{index-b98ea3ce.mjs.map → index-8a4d0275.mjs.map} +1 -1
- package/dist/_chunks/{index-6dbc94a9.mjs → index-9c45bda7.mjs} +6 -6
- package/dist/_chunks/{index-6dbc94a9.mjs.map → index-9c45bda7.mjs.map} +1 -1
- package/dist/_chunks/{index-4c5acc70.js → index-9eb160a3.js} +9 -10
- package/dist/_chunks/{index-4c5acc70.js.map → index-9eb160a3.js.map} +1 -1
- package/dist/_chunks/{index-51a15b27.js → index-9f155b14.js} +4 -4
- package/dist/_chunks/{index-51a15b27.js.map → index-9f155b14.js.map} +1 -1
- package/dist/_chunks/{index-066ee02e.js → index-9f50c8b0.js} +8 -10
- package/dist/_chunks/{index-066ee02e.js.map → index-9f50c8b0.js.map} +1 -1
- package/dist/_chunks/{index-284c5926.js → index-9f900c47.js} +33 -47
- package/dist/_chunks/index-9f900c47.js.map +1 -0
- package/dist/_chunks/{index-5d8d89a7.js → index-a163001f.js} +13 -13
- package/dist/_chunks/{index-5d8d89a7.js.map → index-a163001f.js.map} +1 -1
- package/dist/_chunks/{index-34a2909e.mjs → index-a3176d19.mjs} +12 -12
- package/dist/_chunks/{index-34a2909e.mjs.map → index-a3176d19.mjs.map} +1 -1
- package/dist/_chunks/{index-ea23ee9f.mjs → index-a7d28c42.mjs} +9 -11
- package/dist/_chunks/{index-ea23ee9f.mjs.map → index-a7d28c42.mjs.map} +1 -1
- package/dist/_chunks/{index-a4348f3b.js → index-a8358156.js} +12 -12
- package/dist/_chunks/index-a8358156.js.map +1 -0
- package/dist/_chunks/{index-58db145d.mjs → index-a8d13f01.mjs} +3 -3
- package/dist/_chunks/{index-58db145d.mjs.map → index-a8d13f01.mjs.map} +1 -1
- package/dist/_chunks/{index-59d22949.mjs → index-b4cc14ad.mjs} +8 -9
- package/dist/_chunks/{index-59d22949.mjs.map → index-b4cc14ad.mjs.map} +1 -1
- package/dist/_chunks/{index-6a512cec.js → index-bad666f0.js} +8 -9
- package/dist/_chunks/{index-6a512cec.js.map → index-bad666f0.js.map} +1 -1
- package/dist/_chunks/{index-53ba81f9.mjs → index-bf788868.mjs} +9 -10
- package/dist/_chunks/{index-53ba81f9.mjs.map → index-bf788868.mjs.map} +1 -1
- package/dist/_chunks/{index-da04b144.js → index-bfb5b3ab.js} +14 -13
- package/dist/_chunks/{index-da04b144.js.map → index-bfb5b3ab.js.map} +1 -1
- package/dist/_chunks/{index-cadd3ee0.js → index-c0603138.js} +4 -4
- package/dist/_chunks/{index-cadd3ee0.js.map → index-c0603138.js.map} +1 -1
- package/dist/_chunks/{index-c604806d.js → index-c3761887.js} +12 -12
- package/dist/_chunks/{index-c604806d.js.map → index-c3761887.js.map} +1 -1
- package/dist/_chunks/{index-1da8c640.mjs → index-c4d3a07b.mjs} +9 -10
- package/dist/_chunks/{index-1da8c640.mjs.map → index-c4d3a07b.mjs.map} +1 -1
- package/dist/_chunks/{index-36e0d449.mjs → index-c7386be1.mjs} +32 -45
- package/dist/_chunks/index-c7386be1.mjs.map +1 -0
- package/dist/_chunks/{index-8d4d361d.mjs → index-cc7bedec.mjs} +13 -13
- package/dist/_chunks/{index-8d4d361d.mjs.map → index-cc7bedec.mjs.map} +1 -1
- package/dist/_chunks/{index-86dfbe3a.js → index-cce8ecb6.js} +178 -72
- package/dist/_chunks/index-cce8ecb6.js.map +1 -0
- package/dist/_chunks/{index-acd6d64f.js → index-cdadc366.js} +8 -7
- package/dist/_chunks/{index-acd6d64f.js.map → index-cdadc366.js.map} +1 -1
- package/dist/_chunks/{index-48322669.mjs → index-d81f74c4.mjs} +3 -3
- package/dist/_chunks/index-d81f74c4.mjs.map +1 -0
- package/dist/_chunks/{index-b81f7273.mjs → index-d93367d2.mjs} +78 -147
- package/dist/_chunks/index-d93367d2.mjs.map +1 -0
- package/dist/_chunks/{index-85069cac.mjs → index-dace55d9.mjs} +9 -10
- package/dist/_chunks/{index-85069cac.mjs.map → index-dace55d9.mjs.map} +1 -1
- package/dist/_chunks/{index-f179c7ea.js → index-db37fbe6.js} +13 -13
- package/dist/_chunks/{index-f179c7ea.js.map → index-db37fbe6.js.map} +1 -1
- package/dist/_chunks/{index-d1620260.js → index-dcb2c919.js} +13 -14
- package/dist/_chunks/{index-d1620260.js.map → index-dcb2c919.js.map} +1 -1
- package/dist/_chunks/{index-52b5db8a.js → index-dd3259f3.js} +8 -9
- package/dist/_chunks/{index-52b5db8a.js.map → index-dd3259f3.js.map} +1 -1
- package/dist/_chunks/{index-7d40adea.mjs → index-df42dfec.mjs} +8 -7
- package/dist/_chunks/{index-7d40adea.mjs.map → index-df42dfec.mjs.map} +1 -1
- package/dist/_chunks/{index-edc9bb0b.js → index-e2663a88.js} +673 -811
- package/dist/_chunks/index-e2663a88.js.map +1 -0
- package/dist/_chunks/{index-7aed99db.js → index-e2c5346d.js} +12 -12
- package/dist/_chunks/{index-7aed99db.js.map → index-e2c5346d.js.map} +1 -1
- package/dist/_chunks/{index-e414353b.js → index-e7381e58.js} +8 -8
- package/dist/_chunks/{index-e414353b.js.map → index-e7381e58.js.map} +1 -1
- package/dist/_chunks/{index-73ba6bdd.mjs → index-e8eff6c5.mjs} +3 -3
- package/dist/_chunks/{index-73ba6bdd.mjs.map → index-e8eff6c5.mjs.map} +1 -1
- package/dist/_chunks/{index-370a4ee8.mjs → index-f69d3930.mjs} +12 -12
- package/dist/_chunks/index-f69d3930.mjs.map +1 -0
- package/dist/_chunks/{index-8ea5a488.js → index-f9e95b10.js} +9 -10
- package/dist/_chunks/{index-8ea5a488.js.map → index-f9e95b10.js.map} +1 -1
- package/dist/_chunks/{index-1b7e986c.mjs → index-fe29b1fd.mjs} +14 -13
- package/dist/_chunks/{index-1b7e986c.mjs.map → index-fe29b1fd.mjs.map} +1 -1
- package/dist/_chunks/{schema-f49c76d7.js → schema-8eebfdf9.js} +2 -2
- package/dist/_chunks/{schema-f49c76d7.js.map → schema-8eebfdf9.js.map} +1 -1
- package/dist/_chunks/{schema-a95f2514.mjs → schema-ac25a47b.mjs} +2 -2
- package/dist/_chunks/{schema-a95f2514.mjs.map → schema-ac25a47b.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-d051b610.mjs → validateWorkflow-2511dc85.mjs} +3 -3
- package/dist/_chunks/{validateWorkflow-d051b610.mjs.map → validateWorkflow-2511dc85.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-e66d7d2e.js → validateWorkflow-c0f3148d.js} +3 -3
- package/dist/_chunks/{validateWorkflow-e66d7d2e.js.map → validateWorkflow-c0f3148d.js.map} +1 -1
- package/dist/admin/index.js +9 -10
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +9 -10
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/contexts/admin.d.ts +2 -2
- package/dist/admin/src/hooks/__mocks__/useSettingsMenu.d.ts +2 -0
- package/dist/admin/src/hooks/useEnterprise.d.ts +6 -4
- package/dist/admin/src/hooks/useSettingsMenu.d.ts +24 -0
- package/dist/admin/src/pages/Auth/AuthPage.d.ts +6 -0
- package/dist/admin/src/pages/Auth/components/FieldActionWrapper.d.ts +3 -0
- package/dist/admin/src/pages/Auth/components/ForgotPassword.d.ts +3 -0
- package/dist/admin/src/pages/Auth/components/ForgotPasswordSuccess.d.ts +2 -0
- package/dist/admin/src/pages/Auth/components/Login.d.ts +8 -0
- package/dist/admin/src/pages/Auth/components/Oops.d.ts +2 -0
- package/dist/admin/src/pages/Auth/components/Register.d.ts +7 -0
- package/dist/admin/src/pages/Auth/components/ResetPassword.d.ts +3 -0
- package/dist/admin/src/pages/Auth/constants.d.ts +14 -0
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
- package/dist/admin/src/types/permissions.d.ts +10 -0
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +3 -1
- package/dist/cli.mjs.map +1 -1
- package/dist/ee/admin/src/constants.d.ts +3 -1
- package/dist/ee/admin/src/pages/AuthPage/components/Login.d.ts +3 -0
- package/dist/ee/admin/src/pages/AuthPage/components/Providers.d.ts +2 -0
- package/dist/ee/admin/src/pages/AuthPage/components/SSOProviders.d.ts +8 -0
- package/dist/ee/admin/src/pages/AuthPage/constants.d.ts +3 -0
- package/dist/ee/admin/src/pages/AuthResponse.d.ts +2 -0
- package/dist/ee/admin/src/pages/HomePage.d.ts +1 -1
- package/dist/shared/contracts/authentication.d.ts +126 -0
- package/dist/shared/contracts/providers.d.ts +18 -0
- package/package.json +21 -21
- package/dist/_chunks/HomePage-a3cc32d2.mjs.map +0 -1
- package/dist/_chunks/HomePage-bdcb51be.js.map +0 -1
- package/dist/_chunks/SSOProviders-1d062c95.mjs.map +0 -1
- package/dist/_chunks/SSOProviders-1ef0a89e.js.map +0 -1
- package/dist/_chunks/constants-12dfb222.mjs +0 -34
- package/dist/_chunks/constants-12dfb222.mjs.map +0 -1
- package/dist/_chunks/constants-1aea1185.js +0 -34
- package/dist/_chunks/constants-1aea1185.js.map +0 -1
- package/dist/_chunks/constants-727a113c.js.map +0 -1
- package/dist/_chunks/constants-86aa3e70.js.map +0 -1
- package/dist/_chunks/constants-921eda17.mjs.map +0 -1
- package/dist/_chunks/constants-9de7641c.mjs.map +0 -1
- package/dist/_chunks/index-0af587c3.js.map +0 -1
- package/dist/_chunks/index-137490ba.js.map +0 -1
- package/dist/_chunks/index-16030b74.js.map +0 -1
- package/dist/_chunks/index-284c5926.js.map +0 -1
- package/dist/_chunks/index-305a03f4.mjs.map +0 -1
- package/dist/_chunks/index-34de382e.mjs.map +0 -1
- package/dist/_chunks/index-36e0d449.mjs.map +0 -1
- package/dist/_chunks/index-370a4ee8.mjs.map +0 -1
- package/dist/_chunks/index-48322669.mjs.map +0 -1
- package/dist/_chunks/index-5752584c.mjs.map +0 -1
- package/dist/_chunks/index-86dfbe3a.js.map +0 -1
- package/dist/_chunks/index-a4348f3b.js.map +0 -1
- package/dist/_chunks/index-b2257157.js.map +0 -1
- package/dist/_chunks/index-b81f7273.mjs.map +0 -1
- package/dist/_chunks/index-bdfc1149.mjs.map +0 -1
- package/dist/_chunks/index-edc9bb0b.js.map +0 -1
|
@@ -7,38 +7,36 @@ const helperPlugin = require("@strapi/helper-plugin");
|
|
|
7
7
|
const reactHelmet = require("react-helmet");
|
|
8
8
|
const reactIntl = require("react-intl");
|
|
9
9
|
const reactRouterDom = require("react-router-dom");
|
|
10
|
-
require("
|
|
11
|
-
const produce = require("immer");
|
|
12
|
-
require("lodash/pick");
|
|
13
|
-
require("lodash/set");
|
|
14
|
-
require("lodash/unset");
|
|
15
|
-
const reactRedux = require("react-redux");
|
|
16
|
-
const AuthenticatedApp = require("./AuthenticatedApp-092ef2be.js");
|
|
17
|
-
const index = require("./index-edc9bb0b.js");
|
|
10
|
+
const index = require("./index-e2663a88.js");
|
|
18
11
|
const sortBy = require("lodash/sortBy");
|
|
12
|
+
const reactRedux = require("react-redux");
|
|
13
|
+
const AuthenticatedApp = require("./AuthenticatedApp-d1e28164.js");
|
|
19
14
|
const v2 = require("@strapi/design-system/v2");
|
|
20
15
|
const Icons = require("@strapi/icons");
|
|
21
16
|
const PropTypes = require("prop-types");
|
|
22
17
|
const styled = require("styled-components");
|
|
23
18
|
const reactQuery = require("react-query");
|
|
19
|
+
const produce = require("immer");
|
|
24
20
|
const merge = require("lodash/merge");
|
|
25
|
-
require("semver/functions/lt");
|
|
26
|
-
require("semver/functions/valid");
|
|
27
|
-
require("react-dnd");
|
|
28
|
-
require("react-dnd-html5-backend");
|
|
29
|
-
require("lodash/get");
|
|
30
|
-
require("lodash/cloneDeep");
|
|
31
21
|
require("react-dom/client");
|
|
32
22
|
require("invariant");
|
|
33
23
|
require("lodash/isFunction");
|
|
24
|
+
require("lodash/pick");
|
|
34
25
|
require("@radix-ui/react-context");
|
|
35
|
-
require("axios");
|
|
36
|
-
require("lodash/camelCase");
|
|
37
|
-
require("lodash/defaultsDeep");
|
|
38
26
|
require("formik");
|
|
27
|
+
require("lodash/camelCase");
|
|
39
28
|
require("yup");
|
|
29
|
+
require("lodash/defaultsDeep");
|
|
30
|
+
require("lodash/omit");
|
|
40
31
|
require("qs");
|
|
32
|
+
require("lodash/get");
|
|
33
|
+
require("lodash/set");
|
|
41
34
|
require("@reduxjs/toolkit");
|
|
35
|
+
require("semver/functions/lt");
|
|
36
|
+
require("semver/functions/valid");
|
|
37
|
+
require("react-dnd");
|
|
38
|
+
require("react-dnd-html5-backend");
|
|
39
|
+
require("lodash/cloneDeep");
|
|
42
40
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
43
41
|
function _interopNamespace(e) {
|
|
44
42
|
if (e && e.__esModule)
|
|
@@ -59,90 +57,20 @@ function _interopNamespace(e) {
|
|
|
59
57
|
return Object.freeze(n);
|
|
60
58
|
}
|
|
61
59
|
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
62
|
-
const produce__default = /* @__PURE__ */ _interopDefault(produce);
|
|
63
60
|
const sortBy__default = /* @__PURE__ */ _interopDefault(sortBy);
|
|
64
61
|
const PropTypes__default = /* @__PURE__ */ _interopDefault(PropTypes);
|
|
65
62
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
63
|
+
const produce__default = /* @__PURE__ */ _interopDefault(produce);
|
|
66
64
|
const merge__default = /* @__PURE__ */ _interopDefault(merge);
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
intlLabel: { id: "Settings.webhooks.title", defaultMessage: "Webhooks" },
|
|
77
|
-
to: "/settings/webhooks",
|
|
78
|
-
id: "webhooks"
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
intlLabel: { id: "Settings.apiTokens.title", defaultMessage: "API Tokens" },
|
|
82
|
-
to: "/settings/api-tokens?sort=name:ASC",
|
|
83
|
-
id: "api-tokens"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
intlLabel: { id: "Settings.transferTokens.title", defaultMessage: "Transfer Tokens" },
|
|
87
|
-
to: "/settings/transfer-tokens?sort=name:ASC",
|
|
88
|
-
id: "transfer-tokens"
|
|
89
|
-
},
|
|
90
|
-
// If the Enterprise feature is not enabled and if the config doesn't disable it, we promote the Enterprise feature by displaying them in the settings menu.
|
|
91
|
-
// Disable this by adding "promoteEE: false" to your `./config/admin.js` file
|
|
92
|
-
...!window.strapi.features.isEnabled(window.strapi.features.SSO) && window.strapi?.flags?.promoteEE ? [
|
|
93
|
-
{
|
|
94
|
-
intlLabel: { id: "Settings.sso.title", defaultMessage: "Single Sign-On" },
|
|
95
|
-
to: "/settings/purchase-single-sign-on",
|
|
96
|
-
id: "sso",
|
|
97
|
-
lockIcon: true
|
|
98
|
-
}
|
|
99
|
-
] : [],
|
|
100
|
-
...!window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) && window.strapi?.flags?.promoteEE ? [
|
|
101
|
-
{
|
|
102
|
-
intlLabel: {
|
|
103
|
-
id: "Settings.review-workflows.page.title",
|
|
104
|
-
defaultMessage: "Review Workflows"
|
|
105
|
-
},
|
|
106
|
-
to: "/settings/purchase-review-workflows",
|
|
107
|
-
id: "review-workflows",
|
|
108
|
-
lockIcon: true
|
|
109
|
-
}
|
|
110
|
-
] : []
|
|
111
|
-
],
|
|
112
|
-
admin: [
|
|
113
|
-
{
|
|
114
|
-
intlLabel: { id: "global.roles", defaultMessage: "Roles" },
|
|
115
|
-
to: "/settings/roles",
|
|
116
|
-
id: "roles"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
intlLabel: { id: "global.users" },
|
|
120
|
-
// Init the search params directly
|
|
121
|
-
to: "/settings/users?pageSize=10&page=1&sort=firstname",
|
|
122
|
-
id: "users"
|
|
123
|
-
},
|
|
124
|
-
...!window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) && window.strapi?.flags?.promoteEE ? [
|
|
125
|
-
{
|
|
126
|
-
intlLabel: { id: "global.auditLogs", defaultMessage: "Audit Logs" },
|
|
127
|
-
to: "/settings/purchase-audit-logs",
|
|
128
|
-
id: "auditLogs",
|
|
129
|
-
lockIcon: true
|
|
130
|
-
}
|
|
131
|
-
] : []
|
|
132
|
-
]
|
|
133
|
-
};
|
|
134
|
-
const formatLinks = (menu) => {
|
|
135
|
-
return menu.map((menuSection) => {
|
|
136
|
-
const formattedLinks = menuSection.links.map((link) => ({
|
|
137
|
-
...link,
|
|
138
|
-
isDisplayed: false
|
|
139
|
-
}));
|
|
140
|
-
return { ...menuSection, links: formattedLinks };
|
|
141
|
-
});
|
|
142
|
-
};
|
|
143
|
-
const sortLinks = (links) => sortBy__default.default(links, (link) => link.id);
|
|
65
|
+
const formatLinks = (menu) => menu.map((menuSection) => {
|
|
66
|
+
const formattedLinks = menuSection.links.map((link) => ({
|
|
67
|
+
...link,
|
|
68
|
+
isDisplayed: false
|
|
69
|
+
}));
|
|
70
|
+
return { ...menuSection, links: formattedLinks };
|
|
71
|
+
});
|
|
144
72
|
const useSettingsMenu = () => {
|
|
145
|
-
const [{ isLoading, menu }, setData] =
|
|
73
|
+
const [{ isLoading, menu }, setData] = React__namespace.useState({
|
|
146
74
|
isLoading: true,
|
|
147
75
|
menu: []
|
|
148
76
|
});
|
|
@@ -150,14 +78,15 @@ const useSettingsMenu = () => {
|
|
|
150
78
|
const { shouldUpdateStrapi } = helperPlugin.useAppInfo();
|
|
151
79
|
const { settings } = helperPlugin.useStrapiApp();
|
|
152
80
|
const permissions = reactRedux.useSelector(AuthenticatedApp.selectAdminPermissions);
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
81
|
+
const ceLinks = React__namespace.useMemo(() => index.SETTINGS_LINKS_CE(), []);
|
|
82
|
+
const { admin: adminLinks, global: globalLinks } = index.useEnterprise(
|
|
83
|
+
ceLinks,
|
|
84
|
+
async () => (await Promise.resolve().then(() => require("./constants-7596f6f3.js"))).SETTINGS_LINKS_EE(),
|
|
156
85
|
{
|
|
157
|
-
combine(
|
|
86
|
+
combine(ceLinks2, eeLinks) {
|
|
158
87
|
return {
|
|
159
|
-
admin: [...eeLinks.admin, ...
|
|
160
|
-
global: [...
|
|
88
|
+
admin: [...eeLinks.admin, ...ceLinks2.admin],
|
|
89
|
+
global: [...ceLinks2.global, ...eeLinks.global]
|
|
161
90
|
};
|
|
162
91
|
},
|
|
163
92
|
defaultValue: {
|
|
@@ -166,53 +95,55 @@ const useSettingsMenu = () => {
|
|
|
166
95
|
}
|
|
167
96
|
}
|
|
168
97
|
);
|
|
169
|
-
const addPermissions =
|
|
98
|
+
const addPermissions = React__namespace.useCallback(
|
|
170
99
|
(link) => {
|
|
171
100
|
if (!link.id) {
|
|
172
101
|
throw new Error("The settings menu item must have an id attribute.");
|
|
173
102
|
}
|
|
174
103
|
return {
|
|
175
104
|
...link,
|
|
176
|
-
permissions: permissions.settings?.[link.id]?.main
|
|
105
|
+
permissions: permissions.settings?.[link.id]?.main ?? []
|
|
177
106
|
};
|
|
178
107
|
},
|
|
179
108
|
[permissions.settings]
|
|
180
109
|
);
|
|
181
|
-
|
|
110
|
+
React__namespace.useEffect(() => {
|
|
182
111
|
const getData = async () => {
|
|
183
112
|
const buildMenuPermissions = (sections2) => Promise.all(
|
|
184
113
|
sections2.reduce((acc, section, sectionIndex) => {
|
|
185
|
-
const
|
|
114
|
+
const linksWithPermissions = section.links.map(async (link, linkIndex) => ({
|
|
186
115
|
hasPermission: await helperPlugin.hasPermissions(userPermissions, link.permissions),
|
|
187
116
|
sectionIndex,
|
|
188
117
|
linkIndex
|
|
189
118
|
}));
|
|
190
|
-
return [...acc, ...
|
|
119
|
+
return [...acc, ...linksWithPermissions];
|
|
191
120
|
}, [])
|
|
192
121
|
);
|
|
193
122
|
const menuPermissions = await buildMenuPermissions(sections);
|
|
194
|
-
setData((prev) =>
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
123
|
+
setData((prev) => {
|
|
124
|
+
return {
|
|
125
|
+
...prev,
|
|
126
|
+
isLoading: false,
|
|
127
|
+
menu: sections.map((section, sectionIndex) => ({
|
|
128
|
+
...section,
|
|
129
|
+
links: section.links.map((link, linkIndex) => {
|
|
130
|
+
const permission = menuPermissions.find(
|
|
131
|
+
(permission2) => permission2.sectionIndex === sectionIndex && permission2.linkIndex === linkIndex
|
|
132
|
+
);
|
|
133
|
+
return {
|
|
134
|
+
...link,
|
|
135
|
+
isDisplayed: Boolean(permission?.hasPermission)
|
|
136
|
+
};
|
|
137
|
+
})
|
|
138
|
+
}))
|
|
139
|
+
};
|
|
140
|
+
});
|
|
210
141
|
};
|
|
211
142
|
const { global, ...otherSections } = settings;
|
|
212
143
|
const sections = formatLinks([
|
|
213
144
|
{
|
|
214
|
-
...
|
|
215
|
-
links:
|
|
145
|
+
...global,
|
|
146
|
+
links: sortBy__default.default([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(
|
|
216
147
|
(link) => ({
|
|
217
148
|
...link,
|
|
218
149
|
hasNotification: link.id === "000-application-infos" && shouldUpdateStrapi
|
|
@@ -228,13 +159,13 @@ const useSettingsMenu = () => {
|
|
|
228
159
|
]);
|
|
229
160
|
getData();
|
|
230
161
|
}, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]);
|
|
231
|
-
|
|
232
|
-
|
|
162
|
+
return {
|
|
163
|
+
isLoading,
|
|
164
|
+
menu: menu.map((menuItem) => ({
|
|
233
165
|
...menuItem,
|
|
234
166
|
links: menuItem.links.filter((link) => link.isDisplayed)
|
|
235
|
-
}
|
|
167
|
+
}))
|
|
236
168
|
};
|
|
237
|
-
return { isLoading, menu: menu.map(filterMenu) };
|
|
238
169
|
};
|
|
239
170
|
const CustomIcon = styled__default.default(designSystem.Icon)`
|
|
240
171
|
right: 15px;
|
|
@@ -293,7 +224,7 @@ SettingsNav.propTypes = {
|
|
|
293
224
|
const ROUTES_CE = [
|
|
294
225
|
{
|
|
295
226
|
async Component() {
|
|
296
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
227
|
+
const component = await Promise.resolve().then(() => require("./index-f9e95b10.js"));
|
|
297
228
|
return component;
|
|
298
229
|
},
|
|
299
230
|
to: "/settings/roles",
|
|
@@ -301,7 +232,7 @@ const ROUTES_CE = [
|
|
|
301
232
|
},
|
|
302
233
|
{
|
|
303
234
|
async Component() {
|
|
304
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
235
|
+
const component = await Promise.resolve().then(() => require("./index-dd3259f3.js"));
|
|
305
236
|
return component;
|
|
306
237
|
},
|
|
307
238
|
to: "/settings/roles/duplicate/:id",
|
|
@@ -309,7 +240,7 @@ const ROUTES_CE = [
|
|
|
309
240
|
},
|
|
310
241
|
{
|
|
311
242
|
async Component() {
|
|
312
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
243
|
+
const component = await Promise.resolve().then(() => require("./index-dd3259f3.js"));
|
|
313
244
|
return component;
|
|
314
245
|
},
|
|
315
246
|
to: "/settings/roles/new",
|
|
@@ -317,7 +248,7 @@ const ROUTES_CE = [
|
|
|
317
248
|
},
|
|
318
249
|
{
|
|
319
250
|
async Component() {
|
|
320
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
251
|
+
const component = await Promise.resolve().then(() => require("./index-bad666f0.js"));
|
|
321
252
|
return component;
|
|
322
253
|
},
|
|
323
254
|
to: "/settings/roles/:id",
|
|
@@ -325,7 +256,7 @@ const ROUTES_CE = [
|
|
|
325
256
|
},
|
|
326
257
|
{
|
|
327
258
|
async Component() {
|
|
328
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
259
|
+
const component = await Promise.resolve().then(() => require("./index-3b888524.js")).then((n) => n.index);
|
|
329
260
|
return component;
|
|
330
261
|
},
|
|
331
262
|
to: "/settings/users",
|
|
@@ -333,7 +264,7 @@ const ROUTES_CE = [
|
|
|
333
264
|
},
|
|
334
265
|
{
|
|
335
266
|
async Component() {
|
|
336
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
267
|
+
const component = await Promise.resolve().then(() => require("./index-e7381e58.js"));
|
|
337
268
|
return component;
|
|
338
269
|
},
|
|
339
270
|
to: "/settings/users/:id",
|
|
@@ -341,7 +272,7 @@ const ROUTES_CE = [
|
|
|
341
272
|
},
|
|
342
273
|
{
|
|
343
274
|
async Component() {
|
|
344
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
275
|
+
const component = await Promise.resolve().then(() => require("./index-db37fbe6.js"));
|
|
345
276
|
return component;
|
|
346
277
|
},
|
|
347
278
|
to: "/settings/webhooks/create",
|
|
@@ -349,7 +280,7 @@ const ROUTES_CE = [
|
|
|
349
280
|
},
|
|
350
281
|
{
|
|
351
282
|
async Component() {
|
|
352
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
283
|
+
const component = await Promise.resolve().then(() => require("./index-a163001f.js"));
|
|
353
284
|
return component;
|
|
354
285
|
},
|
|
355
286
|
to: "/settings/webhooks/:id",
|
|
@@ -357,7 +288,7 @@ const ROUTES_CE = [
|
|
|
357
288
|
},
|
|
358
289
|
{
|
|
359
290
|
async Component() {
|
|
360
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
291
|
+
const component = await Promise.resolve().then(() => require("./index-13a78498.js"));
|
|
361
292
|
return component;
|
|
362
293
|
},
|
|
363
294
|
to: "/settings/webhooks",
|
|
@@ -365,7 +296,7 @@ const ROUTES_CE = [
|
|
|
365
296
|
},
|
|
366
297
|
{
|
|
367
298
|
async Component() {
|
|
368
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
299
|
+
const component = await Promise.resolve().then(() => require("./index-9eb160a3.js"));
|
|
369
300
|
return component;
|
|
370
301
|
},
|
|
371
302
|
to: "/settings/api-tokens",
|
|
@@ -373,7 +304,7 @@ const ROUTES_CE = [
|
|
|
373
304
|
},
|
|
374
305
|
{
|
|
375
306
|
async Component() {
|
|
376
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
307
|
+
const component = await Promise.resolve().then(() => require("./index-17fbff58.js"));
|
|
377
308
|
return component;
|
|
378
309
|
},
|
|
379
310
|
to: "/settings/api-tokens/create",
|
|
@@ -381,7 +312,7 @@ const ROUTES_CE = [
|
|
|
381
312
|
},
|
|
382
313
|
{
|
|
383
314
|
async Component() {
|
|
384
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
315
|
+
const component = await Promise.resolve().then(() => require("./index-794eb0b6.js"));
|
|
385
316
|
return component;
|
|
386
317
|
},
|
|
387
318
|
to: "/settings/api-tokens/:id",
|
|
@@ -389,7 +320,7 @@ const ROUTES_CE = [
|
|
|
389
320
|
},
|
|
390
321
|
{
|
|
391
322
|
async Component() {
|
|
392
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
323
|
+
const component = await Promise.resolve().then(() => require("./index-bfb5b3ab.js"));
|
|
393
324
|
return component;
|
|
394
325
|
},
|
|
395
326
|
to: "/settings/transfer-tokens/create",
|
|
@@ -397,7 +328,7 @@ const ROUTES_CE = [
|
|
|
397
328
|
},
|
|
398
329
|
{
|
|
399
330
|
async Component() {
|
|
400
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
331
|
+
const component = await Promise.resolve().then(() => require("./index-150ec200.js"));
|
|
401
332
|
return component;
|
|
402
333
|
},
|
|
403
334
|
to: "/settings/transfer-tokens",
|
|
@@ -405,7 +336,7 @@ const ROUTES_CE = [
|
|
|
405
336
|
},
|
|
406
337
|
{
|
|
407
338
|
async Component() {
|
|
408
|
-
const component = await Promise.resolve().then(() => require("./index-
|
|
339
|
+
const component = await Promise.resolve().then(() => require("./index-748f8264.js"));
|
|
409
340
|
return component;
|
|
410
341
|
},
|
|
411
342
|
to: "/settings/transfer-tokens/:id",
|
|
@@ -1284,7 +1215,7 @@ const ApplicationInfosPage = () => {
|
|
|
1284
1215
|
} = helperPlugin.useAppInfo();
|
|
1285
1216
|
const AdminSeatInfo = index.useEnterprise(
|
|
1286
1217
|
AdminSeatInfoCE,
|
|
1287
|
-
async () => (await Promise.resolve().then(() => require("./index-
|
|
1218
|
+
async () => (await Promise.resolve().then(() => require("./index-9f50c8b0.js"))).AdminSeatInfoEE
|
|
1288
1219
|
);
|
|
1289
1220
|
const {
|
|
1290
1221
|
allowedActions: { canRead, canUpdate }
|
|
@@ -1481,7 +1412,7 @@ function SettingsPage() {
|
|
|
1481
1412
|
const { isLoading, menu } = useSettingsMenu();
|
|
1482
1413
|
const routes = index.useEnterprise(
|
|
1483
1414
|
ROUTES_CE,
|
|
1484
|
-
async () => (await Promise.resolve().then(() => require("./constants-
|
|
1415
|
+
async () => (await Promise.resolve().then(() => require("./constants-42f4f7b3.js"))).ROUTES_EE,
|
|
1485
1416
|
{
|
|
1486
1417
|
combine(ceRoutes, eeRoutes) {
|
|
1487
1418
|
return [...ceRoutes, ...eeRoutes];
|
|
@@ -1522,4 +1453,4 @@ function SettingsPage() {
|
|
|
1522
1453
|
] });
|
|
1523
1454
|
}
|
|
1524
1455
|
exports.SettingsPage = SettingsPage;
|
|
1525
|
-
//# sourceMappingURL=index-
|
|
1456
|
+
//# sourceMappingURL=index-7f642760.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-7f642760.js","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":["React","useRBACProvider","useAppInfo","useStrapiApp","useSelector","selectAdminPermissions","SETTINGS_LINKS_CE","useEnterprise","ceLinks","sections","hasPermissions","permission","sortBy","styled","Icon","useIntl","useTracking","useLocation","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","SubNavSection","SubNavLink","NavLink","Lock","PropTypes","initialState","reducer","produce","useReducer","ModalLayout","ModalHeader","Typography","FieldInput","useState","useRef","Fragment","Box","Field","Flex","PicturePlus","Button","FieldError","ModalFooter","getFetchClient","TextInput","TabGroup","Tabs","Tab","Divider","TabPanels","TabPanel","Card","CardHeader","CardAsset","CardBody","CardContent","CardTitle","CardSubtitle","CardBadge","pxToRem","CarouselInput","CarouselActions","IconButton","Plus","Refresh","CarouselSlide","merge","forwardRef","useConfiguration","useImperativeHandle","Grid","GridItem","useNotification","useFetchClient","useAPIErrorHandler","useRBAC","useFocusWhenNavigate","useQuery","data","prefixFileUrlWithBackendUrl","useMutation","Layout","SettingsPageTitle","Main","Loader","HeaderLayout","Check","ContentLayout","Link","ExternalLink","index","useParams","createRoute","LoadingIndicatorPage","Redirect","Helmet","Switch","Route"],"mappings":"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"}
|