@strapi/admin 4.15.5 → 4.16.1
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-da1595e9.mjs → AuthenticatedApp-722b2e84.mjs} +23 -23
- package/dist/_chunks/{AuthenticatedApp-da1595e9.mjs.map → AuthenticatedApp-722b2e84.mjs.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-61dfdab8.js → AuthenticatedApp-7e646400.js} +23 -23
- package/dist/_chunks/{AuthenticatedApp-61dfdab8.js.map → AuthenticatedApp-7e646400.js.map} +1 -1
- package/dist/_chunks/{HomePage-f3052b59.js → HomePage-0e0dc215.js} +4 -4
- package/dist/_chunks/{HomePage-f3052b59.js.map → HomePage-0e0dc215.js.map} +1 -1
- package/dist/_chunks/{HomePage-2690d237.mjs → HomePage-76bcd0cd.mjs} +4 -4
- package/dist/_chunks/{HomePage-2690d237.mjs.map → HomePage-76bcd0cd.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-3792b299.mjs → HomePage-8c98b31f.mjs} +4 -4
- package/dist/_chunks/{HomePage-3792b299.mjs.map → HomePage-8c98b31f.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-48934b34.js → HomePage-ef787733.js} +4 -4
- package/dist/_chunks/{HomePage-48934b34.js.map → HomePage-ef787733.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-3bd06321.mjs → InstalledPluginsPage-67b5f9c2.mjs} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-3bd06321.mjs.map → InstalledPluginsPage-67b5f9c2.mjs.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-da0780c1.js → InstalledPluginsPage-6f0897e8.js} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-da0780c1.js.map → InstalledPluginsPage-6f0897e8.js.map} +1 -1
- package/dist/_chunks/{Login-ab4b47ad.js → Login-5b447dd2.js} +2 -2
- package/dist/_chunks/{Login-ab4b47ad.js.map → Login-5b447dd2.js.map} +1 -1
- package/dist/_chunks/{Login-8f68c65a.mjs → Login-8ade15b8.mjs} +2 -2
- package/dist/_chunks/{Login-8f68c65a.mjs.map → Login-8ade15b8.mjs.map} +1 -1
- package/dist/_chunks/{MarketplacePage-935fca72.js → MarketplacePage-1c954f9d.js} +3 -3
- package/dist/_chunks/{MarketplacePage-935fca72.js.map → MarketplacePage-1c954f9d.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-95af86bb.mjs → MarketplacePage-58fc8a9a.mjs} +3 -3
- package/dist/_chunks/{MarketplacePage-95af86bb.mjs.map → MarketplacePage-58fc8a9a.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-20de1b54.mjs → ProfilePage-a2f0366d.mjs} +3 -3
- package/dist/_chunks/{ProfilePage-20de1b54.mjs.map → ProfilePage-a2f0366d.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-b8b29c4d.js → ProfilePage-a68483d3.js} +3 -3
- package/dist/_chunks/{ProfilePage-b8b29c4d.js.map → ProfilePage-a68483d3.js.map} +1 -1
- package/dist/_chunks/{SalesPage-c5cbb366.js → SalesPage-4a0a68fb.js} +2 -2
- package/dist/_chunks/SalesPage-4a0a68fb.js.map +1 -0
- package/dist/_chunks/{SalesPage-c7c94c3f.mjs → SalesPage-fceedf48.mjs} +2 -2
- package/dist/_chunks/{SalesPage-c7c94c3f.mjs.map → SalesPage-fceedf48.mjs.map} +1 -1
- package/dist/_chunks/{build-92e15b93.mjs → build-1026ce7c.mjs} +2 -2
- package/dist/_chunks/{build-92e15b93.mjs.map → build-1026ce7c.mjs.map} +1 -1
- package/dist/_chunks/{build-df2f219f.js → build-d99bcc06.js} +2 -2
- package/dist/_chunks/{build-df2f219f.js.map → build-d99bcc06.js.map} +1 -1
- package/dist/_chunks/{constants-ec71917d.js → constants-155022af.js} +3 -3
- package/dist/_chunks/{constants-ec71917d.js.map → constants-155022af.js.map} +1 -1
- package/dist/_chunks/{constants-db792b94.mjs → constants-32d352b6.mjs} +3 -3
- package/dist/_chunks/{constants-db792b94.mjs.map → constants-32d352b6.mjs.map} +1 -1
- package/dist/_chunks/{constants-008a1527.js → constants-3967338c.js} +5 -5
- package/dist/_chunks/{constants-008a1527.js.map → constants-3967338c.js.map} +1 -1
- package/dist/_chunks/{constants-1d345364.mjs → constants-6bf1c3c2.mjs} +5 -5
- package/dist/_chunks/{constants-1d345364.mjs.map → constants-6bf1c3c2.mjs.map} +1 -1
- package/dist/_chunks/{constants-797ada28.js → constants-d097f266.js} +6 -6
- package/dist/_chunks/{constants-797ada28.js.map → constants-d097f266.js.map} +1 -1
- package/dist/_chunks/{constants-278adc05.mjs → constants-da1ff847.mjs} +6 -6
- package/dist/_chunks/{constants-278adc05.mjs.map → constants-da1ff847.mjs.map} +1 -1
- package/dist/_chunks/{constants-4be682e5.js → constants-eb77e47a.js} +2 -2
- package/dist/_chunks/{constants-4be682e5.js.map → constants-eb77e47a.js.map} +1 -1
- package/dist/_chunks/{constants-29d123f8.mjs → constants-ecad1e20.mjs} +2 -2
- package/dist/_chunks/{constants-29d123f8.mjs.map → constants-ecad1e20.mjs.map} +1 -1
- package/dist/_chunks/{develop-a46fed01.mjs → develop-72394876.mjs} +2 -2
- package/dist/_chunks/{develop-a46fed01.mjs.map → develop-72394876.mjs.map} +1 -1
- package/dist/_chunks/{develop-4d25a6e0.js → develop-da585b1e.js} +2 -2
- package/dist/_chunks/{develop-4d25a6e0.js.map → develop-da585b1e.js.map} +1 -1
- package/dist/_chunks/{index-f5b276a8.mjs → index-061947f1.mjs} +21 -21
- package/dist/_chunks/{index-f5b276a8.mjs.map → index-061947f1.mjs.map} +1 -1
- package/dist/_chunks/{index-003c2cab.mjs → index-06e97c47.mjs} +5 -5
- package/dist/_chunks/{index-003c2cab.mjs.map → index-06e97c47.mjs.map} +1 -1
- package/dist/_chunks/{index-cbf9952d.js → index-1482f542.js} +2 -2
- package/dist/_chunks/{index-cbf9952d.js.map → index-1482f542.js.map} +1 -1
- package/dist/_chunks/{index-154693de.mjs → index-14887b9d.mjs} +3 -3
- package/dist/_chunks/{index-154693de.mjs.map → index-14887b9d.mjs.map} +1 -1
- package/dist/_chunks/{index-9f30a92e.js → index-1502dedd.js} +4 -4
- package/dist/_chunks/{index-9f30a92e.js.map → index-1502dedd.js.map} +1 -1
- package/dist/_chunks/{index-345c0ae9.js → index-19bd1210.js} +6 -6
- package/dist/_chunks/{index-345c0ae9.js.map → index-19bd1210.js.map} +1 -1
- package/dist/_chunks/{index-0fbbca7a.js → index-2064cfaf.js} +3 -3
- package/dist/_chunks/{index-0fbbca7a.js.map → index-2064cfaf.js.map} +1 -1
- package/dist/_chunks/{index-40d047a8.mjs → index-209cca35.mjs} +3 -3
- package/dist/_chunks/{index-40d047a8.mjs.map → index-209cca35.mjs.map} +1 -1
- package/dist/_chunks/{index-bde05e9e.mjs → index-24c2627d.mjs} +3 -3
- package/dist/_chunks/{index-bde05e9e.mjs.map → index-24c2627d.mjs.map} +1 -1
- package/dist/_chunks/{index-d5f569ab.js → index-24d1e175.js} +5 -5
- package/dist/_chunks/{index-d5f569ab.js.map → index-24d1e175.js.map} +1 -1
- package/dist/_chunks/{index-bc709e72.js → index-272d8fb9.js} +3 -3
- package/dist/_chunks/{index-bc709e72.js.map → index-272d8fb9.js.map} +1 -1
- package/dist/_chunks/{index-3c693658.mjs → index-2cf8d1f6.mjs} +3 -3
- package/dist/_chunks/{index-3c693658.mjs.map → index-2cf8d1f6.mjs.map} +1 -1
- package/dist/_chunks/{index-d9882c45.mjs → index-35c3f9f1.mjs} +4 -4
- package/dist/_chunks/{index-d9882c45.mjs.map → index-35c3f9f1.mjs.map} +1 -1
- package/dist/_chunks/{index-8e034257.mjs → index-391891ba.mjs} +3 -3
- package/dist/_chunks/{index-8e034257.mjs.map → index-391891ba.mjs.map} +1 -1
- package/dist/_chunks/{index-f3e7f8cc.mjs → index-3939f07e.mjs} +4 -4
- package/dist/_chunks/{index-f3e7f8cc.mjs.map → index-3939f07e.mjs.map} +1 -1
- package/dist/_chunks/{index-a6f1ccf6.mjs → index-3aab6b0f.mjs} +6 -6
- package/dist/_chunks/{index-a6f1ccf6.mjs.map → index-3aab6b0f.mjs.map} +1 -1
- package/dist/_chunks/{index-b6ee936b.mjs → index-3c67c00b.mjs} +14 -8
- package/dist/_chunks/{index-b6ee936b.mjs.map → index-3c67c00b.mjs.map} +1 -1
- package/dist/_chunks/{index-834fad5c.mjs → index-48c35356.mjs} +5 -5
- package/dist/_chunks/{index-834fad5c.mjs.map → index-48c35356.mjs.map} +1 -1
- package/dist/_chunks/{index-dc89c18c.mjs → index-49b7e6ff.mjs} +8 -4
- package/dist/_chunks/index-49b7e6ff.mjs.map +1 -0
- package/dist/_chunks/{index-69d47db4.js → index-4a019067.js} +3 -3
- package/dist/_chunks/{index-69d47db4.js.map → index-4a019067.js.map} +1 -1
- package/dist/_chunks/{index-b42866c5.mjs → index-55155d83.mjs} +2 -2
- package/dist/_chunks/{index-b42866c5.mjs.map → index-55155d83.mjs.map} +1 -1
- package/dist/_chunks/{index-9304d6de.js → index-57f9a06f.js} +511 -475
- package/dist/_chunks/index-57f9a06f.js.map +1 -0
- package/dist/_chunks/{index-cc38783c.mjs → index-61852c7a.mjs} +3 -3
- package/dist/_chunks/{index-cc38783c.mjs.map → index-61852c7a.mjs.map} +1 -1
- package/dist/_chunks/{index-e34335f1.js → index-6685e5a8.js} +3 -3
- package/dist/_chunks/{index-e34335f1.js.map → index-6685e5a8.js.map} +1 -1
- package/dist/_chunks/{index-2b22b1a0.js → index-6731bae9.js} +5 -5
- package/dist/_chunks/{index-2b22b1a0.js.map → index-6731bae9.js.map} +1 -1
- package/dist/_chunks/{index-40495ca1.mjs → index-674778e2.mjs} +2 -2
- package/dist/_chunks/{index-40495ca1.mjs.map → index-674778e2.mjs.map} +1 -1
- package/dist/_chunks/{index-bfb581a2.js → index-6a8a1f1d.js} +3 -3
- package/dist/_chunks/{index-bfb581a2.js.map → index-6a8a1f1d.js.map} +1 -1
- package/dist/_chunks/{index-f52ae628.mjs → index-707e89df.mjs} +3 -3
- package/dist/_chunks/{index-f52ae628.mjs.map → index-707e89df.mjs.map} +1 -1
- package/dist/_chunks/{index-eebad65d.js → index-724169b2.js} +3 -3
- package/dist/_chunks/{index-eebad65d.js.map → index-724169b2.js.map} +1 -1
- package/dist/_chunks/{index-924a1288.js → index-73971882.js} +3 -3
- package/dist/_chunks/{index-924a1288.js.map → index-73971882.js.map} +1 -1
- package/dist/_chunks/{index-1f4afa21.js → index-78f4851e.js} +3 -3
- package/dist/_chunks/{index-1f4afa21.js.map → index-78f4851e.js.map} +1 -1
- package/dist/_chunks/{index-f55a69e7.mjs → index-7a797b0f.mjs} +4 -4
- package/dist/_chunks/{index-f55a69e7.mjs.map → index-7a797b0f.mjs.map} +1 -1
- package/dist/_chunks/{index-5a5b0567.js → index-7b174d49.js} +21 -21
- package/dist/_chunks/{index-5a5b0567.js.map → index-7b174d49.js.map} +1 -1
- package/dist/_chunks/{index-7bfab5f5.js → index-819443df.js} +4 -4
- package/dist/_chunks/{index-7bfab5f5.js.map → index-819443df.js.map} +1 -1
- package/dist/_chunks/{index-6797e259.mjs → index-82fca9fd.mjs} +3 -3
- package/dist/_chunks/{index-6797e259.mjs.map → index-82fca9fd.mjs.map} +1 -1
- package/dist/_chunks/{index-81509193.mjs → index-8609fab4.mjs} +513 -477
- package/dist/_chunks/index-8609fab4.mjs.map +1 -0
- package/dist/_chunks/{index-51986071.mjs → index-86a4fbbf.mjs} +3 -3
- package/dist/_chunks/{index-51986071.mjs.map → index-86a4fbbf.mjs.map} +1 -1
- package/dist/_chunks/{index-0ed05075.js → index-8f8eaed6.js} +14 -8
- package/dist/_chunks/{index-0ed05075.js.map → index-8f8eaed6.js.map} +1 -1
- package/dist/_chunks/{index-e0e235a0.js → index-91726188.js} +3 -3
- package/dist/_chunks/{index-e0e235a0.js.map → index-91726188.js.map} +1 -1
- package/dist/_chunks/{index-46138ec7.mjs → index-97c03ee2.mjs} +4 -4
- package/dist/_chunks/{index-46138ec7.mjs.map → index-97c03ee2.mjs.map} +1 -1
- package/dist/_chunks/{index-be3e5f69.mjs → index-9b2501ca.mjs} +2 -2
- package/dist/_chunks/{index-be3e5f69.mjs.map → index-9b2501ca.mjs.map} +1 -1
- package/dist/_chunks/{index-1ebd9d8c.mjs → index-aad003e4.mjs} +5 -5
- package/dist/_chunks/{index-1ebd9d8c.mjs.map → index-aad003e4.mjs.map} +1 -1
- package/dist/_chunks/{index-9c26fffe.js → index-ad0512f0.js} +4 -4
- package/dist/_chunks/{index-9c26fffe.js.map → index-ad0512f0.js.map} +1 -1
- package/dist/_chunks/{index-72494b79.js → index-b247e702.js} +3 -3
- package/dist/_chunks/{index-72494b79.js.map → index-b247e702.js.map} +1 -1
- package/dist/_chunks/{index-9f2d5dc8.js → index-b3ad6e5f.js} +3 -3
- package/dist/_chunks/{index-9f2d5dc8.js.map → index-b3ad6e5f.js.map} +1 -1
- package/dist/_chunks/{index-787a0db6.js → index-b5eec5e2.js} +5 -5
- package/dist/_chunks/{index-787a0db6.js.map → index-b5eec5e2.js.map} +1 -1
- package/dist/_chunks/{index-035f8c59.js → index-b6b2a306.js} +3 -3
- package/dist/_chunks/{index-035f8c59.js.map → index-b6b2a306.js.map} +1 -1
- package/dist/_chunks/{index-4f557234.mjs → index-be9a9d91.mjs} +3 -3
- package/dist/_chunks/{index-4f557234.mjs.map → index-be9a9d91.mjs.map} +1 -1
- package/dist/_chunks/{index-56b499fb.mjs → index-c5fa9006.mjs} +5 -5
- package/dist/_chunks/{index-56b499fb.mjs.map → index-c5fa9006.mjs.map} +1 -1
- package/dist/_chunks/{index-f7dbd21b.js → index-c6c83bb3.js} +2 -2
- package/dist/_chunks/{index-f7dbd21b.js.map → index-c6c83bb3.js.map} +1 -1
- package/dist/_chunks/{index-97a59f73.js → index-c8b6afca.js} +4 -4
- package/dist/_chunks/{index-97a59f73.js.map → index-c8b6afca.js.map} +1 -1
- package/dist/_chunks/{index-557e0c47.js → index-caab4b20.js} +2 -2
- package/dist/_chunks/{index-557e0c47.js.map → index-caab4b20.js.map} +1 -1
- package/dist/_chunks/{index-6353193a.mjs → index-cc38421b.mjs} +5 -5
- package/dist/_chunks/{index-6353193a.mjs.map → index-cc38421b.mjs.map} +1 -1
- package/dist/_chunks/{index-b2d4d126.js → index-cdcf1a78.js} +5 -5
- package/dist/_chunks/{index-b2d4d126.js.map → index-cdcf1a78.js.map} +1 -1
- package/dist/_chunks/{index-9118a940.mjs → index-cea88049.mjs} +4 -4
- package/dist/_chunks/{index-9118a940.mjs.map → index-cea88049.mjs.map} +1 -1
- package/dist/_chunks/{index-0c9fceff.js → index-ceacb143.js} +5 -5
- package/dist/_chunks/{index-0c9fceff.js.map → index-ceacb143.js.map} +1 -1
- package/dist/_chunks/{index-d2b3c398.mjs → index-d1219a93.mjs} +3 -3
- package/dist/_chunks/{index-d2b3c398.mjs.map → index-d1219a93.mjs.map} +1 -1
- package/dist/_chunks/{index-039f8e26.mjs → index-d47fc57d.mjs} +4 -4
- package/dist/_chunks/{index-039f8e26.mjs.map → index-d47fc57d.mjs.map} +1 -1
- package/dist/_chunks/{index-46c3ee85.mjs → index-d844fbda.mjs} +3 -3
- package/dist/_chunks/{index-46c3ee85.mjs.map → index-d844fbda.mjs.map} +1 -1
- package/dist/_chunks/{index-bac648de.js → index-d9aae905.js} +5 -5
- package/dist/_chunks/{index-bac648de.js.map → index-d9aae905.js.map} +1 -1
- package/dist/_chunks/{index-25975989.js → index-dab453d2.js} +4 -4
- package/dist/_chunks/{index-25975989.js.map → index-dab453d2.js.map} +1 -1
- package/dist/_chunks/{index-1932eedf.mjs → index-dd897afb.mjs} +3 -3
- package/dist/_chunks/{index-1932eedf.mjs.map → index-dd897afb.mjs.map} +1 -1
- package/dist/_chunks/{index-f7cf652c.js → index-ec2d87cb.js} +4 -4
- package/dist/_chunks/{index-f7cf652c.js.map → index-ec2d87cb.js.map} +1 -1
- package/dist/_chunks/{index-eaff38ba.js → index-ecfaf6c1.js} +3 -3
- package/dist/_chunks/{index-eaff38ba.js.map → index-ecfaf6c1.js.map} +1 -1
- package/dist/_chunks/{index-a9625818.mjs → index-ff4fb44c.mjs} +5 -5
- package/dist/_chunks/{index-a9625818.mjs.map → index-ff4fb44c.mjs.map} +1 -1
- package/dist/_chunks/{index-1a74fa41.js → index-ffd2f664.js} +8 -4
- package/dist/_chunks/index-ffd2f664.js.map +1 -0
- package/dist/_chunks/{ru-d43423ea.mjs → ru-9aad40c5.mjs} +91 -42
- package/dist/_chunks/{ru-d43423ea.mjs.map → ru-9aad40c5.mjs.map} +1 -1
- package/dist/_chunks/{ru-07958f09.js → ru-c0293425.js} +91 -42
- package/dist/_chunks/{ru-07958f09.js.map → ru-c0293425.js.map} +1 -1
- package/dist/_chunks/{schema-15e33d1c.js → schema-336f4dd6.js} +2 -2
- package/dist/_chunks/{schema-15e33d1c.js.map → schema-336f4dd6.js.map} +1 -1
- package/dist/_chunks/{schema-a7f695ae.mjs → schema-60d9880c.mjs} +2 -2
- package/dist/_chunks/{schema-a7f695ae.mjs.map → schema-60d9880c.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-2f84e76e.mjs → validateWorkflow-022b5005.mjs} +3 -3
- package/dist/_chunks/{validateWorkflow-2f84e76e.mjs.map → validateWorkflow-022b5005.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-6b5dffaf.js → validateWorkflow-7f76e43f.js} +3 -3
- package/dist/_chunks/{validateWorkflow-6b5dffaf.js.map → validateWorkflow-7f76e43f.js.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksContent.d.ts +5 -0
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksEditor.d.ts +34 -0
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksInput.d.ts +18 -0
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksToolbar.d.ts +2 -0
- package/dist/admin/src/content-manager/components/BlocksInput/hooks/useBlocksStore.d.ts +32 -0
- package/dist/admin/src/content-manager/components/BlocksInput/hooks/useModifiersStore.d.ts +20 -0
- package/dist/admin/src/content-manager/components/BlocksInput/plugins/withLinks.d.ts +8 -0
- package/dist/admin/src/content-manager/components/BlocksInput/plugins/withStrapiSchema.d.ts +8 -0
- package/dist/admin/src/content-manager/components/BlocksInput/tests/mock-schema.d.ts +2 -0
- package/dist/admin/src/content-manager/components/BlocksInput/utils/links.d.ts +10 -0
- package/dist/admin/src/content-manager/components/BlocksInput/utils/types.d.ts +6 -0
- package/dist/admin/src/hooks/useAdminUsers.d.ts +3 -3
- package/dist/admin/src/index.d.ts +1 -0
- package/dist/admin/src/render.d.ts +3 -1
- package/dist/cli.js +1 -1
- package/dist/cli.mjs +1 -1
- package/package.json +14 -14
- package/server/services/__tests__/user.test.js +15 -0
- package/server/services/user.js +1 -4
- package/dist/_chunks/SalesPage-c5cbb366.js.map +0 -1
- package/dist/_chunks/index-1a74fa41.js.map +0 -1
- package/dist/_chunks/index-81509193.mjs.map +0 -1
- package/dist/_chunks/index-9304d6de.js.map +0 -1
- package/dist/_chunks/index-dc89c18c.mjs.map +0 -1
|
@@ -3,13 +3,13 @@ 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-
|
|
7
|
-
const index = require("./index-
|
|
6
|
+
const AuthenticatedApp = require("./AuthenticatedApp-7e646400.js");
|
|
7
|
+
const index = require("./index-73971882.js");
|
|
8
8
|
require("react");
|
|
9
9
|
require("react-query");
|
|
10
10
|
require("semver/functions/lt");
|
|
11
11
|
require("semver/functions/valid");
|
|
12
|
-
require("./index-
|
|
12
|
+
require("./index-8f8eaed6.js");
|
|
13
13
|
require("react-dom/client");
|
|
14
14
|
require("@strapi/design-system");
|
|
15
15
|
require("invariant");
|
|
@@ -44,4 +44,4 @@ const ProtectedEditView = () => {
|
|
|
44
44
|
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings.webhooks.update, children: /* @__PURE__ */ jsxRuntime.jsx(index.EditView, {}) });
|
|
45
45
|
};
|
|
46
46
|
exports.default = ProtectedEditView;
|
|
47
|
-
//# sourceMappingURL=index-
|
|
47
|
+
//# sourceMappingURL=index-c8b6afca.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-c8b6afca.js","sources":["../../admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js"],"sourcesContent":["import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditView from '../EditView';\n\nconst ProtectedEditView = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.webhooks.update}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedEditView;\n"],"names":["useSelector","selectAdminPermissions","jsx","CheckPagePermissions","EditView"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,oBAAoB,MAAM;AACxB,QAAA,cAAcA,uBAAYC,iBAAAA,sBAAsB;AAGpD,SAAAC,2BAAA,IAACC,qCAAqB,aAAa,YAAY,SAAS,SAAS,QAC/D,UAACD,2BAAA,IAAAE,MAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;"}
|
|
@@ -9,7 +9,7 @@ const reactQuery = require("react-query");
|
|
|
9
9
|
const reactRedux = require("react-redux");
|
|
10
10
|
const reactRouterDom = require("react-router-dom");
|
|
11
11
|
const reactContext = require("@radix-ui/react-context");
|
|
12
|
-
const AuthenticatedApp = require("./AuthenticatedApp-
|
|
12
|
+
const AuthenticatedApp = require("./AuthenticatedApp-7e646400.js");
|
|
13
13
|
const formatAPIErrors = require("./formatAPIErrors-b599cf27.js");
|
|
14
14
|
const constants = require("./constants-da2542a3.js");
|
|
15
15
|
const index = require("./index-d3e1fd86.js");
|
|
@@ -870,4 +870,4 @@ const ApiTokenCreateView = () => {
|
|
|
870
870
|
] }) });
|
|
871
871
|
};
|
|
872
872
|
exports.ApiTokenCreateView = ApiTokenCreateView;
|
|
873
|
-
//# sourceMappingURL=index-
|
|
873
|
+
//# sourceMappingURL=index-caab4b20.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-557e0c47.js","sources":["../../admin/src/contexts/apiTokenPermissions.tsx","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/transformPermissionsData.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/getMethodColor.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/init.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { Entity } from '@strapi/types';\n\ninterface PseudoEvent {\n target: { value: string };\n}\n\ninterface ApiTokenPermissionsContextValue {\n selectedAction: string[] | null;\n routes: string[];\n selectedActions: string[];\n data: {\n allActionsIds: Entity.ID[];\n permissions: {\n apiId: string;\n label: string;\n controllers: { controller: string; actions: { actionId: string; action: string } }[];\n }[];\n };\n onChange: ({ target: { value } }: PseudoEvent) => void;\n onChangeSelectAll: ({ target: { value } }: PseudoEvent) => void;\n setSelectedAction: ({ target: { value } }: PseudoEvent) => void;\n}\n\ninterface ApiTokenPermissionsContextProviderProps extends ApiTokenPermissionsContextValue {\n children: React.ReactNode[];\n}\n\nconst [ApiTokenPermissionsContextProvider, useApiTokenPermissionsContext] =\n createContext<ApiTokenPermissionsContextValue>('ApiTokenPermissionsContext');\n\nconst ApiTokenPermissionsProvider = ({\n children,\n ...rest\n}: ApiTokenPermissionsContextProviderProps) => {\n return (\n <ApiTokenPermissionsContextProvider {...rest}>{children}</ApiTokenPermissionsContextProvider>\n );\n};\n\nconst useApiTokenPermissions = () => useApiTokenPermissionsContext('useApiTokenPermissions');\n\nexport { ApiTokenPermissionsProvider, useApiTokenPermissions };\nexport type { ApiTokenPermissionsContextValue, ApiTokenPermissionsContextProviderProps };\n","const transformPermissionsData = (data) => {\n const layout = {\n allActionsIds: [],\n permissions: [],\n };\n\n layout.permissions = Object.keys(data).map((apiId) => ({\n apiId,\n label: apiId.split('::')[1],\n controllers: Object.keys(data[apiId].controllers)\n .map((controller) => ({\n controller,\n actions: data[apiId].controllers[controller]\n .map((action) => {\n const actionId = `${apiId}.${controller}.${action}`;\n\n if (apiId.includes('api::')) {\n layout.allActionsIds.push(actionId);\n }\n\n return {\n action,\n actionId,\n };\n })\n .flat(),\n }))\n .flat(),\n }));\n\n return layout;\n};\n\nexport default transformPermissionsData;\n","import React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport LifeSpanInput from '../../../../../components/Tokens/LifeSpanInput';\nimport TokenDescription from '../../../../../components/Tokens/TokenDescription';\nimport TokenName from '../../../../../components/Tokens/TokenName';\nimport TokenTypeSelect from '../../../../../components/Tokens/TokenTypeSelect';\n\nconst FormApiTokenContainer = ({\n errors,\n onChange,\n canEditInputs,\n isCreating,\n values,\n apiToken,\n onDispatch,\n setHasChangedPermissions,\n}) => {\n const { formatMessage } = useIntl();\n\n const handleChangeSelectApiTokenType = ({ target: { value } }) => {\n setHasChangedPermissions(false);\n\n if (value === 'full-access') {\n onDispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (value === 'read-only') {\n onDispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n };\n\n const typeOptions = [\n {\n value: 'read-only',\n label: {\n id: 'Settings.tokens.types.read-only',\n defaultMessage: 'Read-only',\n },\n },\n {\n value: 'full-access',\n label: {\n id: 'Settings.tokens.types.full-access',\n defaultMessage: 'Full access',\n },\n },\n {\n value: 'custom',\n label: {\n id: 'Settings.tokens.types.custom',\n defaultMessage: 'Custom',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem key=\"name\" col={6} xs={12}>\n <TokenName\n errors={errors}\n values={values}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"description\" col={6} xs={12}>\n <TokenDescription\n errors={errors}\n values={values}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"lifespan\" col={6} xs={12}>\n <LifeSpanInput\n isCreating={isCreating}\n errors={errors}\n values={values}\n onChange={onChange}\n token={apiToken}\n />\n </GridItem>\n\n <GridItem key=\"type\" col={6} xs={12}>\n <TokenTypeSelect\n values={values}\n errors={errors}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n onChange={(value) => {\n handleChangeSelectApiTokenType({ target: { value } });\n onChange({ target: { name: 'type', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nFormApiTokenContainer.propTypes = {\n errors: PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n lifespan: PropTypes.string,\n type: PropTypes.string,\n }),\n onChange: PropTypes.func.isRequired,\n canEditInputs: PropTypes.bool.isRequired,\n values: PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n lifespan: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n type: PropTypes.string,\n }).isRequired,\n isCreating: PropTypes.bool.isRequired,\n apiToken: PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n type: PropTypes.string,\n lifespan: PropTypes.string,\n name: PropTypes.string,\n accessKey: PropTypes.string,\n permissions: PropTypes.array,\n description: PropTypes.string,\n createdAt: PropTypes.string,\n }),\n onDispatch: PropTypes.func.isRequired,\n setHasChangedPermissions: PropTypes.func.isRequired,\n};\n\nFormApiTokenContainer.defaultProps = {\n errors: {},\n apiToken: {},\n};\n\nexport default FormApiTokenContainer;\n","import React from 'react';\n\nimport { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFocusWhenNavigate,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst LoadingView = ({ apiTokenName }) => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"API Tokens\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={\n apiTokenName ||\n formatMessage({\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n })\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n};\n\nLoadingView.defaultProps = {\n apiTokenName: null,\n};\n\nLoadingView.propTypes = {\n apiTokenName: PropTypes.string,\n};\n\nexport default LoadingView;\n","const getMethodColor = (verb) => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nexport default getMethodColor;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport getMethodColor from './getMethodColor';\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\nfunction BoundRoute({ route }) {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n \n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n}\n\nBoundRoute.defaultProps = {\n route: {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n};\n\nBoundRoute.propTypes = {\n route: PropTypes.shape({\n handler: PropTypes.string,\n method: PropTypes.string,\n path: PropTypes.string,\n }),\n};\n\nexport default BoundRoute;\n","import React from 'react';\n\nimport { Flex, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../../../../../../../contexts/apiTokenPermissions';\nimport BoundRoute from '../BoundRoute';\n\nconst ActionBoundRoutes = () => {\n const {\n value: { selectedAction, routes },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n const actionSection = selectedAction?.split('.')[0];\n\n return (\n <GridItem\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {routes[actionSection]?.map((route) => {\n return route.config.auth?.scope?.includes(selectedAction) ||\n route.handler === selectedAction ? (\n <BoundRoute key={route.handler} route={route} />\n ) : null;\n })}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </GridItem>\n );\n};\n\nexport default ActionBoundRoutes;\n","import { Box } from '@strapi/design-system';\nimport styled, { css } from 'styled-components';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n svg {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nexport default CheckboxWrapper;\n","import React, { useEffect, useState } from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Typography,\n} from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport capitalize from 'lodash/capitalize';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useApiTokenPermissions } from '../../../../../../../contexts/apiTokenPermissions';\n\nimport CheckboxWrapper from './CheckBoxWrapper';\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CollapsableContentType = ({\n controllers,\n label,\n orderNumber,\n disabled,\n onExpanded,\n indexExpandendCollapsedContent,\n}) => {\n const {\n value: { onChangeSelectAll, onChange, selectedActions, setSelectedAction, selectedAction },\n } = useApiTokenPermissions();\n const [expanded, setExpanded] = useState(false);\n const { formatMessage } = useIntl();\n\n const handleExpandedAccordion = () => {\n setExpanded((s) => !s);\n onExpanded(orderNumber);\n };\n\n useEffect(() => {\n if (\n indexExpandendCollapsedContent !== null &&\n indexExpandendCollapsedContent !== orderNumber &&\n expanded\n ) {\n setExpanded(false);\n }\n }, [indexExpandendCollapsedContent, orderNumber, expanded]);\n\n const isActionSelected = (actionId) => actionId === selectedAction;\n\n return (\n <Accordion\n expanded={expanded}\n onToggle={handleExpandedAccordion}\n variant={orderNumber % 2 ? 'primary' : 'secondary'}\n >\n <AccordionToggle title={capitalize(label)} />\n <AccordionContent>\n {controllers?.map((controller) => {\n const allActionsSelected = controller.actions.every((action) =>\n selectedActions.includes(action.actionId)\n );\n\n const someActionsSelected = controller.actions.some((action) =>\n selectedActions.includes(action.actionId)\n );\n\n return (\n <Box key={`${label}.${controller?.controller}`}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {controller?.controller}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n value={allActionsSelected}\n indeterminate={!allActionsSelected && someActionsSelected}\n onValueChange={() => {\n onChangeSelectAll({ target: { value: [...controller.actions] } });\n }}\n disabled={disabled}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Grid gap={4} padding={4}>\n {controller?.actions &&\n controller?.actions.map((action) => {\n return (\n <GridItem col={6} key={action.actionId}>\n <CheckboxWrapper\n isActive={isActionSelected(action.actionId)}\n padding={2}\n hasRadius\n >\n <Checkbox\n value={selectedActions.includes(action.actionId)}\n name={action.actionId}\n onValueChange={() => {\n onChange({ target: { value: action.actionId } });\n }}\n disabled={disabled}\n >\n {action.action}\n </Checkbox>\n <button\n type=\"button\"\n data-testid=\"action-cog\"\n onClick={() =>\n setSelectedAction({ target: { value: action.actionId } })\n }\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <Cog />\n </button>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n </Box>\n );\n })}\n </AccordionContent>\n </Accordion>\n );\n};\n\nCollapsableContentType.defaultProps = {\n controllers: [],\n orderNumber: 0,\n disabled: false,\n onExpanded: () => null,\n indexExpandendCollapsedContent: null,\n};\n\nCollapsableContentType.propTypes = {\n controllers: PropTypes.array,\n orderNumber: PropTypes.number,\n label: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n onExpanded: PropTypes.func,\n indexExpandendCollapsedContent: PropTypes.number,\n};\n\nexport default CollapsableContentType;\n","import React, { useState } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport CollapsableContentType from '../CollapsableContentType';\n\nconst ContentTypesSection = ({ section, ...props }) => {\n const [indexExpandedCollpsedContent, setIndexExpandedCollpsedContent] = useState(null);\n const handleExpandedCollpsedContentIndex = (index) => setIndexExpandedCollpsedContent(index);\n\n return (\n <Box padding={4} background=\"neutral0\">\n {section &&\n section.map((api, index) => (\n <CollapsableContentType\n key={api.apiId}\n label={api.label}\n controllers={api.controllers}\n orderNumber={index}\n indexExpandendCollapsedContent={indexExpandedCollpsedContent}\n onExpanded={handleExpandedCollpsedContentIndex}\n name={api.apiId}\n {...props}\n />\n ))}\n </Box>\n );\n};\n\nContentTypesSection.defaultProps = {\n section: null,\n};\n\nContentTypesSection.propTypes = {\n section: PropTypes.arrayOf(PropTypes.object),\n};\n\nexport default ContentTypesSection;\n","import React, { memo } from 'react';\n\nimport { Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../../../../../../../contexts/apiTokenPermissions';\nimport ActionBoundRoutes from '../ActionBoundRoutes';\nimport ContentTypesSection from '../ContenTypesSection';\n\nconst Permissions = ({ ...props }) => {\n const {\n value: { data },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n\n return (\n <Grid gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.title',\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.description',\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n {data?.permissions && <ContentTypesSection section={data?.permissions} {...props} />}\n </GridItem>\n <ActionBoundRoutes />\n </Grid>\n );\n};\n\nexport default memo(Permissions);\n","import { transformPermissionsData } from './utils';\n\nconst init = (state, permissions = []) => {\n return {\n ...state,\n selectedAction: null,\n routes: [],\n selectedActions: [],\n data: transformPermissionsData(permissions),\n };\n};\n\nexport default init;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\nimport pull from 'lodash/pull';\n\nimport { transformPermissionsData } from './utils';\n\nexport const initialState = {\n data: {},\n selectedActions: [],\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n if (draftState.selectedActions.includes(action.value)) {\n pull(draftState.selectedActions, action.value);\n } else {\n draftState.selectedActions.push(action.value);\n }\n break;\n }\n case 'SELECT_ALL_IN_PERMISSION': {\n const areAllSelected = action.value.every((item) =>\n draftState.selectedActions.includes(item.actionId)\n );\n\n if (areAllSelected) {\n action.value.forEach((item) => {\n pull(draftState.selectedActions, item.actionId);\n });\n } else {\n action.value.forEach((item) => {\n draftState.selectedActions.push(item.actionId);\n });\n }\n break;\n }\n\n case 'SELECT_ALL_ACTIONS': {\n draftState.selectedActions = [...draftState.data.allActionsIds];\n\n break;\n }\n case 'ON_CHANGE_READ_ONLY': {\n const onlyReadOnlyActions = draftState.data.allActionsIds.filter(\n (actionId) => actionId.includes('find') || actionId.includes('findOne')\n );\n draftState.selectedActions = [...onlyReadOnlyActions];\n break;\n }\n case 'UPDATE_PERMISSIONS_LAYOUT': {\n draftState.data = transformPermissionsData(action.value);\n break;\n }\n case 'UPDATE_ROUTES': {\n draftState.routes = { ...action.value };\n break;\n }\n case 'UPDATE_PERMISSIONS': {\n draftState.selectedActions = [...action.value];\n break;\n }\n case 'SET_SELECTED_ACTION': {\n draftState.selectedAction = action.value;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useEffect, useReducer, useRef, useState } from 'react';\n\nimport { ContentLayout, Flex, Main } from '@strapi/design-system';\nimport {\n Form,\n SettingsPageTitle,\n useFetchClient,\n useFocusWhenNavigate,\n useGuidedTour,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { ApiTokenPermissionsProvider } from '../../../../../contexts/apiTokenPermissions';\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport { formatAPIErrors } from '../../../../../utils/formatAPIErrors';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport FormHead from '../../../components/Tokens/FormHead';\nimport TokenBox from '../../../components/Tokens/TokenBox';\n\nimport FormApiTokenContainer from './components/FormApiTokenContainer';\nimport LoadingView from './components/LoadingView';\nimport Permissions from './components/Permissions';\nimport init from './init';\nimport reducer, { initialState } from './reducer';\nimport { schema } from './utils';\n\nconst MSG_ERROR_NAME_TAKEN = 'Name already taken';\n\nconst ApiTokenCreateView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const toggleNotification = useNotification();\n const history = useHistory();\n const permissions = useSelector(selectAdminPermissions);\n const [apiToken, setApiToken] = useState(\n history.location.state?.apiToken.accessKey\n ? {\n ...history.location.state.apiToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const trackUsageRef = useRef(trackUsage);\n const { setCurrentStep } = useGuidedTour();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings['api-tokens']);\n const [state, dispatch] = useReducer(reducer, initialState, (state) => init(state, {}));\n const {\n params: { id },\n } = useRouteMatch('/settings/api-tokens/:id');\n const { get, post, put } = useFetchClient();\n\n const isCreating = id === 'create';\n\n useQuery(\n 'content-api-permissions',\n async () => {\n const [permissions, routes] = await Promise.all(\n ['/admin/content-api/permissions', '/admin/content-api/routes'].map(async (url) => {\n const { data } = await get(url);\n\n return data.data;\n })\n );\n\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: permissions,\n });\n\n dispatch({\n type: 'UPDATE_ROUTES',\n value: routes,\n });\n\n if (apiToken) {\n if (apiToken?.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken?.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken?.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n },\n {\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n useEffect(() => {\n trackUsageRef.current(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating]);\n\n const { status } = useQuery(\n ['api-token', id],\n async () => {\n const {\n data: { data },\n } = await get(`/admin/api-tokens/${id}`);\n\n setApiToken({\n ...data,\n });\n\n if (data?.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data?.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data?.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n\n return data;\n },\n {\n enabled: !isCreating && !apiToken,\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const handleSubmit = async (body, actions) => {\n trackUsageRef.current(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n lockApp();\n const lifespanVal =\n body.lifespan && parseInt(body.lifespan, 10) && body.lifespan !== '0'\n ? parseInt(body.lifespan, 10)\n : null;\n\n try {\n const {\n data: { data: response },\n } = isCreating\n ? await post(`/admin/api-tokens`, {\n ...body,\n lifespan: lifespanVal,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n })\n : await put(`/admin/api-tokens/${id}`, {\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if (isCreating) {\n history.replace(`/settings/api-tokens/${response.id}`, { apiToken: response });\n setCurrentStep('apiTokens.success');\n }\n unlockApp();\n setApiToken({\n ...response,\n });\n\n toggleNotification({\n type: 'success',\n message: isCreating\n ? formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n })\n : formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsageRef.current(isCreating ? 'didCreateToken' : 'didEditToken', {\n type: apiToken.type,\n tokenType: API_TOKEN_TYPE,\n });\n } catch (err) {\n const errors = formatAPIErrors(err.response.data);\n actions.setErrors(errors);\n\n if (err?.response?.data?.error?.message === MSG_ERROR_NAME_TAKEN) {\n toggleNotification({\n type: 'warning',\n message: err.response.data.message || 'notification.error.tokennamenotunique',\n });\n } else {\n toggleNotification({\n type: 'warning',\n message: err?.response?.data?.message || 'notification.error',\n });\n }\n unlockApp();\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = useState(false);\n\n const handleChangeCheckbox = ({ target: { value } }) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({ target: { value } }) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({ target: { value } }) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const isLoading = !isCreating && !apiToken && status !== 'success';\n\n if (isLoading) {\n return <LoadingView apiTokenName={apiToken?.name} />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Main>\n <SettingsPageTitle name=\"API Tokens\" />\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan ? apiToken.lifespan.toString() : apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n backUrl=\"/settings/api-tokens\"\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {Boolean(apiToken?.name) && (\n <TokenBox token={apiToken?.accessKey} tokenType={API_TOKEN_TYPE} />\n )}\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport default ApiTokenCreateView;\n"],"names":["createContext","jsx","useIntl","Box","Flex","Typography","jsxs","Grid","GridItem","TokenName","TokenDescription","LifeSpanInput","TokenTypeSelect","PropTypes","useFocusWhenNavigate","Main","SettingsPageTitle","HeaderLayout","Button","Check","ContentLayout","LoadingIndicatorPage","styled","tail","css","useState","useEffect","Accordion","AccordionToggle","capitalize","AccordionContent","Checkbox","Cog","index","memo","produce","pull","useOverlayBlocker","useNotification","useHistory","useSelector","selectAdminPermissions","useTracking","useRef","useGuidedTour","useRBAC","useReducer","state","useRouteMatch","useFetchClient","useQuery","permissions","API_TOKEN_TYPE","formatAPIErrors","Formik","schema","Form","FormHead","TokenBox","Permissions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAM,CAAC,oCAAoC,6BAA6B,IACtEA,2BAA+C,4BAA4B;AAE7E,MAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA,GAAG;AACL,MAA+C;AAC7C,SACGC,2BAAAA,IAAA,oCAAA,EAAoC,GAAG,MAAO,SAAS,CAAA;AAE5D;AAEA,MAAM,yBAAyB,MAAM,8BAA8B,wBAAwB;AC5C3F,MAAM,2BAA2B,CAAC,SAAS;AACzC,QAAM,SAAS;AAAA,IACb,eAAe,CAAC;AAAA,IAChB,aAAa,CAAC;AAAA,EAAA;AAGhB,SAAO,cAAc,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC,WAAW;AAAA,IACrD;AAAA,IACA,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC;AAAA,IAC1B,aAAa,OAAO,KAAK,KAAK,KAAK,EAAE,WAAW,EAC7C,IAAI,CAAC,gBAAgB;AAAA,MACpB;AAAA,MACA,SAAS,KAAK,KAAK,EAAE,YAAY,UAAU,EACxC,IAAI,CAAC,WAAW;AACf,cAAM,WAAW,GAAG,KAAK,IAAI,UAAU,IAAI,MAAM;AAE7C,YAAA,MAAM,SAAS,OAAO,GAAG;AACpB,iBAAA,cAAc,KAAK,QAAQ;AAAA,QACpC;AAEO,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QAAA;AAAA,MAEH,CAAA,EACA,KAAK;AAAA,IAAA,EACR,EACD,KAAK;AAAA,EACR,EAAA;AAEK,SAAA;AACT;ACpBA,MAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA,EAAE,kBAAkBC,UAAAA;AAE1B,QAAM,iCAAiC,CAAC,EAAE,QAAQ,EAAE,cAAc;AAChE,6BAAyB,KAAK;AAE9B,QAAI,UAAU,eAAe;AAChB,iBAAA;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AACA,QAAI,UAAU,aAAa;AACd,iBAAA;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EAAA;AAGF,QAAM,cAAc;AAAA,IAClB;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EAAA;AAIA,SAAAD,2BAAA;AAAA,IAACE,aAAA;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,WAAS;AAAA,MACT,QAAO;AAAA,MACP,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MAEd,0CAACC,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAAH,+BAACI,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QACAC,2BAAAA,KAACC,aAAAA,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,UAAAN,2BAAA,IAACO,aAAoB,UAAA,EAAA,KAAK,GAAG,IAAI,IAC/B,UAAAP,2BAAA;AAAA,YAACQ,MAAA;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,eALU,MAOd;AAAA,UACCR,2BAAA,IAAAO,aAAA,UAAA,EAA2B,KAAK,GAAG,IAAI,IACtC,UAAAP,2BAAA;AAAA,YAACS,MAAA;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,eALU,aAOd;AAAA,UACCT,2BAAA,IAAAO,aAAA,UAAA,EAAwB,KAAK,GAAG,IAAI,IACnC,UAAAP,2BAAA;AAAA,YAACU,MAAA;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,OAAO;AAAA,YAAA;AAAA,eANG,UAQd;AAAA,UAECV,2BAAA,IAAAO,aAAA,UAAA,EAAoB,KAAK,GAAG,IAAI,IAC/B,UAAAP,2BAAA;AAAA,YAACW,MAAA;AAAA,YAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAClB;AAAA,cACA,UAAU,CAAC,UAAU;AACnB,+CAA+B,EAAE,QAAQ,EAAE,MAAA,EAAS,CAAA;AACpD,yBAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,SAAS;AAAA,cAC9C;AAAA,cACA,SAAS;AAAA,cACT;AAAA,YAAA;AAAA,eAbU,MAed;AAAA,QAAA,GACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,sBAAsB,YAAY;AAAA,EAChC,QAAQC,2BAAU,MAAM;AAAA,IACtB,MAAMA,mBAAU,QAAA;AAAA,IAChB,aAAaA,mBAAU,QAAA;AAAA,IACvB,UAAUA,mBAAU,QAAA;AAAA,IACpB,MAAMA,mBAAU,QAAA;AAAA,EAAA,CACjB;AAAA,EACD,UAAUA,mBAAAA,QAAU,KAAK;AAAA,EACzB,eAAeA,mBAAAA,QAAU,KAAK;AAAA,EAC9B,QAAQA,2BAAU,MAAM;AAAA,IACtB,MAAMA,mBAAU,QAAA;AAAA,IAChB,aAAaA,mBAAU,QAAA;AAAA,IACvB,UAAUA,2BAAU,UAAU,CAACA,2BAAU,QAAQA,mBAAAA,QAAU,MAAM,CAAC;AAAA,IAClE,MAAMA,mBAAU,QAAA;AAAA,EACjB,CAAA,EAAE;AAAA,EACH,YAAYA,mBAAAA,QAAU,KAAK;AAAA,EAC3B,UAAUA,2BAAU,MAAM;AAAA,IACxB,IAAIA,2BAAU,UAAU,CAACA,2BAAU,QAAQA,mBAAAA,QAAU,MAAM,CAAC;AAAA,IAC5D,MAAMA,mBAAU,QAAA;AAAA,IAChB,UAAUA,mBAAU,QAAA;AAAA,IACpB,MAAMA,mBAAU,QAAA;AAAA,IAChB,WAAWA,mBAAU,QAAA;AAAA,IACrB,aAAaA,mBAAU,QAAA;AAAA,IACvB,aAAaA,mBAAU,QAAA;AAAA,IACvB,WAAWA,mBAAU,QAAA;AAAA,EAAA,CACtB;AAAA,EACD,YAAYA,mBAAAA,QAAU,KAAK;AAAA,EAC3B,0BAA0BA,mBAAAA,QAAU,KAAK;AAC3C;AAEA,sBAAsB,eAAe;AAAA,EACnC,QAAQ,CAAC;AAAA,EACT,UAAU,CAAC;AACb;ACrJA,MAAM,cAAc,CAAC,EAAE,mBAAmB;AAClC,QAAA,EAAE,kBAAkBX,UAAAA;AACLY,eAAAA;AAGnB,SAAAR,2BAAA,KAACS,aAAK,MAAA,EAAA,aAAU,QACd,UAAA;AAAA,IAACd,2BAAAA,IAAAe,aAAA,mBAAA,EAAkB,MAAK,aAAa,CAAA;AAAA,IACrCf,2BAAA;AAAA,MAACgB,aAAA;AAAA,MAAA;AAAA,QACC,8CACGC,aAAO,QAAA,EAAA,UAAQ,MAAC,WAAWjB,2BAAA,IAACkB,eAAM,GAAI,MAAK,UAAS,MAAK,KACvD,wBAAc,EAAE,IAAI,eAAe,gBAAgB,OAAQ,CAAA,GAC9D;AAAA,QAEF,OACE,gBACA,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IAEL;AAAA,IACClB,2BAAA,IAAAmB,aAAA,eAAA,EACC,UAACnB,2BAAA,IAAAoB,aAAA,sBAAA,CAAqB,CAAA,GACxB;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,YAAY,eAAe;AAAA,EACzB,cAAc;AAChB;AAEA,YAAY,YAAY;AAAA,EACtB,cAAcR,mBAAU,QAAA;AAC1B;AC9CA,MAAM,iBAAiB,CAAC,SAAS;AAC/B,UAAQ,MAAM;AAAA,IACZ,KAAK,QAAQ;AACJ,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,OAAO;AACH,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,OAAO;AACH,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,UAAU;AACN,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,SAAS;AACA,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,EACF;AACF;AC3BA,MAAM,YAAYS,gBAAAA,QAAOnB,aAAAA,GAAG;AAAA;AAAA,mBAET,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAGvF,SAAS,WAAW,EAAE,SAAS;AACvB,QAAA,EAAE,kBAAkBD,UAAAA;AAE1B,QAAM,EAAE,QAAQ,SAAS,OAAO,SAAS;AACnC,QAAA,iBAAiB,OAAOqB,sBAAK,KAAK,MAAM,GAAG,CAAC,IAAI;AAChD,QAAA,CAAC,aAAa,IAAI,SAAS,EAAE,IAAI,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAA;AAC5D,QAAA,SAAS,eAAe,MAAM,MAAM;AAE1C,yCACGnB,mBAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAAAE,2BAAA,KAACD,aAAW,YAAA,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAA;AAAA,MAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MAAE;AAAA,MAEHJ,2BAAAA,IAAC,UAAM,UAAW,WAAA,CAAA;AAAA,MACjBK,2BAAA,KAAAD,aAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cAAa,UAAA;AAAA,QAAA;AAAA,QAC/C;AAAA,MAAA,GACJ;AAAA,IAAA,GACF;AAAA,IACAC,2BAAAA,KAACF,qBAAK,WAAS,MAAC,YAAW,YAAW,aAAY,cAAa,KAAK,GAClE,UAAA;AAAA,MAAAH,2BAAAA,IAAC,aAAU,YAAY,OAAO,YAAY,aAAa,OAAO,QAAQ,SAAS,GAC7E,UAAAA,2BAAA,IAACI,2BAAW,YAAW,QAAO,WAAW,OAAO,MAC7C,iBACH,CAAA,GACF;AAAA,qCACCF,aAAAA,KAAI,EAAA,aAAa,GAAG,cAAc,GAChC,+BAAI,gBAAgB,CAAC,UACpBG,gCAACD,aAAAA,cAAuB,WAAW,MAAM,SAAS,GAAG,IAAI,eAAe,cAAc,UAAA;AAAA,QAAA;AAAA,QAClF;AAAA,MAAA,KADa,KAEjB,CACD,GACH;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,WAAW,eAAe;AAAA,EACxB,OAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF;AAEA,WAAW,YAAY;AAAA,EACrB,OAAOQ,2BAAU,MAAM;AAAA,IACrB,SAASA,mBAAU,QAAA;AAAA,IACnB,QAAQA,mBAAU,QAAA;AAAA,IAClB,MAAMA,mBAAU,QAAA;AAAA,EAAA,CACjB;AACH;AC7DA,MAAM,oBAAoB,MAAM;AACxB,QAAA;AAAA,IACJ,OAAO,EAAE,gBAAgB,OAAO;AAAA,MAC9B,uBAAuB;AACrB,QAAA,EAAE,kBAAkBX,UAAAA;AAC1B,QAAM,gBAAgB,gBAAgB,MAAM,GAAG,EAAE,CAAC;AAGhD,SAAAD,2BAAA;AAAA,IAACO,aAAA;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,YAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,OAAO,EAAE,WAAW,OAAO;AAAA,MAE1B,UACC,iBAAAP,+BAACG,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAO,OAAA,aAAa,GAAG,IAAI,CAAC,UAAU;AACrC,eAAO,MAAM,OAAO,MAAM,OAAO,SAAS,cAAc,KACtD,MAAM,YAAY,iBACjBH,2BAAAA,IAAA,YAAA,EAA+B,MAAf,GAAA,MAAM,OAAuB,IAC5C;AAAA,MACL,CAAA,GACH,IAECK,gCAAAF,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAAH,+BAACI,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,uCACCA,aAAAA,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBACE;AAAA,QACH,CAAA,GACH;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAIR;AClDA,MAAM,8BAA8BmB,OAAAA;AAAAA,gBACpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAMxD,MAAM,kBAAkBF,gBAAAA,QAAOnB,aAAAA,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlD,CAAC,UAAU,MAAM,YAAY,2BAA2B;AAAA;AAAA,MAEtD,2BAA2B;AAAA;AAAA;ACFjC,MAAM,SAASmB,gBAAO,QAAA;AAAA;AAAA;AAAA,0BAGI,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAGhE,MAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACE,QAAA;AAAA,IACJ,OAAO,EAAE,mBAAmB,UAAU,iBAAiB,mBAAmB,eAAe;AAAA,MACvF,uBAAuB;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAIG,eAAS,KAAK;AACxC,QAAA,EAAE,kBAAkBvB,UAAAA;AAE1B,QAAM,0BAA0B,MAAM;AACxB,gBAAA,CAAC,MAAM,CAAC,CAAC;AACrB,eAAW,WAAW;AAAA,EAAA;AAGxBwB,QAAAA,UAAU,MAAM;AACd,QACE,mCAAmC,QACnC,mCAAmC,eACnC,UACA;AACA,kBAAY,KAAK;AAAA,IACnB;AAAA,EACC,GAAA,CAAC,gCAAgC,aAAa,QAAQ,CAAC;AAEpD,QAAA,mBAAmB,CAAC,aAAa,aAAa;AAGlD,SAAApB,2BAAA;AAAA,IAACqB,aAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA,UAAU;AAAA,MACV,SAAS,cAAc,IAAI,YAAY;AAAA,MAEvC,UAAA;AAAA,QAAA1B,2BAAA,IAAC2B,aAAgB,iBAAA,EAAA,OAAOC,oBAAAA,QAAW,KAAK,EAAG,CAAA;AAAA,QAC1C5B,2BAAA,IAAA6B,aAAA,kBAAA,EACE,UAAa,aAAA,IAAI,CAAC,eAAe;AAC1B,gBAAA,qBAAqB,WAAW,QAAQ;AAAA,YAAM,CAAC,WACnD,gBAAgB,SAAS,OAAO,QAAQ;AAAA,UAAA;AAGpC,gBAAA,sBAAsB,WAAW,QAAQ;AAAA,YAAK,CAAC,WACnD,gBAAgB,SAAS,OAAO,QAAQ;AAAA,UAAA;AAG1C,iDACG3B,kBACC,EAAA,UAAA;AAAA,YAAAG,gCAACF,aAAAA,QAAK,gBAAe,iBAAgB,YAAW,UAAS,SAAS,GAChE,UAAA;AAAA,cAACH,2BAAA,IAAAE,aAAA,KAAA,EAAI,cAAc,GACjB,UAACF,2BAAA,IAAAI,yBAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAY,YAAA,WACf,CAAA,GACF;AAAA,6CACC,QAAO,EAAA;AAAA,cACRJ,2BAAAA,IAACE,aAAAA,KAAI,EAAA,aAAa,GAChB,UAAAF,2BAAA;AAAA,gBAAC8B,aAAA;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,kBACP,eAAe,CAAC,sBAAsB;AAAA,kBACtC,eAAe,MAAM;AACD,sCAAA,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,WAAW,OAAO,EAAE,EAAA,CAAG;AAAA,kBAClE;AAAA,kBACA;AAAA,kBAEC,wBAAc,EAAE,IAAI,wBAAwB,gBAAgB,cAAc;AAAA,gBAAA;AAAA,cAAA,GAE/E;AAAA,YAAA,GACF;AAAA,YACC9B,2BAAAA,IAAAM,aAAAA,MAAA,EAAK,KAAK,GAAG,SAAS,GACpB,UAAY,YAAA,WACX,YAAY,QAAQ,IAAI,CAAC,WAAW;AAEhC,qBAAAN,2BAAAA,IAACO,aAAAA,UAAS,EAAA,KAAK,GACb,UAAAF,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,UAAU,iBAAiB,OAAO,QAAQ;AAAA,kBAC1C,SAAS;AAAA,kBACT,WAAS;AAAA,kBAET,UAAA;AAAA,oBAAAL,2BAAA;AAAA,sBAAC8B,aAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,gBAAgB,SAAS,OAAO,QAAQ;AAAA,wBAC/C,MAAM,OAAO;AAAA,wBACb,eAAe,MAAM;AACnB,mCAAS,EAAE,QAAQ,EAAE,OAAO,OAAO,YAAY;AAAA,wBACjD;AAAA,wBACA;AAAA,wBAEC,UAAO,OAAA;AAAA,sBAAA;AAAA,oBACV;AAAA,oBACA9B,2BAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,eAAY;AAAA,wBACZ,SAAS,MACP,kBAAkB,EAAE,QAAQ,EAAE,OAAO,OAAO,SAAS,GAAG;AAAA,wBAE1D,OAAO,EAAE,SAAS,eAAe,YAAY,SAAS;AAAA,wBAEtD,yCAAC+B,MAAI,KAAA,EAAA;AAAA,sBAAA;AAAA,oBACP;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,KAzBmB,OAAO,QA2B9B;AAAA,YAEH,CAAA,GACL;AAAA,UAAA,EAAA,GAvDQ,GAAG,KAAK,IAAI,YAAY,UAAU,EAwD5C;AAAA,QAEH,CAAA,GACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,uBAAuB,eAAe;AAAA,EACpC,aAAa,CAAC;AAAA,EACd,aAAa;AAAA,EACb,UAAU;AAAA,EACV,YAAY,MAAM;AAAA,EAClB,gCAAgC;AAClC;AAEA,uBAAuB,YAAY;AAAA,EACjC,aAAanB,mBAAU,QAAA;AAAA,EACvB,aAAaA,mBAAU,QAAA;AAAA,EACvB,OAAOA,mBAAAA,QAAU,OAAO;AAAA,EACxB,UAAUA,mBAAU,QAAA;AAAA,EACpB,YAAYA,mBAAU,QAAA;AAAA,EACtB,gCAAgCA,mBAAU,QAAA;AAC5C;ACtJA,MAAM,sBAAsB,CAAC,EAAE,SAAS,GAAG,YAAY;AACrD,QAAM,CAAC,8BAA8B,+BAA+B,IAAIY,eAAS,IAAI;AACrF,QAAM,qCAAqC,CAACQ,WAAU,gCAAgCA,MAAK;AAGzF,SAAAhC,2BAAA,IAACE,aAAI,KAAA,EAAA,SAAS,GAAG,YAAW,YACzB,UAAA,WACC,QAAQ,IAAI,CAAC,KAAK8B,WAChBhC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO,IAAI;AAAA,MACX,aAAa,IAAI;AAAA,MACjB,aAAagC;AAAA,MACb,gCAAgC;AAAA,MAChC,YAAY;AAAA,MACZ,MAAM,IAAI;AAAA,MACT,GAAG;AAAA,IAAA;AAAA,IAPC,IAAI;AAAA,EASZ,CAAA,EACL,CAAA;AAEJ;AAEA,oBAAoB,eAAe;AAAA,EACjC,SAAS;AACX;AAEA,oBAAoB,YAAY;AAAA,EAC9B,SAASpB,mBAAA,QAAU,QAAQA,mBAAAA,QAAU,MAAM;AAC7C;AC3BA,MAAM,cAAc,CAAC,EAAE,GAAG,YAAY;AAC9B,QAAA;AAAA,IACJ,OAAO,EAAE,KAAK;AAAA,MACZ,uBAAuB;AACrB,QAAA,EAAE,kBAAkBX,UAAAA;AAGxB,SAAAI,gCAACC,aAAAA,QAAK,KAAK,GAAG,QAAO,gBAAe,WAAS,MAAC,YAAW,YACvD,UAAA;AAAA,IAACD,2BAAAA,KAAAE,aAAAA,UAAA,EAAS,KAAK,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,GAC/E,UAAA;AAAA,MAAAF,gCAACF,aAAAA,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAAH,+BAACI,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,uCACCA,aAAAA,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,MACC,MAAM,eAAgBJ,2BAAA,IAAA,qBAAA,EAAoB,SAAS,MAAM,aAAc,GAAG,OAAO;AAAA,IAAA,GACpF;AAAA,mCACC,mBAAkB,EAAA;AAAA,EACrB,EAAA,CAAA;AAEJ;AAEA,MAAeiC,gBAAAA,MAAAA,KAAK,WAAW;ACrC/B,MAAM,OAAO,CAAC,OAAO,cAAc,OAAO;AACjC,SAAA;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ,CAAC;AAAA,IACT,iBAAiB,CAAC;AAAA,IAClB,MAAM,yBAAyB,WAAW;AAAA,EAAA;AAE9C;ACJO,MAAM,eAAe;AAAA,EAC1B,MAAM,CAAC;AAAA,EACP,iBAAiB,CAAC;AACpB;AAEA,MAAM,UAAU,CAAC,OAAO,WACtBC,iBAAAA,QAAQ,OAAO,CAAC,eAAe;AAC7B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,aAAa;AAChB,UAAI,WAAW,gBAAgB,SAAS,OAAO,KAAK,GAAG;AAChDC,sBAAAA,QAAA,WAAW,iBAAiB,OAAO,KAAK;AAAA,MAAA,OACxC;AACM,mBAAA,gBAAgB,KAAK,OAAO,KAAK;AAAA,MAC9C;AACA;AAAA,IACF;AAAA,IACA,KAAK,4BAA4B;AACzB,YAAA,iBAAiB,OAAO,MAAM;AAAA,QAAM,CAAC,SACzC,WAAW,gBAAgB,SAAS,KAAK,QAAQ;AAAA,MAAA;AAGnD,UAAI,gBAAgB;AACX,eAAA,MAAM,QAAQ,CAAC,SAAS;AACxBA,wBAAAA,QAAA,WAAW,iBAAiB,KAAK,QAAQ;AAAA,QAAA,CAC/C;AAAA,MAAA,OACI;AACE,eAAA,MAAM,QAAQ,CAAC,SAAS;AAClB,qBAAA,gBAAgB,KAAK,KAAK,QAAQ;AAAA,QAAA,CAC9C;AAAA,MACH;AACA;AAAA,IACF;AAAA,IAEA,KAAK,sBAAsB;AACzB,iBAAW,kBAAkB,CAAC,GAAG,WAAW,KAAK,aAAa;AAE9D;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AACpB,YAAA,sBAAsB,WAAW,KAAK,cAAc;AAAA,QACxD,CAAC,aAAa,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,SAAS;AAAA,MAAA;AAE7D,iBAAA,kBAAkB,CAAC,GAAG,mBAAmB;AACpD;AAAA,IACF;AAAA,IACA,KAAK,6BAA6B;AACrB,iBAAA,OAAO,yBAAyB,OAAO,KAAK;AACvD;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,iBAAW,SAAS,EAAE,GAAG,OAAO,MAAM;AACtC;AAAA,IACF;AAAA,IACA,KAAK,sBAAsB;AACzB,iBAAW,kBAAkB,CAAC,GAAG,OAAO,KAAK;AAC7C;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AAC1B,iBAAW,iBAAiB,OAAO;AACnC;AAAA,IACF;AAAA,IACA;AACS,aAAA;AAAA,EACX;AACF,CAAC;ACpCH,MAAM,uBAAuB;AAE7B,MAAM,qBAAqB,MAAM;AACVtB,eAAAA;AACf,QAAA,EAAE,kBAAkBZ,UAAAA;AAC1B,QAAM,EAAE,SAAS,UAAU,IAAImC,aAAkB,kBAAA;AACjD,QAAM,qBAAqBC,aAAAA;AAC3B,QAAM,UAAUC,eAAAA;AACV,QAAA,cAAcC,uBAAYC,iBAAAA,sBAAsB;AAChD,QAAA,CAAC,UAAU,WAAW,IAAIhB,MAAA;AAAA,IAC9B,QAAQ,SAAS,OAAO,SAAS,YAC7B;AAAA,MACE,GAAG,QAAQ,SAAS,MAAM;AAAA,IAAA,IAE5B;AAAA,EAAA;AAEA,QAAA,EAAE,eAAeiB,aAAAA;AACjB,QAAA,gBAAgBC,aAAO,UAAU;AACjC,QAAA,EAAE,mBAAmBC,aAAAA;AACrB,QAAA;AAAA,IACJ,gBAAgB,EAAE,WAAW,WAAW,cAAc;AAAA,EACpD,IAAAC,aAAA,QAAQ,YAAY,SAAS,YAAY,CAAC;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAIC,MAAW,WAAA,SAAS,cAAc,CAACC,WAAU,KAAKA,QAAO,CAAA,CAAE,CAAC;AAChF,QAAA;AAAA,IACJ,QAAQ,EAAE,GAAG;AAAA,EAAA,IACXC,eAAAA,cAAc,0BAA0B;AAC5C,QAAM,EAAE,KAAK,MAAM,QAAQC,aAAe,eAAA;AAE1C,QAAM,aAAa,OAAO;AAE1BC,aAAA;AAAA,IACE;AAAA,IACA,YAAY;AACV,YAAM,CAACC,cAAa,MAAM,IAAI,MAAM,QAAQ;AAAA,QAC1C,CAAC,kCAAkC,2BAA2B,EAAE,IAAI,OAAO,QAAQ;AACjF,gBAAM,EAAE,KAAS,IAAA,MAAM,IAAI,GAAG;AAE9B,iBAAO,KAAK;AAAA,QAAA,CACb;AAAA,MAAA;AAGM,eAAA;AAAA,QACP,MAAM;AAAA,QACN,OAAOA;AAAAA,MAAA,CACR;AAEQ,eAAA;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,CACR;AAED,UAAI,UAAU;AACR,YAAA,UAAU,SAAS,aAAa;AACzB,mBAAA;AAAA,YACP,MAAM;AAAA,UAAA,CACP;AAAA,QACH;AACI,YAAA,UAAU,SAAS,eAAe;AAC3B,mBAAA;AAAA,YACP,MAAM;AAAA,UAAA,CACP;AAAA,QACH;AACI,YAAA,UAAU,SAAS,UAAU;AACtB,mBAAA;AAAA,YACP,MAAM;AAAA,YACN,OAAO,UAAU;AAAA,UAAA,CAClB;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,UAAU;AACW,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI,sBAAsB,gBAAgB,mBAAmB;AAAA,QAAA,CACzE;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAGFzB,QAAAA,UAAU,MAAM;AACA,kBAAA,QAAQ,aAAa,wBAAwB,wBAAwB;AAAA,MACjF,WAAW0B,UAAA;AAAA,IAAA,CACZ;AAAA,EAAA,GACA,CAAC,UAAU,CAAC;AAET,QAAA,EAAE,WAAWF,WAAA;AAAA,IACjB,CAAC,aAAa,EAAE;AAAA,IAChB,YAAY;AACJ,YAAA;AAAA,QACJ,MAAM,EAAE,KAAK;AAAA,MACX,IAAA,MAAM,IAAI,qBAAqB,EAAE,EAAE;AAE3B,kBAAA;AAAA,QACV,GAAG;AAAA,MAAA,CACJ;AAEG,UAAA,MAAM,SAAS,aAAa;AACrB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,MAAM,SAAS,eAAe;AACvB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,MAAM,SAAS,UAAU;AAClB,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,QAAA,CACd;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA,IACA;AAAA,MACE,SAAS,CAAC,cAAc,CAAC;AAAA,MACzB,UAAU;AACW,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,EAAE,IAAI,sBAAsB,gBAAgB,mBAAmB;AAAA,QAAA,CACzE;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,eAAe,OAAO,MAAM,YAAY;AAC9B,kBAAA,QAAQ,aAAa,oBAAoB,iBAAiB;AAAA,MACtE,WAAWE,UAAA;AAAA,IAAA,CACZ;AACO;AACR,UAAM,cACJ,KAAK,YAAY,SAAS,KAAK,UAAU,EAAE,KAAK,KAAK,aAAa,MAC9D,SAAS,KAAK,UAAU,EAAE,IAC1B;AAEF,QAAA;AACI,YAAA;AAAA,QACJ,MAAM,EAAE,MAAM,SAAS;AAAA,MACrB,IAAA,aACA,MAAM,KAAK,qBAAqB;AAAA,QAC9B,GAAG;AAAA,QACH,UAAU;AAAA,QACV,aAAa,KAAK,SAAS,WAAW,MAAM,kBAAkB;AAAA,MAC/D,CAAA,IACD,MAAM,IAAI,qBAAqB,EAAE,IAAI;AAAA,QACnC,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,MAAM,KAAK;AAAA,QACX,aAAa,KAAK,SAAS,WAAW,MAAM,kBAAkB;AAAA,MAAA,CAC/D;AAEL,UAAI,YAAY;AACN,gBAAA,QAAQ,wBAAwB,SAAS,EAAE,IAAI,EAAE,UAAU,UAAU;AAC7E,uBAAe,mBAAmB;AAAA,MACpC;AACU;AACE,kBAAA;AAAA,QACV,GAAG;AAAA,MAAA,CACJ;AAEkB,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,aACL,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,IACD,cAAc;AAAA,UACZ,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACN;AAEa,oBAAA,QAAQ,aAAa,mBAAmB,gBAAgB;AAAA,QACpE,MAAM,SAAS;AAAA,QACf,WAAWA,UAAA;AAAA,MAAA,CACZ;AAAA,aACM,KAAK;AACZ,YAAM,SAASC,gBAAA,gBAAgB,IAAI,SAAS,IAAI;AAChD,cAAQ,UAAU,MAAM;AAExB,UAAI,KAAK,UAAU,MAAM,OAAO,YAAY,sBAAsB;AAC7C,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,IAAI,SAAS,KAAK,WAAW;AAAA,QAAA,CACvC;AAAA,MAAA,OACI;AACc,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,KAAK,UAAU,MAAM,WAAW;AAAA,QAAA,CAC1C;AAAA,MACH;AACU;IACZ;AAAA,EAAA;AAGF,QAAM,CAAC,uBAAuB,wBAAwB,IAAI5B,eAAS,KAAK;AAExE,QAAM,uBAAuB,CAAC,EAAE,QAAQ,EAAE,cAAc;AACtD,6BAAyB,IAAI;AACpB,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,gCAAgC,CAAC,EAAE,QAAQ,EAAE,cAAc;AAC/D,6BAAyB,IAAI;AACpB,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,oBAAoB,CAAC,EAAE,QAAQ,EAAE,cAAc;AAC1C,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB;AAAA,EAAA;AAGF,QAAM,gBAAiB,aAAa,CAAC,cAAgB,aAAa;AAClE,QAAM,YAAY,CAAC,cAAc,CAAC,YAAY,WAAW;AAEzD,MAAI,WAAW;AACb,WAAQxB,2BAAAA,IAAA,aAAA,EAAY,cAAc,UAAU,KAAM,CAAA;AAAA,EACpD;AAEA,SACGA,2BAAA,IAAA,6BAAA,EAA4B,OAAO,eAClC,0CAACc,mBACC,EAAA,UAAA;AAAA,IAACd,2BAAAA,IAAAe,aAAA,mBAAA,EAAkB,MAAK,aAAa,CAAA;AAAA,IACrCf,2BAAA;AAAA,MAACqD,OAAA;AAAA,MAAA;AAAA,QACC,kBAAkBC,MAAA;AAAA,QAClB,kBAAkB;AAAA,QAClB,eAAe;AAAA,UACb,MAAM,UAAU,QAAQ;AAAA,UACxB,aAAa,UAAU,eAAe;AAAA,UACtC,MAAM,UAAU;AAAA,UAChB,UAAU,UAAU,WAAW,SAAS,SAAS,SAAA,IAAa,UAAU;AAAA,QAC1E;AAAA,QACA,oBAAkB;AAAA,QAClB,UAAU,CAAC,MAAM,YAAY,aAAa,MAAM,OAAO;AAAA,QAEtD,WAAC,EAAE,QAAQ,cAAc,cAAc,QAAQ,oBAAoB;AAC9D,cAAA,yBAAyB,QAAQ,SAAS,UAAU;AACtD,0BAAc,QAAQ,QAAQ;AAAA,UAChC;AAEA,iDACGC,mBACC,EAAA,UAAA;AAAA,YAAAvD,2BAAA;AAAA,cAACwD,MAAA;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,OAAO;AAAA,kBACL,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBAClB;AAAA,gBACA,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,eAAc;AAAA,cAAA;AAAA,YAChB;AAAA,YAEAxD,2BAAAA,IAACmB,aAAAA,iBACC,UAACd,2BAAAA,KAAAF,aAAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA;AAAA,cAAQ,QAAA,UAAU,IAAI,KACrBH,2BAAA,IAACyD,kBAAS,OAAO,UAAU,WAAW,WAAWN,UAAgB,eAAA,CAAA;AAAA,cAEnEnD,2BAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,UAAU;AAAA,kBACV;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,YAAY;AAAA,kBACZ;AAAA,gBAAA;AAAA,cACF;AAAA,cACAA,2BAAA;AAAA,gBAAC0D;AAAAA,gBAAA;AAAA,kBACC,UACE,CAAC,iBACD,QAAQ,SAAS,eACjB,QAAQ,SAAS;AAAA,gBAAA;AAAA,cAErB;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,UACF,EAAA,CAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;;"}
|
|
1
|
+
{"version":3,"file":"index-caab4b20.js","sources":["../../admin/src/contexts/apiTokenPermissions.tsx","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/transformPermissionsData.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/getMethodColor.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/init.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js","../../admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { Entity } from '@strapi/types';\n\ninterface PseudoEvent {\n target: { value: string };\n}\n\ninterface ApiTokenPermissionsContextValue {\n selectedAction: string[] | null;\n routes: string[];\n selectedActions: string[];\n data: {\n allActionsIds: Entity.ID[];\n permissions: {\n apiId: string;\n label: string;\n controllers: { controller: string; actions: { actionId: string; action: string } }[];\n }[];\n };\n onChange: ({ target: { value } }: PseudoEvent) => void;\n onChangeSelectAll: ({ target: { value } }: PseudoEvent) => void;\n setSelectedAction: ({ target: { value } }: PseudoEvent) => void;\n}\n\ninterface ApiTokenPermissionsContextProviderProps extends ApiTokenPermissionsContextValue {\n children: React.ReactNode[];\n}\n\nconst [ApiTokenPermissionsContextProvider, useApiTokenPermissionsContext] =\n createContext<ApiTokenPermissionsContextValue>('ApiTokenPermissionsContext');\n\nconst ApiTokenPermissionsProvider = ({\n children,\n ...rest\n}: ApiTokenPermissionsContextProviderProps) => {\n return (\n <ApiTokenPermissionsContextProvider {...rest}>{children}</ApiTokenPermissionsContextProvider>\n );\n};\n\nconst useApiTokenPermissions = () => useApiTokenPermissionsContext('useApiTokenPermissions');\n\nexport { ApiTokenPermissionsProvider, useApiTokenPermissions };\nexport type { ApiTokenPermissionsContextValue, ApiTokenPermissionsContextProviderProps };\n","const transformPermissionsData = (data) => {\n const layout = {\n allActionsIds: [],\n permissions: [],\n };\n\n layout.permissions = Object.keys(data).map((apiId) => ({\n apiId,\n label: apiId.split('::')[1],\n controllers: Object.keys(data[apiId].controllers)\n .map((controller) => ({\n controller,\n actions: data[apiId].controllers[controller]\n .map((action) => {\n const actionId = `${apiId}.${controller}.${action}`;\n\n if (apiId.includes('api::')) {\n layout.allActionsIds.push(actionId);\n }\n\n return {\n action,\n actionId,\n };\n })\n .flat(),\n }))\n .flat(),\n }));\n\n return layout;\n};\n\nexport default transformPermissionsData;\n","import React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport LifeSpanInput from '../../../../../components/Tokens/LifeSpanInput';\nimport TokenDescription from '../../../../../components/Tokens/TokenDescription';\nimport TokenName from '../../../../../components/Tokens/TokenName';\nimport TokenTypeSelect from '../../../../../components/Tokens/TokenTypeSelect';\n\nconst FormApiTokenContainer = ({\n errors,\n onChange,\n canEditInputs,\n isCreating,\n values,\n apiToken,\n onDispatch,\n setHasChangedPermissions,\n}) => {\n const { formatMessage } = useIntl();\n\n const handleChangeSelectApiTokenType = ({ target: { value } }) => {\n setHasChangedPermissions(false);\n\n if (value === 'full-access') {\n onDispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (value === 'read-only') {\n onDispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n };\n\n const typeOptions = [\n {\n value: 'read-only',\n label: {\n id: 'Settings.tokens.types.read-only',\n defaultMessage: 'Read-only',\n },\n },\n {\n value: 'full-access',\n label: {\n id: 'Settings.tokens.types.full-access',\n defaultMessage: 'Full access',\n },\n },\n {\n value: 'custom',\n label: {\n id: 'Settings.tokens.types.custom',\n defaultMessage: 'Custom',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem key=\"name\" col={6} xs={12}>\n <TokenName\n errors={errors}\n values={values}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"description\" col={6} xs={12}>\n <TokenDescription\n errors={errors}\n values={values}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"lifespan\" col={6} xs={12}>\n <LifeSpanInput\n isCreating={isCreating}\n errors={errors}\n values={values}\n onChange={onChange}\n token={apiToken}\n />\n </GridItem>\n\n <GridItem key=\"type\" col={6} xs={12}>\n <TokenTypeSelect\n values={values}\n errors={errors}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n onChange={(value) => {\n handleChangeSelectApiTokenType({ target: { value } });\n onChange({ target: { name: 'type', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nFormApiTokenContainer.propTypes = {\n errors: PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n lifespan: PropTypes.string,\n type: PropTypes.string,\n }),\n onChange: PropTypes.func.isRequired,\n canEditInputs: PropTypes.bool.isRequired,\n values: PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n lifespan: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n type: PropTypes.string,\n }).isRequired,\n isCreating: PropTypes.bool.isRequired,\n apiToken: PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n type: PropTypes.string,\n lifespan: PropTypes.string,\n name: PropTypes.string,\n accessKey: PropTypes.string,\n permissions: PropTypes.array,\n description: PropTypes.string,\n createdAt: PropTypes.string,\n }),\n onDispatch: PropTypes.func.isRequired,\n setHasChangedPermissions: PropTypes.func.isRequired,\n};\n\nFormApiTokenContainer.defaultProps = {\n errors: {},\n apiToken: {},\n};\n\nexport default FormApiTokenContainer;\n","import React from 'react';\n\nimport { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport {\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFocusWhenNavigate,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst LoadingView = ({ apiTokenName }) => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main aria-busy=\"true\">\n <SettingsPageTitle name=\"API Tokens\" />\n <HeaderLayout\n primaryAction={\n <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n title={\n apiTokenName ||\n formatMessage({\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n })\n }\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n};\n\nLoadingView.defaultProps = {\n apiTokenName: null,\n};\n\nLoadingView.propTypes = {\n apiTokenName: PropTypes.string,\n};\n\nexport default LoadingView;\n","const getMethodColor = (verb) => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nexport default getMethodColor;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport getMethodColor from './getMethodColor';\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\nfunction BoundRoute({ route }) {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n \n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n}\n\nBoundRoute.defaultProps = {\n route: {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n};\n\nBoundRoute.propTypes = {\n route: PropTypes.shape({\n handler: PropTypes.string,\n method: PropTypes.string,\n path: PropTypes.string,\n }),\n};\n\nexport default BoundRoute;\n","import React from 'react';\n\nimport { Flex, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../../../../../../../contexts/apiTokenPermissions';\nimport BoundRoute from '../BoundRoute';\n\nconst ActionBoundRoutes = () => {\n const {\n value: { selectedAction, routes },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n const actionSection = selectedAction?.split('.')[0];\n\n return (\n <GridItem\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {routes[actionSection]?.map((route) => {\n return route.config.auth?.scope?.includes(selectedAction) ||\n route.handler === selectedAction ? (\n <BoundRoute key={route.handler} route={route} />\n ) : null;\n })}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </GridItem>\n );\n};\n\nexport default ActionBoundRoutes;\n","import { Box } from '@strapi/design-system';\nimport styled, { css } from 'styled-components';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n svg {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nexport default CheckboxWrapper;\n","import React, { useEffect, useState } from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Typography,\n} from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport capitalize from 'lodash/capitalize';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useApiTokenPermissions } from '../../../../../../../contexts/apiTokenPermissions';\n\nimport CheckboxWrapper from './CheckBoxWrapper';\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CollapsableContentType = ({\n controllers,\n label,\n orderNumber,\n disabled,\n onExpanded,\n indexExpandendCollapsedContent,\n}) => {\n const {\n value: { onChangeSelectAll, onChange, selectedActions, setSelectedAction, selectedAction },\n } = useApiTokenPermissions();\n const [expanded, setExpanded] = useState(false);\n const { formatMessage } = useIntl();\n\n const handleExpandedAccordion = () => {\n setExpanded((s) => !s);\n onExpanded(orderNumber);\n };\n\n useEffect(() => {\n if (\n indexExpandendCollapsedContent !== null &&\n indexExpandendCollapsedContent !== orderNumber &&\n expanded\n ) {\n setExpanded(false);\n }\n }, [indexExpandendCollapsedContent, orderNumber, expanded]);\n\n const isActionSelected = (actionId) => actionId === selectedAction;\n\n return (\n <Accordion\n expanded={expanded}\n onToggle={handleExpandedAccordion}\n variant={orderNumber % 2 ? 'primary' : 'secondary'}\n >\n <AccordionToggle title={capitalize(label)} />\n <AccordionContent>\n {controllers?.map((controller) => {\n const allActionsSelected = controller.actions.every((action) =>\n selectedActions.includes(action.actionId)\n );\n\n const someActionsSelected = controller.actions.some((action) =>\n selectedActions.includes(action.actionId)\n );\n\n return (\n <Box key={`${label}.${controller?.controller}`}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {controller?.controller}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n value={allActionsSelected}\n indeterminate={!allActionsSelected && someActionsSelected}\n onValueChange={() => {\n onChangeSelectAll({ target: { value: [...controller.actions] } });\n }}\n disabled={disabled}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Grid gap={4} padding={4}>\n {controller?.actions &&\n controller?.actions.map((action) => {\n return (\n <GridItem col={6} key={action.actionId}>\n <CheckboxWrapper\n isActive={isActionSelected(action.actionId)}\n padding={2}\n hasRadius\n >\n <Checkbox\n value={selectedActions.includes(action.actionId)}\n name={action.actionId}\n onValueChange={() => {\n onChange({ target: { value: action.actionId } });\n }}\n disabled={disabled}\n >\n {action.action}\n </Checkbox>\n <button\n type=\"button\"\n data-testid=\"action-cog\"\n onClick={() =>\n setSelectedAction({ target: { value: action.actionId } })\n }\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <Cog />\n </button>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n </Box>\n );\n })}\n </AccordionContent>\n </Accordion>\n );\n};\n\nCollapsableContentType.defaultProps = {\n controllers: [],\n orderNumber: 0,\n disabled: false,\n onExpanded: () => null,\n indexExpandendCollapsedContent: null,\n};\n\nCollapsableContentType.propTypes = {\n controllers: PropTypes.array,\n orderNumber: PropTypes.number,\n label: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n onExpanded: PropTypes.func,\n indexExpandendCollapsedContent: PropTypes.number,\n};\n\nexport default CollapsableContentType;\n","import React, { useState } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport CollapsableContentType from '../CollapsableContentType';\n\nconst ContentTypesSection = ({ section, ...props }) => {\n const [indexExpandedCollpsedContent, setIndexExpandedCollpsedContent] = useState(null);\n const handleExpandedCollpsedContentIndex = (index) => setIndexExpandedCollpsedContent(index);\n\n return (\n <Box padding={4} background=\"neutral0\">\n {section &&\n section.map((api, index) => (\n <CollapsableContentType\n key={api.apiId}\n label={api.label}\n controllers={api.controllers}\n orderNumber={index}\n indexExpandendCollapsedContent={indexExpandedCollpsedContent}\n onExpanded={handleExpandedCollpsedContentIndex}\n name={api.apiId}\n {...props}\n />\n ))}\n </Box>\n );\n};\n\nContentTypesSection.defaultProps = {\n section: null,\n};\n\nContentTypesSection.propTypes = {\n section: PropTypes.arrayOf(PropTypes.object),\n};\n\nexport default ContentTypesSection;\n","import React, { memo } from 'react';\n\nimport { Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../../../../../../../contexts/apiTokenPermissions';\nimport ActionBoundRoutes from '../ActionBoundRoutes';\nimport ContentTypesSection from '../ContenTypesSection';\n\nconst Permissions = ({ ...props }) => {\n const {\n value: { data },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n\n return (\n <Grid gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.title',\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.description',\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n {data?.permissions && <ContentTypesSection section={data?.permissions} {...props} />}\n </GridItem>\n <ActionBoundRoutes />\n </Grid>\n );\n};\n\nexport default memo(Permissions);\n","import { transformPermissionsData } from './utils';\n\nconst init = (state, permissions = []) => {\n return {\n ...state,\n selectedAction: null,\n routes: [],\n selectedActions: [],\n data: transformPermissionsData(permissions),\n };\n};\n\nexport default init;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\nimport pull from 'lodash/pull';\n\nimport { transformPermissionsData } from './utils';\n\nexport const initialState = {\n data: {},\n selectedActions: [],\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n if (draftState.selectedActions.includes(action.value)) {\n pull(draftState.selectedActions, action.value);\n } else {\n draftState.selectedActions.push(action.value);\n }\n break;\n }\n case 'SELECT_ALL_IN_PERMISSION': {\n const areAllSelected = action.value.every((item) =>\n draftState.selectedActions.includes(item.actionId)\n );\n\n if (areAllSelected) {\n action.value.forEach((item) => {\n pull(draftState.selectedActions, item.actionId);\n });\n } else {\n action.value.forEach((item) => {\n draftState.selectedActions.push(item.actionId);\n });\n }\n break;\n }\n\n case 'SELECT_ALL_ACTIONS': {\n draftState.selectedActions = [...draftState.data.allActionsIds];\n\n break;\n }\n case 'ON_CHANGE_READ_ONLY': {\n const onlyReadOnlyActions = draftState.data.allActionsIds.filter(\n (actionId) => actionId.includes('find') || actionId.includes('findOne')\n );\n draftState.selectedActions = [...onlyReadOnlyActions];\n break;\n }\n case 'UPDATE_PERMISSIONS_LAYOUT': {\n draftState.data = transformPermissionsData(action.value);\n break;\n }\n case 'UPDATE_ROUTES': {\n draftState.routes = { ...action.value };\n break;\n }\n case 'UPDATE_PERMISSIONS': {\n draftState.selectedActions = [...action.value];\n break;\n }\n case 'SET_SELECTED_ACTION': {\n draftState.selectedAction = action.value;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useEffect, useReducer, useRef, useState } from 'react';\n\nimport { ContentLayout, Flex, Main } from '@strapi/design-system';\nimport {\n Form,\n SettingsPageTitle,\n useFetchClient,\n useFocusWhenNavigate,\n useGuidedTour,\n useNotification,\n useOverlayBlocker,\n useRBAC,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Formik } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { ApiTokenPermissionsProvider } from '../../../../../contexts/apiTokenPermissions';\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport { formatAPIErrors } from '../../../../../utils/formatAPIErrors';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport FormHead from '../../../components/Tokens/FormHead';\nimport TokenBox from '../../../components/Tokens/TokenBox';\n\nimport FormApiTokenContainer from './components/FormApiTokenContainer';\nimport LoadingView from './components/LoadingView';\nimport Permissions from './components/Permissions';\nimport init from './init';\nimport reducer, { initialState } from './reducer';\nimport { schema } from './utils';\n\nconst MSG_ERROR_NAME_TAKEN = 'Name already taken';\n\nconst ApiTokenCreateView = () => {\n useFocusWhenNavigate();\n const { formatMessage } = useIntl();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const toggleNotification = useNotification();\n const history = useHistory();\n const permissions = useSelector(selectAdminPermissions);\n const [apiToken, setApiToken] = useState(\n history.location.state?.apiToken.accessKey\n ? {\n ...history.location.state.apiToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const trackUsageRef = useRef(trackUsage);\n const { setCurrentStep } = useGuidedTour();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings['api-tokens']);\n const [state, dispatch] = useReducer(reducer, initialState, (state) => init(state, {}));\n const {\n params: { id },\n } = useRouteMatch('/settings/api-tokens/:id');\n const { get, post, put } = useFetchClient();\n\n const isCreating = id === 'create';\n\n useQuery(\n 'content-api-permissions',\n async () => {\n const [permissions, routes] = await Promise.all(\n ['/admin/content-api/permissions', '/admin/content-api/routes'].map(async (url) => {\n const { data } = await get(url);\n\n return data.data;\n })\n );\n\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: permissions,\n });\n\n dispatch({\n type: 'UPDATE_ROUTES',\n value: routes,\n });\n\n if (apiToken) {\n if (apiToken?.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken?.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken?.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n },\n {\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n useEffect(() => {\n trackUsageRef.current(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating]);\n\n const { status } = useQuery(\n ['api-token', id],\n async () => {\n const {\n data: { data },\n } = await get(`/admin/api-tokens/${id}`);\n\n setApiToken({\n ...data,\n });\n\n if (data?.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data?.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data?.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n\n return data;\n },\n {\n enabled: !isCreating && !apiToken,\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const handleSubmit = async (body, actions) => {\n trackUsageRef.current(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n lockApp();\n const lifespanVal =\n body.lifespan && parseInt(body.lifespan, 10) && body.lifespan !== '0'\n ? parseInt(body.lifespan, 10)\n : null;\n\n try {\n const {\n data: { data: response },\n } = isCreating\n ? await post(`/admin/api-tokens`, {\n ...body,\n lifespan: lifespanVal,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n })\n : await put(`/admin/api-tokens/${id}`, {\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if (isCreating) {\n history.replace(`/settings/api-tokens/${response.id}`, { apiToken: response });\n setCurrentStep('apiTokens.success');\n }\n unlockApp();\n setApiToken({\n ...response,\n });\n\n toggleNotification({\n type: 'success',\n message: isCreating\n ? formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n })\n : formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsageRef.current(isCreating ? 'didCreateToken' : 'didEditToken', {\n type: apiToken.type,\n tokenType: API_TOKEN_TYPE,\n });\n } catch (err) {\n const errors = formatAPIErrors(err.response.data);\n actions.setErrors(errors);\n\n if (err?.response?.data?.error?.message === MSG_ERROR_NAME_TAKEN) {\n toggleNotification({\n type: 'warning',\n message: err.response.data.message || 'notification.error.tokennamenotunique',\n });\n } else {\n toggleNotification({\n type: 'warning',\n message: err?.response?.data?.message || 'notification.error',\n });\n }\n unlockApp();\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = useState(false);\n\n const handleChangeCheckbox = ({ target: { value } }) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({ target: { value } }) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({ target: { value } }) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const isLoading = !isCreating && !apiToken && status !== 'success';\n\n if (isLoading) {\n return <LoadingView apiTokenName={apiToken?.name} />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Main>\n <SettingsPageTitle name=\"API Tokens\" />\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan ? apiToken.lifespan.toString() : apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n backUrl=\"/settings/api-tokens\"\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {Boolean(apiToken?.name) && (\n <TokenBox token={apiToken?.accessKey} tokenType={API_TOKEN_TYPE} />\n )}\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport default ApiTokenCreateView;\n"],"names":["createContext","jsx","useIntl","Box","Flex","Typography","jsxs","Grid","GridItem","TokenName","TokenDescription","LifeSpanInput","TokenTypeSelect","PropTypes","useFocusWhenNavigate","Main","SettingsPageTitle","HeaderLayout","Button","Check","ContentLayout","LoadingIndicatorPage","styled","tail","css","useState","useEffect","Accordion","AccordionToggle","capitalize","AccordionContent","Checkbox","Cog","index","memo","produce","pull","useOverlayBlocker","useNotification","useHistory","useSelector","selectAdminPermissions","useTracking","useRef","useGuidedTour","useRBAC","useReducer","state","useRouteMatch","useFetchClient","useQuery","permissions","API_TOKEN_TYPE","formatAPIErrors","Formik","schema","Form","FormHead","TokenBox","Permissions"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { U as UserListPageCE } from "./index-
|
|
2
|
+
import { U as UserListPageCE } from "./index-3aab6b0f.mjs";
|
|
3
3
|
import { u as useLicenseLimitNotification } from "./useLicenseLimitNotification-1fd756fa.mjs";
|
|
4
4
|
import "@strapi/helper-plugin";
|
|
5
5
|
import "react-redux";
|
|
6
|
-
import "./AuthenticatedApp-
|
|
6
|
+
import "./AuthenticatedApp-722b2e84.mjs";
|
|
7
7
|
import "react";
|
|
8
8
|
import "react-query";
|
|
9
9
|
import "semver/functions/lt";
|
|
10
10
|
import "semver/functions/valid";
|
|
11
|
-
import "./index-
|
|
11
|
+
import "./index-3c67c00b.mjs";
|
|
12
12
|
import "react-dom/client";
|
|
13
13
|
import "@strapi/design-system";
|
|
14
14
|
import "invariant";
|
|
@@ -38,7 +38,7 @@ import "lodash/cloneDeep";
|
|
|
38
38
|
import "./useAdminUsers-09f86a58.mjs";
|
|
39
39
|
import "./index-74812118.mjs";
|
|
40
40
|
import "prop-types";
|
|
41
|
-
import "./index-
|
|
41
|
+
import "./index-9b2501ca.mjs";
|
|
42
42
|
import "lodash/isNil";
|
|
43
43
|
import "./useLicenseLimits-13a102d3.mjs";
|
|
44
44
|
function UserListPageEE() {
|
|
@@ -48,4 +48,4 @@ function UserListPageEE() {
|
|
|
48
48
|
export {
|
|
49
49
|
UserListPageEE
|
|
50
50
|
};
|
|
51
|
-
//# sourceMappingURL=index-
|
|
51
|
+
//# sourceMappingURL=index-cc38421b.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-cc38421b.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js"],"sourcesContent":["import * as React from 'react';\n\n// eslint-disable-next-line import/no-cycle\nimport { UserListPageCE } from '../../../../../../../../admin/src/pages/SettingsPage/pages/Users/ListPage';\nimport { useLicenseLimitNotification } from '../../../../../hooks/useLicenseLimitNotification';\n\nexport function UserListPageEE() {\n useLicenseLimitNotification();\n\n return <UserListPageCE />;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,SAAS,iBAAiB;AACH;AAE5B,6BAAQ,gBAAe,CAAA,CAAA;AACzB;"}
|
|
@@ -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-7e646400.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-7f76e43f.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-8f8eaed6.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-336f4dd6.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-cdcf1a78.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-b2d4d126.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport {\n ConfirmDialog,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider } from 'formik';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../../../admin/src/hooks/useInjectReducer';\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\nimport {\n resetWorkflow,\n setIsLoading,\n setWorkflow,\n setContentTypes,\n setRoles,\n setWorkflows,\n} from '../../actions';\nimport * as Layout from '../../components/Layout';\nimport * as LimitsModal from '../../components/LimitsModal';\nimport { Stages } from '../../components/Stages';\nimport { WorkflowAttributes } from '../../components/WorkflowAttributes';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from '../../constants';\nimport { useReviewWorkflows } from '../../hooks/useReviewWorkflows';\nimport { reducer } from '../../reducer';\nimport {\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectHasDeletedServerStages,\n selectIsLoading,\n selectRoles,\n selectServerState,\n} from '../../selectors';\nimport { validateWorkflow } from '../../utils/validateWorkflow';\n\nexport function ReviewWorkflowsEditView() {\n const { workflowId } = useParams();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const { put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const { isLoading: isLoadingWorkflow, meta, workflows, refetch } = useReviewWorkflows();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const serverState = useSelector(selectServerState);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const hasDeletedServerStages = useSelector(selectHasDeletedServerStages);\n const roles = useSelector(selectRoles);\n const isLoading = useSelector(selectIsLoading);\n const {\n allowedActions: { canDelete, canUpdate },\n } = useRBAC(permissions.settings['review-workflows']);\n const [savePrompts, setSavePrompts] = React.useState({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined, {\n retry: false,\n });\n const [showLimitModal, setShowLimitModal] = React.useState(false);\n const [initialErrors, setInitialErrors] = React.useState(null);\n\n const workflow = workflows.find((workflow) => workflow.id === parseInt(workflowId, 10));\n const contentTypesFromOtherWorkflows = workflows\n .filter((workflow) => workflow.id !== parseInt(workflowId, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const { mutateAsync, isLoading: isLoadingMutation } = useMutation(\n async ({ workflow }) => {\n const {\n data: { data },\n } = await put(`/admin/review-workflows/workflows/${workflow.id}`, {\n data: workflow,\n });\n\n return data;\n },\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n },\n }\n );\n\n const updateWorkflow = async (workflow) => {\n // reset the error messages\n setInitialErrors(null);\n\n try {\n const res = await mutateAsync({\n workflow: {\n ...workflow,\n\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: workflow.stages.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = serverState.workflow.stages.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permission?.length ||\n !serverStage.permissions.every(\n (serverPermission) =>\n !!stage.permissions.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n };\n }),\n },\n });\n\n return res;\n } catch (error) {\n // TODO: this would benefit from a utility to get a formik error\n // representation from an API error\n if (\n error.response.data?.error?.name === 'ValidationError' &&\n error.response.data?.error?.details?.errors?.length > 0\n ) {\n setInitialErrors(\n error.response.data?.error?.details?.errors.reduce((acc, error) => {\n set(acc, error.path, error.message);\n\n return acc;\n }, {})\n );\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n\n return null;\n }\n };\n\n const submitForm = async () => {\n await updateWorkflow(currentWorkflow);\n await refetch();\n\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows.includes(contentType)\n );\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n const limits = getFeature('review-workflows');\n\n React.useEffect(() => {\n if (!isLoadingWorkflow) {\n dispatch(setWorkflow({ workflow }));\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingWorkflow || isLoadingContentTypes || isLoadingRoles));\n\n // reset the state to the initial state to avoid flashes if a user\n // navigates from an edit-view to a create-view\n return () => {\n dispatch(resetWorkflow());\n };\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingWorkflow,\n isLoadingRoles,\n serverRoles,\n singleTypes,\n workflow,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('workflow');\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow.stages.length,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta?.workflowCount,\n meta.workflowsTotal,\n ]);\n\n React.useEffect(() => {\n if (!isLoading && roles.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n // TODO: redirect back to list-view if workflow is not found?\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n canUpdate && (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Object.keys(savePrompts).length > 0 && isLoadingMutation}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n subtitle={\n !isLoading &&\n formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow.stages.length }\n )\n }\n title={currentWorkflow.name}\n />\n\n <Layout.Root>\n {isLoading ? (\n <Flex justifyContent=\"center\">\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n </Flex>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate}\n stages={formik.values?.stages}\n />\n </Flex>\n )}\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows.filter((contentType) =>\n currentWorkflow.contentTypes.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'stage'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n}\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\n\nimport { ReviewWorkflowsEditView } from './EditView';\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings['review-workflows'].main}>\n <ReviewWorkflowsEditView />\n </CheckPagePermissions>\n );\n}\n"],"names":["useParams","useSelector","selectAdminPermissions","useIntl","useDispatch","useFetchClient","useAPIErrorHandler","useNotification","useReviewWorkflows","useContentTypes","selectServerState","selectIsWorkflowDirty","selectCurrentWorkflow","selectHasDeletedServerStages","selectRoles","selectIsLoading","useRBAC","React","useLicenseLimits","useAdminRoles","workflow","useMutation","serverStage","error","set","formik","useFormik","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","setWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","resetWorkflow","jsxs","Fragment","jsx","Layout.DragLayerRendered","FormikProvider","Form","Layout.Header","Layout.Back","Button","Check","Layout.Root","Flex","Loader","WorkflowAttributes","Stages","ConfirmDialog","Typography","LimitsModal.Root","LimitsModal.Title","LimitsModal.Body","CheckPagePermissions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-cdcf1a78.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport {\n ConfirmDialog,\n useAPIErrorHandler,\n useFetchClient,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider } from 'formik';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../../../admin/src/hooks/useInjectReducer';\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\nimport { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\nimport {\n resetWorkflow,\n setIsLoading,\n setWorkflow,\n setContentTypes,\n setRoles,\n setWorkflows,\n} from '../../actions';\nimport * as Layout from '../../components/Layout';\nimport * as LimitsModal from '../../components/LimitsModal';\nimport { Stages } from '../../components/Stages';\nimport { WorkflowAttributes } from '../../components/WorkflowAttributes';\nimport {\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from '../../constants';\nimport { useReviewWorkflows } from '../../hooks/useReviewWorkflows';\nimport { reducer } from '../../reducer';\nimport {\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectHasDeletedServerStages,\n selectIsLoading,\n selectRoles,\n selectServerState,\n} from '../../selectors';\nimport { validateWorkflow } from '../../utils/validateWorkflow';\n\nexport function ReviewWorkflowsEditView() {\n const { workflowId } = useParams();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const { put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const { isLoading: isLoadingWorkflow, meta, workflows, refetch } = useReviewWorkflows();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const serverState = useSelector(selectServerState);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const hasDeletedServerStages = useSelector(selectHasDeletedServerStages);\n const roles = useSelector(selectRoles);\n const isLoading = useSelector(selectIsLoading);\n const {\n allowedActions: { canDelete, canUpdate },\n } = useRBAC(permissions.settings['review-workflows']);\n const [savePrompts, setSavePrompts] = React.useState({});\n const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined, {\n retry: false,\n });\n const [showLimitModal, setShowLimitModal] = React.useState(false);\n const [initialErrors, setInitialErrors] = React.useState(null);\n\n const workflow = workflows.find((workflow) => workflow.id === parseInt(workflowId, 10));\n const contentTypesFromOtherWorkflows = workflows\n .filter((workflow) => workflow.id !== parseInt(workflowId, 10))\n .flatMap((workflow) => workflow.contentTypes);\n\n const { mutateAsync, isLoading: isLoadingMutation } = useMutation(\n async ({ workflow }) => {\n const {\n data: { data },\n } = await put(`/admin/review-workflows/workflows/${workflow.id}`, {\n data: workflow,\n });\n\n return data;\n },\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n },\n }\n );\n\n const updateWorkflow = async (workflow) => {\n // reset the error messages\n setInitialErrors(null);\n\n try {\n const res = await mutateAsync({\n workflow: {\n ...workflow,\n\n // compare permissions of stages and only submit them if at least one has\n // changed; this enables partial updates e.g. for users who don't have\n // permissions to see roles\n stages: workflow.stages.map((stage) => {\n let hasUpdatedPermissions = true;\n const serverStage = serverState.workflow.stages.find(\n (serverStage) => serverStage.id === stage?.id\n );\n\n if (serverStage) {\n hasUpdatedPermissions =\n serverStage.permissions?.length !== stage.permission?.length ||\n !serverStage.permissions.every(\n (serverPermission) =>\n !!stage.permissions.find(\n (permission) => permission.role === serverPermission.role\n )\n );\n }\n\n return {\n ...stage,\n permissions: hasUpdatedPermissions ? stage.permissions : undefined,\n };\n }),\n },\n });\n\n return res;\n } catch (error) {\n // TODO: this would benefit from a utility to get a formik error\n // representation from an API error\n if (\n error.response.data?.error?.name === 'ValidationError' &&\n error.response.data?.error?.details?.errors?.length > 0\n ) {\n setInitialErrors(\n error.response.data?.error?.details?.errors.reduce((acc, error) => {\n set(acc, error.path, error.message);\n\n return acc;\n }, {})\n );\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n\n return null;\n }\n };\n\n const submitForm = async () => {\n await updateWorkflow(currentWorkflow);\n await refetch();\n\n setSavePrompts({});\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes.some((contentType) =>\n contentTypesFromOtherWorkflows.includes(contentType)\n );\n\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n } else if (hasDeletedServerStages || isContentTypeReassignment) {\n if (hasDeletedServerStages) {\n setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));\n }\n\n if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n }\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n const limits = getFeature('review-workflows');\n\n React.useEffect(() => {\n if (!isLoadingWorkflow) {\n dispatch(setWorkflow({ workflow }));\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingWorkflow || isLoadingContentTypes || isLoadingRoles));\n\n // reset the state to the initial state to avoid flashes if a user\n // navigates from an edit-view to a create-view\n return () => {\n dispatch(resetWorkflow());\n };\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingWorkflow,\n isLoadingRoles,\n serverRoles,\n singleTypes,\n workflow,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('workflow');\n } else if (\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n currentWorkflow.stages.length >\n parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [\n currentWorkflow.stages.length,\n isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta?.workflowCount,\n meta.workflowsTotal,\n ]);\n\n React.useEffect(() => {\n if (!isLoading && roles.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n // TODO: redirect back to list-view if workflow is not found?\n\n return (\n <>\n <Layout.DragLayerRendered />\n\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n canUpdate && (\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n // if the confirm dialog is open the loading state is on\n // the confirm button already\n loading={!Object.keys(savePrompts).length > 0 && isLoadingMutation}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n subtitle={\n !isLoading &&\n formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow.stages.length }\n )\n }\n title={currentWorkflow.name}\n />\n\n <Layout.Root>\n {isLoading ? (\n <Flex justifyContent=\"center\">\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n </Flex>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes canUpdate={canUpdate} />\n <Stages\n canDelete={canDelete}\n canUpdate={canUpdate}\n stages={formik.values?.stages}\n />\n </Flex>\n )}\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasDeletedServerStages && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.stages.body',\n defaultMessage:\n 'All entries assigned to deleted stages will be moved to the previous stage.',\n })}\n </Typography>\n )}\n\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows.filter((contentType) =>\n currentWorkflow.contentTypes.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'stage'}\n onClose={() => setShowLimitModal(false)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.edit.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n}\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../../../../../admin/src/selectors';\n\nimport { ReviewWorkflowsEditView } from './EditView';\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings['review-workflows'].main}>\n <ReviewWorkflowsEditView />\n </CheckPagePermissions>\n );\n}\n"],"names":["useParams","useSelector","selectAdminPermissions","useIntl","useDispatch","useFetchClient","useAPIErrorHandler","useNotification","useReviewWorkflows","useContentTypes","selectServerState","selectIsWorkflowDirty","selectCurrentWorkflow","selectHasDeletedServerStages","selectRoles","selectIsLoading","useRBAC","React","useLicenseLimits","useAdminRoles","workflow","useMutation","serverStage","error","set","formik","useFormik","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","setWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","resetWorkflow","jsxs","Fragment","jsx","Layout.DragLayerRendered","FormikProvider","Form","Layout.Header","Layout.Back","Button","Check","Layout.Root","Flex","Loader","WorkflowAttributes","Stages","ConfirmDialog","Typography","LimitsModal.Root","LimitsModal.Title","LimitsModal.Body","CheckPagePermissions"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { CheckPagePermissions } from "@strapi/helper-plugin";
|
|
3
3
|
import { useSelector } from "react-redux";
|
|
4
|
-
import { s as selectAdminPermissions } from "./AuthenticatedApp-
|
|
5
|
-
import { E as EditView } from "./index-
|
|
4
|
+
import { s as selectAdminPermissions } from "./AuthenticatedApp-722b2e84.mjs";
|
|
5
|
+
import { E as EditView } from "./index-24c2627d.mjs";
|
|
6
6
|
import "react";
|
|
7
7
|
import "react-query";
|
|
8
8
|
import "semver/functions/lt";
|
|
9
9
|
import "semver/functions/valid";
|
|
10
|
-
import "./index-
|
|
10
|
+
import "./index-3c67c00b.mjs";
|
|
11
11
|
import "react-dom/client";
|
|
12
12
|
import "@strapi/design-system";
|
|
13
13
|
import "invariant";
|
|
@@ -44,4 +44,4 @@ const ProtectedCreateView = () => {
|
|
|
44
44
|
export {
|
|
45
45
|
ProtectedCreateView as default
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=index-
|
|
47
|
+
//# sourceMappingURL=index-cea88049.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-cea88049.mjs","sources":["../../admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js"],"sourcesContent":["import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport EditView from '../EditView';\n\nconst ProtectedCreateView = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.webhooks.create}>\n <EditView />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedCreateView;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,sBAAsB,MAAM;AAC1B,QAAA,cAAc,YAAY,sBAAsB;AAGpD,SAAA,oBAAC,wBAAqB,aAAa,YAAY,SAAS,SAAS,QAC/D,UAAC,oBAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;"}
|