@strapi/plugin-users-permissions 0.0.0-next.f4ff842a3cb7b83db540bee67554b704e042b042 → 0.0.0-next.f5312617ca16b870c2bf1adcea2c69b676979e29
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-rL_BoFHz.js → index-BH6NqE8I.js} +47 -51
- package/dist/_chunks/index-BH6NqE8I.js.map +1 -0
- package/dist/_chunks/index-C3i__jX-.js +281 -0
- package/dist/_chunks/index-C3i__jX-.js.map +1 -0
- package/dist/_chunks/{index--ch5E4_K.js → index-CFzpNgIL.js} +108 -106
- package/dist/_chunks/index-CFzpNgIL.js.map +1 -0
- package/dist/_chunks/index-CJUWqtrZ.mjs +344 -0
- package/dist/_chunks/index-CJUWqtrZ.mjs.map +1 -0
- package/dist/_chunks/index-CcWTKtCY.js +366 -0
- package/dist/_chunks/index-CcWTKtCY.js.map +1 -0
- package/dist/_chunks/{index-MuQRbm-o.mjs → index-CnX2wiLY.mjs} +239 -256
- package/dist/_chunks/index-CnX2wiLY.mjs.map +1 -0
- package/dist/_chunks/index-DUWx-KG9-C1E7ADbJ.mjs +11984 -0
- package/dist/_chunks/index-DUWx-KG9-C1E7ADbJ.mjs.map +1 -0
- package/dist/_chunks/index-DUWx-KG9-fMZ4nmrb.js +12008 -0
- package/dist/_chunks/index-DUWx-KG9-fMZ4nmrb.js.map +1 -0
- package/dist/_chunks/{index-WCv8yGzw.js → index-DruWuFWL.js} +255 -274
- package/dist/_chunks/index-DruWuFWL.js.map +1 -0
- package/dist/_chunks/index-PJoz36kJ.mjs +262 -0
- package/dist/_chunks/index-PJoz36kJ.mjs.map +1 -0
- package/dist/_chunks/{index-iu-7wU8h.mjs → index-R4R0dEOv.mjs} +46 -50
- package/dist/_chunks/index-R4R0dEOv.mjs.map +1 -0
- package/dist/_chunks/{index-eE2qjbfg.mjs → index-XOcQhJMB.mjs} +105 -103
- package/dist/_chunks/index-XOcQhJMB.mjs.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/content-types/user/index.js +0 -1
- package/server/controllers/auth.js +40 -59
- 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/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 +468 -275
- 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--ch5E4_K.js.map +0 -1
- package/dist/_chunks/index-MuQRbm-o.mjs.map +0 -1
- package/dist/_chunks/index-UrkRT2rC.js +0 -320
- package/dist/_chunks/index-UrkRT2rC.js.map +0 -1
- package/dist/_chunks/index-WCv8yGzw.js.map +0 -1
- package/dist/_chunks/index-eE2qjbfg.mjs.map +0 -1
- package/dist/_chunks/index-iu-7wU8h.mjs.map +0 -1
- package/dist/_chunks/index-mCVPA90k.mjs +0 -385
- package/dist/_chunks/index-mCVPA90k.mjs.map +0 -1
- package/dist/_chunks/index-mNv7pSw-.js +0 -407
- package/dist/_chunks/index-mNv7pSw-.js.map +0 -1
- package/dist/_chunks/index-rL_BoFHz.js.map +0 -1
- package/dist/_chunks/index-xXp5S4OL.mjs +0 -301
- package/dist/_chunks/index-xXp5S4OL.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 -140
- 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-BH6NqE8I.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");
|
|
@@ -47,8 +47,6 @@ const PropTypes__default = /* @__PURE__ */ _interopDefault(PropTypes);
|
|
|
47
47
|
const upperFirst__default = /* @__PURE__ */ _interopDefault(upperFirst);
|
|
48
48
|
const sortBy__default = /* @__PURE__ */ _interopDefault(sortBy);
|
|
49
49
|
const get__default = /* @__PURE__ */ _interopDefault(get);
|
|
50
|
-
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
51
|
-
const produce__default = /* @__PURE__ */ _interopDefault(produce);
|
|
52
50
|
const isEmpty__default = /* @__PURE__ */ _interopDefault(isEmpty);
|
|
53
51
|
const without__default = /* @__PURE__ */ _interopDefault(without);
|
|
54
52
|
const map__default = /* @__PURE__ */ _interopDefault(map);
|
|
@@ -91,18 +89,19 @@ const init$1 = (initialState2, permissions) => {
|
|
|
91
89
|
const collapses = Object.keys(permissions).sort().map((name) => ({ name, isOpen: false }));
|
|
92
90
|
return { ...initialState2, collapses };
|
|
93
91
|
};
|
|
94
|
-
const activeCheckboxWrapperStyles =
|
|
92
|
+
const activeCheckboxWrapperStyles = styledComponents.css`
|
|
95
93
|
background: ${(props) => props.theme.colors.primary100};
|
|
96
|
-
|
|
94
|
+
|
|
95
|
+
#cog {
|
|
97
96
|
opacity: 1;
|
|
98
97
|
}
|
|
99
98
|
`;
|
|
100
|
-
const CheckboxWrapper =
|
|
99
|
+
const CheckboxWrapper = styledComponents.styled(designSystem.Box)`
|
|
101
100
|
display: flex;
|
|
102
101
|
justify-content: space-between;
|
|
103
102
|
align-items: center;
|
|
104
103
|
|
|
105
|
-
|
|
104
|
+
#cog {
|
|
106
105
|
opacity: 0;
|
|
107
106
|
path {
|
|
108
107
|
fill: ${(props) => props.theme.colors.primary600};
|
|
@@ -115,7 +114,7 @@ const CheckboxWrapper = styled__default.default(designSystem.Box)`
|
|
|
115
114
|
${activeCheckboxWrapperStyles}
|
|
116
115
|
}
|
|
117
116
|
`;
|
|
118
|
-
const Border =
|
|
117
|
+
const Border = styledComponents.styled.div`
|
|
119
118
|
flex: 1;
|
|
120
119
|
align-self: center;
|
|
121
120
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
|
|
@@ -152,22 +151,21 @@ const SubCategory = ({ subCategory }) => {
|
|
|
152
151
|
designSystem.Checkbox,
|
|
153
152
|
{
|
|
154
153
|
name: subCategory.name,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
indeterminate: hasSomeActionsSelected,
|
|
154
|
+
checked: hasSomeActionsSelected ? "indeterminate" : hasAllActionsSelected,
|
|
155
|
+
onCheckedChange: (value) => handleChangeSelectAll({ target: { name: subCategory.name, value } }),
|
|
158
156
|
children: formatMessage({ id: "app.utils.select-all", defaultMessage: "Select all" })
|
|
159
157
|
}
|
|
160
158
|
) })
|
|
161
159
|
] }),
|
|
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) => {
|
|
160
|
+
/* @__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
161
|
const name = `${action.name}.enabled`;
|
|
164
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
162
|
+
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
163
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
166
164
|
designSystem.Checkbox,
|
|
167
165
|
{
|
|
168
|
-
|
|
166
|
+
checked: get__default.default(modifiedData, name, false),
|
|
169
167
|
name,
|
|
170
|
-
|
|
168
|
+
onCheckedChange: (value) => onChange({ target: { name, value } }),
|
|
171
169
|
children: action.label
|
|
172
170
|
}
|
|
173
171
|
),
|
|
@@ -178,7 +176,7 @@ const SubCategory = ({ subCategory }) => {
|
|
|
178
176
|
onClick: () => onSelectedAction(action.name),
|
|
179
177
|
style: { display: "inline-flex", alignItems: "center" },
|
|
180
178
|
children: [
|
|
181
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, {
|
|
179
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { tag: "span", children: formatMessage(
|
|
182
180
|
{
|
|
183
181
|
id: "app.utils.show-bound-route",
|
|
184
182
|
defaultMessage: "Show bound route for {route}"
|
|
@@ -187,7 +185,7 @@ const SubCategory = ({ subCategory }) => {
|
|
|
187
185
|
route: action.name
|
|
188
186
|
}
|
|
189
187
|
) }),
|
|
190
|
-
/* @__PURE__ */ jsxRuntime.jsx(icons.Cog, {})
|
|
188
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.Cog, { id: "cog" })
|
|
191
189
|
]
|
|
192
190
|
}
|
|
193
191
|
)
|
|
@@ -239,7 +237,7 @@ const initialState$1 = {
|
|
|
239
237
|
};
|
|
240
238
|
const reducer$1 = (state, action) => (
|
|
241
239
|
// eslint-disable-next-line consistent-return
|
|
242
|
-
|
|
240
|
+
createNextState2.produce(state, (draftState) => {
|
|
243
241
|
switch (action.type) {
|
|
244
242
|
case "TOGGLE_COLLAPSE": {
|
|
245
243
|
draftState.collapses = state.collapses.map((collapse, index2) => {
|
|
@@ -258,41 +256,24 @@ const reducer$1 = (state, action) => (
|
|
|
258
256
|
const Permissions = () => {
|
|
259
257
|
const { modifiedData } = useUsersPermissions();
|
|
260
258
|
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,
|
|
259
|
+
const [{ collapses }] = React.useReducer(reducer$1, initialState$1, (state) => init$1(state, modifiedData));
|
|
260
|
+
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: [
|
|
261
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { variant: index2 % 2 === 0 ? "secondary" : void 0, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
262
|
+
designSystem.Accordion.Trigger,
|
|
263
|
+
{
|
|
264
|
+
caretPosition: "right",
|
|
265
|
+
description: formatMessage(
|
|
279
266
|
{
|
|
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
|
-
}
|
|
267
|
+
id: "users-permissions.Plugin.permissions.plugins.description",
|
|
268
|
+
defaultMessage: "Define all allowed actions for the {name} plugin."
|
|
269
|
+
},
|
|
270
|
+
{ name: collapse.name }
|
|
290
271
|
),
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
},
|
|
294
|
-
collapse.name
|
|
295
|
-
)) });
|
|
272
|
+
children: formatPluginName(collapse.name)
|
|
273
|
+
}
|
|
274
|
+
) }),
|
|
275
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(PermissionRow, { permissions: modifiedData[collapse.name], name: collapse.name }) })
|
|
276
|
+
] }, collapse.name)) }) });
|
|
296
277
|
};
|
|
297
278
|
const getMethodColor = (verb) => {
|
|
298
279
|
switch (verb) {
|
|
@@ -333,7 +314,7 @@ const getMethodColor = (verb) => {
|
|
|
333
314
|
}
|
|
334
315
|
}
|
|
335
316
|
};
|
|
336
|
-
const MethodBox =
|
|
317
|
+
const MethodBox = styledComponents.styled(designSystem.Box)`
|
|
337
318
|
margin: -1px;
|
|
338
319
|
border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};
|
|
339
320
|
`;
|
|
@@ -344,7 +325,7 @@ function BoundRoute({ route }) {
|
|
|
344
325
|
const [controller = "", action = ""] = title ? title.split(".") : [];
|
|
345
326
|
const colors = getMethodColor(route.method);
|
|
346
327
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
347
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "delta",
|
|
328
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "delta", tag: "h3", children: [
|
|
348
329
|
formatMessage({
|
|
349
330
|
id: "users-permissions.BoundRoute.title",
|
|
350
331
|
defaultMessage: "Bound route to"
|
|
@@ -387,7 +368,7 @@ const Policies = () => {
|
|
|
387
368
|
const pathResolved = path.slice(1).join(".");
|
|
388
369
|
const displayedRoutes = isEmpty__default.default(controllerRoutes) ? [] : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));
|
|
389
370
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
390
|
-
designSystem.
|
|
371
|
+
designSystem.Grid.Item,
|
|
391
372
|
{
|
|
392
373
|
col: 5,
|
|
393
374
|
background: "neutral150",
|
|
@@ -396,15 +377,17 @@ const Policies = () => {
|
|
|
396
377
|
paddingLeft: 7,
|
|
397
378
|
paddingRight: 7,
|
|
398
379
|
style: { minHeight: "100%" },
|
|
380
|
+
direction: "column",
|
|
381
|
+
alignItems: "stretch",
|
|
399
382
|
children: selectedAction ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: displayedRoutes.map((route, key) => (
|
|
400
383
|
// eslint-disable-next-line react/no-array-index-key
|
|
401
384
|
/* @__PURE__ */ jsxRuntime.jsx(BoundRoute, { route }, key)
|
|
402
385
|
)) }) : /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
403
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
|
386
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h3", children: formatMessage({
|
|
404
387
|
id: "users-permissions.Policies.header.title",
|
|
405
388
|
defaultMessage: "Advanced settings"
|
|
406
389
|
}) }),
|
|
407
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, {
|
|
390
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "p", textColor: "neutral600", children: formatMessage({
|
|
408
391
|
id: "users-permissions.Policies.header.hint",
|
|
409
392
|
defaultMessage: "Select the application's actions or the plugin's actions and click on the cog icon to display the bound route"
|
|
410
393
|
}) })
|
|
@@ -427,7 +410,7 @@ const initialState = {
|
|
|
427
410
|
selectedAction: "",
|
|
428
411
|
policies: []
|
|
429
412
|
};
|
|
430
|
-
const reducer = (state, action) =>
|
|
413
|
+
const reducer = (state, action) => createNextState2.produce(state, (draftState) => {
|
|
431
414
|
switch (action.type) {
|
|
432
415
|
case "ON_CHANGE": {
|
|
433
416
|
const keysLength = action.keys.length;
|
|
@@ -506,20 +489,32 @@ const UsersPermissions = React.forwardRef(({ permissions, routes }, ref) => {
|
|
|
506
489
|
onChangeSelectAll: handleChangeSelectAll,
|
|
507
490
|
onSelectedAction: handleSelectedAction
|
|
508
491
|
};
|
|
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
|
-
|
|
492
|
+
return /* @__PURE__ */ jsxRuntime.jsx(UsersPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 0, shadow: "filterShadow", hasRadius: true, background: "neutral0", children: [
|
|
493
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
494
|
+
designSystem.Grid.Item,
|
|
495
|
+
{
|
|
496
|
+
col: 7,
|
|
497
|
+
paddingTop: 6,
|
|
498
|
+
paddingBottom: 6,
|
|
499
|
+
paddingLeft: 7,
|
|
500
|
+
paddingRight: 7,
|
|
501
|
+
direction: "column",
|
|
502
|
+
alignItems: "stretch",
|
|
503
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
504
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
505
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
506
|
+
id: index.getTrad("Plugins.header.title"),
|
|
507
|
+
defaultMessage: "Permissions"
|
|
508
|
+
}) }),
|
|
509
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "p", textColor: "neutral600", children: formatMessage({
|
|
510
|
+
id: index.getTrad("Plugins.header.description"),
|
|
511
|
+
defaultMessage: "Only actions bound by a route are listed below."
|
|
512
|
+
}) })
|
|
513
|
+
] }),
|
|
514
|
+
/* @__PURE__ */ jsxRuntime.jsx(Permissions, {})
|
|
515
|
+
] })
|
|
516
|
+
}
|
|
517
|
+
),
|
|
523
518
|
/* @__PURE__ */ jsxRuntime.jsx(Policies, {})
|
|
524
519
|
] }) });
|
|
525
520
|
});
|
|
@@ -529,8 +524,8 @@ UsersPermissions.propTypes = {
|
|
|
529
524
|
};
|
|
530
525
|
const UsersPermissions$1 = React.memo(UsersPermissions);
|
|
531
526
|
const createRoleSchema = yup__namespace.object().shape({
|
|
532
|
-
name: yup__namespace.string().required(
|
|
533
|
-
description: yup__namespace.string().required(
|
|
527
|
+
name: yup__namespace.string().required(admin.translatedErrors.required.id),
|
|
528
|
+
description: yup__namespace.string().required(admin.translatedErrors.required.id)
|
|
534
529
|
});
|
|
535
530
|
const cleanPermissions = (permissions) => Object.keys(permissions).reduce((acc, current) => {
|
|
536
531
|
const currentPermission = permissions[current].controllers;
|
|
@@ -548,9 +543,9 @@ const cleanPermissions = (permissions) => Object.keys(permissions).reduce((acc,
|
|
|
548
543
|
return acc;
|
|
549
544
|
}, {});
|
|
550
545
|
const usePlugins = () => {
|
|
551
|
-
const toggleNotification =
|
|
552
|
-
const { get: get2 } =
|
|
553
|
-
const { formatAPIError } =
|
|
546
|
+
const { toggleNotification } = admin.useNotification();
|
|
547
|
+
const { get: get2 } = admin.useFetchClient();
|
|
548
|
+
const { formatAPIError } = admin.useAPIErrorHandler(index.getTrad);
|
|
554
549
|
const [
|
|
555
550
|
{
|
|
556
551
|
data: permissions,
|
|
@@ -585,7 +580,7 @@ const usePlugins = () => {
|
|
|
585
580
|
React.useEffect(() => {
|
|
586
581
|
if (permissionsError) {
|
|
587
582
|
toggleNotification({
|
|
588
|
-
type: "
|
|
583
|
+
type: "danger",
|
|
589
584
|
message: formatAPIError(permissionsError)
|
|
590
585
|
});
|
|
591
586
|
}
|
|
@@ -593,7 +588,7 @@ const usePlugins = () => {
|
|
|
593
588
|
React.useEffect(() => {
|
|
594
589
|
if (routesError) {
|
|
595
590
|
toggleNotification({
|
|
596
|
-
type: "
|
|
591
|
+
type: "danger",
|
|
597
592
|
message: formatAPIError(routesError)
|
|
598
593
|
});
|
|
599
594
|
}
|
|
@@ -611,43 +606,43 @@ const usePlugins = () => {
|
|
|
611
606
|
};
|
|
612
607
|
const CreatePage = () => {
|
|
613
608
|
const { formatMessage } = reactIntl.useIntl();
|
|
614
|
-
const toggleNotification =
|
|
615
|
-
const
|
|
616
|
-
const { lockApp, unlockApp } = helperPlugin.useOverlayBlocker();
|
|
609
|
+
const { toggleNotification } = admin.useNotification();
|
|
610
|
+
const navigate = reactRouterDom.useNavigate();
|
|
617
611
|
const { isLoading: isLoadingPlugins, permissions, routes } = usePlugins();
|
|
618
|
-
const { trackUsage } =
|
|
612
|
+
const { trackUsage } = admin.useTracking();
|
|
619
613
|
const permissionsRef = React__namespace.useRef();
|
|
620
|
-
const { post } =
|
|
614
|
+
const { post } = admin.useFetchClient();
|
|
621
615
|
const mutation = reactQuery.useMutation((body) => post(`/users-permissions/roles`, body), {
|
|
622
616
|
onError() {
|
|
623
617
|
toggleNotification({
|
|
624
|
-
type: "
|
|
625
|
-
message: {
|
|
618
|
+
type: "danger",
|
|
619
|
+
message: formatMessage({
|
|
626
620
|
id: "notification.error",
|
|
627
621
|
defaultMessage: "An error occurred"
|
|
628
|
-
}
|
|
622
|
+
})
|
|
629
623
|
});
|
|
630
624
|
},
|
|
631
625
|
onSuccess() {
|
|
632
626
|
trackUsage("didCreateRole");
|
|
633
627
|
toggleNotification({
|
|
634
628
|
type: "success",
|
|
635
|
-
message: {
|
|
629
|
+
message: formatMessage({
|
|
636
630
|
id: index.getTrad("Settings.roles.created"),
|
|
637
631
|
defaultMessage: "Role created"
|
|
638
|
-
}
|
|
632
|
+
})
|
|
639
633
|
});
|
|
640
|
-
|
|
634
|
+
navigate(-1);
|
|
641
635
|
}
|
|
642
636
|
});
|
|
643
637
|
const handleCreateRoleSubmit = async (data) => {
|
|
644
|
-
lockApp();
|
|
645
638
|
const permissions2 = permissionsRef.current.getPermissions();
|
|
646
639
|
await mutation.mutate({ ...data, ...permissions2, users: [] });
|
|
647
|
-
unlockApp();
|
|
648
640
|
};
|
|
649
641
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { children: [
|
|
650
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
642
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
|
|
643
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
644
|
+
{ name: "Roles" }
|
|
645
|
+
) }),
|
|
651
646
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
652
647
|
formik.Formik,
|
|
653
648
|
{
|
|
@@ -655,9 +650,9 @@ const CreatePage = () => {
|
|
|
655
650
|
initialValues: { name: "", description: "" },
|
|
656
651
|
onSubmit: handleCreateRoleSubmit,
|
|
657
652
|
validationSchema: createRoleSchema,
|
|
658
|
-
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
653
|
+
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { noValidate: true, onSubmit: handleSubmit, children: [
|
|
659
654
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
660
|
-
|
|
655
|
+
admin.Layouts.Header,
|
|
661
656
|
{
|
|
662
657
|
primaryAction: !isLoadingPlugins && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", loading: mutation.isLoading, startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}), children: formatMessage({
|
|
663
658
|
id: "global.save",
|
|
@@ -673,7 +668,7 @@ const CreatePage = () => {
|
|
|
673
668
|
})
|
|
674
669
|
}
|
|
675
670
|
),
|
|
676
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
671
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Layouts.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
677
672
|
designSystem.Flex,
|
|
678
673
|
{
|
|
679
674
|
background: "neutral0",
|
|
@@ -688,40 +683,44 @@ const CreatePage = () => {
|
|
|
688
683
|
shadow: "filterShadow",
|
|
689
684
|
children: [
|
|
690
685
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", children: [
|
|
691
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
|
686
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
692
687
|
id: index.getTrad("EditPage.form.roles"),
|
|
693
688
|
defaultMessage: "Role details"
|
|
694
689
|
}) }),
|
|
695
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid, { gap: 4, children: [
|
|
696
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
697
|
-
designSystem.
|
|
690
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, children: [
|
|
691
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
692
|
+
designSystem.Field.Root,
|
|
698
693
|
{
|
|
699
694
|
name: "name",
|
|
700
|
-
value: values.name || "",
|
|
701
|
-
onChange: handleChange,
|
|
702
|
-
label: formatMessage({
|
|
703
|
-
id: "global.name",
|
|
704
|
-
defaultMessage: "Name"
|
|
705
|
-
}),
|
|
706
695
|
error: errors?.name ? formatMessage({ id: errors.name, defaultMessage: "Name is required" }) : false,
|
|
707
|
-
required: true
|
|
696
|
+
required: true,
|
|
697
|
+
children: [
|
|
698
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
699
|
+
id: "global.name",
|
|
700
|
+
defaultMessage: "Name"
|
|
701
|
+
}) }),
|
|
702
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.TextInput, { value: values.name || "", onChange: handleChange }),
|
|
703
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
704
|
+
]
|
|
708
705
|
}
|
|
709
706
|
) }),
|
|
710
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
711
|
-
designSystem.
|
|
707
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
708
|
+
designSystem.Field.Root,
|
|
712
709
|
{
|
|
713
|
-
|
|
714
|
-
value: values.description || "",
|
|
715
|
-
onChange: handleChange,
|
|
716
|
-
label: formatMessage({
|
|
717
|
-
id: "global.description",
|
|
718
|
-
defaultMessage: "Description"
|
|
719
|
-
}),
|
|
710
|
+
name: "description",
|
|
720
711
|
error: errors?.description ? formatMessage({
|
|
721
712
|
id: errors.description,
|
|
722
713
|
defaultMessage: "Description is required"
|
|
723
714
|
}) : false,
|
|
724
|
-
required: true
|
|
715
|
+
required: true,
|
|
716
|
+
children: [
|
|
717
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
718
|
+
id: "global.description",
|
|
719
|
+
defaultMessage: "Description"
|
|
720
|
+
}) }),
|
|
721
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Textarea, { value: values.description || "", onChange: handleChange }),
|
|
722
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
723
|
+
]
|
|
725
724
|
}
|
|
726
725
|
) })
|
|
727
726
|
] })
|
|
@@ -742,15 +741,14 @@ const CreatePage = () => {
|
|
|
742
741
|
)
|
|
743
742
|
] });
|
|
744
743
|
};
|
|
745
|
-
const ProtectedRolesCreatePage = () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
744
|
+
const ProtectedRolesCreatePage = () => /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.createRole, children: /* @__PURE__ */ jsxRuntime.jsx(CreatePage, {}) });
|
|
746
745
|
const EditPage = () => {
|
|
747
746
|
const { formatMessage } = reactIntl.useIntl();
|
|
748
|
-
const toggleNotification =
|
|
749
|
-
const { lockApp, unlockApp } = helperPlugin.useOverlayBlocker();
|
|
747
|
+
const { toggleNotification } = admin.useNotification();
|
|
750
748
|
const {
|
|
751
749
|
params: { id }
|
|
752
|
-
} = reactRouterDom.
|
|
753
|
-
const { get: get2 } =
|
|
750
|
+
} = reactRouterDom.useMatch(`/settings/users-permissions/roles/:id`);
|
|
751
|
+
const { get: get2 } = admin.useFetchClient();
|
|
754
752
|
const { isLoading: isLoadingPlugins, routes } = usePlugins();
|
|
755
753
|
const {
|
|
756
754
|
data: role,
|
|
@@ -763,37 +761,38 @@ const EditPage = () => {
|
|
|
763
761
|
return role2;
|
|
764
762
|
});
|
|
765
763
|
const permissionsRef = React__namespace.useRef();
|
|
766
|
-
const { put } =
|
|
767
|
-
const { formatAPIError } =
|
|
764
|
+
const { put } = admin.useFetchClient();
|
|
765
|
+
const { formatAPIError } = admin.useAPIErrorHandler();
|
|
768
766
|
const mutation = reactQuery.useMutation((body) => put(`/users-permissions/roles/${id}`, body), {
|
|
769
767
|
onError(error) {
|
|
770
768
|
toggleNotification({
|
|
771
|
-
type: "
|
|
769
|
+
type: "danger",
|
|
772
770
|
message: formatAPIError(error)
|
|
773
771
|
});
|
|
774
772
|
},
|
|
775
773
|
async onSuccess() {
|
|
776
774
|
toggleNotification({
|
|
777
775
|
type: "success",
|
|
778
|
-
message: {
|
|
776
|
+
message: formatMessage({
|
|
779
777
|
id: index.getTrad("Settings.roles.created"),
|
|
780
778
|
defaultMessage: "Role edited"
|
|
781
|
-
}
|
|
779
|
+
})
|
|
782
780
|
});
|
|
783
781
|
await refetchRole();
|
|
784
782
|
}
|
|
785
783
|
});
|
|
786
784
|
const handleEditRoleSubmit = async (data) => {
|
|
787
|
-
lockApp();
|
|
788
785
|
const permissions = permissionsRef.current.getPermissions();
|
|
789
786
|
await mutation.mutate({ ...data, ...permissions, users: [] });
|
|
790
|
-
unlockApp();
|
|
791
787
|
};
|
|
792
788
|
if (isLoadingRole) {
|
|
793
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
789
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Loading, {});
|
|
794
790
|
}
|
|
795
791
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { children: [
|
|
796
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
792
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
|
|
793
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
794
|
+
{ name: "Roles" }
|
|
795
|
+
) }),
|
|
797
796
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
798
797
|
formik.Formik,
|
|
799
798
|
{
|
|
@@ -801,11 +800,11 @@ const EditPage = () => {
|
|
|
801
800
|
initialValues: { name: role.name, description: role.description },
|
|
802
801
|
onSubmit: handleEditRoleSubmit,
|
|
803
802
|
validationSchema: createRoleSchema,
|
|
804
|
-
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
803
|
+
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { noValidate: true, onSubmit: handleSubmit, children: [
|
|
805
804
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
806
|
-
|
|
805
|
+
admin.Layouts.Header,
|
|
807
806
|
{
|
|
808
|
-
primaryAction: !isLoadingPlugins
|
|
807
|
+
primaryAction: !isLoadingPlugins ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
809
808
|
designSystem.Button,
|
|
810
809
|
{
|
|
811
810
|
disabled: role.code === "strapi-super-admin",
|
|
@@ -817,16 +816,13 @@ const EditPage = () => {
|
|
|
817
816
|
defaultMessage: "Save"
|
|
818
817
|
})
|
|
819
818
|
}
|
|
820
|
-
),
|
|
819
|
+
) : null,
|
|
821
820
|
title: role.name,
|
|
822
821
|
subtitle: role.description,
|
|
823
|
-
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(
|
|
824
|
-
id: "global.back",
|
|
825
|
-
defaultMessage: "Back"
|
|
826
|
-
}) })
|
|
822
|
+
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(admin.BackButton, {})
|
|
827
823
|
}
|
|
828
824
|
),
|
|
829
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
825
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Layouts.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
830
826
|
designSystem.Flex,
|
|
831
827
|
{
|
|
832
828
|
background: "neutral0",
|
|
@@ -841,40 +837,47 @@ const EditPage = () => {
|
|
|
841
837
|
shadow: "filterShadow",
|
|
842
838
|
children: [
|
|
843
839
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 4, children: [
|
|
844
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
|
840
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
845
841
|
id: index.getTrad("EditPage.form.roles"),
|
|
846
842
|
defaultMessage: "Role details"
|
|
847
843
|
}) }),
|
|
848
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid, { gap: 4, children: [
|
|
849
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
850
|
-
designSystem.
|
|
844
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, children: [
|
|
845
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
846
|
+
designSystem.Field.Root,
|
|
851
847
|
{
|
|
852
848
|
name: "name",
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
849
|
+
error: errors?.name ? formatMessage({
|
|
850
|
+
id: errors.name,
|
|
851
|
+
defaultMessage: "Name is required"
|
|
852
|
+
}) : false,
|
|
853
|
+
required: true,
|
|
854
|
+
children: [
|
|
855
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
856
|
+
id: "global.name",
|
|
857
|
+
defaultMessage: "Name"
|
|
858
|
+
}) }),
|
|
859
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.TextInput, { value: values.name || "", onChange: handleChange }),
|
|
860
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
861
|
+
]
|
|
861
862
|
}
|
|
862
863
|
) }),
|
|
863
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
|
864
|
-
designSystem.
|
|
864
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
865
|
+
designSystem.Field.Root,
|
|
865
866
|
{
|
|
866
|
-
|
|
867
|
-
value: values.description || "",
|
|
868
|
-
onChange: handleChange,
|
|
869
|
-
label: formatMessage({
|
|
870
|
-
id: "global.description",
|
|
871
|
-
defaultMessage: "Description"
|
|
872
|
-
}),
|
|
867
|
+
name: "description",
|
|
873
868
|
error: errors?.description ? formatMessage({
|
|
874
869
|
id: errors.description,
|
|
875
870
|
defaultMessage: "Description is required"
|
|
876
871
|
}) : false,
|
|
877
|
-
required: true
|
|
872
|
+
required: true,
|
|
873
|
+
children: [
|
|
874
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
|
875
|
+
id: "global.description",
|
|
876
|
+
defaultMessage: "Description"
|
|
877
|
+
}) }),
|
|
878
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Textarea, { value: values.description || "", onChange: handleChange }),
|
|
879
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
|
880
|
+
]
|
|
878
881
|
}
|
|
879
882
|
) })
|
|
880
883
|
] })
|
|
@@ -895,18 +898,18 @@ const EditPage = () => {
|
|
|
895
898
|
)
|
|
896
899
|
] });
|
|
897
900
|
};
|
|
898
|
-
const ProtectedRolesEditPage = () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
899
|
-
const EditLink =
|
|
901
|
+
const ProtectedRolesEditPage = () => /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.updateRole, children: /* @__PURE__ */ jsxRuntime.jsx(EditPage, {}) });
|
|
902
|
+
const EditLink = styledComponents.styled(designSystem.Link)`
|
|
900
903
|
align-items: center;
|
|
901
|
-
height:
|
|
904
|
+
height: 3.2rem;
|
|
905
|
+
width: 3.2rem;
|
|
902
906
|
display: flex;
|
|
903
907
|
justify-content: center;
|
|
904
|
-
padding: ${({ theme }) => `${theme.spaces[2]}
|
|
905
|
-
width: ${helperPlugin.pxToRem(32)};
|
|
908
|
+
padding: ${({ theme }) => `${theme.spaces[2]}`};
|
|
906
909
|
|
|
907
910
|
svg {
|
|
908
|
-
height:
|
|
909
|
-
width:
|
|
911
|
+
height: 1.6rem;
|
|
912
|
+
width: 1.6rem;
|
|
910
913
|
|
|
911
914
|
path {
|
|
912
915
|
fill: ${({ theme }) => theme.colors.neutral500};
|
|
@@ -922,19 +925,16 @@ const EditLink = styled__default.default(designSystem.Link)`
|
|
|
922
925
|
}
|
|
923
926
|
}
|
|
924
927
|
`;
|
|
925
|
-
const TableBody = ({ sortedRoles, canDelete,
|
|
928
|
+
const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelete }) => {
|
|
926
929
|
const { formatMessage } = reactIntl.useIntl();
|
|
927
|
-
const
|
|
930
|
+
const navigate = reactRouterDom.useNavigate();
|
|
928
931
|
const [showConfirmDelete, setShowConfirmDelete] = onDelete;
|
|
929
932
|
const checkCanDeleteRole = (role) => canDelete && !["public", "authenticated"].includes(role.type);
|
|
930
933
|
const handleClickDelete = (id) => {
|
|
931
934
|
setRoleToDelete(id);
|
|
932
935
|
setShowConfirmDelete(!showConfirmDelete);
|
|
933
936
|
};
|
|
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: [
|
|
937
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { onClick: () => navigate(role.id.toString()), children: [
|
|
938
938
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "20%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: role.name }) }),
|
|
939
939
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "50%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: role.description }) }),
|
|
940
940
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "30%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage(
|
|
@@ -944,83 +944,59 @@ const TableBody = ({ sortedRoles, canDelete, permissions, setRoleToDelete, onDel
|
|
|
944
944
|
},
|
|
945
945
|
{ number: role.nb_users }
|
|
946
946
|
) }) }),
|
|
947
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "end",
|
|
948
|
-
|
|
947
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "end", onClick: (e) => e.stopPropagation(), children: [
|
|
948
|
+
canUpdate ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
949
949
|
EditLink,
|
|
950
950
|
{
|
|
951
|
-
|
|
951
|
+
tag: reactRouterDom.NavLink,
|
|
952
|
+
to: role.id.toString(),
|
|
952
953
|
"aria-label": formatMessage(
|
|
953
954
|
{ id: "app.component.table.edit", defaultMessage: "Edit {target}" },
|
|
954
955
|
{ target: `${role.name}` }
|
|
955
956
|
),
|
|
956
957
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
|
|
957
958
|
}
|
|
958
|
-
)
|
|
959
|
-
checkCanDeleteRole(role) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
959
|
+
) : null,
|
|
960
|
+
checkCanDeleteRole(role) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
960
961
|
designSystem.IconButton,
|
|
961
962
|
{
|
|
962
|
-
onClick: () => handleClickDelete(role.id),
|
|
963
|
-
|
|
964
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {}),
|
|
963
|
+
onClick: () => handleClickDelete(role.id.toString()),
|
|
964
|
+
variant: "ghost",
|
|
965
965
|
label: formatMessage(
|
|
966
966
|
{ id: "global.delete-target", defaultMessage: "Delete {target}" },
|
|
967
967
|
{ target: `${role.name}` }
|
|
968
|
-
)
|
|
968
|
+
),
|
|
969
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
|
|
969
970
|
}
|
|
970
|
-
)
|
|
971
|
+
)
|
|
971
972
|
] }) })
|
|
972
973
|
] }, role.name)) });
|
|
973
974
|
};
|
|
974
975
|
TableBody.defaultProps = {
|
|
975
|
-
canDelete: false
|
|
976
|
+
canDelete: false,
|
|
977
|
+
canUpdate: false
|
|
976
978
|
};
|
|
977
979
|
TableBody.propTypes = {
|
|
978
980
|
onDelete: PropTypes__default.default.array.isRequired,
|
|
979
|
-
permissions: PropTypes__default.default.object.isRequired,
|
|
980
981
|
setRoleToDelete: PropTypes__default.default.func.isRequired,
|
|
981
982
|
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
|
-
}
|
|
983
|
+
canDelete: PropTypes__default.default.bool,
|
|
984
|
+
canUpdate: PropTypes__default.default.bool
|
|
1008
985
|
};
|
|
1009
986
|
const RolesListPage = () => {
|
|
1010
|
-
const { trackUsage } =
|
|
987
|
+
const { trackUsage } = admin.useTracking();
|
|
1011
988
|
const { formatMessage, locale } = reactIntl.useIntl();
|
|
1012
|
-
const toggleNotification =
|
|
989
|
+
const { toggleNotification } = admin.useNotification();
|
|
1013
990
|
const { notifyStatus } = designSystem.useNotifyAT();
|
|
1014
|
-
const [{ query }] =
|
|
991
|
+
const [{ query }] = admin.useQueryParams();
|
|
1015
992
|
const _q = query?._q || "";
|
|
1016
993
|
const [showConfirmDelete, setShowConfirmDelete] = React.useState(false);
|
|
1017
|
-
const [isConfirmButtonLoading, setIsConfirmButtonLoading] = React.useState(false);
|
|
1018
994
|
const [roleToDelete, setRoleToDelete] = React.useState();
|
|
1019
|
-
|
|
995
|
+
const { del, get: get2 } = admin.useFetchClient();
|
|
1020
996
|
const {
|
|
1021
997
|
isLoading: isLoadingForPermissions,
|
|
1022
|
-
allowedActions: { canRead, canDelete }
|
|
1023
|
-
} =
|
|
998
|
+
allowedActions: { canRead, canDelete, canCreate, canUpdate }
|
|
999
|
+
} = admin.useRBAC({
|
|
1024
1000
|
create: index.PERMISSIONS.createRole,
|
|
1025
1001
|
read: index.PERMISSIONS.readRoles,
|
|
1026
1002
|
update: index.PERMISSIONS.updateRole,
|
|
@@ -1031,20 +1007,43 @@ const RolesListPage = () => {
|
|
|
1031
1007
|
data: { roles },
|
|
1032
1008
|
isFetching,
|
|
1033
1009
|
refetch
|
|
1034
|
-
} = reactQuery.useQuery("get-roles", () => fetchData(toggleNotification, notifyStatus), {
|
|
1010
|
+
} = reactQuery.useQuery("get-roles", () => fetchData(toggleNotification, formatMessage, notifyStatus), {
|
|
1035
1011
|
initialData: {},
|
|
1036
1012
|
enabled: canRead
|
|
1037
1013
|
});
|
|
1038
|
-
const {
|
|
1014
|
+
const { contains } = designSystem.useFilter(locale, {
|
|
1039
1015
|
sensitivity: "base"
|
|
1040
1016
|
});
|
|
1041
|
-
const formatter =
|
|
1017
|
+
const formatter = designSystem.useCollator(locale, {
|
|
1042
1018
|
sensitivity: "base"
|
|
1043
1019
|
});
|
|
1044
|
-
const isLoading = isLoadingForData || isFetching;
|
|
1020
|
+
const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;
|
|
1045
1021
|
const handleShowConfirmDelete = () => {
|
|
1046
1022
|
setShowConfirmDelete(!showConfirmDelete);
|
|
1047
1023
|
};
|
|
1024
|
+
const deleteData = async (id, formatMessage2, toggleNotification2) => {
|
|
1025
|
+
try {
|
|
1026
|
+
await del(`/users-permissions/roles/${id}`);
|
|
1027
|
+
} catch (error) {
|
|
1028
|
+
toggleNotification2({
|
|
1029
|
+
type: "danger",
|
|
1030
|
+
message: formatMessage2({ id: "notification.error", defaultMessage: "An error occured" })
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1033
|
+
};
|
|
1034
|
+
const fetchData = async (toggleNotification2, formatMessage2, notifyStatus2) => {
|
|
1035
|
+
try {
|
|
1036
|
+
const { data } = await get2("/users-permissions/roles");
|
|
1037
|
+
notifyStatus2("The roles have loaded successfully");
|
|
1038
|
+
return data;
|
|
1039
|
+
} catch (err) {
|
|
1040
|
+
toggleNotification2({
|
|
1041
|
+
type: "danger",
|
|
1042
|
+
message: formatMessage2({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1043
|
+
});
|
|
1044
|
+
throw new Error(err);
|
|
1045
|
+
}
|
|
1046
|
+
};
|
|
1048
1047
|
const emptyLayout = {
|
|
1049
1048
|
roles: {
|
|
1050
1049
|
id: index.getTrad("Roles.empty"),
|
|
@@ -1059,28 +1058,32 @@ const RolesListPage = () => {
|
|
|
1059
1058
|
id: "global.roles",
|
|
1060
1059
|
defaultMessage: "Roles"
|
|
1061
1060
|
});
|
|
1062
|
-
const deleteMutation = reactQuery.useMutation((id) => deleteData(id, toggleNotification), {
|
|
1061
|
+
const deleteMutation = reactQuery.useMutation((id) => deleteData(id, formatMessage, toggleNotification), {
|
|
1063
1062
|
async onSuccess() {
|
|
1064
1063
|
await refetch();
|
|
1065
1064
|
}
|
|
1066
1065
|
});
|
|
1067
1066
|
const handleConfirmDelete = async () => {
|
|
1068
|
-
setIsConfirmButtonLoading(true);
|
|
1069
1067
|
await deleteMutation.mutateAsync(roleToDelete);
|
|
1070
1068
|
setShowConfirmDelete(!showConfirmDelete);
|
|
1071
|
-
setIsConfirmButtonLoading(false);
|
|
1072
1069
|
};
|
|
1073
|
-
const sortedRoles = (roles || []).filter((role) =>
|
|
1070
|
+
const sortedRoles = (roles || []).filter((role) => contains(role.name, _q) || contains(role.description, _q)).sort(
|
|
1074
1071
|
(a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)
|
|
1075
1072
|
);
|
|
1076
1073
|
const emptyContent = _q && !sortedRoles.length ? "search" : "roles";
|
|
1077
1074
|
const colCount = 4;
|
|
1078
1075
|
const rowCount = (roles?.length || 0) + 1;
|
|
1079
|
-
|
|
1080
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1081
|
-
|
|
1076
|
+
if (isLoading) {
|
|
1077
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Loading, {});
|
|
1078
|
+
}
|
|
1079
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(admin.Layouts.Root, { children: [
|
|
1080
|
+
/* @__PURE__ */ jsxRuntime.jsx(admin.Page.Title, { children: formatMessage(
|
|
1081
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
1082
|
+
{ name: pageTitle }
|
|
1083
|
+
) }),
|
|
1084
|
+
/* @__PURE__ */ jsxRuntime.jsxs(admin.Page.Main, { children: [
|
|
1082
1085
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1083
|
-
|
|
1086
|
+
admin.Layouts.Header,
|
|
1084
1087
|
{
|
|
1085
1088
|
title: formatMessage({
|
|
1086
1089
|
id: "global.roles",
|
|
@@ -1090,10 +1093,11 @@ const RolesListPage = () => {
|
|
|
1090
1093
|
id: "Settings.roles.list.description",
|
|
1091
1094
|
defaultMessage: "List of roles"
|
|
1092
1095
|
}),
|
|
1093
|
-
primaryAction:
|
|
1094
|
-
|
|
1096
|
+
primaryAction: canCreate ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1097
|
+
designSystem.LinkButton,
|
|
1095
1098
|
{
|
|
1096
|
-
to: "
|
|
1099
|
+
to: "new",
|
|
1100
|
+
tag: reactRouterDom.NavLink,
|
|
1097
1101
|
onClick: () => trackUsage("willCreateRole"),
|
|
1098
1102
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
|
|
1099
1103
|
size: "S",
|
|
@@ -1102,14 +1106,14 @@ const RolesListPage = () => {
|
|
|
1102
1106
|
defaultMessage: "Add new role"
|
|
1103
1107
|
})
|
|
1104
1108
|
}
|
|
1105
|
-
)
|
|
1109
|
+
) : null
|
|
1106
1110
|
}
|
|
1107
1111
|
),
|
|
1108
1112
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1109
|
-
|
|
1113
|
+
admin.Layouts.Action,
|
|
1110
1114
|
{
|
|
1111
1115
|
startActions: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1112
|
-
|
|
1116
|
+
admin.SearchInput,
|
|
1113
1117
|
{
|
|
1114
1118
|
label: formatMessage({
|
|
1115
1119
|
id: "app.component.search.label",
|
|
@@ -1119,9 +1123,8 @@ const RolesListPage = () => {
|
|
|
1119
1123
|
)
|
|
1120
1124
|
}
|
|
1121
1125
|
),
|
|
1122
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1123
|
-
!canRead && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1124
|
-
(isLoading || isLoadingForPermissions) && /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}),
|
|
1126
|
+
/* @__PURE__ */ jsxRuntime.jsxs(admin.Layouts.Content, { children: [
|
|
1127
|
+
!canRead && /* @__PURE__ */ jsxRuntime.jsx(admin.Page.NoPermissions, {}),
|
|
1125
1128
|
canRead && sortedRoles && sortedRoles?.length ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Table, { colCount, rowCount, children: [
|
|
1126
1129
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Thead, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
1127
1130
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }),
|
|
@@ -1143,49 +1146,27 @@ const RolesListPage = () => {
|
|
|
1143
1146
|
{
|
|
1144
1147
|
sortedRoles,
|
|
1145
1148
|
canDelete,
|
|
1149
|
+
canUpdate,
|
|
1146
1150
|
permissions: index.PERMISSIONS,
|
|
1147
1151
|
setRoleToDelete,
|
|
1148
1152
|
onDelete: [showConfirmDelete, setShowConfirmDelete]
|
|
1149
1153
|
}
|
|
1150
1154
|
)
|
|
1151
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1155
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.EmptyStateLayout, { content: formatMessage(emptyLayout[emptyContent]) })
|
|
1152
1156
|
] }),
|
|
1153
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1154
|
-
helperPlugin.ConfirmDialog,
|
|
1155
|
-
{
|
|
1156
|
-
isConfirmButtonLoading,
|
|
1157
|
-
onConfirm: handleConfirmDelete,
|
|
1158
|
-
onToggleDialog: handleShowConfirmDelete,
|
|
1159
|
-
isOpen: showConfirmDelete
|
|
1160
|
-
}
|
|
1161
|
-
)
|
|
1157
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Root, { open: showConfirmDelete, onOpenChange: handleShowConfirmDelete, children: /* @__PURE__ */ jsxRuntime.jsx(admin.ConfirmDialog, { onConfirm: handleConfirmDelete }) })
|
|
1162
1158
|
] })
|
|
1163
1159
|
] });
|
|
1164
1160
|
};
|
|
1165
1161
|
const ProtectedRolesListPage = () => {
|
|
1166
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1162
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.accessRoles, children: /* @__PURE__ */ jsxRuntime.jsx(RolesListPage, {}) });
|
|
1167
1163
|
};
|
|
1168
1164
|
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 })
|
|
1165
|
+
return /* @__PURE__ */ jsxRuntime.jsx(admin.Page.Protect, { permissions: index.PERMISSIONS.accessRoles, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Routes, { children: [
|
|
1166
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { index: true, element: /* @__PURE__ */ jsxRuntime.jsx(ProtectedRolesListPage, {}) }),
|
|
1167
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: "new", element: /* @__PURE__ */ jsxRuntime.jsx(ProtectedRolesCreatePage, {}) }),
|
|
1168
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { path: ":id", element: /* @__PURE__ */ jsxRuntime.jsx(ProtectedRolesEditPage, {}) })
|
|
1188
1169
|
] }) });
|
|
1189
1170
|
};
|
|
1190
1171
|
exports.default = Roles;
|
|
1191
|
-
//# sourceMappingURL=index-
|
|
1172
|
+
//# sourceMappingURL=index-DruWuFWL.js.map
|