@strapi/admin 5.0.0-beta.9 → 5.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +18 -3
- package/dist/admin/{AdminSeatInfo-cqB8nHFZ.js → AdminSeatInfo-E8azTFQY.js} +5 -5
- package/dist/admin/AdminSeatInfo-E8azTFQY.js.map +1 -0
- package/dist/admin/{AdminSeatInfo-_UxgNKbX.mjs → AdminSeatInfo-Q_hUNC5B.mjs} +5 -5
- package/dist/admin/AdminSeatInfo-Q_hUNC5B.mjs.map +1 -0
- package/dist/admin/{ApplicationInfoPage-6PD2owY8.mjs → ApplicationInfoPage-FvuI2dqs.mjs} +153 -158
- package/dist/admin/ApplicationInfoPage-FvuI2dqs.mjs.map +1 -0
- package/dist/admin/{ApplicationInfoPage-S18loXTF.js → ApplicationInfoPage-ODW6epX5.js} +161 -166
- package/dist/admin/ApplicationInfoPage-ODW6epX5.js.map +1 -0
- package/dist/admin/{AuthResponse-Y4lblDuD.mjs → AuthResponse-J8A48xdo.mjs} +9 -5
- package/dist/admin/AuthResponse-J8A48xdo.mjs.map +1 -0
- package/dist/admin/{AuthResponse-EiDRhJY8.js → AuthResponse-KlTDmm2i.js} +10 -6
- package/dist/admin/AuthResponse-KlTDmm2i.js.map +1 -0
- package/dist/admin/{AuthenticatedLayout-gOaUXjO8.mjs → AuthenticatedLayout-1zXrNSte.mjs} +177 -166
- package/dist/admin/AuthenticatedLayout-1zXrNSte.mjs.map +1 -0
- package/dist/admin/{AuthenticatedLayout-MDNNJRPg.js → AuthenticatedLayout-haMSd2JF.js} +192 -181
- package/dist/admin/AuthenticatedLayout-haMSd2JF.js.map +1 -0
- package/dist/admin/CreateActionEE-Yfp4hs7a.mjs +49 -0
- package/dist/admin/CreateActionEE-Yfp4hs7a.mjs.map +1 -0
- package/dist/admin/CreateActionEE-uqyKLxwI.js +76 -0
- package/dist/admin/CreateActionEE-uqyKLxwI.js.map +1 -0
- package/dist/admin/{CreatePage-puzZjQXr.mjs → CreatePage-UzCNaW8h.mjs} +13 -14
- package/dist/admin/CreatePage-UzCNaW8h.mjs.map +1 -0
- package/dist/admin/{CreatePage-Z_y-A5xj.js → CreatePage-X9rp03gy.js} +5 -5
- package/dist/admin/{CreatePage-Z_y-A5xj.js.map → CreatePage-X9rp03gy.js.map} +1 -1
- package/dist/admin/{CreatePage-GD7KENsP.mjs → CreatePage-embavU6j.mjs} +3 -3
- package/dist/admin/{CreatePage-GD7KENsP.mjs.map → CreatePage-embavU6j.mjs.map} +1 -1
- package/dist/admin/{CreatePage-5V60DKB0.js → CreatePage-zeisnPM2.js} +18 -19
- package/dist/admin/CreatePage-zeisnPM2.js.map +1 -0
- package/dist/admin/{CreateView-EjqRVjU_.mjs → CreateView-SQFk7zP8.mjs} +3 -3
- package/dist/admin/{CreateView-EjqRVjU_.mjs.map → CreateView-SQFk7zP8.mjs.map} +1 -1
- package/dist/admin/CreateView-Smkfwq2U.js +17 -0
- package/dist/admin/{CreateView-VYprogwB.js.map → CreateView-Smkfwq2U.js.map} +1 -1
- package/dist/admin/{CreateView-jM_w7R83.mjs → CreateView-phBO6q6q.mjs} +3 -3
- package/dist/admin/{CreateView-jM_w7R83.mjs.map → CreateView-phBO6q6q.mjs.map} +1 -1
- package/dist/admin/CreateView-yQvtXeP2.js +17 -0
- package/dist/admin/{CreateView-5V271zBl.js.map → CreateView-yQvtXeP2.js.map} +1 -1
- package/dist/admin/{EditPage-vRwS2OJZ.js → EditPage-1svcLlQN.js} +19 -19
- package/dist/admin/EditPage-1svcLlQN.js.map +1 -0
- package/dist/admin/{EditPage-HsLjcfgK.js → EditPage-GM7gM7Np.js} +15 -15
- package/dist/admin/EditPage-GM7gM7Np.js.map +1 -0
- package/dist/admin/{EditPage-W_qlhF-2.mjs → EditPage-QHC3cITE.mjs} +11 -11
- package/dist/admin/EditPage-QHC3cITE.mjs.map +1 -0
- package/dist/admin/{EditPage-WuJtih1X.js → EditPage-ix4Or3TO.js} +96 -91
- package/dist/admin/EditPage-ix4Or3TO.js.map +1 -0
- package/dist/admin/{EditPage-8_dXc9y1.mjs → EditPage-riE7hBMx.mjs} +9 -9
- package/dist/admin/EditPage-riE7hBMx.mjs.map +1 -0
- package/dist/admin/{EditPage-8fk5JEO7.mjs → EditPage-xDZwHLDD.mjs} +91 -86
- package/dist/admin/EditPage-xDZwHLDD.mjs.map +1 -0
- package/dist/admin/{EditView-Cac025JW.mjs → EditView-3TBDETCw.mjs} +10 -10
- package/dist/admin/EditView-3TBDETCw.mjs.map +1 -0
- package/dist/admin/{EditView-lhhZAQtN.js → EditView-z-CFelH2.js} +19 -19
- package/dist/admin/EditView-z-CFelH2.js.map +1 -0
- package/dist/admin/{EditViewPage-Q7N1TLU9.js → EditViewPage-Kw7Ezpay.js} +32 -32
- package/dist/admin/EditViewPage-Kw7Ezpay.js.map +1 -0
- package/dist/admin/{EditViewPage-f56oKqQ-.mjs → EditViewPage-M5Bto2f0.mjs} +23 -23
- package/dist/admin/EditViewPage-M5Bto2f0.mjs.map +1 -0
- package/dist/admin/{EventsTable-y6XT7dVi.js → EventsTable-ihsVS1kY.js} +2 -2
- package/dist/admin/{EventsTable-y6XT7dVi.js.map → EventsTable-ihsVS1kY.js.map} +1 -1
- package/dist/admin/{EventsTable-duSraBTj.mjs → EventsTable-xNALq0Xl.mjs} +2 -2
- package/dist/admin/{EventsTable-duSraBTj.mjs.map → EventsTable-xNALq0Xl.mjs.map} +1 -1
- package/dist/admin/{HomePage-UTLFs-4n.mjs → HomePage-1iC-u-RM.mjs} +3 -3
- package/dist/admin/{HomePage-UTLFs-4n.mjs.map → HomePage-1iC-u-RM.mjs.map} +1 -1
- package/dist/admin/{HomePage-vTms2gld.js → HomePage-5XpRwLIS.js} +3 -3
- package/dist/admin/{HomePage-vTms2gld.js.map → HomePage-5XpRwLIS.js.map} +1 -1
- package/dist/admin/{HomePage-4Hk9puW_.js → HomePage-6JeS-ulc.js} +18 -18
- package/dist/admin/HomePage-6JeS-ulc.js.map +1 -0
- package/dist/admin/{HomePage-d4h0KEnw.mjs → HomePage-pBVsiRLB.mjs} +12 -12
- package/dist/admin/HomePage-pBVsiRLB.mjs.map +1 -0
- package/dist/admin/{InstalledPluginsPage-9ooKCsS7.js → InstalledPluginsPage-QYeyWKla.js} +10 -10
- package/dist/admin/{InstalledPluginsPage-9ooKCsS7.js.map → InstalledPluginsPage-QYeyWKla.js.map} +1 -1
- package/dist/admin/{InstalledPluginsPage-nCdAsAAu.mjs → InstalledPluginsPage-wwA3VULI.mjs} +4 -4
- package/dist/admin/{InstalledPluginsPage-nCdAsAAu.mjs.map → InstalledPluginsPage-wwA3VULI.mjs.map} +1 -1
- package/dist/admin/{Layout-Ax9QtxH1.mjs → Layout-Dg3BpNCD.mjs} +22 -10
- package/dist/admin/Layout-Dg3BpNCD.mjs.map +1 -0
- package/dist/admin/{Layout-Bmmqv9h6.js → Layout-n5Z9I_69.js} +26 -14
- package/dist/admin/Layout-n5Z9I_69.js.map +1 -0
- package/dist/admin/{ListPage-4nzagne8.js → ListPage-8Tez014i.js} +79 -43
- package/dist/admin/ListPage-8Tez014i.js.map +1 -0
- package/dist/admin/{ListPage-10_h7FUt.js → ListPage-8iWYEe2_.js} +50 -49
- package/dist/admin/ListPage-8iWYEe2_.js.map +1 -0
- package/dist/admin/{ListPage-TWLqkRt6.js → ListPage-CxUAyot2.js} +27 -32
- package/dist/admin/ListPage-CxUAyot2.js.map +1 -0
- package/dist/admin/{ListPage-4n-Xb2aE.js → ListPage-KOIEopQN.js} +3 -3
- package/dist/admin/{ListPage-4n-Xb2aE.js.map → ListPage-KOIEopQN.js.map} +1 -1
- package/dist/admin/{ListPage-4kGSO2Ri.mjs → ListPage-Ka430VWJ.mjs} +40 -39
- package/dist/admin/ListPage-Ka430VWJ.mjs.map +1 -0
- package/dist/admin/{ListPage-OE9xQffQ.mjs → ListPage-P4Apgmd-.mjs} +18 -23
- package/dist/admin/ListPage-P4Apgmd-.mjs.map +1 -0
- package/dist/admin/{ListPage-EPIYY3Uf.mjs → ListPage-PfBDJtky.mjs} +71 -35
- package/dist/admin/ListPage-PfBDJtky.mjs.map +1 -0
- package/dist/admin/{ListPage-gbCO5Otz.mjs → ListPage-SnOw9EMq.mjs} +3 -3
- package/dist/admin/{ListPage-gbCO5Otz.mjs.map → ListPage-SnOw9EMq.mjs.map} +1 -1
- package/dist/admin/{ListPage-IgkmnCSY.js → ListPage-XYrZSP2n.js} +15 -22
- package/dist/admin/ListPage-XYrZSP2n.js.map +1 -0
- package/dist/admin/{ListPage-VGqEsiEA.mjs → ListPage-_sJsfVLq.mjs} +7 -14
- package/dist/admin/ListPage-_sJsfVLq.mjs.map +1 -0
- package/dist/admin/{ListView-uHb_Hgib.js → ListView-6U-6GqOi.js} +13 -13
- package/dist/admin/{ListView-uHb_Hgib.js.map → ListView-6U-6GqOi.js.map} +1 -1
- package/dist/admin/{ListView-Zvs5X2St.mjs → ListView-UKJyJnd2.mjs} +4 -4
- package/dist/admin/{ListView-Zvs5X2St.mjs.map → ListView-UKJyJnd2.mjs.map} +1 -1
- package/dist/admin/{ListView-pT2a-fdi.js → ListView-u3bQ6Jrd.js} +13 -13
- package/dist/admin/{ListView-pT2a-fdi.js.map → ListView-u3bQ6Jrd.js.map} +1 -1
- package/dist/admin/{ListView-gKrpPLEM.mjs → ListView-udsJ7zMT.mjs} +4 -4
- package/dist/admin/{ListView-gKrpPLEM.mjs.map → ListView-udsJ7zMT.mjs.map} +1 -1
- package/dist/admin/{Login-EcSP4AMG.js → Login-iUJs_YTe.js} +5 -5
- package/dist/admin/{Login-EcSP4AMG.js.map → Login-iUJs_YTe.js.map} +1 -1
- package/dist/admin/{Login-w4BUlNaE.mjs → Login-qOZJMFOX.mjs} +4 -4
- package/dist/admin/{Login-w4BUlNaE.mjs.map → Login-qOZJMFOX.mjs.map} +1 -1
- package/dist/admin/{MagicLinkEE-b9NK8XXY.mjs → MagicLinkEE--uHOs_Sh.mjs} +3 -3
- package/dist/admin/{MagicLinkEE-b9NK8XXY.mjs.map → MagicLinkEE--uHOs_Sh.mjs.map} +1 -1
- package/dist/admin/{MagicLinkEE-qT5OE9Pm.js → MagicLinkEE-ZHDAMHRp.js} +3 -3
- package/dist/admin/{MagicLinkEE-qT5OE9Pm.js.map → MagicLinkEE-ZHDAMHRp.js.map} +1 -1
- package/dist/admin/{MarketplacePage-MVRrpUSk.js → MarketplacePage-FLcrHGFN.js} +123 -150
- package/dist/admin/MarketplacePage-FLcrHGFN.js.map +1 -0
- package/dist/admin/{MarketplacePage-oGhZBKgX.mjs → MarketplacePage-KyupKstI.mjs} +111 -138
- package/dist/admin/MarketplacePage-KyupKstI.mjs.map +1 -0
- package/dist/admin/{Ornaments-h_LCCr5P.mjs → Ornaments-jAwgQeK0.mjs} +2 -2
- package/dist/admin/{Ornaments-h_LCCr5P.mjs.map → Ornaments-jAwgQeK0.mjs.map} +1 -1
- package/dist/admin/{Ornaments-UTssGzOw.js → Ornaments-sFPQPOtb.js} +2 -2
- package/dist/admin/{Ornaments-UTssGzOw.js.map → Ornaments-sFPQPOtb.js.map} +1 -1
- package/dist/admin/{Permissions-kNVZVLmu.js → Permissions-SuZE5tW3.js} +265 -277
- package/dist/admin/Permissions-SuZE5tW3.js.map +1 -0
- package/dist/admin/{Permissions-lf6dNG4S.mjs → Permissions-oxdduJgE.mjs} +256 -269
- package/dist/admin/Permissions-oxdduJgE.mjs.map +1 -0
- package/dist/admin/{PrivateRoute-1hyhztQM.mjs → PrivateRoute-4oRTB_tX.mjs} +2 -2
- package/dist/admin/{PrivateRoute-1hyhztQM.mjs.map → PrivateRoute-4oRTB_tX.mjs.map} +1 -1
- package/dist/admin/{PrivateRoute-wBE5vMxe.js → PrivateRoute-ndqg7K6H.js} +3 -3
- package/dist/admin/{PrivateRoute-wBE5vMxe.js.map → PrivateRoute-ndqg7K6H.js.map} +1 -1
- package/dist/admin/{ProfilePage-zk-Py9wt.mjs → ProfilePage-4dKn6UUc.mjs} +10 -10
- package/dist/admin/ProfilePage-4dKn6UUc.mjs.map +1 -0
- package/dist/admin/{ProfilePage-ZlpnTKEF.js → ProfilePage-Ryrm4G10.js} +23 -23
- package/dist/admin/ProfilePage-Ryrm4G10.js.map +1 -0
- package/dist/admin/{PurchaseAuditLogs-9reb0oGz.js → PurchaseAuditLogs-EDV5UGnG.js} +2 -2
- package/dist/admin/{PurchaseAuditLogs-9reb0oGz.js.map → PurchaseAuditLogs-EDV5UGnG.js.map} +1 -1
- package/dist/admin/{PurchaseAuditLogs-iOYsTJA-.mjs → PurchaseAuditLogs-K5ZTiR8K.mjs} +2 -2
- package/dist/admin/{PurchaseAuditLogs-iOYsTJA-.mjs.map → PurchaseAuditLogs-K5ZTiR8K.mjs.map} +1 -1
- package/dist/admin/{PurchaseSingleSignOn-S3xLiiv7.js → PurchaseSingleSignOn--Cb7M20e.js} +2 -2
- package/dist/admin/{PurchaseSingleSignOn-S3xLiiv7.js.map → PurchaseSingleSignOn--Cb7M20e.js.map} +1 -1
- package/dist/admin/{PurchaseSingleSignOn-X629iA7K.mjs → PurchaseSingleSignOn-c143s7mz.mjs} +2 -2
- package/dist/admin/{PurchaseSingleSignOn-X629iA7K.mjs.map → PurchaseSingleSignOn-c143s7mz.mjs.map} +1 -1
- package/dist/admin/{SSOProviders-AirHFyBl.js → SSOProviders-QBcyB9VI.js} +5 -5
- package/dist/admin/SSOProviders-QBcyB9VI.js.map +1 -0
- package/dist/admin/{SSOProviders-t8D-v8As.mjs → SSOProviders-nMmBLr8g.mjs} +6 -6
- package/dist/admin/SSOProviders-nMmBLr8g.mjs.map +1 -0
- package/dist/admin/{SelectRoles-yM-LT458.mjs → SelectRoles-psJuDrRF.mjs} +4 -4
- package/dist/admin/{SelectRoles-yM-LT458.mjs.map → SelectRoles-psJuDrRF.mjs.map} +1 -1
- package/dist/admin/{SelectRoles-hyiyvsCG.js → SelectRoles-x3GAhhSJ.js} +5 -5
- package/dist/admin/{SelectRoles-hyiyvsCG.js.map → SelectRoles-x3GAhhSJ.js.map} +1 -1
- package/dist/admin/{SingleSignOnPage-3Mfu4dgn.js → SingleSignOnPage-83q-C4t-.js} +17 -17
- package/dist/admin/SingleSignOnPage-83q-C4t-.js.map +1 -0
- package/dist/admin/{SingleSignOnPage-wPZ1tqEk.mjs → SingleSignOnPage-9l6JRqDd.mjs} +7 -7
- package/dist/admin/SingleSignOnPage-9l6JRqDd.mjs.map +1 -0
- package/dist/admin/{Table-OcYvBab7.mjs → Table-I-45hnM1.mjs} +11 -22
- package/dist/admin/Table-I-45hnM1.mjs.map +1 -0
- package/dist/admin/{Table-N9PZc6xL.js → Table-oO6QTH1W.js} +12 -23
- package/dist/admin/Table-oO6QTH1W.js.map +1 -0
- package/dist/admin/{rbac-5b9ylhpa.js → Theme-7W0we6BI.js} +147 -80
- package/dist/admin/Theme-7W0we6BI.js.map +1 -0
- package/dist/admin/{rbac-oJEkQdXG.mjs → Theme-PrUuuGtN.mjs} +140 -81
- package/dist/admin/Theme-PrUuuGtN.mjs.map +1 -0
- package/dist/admin/{TokenTypeSelect-dWn05yGP.js → TokenTypeSelect-26DfB0-O.js} +10 -12
- package/dist/admin/TokenTypeSelect-26DfB0-O.js.map +1 -0
- package/dist/admin/{TokenTypeSelect-v6IYPaBF.mjs → TokenTypeSelect-xCzuaMQo.mjs} +7 -9
- package/dist/admin/TokenTypeSelect-xCzuaMQo.mjs.map +1 -0
- package/dist/admin/{UseCasePage-ijq-Bur_.js → UseCasePage-WtuQk75n.js} +6 -6
- package/dist/admin/{UseCasePage-ijq-Bur_.js.map → UseCasePage-WtuQk75n.js.map} +1 -1
- package/dist/admin/{UseCasePage-P4AFdcDQ.mjs → UseCasePage-fXNd00ES.mjs} +4 -4
- package/dist/admin/{UseCasePage-P4AFdcDQ.mjs.map → UseCasePage-fXNd00ES.mjs.map} +1 -1
- package/dist/admin/{constants-sfZ2gFzJ.js → constants-GyaJoB7C.js} +5 -5
- package/dist/admin/{constants-sfZ2gFzJ.js.map → constants-GyaJoB7C.js.map} +1 -1
- package/dist/admin/{constants-Z-zrJ7Zs.mjs → constants-nzCvle10.mjs} +4 -4
- package/dist/admin/{constants-Z-zrJ7Zs.mjs.map → constants-nzCvle10.mjs.map} +1 -1
- package/dist/admin/{en-K35WIWVM.mjs → en-0Ld-ipyI.mjs} +3 -2
- package/dist/admin/{en-K35WIWVM.mjs.map → en-0Ld-ipyI.mjs.map} +1 -1
- package/dist/admin/{en-G-ukrF2h.js → en-TbnMBjZf.js} +3 -2
- package/dist/admin/{en-G-ukrF2h.js.map → en-TbnMBjZf.js.map} +1 -1
- package/dist/admin/{index-duYn5r8_.js → index-TG8-3711.js} +1524 -1425
- package/dist/admin/index-TG8-3711.js.map +1 -0
- package/dist/admin/{index-EQL2s09p.mjs → index-f6STHGSC.mjs} +1479 -1377
- package/dist/admin/index-f6STHGSC.mjs.map +1 -0
- package/dist/admin/index.js +12 -12
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/{selectors-Ilww6FA-.mjs → selectors-ZpHhvPK4.mjs} +2 -2
- package/dist/admin/{selectors-Ilww6FA-.mjs.map → selectors-ZpHhvPK4.mjs.map} +1 -1
- package/dist/admin/selectors-zQKcCNuz.js +8 -0
- package/dist/admin/{selectors-NDEu6dJa.js.map → selectors-zQKcCNuz.js.map} +1 -1
- package/dist/admin/src/StrapiApp.d.ts +17 -45
- package/dist/admin/src/components/ConfirmDialog.d.ts +18 -8
- package/dist/admin/src/components/Filters.d.ts +4 -8
- package/dist/admin/src/components/Form.d.ts +6 -1
- package/dist/admin/src/components/FormInputs/Checkbox.d.ts +1 -1
- package/dist/admin/src/components/FormInputs/types.d.ts +1 -1
- package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +1 -1
- package/dist/admin/src/components/Layouts/Layout.d.ts +1 -1
- package/dist/admin/src/components/MainNav/NavUser.d.ts +1 -1
- package/dist/admin/src/components/Table.d.ts +1 -1
- package/dist/admin/src/constants/filters.d.ts +2 -1
- package/dist/admin/src/constants.d.ts +3 -3
- package/dist/admin/src/core/apis/router.d.ts +73 -0
- package/dist/admin/src/features/Auth.d.ts +2 -2
- package/dist/admin/src/features/StrapiApp.d.ts +2 -1
- package/dist/admin/src/hooks/useSettingsMenu.d.ts +2 -2
- package/dist/admin/src/index.d.ts +2 -1
- package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +0 -6
- package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.d.ts +4 -2
- package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.d.ts +2 -4
- package/dist/admin/src/pages/Settings/pages/Users/components/CreateActionCE.d.ts +2 -1
- package/dist/admin/src/reducer.d.ts +7 -2
- package/dist/admin/src/render.d.ts +1 -0
- package/dist/admin/src/router.d.ts +7 -0
- package/dist/admin/src/services/admin.d.ts +5 -5
- package/dist/admin/src/types/permissions.d.ts +1 -1
- package/dist/admin/test.js +17 -16
- package/dist/admin/test.js.map +1 -1
- package/dist/admin/test.mjs +10 -9
- package/dist/admin/test.mjs.map +1 -1
- package/dist/admin/tests/store.d.ts +2 -1
- package/dist/admin/tests/utils.d.ts +2 -1
- package/dist/admin/{useAdminRoles-cq3ZckdQ.mjs → useAdminRoles-Aj5B2oXT.mjs} +2 -2
- package/dist/admin/{useAdminRoles-cq3ZckdQ.mjs.map → useAdminRoles-Aj5B2oXT.mjs.map} +1 -1
- package/dist/admin/{useAdminRoles-2VDDweuC.js → useAdminRoles-JbwI6Lrm.js} +2 -2
- package/dist/admin/{useAdminRoles-2VDDweuC.js.map → useAdminRoles-JbwI6Lrm.js.map} +1 -1
- package/dist/admin/{useLicenseLimitNotification-1Xo24v-C.mjs → useLicenseLimitNotification-PaR7jmqd.mjs} +2 -2
- package/dist/admin/{useLicenseLimitNotification-1Xo24v-C.mjs.map → useLicenseLimitNotification-PaR7jmqd.mjs.map} +1 -1
- package/dist/admin/{useLicenseLimitNotification-9iq0TFuF.js → useLicenseLimitNotification-g1vq6nzk.js} +3 -3
- package/dist/admin/{useLicenseLimitNotification-9iq0TFuF.js.map → useLicenseLimitNotification-g1vq6nzk.js.map} +1 -1
- package/dist/admin/{useWebhooks-opYGugiT.js → useWebhooks-0RUEkKAV.js} +4 -4
- package/dist/admin/{useWebhooks-opYGugiT.js.map → useWebhooks-0RUEkKAV.js.map} +1 -1
- package/dist/admin/{useWebhooks-bgdpL7W6.mjs → useWebhooks-7thg-d57.mjs} +4 -4
- package/dist/admin/{useWebhooks-bgdpL7W6.mjs.map → useWebhooks-7thg-d57.mjs.map} +1 -1
- package/dist/admin/{validation-qUTUIssJ.mjs → validation-F0JQeiU1.mjs} +2 -2
- package/dist/admin/{validation-qUTUIssJ.mjs.map → validation-F0JQeiU1.mjs.map} +1 -1
- package/dist/admin/{validation-6PUPWFkz.js → validation-hzptxkSz.js} +2 -2
- package/dist/admin/{validation-6PUPWFkz.js.map → validation-hzptxkSz.js.map} +1 -1
- package/dist/ee/admin/src/constants.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.d.ts +2 -1
- package/dist/ee/server/index.js +1 -3
- package/dist/ee/server/index.js.map +1 -1
- package/dist/ee/server/index.mjs +1 -3
- package/dist/ee/server/index.mjs.map +1 -1
- package/dist/package.json.d.ts +13 -10
- package/dist/server/index.js +20 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +18 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/webhooks.d.ts.map +1 -1
- package/package.json +14 -11
- package/dist/admin/AdminSeatInfo-_UxgNKbX.mjs.map +0 -1
- package/dist/admin/AdminSeatInfo-cqB8nHFZ.js.map +0 -1
- package/dist/admin/ApplicationInfoPage-6PD2owY8.mjs.map +0 -1
- package/dist/admin/ApplicationInfoPage-S18loXTF.js.map +0 -1
- package/dist/admin/AuthResponse-EiDRhJY8.js.map +0 -1
- package/dist/admin/AuthResponse-Y4lblDuD.mjs.map +0 -1
- package/dist/admin/AuthenticatedLayout-MDNNJRPg.js.map +0 -1
- package/dist/admin/AuthenticatedLayout-gOaUXjO8.mjs.map +0 -1
- package/dist/admin/CreateActionEE-dGj-JbWV.js +0 -53
- package/dist/admin/CreateActionEE-dGj-JbWV.js.map +0 -1
- package/dist/admin/CreateActionEE-uBGAkLbn.mjs +0 -45
- package/dist/admin/CreateActionEE-uBGAkLbn.mjs.map +0 -1
- package/dist/admin/CreatePage-5V60DKB0.js.map +0 -1
- package/dist/admin/CreatePage-puzZjQXr.mjs.map +0 -1
- package/dist/admin/CreateView-5V271zBl.js +0 -17
- package/dist/admin/CreateView-VYprogwB.js +0 -17
- package/dist/admin/EditPage-8_dXc9y1.mjs.map +0 -1
- package/dist/admin/EditPage-8fk5JEO7.mjs.map +0 -1
- package/dist/admin/EditPage-HsLjcfgK.js.map +0 -1
- package/dist/admin/EditPage-W_qlhF-2.mjs.map +0 -1
- package/dist/admin/EditPage-WuJtih1X.js.map +0 -1
- package/dist/admin/EditPage-vRwS2OJZ.js.map +0 -1
- package/dist/admin/EditView-Cac025JW.mjs.map +0 -1
- package/dist/admin/EditView-lhhZAQtN.js.map +0 -1
- package/dist/admin/EditViewPage-Q7N1TLU9.js.map +0 -1
- package/dist/admin/EditViewPage-f56oKqQ-.mjs.map +0 -1
- package/dist/admin/HomePage-4Hk9puW_.js.map +0 -1
- package/dist/admin/HomePage-d4h0KEnw.mjs.map +0 -1
- package/dist/admin/Layout-Ax9QtxH1.mjs.map +0 -1
- package/dist/admin/Layout-Bmmqv9h6.js.map +0 -1
- package/dist/admin/ListPage-10_h7FUt.js.map +0 -1
- package/dist/admin/ListPage-4kGSO2Ri.mjs.map +0 -1
- package/dist/admin/ListPage-4nzagne8.js.map +0 -1
- package/dist/admin/ListPage-EPIYY3Uf.mjs.map +0 -1
- package/dist/admin/ListPage-IgkmnCSY.js.map +0 -1
- package/dist/admin/ListPage-OE9xQffQ.mjs.map +0 -1
- package/dist/admin/ListPage-TWLqkRt6.js.map +0 -1
- package/dist/admin/ListPage-VGqEsiEA.mjs.map +0 -1
- package/dist/admin/MarketplacePage-MVRrpUSk.js.map +0 -1
- package/dist/admin/MarketplacePage-oGhZBKgX.mjs.map +0 -1
- package/dist/admin/Permissions-kNVZVLmu.js.map +0 -1
- package/dist/admin/Permissions-lf6dNG4S.mjs.map +0 -1
- package/dist/admin/ProfilePage-ZlpnTKEF.js.map +0 -1
- package/dist/admin/ProfilePage-zk-Py9wt.mjs.map +0 -1
- package/dist/admin/SSOProviders-AirHFyBl.js.map +0 -1
- package/dist/admin/SSOProviders-t8D-v8As.mjs.map +0 -1
- package/dist/admin/SingleSignOnPage-3Mfu4dgn.js.map +0 -1
- package/dist/admin/SingleSignOnPage-wPZ1tqEk.mjs.map +0 -1
- package/dist/admin/Table-N9PZc6xL.js.map +0 -1
- package/dist/admin/Table-OcYvBab7.mjs.map +0 -1
- package/dist/admin/TokenTypeSelect-dWn05yGP.js.map +0 -1
- package/dist/admin/TokenTypeSelect-v6IYPaBF.mjs.map +0 -1
- package/dist/admin/index-EQL2s09p.mjs.map +0 -1
- package/dist/admin/index-duYn5r8_.js.map +0 -1
- package/dist/admin/rbac-5b9ylhpa.js.map +0 -1
- package/dist/admin/rbac-oJEkQdXG.mjs.map +0 -1
- package/dist/admin/selectors-NDEu6dJa.js +0 -8
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import { useLocation, NavLink, useMatch, Navigate, Outlet } from 'react-router-dom';
|
|
4
|
-
import { r as SETTINGS_LINKS_CE, b as Layouts } from './index-
|
|
5
|
-
import {
|
|
4
|
+
import { r as SETTINGS_LINKS_CE, b as Layouts } from './index-f6STHGSC.mjs';
|
|
5
|
+
import { u as useAuth, n as useAppInfo, o as useStrapiApp, d as useTracking, P as Page } from './Theme-PrUuuGtN.mjs';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import sortBy from 'lodash/sortBy';
|
|
8
8
|
import { useSelector } from 'react-redux';
|
|
9
|
-
import { s as selectAdminPermissions } from './selectors-
|
|
9
|
+
import { s as selectAdminPermissions } from './selectors-ZpHhvPK4.mjs';
|
|
10
10
|
import { u as useEnterprise } from './useEnterprise-jpsYZWzn.mjs';
|
|
11
|
-
import { SubNav, SubNavHeader, SubNavSections, SubNavSection
|
|
12
|
-
import {
|
|
11
|
+
import { SubNavLink, SubNav, SubNavHeader, SubNavSections, SubNavSection } from '@strapi/design-system';
|
|
12
|
+
import { Lightning } from '@strapi/icons';
|
|
13
13
|
import { styled } from 'styled-components';
|
|
14
14
|
|
|
15
15
|
const formatLinks = (menu) => menu.map((menuSection) => {
|
|
@@ -34,7 +34,7 @@ const useSettingsMenu = () => {
|
|
|
34
34
|
const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);
|
|
35
35
|
const { admin: adminLinks, global: globalLinks } = useEnterprise(
|
|
36
36
|
ceLinks,
|
|
37
|
-
async () => (await import('./index-
|
|
37
|
+
async () => (await import('./index-f6STHGSC.mjs').then(n => n.K)).SETTINGS_LINKS_EE(),
|
|
38
38
|
{
|
|
39
39
|
combine(ceLinks2, eeLinks) {
|
|
40
40
|
return {
|
|
@@ -128,9 +128,20 @@ const useSettingsMenu = () => {
|
|
|
128
128
|
};
|
|
129
129
|
};
|
|
130
130
|
|
|
131
|
-
const CustomIcon = styled(
|
|
131
|
+
const CustomIcon = styled(Lightning)`
|
|
132
132
|
right: 15px;
|
|
133
133
|
position: absolute;
|
|
134
|
+
bottom: 50%;
|
|
135
|
+
transform: translateY(50%);
|
|
136
|
+
|
|
137
|
+
path {
|
|
138
|
+
fill: ${({ theme }) => theme.colors.warning500};
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
const Link = styled(SubNavLink)`
|
|
142
|
+
&.active ${CustomIcon} {
|
|
143
|
+
right: 13px;
|
|
144
|
+
}
|
|
134
145
|
`;
|
|
135
146
|
const SettingsNav = ({ menu }) => {
|
|
136
147
|
const { formatMessage } = useIntl();
|
|
@@ -163,15 +174,16 @@ const SettingsNav = ({ menu }) => {
|
|
|
163
174
|
/* @__PURE__ */ jsx(SubNavHeader, { label }),
|
|
164
175
|
/* @__PURE__ */ jsx(SubNavSections, { children: sections.map((section) => /* @__PURE__ */ jsx(SubNavSection, { label: formatMessage(section.intlLabel), children: section.links.map((link) => {
|
|
165
176
|
return /* @__PURE__ */ jsxs(
|
|
166
|
-
|
|
177
|
+
Link,
|
|
167
178
|
{
|
|
168
179
|
tag: NavLink,
|
|
169
180
|
withBullet: link.hasNotification,
|
|
170
181
|
to: link.to,
|
|
171
182
|
onClick: handleClickOnLink(link.to),
|
|
183
|
+
position: "relative",
|
|
172
184
|
children: [
|
|
173
185
|
formatMessage(link.intlLabel),
|
|
174
|
-
link?.
|
|
186
|
+
link?.licenseOnly && /* @__PURE__ */ jsx(CustomIcon, { width: "1.5rem", height: "1.5rem" })
|
|
175
187
|
]
|
|
176
188
|
},
|
|
177
189
|
link.id
|
|
@@ -200,4 +212,4 @@ const Layout = () => {
|
|
|
200
212
|
};
|
|
201
213
|
|
|
202
214
|
export { Layout };
|
|
203
|
-
//# sourceMappingURL=Layout-
|
|
215
|
+
//# sourceMappingURL=Layout-Dg3BpNCD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout-Dg3BpNCD.mjs","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/Layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nimport type {\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n} from '../core/apis/router';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n licenseOnly?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const checkUserHasPermission = useAuth(\n 'useSettingsMenu',\n (state) => state.checkUserHasPermissions\n );\n const shouldUpdateStrapi = useAppInfo('useSettingsMenu', (state) => state.shouldUpdateStrapi);\n const settings = useStrapiApp('useSettingsMenu', (state) => state.settings);\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: (await checkUserHasPermission(link.permissions)).length > 0,\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [\n adminLinks,\n globalLinks,\n settings,\n shouldUpdateStrapi,\n addPermissions,\n checkUserHasPermission,\n ]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { Lightning } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\nconst CustomIcon = styled(Lightning)`\n right: 15px;\n position: absolute;\n bottom: 50%;\n transform: translateY(50%);\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\nconst Link = styled(SubNavLink)`\n &.active ${CustomIcon} {\n right: 13px;\n }\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <Link\n tag={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n position=\"relative\"\n >\n {formatMessage(link.intlLabel)}\n {link?.licenseOnly && <CustomIcon width=\"1.5rem\" height=\"1.5rem\" />}\n </Link>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useMatch } from 'react-router-dom';\n\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\n\nimport { SettingsNav } from './components/SettingsNav';\n\nconst Layout = () => {\n /**\n * This ensures we're capturing the settingId from the URL\n * but also lets any nesting after that pass.\n */\n const match = useMatch('/settings/:settingId/*');\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (!match?.params.settingId) {\n return <Navigate to=\"application-infos\" />;\n }\n\n return (\n <Layouts.Root sideNav={<SettingsNav menu={menu} />}>\n <Page.Title>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Page.Title>\n <Outlet />\n </Layouts.Root>\n );\n};\n\nexport { Layout };\n"],"names":["ceLinks","sections","permission"],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const reactIntl = require('react-intl');
|
|
7
7
|
const reactRouterDom = require('react-router-dom');
|
|
8
|
-
const index = require('./index-
|
|
9
|
-
const
|
|
8
|
+
const index = require('./index-TG8-3711.js');
|
|
9
|
+
const Theme = require('./Theme-7W0we6BI.js');
|
|
10
10
|
const React = require('react');
|
|
11
11
|
const sortBy = require('lodash/sortBy');
|
|
12
12
|
const reactRedux = require('react-redux');
|
|
13
|
-
const selectors = require('./selectors-
|
|
13
|
+
const selectors = require('./selectors-zQKcCNuz.js');
|
|
14
14
|
const useEnterprise = require('./useEnterprise-DUs6BYlP.js');
|
|
15
15
|
const designSystem = require('@strapi/design-system');
|
|
16
16
|
const icons = require('@strapi/icons');
|
|
@@ -51,17 +51,17 @@ const useSettingsMenu = () => {
|
|
|
51
51
|
isLoading: true,
|
|
52
52
|
menu: []
|
|
53
53
|
});
|
|
54
|
-
const checkUserHasPermission =
|
|
54
|
+
const checkUserHasPermission = Theme.useAuth(
|
|
55
55
|
"useSettingsMenu",
|
|
56
56
|
(state) => state.checkUserHasPermissions
|
|
57
57
|
);
|
|
58
|
-
const shouldUpdateStrapi =
|
|
59
|
-
const settings =
|
|
58
|
+
const shouldUpdateStrapi = Theme.useAppInfo("useSettingsMenu", (state) => state.shouldUpdateStrapi);
|
|
59
|
+
const settings = Theme.useStrapiApp("useSettingsMenu", (state) => state.settings);
|
|
60
60
|
const permissions = reactRedux.useSelector(selectors.selectAdminPermissions);
|
|
61
61
|
const ceLinks = React__namespace.useMemo(() => index.SETTINGS_LINKS_CE(), []);
|
|
62
62
|
const { admin: adminLinks, global: globalLinks } = useEnterprise.useEnterprise(
|
|
63
63
|
ceLinks,
|
|
64
|
-
async () => (await Promise.resolve().then(() => require('./index-
|
|
64
|
+
async () => (await Promise.resolve().then(() => require('./index-TG8-3711.js')).then(n => n.constants)).SETTINGS_LINKS_EE(),
|
|
65
65
|
{
|
|
66
66
|
combine(ceLinks2, eeLinks) {
|
|
67
67
|
return {
|
|
@@ -155,13 +155,24 @@ const useSettingsMenu = () => {
|
|
|
155
155
|
};
|
|
156
156
|
};
|
|
157
157
|
|
|
158
|
-
const CustomIcon = styledComponents.styled(icons.
|
|
158
|
+
const CustomIcon = styledComponents.styled(icons.Lightning)`
|
|
159
159
|
right: 15px;
|
|
160
160
|
position: absolute;
|
|
161
|
+
bottom: 50%;
|
|
162
|
+
transform: translateY(50%);
|
|
163
|
+
|
|
164
|
+
path {
|
|
165
|
+
fill: ${({ theme }) => theme.colors.warning500};
|
|
166
|
+
}
|
|
167
|
+
`;
|
|
168
|
+
const Link = styledComponents.styled(designSystem.SubNavLink)`
|
|
169
|
+
&.active ${CustomIcon} {
|
|
170
|
+
right: 13px;
|
|
171
|
+
}
|
|
161
172
|
`;
|
|
162
173
|
const SettingsNav = ({ menu }) => {
|
|
163
174
|
const { formatMessage } = reactIntl.useIntl();
|
|
164
|
-
const { trackUsage } =
|
|
175
|
+
const { trackUsage } = Theme.useTracking();
|
|
165
176
|
const { pathname } = reactRouterDom.useLocation();
|
|
166
177
|
const filteredMenu = menu.filter(
|
|
167
178
|
(section) => !section.links.every((link) => link.isDisplayed === false)
|
|
@@ -190,15 +201,16 @@ const SettingsNav = ({ menu }) => {
|
|
|
190
201
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SubNavHeader, { label }),
|
|
191
202
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SubNavSections, { children: sections.map((section) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SubNavSection, { label: formatMessage(section.intlLabel), children: section.links.map((link) => {
|
|
192
203
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
193
|
-
|
|
204
|
+
Link,
|
|
194
205
|
{
|
|
195
206
|
tag: reactRouterDom.NavLink,
|
|
196
207
|
withBullet: link.hasNotification,
|
|
197
208
|
to: link.to,
|
|
198
209
|
onClick: handleClickOnLink(link.to),
|
|
210
|
+
position: "relative",
|
|
199
211
|
children: [
|
|
200
212
|
formatMessage(link.intlLabel),
|
|
201
|
-
link?.
|
|
213
|
+
link?.licenseOnly && /* @__PURE__ */ jsxRuntime.jsx(CustomIcon, { width: "1.5rem", height: "1.5rem" })
|
|
202
214
|
]
|
|
203
215
|
},
|
|
204
216
|
link.id
|
|
@@ -212,13 +224,13 @@ const Layout = () => {
|
|
|
212
224
|
const { formatMessage } = reactIntl.useIntl();
|
|
213
225
|
const { isLoading, menu } = useSettingsMenu();
|
|
214
226
|
if (isLoading) {
|
|
215
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
227
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Theme.Page.Loading, {});
|
|
216
228
|
}
|
|
217
229
|
if (!match?.params.settingId) {
|
|
218
230
|
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "application-infos" });
|
|
219
231
|
}
|
|
220
232
|
return /* @__PURE__ */ jsxRuntime.jsxs(index.Layouts.Root, { sideNav: /* @__PURE__ */ jsxRuntime.jsx(SettingsNav, { menu }), children: [
|
|
221
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
233
|
+
/* @__PURE__ */ jsxRuntime.jsx(Theme.Page.Title, { children: formatMessage({
|
|
222
234
|
id: "global.settings",
|
|
223
235
|
defaultMessage: "Settings"
|
|
224
236
|
}) }),
|
|
@@ -227,4 +239,4 @@ const Layout = () => {
|
|
|
227
239
|
};
|
|
228
240
|
|
|
229
241
|
exports.Layout = Layout;
|
|
230
|
-
//# sourceMappingURL=Layout-
|
|
242
|
+
//# sourceMappingURL=Layout-n5Z9I_69.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout-n5Z9I_69.js","sources":["../../admin/src/hooks/useSettingsMenu.ts","../../admin/src/pages/Settings/components/SettingsNav.tsx","../../admin/src/pages/Settings/Layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport sortBy from 'lodash/sortBy';\nimport { useSelector } from 'react-redux';\n\nimport { SETTINGS_LINKS_CE, SettingsMenuLink } from '../constants';\nimport { useAppInfo } from '../features/AppInfo';\nimport { useAuth } from '../features/Auth';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { selectAdminPermissions } from '../selectors';\nimport { PermissionMap } from '../types/permissions';\n\nimport { useEnterprise } from './useEnterprise';\n\nimport type {\n StrapiAppSetting,\n StrapiAppSettingLink as IStrapiAppSettingLink,\n} from '../core/apis/router';\n\nconst formatLinks = (menu: SettingsMenuSection[]): SettingsMenuSectionWithDisplayedLinks[] =>\n menu.map((menuSection) => {\n const formattedLinks = menuSection.links.map((link) => ({\n ...link,\n isDisplayed: false,\n }));\n\n return { ...menuSection, links: formattedLinks };\n });\n\ninterface SettingsMenuLinkWithPermissions extends SettingsMenuLink {\n permissions: IStrapiAppSettingLink['permissions'];\n hasNotification?: boolean;\n}\n\ninterface StrapiAppSettingsLink extends IStrapiAppSettingLink {\n licenseOnly?: never;\n hasNotification?: never;\n}\n\ninterface SettingsMenuSection extends Omit<StrapiAppSetting, 'links'> {\n links: Array<SettingsMenuLinkWithPermissions | StrapiAppSettingsLink>;\n}\n\ninterface SettingsMenuLinkWithPermissionsAndDisplayed extends SettingsMenuLinkWithPermissions {\n isDisplayed: boolean;\n}\n\ninterface StrapiAppSettingLinkWithDisplayed extends StrapiAppSettingsLink {\n isDisplayed: boolean;\n}\n\ninterface SettingsMenuSectionWithDisplayedLinks extends Omit<SettingsMenuSection, 'links'> {\n links: Array<SettingsMenuLinkWithPermissionsAndDisplayed | StrapiAppSettingLinkWithDisplayed>;\n}\n\ntype SettingsMenu = SettingsMenuSectionWithDisplayedLinks[];\n\nconst useSettingsMenu = (): {\n isLoading: boolean;\n menu: SettingsMenu;\n} => {\n const [{ isLoading, menu }, setData] = React.useState<{\n isLoading: boolean;\n menu: SettingsMenu;\n }>({\n isLoading: true,\n menu: [],\n });\n const checkUserHasPermission = useAuth(\n 'useSettingsMenu',\n (state) => state.checkUserHasPermissions\n );\n const shouldUpdateStrapi = useAppInfo('useSettingsMenu', (state) => state.shouldUpdateStrapi);\n const settings = useStrapiApp('useSettingsMenu', (state) => state.settings);\n const permissions = useSelector(selectAdminPermissions);\n\n /**\n * memoize the return value of this function to avoid re-computing it on every render\n * because it's used in an effect it ends up re-running recursively.\n */\n const ceLinks = React.useMemo(() => SETTINGS_LINKS_CE(), []);\n\n const { admin: adminLinks, global: globalLinks } = useEnterprise(\n ceLinks,\n async () => (await import('../../../ee/admin/src/constants')).SETTINGS_LINKS_EE(),\n {\n combine(ceLinks, eeLinks) {\n return {\n admin: [...eeLinks.admin, ...ceLinks.admin],\n global: [...ceLinks.global, ...eeLinks.global],\n };\n },\n defaultValue: {\n admin: [],\n global: [],\n },\n }\n );\n\n const addPermissions = React.useCallback(\n (link: SettingsMenuLink) => {\n if (!link.id) {\n throw new Error('The settings menu item must have an id attribute.');\n }\n\n return {\n ...link,\n permissions: permissions.settings?.[link.id as keyof PermissionMap['settings']]?.main ?? [],\n } satisfies SettingsMenuLinkWithPermissions;\n },\n [permissions.settings]\n );\n\n React.useEffect(() => {\n const getData = async () => {\n interface MenuLinkPermission {\n hasPermission: boolean;\n sectionIndex: number;\n linkIndex: number;\n }\n\n const buildMenuPermissions = (sections: SettingsMenuSectionWithDisplayedLinks[]) =>\n Promise.all(\n sections.reduce<Promise<MenuLinkPermission>[]>((acc, section, sectionIndex) => {\n const linksWithPermissions = section.links.map(async (link, linkIndex) => ({\n hasPermission: (await checkUserHasPermission(link.permissions)).length > 0,\n sectionIndex,\n linkIndex,\n }));\n\n return [...acc, ...linksWithPermissions];\n }, [])\n );\n\n const menuPermissions = await buildMenuPermissions(sections);\n\n setData((prev) => {\n return {\n ...prev,\n isLoading: false,\n menu: sections.map((section, sectionIndex) => ({\n ...section,\n links: section.links.map((link, linkIndex) => {\n const permission = menuPermissions.find(\n (permission) =>\n permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex\n );\n\n return {\n ...link,\n isDisplayed: Boolean(permission?.hasPermission),\n };\n }),\n })),\n };\n });\n };\n\n const { global, ...otherSections } = settings;\n const sections = formatLinks([\n {\n ...global,\n links: sortBy([...global.links, ...globalLinks.map(addPermissions)], (link) => link.id).map(\n (link) => ({\n ...link,\n hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi,\n })\n ),\n },\n {\n id: 'permissions',\n intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' },\n links: adminLinks.map(addPermissions),\n },\n ...Object.values(otherSections),\n ]);\n\n getData();\n }, [\n adminLinks,\n globalLinks,\n settings,\n shouldUpdateStrapi,\n addPermissions,\n checkUserHasPermission,\n ]);\n\n return {\n isLoading,\n menu: menu.map((menuItem) => ({\n ...menuItem,\n links: menuItem.links.filter((link) => link.isDisplayed),\n })),\n };\n};\n\nexport { useSettingsMenu };\nexport type { SettingsMenu };\n","import {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { Lightning } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useTracking } from '../../../features/Tracking';\nimport { SettingsMenu } from '../../../hooks/useSettingsMenu';\n\nconst CustomIcon = styled(Lightning)`\n right: 15px;\n position: absolute;\n bottom: 50%;\n transform: translateY(50%);\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\nconst Link = styled(SubNavLink)`\n &.active ${CustomIcon} {\n right: 13px;\n }\n`;\n\ninterface SettingsNavProps {\n menu: SettingsMenu;\n}\n\nconst SettingsNav = ({ menu }: SettingsNavProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n\n const filteredMenu = menu.filter(\n (section) => !section.links.every((link) => link.isDisplayed === false)\n );\n\n const sections = filteredMenu.map((section) => {\n return {\n ...section,\n title: section.intlLabel,\n links: section.links.map((link) => {\n return {\n ...link,\n title: link.intlLabel,\n name: link.id,\n };\n }),\n };\n });\n\n const label = formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n });\n\n const handleClickOnLink = (destination: string) => () => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader label={label} />\n <SubNavSections>\n {sections.map((section) => (\n <SubNavSection key={section.id} label={formatMessage(section.intlLabel)}>\n {section.links.map((link) => {\n return (\n <Link\n tag={NavLink}\n withBullet={link.hasNotification}\n to={link.to}\n onClick={handleClickOnLink(link.to)}\n key={link.id}\n position=\"relative\"\n >\n {formatMessage(link.intlLabel)}\n {link?.licenseOnly && <CustomIcon width=\"1.5rem\" height=\"1.5rem\" />}\n </Link>\n );\n })}\n </SubNavSection>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { SettingsNav };\nexport type { SettingsNavProps };\n","import { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useMatch } from 'react-router-dom';\n\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { useSettingsMenu } from '../../hooks/useSettingsMenu';\n\nimport { SettingsNav } from './components/SettingsNav';\n\nconst Layout = () => {\n /**\n * This ensures we're capturing the settingId from the URL\n * but also lets any nesting after that pass.\n */\n const match = useMatch('/settings/:settingId/*');\n const { formatMessage } = useIntl();\n const { isLoading, menu } = useSettingsMenu();\n\n // Since the useSettingsMenu hook can make API calls in order to check the links permissions\n // We need to add a loading state to prevent redirecting the user while permissions are being checked\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (!match?.params.settingId) {\n return <Navigate to=\"application-infos\" />;\n }\n\n return (\n <Layouts.Root sideNav={<SettingsNav menu={menu} />}>\n <Page.Title>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Page.Title>\n <Outlet />\n </Layouts.Root>\n );\n};\n\nexport { Layout };\n"],"names":["React","useAuth","useAppInfo","useStrapiApp","useSelector","selectAdminPermissions","SETTINGS_LINKS_CE","useEnterprise","ceLinks","sections","permission","sortBy","styled","Lightning","SubNavLink","useIntl","useTracking","useLocation","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","SubNavSection","NavLink","useMatch","Page","Navigate","Layouts","Outlet"],"mappings":"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"}
|
|
@@ -9,9 +9,9 @@ const icons = require('@strapi/icons');
|
|
|
9
9
|
const symbols = require('@strapi/icons/symbols');
|
|
10
10
|
const reactIntl = require('react-intl');
|
|
11
11
|
const reactRouterDom = require('react-router-dom');
|
|
12
|
-
const index = require('./index-
|
|
13
|
-
const
|
|
14
|
-
const useWebhooks = require('./useWebhooks-
|
|
12
|
+
const index = require('./index-TG8-3711.js');
|
|
13
|
+
const Theme = require('./Theme-7W0we6BI.js');
|
|
14
|
+
const useWebhooks = require('./useWebhooks-0RUEkKAV.js');
|
|
15
15
|
|
|
16
16
|
function _interopNamespace(e) {
|
|
17
17
|
if (e && e.__esModule) return e;
|
|
@@ -36,15 +36,15 @@ const React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
36
36
|
const ListPage = () => {
|
|
37
37
|
const [showModal, setShowModal] = React__namespace.useState(false);
|
|
38
38
|
const [webhooksToDelete, setWebhooksToDelete] = React__namespace.useState([]);
|
|
39
|
-
const permissions =
|
|
39
|
+
const permissions = Theme.useTypedSelector((state) => state.admin_app.permissions.settings?.webhooks);
|
|
40
40
|
const { formatMessage } = reactIntl.useIntl();
|
|
41
|
-
const { _unstableFormatAPIError: formatAPIError } =
|
|
42
|
-
const { toggleNotification } =
|
|
41
|
+
const { _unstableFormatAPIError: formatAPIError } = Theme.useAPIErrorHandler();
|
|
42
|
+
const { toggleNotification } = Theme.useNotification();
|
|
43
43
|
const navigate = reactRouterDom.useNavigate();
|
|
44
44
|
const {
|
|
45
45
|
isLoading: isRBACLoading,
|
|
46
46
|
allowedActions: { canCreate, canUpdate, canDelete }
|
|
47
|
-
} =
|
|
47
|
+
} = Theme.useRBAC(permissions);
|
|
48
48
|
const { notifyStatus } = designSystem.useNotifyAT();
|
|
49
49
|
const {
|
|
50
50
|
isLoading: isWebhooksLoading,
|
|
@@ -89,7 +89,30 @@ const ListPage = () => {
|
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
|
-
const
|
|
92
|
+
const deleteWebhook = async (id) => {
|
|
93
|
+
try {
|
|
94
|
+
const res = await deleteManyWebhooks({
|
|
95
|
+
ids: [id]
|
|
96
|
+
});
|
|
97
|
+
if ("error" in res) {
|
|
98
|
+
toggleNotification({
|
|
99
|
+
type: "danger",
|
|
100
|
+
message: formatAPIError(res.error)
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));
|
|
105
|
+
} catch {
|
|
106
|
+
toggleNotification({
|
|
107
|
+
type: "danger",
|
|
108
|
+
message: formatMessage({
|
|
109
|
+
id: "notification.error",
|
|
110
|
+
defaultMessage: "An error occurred"
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const confirmBulkDelete = async () => {
|
|
93
116
|
try {
|
|
94
117
|
const res = await deleteManyWebhooks({
|
|
95
118
|
ids: webhooksToDelete
|
|
@@ -120,16 +143,16 @@ const ListPage = () => {
|
|
|
120
143
|
const numberOfWebhooks = webhooks?.length ?? 0;
|
|
121
144
|
const webhooksToDeleteLength = webhooksToDelete.length;
|
|
122
145
|
if (isLoading) {
|
|
123
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
146
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Theme.Page.Loading, {});
|
|
124
147
|
}
|
|
125
148
|
return /* @__PURE__ */ jsxRuntime.jsxs(index.Layouts.Root, { children: [
|
|
126
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
149
|
+
/* @__PURE__ */ jsxRuntime.jsx(Theme.Page.Title, { children: formatMessage(
|
|
127
150
|
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
128
151
|
{
|
|
129
152
|
name: "Webhooks"
|
|
130
153
|
}
|
|
131
154
|
) }),
|
|
132
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
155
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Theme.Page.Main, { "aria-busy": isLoading, children: [
|
|
133
156
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
134
157
|
index.Layouts.Header,
|
|
135
158
|
{
|
|
@@ -194,15 +217,14 @@ const ListPage = () => {
|
|
|
194
217
|
children: [
|
|
195
218
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Thead, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
196
219
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
197
|
-
designSystem.
|
|
220
|
+
designSystem.Checkbox,
|
|
198
221
|
{
|
|
199
222
|
"aria-label": formatMessage({
|
|
200
223
|
id: "global.select-all-entries",
|
|
201
224
|
defaultMessage: "Select all entries"
|
|
202
225
|
}),
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
onValueChange: selectAllCheckbox
|
|
226
|
+
checked: webhooksToDeleteLength > 0 && webhooksToDeleteLength < numberOfWebhooks ? "indeterminate" : webhooksToDeleteLength === numberOfWebhooks,
|
|
227
|
+
onCheckedChange: selectAllCheckbox
|
|
206
228
|
}
|
|
207
229
|
) }),
|
|
208
230
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { width: "20%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({
|
|
@@ -233,20 +255,20 @@ const ListPage = () => {
|
|
|
233
255
|
style: { cursor: canUpdate ? "pointer" : "default" },
|
|
234
256
|
children: [
|
|
235
257
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
236
|
-
designSystem.
|
|
258
|
+
designSystem.Checkbox,
|
|
237
259
|
{
|
|
238
260
|
"aria-label": `${formatMessage({
|
|
239
261
|
id: "global.select",
|
|
240
262
|
defaultMessage: "Select"
|
|
241
263
|
})} ${webhook.name}`,
|
|
242
|
-
|
|
243
|
-
|
|
264
|
+
checked: webhooksToDelete?.includes(webhook.id),
|
|
265
|
+
onCheckedChange: (selected) => selectOneCheckbox(!!selected, webhook.id),
|
|
244
266
|
name: "select"
|
|
245
267
|
}
|
|
246
268
|
) }),
|
|
247
269
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "semiBold", textColor: "neutral800", children: webhook.name }) }),
|
|
248
270
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: webhook.url }) }),
|
|
249
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
271
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
250
272
|
designSystem.Switch,
|
|
251
273
|
{
|
|
252
274
|
onLabel: formatMessage({
|
|
@@ -257,16 +279,15 @@ const ListPage = () => {
|
|
|
257
279
|
id: "global.disabled",
|
|
258
280
|
defaultMessage: "Disabled"
|
|
259
281
|
}),
|
|
260
|
-
label: `${webhook.name} ${formatMessage({
|
|
282
|
+
"aria-label": `${webhook.name} ${formatMessage({
|
|
261
283
|
id: "Settings.webhooks.list.th.status",
|
|
262
284
|
defaultMessage: "Status"
|
|
263
285
|
})}`,
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
e.stopPropagation();
|
|
286
|
+
checked: webhook.isEnabled,
|
|
287
|
+
onCheckedChange: (enabled) => {
|
|
267
288
|
enableWebhook({
|
|
268
289
|
...webhook,
|
|
269
|
-
isEnabled:
|
|
290
|
+
isEnabled: enabled
|
|
270
291
|
});
|
|
271
292
|
},
|
|
272
293
|
visibleLabels: true
|
|
@@ -285,19 +306,11 @@ const ListPage = () => {
|
|
|
285
306
|
}
|
|
286
307
|
),
|
|
287
308
|
canDelete && /* @__PURE__ */ jsxRuntime.jsx(
|
|
288
|
-
|
|
309
|
+
DeleteActionButton,
|
|
289
310
|
{
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
setShowModal(true);
|
|
294
|
-
},
|
|
295
|
-
label: formatMessage({
|
|
296
|
-
id: "Settings.webhooks.events.delete",
|
|
297
|
-
defaultMessage: "Delete webhook"
|
|
298
|
-
}),
|
|
299
|
-
borderWidth: 0,
|
|
300
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
|
|
311
|
+
onDelete: () => {
|
|
312
|
+
deleteWebhook(webhook.id);
|
|
313
|
+
}
|
|
301
314
|
}
|
|
302
315
|
)
|
|
303
316
|
] }) })
|
|
@@ -322,23 +335,46 @@ const ListPage = () => {
|
|
|
322
335
|
}
|
|
323
336
|
) })
|
|
324
337
|
] }),
|
|
338
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Root, { open: showModal, onOpenChange: setShowModal, children: /* @__PURE__ */ jsxRuntime.jsx(index.ConfirmDialog, { onConfirm: confirmBulkDelete }) })
|
|
339
|
+
] });
|
|
340
|
+
};
|
|
341
|
+
const DeleteActionButton = ({ onDelete }) => {
|
|
342
|
+
const [showModal, setShowModal] = React__namespace.useState(false);
|
|
343
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
344
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
325
345
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
346
|
+
designSystem.IconButton,
|
|
347
|
+
{
|
|
348
|
+
onClick: (e) => {
|
|
349
|
+
e.stopPropagation();
|
|
350
|
+
setShowModal(true);
|
|
351
|
+
},
|
|
352
|
+
label: formatMessage({
|
|
353
|
+
id: "Settings.webhooks.events.delete",
|
|
354
|
+
defaultMessage: "Delete webhook"
|
|
355
|
+
}),
|
|
356
|
+
borderWidth: 0,
|
|
357
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
|
|
358
|
+
}
|
|
359
|
+
),
|
|
360
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Root, { open: showModal, onOpenChange: setShowModal, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
326
361
|
index.ConfirmDialog,
|
|
327
362
|
{
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
363
|
+
onConfirm: (e) => {
|
|
364
|
+
e?.stopPropagation();
|
|
365
|
+
onDelete();
|
|
366
|
+
}
|
|
331
367
|
}
|
|
332
|
-
)
|
|
368
|
+
) })
|
|
333
369
|
] });
|
|
334
370
|
};
|
|
335
371
|
const ProtectedListPage = () => {
|
|
336
|
-
const permissions =
|
|
372
|
+
const permissions = Theme.useTypedSelector(
|
|
337
373
|
(state) => state.admin_app.permissions.settings?.webhooks.main
|
|
338
374
|
);
|
|
339
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
375
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Theme.Page.Protect, { permissions, children: /* @__PURE__ */ jsxRuntime.jsx(ListPage, {}) });
|
|
340
376
|
};
|
|
341
377
|
|
|
342
378
|
exports.ListPage = ListPage;
|
|
343
379
|
exports.ProtectedListPage = ProtectedListPage;
|
|
344
|
-
//# sourceMappingURL=ListPage-
|
|
380
|
+
//# sourceMappingURL=ListPage-8Tez014i.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListPage-8Tez014i.js","sources":["../../admin/src/pages/Settings/pages/Webhooks/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotifyAT,\n Checkbox,\n Button,\n EmptyStateLayout,\n Flex,\n IconButton,\n Switch,\n Table,\n Tbody,\n Td,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n LinkButton,\n Dialog,\n} from '@strapi/design-system';\nimport { Pencil, Plus, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\n\nimport { UpdateWebhook } from '../../../../../../shared/contracts/webhooks';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../hooks/useRBAC';\n\nimport { useWebhooks } from './hooks/useWebhooks';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPage = () => {\n const [showModal, setShowModal] = React.useState(false);\n const [webhooksToDelete, setWebhooksToDelete] = React.useState<string[]>([]);\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.webhooks);\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n\n const {\n isLoading: isRBACLoading,\n allowedActions: { canCreate, canUpdate, canDelete },\n } = useRBAC(permissions);\n const { notifyStatus } = useNotifyAT();\n\n const {\n isLoading: isWebhooksLoading,\n webhooks,\n error: webhooksError,\n updateWebhook,\n deleteManyWebhooks,\n } = useWebhooks();\n\n React.useEffect(() => {\n if (webhooksError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(webhooksError),\n });\n\n return;\n }\n if (webhooks) {\n notifyStatus(\n formatMessage({\n id: 'Settings.webhooks.list.loading.success',\n defaultMessage: 'Webhooks have been loaded',\n })\n );\n }\n }, [webhooks, webhooksError, toggleNotification, formatMessage, notifyStatus, formatAPIError]);\n\n const enableWebhook = async (body: UpdateWebhook.Request['body'] & UpdateWebhook.Params) => {\n try {\n const res = await updateWebhook(body);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const deleteWebhook = async (id: string) => {\n try {\n const res = await deleteManyWebhooks({\n ids: [id],\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const confirmBulkDelete = async () => {\n try {\n const res = await deleteManyWebhooks({\n ids: webhooksToDelete,\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n setWebhooksToDelete([]);\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n } finally {\n setShowModal(false);\n }\n };\n\n const selectAllCheckbox = (selected: boolean) =>\n selected\n ? setWebhooksToDelete(webhooks?.map((webhook) => webhook.id) ?? [])\n : setWebhooksToDelete([]);\n\n const selectOneCheckbox = (selected: boolean, id: string) =>\n selected\n ? setWebhooksToDelete((prev) => [...prev, id])\n : setWebhooksToDelete((prev) => prev.filter((webhookId) => webhookId !== id));\n\n const isLoading = isRBACLoading || isWebhooksLoading;\n const numberOfWebhooks = webhooks?.length ?? 0;\n const webhooksToDeleteLength = webhooksToDelete.length;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layouts.Root>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Webhooks',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isLoading}>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' })}\n subtitle={formatMessage({\n id: 'Settings.webhooks.list.description',\n defaultMessage: 'Get POST changes notifications',\n })}\n primaryAction={\n canCreate &&\n !isLoading && (\n <LinkButton tag={NavLink} startIcon={<Plus />} variant=\"default\" to=\"create\" size=\"S\">\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n )\n }\n />\n {webhooksToDeleteLength > 0 && canDelete && (\n <Layouts.Action\n startActions={\n <>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.webhooks.to.delete',\n defaultMessage:\n '{webhooksToDeleteLength, plural, one {# webhook} other {# webhooks}} selected',\n },\n { webhooksToDeleteLength }\n )}\n </Typography>\n <Button\n onClick={() => setShowModal(true)}\n startIcon={<Trash />}\n size=\"L\"\n variant=\"danger-light\"\n >\n {formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n </Button>\n </>\n }\n />\n )}\n <Layouts.Content>\n {numberOfWebhooks > 0 ? (\n <Table\n colCount={5}\n rowCount={numberOfWebhooks + 1}\n footer={\n <TFooter\n onClick={() => {\n if (canCreate) {\n navigate('create');\n }\n }}\n icon={<Plus />}\n >\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </TFooter>\n }\n >\n <Thead>\n <Tr>\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n checked={\n webhooksToDeleteLength > 0 && webhooksToDeleteLength < numberOfWebhooks\n ? 'indeterminate'\n : webhooksToDeleteLength === numberOfWebhooks\n }\n onCheckedChange={selectAllCheckbox}\n />\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th width=\"60%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.form.url',\n defaultMessage: 'URL',\n })}\n </Typography>\n </Th>\n <Th width=\"20%\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'Settings.webhooks.list.th.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {webhooks?.map((webhook) => (\n <Tr\n key={webhook.id}\n onClick={() => {\n if (canUpdate) {\n navigate(webhook.id);\n }\n }}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={`${formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n })} ${webhook.name}`}\n checked={webhooksToDelete?.includes(webhook.id)}\n onCheckedChange={(selected) => selectOneCheckbox(!!selected, webhook.id)}\n name=\"select\"\n />\n </Td>\n <Td>\n <Typography fontWeight=\"semiBold\" textColor=\"neutral800\">\n {webhook.name}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{webhook.url}</Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Flex>\n <Switch\n onLabel={formatMessage({\n id: 'global.enabled',\n defaultMessage: 'Enabled',\n })}\n offLabel={formatMessage({\n id: 'global.disabled',\n defaultMessage: 'Disabled',\n })}\n aria-label={`${webhook.name} ${formatMessage({\n id: 'Settings.webhooks.list.th.status',\n defaultMessage: 'Status',\n })}`}\n checked={webhook.isEnabled}\n onCheckedChange={(enabled) => {\n enableWebhook({\n ...webhook,\n isEnabled: enabled,\n });\n }}\n visibleLabels\n />\n </Flex>\n </Td>\n <Td>\n <Flex gap={1}>\n {canUpdate && (\n <IconButton\n label={formatMessage({\n id: 'Settings.webhooks.events.update',\n defaultMessage: 'Update',\n })}\n borderWidth={0}\n >\n <Pencil />\n </IconButton>\n )}\n {canDelete && (\n <DeleteActionButton\n onDelete={() => {\n deleteWebhook(webhook.id);\n }}\n />\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n ) : (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"160px\" />}\n content={formatMessage({\n id: 'Settings.webhooks.list.empty.description',\n defaultMessage: 'No webhooks found',\n })}\n action={\n canCreate ? (\n <LinkButton variant=\"secondary\" startIcon={<Plus />} tag={NavLink} to=\"create\">\n {formatMessage({\n id: 'Settings.webhooks.list.button.add',\n defaultMessage: 'Create new webhook',\n })}\n </LinkButton>\n ) : null\n }\n />\n )}\n </Layouts.Content>\n </Page.Main>\n <Dialog.Root open={showModal} onOpenChange={setShowModal}>\n <ConfirmDialog onConfirm={confirmBulkDelete} />\n </Dialog.Root>\n </Layouts.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteActionButton\n * -----------------------------------------------------------------------------------------------*/\n\ntype DeleteActionButtonProps = {\n onDelete: () => void;\n};\n\nconst DeleteActionButton = ({ onDelete }: DeleteActionButtonProps) => {\n const [showModal, setShowModal] = React.useState(false);\n const { formatMessage } = useIntl();\n\n return (\n <>\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n setShowModal(true);\n }}\n label={formatMessage({\n id: 'Settings.webhooks.events.delete',\n defaultMessage: 'Delete webhook',\n })}\n borderWidth={0}\n >\n <Trash />\n </IconButton>\n\n <Dialog.Root open={showModal} onOpenChange={setShowModal}>\n <ConfirmDialog\n onConfirm={(e) => {\n e?.stopPropagation();\n onDelete();\n }}\n />\n </Dialog.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.webhooks.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["React","useTypedSelector","useIntl","useAPIErrorHandler","useNotification","useNavigate","useRBAC","useNotifyAT","useWebhooks","jsx","Page","jsxs","Layouts","LinkButton","NavLink","Plus","Fragment","Typography","Button","Trash","Table","TFooter","Thead","Tr","Th","Checkbox","VisuallyHidden","Tbody","Td","Flex","Switch","IconButton","Pencil","EmptyStateLayout","EmptyDocuments","Dialog","ConfirmDialog"],"mappings":"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"}
|