@strapi/admin 4.15.1 → 4.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{AuthenticatedApp-092ef2be.js → AuthenticatedApp-d1e28164.js} +30 -30
- package/dist/_chunks/{AuthenticatedApp-092ef2be.js.map → AuthenticatedApp-d1e28164.js.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs → AuthenticatedApp-fd7e406d.mjs} +30 -30
- package/dist/_chunks/{AuthenticatedApp-b0ada7e9.mjs.map → AuthenticatedApp-fd7e406d.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-5798ba6f.mjs → HomePage-2a7f678a.mjs} +7 -8
- package/dist/_chunks/{HomePage-5798ba6f.mjs.map → HomePage-2a7f678a.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-5ae473e6.js → HomePage-2ac5c213.js} +7 -8
- package/dist/_chunks/{HomePage-5ae473e6.js.map → HomePage-2ac5c213.js.map} +1 -1
- package/dist/_chunks/{HomePage-bdcb51be.js → HomePage-616a2985.js} +12 -13
- package/dist/_chunks/HomePage-616a2985.js.map +1 -0
- package/dist/_chunks/{HomePage-a3cc32d2.mjs → HomePage-ded37c60.mjs} +12 -13
- package/dist/_chunks/HomePage-ded37c60.mjs.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js → InstalledPluginsPage-189010c1.js} +10 -12
- package/dist/_chunks/{InstalledPluginsPage-cc2d6a36.js.map → InstalledPluginsPage-189010c1.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs → InstalledPluginsPage-afa9edc3.mjs} +10 -12
- package/dist/_chunks/{InstalledPluginsPage-6284aaff.mjs.map → InstalledPluginsPage-afa9edc3.mjs.map} +1 -1
- package/dist/_chunks/{index-305a03f4.mjs → Login-02ddabf7.mjs} +25 -29
- package/dist/_chunks/Login-02ddabf7.mjs.map +1 -0
- package/dist/_chunks/{index-137490ba.js → Login-28127829.js} +25 -30
- package/dist/_chunks/Login-28127829.js.map +1 -0
- package/dist/_chunks/{MarketplacePage-7dee72f5.mjs → MarketplacePage-40f76f3d.mjs} +6 -8
- package/dist/_chunks/{MarketplacePage-7dee72f5.mjs.map → MarketplacePage-40f76f3d.mjs.map} +1 -1
- package/dist/_chunks/{MarketplacePage-209ec658.js → MarketplacePage-946134e6.js} +6 -8
- package/dist/_chunks/{MarketplacePage-209ec658.js.map → MarketplacePage-946134e6.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-26c14ba4.mjs → ProfilePage-4c94e332.mjs} +7 -9
- package/dist/_chunks/{ProfilePage-26c14ba4.mjs.map → ProfilePage-4c94e332.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-4f8c127b.js → ProfilePage-6506e401.js} +7 -9
- package/dist/_chunks/{ProfilePage-4f8c127b.js.map → ProfilePage-6506e401.js.map} +1 -1
- package/dist/_chunks/{SSOProviders-1d062c95.mjs → SSOProviders-62bfad92.mjs} +29 -61
- package/dist/_chunks/SSOProviders-62bfad92.mjs.map +1 -0
- package/dist/_chunks/{SSOProviders-1ef0a89e.js → SSOProviders-b395a4e6.js} +28 -80
- package/dist/_chunks/SSOProviders-b395a4e6.js.map +1 -0
- package/dist/_chunks/{build-f36bfc97.js → build-55ba3e68.js} +4 -2
- package/dist/_chunks/{build-f36bfc97.js.map → build-55ba3e68.js.map} +1 -1
- package/dist/_chunks/{build-e1ca35da.mjs → build-b67ecc59.mjs} +4 -2
- package/dist/_chunks/{build-e1ca35da.mjs.map → build-b67ecc59.mjs.map} +1 -1
- package/dist/_chunks/{constants-70e05152.js → constants-42f4f7b3.js} +6 -6
- package/dist/_chunks/{constants-70e05152.js.map → constants-42f4f7b3.js.map} +1 -1
- package/dist/_chunks/{constants-921eda17.mjs → constants-6ecddc43.mjs} +43 -15
- package/dist/_chunks/constants-6ecddc43.mjs.map +1 -0
- package/dist/_chunks/{constants-727a113c.js → constants-733b0568.js} +26 -26
- package/dist/_chunks/constants-733b0568.js.map +1 -0
- package/dist/_chunks/{constants-86aa3e70.js → constants-7596f6f3.js} +60 -13
- package/dist/_chunks/constants-7596f6f3.js.map +1 -0
- package/dist/_chunks/{constants-32975b2e.js → constants-82e97fee.js} +11 -12
- package/dist/_chunks/{constants-32975b2e.js.map → constants-82e97fee.js.map} +1 -1
- package/dist/_chunks/{constants-90c20a6f.mjs → constants-952c50be.mjs} +11 -12
- package/dist/_chunks/{constants-90c20a6f.mjs.map → constants-952c50be.mjs.map} +1 -1
- package/dist/_chunks/{constants-9de7641c.mjs → constants-c0280aed.mjs} +28 -28
- package/dist/_chunks/constants-c0280aed.mjs.map +1 -0
- package/dist/_chunks/{constants-a773ff9b.js → constants-c9fce26f.js} +13 -12
- package/dist/_chunks/{constants-a773ff9b.js.map → constants-c9fce26f.js.map} +1 -1
- package/dist/_chunks/{constants-6157f648.mjs → constants-cbadfd36.mjs} +6 -6
- package/dist/_chunks/{constants-6157f648.mjs.map → constants-cbadfd36.mjs.map} +1 -1
- package/dist/_chunks/{constants-27319180.mjs → constants-cd1acf1b.mjs} +13 -12
- package/dist/_chunks/{constants-27319180.mjs.map → constants-cd1acf1b.mjs.map} +1 -1
- package/dist/_chunks/{develop-513c9644.js → develop-69e28e61.js} +4 -2
- package/dist/_chunks/{develop-513c9644.js.map → develop-69e28e61.js.map} +1 -1
- package/dist/_chunks/{develop-e45b460e.mjs → develop-d97e7494.mjs} +4 -2
- package/dist/_chunks/{develop-e45b460e.mjs.map → develop-d97e7494.mjs.map} +1 -1
- package/dist/_chunks/formatAPIErrors-b599cf27.js +20 -0
- package/dist/_chunks/formatAPIErrors-b599cf27.js.map +1 -0
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs +21 -0
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs.map +1 -0
- package/dist/_chunks/{index-af69bc98.mjs → index-01dfec54.mjs} +11 -11
- package/dist/_chunks/{index-af69bc98.mjs.map → index-01dfec54.mjs.map} +1 -1
- package/dist/_chunks/{index-fcd5bc14.mjs → index-0ed0c104.mjs} +14 -13
- package/dist/_chunks/{index-fcd5bc14.mjs.map → index-0ed0c104.mjs.map} +1 -1
- package/dist/_chunks/{index-1f1e2465.js → index-13a78498.js} +9 -11
- package/dist/_chunks/{index-1f1e2465.js.map → index-13a78498.js.map} +1 -1
- package/dist/_chunks/{index-6b9e3d60.js → index-150ec200.js} +9 -10
- package/dist/_chunks/{index-6b9e3d60.js.map → index-150ec200.js.map} +1 -1
- package/dist/_chunks/{index-b2257157.js → index-17acbe23.js} +49 -12
- package/dist/_chunks/index-17acbe23.js.map +1 -0
- package/dist/_chunks/{index-f5342ea5.js → index-17fbff58.js} +14 -13
- package/dist/_chunks/{index-f5342ea5.js.map → index-17fbff58.js.map} +1 -1
- package/dist/_chunks/{index-bb8093ea.mjs → index-18155022.mjs} +12 -12
- package/dist/_chunks/{index-bb8093ea.mjs.map → index-18155022.mjs.map} +1 -1
- package/dist/_chunks/{index-e22d1a84.mjs → index-22993544.mjs} +14 -13
- package/dist/_chunks/{index-e22d1a84.mjs.map → index-22993544.mjs.map} +1 -1
- package/dist/_chunks/{index-16030b74.js → index-2f4b78ee.js} +3 -3
- package/dist/_chunks/index-2f4b78ee.js.map +1 -0
- package/dist/_chunks/{index-35e4bad6.mjs → index-30933e3e.mjs} +8 -9
- package/dist/_chunks/{index-35e4bad6.mjs.map → index-30933e3e.mjs.map} +1 -1
- package/dist/_chunks/{index-928b18d2.mjs → index-31227291.mjs} +3 -3
- package/dist/_chunks/{index-928b18d2.mjs.map → index-31227291.mjs.map} +1 -1
- package/dist/_chunks/{index-24189ec9.js → index-3b888524.js} +6 -6
- package/dist/_chunks/{index-24189ec9.js.map → index-3b888524.js.map} +1 -1
- package/dist/_chunks/{index-5752584c.mjs → index-44360544.mjs} +182 -76
- package/dist/_chunks/index-44360544.mjs.map +1 -0
- package/dist/_chunks/{index-be2ca313.mjs → index-45ae7be1.mjs} +13 -13
- package/dist/_chunks/{index-be2ca313.mjs.map → index-45ae7be1.mjs.map} +1 -1
- package/dist/_chunks/{index-62b4b3fc.js → index-470a72bf.js} +11 -11
- package/dist/_chunks/{index-62b4b3fc.js.map → index-470a72bf.js.map} +1 -1
- package/dist/_chunks/{index-00202c8a.mjs → index-4a46c368.mjs} +13 -12
- package/dist/_chunks/{index-00202c8a.mjs.map → index-4a46c368.mjs.map} +1 -1
- package/dist/_chunks/{index-332f319e.mjs → index-52b70b56.mjs} +8 -10
- package/dist/_chunks/{index-332f319e.mjs.map → index-52b70b56.mjs.map} +1 -1
- package/dist/_chunks/{index-5ad8482b.mjs → index-55f9b6b3.mjs} +7 -7
- package/dist/_chunks/{index-5ad8482b.mjs.map → index-55f9b6b3.mjs.map} +1 -1
- package/dist/_chunks/{index-6cc54f3b.mjs → index-59e31a9f.mjs} +8 -9
- package/dist/_chunks/{index-6cc54f3b.mjs.map → index-59e31a9f.mjs.map} +1 -1
- package/dist/_chunks/{index-1e973c03.mjs → index-5df8a59e.mjs} +14 -13
- package/dist/_chunks/{index-1e973c03.mjs.map → index-5df8a59e.mjs.map} +1 -1
- package/dist/_chunks/{index-34de382e.mjs → index-60a57d31.mjs} +688 -824
- package/dist/_chunks/index-60a57d31.mjs.map +1 -0
- package/dist/_chunks/{index-77e0e5d7.js → index-62264743.js} +8 -7
- package/dist/_chunks/{index-77e0e5d7.js.map → index-62264743.js.map} +1 -1
- package/dist/_chunks/{index-4565fcbd.js → index-6931e33c.js} +3 -3
- package/dist/_chunks/{index-4565fcbd.js.map → index-6931e33c.js.map} +1 -1
- package/dist/_chunks/{index-3c58de6f.js → index-748f8264.js} +14 -13
- package/dist/_chunks/{index-3c58de6f.js.map → index-748f8264.js.map} +1 -1
- package/dist/_chunks/{index-bdfc1149.mjs → index-768b7de9.mjs} +49 -12
- package/dist/_chunks/index-768b7de9.mjs.map +1 -0
- package/dist/_chunks/{index-1763a04f.js → index-7739ddf5.js} +8 -9
- package/dist/_chunks/{index-1763a04f.js.map → index-7739ddf5.js.map} +1 -1
- package/dist/_chunks/{index-89d27faa.js → index-794eb0b6.js} +14 -13
- package/dist/_chunks/{index-89d27faa.js.map → index-794eb0b6.js.map} +1 -1
- package/dist/_chunks/{index-f448aed2.js → index-7e9cd960.js} +13 -12
- package/dist/_chunks/{index-f448aed2.js.map → index-7e9cd960.js.map} +1 -1
- package/dist/_chunks/{index-0af587c3.js → index-7f642760.js} +78 -147
- package/dist/_chunks/index-7f642760.js.map +1 -0
- package/dist/_chunks/{index-56ced4ab.mjs → index-853bd239.mjs} +8 -7
- package/dist/_chunks/{index-56ced4ab.mjs.map → index-853bd239.mjs.map} +1 -1
- package/dist/_chunks/{index-b98ea3ce.mjs → index-8a4d0275.mjs} +13 -14
- package/dist/_chunks/{index-b98ea3ce.mjs.map → index-8a4d0275.mjs.map} +1 -1
- package/dist/_chunks/{index-6dbc94a9.mjs → index-9c45bda7.mjs} +6 -6
- package/dist/_chunks/{index-6dbc94a9.mjs.map → index-9c45bda7.mjs.map} +1 -1
- package/dist/_chunks/{index-4c5acc70.js → index-9eb160a3.js} +9 -10
- package/dist/_chunks/{index-4c5acc70.js.map → index-9eb160a3.js.map} +1 -1
- package/dist/_chunks/{index-51a15b27.js → index-9f155b14.js} +4 -4
- package/dist/_chunks/{index-51a15b27.js.map → index-9f155b14.js.map} +1 -1
- package/dist/_chunks/{index-066ee02e.js → index-9f50c8b0.js} +8 -10
- package/dist/_chunks/{index-066ee02e.js.map → index-9f50c8b0.js.map} +1 -1
- package/dist/_chunks/{index-284c5926.js → index-9f900c47.js} +33 -47
- package/dist/_chunks/index-9f900c47.js.map +1 -0
- package/dist/_chunks/{index-5d8d89a7.js → index-a163001f.js} +13 -13
- package/dist/_chunks/{index-5d8d89a7.js.map → index-a163001f.js.map} +1 -1
- package/dist/_chunks/{index-34a2909e.mjs → index-a3176d19.mjs} +12 -12
- package/dist/_chunks/{index-34a2909e.mjs.map → index-a3176d19.mjs.map} +1 -1
- package/dist/_chunks/{index-ea23ee9f.mjs → index-a7d28c42.mjs} +9 -11
- package/dist/_chunks/{index-ea23ee9f.mjs.map → index-a7d28c42.mjs.map} +1 -1
- package/dist/_chunks/{index-a4348f3b.js → index-a8358156.js} +12 -12
- package/dist/_chunks/index-a8358156.js.map +1 -0
- package/dist/_chunks/{index-58db145d.mjs → index-a8d13f01.mjs} +3 -3
- package/dist/_chunks/{index-58db145d.mjs.map → index-a8d13f01.mjs.map} +1 -1
- package/dist/_chunks/{index-59d22949.mjs → index-b4cc14ad.mjs} +8 -9
- package/dist/_chunks/{index-59d22949.mjs.map → index-b4cc14ad.mjs.map} +1 -1
- package/dist/_chunks/{index-6a512cec.js → index-bad666f0.js} +8 -9
- package/dist/_chunks/{index-6a512cec.js.map → index-bad666f0.js.map} +1 -1
- package/dist/_chunks/{index-53ba81f9.mjs → index-bf788868.mjs} +9 -10
- package/dist/_chunks/{index-53ba81f9.mjs.map → index-bf788868.mjs.map} +1 -1
- package/dist/_chunks/{index-da04b144.js → index-bfb5b3ab.js} +14 -13
- package/dist/_chunks/{index-da04b144.js.map → index-bfb5b3ab.js.map} +1 -1
- package/dist/_chunks/{index-cadd3ee0.js → index-c0603138.js} +4 -4
- package/dist/_chunks/{index-cadd3ee0.js.map → index-c0603138.js.map} +1 -1
- package/dist/_chunks/{index-c604806d.js → index-c3761887.js} +12 -12
- package/dist/_chunks/{index-c604806d.js.map → index-c3761887.js.map} +1 -1
- package/dist/_chunks/{index-1da8c640.mjs → index-c4d3a07b.mjs} +9 -10
- package/dist/_chunks/{index-1da8c640.mjs.map → index-c4d3a07b.mjs.map} +1 -1
- package/dist/_chunks/{index-36e0d449.mjs → index-c7386be1.mjs} +32 -45
- package/dist/_chunks/index-c7386be1.mjs.map +1 -0
- package/dist/_chunks/{index-8d4d361d.mjs → index-cc7bedec.mjs} +13 -13
- package/dist/_chunks/{index-8d4d361d.mjs.map → index-cc7bedec.mjs.map} +1 -1
- package/dist/_chunks/{index-86dfbe3a.js → index-cce8ecb6.js} +178 -72
- package/dist/_chunks/index-cce8ecb6.js.map +1 -0
- package/dist/_chunks/{index-acd6d64f.js → index-cdadc366.js} +8 -7
- package/dist/_chunks/{index-acd6d64f.js.map → index-cdadc366.js.map} +1 -1
- package/dist/_chunks/{index-48322669.mjs → index-d81f74c4.mjs} +3 -3
- package/dist/_chunks/index-d81f74c4.mjs.map +1 -0
- package/dist/_chunks/{index-b81f7273.mjs → index-d93367d2.mjs} +78 -147
- package/dist/_chunks/index-d93367d2.mjs.map +1 -0
- package/dist/_chunks/{index-85069cac.mjs → index-dace55d9.mjs} +9 -10
- package/dist/_chunks/{index-85069cac.mjs.map → index-dace55d9.mjs.map} +1 -1
- package/dist/_chunks/{index-f179c7ea.js → index-db37fbe6.js} +13 -13
- package/dist/_chunks/{index-f179c7ea.js.map → index-db37fbe6.js.map} +1 -1
- package/dist/_chunks/{index-d1620260.js → index-dcb2c919.js} +13 -14
- package/dist/_chunks/{index-d1620260.js.map → index-dcb2c919.js.map} +1 -1
- package/dist/_chunks/{index-52b5db8a.js → index-dd3259f3.js} +8 -9
- package/dist/_chunks/{index-52b5db8a.js.map → index-dd3259f3.js.map} +1 -1
- package/dist/_chunks/{index-7d40adea.mjs → index-df42dfec.mjs} +8 -7
- package/dist/_chunks/{index-7d40adea.mjs.map → index-df42dfec.mjs.map} +1 -1
- package/dist/_chunks/{index-edc9bb0b.js → index-e2663a88.js} +673 -811
- package/dist/_chunks/index-e2663a88.js.map +1 -0
- package/dist/_chunks/{index-7aed99db.js → index-e2c5346d.js} +12 -12
- package/dist/_chunks/{index-7aed99db.js.map → index-e2c5346d.js.map} +1 -1
- package/dist/_chunks/{index-e414353b.js → index-e7381e58.js} +8 -8
- package/dist/_chunks/{index-e414353b.js.map → index-e7381e58.js.map} +1 -1
- package/dist/_chunks/{index-73ba6bdd.mjs → index-e8eff6c5.mjs} +3 -3
- package/dist/_chunks/{index-73ba6bdd.mjs.map → index-e8eff6c5.mjs.map} +1 -1
- package/dist/_chunks/{index-370a4ee8.mjs → index-f69d3930.mjs} +12 -12
- package/dist/_chunks/index-f69d3930.mjs.map +1 -0
- package/dist/_chunks/{index-8ea5a488.js → index-f9e95b10.js} +9 -10
- package/dist/_chunks/{index-8ea5a488.js.map → index-f9e95b10.js.map} +1 -1
- package/dist/_chunks/{index-1b7e986c.mjs → index-fe29b1fd.mjs} +14 -13
- package/dist/_chunks/{index-1b7e986c.mjs.map → index-fe29b1fd.mjs.map} +1 -1
- package/dist/_chunks/{schema-f49c76d7.js → schema-8eebfdf9.js} +2 -2
- package/dist/_chunks/{schema-f49c76d7.js.map → schema-8eebfdf9.js.map} +1 -1
- package/dist/_chunks/{schema-a95f2514.mjs → schema-ac25a47b.mjs} +2 -2
- package/dist/_chunks/{schema-a95f2514.mjs.map → schema-ac25a47b.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-d051b610.mjs → validateWorkflow-2511dc85.mjs} +3 -3
- package/dist/_chunks/{validateWorkflow-d051b610.mjs.map → validateWorkflow-2511dc85.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-e66d7d2e.js → validateWorkflow-c0f3148d.js} +3 -3
- package/dist/_chunks/{validateWorkflow-e66d7d2e.js.map → validateWorkflow-c0f3148d.js.map} +1 -1
- package/dist/admin/index.js +9 -10
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +9 -10
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/contexts/admin.d.ts +2 -2
- package/dist/admin/src/hooks/__mocks__/useSettingsMenu.d.ts +2 -0
- package/dist/admin/src/hooks/useEnterprise.d.ts +6 -4
- package/dist/admin/src/hooks/useSettingsMenu.d.ts +24 -0
- package/dist/admin/src/pages/Auth/AuthPage.d.ts +6 -0
- package/dist/admin/src/pages/Auth/components/FieldActionWrapper.d.ts +3 -0
- package/dist/admin/src/pages/Auth/components/ForgotPassword.d.ts +3 -0
- package/dist/admin/src/pages/Auth/components/ForgotPasswordSuccess.d.ts +2 -0
- package/dist/admin/src/pages/Auth/components/Login.d.ts +8 -0
- package/dist/admin/src/pages/Auth/components/Oops.d.ts +2 -0
- package/dist/admin/src/pages/Auth/components/Register.d.ts +7 -0
- package/dist/admin/src/pages/Auth/components/ResetPassword.d.ts +3 -0
- package/dist/admin/src/pages/Auth/constants.d.ts +14 -0
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
- package/dist/admin/src/types/permissions.d.ts +10 -0
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +3 -1
- package/dist/cli.mjs.map +1 -1
- package/dist/ee/admin/src/constants.d.ts +3 -1
- package/dist/ee/admin/src/pages/AuthPage/components/Login.d.ts +3 -0
- package/dist/ee/admin/src/pages/AuthPage/components/Providers.d.ts +2 -0
- package/dist/ee/admin/src/pages/AuthPage/components/SSOProviders.d.ts +8 -0
- package/dist/ee/admin/src/pages/AuthPage/constants.d.ts +3 -0
- package/dist/ee/admin/src/pages/AuthResponse.d.ts +2 -0
- package/dist/ee/admin/src/pages/HomePage.d.ts +1 -1
- package/dist/shared/contracts/authentication.d.ts +126 -0
- package/dist/shared/contracts/providers.d.ts +18 -0
- package/package.json +21 -21
- package/dist/_chunks/HomePage-a3cc32d2.mjs.map +0 -1
- package/dist/_chunks/HomePage-bdcb51be.js.map +0 -1
- package/dist/_chunks/SSOProviders-1d062c95.mjs.map +0 -1
- package/dist/_chunks/SSOProviders-1ef0a89e.js.map +0 -1
- package/dist/_chunks/constants-12dfb222.mjs +0 -34
- package/dist/_chunks/constants-12dfb222.mjs.map +0 -1
- package/dist/_chunks/constants-1aea1185.js +0 -34
- package/dist/_chunks/constants-1aea1185.js.map +0 -1
- package/dist/_chunks/constants-727a113c.js.map +0 -1
- package/dist/_chunks/constants-86aa3e70.js.map +0 -1
- package/dist/_chunks/constants-921eda17.mjs.map +0 -1
- package/dist/_chunks/constants-9de7641c.mjs.map +0 -1
- package/dist/_chunks/index-0af587c3.js.map +0 -1
- package/dist/_chunks/index-137490ba.js.map +0 -1
- package/dist/_chunks/index-16030b74.js.map +0 -1
- package/dist/_chunks/index-284c5926.js.map +0 -1
- package/dist/_chunks/index-305a03f4.mjs.map +0 -1
- package/dist/_chunks/index-34de382e.mjs.map +0 -1
- package/dist/_chunks/index-36e0d449.mjs.map +0 -1
- package/dist/_chunks/index-370a4ee8.mjs.map +0 -1
- package/dist/_chunks/index-48322669.mjs.map +0 -1
- package/dist/_chunks/index-5752584c.mjs.map +0 -1
- package/dist/_chunks/index-86dfbe3a.js.map +0 -1
- package/dist/_chunks/index-a4348f3b.js.map +0 -1
- package/dist/_chunks/index-b2257157.js.map +0 -1
- package/dist/_chunks/index-b81f7273.mjs.map +0 -1
- package/dist/_chunks/index-bdfc1149.mjs.map +0 -1
- package/dist/_chunks/index-edc9bb0b.js.map +0 -1
|
@@ -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-d1e28164.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-c0f3148d.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-e2663a88.js");
|
|
26
26
|
require("react-dom/client");
|
|
27
27
|
require("invariant");
|
|
28
28
|
require("lodash/isFunction");
|
|
@@ -30,22 +30,22 @@ require("lodash/merge");
|
|
|
30
30
|
require("lodash/pick");
|
|
31
31
|
require("react-helmet");
|
|
32
32
|
require("@radix-ui/react-context");
|
|
33
|
-
require("
|
|
33
|
+
require("@strapi/design-system/v2");
|
|
34
34
|
require("lodash/camelCase");
|
|
35
|
-
require("lodash/get");
|
|
36
|
-
require("lodash/omit");
|
|
37
|
-
require("prop-types");
|
|
38
|
-
require("lodash/defaultsDeep");
|
|
39
35
|
require("styled-components");
|
|
40
36
|
require("yup");
|
|
41
|
-
require("
|
|
37
|
+
require("lodash/defaultsDeep");
|
|
38
|
+
require("lodash/omit");
|
|
42
39
|
require("qs");
|
|
40
|
+
require("immer");
|
|
41
|
+
require("lodash/get");
|
|
43
42
|
require("@reduxjs/toolkit");
|
|
44
43
|
require("react-dnd");
|
|
45
44
|
require("react-dnd-html5-backend");
|
|
46
|
-
require("@strapi/design-system/v2");
|
|
47
45
|
require("lodash/cloneDeep");
|
|
48
|
-
require("
|
|
46
|
+
require("axios");
|
|
47
|
+
require("prop-types");
|
|
48
|
+
require("./schema-8eebfdf9.js");
|
|
49
49
|
require("lodash/isBoolean");
|
|
50
50
|
require("lodash/isEmpty");
|
|
51
51
|
require("lodash/isNaN");
|
|
@@ -332,4 +332,4 @@ function index() {
|
|
|
332
332
|
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings["review-workflows"].create, children: /* @__PURE__ */ jsxRuntime.jsx(ReviewWorkflowsCreateView, {}) });
|
|
333
333
|
}
|
|
334
334
|
exports.default = index;
|
|
335
|
-
//# sourceMappingURL=index-
|
|
335
|
+
//# sourceMappingURL=index-c3761887.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-c604806d.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/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} 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 { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } 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 { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\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_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from '../../constants';\nimport { useReviewWorkflows } from '../../hooks/useReviewWorkflows';\nimport { reducer } from '../../reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from '../../selectors';\nimport { validateWorkflow } from '../../utils/validateWorkflow';\n\nexport function ReviewWorkflowsCreateView() {\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n const { push } = useHistory();\n const { formatAPIError } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined, {\n retry: false,\n });\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState(false);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState(null);\n const [savePrompts, setSavePrompts] = React.useState({});\n\n const limits = getFeature('review-workflows');\n const contentTypesFromOtherWorkflows = workflows.flatMap((workflow) => workflow.contentTypes);\n\n const { mutateAsync, isLoading: isLoadingMutation } = useMutation(\n async ({ workflow }) => {\n const {\n data: { data },\n } = await post(`/admin/review-workflows/workflows`, {\n data: workflow,\n });\n\n return data;\n },\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n },\n }\n );\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const workflow = await mutateAsync({ workflow: currentWorkflow });\n\n push(`/settings/review-workflows/${workflow.id}`);\n\n return workflow;\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 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 /**\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\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount >= parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\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 (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow) {\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(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\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?.workflowsTotal >= 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 isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta?.workflowsTotal,\n currentWorkflow.stages.length,\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 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 <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n isLoading={isLoadingMutation}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\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.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.create.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.create.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.create.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.create.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 { ReviewWorkflowsCreateView } from './CreateView';\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings['review-workflows'].create}>\n <ReviewWorkflowsCreateView />\n </CheckPagePermissions>\n );\n}\n"],"names":["useIntl","useFetchClient","useHistory","useAPIErrorHandler","useDispatch","useNotification","useContentTypes","useReviewWorkflows","useAdminRoles","useSelector","selectIsLoading","selectIsWorkflowDirty","selectCurrentWorkflow","selectRoles","React","useLicenseLimits","useMutation","error","set","formik","useFormik","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","resetWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","addStage","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","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-c3761887.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js","../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/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} 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 { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } 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 { useLicenseLimits } from '../../../../../../hooks/useLicenseLimits';\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\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_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from '../../constants';\nimport { useReviewWorkflows } from '../../hooks/useReviewWorkflows';\nimport { reducer } from '../../reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from '../../selectors';\nimport { validateWorkflow } from '../../utils/validateWorkflow';\n\nexport function ReviewWorkflowsCreateView() {\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n const { push } = useHistory();\n const { formatAPIError } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles(undefined, {\n retry: false,\n });\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState(false);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState(null);\n const [savePrompts, setSavePrompts] = React.useState({});\n\n const limits = getFeature('review-workflows');\n const contentTypesFromOtherWorkflows = workflows.flatMap((workflow) => workflow.contentTypes);\n\n const { mutateAsync, isLoading: isLoadingMutation } = useMutation(\n async ({ workflow }) => {\n const {\n data: { data },\n } = await post(`/admin/review-workflows/workflows`, {\n data: workflow,\n });\n\n return data;\n },\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n },\n }\n );\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const workflow = await mutateAsync({ workflow: currentWorkflow });\n\n push(`/settings/review-workflows/${workflow.id}`);\n\n return workflow;\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 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 /**\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\n if (\n limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&\n meta?.workflowCount >= parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)\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 (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow) {\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(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\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?.workflowsTotal >= 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 isLicenseLoading,\n isLoadingWorkflow,\n limits,\n meta?.workflowsTotal,\n currentWorkflow.stages.length,\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 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 <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n isLoading={isLoadingMutation}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\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.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.create.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.create.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.create.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.create.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 { ReviewWorkflowsCreateView } from './CreateView';\n\nexport default function () {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings['review-workflows'].create}>\n <ReviewWorkflowsCreateView />\n </CheckPagePermissions>\n );\n}\n"],"names":["useIntl","useFetchClient","useHistory","useAPIErrorHandler","useDispatch","useNotification","useContentTypes","useReviewWorkflows","useAdminRoles","useSelector","selectIsLoading","selectIsWorkflowDirty","selectCurrentWorkflow","selectRoles","React","useLicenseLimits","useMutation","error","set","formik","useFormik","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","resetWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","addStage","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","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { onRowClick, pxToRem, stopPropagation, useFocusWhenNavigate, useQueryParams, useRBAC, LoadingIndicatorPage, SettingsPageTitle, SearchURLQuery, ConfirmDialog, useAPIErrorHandler, useNotification, getFetchClient, CheckPagePermissions } from "@strapi/helper-plugin";
|
|
3
3
|
import { useSelector } from "react-redux";
|
|
4
|
-
import { s as selectAdminPermissions } from "./AuthenticatedApp-
|
|
4
|
+
import { s as selectAdminPermissions } from "./AuthenticatedApp-fd7e406d.mjs";
|
|
5
5
|
import { useState, useReducer, useCallback } from "react";
|
|
6
6
|
import { Tr, Td, Typography, Flex, Box, IconButton, Main, HeaderLayout, Button, ActionLayout, ContentLayout, Table, TFooter, Thead, Th, VisuallyHidden, Tbody } from "@strapi/design-system";
|
|
7
7
|
import { Plus, Duplicate, Pencil, Trash } from "@strapi/icons";
|
|
@@ -13,7 +13,7 @@ import produce from "immer";
|
|
|
13
13
|
import "react-query";
|
|
14
14
|
import "semver/functions/lt";
|
|
15
15
|
import "semver/functions/valid";
|
|
16
|
-
import "./index-
|
|
16
|
+
import "./index-60a57d31.mjs";
|
|
17
17
|
import "react-dom/client";
|
|
18
18
|
import "invariant";
|
|
19
19
|
import "lodash/isFunction";
|
|
@@ -21,20 +21,19 @@ import "lodash/merge";
|
|
|
21
21
|
import "lodash/pick";
|
|
22
22
|
import "react-helmet";
|
|
23
23
|
import "@radix-ui/react-context";
|
|
24
|
-
import "
|
|
24
|
+
import "@strapi/design-system/v2";
|
|
25
|
+
import "formik";
|
|
25
26
|
import "lodash/camelCase";
|
|
26
|
-
import "lodash/get";
|
|
27
|
-
import "lodash/omit";
|
|
28
|
-
import "lodash/defaultsDeep";
|
|
29
27
|
import "styled-components";
|
|
30
|
-
import "formik";
|
|
31
28
|
import "yup";
|
|
32
|
-
import "lodash/
|
|
29
|
+
import "lodash/defaultsDeep";
|
|
30
|
+
import "lodash/omit";
|
|
33
31
|
import "qs";
|
|
32
|
+
import "lodash/get";
|
|
33
|
+
import "lodash/set";
|
|
34
34
|
import "@reduxjs/toolkit";
|
|
35
35
|
import "react-dnd";
|
|
36
36
|
import "react-dnd-html5-backend";
|
|
37
|
-
import "@strapi/design-system/v2";
|
|
38
37
|
import "lodash/cloneDeep";
|
|
39
38
|
const EmptyRole = () => "todo empty role";
|
|
40
39
|
const RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => {
|
|
@@ -360,4 +359,4 @@ const ProtectedListPage = () => {
|
|
|
360
359
|
export {
|
|
361
360
|
ProtectedListPage as default
|
|
362
361
|
};
|
|
363
|
-
//# sourceMappingURL=index-
|
|
362
|
+
//# sourceMappingURL=index-c4d3a07b.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-1da8c640.mjs","sources":["../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/EmptyRole/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/reducer.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js"],"sourcesContent":["export default () => 'todo empty role';\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Td, Tr, Typography } from '@strapi/design-system';\nimport { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n {...(canUpdate\n ? onRowClick({\n fn: editObject.onClick,\n })\n : {})}\n >\n <Td maxWidth={pxToRem(130)}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={pxToRem(250)}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" {...stopPropagation}>\n {icons.map((icon, i) =>\n icon ? (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton onClick={icon.onClick} label={icon.label} noBorder icon={icon.icon} />\n </Box>\n ) : null\n )}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nRoleRow.propTypes = {\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n usersCount: PropTypes.number.isRequired,\n icons: PropTypes.array.isRequired,\n rowIndex: PropTypes.number.isRequired,\n canUpdate: PropTypes.bool,\n};\n\nRoleRow.defaultProps = {\n canUpdate: false,\n};\n\nexport default RoleRow;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useCallback, useReducer, useState } from 'react';\n\nimport {\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n Main,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n getFetchClient,\n LoadingIndicatorPage,\n SearchURLQuery,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../selectors';\n\nimport EmptyRole from './components/EmptyRole';\nimport BaseRoleRow from './components/RoleRow';\nimport reducer, { initialState } from './reducer';\n\nconst useRoleActions = ({ canCreate, canDelete, canUpdate, refetchRoles }) => {\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = useState(false);\n const { push } = useHistory();\n const [{ selectedRoles, showModalConfirmButtonLoading, roleToDelete }, dispatch] = useReducer(\n reducer,\n initialState\n );\n\n const { post } = getFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n handleToggleModal();\n };\n\n const onRoleDuplicate = useCallback(\n (id) => {\n push(`/settings/roles/duplicate/${id}`);\n },\n [push]\n );\n\n const handleNewRoleClick = () => push('/settings/roles/new');\n\n const onRoleRemove = useCallback((roleId) => {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: roleId,\n });\n\n handleToggleModal();\n }, []);\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleGoTo = useCallback(\n (id) => {\n push(`/settings/roles/${id}`);\n },\n [push]\n );\n\n const handleClickDelete = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: { id: 'Roles.ListPage.notification.delete-not-allowed' },\n });\n } else {\n onRoleRemove(role.id);\n }\n },\n [toggleNotification, onRoleRemove]\n );\n\n const handleClickDuplicate = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n onRoleDuplicate(role.id);\n },\n [onRoleDuplicate]\n );\n\n const getIcons = useCallback(\n (role) => [\n ...(canCreate\n ? [\n {\n onClick: (e) => handleClickDuplicate(e, role),\n label: formatMessage({ id: 'app.utils.duplicate', defaultMessage: 'Duplicate' }),\n icon: <Duplicate />,\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n onClick: () => handleGoTo(role.id),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n icon: <Pencil />,\n },\n ]\n : []),\n ...(canDelete\n ? [\n {\n onClick: (e) => handleClickDelete(e, role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n icon: <Trash />,\n },\n ]\n : []),\n ],\n [\n formatMessage,\n handleClickDelete,\n handleClickDuplicate,\n handleGoTo,\n canCreate,\n canUpdate,\n canDelete,\n ]\n );\n\n return {\n handleNewRoleClick,\n getIcons,\n selectedRoles,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n };\n};\n\nconst RoleListPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n const permissions = useSelector(selectAdminPermissions);\n const [{ query }] = useQueryParams();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings.roles);\n\n const {\n roles,\n isLoading,\n refetch: refetchRoles,\n } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n cacheTime: 0,\n enabled: !isLoadingForPermissions && canRead,\n }\n );\n\n const {\n handleNewRoleClick,\n getIcons,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n } = useRoleActions({ refetchRoles, canCreate, canDelete, canUpdate });\n\n // ! TODO - Show the search bar only if the user is allowed to read - add the search input\n // canRead\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return (\n <Main>\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n const title = formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n });\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <HeaderLayout\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={title}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n as=\"h2\"\n />\n {canRead && (\n <ActionLayout\n startActions={\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n }\n />\n )}\n {canRead && (\n <ContentLayout>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <BaseRoleRow\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={getIcons(role)}\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n {!rowCount && !isLoading && <EmptyRole />}\n </ContentLayout>\n )}\n <ConfirmDialog\n isOpen={isWarningDeleteAllOpened}\n onConfirm={handleDeleteData}\n isConfirmButtonLoading={showModalConfirmButtonLoading}\n onToggleDialog={handleToggleModal}\n />\n </Main>\n );\n};\n\nexport default RoleListPage;\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport ListPage from '../ListPage';\n\nconst ProtectedListPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.main}>\n <ListPage />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedListPage;\n"],"names":["BaseRoleRow","ListPage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-c4d3a07b.mjs","sources":["../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/EmptyRole/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/reducer.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js"],"sourcesContent":["export default () => 'todo empty role';\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Td, Tr, Typography } from '@strapi/design-system';\nimport { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n {...(canUpdate\n ? onRowClick({\n fn: editObject.onClick,\n })\n : {})}\n >\n <Td maxWidth={pxToRem(130)}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={pxToRem(250)}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" {...stopPropagation}>\n {icons.map((icon, i) =>\n icon ? (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton onClick={icon.onClick} label={icon.label} noBorder icon={icon.icon} />\n </Box>\n ) : null\n )}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nRoleRow.propTypes = {\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n usersCount: PropTypes.number.isRequired,\n icons: PropTypes.array.isRequired,\n rowIndex: PropTypes.number.isRequired,\n canUpdate: PropTypes.bool,\n};\n\nRoleRow.defaultProps = {\n canUpdate: false,\n};\n\nexport default RoleRow;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useCallback, useReducer, useState } from 'react';\n\nimport {\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n Main,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n getFetchClient,\n LoadingIndicatorPage,\n SearchURLQuery,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../selectors';\n\nimport EmptyRole from './components/EmptyRole';\nimport BaseRoleRow from './components/RoleRow';\nimport reducer, { initialState } from './reducer';\n\nconst useRoleActions = ({ canCreate, canDelete, canUpdate, refetchRoles }) => {\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = useState(false);\n const { push } = useHistory();\n const [{ selectedRoles, showModalConfirmButtonLoading, roleToDelete }, dispatch] = useReducer(\n reducer,\n initialState\n );\n\n const { post } = getFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n handleToggleModal();\n };\n\n const onRoleDuplicate = useCallback(\n (id) => {\n push(`/settings/roles/duplicate/${id}`);\n },\n [push]\n );\n\n const handleNewRoleClick = () => push('/settings/roles/new');\n\n const onRoleRemove = useCallback((roleId) => {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: roleId,\n });\n\n handleToggleModal();\n }, []);\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleGoTo = useCallback(\n (id) => {\n push(`/settings/roles/${id}`);\n },\n [push]\n );\n\n const handleClickDelete = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: { id: 'Roles.ListPage.notification.delete-not-allowed' },\n });\n } else {\n onRoleRemove(role.id);\n }\n },\n [toggleNotification, onRoleRemove]\n );\n\n const handleClickDuplicate = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n onRoleDuplicate(role.id);\n },\n [onRoleDuplicate]\n );\n\n const getIcons = useCallback(\n (role) => [\n ...(canCreate\n ? [\n {\n onClick: (e) => handleClickDuplicate(e, role),\n label: formatMessage({ id: 'app.utils.duplicate', defaultMessage: 'Duplicate' }),\n icon: <Duplicate />,\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n onClick: () => handleGoTo(role.id),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n icon: <Pencil />,\n },\n ]\n : []),\n ...(canDelete\n ? [\n {\n onClick: (e) => handleClickDelete(e, role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n icon: <Trash />,\n },\n ]\n : []),\n ],\n [\n formatMessage,\n handleClickDelete,\n handleClickDuplicate,\n handleGoTo,\n canCreate,\n canUpdate,\n canDelete,\n ]\n );\n\n return {\n handleNewRoleClick,\n getIcons,\n selectedRoles,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n };\n};\n\nconst RoleListPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n const permissions = useSelector(selectAdminPermissions);\n const [{ query }] = useQueryParams();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings.roles);\n\n const {\n roles,\n isLoading,\n refetch: refetchRoles,\n } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n cacheTime: 0,\n enabled: !isLoadingForPermissions && canRead,\n }\n );\n\n const {\n handleNewRoleClick,\n getIcons,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n } = useRoleActions({ refetchRoles, canCreate, canDelete, canUpdate });\n\n // ! TODO - Show the search bar only if the user is allowed to read - add the search input\n // canRead\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return (\n <Main>\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n const title = formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n });\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <HeaderLayout\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={title}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n as=\"h2\"\n />\n {canRead && (\n <ActionLayout\n startActions={\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n }\n />\n )}\n {canRead && (\n <ContentLayout>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <BaseRoleRow\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={getIcons(role)}\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n {!rowCount && !isLoading && <EmptyRole />}\n </ContentLayout>\n )}\n <ConfirmDialog\n isOpen={isWarningDeleteAllOpened}\n onConfirm={handleDeleteData}\n isConfirmButtonLoading={showModalConfirmButtonLoading}\n onToggleDialog={handleToggleModal}\n />\n </Main>\n );\n};\n\nexport default RoleListPage;\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport ListPage from '../ListPage';\n\nconst ProtectedListPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.main}>\n <ListPage />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedListPage;\n"],"names":["BaseRoleRow","ListPage"],"mappings":"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"}
|
|
@@ -5,18 +5,20 @@ import { Check } from "@strapi/icons";
|
|
|
5
5
|
import isEqual from "lodash/isEqual";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
7
|
import { useSelector } from "react-redux";
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
10
|
-
import
|
|
8
|
+
import { u as useAdminRoles } from "./useAdminRoles-7ab5d521.mjs";
|
|
9
|
+
import { s as selectAdminPermissions } from "./AuthenticatedApp-fd7e406d.mjs";
|
|
10
|
+
import * as React from "react";
|
|
11
11
|
import produce from "immer";
|
|
12
|
+
import omit from "lodash/omit";
|
|
12
13
|
import pick from "lodash/pick";
|
|
13
14
|
import set from "lodash/set";
|
|
14
|
-
import unset from "lodash/unset";
|
|
15
|
-
import { s as selectAdminPermissions } from "./AuthenticatedApp-b0ada7e9.mjs";
|
|
16
|
-
import "./index-b81f7273.mjs";
|
|
17
|
-
import "lodash/sortBy";
|
|
18
|
-
import { u as useAdminRoles } from "./useAdminRoles-7ab5d521.mjs";
|
|
19
15
|
import * as yup from "yup";
|
|
16
|
+
import { ValidationError } from "yup";
|
|
17
|
+
import { f as formatAPIErrors } from "./formatAPIErrors-db6ed675.mjs";
|
|
18
|
+
import "react-query";
|
|
19
|
+
import "semver/functions/lt";
|
|
20
|
+
import "semver/functions/valid";
|
|
21
|
+
import "./index-60a57d31.mjs";
|
|
20
22
|
import "react-dom/client";
|
|
21
23
|
import "invariant";
|
|
22
24
|
import "lodash/isFunction";
|
|
@@ -24,25 +26,17 @@ import "lodash/merge";
|
|
|
24
26
|
import "react-helmet";
|
|
25
27
|
import "react-router-dom";
|
|
26
28
|
import "@radix-ui/react-context";
|
|
27
|
-
import "
|
|
29
|
+
import "@strapi/design-system/v2";
|
|
30
|
+
import "formik";
|
|
28
31
|
import "lodash/camelCase";
|
|
29
|
-
import "lodash/get";
|
|
30
|
-
import "prop-types";
|
|
31
|
-
import "lodash/defaultsDeep";
|
|
32
32
|
import "styled-components";
|
|
33
|
-
import "
|
|
34
|
-
import "react-query";
|
|
33
|
+
import "lodash/defaultsDeep";
|
|
35
34
|
import "qs";
|
|
35
|
+
import "lodash/get";
|
|
36
36
|
import "@reduxjs/toolkit";
|
|
37
|
-
import "semver/functions/lt";
|
|
38
|
-
import "semver/functions/valid";
|
|
39
37
|
import "react-dnd";
|
|
40
38
|
import "react-dnd-html5-backend";
|
|
41
|
-
import "@strapi/design-system/v2";
|
|
42
39
|
import "lodash/cloneDeep";
|
|
43
|
-
const init = (initialState2, fieldsToPick) => {
|
|
44
|
-
return { ...initialState2, fieldsToPick };
|
|
45
|
-
};
|
|
46
40
|
const initialState = {
|
|
47
41
|
fieldsToPick: [],
|
|
48
42
|
formErrors: {},
|
|
@@ -67,9 +61,7 @@ const reducer = (state, action) => produce(state, (draftState) => {
|
|
|
67
61
|
break;
|
|
68
62
|
}
|
|
69
63
|
case "ON_CHANGE": {
|
|
70
|
-
if (action.
|
|
71
|
-
unset(draftState.modifiedData, action.keys.split("."));
|
|
72
|
-
} else if (action.keys.includes("username") && !action.value) {
|
|
64
|
+
if (action.keys.includes("username") && !action.value) {
|
|
73
65
|
set(draftState.modifiedData, action.keys.split("."), null);
|
|
74
66
|
} else {
|
|
75
67
|
set(draftState.modifiedData, action.keys.split("."), action.value);
|
|
@@ -100,50 +92,50 @@ const checkFormValidity = async (data, schema2) => {
|
|
|
100
92
|
try {
|
|
101
93
|
await schema2.validate(data, { abortEarly: false });
|
|
102
94
|
} catch (err) {
|
|
103
|
-
|
|
95
|
+
if (err instanceof ValidationError) {
|
|
96
|
+
errors = getYupInnerErrors(err);
|
|
97
|
+
}
|
|
104
98
|
}
|
|
105
99
|
return errors;
|
|
106
100
|
};
|
|
107
|
-
const useSettingsForm = (
|
|
101
|
+
const useSettingsForm = (schema2, cbSuccess, fieldsToPick) => {
|
|
108
102
|
const [
|
|
109
103
|
{ formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader, showHeaderLoader },
|
|
110
104
|
dispatch
|
|
111
|
-
] = useReducer(reducer,
|
|
105
|
+
] = React.useReducer(reducer, { ...initialState, fieldsToPick });
|
|
112
106
|
const toggleNotification = useNotification();
|
|
113
107
|
const { lockApp, unlockApp } = useOverlayBlocker();
|
|
114
108
|
const { get, put } = useFetchClient();
|
|
115
|
-
useEffect(() => {
|
|
109
|
+
React.useEffect(() => {
|
|
116
110
|
const getData = async () => {
|
|
117
111
|
try {
|
|
118
112
|
const {
|
|
119
113
|
data: { data }
|
|
120
|
-
} = await get(
|
|
114
|
+
} = await get("/admin/providers/options");
|
|
121
115
|
dispatch({
|
|
122
116
|
type: "GET_DATA_SUCCEEDED",
|
|
123
117
|
data,
|
|
124
118
|
fieldsToPick
|
|
125
119
|
});
|
|
126
120
|
} catch (err) {
|
|
127
|
-
console.error(err.response);
|
|
128
121
|
toggleNotification({
|
|
129
122
|
type: "warning",
|
|
130
123
|
message: { id: "notification.error" }
|
|
131
124
|
});
|
|
132
125
|
}
|
|
133
126
|
};
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
}, [endPoint]);
|
|
127
|
+
getData();
|
|
128
|
+
}, []);
|
|
138
129
|
const handleCancel = () => {
|
|
139
130
|
dispatch({
|
|
140
131
|
type: "ON_CANCEL"
|
|
141
132
|
});
|
|
142
133
|
};
|
|
143
|
-
const handleChange = ({
|
|
134
|
+
const handleChange = ({
|
|
135
|
+
target: { name, value }
|
|
136
|
+
}) => {
|
|
144
137
|
dispatch({
|
|
145
138
|
type: "ON_CHANGE",
|
|
146
|
-
inputType,
|
|
147
139
|
keys: name,
|
|
148
140
|
value
|
|
149
141
|
});
|
|
@@ -177,7 +169,7 @@ const useSettingsForm = (endPoint, schema2, cbSuccess, fieldsToPick) => {
|
|
|
177
169
|
}
|
|
178
170
|
const {
|
|
179
171
|
data: { data }
|
|
180
|
-
} = await put(
|
|
172
|
+
} = await put("/admin/providers/options", cleanedData);
|
|
181
173
|
cbSuccess(data);
|
|
182
174
|
dispatch({
|
|
183
175
|
type: "ON_SUBMIT_SUCCEEDED",
|
|
@@ -242,12 +234,8 @@ const SingleSignOn = () => {
|
|
|
242
234
|
{ formErrors, initialData, isLoading: isLoadingForm, modifiedData, showHeaderButtonLoader },
|
|
243
235
|
,
|
|
244
236
|
{ handleChange, handleSubmit }
|
|
245
|
-
] = useSettingsForm(
|
|
246
|
-
}, [
|
|
247
|
-
"autoRegister",
|
|
248
|
-
"defaultRole",
|
|
249
|
-
"ssoLockedRoles"
|
|
250
|
-
]);
|
|
237
|
+
] = useSettingsForm(schema, () => {
|
|
238
|
+
}, ["autoRegister", "defaultRole", "ssoLockedRoles"]);
|
|
251
239
|
const { roles, isLoading: isLoadingRoles } = useAdminRoles(void 0, {
|
|
252
240
|
enabled: canReadRoles
|
|
253
241
|
});
|
|
@@ -380,8 +368,7 @@ const SingleSignOn = () => {
|
|
|
380
368
|
defaultMessage: "Choose here"
|
|
381
369
|
}),
|
|
382
370
|
onClear: () => {
|
|
383
|
-
|
|
384
|
-
handleChange({ target: { name: "ssoLockedRoles", emptyArray } });
|
|
371
|
+
handleChange({ target: { name: "ssoLockedRoles" } });
|
|
385
372
|
},
|
|
386
373
|
value: modifiedData.ssoLockedRoles || [],
|
|
387
374
|
withTags: true,
|
|
@@ -403,4 +390,4 @@ export {
|
|
|
403
390
|
SingleSignOn,
|
|
404
391
|
ProtectedSSO as default
|
|
405
392
|
};
|
|
406
|
-
//# sourceMappingURL=index-
|
|
393
|
+
//# sourceMappingURL=index-c7386be1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-c7386be1.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/hooks/useSettingsForm.ts","../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/utils/schema.js","../../ee/admin/src/pages/SettingsPage/pages/SingleSignOn/index.js"],"sourcesContent":["import * as React from 'react';\n\nimport {\n getYupInnerErrors,\n useFetchClient,\n useNotification,\n useOverlayBlocker,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport set from 'lodash/set';\nimport { ValidationError } from 'yup';\n\nimport { formatAPIErrors } from '../../../../../../../../admin/src/utils/formatAPIErrors';\n\ninterface GetDataSucceedAction {\n type: 'GET_DATA_SUCCEEDED';\n data: {\n [key: string]: unknown;\n };\n fieldsToPick: string[];\n}\n\ninterface OnCancelAction {\n type: 'ON_CANCEL';\n}\n\ninterface OnChangeAction {\n type: 'ON_CHANGE';\n keys: string;\n value: unknown;\n}\n\ninterface OnSubmitAction {\n type: 'ON_SUBMIT';\n}\n\ninterface OnSubmitSucceedAction {\n type: 'ON_SUBMIT_SUCCEEDED';\n data: {\n [key: string]: unknown;\n };\n}\n\ninterface SetErrorsAction {\n type: 'SET_ERRORS';\n errors: Record<string, unknown>;\n}\n\ninterface InitialState {\n fieldsToPick: string[];\n formErrors?: Record<string, unknown>;\n initialData: Record<string, unknown>;\n isLoading: boolean;\n modifiedData: Record<string, unknown>;\n showHeaderButtonLoader: boolean;\n showHeaderLoader: boolean;\n}\n\nconst initialState: InitialState = {\n fieldsToPick: [],\n formErrors: {},\n initialData: {},\n isLoading: true,\n modifiedData: {},\n showHeaderButtonLoader: false,\n showHeaderLoader: true,\n};\n\ntype Action =\n | GetDataSucceedAction\n | OnCancelAction\n | OnChangeAction\n | OnSubmitAction\n | OnSubmitSucceedAction\n | SetErrorsAction;\n\nconst reducer = (state: typeof initialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GET_DATA_SUCCEEDED': {\n draftState.isLoading = false;\n draftState.showHeaderLoader = false;\n draftState.initialData = pick(action.data, state.fieldsToPick);\n draftState.modifiedData = pick(action.data, state.fieldsToPick);\n break;\n }\n case 'ON_CANCEL': {\n draftState.modifiedData = state.initialData;\n draftState.formErrors = {};\n break;\n }\n case 'ON_CHANGE': {\n if (action.keys.includes('username') && !action.value) {\n set(draftState.modifiedData, action.keys.split('.'), null);\n } else {\n set(draftState.modifiedData, action.keys.split('.'), action.value);\n }\n break;\n }\n case 'ON_SUBMIT': {\n draftState.showHeaderButtonLoader = true;\n break;\n }\n case 'ON_SUBMIT_SUCCEEDED': {\n draftState.initialData = pick(action.data, state.fieldsToPick);\n draftState.modifiedData = pick(action.data, state.fieldsToPick);\n draftState.showHeaderButtonLoader = false;\n break;\n }\n case 'SET_ERRORS': {\n draftState.formErrors = action.errors;\n draftState.showHeaderButtonLoader = false;\n break;\n }\n default:\n return draftState;\n }\n });\n\nconst checkFormValidity = async (data: Record<string, unknown>, schema: any) => {\n let errors = null;\n\n try {\n await schema.validate(data, { abortEarly: false });\n } catch (err) {\n if (err instanceof ValidationError) {\n errors = getYupInnerErrors(err);\n }\n }\n\n return errors;\n};\n\n/**\n * TODO: refactor this, it's confusing and hard to read.\n * It's also only used in `Settings/pages/SingleSignOn` so it can\n * probably be deleted and everything written there...\n */\nexport const useSettingsForm = (\n schema: Record<string, unknown>,\n cbSuccess: (data: any) => void,\n fieldsToPick: string[]\n) => {\n const [\n { formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader, showHeaderLoader },\n dispatch,\n ] = React.useReducer(reducer, { ...initialState, fieldsToPick });\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n\n const { get, put } = useFetchClient();\n\n React.useEffect(() => {\n const getData = async () => {\n try {\n const {\n data: { data },\n } = await get('/admin/providers/options');\n\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n fieldsToPick,\n });\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n }\n };\n\n getData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleCancel = () => {\n dispatch({\n type: 'ON_CANCEL',\n });\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: string; value?: unknown };\n }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n const setField = (fieldName: string, value: unknown) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: fieldName,\n value,\n });\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n const errors = await checkFormValidity(modifiedData, schema);\n\n dispatch({\n type: 'SET_ERRORS',\n errors: errors || {},\n });\n\n if (!errors) {\n try {\n // @ts-expect-error - context assertation\n lockApp();\n\n dispatch({\n type: 'ON_SUBMIT',\n });\n const cleanedData = omit(modifiedData, ['confirmPassword', 'registrationToken']);\n\n if (cleanedData.roles) {\n // @ts-expect-error hooks needs refactoring anyways\n cleanedData.roles = cleanedData.roles.map((role) => role.id);\n }\n if (cleanedData.ssoLockedRoles) {\n // @ts-expect-error hooks needs refactoring anyways\n cleanedData.ssoLockedRoles = [...new Set(cleanedData.ssoLockedRoles)];\n }\n\n const {\n data: { data },\n } = await put('/admin/providers/options', cleanedData);\n\n cbSuccess(data);\n\n dispatch({\n type: 'ON_SUBMIT_SUCCEEDED',\n data,\n });\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved' },\n });\n } catch (err) {\n // @ts-expect-error hooks needs refactoring anyways\n const data = err?.response?.payload ?? { data: {} };\n\n if (!!data?.data && typeof data.data === 'string') {\n toggleNotification({\n type: 'warning',\n message: data.data,\n });\n } else {\n toggleNotification({\n type: 'warning',\n message: data.message,\n });\n }\n\n const apiErrors = formatAPIErrors(data);\n\n dispatch({\n type: 'SET_ERRORS',\n errors: apiErrors,\n });\n } finally {\n // @ts-expect-error - context assertation\n unlockApp();\n }\n }\n };\n\n return [\n { formErrors, initialData, isLoading, modifiedData, showHeaderButtonLoader, showHeaderLoader },\n dispatch,\n { handleCancel, handleChange, handleSubmit, setField },\n ] as const;\n};\n","import { translatedErrors } from '@strapi/helper-plugin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport default schema;\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Layout,\n Main,\n MultiSelect,\n MultiSelectOption,\n Option,\n Select,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useFocusWhenNavigate,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../../../admin/src/selectors';\n\nimport { useSettingsForm } from './hooks/useSettingsForm';\nimport schema from './utils/schema';\n\nexport const SingleSignOn = () => {\n useFocusWhenNavigate();\n\n const { formatMessage } = useIntl();\n const permissions = useSelector(selectAdminPermissions);\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canReadRoles },\n } = useRBAC({\n ...permissions.settings.sso,\n readRoles: permissions.settings.roles.read,\n });\n\n const [\n { formErrors, initialData, isLoading: isLoadingForm, modifiedData, showHeaderButtonLoader },\n ,\n { handleChange, handleSubmit },\n ] = useSettingsForm(schema, () => {}, ['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n enabled: canReadRoles,\n });\n\n const isLoading = isLoadingPermissions || isLoadingRoles || isLoadingForm;\n // TODO: focus() first error field, but it looks like that requires refactoring from useSettingsForm to Formik\n\n return (\n <Layout>\n <SettingsPageTitle name=\"SSO\" />\n <Main tabIndex={-1}>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n <Button\n data-testid=\"save-button\"\n disabled={isEqual(initialData, modifiedData)}\n loading={showHeaderButtonLoader}\n startIcon={<Check />}\n type=\"submit\"\n size=\"L\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({ id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n />\n <ContentLayout>\n {isLoading ? (\n <LoadingIndicatorPage />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid gap={4}>\n <GridItem col={6} m={6} s={12}>\n <ToggleInput\n aria-label=\"autoRegister\"\n data-testid=\"autoRegister\"\n disabled={!canUpdate}\n checked={modifiedData.autoRegister}\n hint={formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n })}\n label={formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n })}\n name=\"autoRegister\"\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoRegister', value: e.target.checked },\n });\n }}\n />\n </GridItem>\n <GridItem col={6} m={6} s={12}>\n <Select\n disabled={!canUpdate}\n hint={formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n })}\n error={\n formErrors.defaultRole\n ? formatMessage({\n id: formErrors.defaultRole.id,\n defaultMessage: formErrors.defaultRole.id,\n })\n : ''\n }\n label={formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n })}\n name=\"defaultRole\"\n onChange={(value) => {\n handleChange({ target: { name: 'defaultRole', value } });\n }}\n placeholder={formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n value={modifiedData.defaultRole}\n >\n {roles.map(({ id, name }) => (\n <Option key={id} value={id.toString()}>\n {name}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem col={6} m={6} s={12}>\n <MultiSelect\n disabled={!canUpdate}\n hint={formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n })}\n error={\n formErrors.ssoLockedRoles\n ? formatMessage({\n id: formErrors.ssoLockedRoles.id,\n defaultMessage: formErrors.ssoLockedRoles.id,\n })\n : ''\n }\n label={formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n })}\n name=\"ssoLockedRoles\"\n onChange={(value) => {\n handleChange({ target: { name: 'ssoLockedRoles', value } });\n }}\n placeholder={formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n onClear={() => {\n handleChange({ target: { name: 'ssoLockedRoles' } });\n }}\n value={modifiedData.ssoLockedRoles || []}\n withTags\n >\n {roles.map(({ id, name }) => (\n <MultiSelectOption key={id} value={id.toString()}>\n {name}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n </GridItem>\n </Grid>\n </Flex>\n )}\n </ContentLayout>\n </form>\n </Main>\n </Layout>\n );\n};\n\nconst ProtectedSSO = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.sso.main}>\n <SingleSignOn />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedSSO;\n"],"names":["schema"],"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-fd7e406d.mjs";
|
|
5
|
+
import { E as EditView } from "./index-e8eff6c5.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-60a57d31.mjs";
|
|
11
11
|
import "react-dom/client";
|
|
12
12
|
import "@strapi/design-system";
|
|
13
13
|
import "invariant";
|
|
@@ -18,25 +18,25 @@ import "react-helmet";
|
|
|
18
18
|
import "react-router-dom";
|
|
19
19
|
import "react-intl";
|
|
20
20
|
import "@radix-ui/react-context";
|
|
21
|
-
import "
|
|
22
|
-
import "lodash/camelCase";
|
|
23
|
-
import "lodash/get";
|
|
24
|
-
import "lodash/omit";
|
|
25
|
-
import "prop-types";
|
|
26
|
-
import "lodash/defaultsDeep";
|
|
27
|
-
import "styled-components";
|
|
21
|
+
import "@strapi/design-system/v2";
|
|
28
22
|
import "@strapi/icons";
|
|
29
23
|
import "formik";
|
|
24
|
+
import "lodash/camelCase";
|
|
25
|
+
import "styled-components";
|
|
30
26
|
import "yup";
|
|
27
|
+
import "lodash/defaultsDeep";
|
|
28
|
+
import "lodash/omit";
|
|
29
|
+
import "qs";
|
|
31
30
|
import "immer";
|
|
31
|
+
import "lodash/get";
|
|
32
32
|
import "lodash/set";
|
|
33
|
-
import "qs";
|
|
34
33
|
import "@reduxjs/toolkit";
|
|
35
34
|
import "react-dnd";
|
|
36
35
|
import "react-dnd-html5-backend";
|
|
37
|
-
import "@strapi/design-system/v2";
|
|
38
36
|
import "lodash/cloneDeep";
|
|
39
37
|
import "./useContentTypes-53b449bb.mjs";
|
|
38
|
+
import "axios";
|
|
39
|
+
import "prop-types";
|
|
40
40
|
const ProtectedCreateView = () => {
|
|
41
41
|
const permissions = useSelector(selectAdminPermissions);
|
|
42
42
|
return /* @__PURE__ */ jsx(CheckPagePermissions, { permissions: permissions.settings.webhooks.create, children: /* @__PURE__ */ jsx(EditView, {}) });
|
|
@@ -44,4 +44,4 @@ const ProtectedCreateView = () => {
|
|
|
44
44
|
export {
|
|
45
45
|
ProtectedCreateView as default
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=index-
|
|
47
|
+
//# sourceMappingURL=index-cc7bedec.mjs.map
|