@strapi/plugin-users-permissions 0.0.0-next.e6eaa3d0563c85f80fd88b258df70a55c057096e → 0.0.0-next.e8d8fc824d0f6a695b2a9ebaa4680ed21c3645ca
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/admin/src/components/BoundRoute/index.jsx +2 -2
- package/admin/src/components/FormModal/Input/index.jsx +32 -31
- package/admin/src/components/FormModal/index.jsx +57 -68
- package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.jsx +4 -3
- package/admin/src/components/Permissions/PermissionRow/SubCategory.jsx +13 -22
- package/admin/src/components/Permissions/index.jsx +27 -35
- package/admin/src/components/Permissions/reducer.js +1 -1
- package/admin/src/components/Policies/index.jsx +7 -5
- package/admin/src/components/UsersPermissions/index.jsx +15 -7
- package/admin/src/components/UsersPermissions/reducer.js +1 -1
- package/admin/src/index.js +15 -32
- package/admin/src/pages/AdvancedSettings/index.jsx +83 -128
- package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
- package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
- package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +119 -139
- package/admin/src/pages/EmailTemplates/components/EmailTable.jsx +20 -17
- package/admin/src/pages/EmailTemplates/index.jsx +36 -62
- package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
- package/admin/src/pages/Providers/index.jsx +98 -113
- package/admin/src/pages/Providers/utils/forms.js +23 -11
- package/admin/src/pages/Roles/constants.js +3 -3
- package/admin/src/pages/Roles/hooks/usePlugins.js +4 -4
- package/admin/src/pages/Roles/index.jsx +9 -18
- package/admin/src/pages/Roles/pages/CreatePage.jsx +53 -58
- package/admin/src/pages/Roles/pages/EditPage.jsx +63 -68
- package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +27 -31
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +79 -55
- package/admin/src/translations/en.json +1 -1
- package/admin/src/utils/prefixPluginTranslations.js +13 -0
- package/dist/_chunks/{ar-t5qTFaAD.js → ar-BguGUqwK.js} +1 -1
- package/dist/_chunks/ar-BguGUqwK.js.map +1 -0
- package/dist/_chunks/{ar-MvD8Ghac.mjs → ar-CK8BRRXB.mjs} +1 -1
- package/dist/_chunks/ar-CK8BRRXB.mjs.map +1 -0
- package/dist/_chunks/{cs-BMuXwxA1.mjs → cs-BVigMk0l.mjs} +1 -1
- package/dist/_chunks/cs-BVigMk0l.mjs.map +1 -0
- package/dist/_chunks/{cs-I8N4u-Sd.js → cs-BW8-K_GY.js} +1 -1
- package/dist/_chunks/cs-BW8-K_GY.js.map +1 -0
- package/dist/_chunks/{de-zs2qqc0W.mjs → de-BKUdRFI4.mjs} +1 -1
- package/dist/_chunks/de-BKUdRFI4.mjs.map +1 -0
- package/dist/_chunks/{de-YTjtq89K.js → de-owXpVluI.js} +1 -1
- package/dist/_chunks/de-owXpVluI.js.map +1 -0
- package/dist/_chunks/{dk-HctVBMsG.mjs → dk-BQiTK50l.mjs} +1 -1
- package/dist/_chunks/dk-BQiTK50l.mjs.map +1 -0
- package/dist/_chunks/{dk-TF-dWjzl.js → dk-LXAnbuBk.js} +1 -1
- package/dist/_chunks/dk-LXAnbuBk.js.map +1 -0
- package/dist/_chunks/{en-CE3wEy_c.mjs → en-DOHtPf-2.mjs} +2 -2
- package/dist/_chunks/en-DOHtPf-2.mjs.map +1 -0
- package/dist/_chunks/{en-m608rMZx.js → en-MHo5mcsU.js} +2 -2
- package/dist/_chunks/en-MHo5mcsU.js.map +1 -0
- package/dist/_chunks/{es-XBQsB8_9.js → es-BwLCLXAQ.js} +1 -1
- package/dist/_chunks/es-BwLCLXAQ.js.map +1 -0
- package/dist/_chunks/{es-9381tih_.mjs → es-DNgOVMjD.mjs} +1 -1
- package/dist/_chunks/es-DNgOVMjD.mjs.map +1 -0
- package/dist/_chunks/{fr-CMSc77If.mjs → fr-DkgRugiU.mjs} +1 -1
- package/dist/_chunks/fr-DkgRugiU.mjs.map +1 -0
- package/dist/_chunks/{fr-6cz3U-IF.js → fr-DkhpSjjm.js} +1 -1
- package/dist/_chunks/fr-DkhpSjjm.js.map +1 -0
- package/dist/_chunks/{id-RJ934rq-.js → id-BTemOeTZ.js} +1 -1
- package/dist/_chunks/id-BTemOeTZ.js.map +1 -0
- package/dist/_chunks/{id-SDuyIkZa.mjs → id-BdEsvnaF.mjs} +1 -1
- package/dist/_chunks/id-BdEsvnaF.mjs.map +1 -0
- package/dist/_chunks/index-BP1KkpZq.js +280 -0
- package/dist/_chunks/index-BP1KkpZq.js.map +1 -0
- package/dist/_chunks/index-BnvtBuUS.js +365 -0
- package/dist/_chunks/index-BnvtBuUS.js.map +1 -0
- package/dist/_chunks/{index-YkMqn-9t.js → index-BphRo4l2.js} +56 -53
- package/dist/_chunks/index-BphRo4l2.js.map +1 -0
- package/dist/_chunks/index-C_5QiATG.mjs +344 -0
- package/dist/_chunks/index-C_5QiATG.mjs.map +1 -0
- package/dist/_chunks/index-Cn5HftCc-CvJvlZwK.js +11113 -0
- package/dist/_chunks/index-Cn5HftCc-CvJvlZwK.js.map +1 -0
- package/dist/_chunks/index-Cn5HftCc-Dku5eOkP.mjs +11090 -0
- package/dist/_chunks/index-Cn5HftCc-Dku5eOkP.mjs.map +1 -0
- package/dist/_chunks/{index-l_QWM0NZ.mjs → index-Cxhs260c.mjs} +239 -256
- package/dist/_chunks/index-Cxhs260c.mjs.map +1 -0
- package/dist/_chunks/index-D4Ge_-Bp.mjs +262 -0
- package/dist/_chunks/index-D4Ge_-Bp.mjs.map +1 -0
- package/dist/_chunks/{index-5-krOCaE.mjs → index-D5yExFYc.mjs} +55 -52
- package/dist/_chunks/index-D5yExFYc.mjs.map +1 -0
- package/dist/_chunks/{index-wiA9qAAp.mjs → index-D_J3MMcj.mjs} +105 -103
- package/dist/_chunks/index-D_J3MMcj.mjs.map +1 -0
- package/dist/_chunks/{index-dnfs8wOQ.js → index-DoogNdMf.js} +109 -108
- package/dist/_chunks/index-DoogNdMf.js.map +1 -0
- package/dist/_chunks/{index-Aq7T7skI.js → index-iJPHXbGD.js} +256 -276
- package/dist/_chunks/index-iJPHXbGD.js.map +1 -0
- package/dist/_chunks/{it-bvH7DgQo.mjs → it-B-rv0E24.mjs} +1 -1
- package/dist/_chunks/it-B-rv0E24.mjs.map +1 -0
- package/dist/_chunks/{it-YhZOlM2X.js → it-D1rH6V6_.js} +1 -1
- package/dist/_chunks/it-D1rH6V6_.js.map +1 -0
- package/dist/_chunks/{ja-o_-JPvQv.mjs → ja-C8K-VBPD.mjs} +1 -1
- package/dist/_chunks/ja-C8K-VBPD.mjs.map +1 -0
- package/dist/_chunks/{ja-xssHUXFv.js → ja-DqShgTMf.js} +1 -1
- package/dist/_chunks/ja-DqShgTMf.js.map +1 -0
- package/dist/_chunks/{ko-C3mHUSJa.js → ko-B9DGEPWH.js} +1 -1
- package/dist/_chunks/ko-B9DGEPWH.js.map +1 -0
- package/dist/_chunks/{ko-XJbPSez_.mjs → ko-Busb0wIY.mjs} +1 -1
- package/dist/_chunks/ko-Busb0wIY.mjs.map +1 -0
- package/dist/_chunks/{ms-II5Ea73J.mjs → ms-ByvsQjRt.mjs} +1 -1
- package/dist/_chunks/ms-ByvsQjRt.mjs.map +1 -0
- package/dist/_chunks/{ms-d0hfg65Z.js → ms-CPBU3LWf.js} +1 -1
- package/dist/_chunks/ms-CPBU3LWf.js.map +1 -0
- package/dist/_chunks/{nl-vEy6TN0K.mjs → nl-5qO8Rpcy.mjs} +1 -1
- package/dist/_chunks/nl-5qO8Rpcy.mjs.map +1 -0
- package/dist/_chunks/{nl-TA7TfK_5.js → nl-CwNB6YoO.js} +1 -1
- package/dist/_chunks/nl-CwNB6YoO.js.map +1 -0
- package/dist/_chunks/{pl-2VowaFGt.mjs → pl-BdIzifBE.mjs} +1 -1
- package/dist/_chunks/pl-BdIzifBE.mjs.map +1 -0
- package/dist/_chunks/{pl-0pUL9hdA.js → pl-Do9UD69f.js} +1 -1
- package/dist/_chunks/pl-Do9UD69f.js.map +1 -0
- package/dist/_chunks/{pt-Rf9W51IO.mjs → pt-BIO24ioG.mjs} +1 -1
- package/dist/_chunks/pt-BIO24ioG.mjs.map +1 -0
- package/dist/_chunks/{pt-BR-WNOhafR4.js → pt-BR-D7dZhxuP.js} +1 -1
- package/dist/_chunks/pt-BR-D7dZhxuP.js.map +1 -0
- package/dist/_chunks/{pt-BR-sS1Xp3Jt.mjs → pt-BR-f0p23AQZ.mjs} +1 -1
- package/dist/_chunks/pt-BR-f0p23AQZ.mjs.map +1 -0
- package/dist/_chunks/{pt-guNR9Gax.js → pt-fdvyOnUp.js} +1 -1
- package/dist/_chunks/pt-fdvyOnUp.js.map +1 -0
- package/dist/_chunks/{ru-X3BMXDds.js → ru-C94rjPGA.js} +1 -1
- package/dist/_chunks/ru-C94rjPGA.js.map +1 -0
- package/dist/_chunks/{ru-qKHnd5or.mjs → ru-VWy-IB7K.mjs} +1 -1
- package/dist/_chunks/ru-VWy-IB7K.mjs.map +1 -0
- package/dist/_chunks/{sk-NWPw1oTN.js → sk-BABEhykl.js} +1 -1
- package/dist/_chunks/sk-BABEhykl.js.map +1 -0
- package/dist/_chunks/{sk-_Ryr-eTT.mjs → sk-B_LIcepm.mjs} +1 -1
- package/dist/_chunks/sk-B_LIcepm.mjs.map +1 -0
- package/dist/_chunks/{sv-BqzScFXS.mjs → sv-ABLKOokl.mjs} +1 -1
- package/dist/_chunks/sv-ABLKOokl.mjs.map +1 -0
- package/dist/_chunks/{sv-76NnbB__.js → sv-Be43LhA9.js} +1 -1
- package/dist/_chunks/sv-Be43LhA9.js.map +1 -0
- package/dist/_chunks/{th-WsknMEpq.mjs → th-DKyP7ueR.mjs} +1 -1
- package/dist/_chunks/th-DKyP7ueR.mjs.map +1 -0
- package/dist/_chunks/{th-cbppX21D.js → th-DgVhVLhL.js} +1 -1
- package/dist/_chunks/th-DgVhVLhL.js.map +1 -0
- package/dist/_chunks/{tr-6mm_Fmz7.js → tr-B_idhkEs.js} +1 -1
- package/dist/_chunks/tr-B_idhkEs.js.map +1 -0
- package/dist/_chunks/{tr-_DB1F1GW.mjs → tr-qa1Q5UjC.mjs} +1 -1
- package/dist/_chunks/tr-qa1Q5UjC.mjs.map +1 -0
- package/dist/_chunks/{uk-yxMSQAwI.mjs → uk-BmRqbeQc.mjs} +1 -1
- package/dist/_chunks/uk-BmRqbeQc.mjs.map +1 -0
- package/dist/_chunks/{uk-sI2I1ogF.js → uk-LHOivnhP.js} +1 -1
- package/dist/_chunks/uk-LHOivnhP.js.map +1 -0
- package/dist/_chunks/{vi-A3zJxaiI.js → vi-CdVRdKDw.js} +1 -1
- package/dist/_chunks/vi-CdVRdKDw.js.map +1 -0
- package/dist/_chunks/{vi-xY0zCW3d.mjs → vi-HW-EdMea.mjs} +1 -1
- package/dist/_chunks/vi-HW-EdMea.mjs.map +1 -0
- package/dist/_chunks/{zh-OFeldzbX.mjs → zh-5hKkVPA4.mjs} +1 -1
- package/dist/_chunks/zh-5hKkVPA4.mjs.map +1 -0
- package/dist/_chunks/{zh-72SpmFXa.js → zh-Cuq8gMnF.js} +1 -1
- package/dist/_chunks/zh-Cuq8gMnF.js.map +1 -0
- package/dist/_chunks/{zh-Hans-E84cu4kP.mjs → zh-Hans-BHilK-yc.mjs} +1 -1
- package/dist/_chunks/zh-Hans-BHilK-yc.mjs.map +1 -0
- package/dist/_chunks/{zh-Hans-ArWWtyP4.js → zh-Hans-GQDMKtY4.js} +1 -1
- package/dist/_chunks/zh-Hans-GQDMKtY4.js.map +1 -0
- package/dist/admin/index.js +1 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -2
- package/dist/admin/index.mjs.map +1 -1
- package/package.json +27 -28
- package/server/bootstrap/index.js +18 -51
- package/server/bootstrap/users-permissions-actions.js +6 -0
- package/server/config.js +29 -0
- package/server/content-types/user/index.js +0 -1
- package/server/controllers/auth.js +62 -63
- package/server/controllers/content-manager-user.js +28 -30
- package/server/controllers/role.js +17 -4
- package/server/controllers/user.js +8 -9
- package/server/controllers/validation/auth.js +81 -25
- package/server/graphql/types/index.js +1 -0
- package/server/graphql/types/me.js +1 -0
- package/server/graphql/types/user-input.js +20 -0
- package/server/middlewares/rateLimit.js +1 -1
- package/server/register.js +1 -1
- package/server/services/jwt.js +3 -3
- package/server/services/permission.js +3 -7
- package/server/services/providers-registry.js +469 -261
- package/server/services/providers.js +10 -5
- package/server/services/role.js +15 -13
- package/server/services/user.js +56 -19
- package/server/services/users-permissions.js +15 -13
- package/server/utils/index.d.ts +2 -1
- package/server/utils/sanitize/sanitizers.js +7 -3
- package/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +2 -2
- package/admin/src/pages/Roles/pages/ListPage/utils/api.js +0 -30
- package/dist/_chunks/ar-MvD8Ghac.mjs.map +0 -1
- package/dist/_chunks/ar-t5qTFaAD.js.map +0 -1
- package/dist/_chunks/cs-BMuXwxA1.mjs.map +0 -1
- package/dist/_chunks/cs-I8N4u-Sd.js.map +0 -1
- package/dist/_chunks/de-YTjtq89K.js.map +0 -1
- package/dist/_chunks/de-zs2qqc0W.mjs.map +0 -1
- package/dist/_chunks/dk-HctVBMsG.mjs.map +0 -1
- package/dist/_chunks/dk-TF-dWjzl.js.map +0 -1
- package/dist/_chunks/en-CE3wEy_c.mjs.map +0 -1
- package/dist/_chunks/en-m608rMZx.js.map +0 -1
- package/dist/_chunks/es-9381tih_.mjs.map +0 -1
- package/dist/_chunks/es-XBQsB8_9.js.map +0 -1
- package/dist/_chunks/fr-6cz3U-IF.js.map +0 -1
- package/dist/_chunks/fr-CMSc77If.mjs.map +0 -1
- package/dist/_chunks/id-RJ934rq-.js.map +0 -1
- package/dist/_chunks/id-SDuyIkZa.mjs.map +0 -1
- package/dist/_chunks/index-5-krOCaE.mjs.map +0 -1
- package/dist/_chunks/index-Aq7T7skI.js.map +0 -1
- package/dist/_chunks/index-LN8gSFZ3.mjs +0 -385
- package/dist/_chunks/index-LN8gSFZ3.mjs.map +0 -1
- package/dist/_chunks/index-RWAJu_-T.js +0 -407
- package/dist/_chunks/index-RWAJu_-T.js.map +0 -1
- package/dist/_chunks/index-SICvbeQf.mjs +0 -301
- package/dist/_chunks/index-SICvbeQf.mjs.map +0 -1
- package/dist/_chunks/index-YkMqn-9t.js.map +0 -1
- package/dist/_chunks/index-_wwOOuf_.js +0 -320
- package/dist/_chunks/index-_wwOOuf_.js.map +0 -1
- package/dist/_chunks/index-dnfs8wOQ.js.map +0 -1
- package/dist/_chunks/index-l_QWM0NZ.mjs.map +0 -1
- package/dist/_chunks/index-wiA9qAAp.mjs.map +0 -1
- package/dist/_chunks/it-YhZOlM2X.js.map +0 -1
- package/dist/_chunks/it-bvH7DgQo.mjs.map +0 -1
- package/dist/_chunks/ja-o_-JPvQv.mjs.map +0 -1
- package/dist/_chunks/ja-xssHUXFv.js.map +0 -1
- package/dist/_chunks/ko-C3mHUSJa.js.map +0 -1
- package/dist/_chunks/ko-XJbPSez_.mjs.map +0 -1
- package/dist/_chunks/ms-II5Ea73J.mjs.map +0 -1
- package/dist/_chunks/ms-d0hfg65Z.js.map +0 -1
- package/dist/_chunks/nl-TA7TfK_5.js.map +0 -1
- package/dist/_chunks/nl-vEy6TN0K.mjs.map +0 -1
- package/dist/_chunks/pl-0pUL9hdA.js.map +0 -1
- package/dist/_chunks/pl-2VowaFGt.mjs.map +0 -1
- package/dist/_chunks/pt-BR-WNOhafR4.js.map +0 -1
- package/dist/_chunks/pt-BR-sS1Xp3Jt.mjs.map +0 -1
- package/dist/_chunks/pt-Rf9W51IO.mjs.map +0 -1
- package/dist/_chunks/pt-guNR9Gax.js.map +0 -1
- package/dist/_chunks/ru-X3BMXDds.js.map +0 -1
- package/dist/_chunks/ru-qKHnd5or.mjs.map +0 -1
- package/dist/_chunks/sk-NWPw1oTN.js.map +0 -1
- package/dist/_chunks/sk-_Ryr-eTT.mjs.map +0 -1
- package/dist/_chunks/sv-76NnbB__.js.map +0 -1
- package/dist/_chunks/sv-BqzScFXS.mjs.map +0 -1
- package/dist/_chunks/th-WsknMEpq.mjs.map +0 -1
- package/dist/_chunks/th-cbppX21D.js.map +0 -1
- package/dist/_chunks/tr-6mm_Fmz7.js.map +0 -1
- package/dist/_chunks/tr-_DB1F1GW.mjs.map +0 -1
- package/dist/_chunks/uk-sI2I1ogF.js.map +0 -1
- package/dist/_chunks/uk-yxMSQAwI.mjs.map +0 -1
- package/dist/_chunks/vi-A3zJxaiI.js.map +0 -1
- package/dist/_chunks/vi-xY0zCW3d.mjs.map +0 -1
- package/dist/_chunks/zh-72SpmFXa.js.map +0 -1
- package/dist/_chunks/zh-Hans-ArWWtyP4.js.map +0 -1
- package/dist/_chunks/zh-Hans-E84cu4kP.mjs.map +0 -1
- package/dist/_chunks/zh-OFeldzbX.mjs.map +0 -1
- package/server/bootstrap/grant-config.js +0 -131
- package/strapi-server.js +0 -3
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const React = require("react");
|
|
5
|
-
const
|
|
5
|
+
const admin = require("@strapi/strapi/admin");
|
|
6
6
|
const reactRouterDom = require("react-router-dom");
|
|
7
|
-
const index = require("./index-
|
|
7
|
+
const index = require("./index-BphRo4l2.js");
|
|
8
8
|
const designSystem = require("@strapi/design-system");
|
|
9
9
|
const icons = require("@strapi/icons");
|
|
10
10
|
const formik = require("formik");
|
|
@@ -14,8 +14,8 @@ const PropTypes = require("prop-types");
|
|
|
14
14
|
const upperFirst = require("lodash/upperFirst");
|
|
15
15
|
const sortBy = require("lodash/sortBy");
|
|
16
16
|
const get = require("lodash/get");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
17
|
+
const styledComponents = require("styled-components");
|
|
18
|
+
const createNextState2 = require("immer");
|
|
19
19
|
const isEmpty = require("lodash/isEmpty");
|
|
20
20
|
const without = require("lodash/without");
|
|
21
21
|
const map = require("lodash/map");
|
|
@@ -25,8 +25,7 @@ const take = require("lodash/take");
|
|
|
25
25
|
const yup = require("yup");
|
|
26
26
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
27
27
|
function _interopNamespace(e) {
|
|
28
|
-
if (e && e.__esModule)
|
|
29
|
-
return e;
|
|
28
|
+
if (e && e.__esModule) return e;
|
|
30
29
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
31
30
|
if (e) {
|
|
32
31
|
for (const k in e) {
|
|
@@ -47,8 +46,6 @@ const PropTypes__default = /* @__PURE__ */ _interopDefault(PropTypes);
|
|
|
47
46
|
const upperFirst__default = /* @__PURE__ */ _interopDefault(upperFirst);
|
|
48
47
|
const sortBy__default = /* @__PURE__ */ _interopDefault(sortBy);
|
|
49
48
|
const get__default = /* @__PURE__ */ _interopDefault(get);
|
|
50
|
-
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
51
|
-
const produce__default = /* @__PURE__ */ _interopDefault(produce);
|
|
52
49
|
const isEmpty__default = /* @__PURE__ */ _interopDefault(isEmpty);
|
|
53
50
|
const without__default = /* @__PURE__ */ _interopDefault(without);
|
|
54
51
|
const map__default = /* @__PURE__ */ _interopDefault(map);
|
|
@@ -91,18 +88,19 @@ const init$1 = (initialState2, permissions) => {
|
|
|
91
88
|
const collapses = Object.keys(permissions).sort().map((name) => ({ name, isOpen: false }));
|
|
92
89
|
return { ...initialState2, collapses };
|
|
93
90
|
};
|
|
94
|
-
const activeCheckboxWrapperStyles =
|
|
91
|
+
const activeCheckboxWrapperStyles = styledComponents.css`
|
|
95
92
|
background: ${(props) => props.theme.colors.primary100};
|
|
96
|
-
|
|
93
|
+
|
|
94
|
+
#cog {
|
|
97
95
|
opacity: 1;
|
|
98
96
|
}
|
|
99
97
|
`;
|
|
100
|
-
const CheckboxWrapper =
|
|
98
|
+
const CheckboxWrapper = styledComponents.styled(designSystem.Box)`
|
|
101
99
|
display: flex;
|
|
102
100
|
justify-content: space-between;
|
|
103
101
|
align-items: center;
|
|
104
102
|
|
|
105
|
-
|
|
103
|
+
#cog {
|
|
106
104
|
opacity: 0;
|
|
107
105
|
path {
|
|
108
106
|
fill: ${(props) => props.theme.colors.primary600};
|
|
@@ -115,7 +113,7 @@ const CheckboxWrapper = styled__default.default(designSystem.Box)`
|
|
|
115
113
|
${activeCheckboxWrapperStyles}
|
|
116
114
|
}
|
|
117
115
|
`;
|
|
118
|
-
const Border =
|
|
116
|
+
const Border = styledComponents.styled.div`
|
|
119
117
|
flex: 1;
|
|
120
118
|
align-self: center;
|
|
121
119
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
|
|
@@ -152,22 +150,21 @@ const SubCategory = ({ subCategory }) => {
|
|
|
152
150
|
designSystem.Checkbox,
|
|
153
151
|
{
|
|
154
152
|
name: subCategory.name,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
indeterminate: hasSomeActionsSelected,
|
|
153
|
+
checked: hasSomeActionsSelected ? "indeterminate" : hasAllActionsSelected,
|
|
154
|
+
onCheckedChange: (value) => handleChangeSelectAll({ target: { name: subCategory.name, value } }),
|
|
158
155
|
children: formatMessage({ id: "app.utils.select-all", defaultMessage: "Select all" })
|
|
159
156
|
}
|
|
160
157
|
) })
|
|
161
158
|
] }),
|
|
162
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 2, style: { flex: 1 }, children: subCategory.actions.map((action) => {
|
|
159
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 2, style: { flex: 1 }, children: subCategory.actions.map((action) => {
|
|
163
160
|
const name = `${action.name}.enabled`;
|
|
164
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
161
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(CheckboxWrapper, { isActive: isActionSelected(action.name), padding: 2, hasRadius: true, children: [
|
|
165
162
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
166
163
|
designSystem.Checkbox,
|
|
167
164
|
{
|
|
168
|
-
|
|
165
|
+
checked: get__default.default(modifiedData, name, false),
|
|
169
166
|
name,
|
|
170
|
-
|
|
167
|
+
onCheckedChange: (value) => onChange({ target: { name, value } }),
|
|
171
168
|
children: action.label
|
|
172
169
|
}
|
|
173
170
|
),
|
|
@@ -178,7 +175,7 @@ const SubCategory = ({ subCategory }) => {
|
|
|
178
175
|
onClick: () => onSelectedAction(action.name),
|
|
179
176
|
style: { display: "inline-flex", alignItems: "center" },
|
|
180
177
|
children: [
|
|
181
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, {
|
|
178
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { tag: "span", children: formatMessage(
|
|
182
179
|
{
|
|
183
180
|
id: "app.utils.show-bound-route",
|
|
184
181
|
defaultMessage: "Show bound route for {route}"
|
|
@@ -187,7 +184,7 @@ const SubCategory = ({ subCategory }) => {
|
|
|
187
184
|
route: action.name
|
|
188
185
|
}
|
|
189
186
|
) }),
|
|
190
|
-
/* @__PURE__ */ jsxRuntime.jsx(icons.Cog, {})
|
|
187
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.Cog, { id: "cog", cursor: "pointer" })
|
|
191
188
|
]
|
|
192
189
|
}
|
|
193
190
|
)
|
|
@@ -239,7 +236,7 @@ const initialState$1 = {
|
|
|
239
236
|
};
|
|
240
237
|
const reducer$1 = (state, action) => (
|
|
241
238
|
// eslint-disable-next-line consistent-return
|
|
242
|
-
|
|
239
|
+
createNextState2.produce(state, (draftState) => {
|
|
243
240
|
switch (action.type) {
|
|
244
241
|
case "TOGGLE_COLLAPSE": {
|
|
245
242
|
draftState.collapses = state.collapses.map((collapse, index2) => {
|
|
@@ -258,41 +255,24 @@ const reducer$1 = (state, action) => (
|
|
|
258
255
|
const Permissions = () => {
|
|
259
256
|
const { modifiedData } = useUsersPermissions();
|
|
260
257
|
const { formatMessage } = reactIntl.useIntl();
|
|
261
|
-
const [{ collapses }
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
index: index2
|
|
269
|
-
});
|
|
270
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 1, children: collapses.map((collapse, index2) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
271
|
-
designSystem.Accordion,
|
|
272
|
-
{
|
|
273
|
-
expanded: collapse.isOpen,
|
|
274
|
-
onToggle: () => handleToggle(index2),
|
|
275
|
-
variant: index2 % 2 === 0 ? "secondary" : void 0,
|
|
276
|
-
children: [
|
|
277
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
278
|
-
designSystem.AccordionToggle,
|
|
258
|
+
const [{ collapses }] = React.useReducer(reducer$1, initialState$1, (state) => init$1(state, modifiedData));
|
|
259
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { size: "M", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 1, children: collapses.map((collapse, index2) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: collapse.name, children: [
|
|
260
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { variant: index2 % 2 === 0 ? "secondary" : void 0, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
261
|
+
designSystem.Accordion.Trigger,
|
|
262
|
+
{
|
|
263
|
+
caretPosition: "right",
|
|
264
|
+
description: formatMessage(
|
|
279
265
|
{
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
defaultMessage: "Define all allowed actions for the {name} plugin."
|
|
285
|
-
},
|
|
286
|
-
{ name: collapse.name }
|
|
287
|
-
),
|
|
288
|
-
variant: index2 % 2 ? "primary" : "secondary"
|
|
289
|
-
}
|
|
266
|
+
id: "users-permissions.Plugin.permissions.plugins.description",
|
|
267
|
+
defaultMessage: "Define all allowed actions for the {name} plugin."
|
|
268
|
+
},
|
|
269
|
+
{ name: collapse.name }
|
|
290
270
|
),
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
},
|
|
294
|
-
collapse.name
|
|
295
|
-
)) });
|
|
271
|
+
children: formatPluginName(collapse.name)
|
|
272
|
+
}
|
|
273
|
+
) }),
|
|
274
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(PermissionRow, { permissions: modifiedData[collapse.name], name: collapse.name }) })
|
|
275
|
+
] }, collapse.name)) }) });
|
|
296
276
|
};
|
|
297
277
|
const getMethodColor = (verb) => {
|
|
298
278
|
switch (verb) {
|
|
@@ -333,7 +313,7 @@ const getMethodColor = (verb) => {
|
|
|
333
313
|
}
|
|
334
314
|
}
|
|
335
315
|
};
|
|
336
|
-
const MethodBox =
|
|
316
|
+
const MethodBox = styledComponents.styled(designSystem.Box)`
|
|
337
317
|
margin: -1px;
|
|
338
318
|
border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};
|
|
339
319
|
`;
|
|
@@ -344,7 +324,7 @@ function BoundRoute({ route }) {
|
|
|
344
324
|
const [controller = "", action = ""] = title ? title.split(".") : [];
|
|
345
325
|
const colors = getMethodColor(route.method);
|
|
346
326
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
347
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "delta",
|
|
327
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "delta", tag: "h3", children: [
|
|
348
328
|
formatMessage({
|
|
349
329
|
id: "users-permissions.BoundRoute.title",
|
|
350
330
|
defaultMessage: "Bound route to"
|
|
@@ -387,7 +367,7 @@ const Policies = () => {
|
|
|
387
367
|
const pathResolved = path.slice(1).join(".");
|
|
388
368
|
const displayedRoutes = isEmpty__default.default(controllerRoutes) ? [] : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));
|
|
389
369
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
390
|
-
designSystem.
|
|
370
|
+
designSystem.Grid.Item,
|
|
391
371
|
{
|
|
392
372
|
col: 5,
|
|
393
373
|
background: "neutral150",
|
|
@@ -396,15 +376,17 @@ const Policies = () => {
|
|
|
396
376
|
paddingLeft: 7,
|
|
397
377
|
paddingRight: 7,
|
|
398
378
|
style: { minHeight: "100%" },
|
|
379
|
+
direction: "column",
|
|
380
|
+
alignItems: "stretch",
|
|
399
381
|
children: selectedAction ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: displayedRoutes.map((route, key) => (
|
|
400
382
|
// eslint-disable-next-line react/no-array-index-key
|
|
401
383
|
/* @__PURE__ */ jsxRuntime.jsx(BoundRoute, { route }, key)
|
|
402
384
|
)) }) : /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
403
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
|
385
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h3", children: formatMessage({
|
|
404
386
|
id: "users-permissions.Policies.header.title",
|
|
405
387
|
defaultMessage: "Advanced settings"
|
|
406
388
|
}) }),
|
|
407
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, {
|
|
389
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "p", textColor: "neutral600", children: formatMessage({
|
|
408
390
|
id: "users-permissions.Policies.header.hint",
|
|
409
391
|
defaultMessage: "Select the application's actions or the plugin's actions and click on the cog icon to display the bound route"
|
|
410
392
|
}) })
|
|
@@ -427,7 +409,7 @@ const initialState = {
|
|
|
427
409
|
selectedAction: "",
|
|
428
410
|
policies: []
|
|
429
411
|
};
|
|
430
|
-
const reducer = (state, action) =>
|
|
412
|
+
const reducer = (state, action) => createNextState2.produce(state, (draftState) => {
|
|
431
413
|
switch (action.type) {
|
|
432
414
|
case "ON_CHANGE": {
|
|
433
415
|
const keysLength = action.keys.length;
|
|
@@ -506,20 +488,32 @@ const UsersPermissions = React.forwardRef(({ permissions, routes }, ref) => {
|
|
|
506
488
|
onChangeSelectAll: handleChangeSelectAll,
|
|
507
489
|
onSelectedAction: handleSelectedAction
|
|
508
490
|
};
|
|
509
|
-
return /* @__PURE__ */ jsxRuntime.jsx(UsersPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid, { gap: 0, shadow: "filterShadow", hasRadius: true, background: "neutral0", children: [
|
|
510
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
491
|
+
return /* @__PURE__ */ jsxRuntime.jsx(UsersPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 0, shadow: "filterShadow", hasRadius: true, background: "neutral0", children: [
|
|
492
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
493
|
+
designSystem.Grid.Item,
|
|
494
|
+
{
|
|
495
|
+
col: 7,
|
|
496
|
+
paddingTop: 6,
|
|
497
|
+
paddingBottom: 6,
|
|
498
|
+
paddingLeft: 7,
|
|
499
|
+
paddingRight: 7,
|
|
500
|
+
direction: "column",
|
|
501
|
+
alignItems: "stretch",
|
|
502
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
503
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
504
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
505
|
+
id: index.getTrad("Plugins.header.title"),
|
|
506
|
+
defaultMessage: "Permissions"
|
|
507
|
+
}) }),
|
|
508
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "p", textColor: "neutral600", children: formatMessage({
|
|
509
|
+
id: index.getTrad("Plugins.header.description"),
|
|
510
|
+
defaultMessage: "Only actions bound by a route are listed below."
|
|
511
|
+
}) })
|
|
512
|
+
] }),
|
|
513
|
+
/* @__PURE__ */ jsxRuntime.jsx(Permissions, {})
|
|
514
|
+
] })
|
|
515
|
+
}
|
|
516
|
+
),
|
|
523
517
|
/* @__PURE__ */ jsxRuntime.jsx(Policies, {})
|
|
524
518
|
] }) });
|
|
525
519
|
});
|
|
@@ -529,8 +523,8 @@ UsersPermissions.propTypes = {
|
|
|
529
523
|
};
|
|
530
524
|
const UsersPermissions$1 = React.memo(UsersPermissions);
|
|
531
525
|
const createRoleSchema = yup__namespace.object().shape({
|
|
532
|
-
name: yup__namespace.string().required(
|
|
533
|
-
description: yup__namespace.string().required(
|
|
526
|
+
name: yup__namespace.string().required(admin.translatedErrors.required.id),
|
|
527
|
+
description: yup__namespace.string().required(admin.translatedErrors.required.id)
|
|
534
528
|
});
|
|
535
529
|
const cleanPermissions = (permissions) => Object.keys(permissions).reduce((acc, current) => {
|
|
536
530
|
const currentPermission = permissions[current].controllers;
|
|
@@ -548,9 +542,9 @@ const cleanPermissions = (permissions) => Object.keys(permissions).reduce((acc,
|
|
|
548
542
|
return acc;
|
|
549
543
|
}, {});
|
|
550
544
|
const usePlugins = () => {
|
|
551
|
-
const toggleNotification =
|
|
552
|
-
const { get: get2 } =
|
|
553
|
-
const { formatAPIError } =
|
|
545
|
+
const { toggleNotification } = admin.useNotification();
|
|
546
|
+
const { get: get2 } = admin.useFetchClient();
|
|
547
|
+
const { formatAPIError } = admin.useAPIErrorHandler(index.getTrad);
|
|
554
548
|
const [
|
|
555
549
|
{
|
|
556
550
|
data: permissions,
|
|
@@ -585,7 +579,7 @@ const usePlugins = () => {
|
|
|
585
579
|
React.useEffect(() => {
|
|
586
580
|
if (permissionsError) {
|
|
587
581
|
toggleNotification({
|
|
588
|
-
type: "
|
|
582
|
+
type: "danger",
|
|
589
583
|
message: formatAPIError(permissionsError)
|
|
590
584
|
});
|
|
591
585
|
}
|
|
@@ -593,7 +587,7 @@ const usePlugins = () => {
|
|
|
593
587
|
React.useEffect(() => {
|
|
594
588
|
if (routesError) {
|
|
595
589
|
toggleNotification({
|
|
596
|
-
type: "
|
|
590
|
+
type: "danger",
|
|
597
591
|
message: formatAPIError(routesError)
|
|
598
592
|
});
|
|
599
593
|
}
|
|
@@ -611,43 +605,43 @@ const usePlugins = () => {
|
|
|
611
605
|
};
|
|
612
606
|
const CreatePage = () => {
|
|
613
607
|
const { formatMessage } = reactIntl.useIntl();
|
|
614
|
-
const toggleNotification =
|
|
615
|
-
const
|
|
616
|
-
const { lockApp, unlockApp } = helperPlugin.useOverlayBlocker();
|
|
608
|
+
const { toggleNotification } = admin.useNotification();
|
|
609
|
+
const navigate = reactRouterDom.useNavigate();
|
|
617
610
|
const { isLoading: isLoadingPlugins, permissions, routes } = usePlugins();
|
|
618
|
-
const { trackUsage } =
|
|
611
|
+
const { trackUsage } = admin.useTracking();
|
|
619
612
|
const permissionsRef = React__namespace.useRef();
|
|
620
|
-
const { post } =
|
|
613
|
+
const { post } = admin.useFetchClient();
|
|
621
614
|
const mutation = reactQuery.useMutation((body) => post(`/users-permissions/roles`, body), {
|
|
622
615
|
onError() {
|
|
623
616
|
toggleNotification({
|
|
624
|
-
type: "
|
|
625
|
-
message: {
|
|
617
|
+
type: "danger",
|
|
618
|
+
message: formatMessage({
|
|
626
619
|
id: "notification.error",
|
|
627
620
|
defaultMessage: "An error occurred"
|
|
628
|
-
}
|
|
621
|
+
})
|
|
629
622
|
});
|
|
630
623
|
},
|
|
631
624
|
onSuccess() {
|
|
632
625
|
trackUsage("didCreateRole");
|
|
633
626
|
toggleNotification({
|
|
634
627
|
type: "success",
|
|
635
|
-
message: {
|
|
628
|
+
message: formatMessage({
|
|
636
629
|
id: index.getTrad("Settings.roles.created"),
|
|
637
630
|
defaultMessage: "Role created"
|
|
638
|
-
}
|
|
631
|
+
})
|
|
639
632
|
});
|
|
640
|
-
|
|
633
|
+
navigate(-1);
|
|
641
634
|
}
|
|
642
635
|
});
|
|
643
636
|
const handleCreateRoleSubmit = async (data) => {
|
|
644
|
-
lockApp();
|
|
645
637
|
const permissions2 = permissionsRef.current.getPermissions();
|
|
646
638
|
await mutation.mutate({ ...data, ...permissions2, users: [] });
|
|
647
|
-
unlockApp();
|
|
648
639
|
};
|
|
649
640
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { children: [
|
|
650
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
641
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
|
|
642
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
643
|
+
{ name: "Roles" }
|
|
644
|
+
) }),
|
|
651
645
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
652
646
|
formik.Formik,
|
|
653
647
|
{
|
|
@@ -655,9 +649,9 @@ const CreatePage = () => {
|
|
|
655
649
|
initialValues: { name: "", description: "" },
|
|
656
650
|
onSubmit: handleCreateRoleSubmit,
|
|
657
651
|
validationSchema: createRoleSchema,
|
|
658
|
-
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
652
|
+
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { noValidate: true, onSubmit: handleSubmit, children: [
|
|
659
653
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
660
|
-
|
|
654
|
+
admin.Layouts.Header,
|
|
661
655
|
{
|
|
662
656
|
primaryAction: !isLoadingPlugins && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", loading: mutation.isLoading, startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}), children: formatMessage({
|
|
663
657
|
id: "global.save",
|
|
@@ -673,7 +667,7 @@ const CreatePage = () => {
|
|
|
673
667
|
})
|
|
674
668
|
}
|
|
675
669
|
),
|
|
676
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
670
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Layouts.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
677
671
|
designSystem.Flex,
|
|
678
672
|
{
|
|
679
673
|
background: "neutral0",
|
|
@@ -688,40 +682,44 @@ const CreatePage = () => {
|
|
|
688
682
|
shadow: "filterShadow",
|
|
689
683
|
children: [
|
|
690
684
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", children: [
|
|
691
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
|
685
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
692
686
|
id: index.getTrad("EditPage.form.roles"),
|
|
693
687
|
defaultMessage: "Role details"
|
|
694
688
|
}) }),
|
|
695
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid, { gap: 4, children: [
|
|
696
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
697
|
-
designSystem.
|
|
689
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, children: [
|
|
690
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
691
|
+
designSystem.Field.Root,
|
|
698
692
|
{
|
|
699
693
|
name: "name",
|
|
700
|
-
value: values.name || "",
|
|
701
|
-
onChange: handleChange,
|
|
702
|
-
label: formatMessage({
|
|
703
|
-
id: "global.name",
|
|
704
|
-
defaultMessage: "Name"
|
|
705
|
-
}),
|
|
706
694
|
error: errors?.name ? formatMessage({ id: errors.name, defaultMessage: "Name is required" }) : false,
|
|
707
|
-
required: true
|
|
695
|
+
required: true,
|
|
696
|
+
children: [
|
|
697
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
698
|
+
id: "global.name",
|
|
699
|
+
defaultMessage: "Name"
|
|
700
|
+
}) }),
|
|
701
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.TextInput, { value: values.name || "", onChange: handleChange }),
|
|
702
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
703
|
+
]
|
|
708
704
|
}
|
|
709
705
|
) }),
|
|
710
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
711
|
-
designSystem.
|
|
706
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
707
|
+
designSystem.Field.Root,
|
|
712
708
|
{
|
|
713
|
-
|
|
714
|
-
value: values.description || "",
|
|
715
|
-
onChange: handleChange,
|
|
716
|
-
label: formatMessage({
|
|
717
|
-
id: "global.description",
|
|
718
|
-
defaultMessage: "Description"
|
|
719
|
-
}),
|
|
709
|
+
name: "description",
|
|
720
710
|
error: errors?.description ? formatMessage({
|
|
721
711
|
id: errors.description,
|
|
722
712
|
defaultMessage: "Description is required"
|
|
723
713
|
}) : false,
|
|
724
|
-
required: true
|
|
714
|
+
required: true,
|
|
715
|
+
children: [
|
|
716
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
717
|
+
id: "global.description",
|
|
718
|
+
defaultMessage: "Description"
|
|
719
|
+
}) }),
|
|
720
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Textarea, { value: values.description || "", onChange: handleChange }),
|
|
721
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
722
|
+
]
|
|
725
723
|
}
|
|
726
724
|
) })
|
|
727
725
|
] })
|
|
@@ -742,15 +740,14 @@ const CreatePage = () => {
|
|
|
742
740
|
)
|
|
743
741
|
] });
|
|
744
742
|
};
|
|
745
|
-
const ProtectedRolesCreatePage = () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
743
|
+
const ProtectedRolesCreatePage = () => /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.createRole, children: /* @__PURE__ */ jsxRuntime.jsx(CreatePage, {}) });
|
|
746
744
|
const EditPage = () => {
|
|
747
745
|
const { formatMessage } = reactIntl.useIntl();
|
|
748
|
-
const toggleNotification =
|
|
749
|
-
const { lockApp, unlockApp } = helperPlugin.useOverlayBlocker();
|
|
746
|
+
const { toggleNotification } = admin.useNotification();
|
|
750
747
|
const {
|
|
751
748
|
params: { id }
|
|
752
|
-
} = reactRouterDom.
|
|
753
|
-
const { get: get2 } =
|
|
749
|
+
} = reactRouterDom.useMatch(`/settings/users-permissions/roles/:id`);
|
|
750
|
+
const { get: get2 } = admin.useFetchClient();
|
|
754
751
|
const { isLoading: isLoadingPlugins, routes } = usePlugins();
|
|
755
752
|
const {
|
|
756
753
|
data: role,
|
|
@@ -763,37 +760,38 @@ const EditPage = () => {
|
|
|
763
760
|
return role2;
|
|
764
761
|
});
|
|
765
762
|
const permissionsRef = React__namespace.useRef();
|
|
766
|
-
const { put } =
|
|
767
|
-
const { formatAPIError } =
|
|
763
|
+
const { put } = admin.useFetchClient();
|
|
764
|
+
const { formatAPIError } = admin.useAPIErrorHandler();
|
|
768
765
|
const mutation = reactQuery.useMutation((body) => put(`/users-permissions/roles/${id}`, body), {
|
|
769
766
|
onError(error) {
|
|
770
767
|
toggleNotification({
|
|
771
|
-
type: "
|
|
768
|
+
type: "danger",
|
|
772
769
|
message: formatAPIError(error)
|
|
773
770
|
});
|
|
774
771
|
},
|
|
775
772
|
async onSuccess() {
|
|
776
773
|
toggleNotification({
|
|
777
774
|
type: "success",
|
|
778
|
-
message: {
|
|
775
|
+
message: formatMessage({
|
|
779
776
|
id: index.getTrad("Settings.roles.created"),
|
|
780
777
|
defaultMessage: "Role edited"
|
|
781
|
-
}
|
|
778
|
+
})
|
|
782
779
|
});
|
|
783
780
|
await refetchRole();
|
|
784
781
|
}
|
|
785
782
|
});
|
|
786
783
|
const handleEditRoleSubmit = async (data) => {
|
|
787
|
-
lockApp();
|
|
788
784
|
const permissions = permissionsRef.current.getPermissions();
|
|
789
785
|
await mutation.mutate({ ...data, ...permissions, users: [] });
|
|
790
|
-
unlockApp();
|
|
791
786
|
};
|
|
792
787
|
if (isLoadingRole) {
|
|
793
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
788
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Loading, {});
|
|
794
789
|
}
|
|
795
790
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { children: [
|
|
796
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
791
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
|
|
792
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
793
|
+
{ name: "Roles" }
|
|
794
|
+
) }),
|
|
797
795
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
798
796
|
formik.Formik,
|
|
799
797
|
{
|
|
@@ -801,11 +799,11 @@ const EditPage = () => {
|
|
|
801
799
|
initialValues: { name: role.name, description: role.description },
|
|
802
800
|
onSubmit: handleEditRoleSubmit,
|
|
803
801
|
validationSchema: createRoleSchema,
|
|
804
|
-
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
802
|
+
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { noValidate: true, onSubmit: handleSubmit, children: [
|
|
805
803
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
806
|
-
|
|
804
|
+
admin.Layouts.Header,
|
|
807
805
|
{
|
|
808
|
-
primaryAction: !isLoadingPlugins
|
|
806
|
+
primaryAction: !isLoadingPlugins ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
809
807
|
designSystem.Button,
|
|
810
808
|
{
|
|
811
809
|
disabled: role.code === "strapi-super-admin",
|
|
@@ -817,16 +815,13 @@ const EditPage = () => {
|
|
|
817
815
|
defaultMessage: "Save"
|
|
818
816
|
})
|
|
819
817
|
}
|
|
820
|
-
),
|
|
818
|
+
) : null,
|
|
821
819
|
title: role.name,
|
|
822
820
|
subtitle: role.description,
|
|
823
|
-
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(
|
|
824
|
-
id: "global.back",
|
|
825
|
-
defaultMessage: "Back"
|
|
826
|
-
}) })
|
|
821
|
+
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(admin.BackButton, { fallback: ".." })
|
|
827
822
|
}
|
|
828
823
|
),
|
|
829
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
824
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Layouts.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
830
825
|
designSystem.Flex,
|
|
831
826
|
{
|
|
832
827
|
background: "neutral0",
|
|
@@ -841,40 +836,47 @@ const EditPage = () => {
|
|
|
841
836
|
shadow: "filterShadow",
|
|
842
837
|
children: [
|
|
843
838
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 4, children: [
|
|
844
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
|
839
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
845
840
|
id: index.getTrad("EditPage.form.roles"),
|
|
846
841
|
defaultMessage: "Role details"
|
|
847
842
|
}) }),
|
|
848
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid, { gap: 4, children: [
|
|
849
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
850
|
-
designSystem.
|
|
843
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, children: [
|
|
844
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
845
|
+
designSystem.Field.Root,
|
|
851
846
|
{
|
|
852
847
|
name: "name",
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
848
|
+
error: errors?.name ? formatMessage({
|
|
849
|
+
id: errors.name,
|
|
850
|
+
defaultMessage: "Name is required"
|
|
851
|
+
}) : false,
|
|
852
|
+
required: true,
|
|
853
|
+
children: [
|
|
854
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
855
|
+
id: "global.name",
|
|
856
|
+
defaultMessage: "Name"
|
|
857
|
+
}) }),
|
|
858
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.TextInput, { value: values.name || "", onChange: handleChange }),
|
|
859
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
860
|
+
]
|
|
861
861
|
}
|
|
862
862
|
) }),
|
|
863
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
864
|
-
designSystem.
|
|
863
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
864
|
+
designSystem.Field.Root,
|
|
865
865
|
{
|
|
866
|
-
|
|
867
|
-
value: values.description || "",
|
|
868
|
-
onChange: handleChange,
|
|
869
|
-
label: formatMessage({
|
|
870
|
-
id: "global.description",
|
|
871
|
-
defaultMessage: "Description"
|
|
872
|
-
}),
|
|
866
|
+
name: "description",
|
|
873
867
|
error: errors?.description ? formatMessage({
|
|
874
868
|
id: errors.description,
|
|
875
869
|
defaultMessage: "Description is required"
|
|
876
870
|
}) : false,
|
|
877
|
-
required: true
|
|
871
|
+
required: true,
|
|
872
|
+
children: [
|
|
873
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
874
|
+
id: "global.description",
|
|
875
|
+
defaultMessage: "Description"
|
|
876
|
+
}) }),
|
|
877
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Textarea, { value: values.description || "", onChange: handleChange }),
|
|
878
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
879
|
+
]
|
|
878
880
|
}
|
|
879
881
|
) })
|
|
880
882
|
] })
|
|
@@ -895,18 +897,18 @@ const EditPage = () => {
|
|
|
895
897
|
)
|
|
896
898
|
] });
|
|
897
899
|
};
|
|
898
|
-
const ProtectedRolesEditPage = () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
899
|
-
const EditLink =
|
|
900
|
+
const ProtectedRolesEditPage = () => /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.updateRole, children: /* @__PURE__ */ jsxRuntime.jsx(EditPage, {}) });
|
|
901
|
+
const EditLink = styledComponents.styled(designSystem.Link)`
|
|
900
902
|
align-items: center;
|
|
901
|
-
height:
|
|
903
|
+
height: 3.2rem;
|
|
904
|
+
width: 3.2rem;
|
|
902
905
|
display: flex;
|
|
903
906
|
justify-content: center;
|
|
904
|
-
padding: ${({ theme }) => `${theme.spaces[2]}
|
|
905
|
-
width: ${helperPlugin.pxToRem(32)};
|
|
907
|
+
padding: ${({ theme }) => `${theme.spaces[2]}`};
|
|
906
908
|
|
|
907
909
|
svg {
|
|
908
|
-
height:
|
|
909
|
-
width:
|
|
910
|
+
height: 1.6rem;
|
|
911
|
+
width: 1.6rem;
|
|
910
912
|
|
|
911
913
|
path {
|
|
912
914
|
fill: ${({ theme }) => theme.colors.neutral500};
|
|
@@ -922,19 +924,16 @@ const EditLink = styled__default.default(designSystem.Link)`
|
|
|
922
924
|
}
|
|
923
925
|
}
|
|
924
926
|
`;
|
|
925
|
-
const TableBody = ({ sortedRoles, canDelete,
|
|
927
|
+
const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelete }) => {
|
|
926
928
|
const { formatMessage } = reactIntl.useIntl();
|
|
927
|
-
const
|
|
929
|
+
const navigate = reactRouterDom.useNavigate();
|
|
928
930
|
const [showConfirmDelete, setShowConfirmDelete] = onDelete;
|
|
929
931
|
const checkCanDeleteRole = (role) => canDelete && !["public", "authenticated"].includes(role.type);
|
|
930
932
|
const handleClickDelete = (id) => {
|
|
931
933
|
setRoleToDelete(id);
|
|
932
934
|
setShowConfirmDelete(!showConfirmDelete);
|
|
933
935
|
};
|
|
934
|
-
|
|
935
|
-
push(`/settings/users-permissions/roles/${id}`);
|
|
936
|
-
};
|
|
937
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { ...helperPlugin.onRowClick({ fn: () => handleClickEdit(role.id) }), children: [
|
|
936
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { cursor: "pointer", onClick: () => navigate(role.id.toString()), children: [
|
|
938
937
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "20%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: role.name }) }),
|
|
939
938
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "50%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: role.description }) }),
|
|
940
939
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "30%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage(
|
|
@@ -944,83 +943,59 @@ const TableBody = ({ sortedRoles, canDelete, permissions, setRoleToDelete, onDel
|
|
|
944
943
|
},
|
|
945
944
|
{ number: role.nb_users }
|
|
946
945
|
) }) }),
|
|
947
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "end",
|
|
948
|
-
|
|
946
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "end", onClick: (e) => e.stopPropagation(), children: [
|
|
947
|
+
canUpdate ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
949
948
|
EditLink,
|
|
950
949
|
{
|
|
951
|
-
|
|
950
|
+
tag: reactRouterDom.NavLink,
|
|
951
|
+
to: role.id.toString(),
|
|
952
952
|
"aria-label": formatMessage(
|
|
953
953
|
{ id: "app.component.table.edit", defaultMessage: "Edit {target}" },
|
|
954
954
|
{ target: `${role.name}` }
|
|
955
955
|
),
|
|
956
956
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
|
|
957
957
|
}
|
|
958
|
-
)
|
|
959
|
-
checkCanDeleteRole(role) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
958
|
+
) : null,
|
|
959
|
+
checkCanDeleteRole(role) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
960
960
|
designSystem.IconButton,
|
|
961
961
|
{
|
|
962
|
-
onClick: () => handleClickDelete(role.id),
|
|
963
|
-
|
|
964
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {}),
|
|
962
|
+
onClick: () => handleClickDelete(role.id.toString()),
|
|
963
|
+
variant: "ghost",
|
|
965
964
|
label: formatMessage(
|
|
966
965
|
{ id: "global.delete-target", defaultMessage: "Delete {target}" },
|
|
967
966
|
{ target: `${role.name}` }
|
|
968
|
-
)
|
|
967
|
+
),
|
|
968
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
|
|
969
969
|
}
|
|
970
|
-
)
|
|
970
|
+
)
|
|
971
971
|
] }) })
|
|
972
972
|
] }, role.name)) });
|
|
973
973
|
};
|
|
974
974
|
TableBody.defaultProps = {
|
|
975
|
-
canDelete: false
|
|
975
|
+
canDelete: false,
|
|
976
|
+
canUpdate: false
|
|
976
977
|
};
|
|
977
978
|
TableBody.propTypes = {
|
|
978
979
|
onDelete: PropTypes__default.default.array.isRequired,
|
|
979
|
-
permissions: PropTypes__default.default.object.isRequired,
|
|
980
980
|
setRoleToDelete: PropTypes__default.default.func.isRequired,
|
|
981
981
|
sortedRoles: PropTypes__default.default.array.isRequired,
|
|
982
|
-
canDelete: PropTypes__default.default.bool
|
|
983
|
-
|
|
984
|
-
const fetchData = async (toggleNotification, notifyStatus) => {
|
|
985
|
-
try {
|
|
986
|
-
const { get: get2 } = helperPlugin.getFetchClient();
|
|
987
|
-
const { data } = await get2("/users-permissions/roles");
|
|
988
|
-
notifyStatus("The roles have loaded successfully");
|
|
989
|
-
return data;
|
|
990
|
-
} catch (err) {
|
|
991
|
-
toggleNotification({
|
|
992
|
-
type: "warning",
|
|
993
|
-
message: { id: "notification.error" }
|
|
994
|
-
});
|
|
995
|
-
throw new Error(err);
|
|
996
|
-
}
|
|
997
|
-
};
|
|
998
|
-
const deleteData = async (id, toggleNotification) => {
|
|
999
|
-
try {
|
|
1000
|
-
const { del } = helperPlugin.getFetchClient();
|
|
1001
|
-
await del(`/users-permissions/roles/${id}`);
|
|
1002
|
-
} catch (error) {
|
|
1003
|
-
toggleNotification({
|
|
1004
|
-
type: "warning",
|
|
1005
|
-
message: { id: "notification.error", defaultMessage: "An error occured" }
|
|
1006
|
-
});
|
|
1007
|
-
}
|
|
982
|
+
canDelete: PropTypes__default.default.bool,
|
|
983
|
+
canUpdate: PropTypes__default.default.bool
|
|
1008
984
|
};
|
|
1009
985
|
const RolesListPage = () => {
|
|
1010
|
-
const { trackUsage } =
|
|
986
|
+
const { trackUsage } = admin.useTracking();
|
|
1011
987
|
const { formatMessage, locale } = reactIntl.useIntl();
|
|
1012
|
-
const toggleNotification =
|
|
988
|
+
const { toggleNotification } = admin.useNotification();
|
|
1013
989
|
const { notifyStatus } = designSystem.useNotifyAT();
|
|
1014
|
-
const [{ query }] =
|
|
990
|
+
const [{ query }] = admin.useQueryParams();
|
|
1015
991
|
const _q = query?._q || "";
|
|
1016
992
|
const [showConfirmDelete, setShowConfirmDelete] = React.useState(false);
|
|
1017
|
-
const [isConfirmButtonLoading, setIsConfirmButtonLoading] = React.useState(false);
|
|
1018
993
|
const [roleToDelete, setRoleToDelete] = React.useState();
|
|
1019
|
-
|
|
994
|
+
const { del, get: get2 } = admin.useFetchClient();
|
|
1020
995
|
const {
|
|
1021
996
|
isLoading: isLoadingForPermissions,
|
|
1022
|
-
allowedActions: { canRead, canDelete }
|
|
1023
|
-
} =
|
|
997
|
+
allowedActions: { canRead, canDelete, canCreate, canUpdate }
|
|
998
|
+
} = admin.useRBAC({
|
|
1024
999
|
create: index.PERMISSIONS.createRole,
|
|
1025
1000
|
read: index.PERMISSIONS.readRoles,
|
|
1026
1001
|
update: index.PERMISSIONS.updateRole,
|
|
@@ -1031,20 +1006,43 @@ const RolesListPage = () => {
|
|
|
1031
1006
|
data: { roles },
|
|
1032
1007
|
isFetching,
|
|
1033
1008
|
refetch
|
|
1034
|
-
} = reactQuery.useQuery("get-roles", () => fetchData(toggleNotification, notifyStatus), {
|
|
1009
|
+
} = reactQuery.useQuery("get-roles", () => fetchData(toggleNotification, formatMessage, notifyStatus), {
|
|
1035
1010
|
initialData: {},
|
|
1036
1011
|
enabled: canRead
|
|
1037
1012
|
});
|
|
1038
|
-
const {
|
|
1013
|
+
const { contains } = designSystem.useFilter(locale, {
|
|
1039
1014
|
sensitivity: "base"
|
|
1040
1015
|
});
|
|
1041
|
-
const formatter =
|
|
1016
|
+
const formatter = designSystem.useCollator(locale, {
|
|
1042
1017
|
sensitivity: "base"
|
|
1043
1018
|
});
|
|
1044
|
-
const isLoading = isLoadingForData || isFetching;
|
|
1019
|
+
const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;
|
|
1045
1020
|
const handleShowConfirmDelete = () => {
|
|
1046
1021
|
setShowConfirmDelete(!showConfirmDelete);
|
|
1047
1022
|
};
|
|
1023
|
+
const deleteData = async (id, formatMessage2, toggleNotification2) => {
|
|
1024
|
+
try {
|
|
1025
|
+
await del(`/users-permissions/roles/${id}`);
|
|
1026
|
+
} catch (error) {
|
|
1027
|
+
toggleNotification2({
|
|
1028
|
+
type: "danger",
|
|
1029
|
+
message: formatMessage2({ id: "notification.error", defaultMessage: "An error occured" })
|
|
1030
|
+
});
|
|
1031
|
+
}
|
|
1032
|
+
};
|
|
1033
|
+
const fetchData = async (toggleNotification2, formatMessage2, notifyStatus2) => {
|
|
1034
|
+
try {
|
|
1035
|
+
const { data } = await get2("/users-permissions/roles");
|
|
1036
|
+
notifyStatus2("The roles have loaded successfully");
|
|
1037
|
+
return data;
|
|
1038
|
+
} catch (err) {
|
|
1039
|
+
toggleNotification2({
|
|
1040
|
+
type: "danger",
|
|
1041
|
+
message: formatMessage2({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1042
|
+
});
|
|
1043
|
+
throw new Error(err);
|
|
1044
|
+
}
|
|
1045
|
+
};
|
|
1048
1046
|
const emptyLayout = {
|
|
1049
1047
|
roles: {
|
|
1050
1048
|
id: index.getTrad("Roles.empty"),
|
|
@@ -1059,28 +1057,32 @@ const RolesListPage = () => {
|
|
|
1059
1057
|
id: "global.roles",
|
|
1060
1058
|
defaultMessage: "Roles"
|
|
1061
1059
|
});
|
|
1062
|
-
const deleteMutation = reactQuery.useMutation((id) => deleteData(id, toggleNotification), {
|
|
1060
|
+
const deleteMutation = reactQuery.useMutation((id) => deleteData(id, formatMessage, toggleNotification), {
|
|
1063
1061
|
async onSuccess() {
|
|
1064
1062
|
await refetch();
|
|
1065
1063
|
}
|
|
1066
1064
|
});
|
|
1067
1065
|
const handleConfirmDelete = async () => {
|
|
1068
|
-
setIsConfirmButtonLoading(true);
|
|
1069
1066
|
await deleteMutation.mutateAsync(roleToDelete);
|
|
1070
1067
|
setShowConfirmDelete(!showConfirmDelete);
|
|
1071
|
-
setIsConfirmButtonLoading(false);
|
|
1072
1068
|
};
|
|
1073
|
-
const sortedRoles = (roles || []).filter((role) =>
|
|
1069
|
+
const sortedRoles = (roles || []).filter((role) => contains(role.name, _q) || contains(role.description, _q)).sort(
|
|
1074
1070
|
(a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)
|
|
1075
1071
|
);
|
|
1076
1072
|
const emptyContent = _q && !sortedRoles.length ? "search" : "roles";
|
|
1077
1073
|
const colCount = 4;
|
|
1078
1074
|
const rowCount = (roles?.length || 0) + 1;
|
|
1079
|
-
|
|
1080
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1081
|
-
|
|
1075
|
+
if (isLoading) {
|
|
1076
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Loading, {});
|
|
1077
|
+
}
|
|
1078
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(admin.Layouts.Root, { children: [
|
|
1079
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
|
|
1080
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
1081
|
+
{ name: pageTitle }
|
|
1082
|
+
) }),
|
|
1083
|
+
/* @__PURE__ */ jsxRuntime.jsxs(admin.Page.Main, { children: [
|
|
1082
1084
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1083
|
-
|
|
1085
|
+
admin.Layouts.Header,
|
|
1084
1086
|
{
|
|
1085
1087
|
title: formatMessage({
|
|
1086
1088
|
id: "global.roles",
|
|
@@ -1090,10 +1092,11 @@ const RolesListPage = () => {
|
|
|
1090
1092
|
id: "Settings.roles.list.description",
|
|
1091
1093
|
defaultMessage: "List of roles"
|
|
1092
1094
|
}),
|
|
1093
|
-
primaryAction:
|
|
1094
|
-
|
|
1095
|
+
primaryAction: canCreate ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1096
|
+
designSystem.LinkButton,
|
|
1095
1097
|
{
|
|
1096
|
-
to: "
|
|
1098
|
+
to: "new",
|
|
1099
|
+
tag: reactRouterDom.NavLink,
|
|
1097
1100
|
onClick: () => trackUsage("willCreateRole"),
|
|
1098
1101
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
|
|
1099
1102
|
size: "S",
|
|
@@ -1102,14 +1105,14 @@ const RolesListPage = () => {
|
|
|
1102
1105
|
defaultMessage: "Add new role"
|
|
1103
1106
|
})
|
|
1104
1107
|
}
|
|
1105
|
-
)
|
|
1108
|
+
) : null
|
|
1106
1109
|
}
|
|
1107
1110
|
),
|
|
1108
1111
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1109
|
-
|
|
1112
|
+
admin.Layouts.Action,
|
|
1110
1113
|
{
|
|
1111
1114
|
startActions: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1112
|
-
|
|
1115
|
+
admin.SearchInput,
|
|
1113
1116
|
{
|
|
1114
1117
|
label: formatMessage({
|
|
1115
1118
|
id: "app.component.search.label",
|
|
@@ -1119,9 +1122,8 @@ const RolesListPage = () => {
|
|
|
1119
1122
|
)
|
|
1120
1123
|
}
|
|
1121
1124
|
),
|
|
1122
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1123
|
-
!canRead && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1124
|
-
(isLoading || isLoadingForPermissions) && /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}),
|
|
1125
|
+
/* @__PURE__ */ jsxRuntime.jsxs(admin.Layouts.Content, { children: [
|
|
1126
|
+
!canRead && /* @__PURE__ */ jsxRuntime.jsx(admin.Page.NoPermissions, {}),
|
|
1125
1127
|
canRead && sortedRoles && sortedRoles?.length ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Table, { colCount, rowCount, children: [
|
|
1126
1128
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Thead, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
1127
1129
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }),
|
|
@@ -1143,49 +1145,27 @@ const RolesListPage = () => {
|
|
|
1143
1145
|
{
|
|
1144
1146
|
sortedRoles,
|
|
1145
1147
|
canDelete,
|
|
1148
|
+
canUpdate,
|
|
1146
1149
|
permissions: index.PERMISSIONS,
|
|
1147
1150
|
setRoleToDelete,
|
|
1148
1151
|
onDelete: [showConfirmDelete, setShowConfirmDelete]
|
|
1149
1152
|
}
|
|
1150
1153
|
)
|
|
1151
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1154
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.EmptyStateLayout, { content: formatMessage(emptyLayout[emptyContent]) })
|
|
1152
1155
|
] }),
|
|
1153
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1154
|
-
helperPlugin.ConfirmDialog,
|
|
1155
|
-
{
|
|
1156
|
-
isConfirmButtonLoading,
|
|
1157
|
-
onConfirm: handleConfirmDelete,
|
|
1158
|
-
onToggleDialog: handleShowConfirmDelete,
|
|
1159
|
-
isOpen: showConfirmDelete
|
|
1160
|
-
}
|
|
1161
|
-
)
|
|
1156
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Root, { open: showConfirmDelete, onOpenChange: handleShowConfirmDelete, children: /* @__PURE__ */ jsxRuntime.jsx(admin.ConfirmDialog, { onConfirm: handleConfirmDelete }) })
|
|
1162
1157
|
] })
|
|
1163
1158
|
] });
|
|
1164
1159
|
};
|
|
1165
1160
|
const ProtectedRolesListPage = () => {
|
|
1166
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1161
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.accessRoles, children: /* @__PURE__ */ jsxRuntime.jsx(RolesListPage, {}) });
|
|
1167
1162
|
};
|
|
1168
1163
|
const Roles = () => {
|
|
1169
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1170
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
path: "/settings/users-permissions/roles/new",
|
|
1174
|
-
component: ProtectedRolesCreatePage,
|
|
1175
|
-
exact: true
|
|
1176
|
-
}
|
|
1177
|
-
),
|
|
1178
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1179
|
-
reactRouterDom.Route,
|
|
1180
|
-
{
|
|
1181
|
-
path: "/settings/users-permissions/roles/:id",
|
|
1182
|
-
component: ProtectedRolesEditPage,
|
|
1183
|
-
exact: true
|
|
1184
|
-
}
|
|
1185
|
-
),
|
|
1186
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: "/settings/users-permissions/roles", component: ProtectedRolesListPage, exact: true }),
|
|
1187
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: "", component: helperPlugin.AnErrorOccurred })
|
|
1164
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.accessRoles, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Routes, { children: [
|
|
1165
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { index: true, element: /* @__PURE__ */ jsxRuntime.jsx(ProtectedRolesListPage, {}) }),
|
|
1166
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: "new", element: /* @__PURE__ */ jsxRuntime.jsx(ProtectedRolesCreatePage, {}) }),
|
|
1167
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: ":id", element: /* @__PURE__ */ jsxRuntime.jsx(ProtectedRolesEditPage, {}) })
|
|
1188
1168
|
] }) });
|
|
1189
1169
|
};
|
|
1190
1170
|
exports.default = Roles;
|
|
1191
|
-
//# sourceMappingURL=index-
|
|
1171
|
+
//# sourceMappingURL=index-iJPHXbGD.js.map
|