@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
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { createContext, useContext, useMemo, useCallback, useReducer, forwardRef, useImperativeHandle, memo, useEffect, useState } from "react";
|
|
4
|
-
import { translatedErrors, useNotification, useFetchClient, useAPIErrorHandler,
|
|
5
|
-
import {
|
|
6
|
-
import { g as getTrad, P as PERMISSIONS } from "./index-
|
|
7
|
-
import { Box, Flex, Typography, Checkbox, Grid,
|
|
8
|
-
import { Cog, Check,
|
|
9
|
-
import { Formik } from "formik";
|
|
4
|
+
import { translatedErrors, useNotification, useFetchClient, useAPIErrorHandler, Page, useTracking, Layouts, BackButton, useQueryParams, useRBAC, SearchInput, ConfirmDialog } from "@strapi/strapi/admin";
|
|
5
|
+
import { useNavigate, useMatch, NavLink, Routes, Route } from "react-router-dom";
|
|
6
|
+
import { g as getTrad, P as PERMISSIONS } from "./index-R4R0dEOv.mjs";
|
|
7
|
+
import { Box, Flex, Typography, Checkbox, Grid, VisuallyHidden, Accordion, Main, Button, Field, TextInput, Textarea, Link, Tbody, Tr, Td, IconButton, useNotifyAT, useFilter, useCollator, LinkButton, Table, Thead, Th, EmptyStateLayout, Dialog } from "@strapi/design-system";
|
|
8
|
+
import { Cog, Check, Pencil, Trash, Plus } from "@strapi/icons";
|
|
9
|
+
import { Formik, Form } from "formik";
|
|
10
10
|
import { useIntl } from "react-intl";
|
|
11
11
|
import { useQueries, useMutation, useQuery } from "react-query";
|
|
12
12
|
import PropTypes from "prop-types";
|
|
13
13
|
import upperFirst from "lodash/upperFirst";
|
|
14
14
|
import sortBy from "lodash/sortBy";
|
|
15
15
|
import get from "lodash/get";
|
|
16
|
-
import
|
|
17
|
-
import produce from "immer";
|
|
16
|
+
import { css, styled } from "styled-components";
|
|
17
|
+
import { produce } from "immer";
|
|
18
18
|
import isEmpty from "lodash/isEmpty";
|
|
19
19
|
import without from "lodash/without";
|
|
20
20
|
import map from "lodash/map";
|
|
@@ -59,7 +59,8 @@ const init$1 = (initialState2, permissions) => {
|
|
|
59
59
|
};
|
|
60
60
|
const activeCheckboxWrapperStyles = css`
|
|
61
61
|
background: ${(props) => props.theme.colors.primary100};
|
|
62
|
-
|
|
62
|
+
|
|
63
|
+
#cog {
|
|
63
64
|
opacity: 1;
|
|
64
65
|
}
|
|
65
66
|
`;
|
|
@@ -68,7 +69,7 @@ const CheckboxWrapper = styled(Box)`
|
|
|
68
69
|
justify-content: space-between;
|
|
69
70
|
align-items: center;
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
#cog {
|
|
72
73
|
opacity: 0;
|
|
73
74
|
path {
|
|
74
75
|
fill: ${(props) => props.theme.colors.primary600};
|
|
@@ -118,22 +119,21 @@ const SubCategory = ({ subCategory }) => {
|
|
|
118
119
|
Checkbox,
|
|
119
120
|
{
|
|
120
121
|
name: subCategory.name,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
indeterminate: hasSomeActionsSelected,
|
|
122
|
+
checked: hasSomeActionsSelected ? "indeterminate" : hasAllActionsSelected,
|
|
123
|
+
onCheckedChange: (value) => handleChangeSelectAll({ target: { name: subCategory.name, value } }),
|
|
124
124
|
children: formatMessage({ id: "app.utils.select-all", defaultMessage: "Select all" })
|
|
125
125
|
}
|
|
126
126
|
) })
|
|
127
127
|
] }),
|
|
128
|
-
/* @__PURE__ */ jsx(Flex, { paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsx(Grid, { gap: 2, style: { flex: 1 }, children: subCategory.actions.map((action) => {
|
|
128
|
+
/* @__PURE__ */ jsx(Flex, { paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsx(Grid.Root, { gap: 2, style: { flex: 1 }, children: subCategory.actions.map((action) => {
|
|
129
129
|
const name = `${action.name}.enabled`;
|
|
130
|
-
return /* @__PURE__ */ jsx(
|
|
130
|
+
return /* @__PURE__ */ jsx(Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(CheckboxWrapper, { isActive: isActionSelected(action.name), padding: 2, hasRadius: true, children: [
|
|
131
131
|
/* @__PURE__ */ jsx(
|
|
132
132
|
Checkbox,
|
|
133
133
|
{
|
|
134
|
-
|
|
134
|
+
checked: get(modifiedData, name, false),
|
|
135
135
|
name,
|
|
136
|
-
|
|
136
|
+
onCheckedChange: (value) => onChange({ target: { name, value } }),
|
|
137
137
|
children: action.label
|
|
138
138
|
}
|
|
139
139
|
),
|
|
@@ -144,7 +144,7 @@ const SubCategory = ({ subCategory }) => {
|
|
|
144
144
|
onClick: () => onSelectedAction(action.name),
|
|
145
145
|
style: { display: "inline-flex", alignItems: "center" },
|
|
146
146
|
children: [
|
|
147
|
-
/* @__PURE__ */ jsx(VisuallyHidden, {
|
|
147
|
+
/* @__PURE__ */ jsx(VisuallyHidden, { tag: "span", children: formatMessage(
|
|
148
148
|
{
|
|
149
149
|
id: "app.utils.show-bound-route",
|
|
150
150
|
defaultMessage: "Show bound route for {route}"
|
|
@@ -153,7 +153,7 @@ const SubCategory = ({ subCategory }) => {
|
|
|
153
153
|
route: action.name
|
|
154
154
|
}
|
|
155
155
|
) }),
|
|
156
|
-
/* @__PURE__ */ jsx(Cog, {})
|
|
156
|
+
/* @__PURE__ */ jsx(Cog, { id: "cog" })
|
|
157
157
|
]
|
|
158
158
|
}
|
|
159
159
|
)
|
|
@@ -224,41 +224,24 @@ const reducer$1 = (state, action) => (
|
|
|
224
224
|
const Permissions = () => {
|
|
225
225
|
const { modifiedData } = useUsersPermissions();
|
|
226
226
|
const { formatMessage } = useIntl();
|
|
227
|
-
const [{ collapses }
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
index
|
|
235
|
-
});
|
|
236
|
-
return /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 1, children: collapses.map((collapse, index) => /* @__PURE__ */ jsxs(
|
|
237
|
-
Accordion,
|
|
238
|
-
{
|
|
239
|
-
expanded: collapse.isOpen,
|
|
240
|
-
onToggle: () => handleToggle(index),
|
|
241
|
-
variant: index % 2 === 0 ? "secondary" : void 0,
|
|
242
|
-
children: [
|
|
243
|
-
/* @__PURE__ */ jsx(
|
|
244
|
-
AccordionToggle,
|
|
227
|
+
const [{ collapses }] = useReducer(reducer$1, initialState$1, (state) => init$1(state, modifiedData));
|
|
228
|
+
return /* @__PURE__ */ jsx(Accordion.Root, { size: "M", children: /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 1, children: collapses.map((collapse, index) => /* @__PURE__ */ jsxs(Accordion.Item, { value: collapse.name, children: [
|
|
229
|
+
/* @__PURE__ */ jsx(Accordion.Header, { variant: index % 2 === 0 ? "secondary" : void 0, children: /* @__PURE__ */ jsx(
|
|
230
|
+
Accordion.Trigger,
|
|
231
|
+
{
|
|
232
|
+
caretPosition: "right",
|
|
233
|
+
description: formatMessage(
|
|
245
234
|
{
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
defaultMessage: "Define all allowed actions for the {name} plugin."
|
|
251
|
-
},
|
|
252
|
-
{ name: collapse.name }
|
|
253
|
-
),
|
|
254
|
-
variant: index % 2 ? "primary" : "secondary"
|
|
255
|
-
}
|
|
235
|
+
id: "users-permissions.Plugin.permissions.plugins.description",
|
|
236
|
+
defaultMessage: "Define all allowed actions for the {name} plugin."
|
|
237
|
+
},
|
|
238
|
+
{ name: collapse.name }
|
|
256
239
|
),
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
},
|
|
260
|
-
collapse.name
|
|
261
|
-
)) });
|
|
240
|
+
children: formatPluginName(collapse.name)
|
|
241
|
+
}
|
|
242
|
+
) }),
|
|
243
|
+
/* @__PURE__ */ jsx(Accordion.Content, { children: /* @__PURE__ */ jsx(PermissionRow, { permissions: modifiedData[collapse.name], name: collapse.name }) })
|
|
244
|
+
] }, collapse.name)) }) });
|
|
262
245
|
};
|
|
263
246
|
const getMethodColor = (verb) => {
|
|
264
247
|
switch (verb) {
|
|
@@ -310,7 +293,7 @@ function BoundRoute({ route }) {
|
|
|
310
293
|
const [controller = "", action = ""] = title ? title.split(".") : [];
|
|
311
294
|
const colors = getMethodColor(route.method);
|
|
312
295
|
return /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
313
|
-
/* @__PURE__ */ jsxs(Typography, { variant: "delta",
|
|
296
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "delta", tag: "h3", children: [
|
|
314
297
|
formatMessage({
|
|
315
298
|
id: "users-permissions.BoundRoute.title",
|
|
316
299
|
defaultMessage: "Bound route to"
|
|
@@ -353,7 +336,7 @@ const Policies = () => {
|
|
|
353
336
|
const pathResolved = path.slice(1).join(".");
|
|
354
337
|
const displayedRoutes = isEmpty(controllerRoutes) ? [] : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));
|
|
355
338
|
return /* @__PURE__ */ jsx(
|
|
356
|
-
|
|
339
|
+
Grid.Item,
|
|
357
340
|
{
|
|
358
341
|
col: 5,
|
|
359
342
|
background: "neutral150",
|
|
@@ -362,15 +345,17 @@ const Policies = () => {
|
|
|
362
345
|
paddingLeft: 7,
|
|
363
346
|
paddingRight: 7,
|
|
364
347
|
style: { minHeight: "100%" },
|
|
348
|
+
direction: "column",
|
|
349
|
+
alignItems: "stretch",
|
|
365
350
|
children: selectedAction ? /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: displayedRoutes.map((route, key) => (
|
|
366
351
|
// eslint-disable-next-line react/no-array-index-key
|
|
367
352
|
/* @__PURE__ */ jsx(BoundRoute, { route }, key)
|
|
368
353
|
)) }) : /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
369
|
-
/* @__PURE__ */ jsx(Typography, { variant: "delta",
|
|
354
|
+
/* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h3", children: formatMessage({
|
|
370
355
|
id: "users-permissions.Policies.header.title",
|
|
371
356
|
defaultMessage: "Advanced settings"
|
|
372
357
|
}) }),
|
|
373
|
-
/* @__PURE__ */ jsx(Typography, {
|
|
358
|
+
/* @__PURE__ */ jsx(Typography, { tag: "p", textColor: "neutral600", children: formatMessage({
|
|
374
359
|
id: "users-permissions.Policies.header.hint",
|
|
375
360
|
defaultMessage: "Select the application's actions or the plugin's actions and click on the cog icon to display the bound route"
|
|
376
361
|
}) })
|
|
@@ -472,20 +457,32 @@ const UsersPermissions = forwardRef(({ permissions, routes }, ref) => {
|
|
|
472
457
|
onChangeSelectAll: handleChangeSelectAll,
|
|
473
458
|
onSelectedAction: handleSelectedAction
|
|
474
459
|
};
|
|
475
|
-
return /* @__PURE__ */ jsx(UsersPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxs(Grid, { gap: 0, shadow: "filterShadow", hasRadius: true, background: "neutral0", children: [
|
|
476
|
-
/* @__PURE__ */ jsx(
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
460
|
+
return /* @__PURE__ */ jsx(UsersPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxs(Grid.Root, { gap: 0, shadow: "filterShadow", hasRadius: true, background: "neutral0", children: [
|
|
461
|
+
/* @__PURE__ */ jsx(
|
|
462
|
+
Grid.Item,
|
|
463
|
+
{
|
|
464
|
+
col: 7,
|
|
465
|
+
paddingTop: 6,
|
|
466
|
+
paddingBottom: 6,
|
|
467
|
+
paddingLeft: 7,
|
|
468
|
+
paddingRight: 7,
|
|
469
|
+
direction: "column",
|
|
470
|
+
alignItems: "stretch",
|
|
471
|
+
children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
472
|
+
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
|
|
473
|
+
/* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
474
|
+
id: getTrad("Plugins.header.title"),
|
|
475
|
+
defaultMessage: "Permissions"
|
|
476
|
+
}) }),
|
|
477
|
+
/* @__PURE__ */ jsx(Typography, { tag: "p", textColor: "neutral600", children: formatMessage({
|
|
478
|
+
id: getTrad("Plugins.header.description"),
|
|
479
|
+
defaultMessage: "Only actions bound by a route are listed below."
|
|
480
|
+
}) })
|
|
481
|
+
] }),
|
|
482
|
+
/* @__PURE__ */ jsx(Permissions, {})
|
|
483
|
+
] })
|
|
484
|
+
}
|
|
485
|
+
),
|
|
489
486
|
/* @__PURE__ */ jsx(Policies, {})
|
|
490
487
|
] }) });
|
|
491
488
|
});
|
|
@@ -495,8 +492,8 @@ UsersPermissions.propTypes = {
|
|
|
495
492
|
};
|
|
496
493
|
const UsersPermissions$1 = memo(UsersPermissions);
|
|
497
494
|
const createRoleSchema = yup.object().shape({
|
|
498
|
-
name: yup.string().required(translatedErrors.required),
|
|
499
|
-
description: yup.string().required(translatedErrors.required)
|
|
495
|
+
name: yup.string().required(translatedErrors.required.id),
|
|
496
|
+
description: yup.string().required(translatedErrors.required.id)
|
|
500
497
|
});
|
|
501
498
|
const cleanPermissions = (permissions) => Object.keys(permissions).reduce((acc, current) => {
|
|
502
499
|
const currentPermission = permissions[current].controllers;
|
|
@@ -514,7 +511,7 @@ const cleanPermissions = (permissions) => Object.keys(permissions).reduce((acc,
|
|
|
514
511
|
return acc;
|
|
515
512
|
}, {});
|
|
516
513
|
const usePlugins = () => {
|
|
517
|
-
const toggleNotification = useNotification();
|
|
514
|
+
const { toggleNotification } = useNotification();
|
|
518
515
|
const { get: get2 } = useFetchClient();
|
|
519
516
|
const { formatAPIError } = useAPIErrorHandler(getTrad);
|
|
520
517
|
const [
|
|
@@ -551,7 +548,7 @@ const usePlugins = () => {
|
|
|
551
548
|
useEffect(() => {
|
|
552
549
|
if (permissionsError) {
|
|
553
550
|
toggleNotification({
|
|
554
|
-
type: "
|
|
551
|
+
type: "danger",
|
|
555
552
|
message: formatAPIError(permissionsError)
|
|
556
553
|
});
|
|
557
554
|
}
|
|
@@ -559,7 +556,7 @@ const usePlugins = () => {
|
|
|
559
556
|
useEffect(() => {
|
|
560
557
|
if (routesError) {
|
|
561
558
|
toggleNotification({
|
|
562
|
-
type: "
|
|
559
|
+
type: "danger",
|
|
563
560
|
message: formatAPIError(routesError)
|
|
564
561
|
});
|
|
565
562
|
}
|
|
@@ -577,9 +574,8 @@ const usePlugins = () => {
|
|
|
577
574
|
};
|
|
578
575
|
const CreatePage = () => {
|
|
579
576
|
const { formatMessage } = useIntl();
|
|
580
|
-
const toggleNotification = useNotification();
|
|
581
|
-
const
|
|
582
|
-
const { lockApp, unlockApp } = useOverlayBlocker();
|
|
577
|
+
const { toggleNotification } = useNotification();
|
|
578
|
+
const navigate = useNavigate();
|
|
583
579
|
const { isLoading: isLoadingPlugins, permissions, routes } = usePlugins();
|
|
584
580
|
const { trackUsage } = useTracking();
|
|
585
581
|
const permissionsRef = React.useRef();
|
|
@@ -587,33 +583,34 @@ const CreatePage = () => {
|
|
|
587
583
|
const mutation = useMutation((body) => post(`/users-permissions/roles`, body), {
|
|
588
584
|
onError() {
|
|
589
585
|
toggleNotification({
|
|
590
|
-
type: "
|
|
591
|
-
message: {
|
|
586
|
+
type: "danger",
|
|
587
|
+
message: formatMessage({
|
|
592
588
|
id: "notification.error",
|
|
593
589
|
defaultMessage: "An error occurred"
|
|
594
|
-
}
|
|
590
|
+
})
|
|
595
591
|
});
|
|
596
592
|
},
|
|
597
593
|
onSuccess() {
|
|
598
594
|
trackUsage("didCreateRole");
|
|
599
595
|
toggleNotification({
|
|
600
596
|
type: "success",
|
|
601
|
-
message: {
|
|
597
|
+
message: formatMessage({
|
|
602
598
|
id: getTrad("Settings.roles.created"),
|
|
603
599
|
defaultMessage: "Role created"
|
|
604
|
-
}
|
|
600
|
+
})
|
|
605
601
|
});
|
|
606
|
-
|
|
602
|
+
navigate(-1);
|
|
607
603
|
}
|
|
608
604
|
});
|
|
609
605
|
const handleCreateRoleSubmit = async (data) => {
|
|
610
|
-
lockApp();
|
|
611
606
|
const permissions2 = permissionsRef.current.getPermissions();
|
|
612
607
|
await mutation.mutate({ ...data, ...permissions2, users: [] });
|
|
613
|
-
unlockApp();
|
|
614
608
|
};
|
|
615
609
|
return /* @__PURE__ */ jsxs(Main, { children: [
|
|
616
|
-
/* @__PURE__ */ jsx(
|
|
610
|
+
/* @__PURE__ */ jsx(Page.Title, { children: formatMessage(
|
|
611
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
612
|
+
{ name: "Roles" }
|
|
613
|
+
) }),
|
|
617
614
|
/* @__PURE__ */ jsx(
|
|
618
615
|
Formik,
|
|
619
616
|
{
|
|
@@ -623,7 +620,7 @@ const CreatePage = () => {
|
|
|
623
620
|
validationSchema: createRoleSchema,
|
|
624
621
|
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxs(Form, { noValidate: true, onSubmit: handleSubmit, children: [
|
|
625
622
|
/* @__PURE__ */ jsx(
|
|
626
|
-
|
|
623
|
+
Layouts.Header,
|
|
627
624
|
{
|
|
628
625
|
primaryAction: !isLoadingPlugins && /* @__PURE__ */ jsx(Button, { type: "submit", loading: mutation.isLoading, startIcon: /* @__PURE__ */ jsx(Check, {}), children: formatMessage({
|
|
629
626
|
id: "global.save",
|
|
@@ -639,7 +636,7 @@ const CreatePage = () => {
|
|
|
639
636
|
})
|
|
640
637
|
}
|
|
641
638
|
),
|
|
642
|
-
/* @__PURE__ */ jsx(
|
|
639
|
+
/* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(
|
|
643
640
|
Flex,
|
|
644
641
|
{
|
|
645
642
|
background: "neutral0",
|
|
@@ -654,40 +651,44 @@ const CreatePage = () => {
|
|
|
654
651
|
shadow: "filterShadow",
|
|
655
652
|
children: [
|
|
656
653
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", children: [
|
|
657
|
-
/* @__PURE__ */ jsx(Typography, { variant: "delta",
|
|
654
|
+
/* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
658
655
|
id: getTrad("EditPage.form.roles"),
|
|
659
656
|
defaultMessage: "Role details"
|
|
660
657
|
}) }),
|
|
661
|
-
/* @__PURE__ */ jsxs(Grid, { gap: 4, children: [
|
|
662
|
-
/* @__PURE__ */ jsx(
|
|
663
|
-
|
|
658
|
+
/* @__PURE__ */ jsxs(Grid.Root, { gap: 4, children: [
|
|
659
|
+
/* @__PURE__ */ jsx(Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
|
|
660
|
+
Field.Root,
|
|
664
661
|
{
|
|
665
662
|
name: "name",
|
|
666
|
-
value: values.name || "",
|
|
667
|
-
onChange: handleChange,
|
|
668
|
-
label: formatMessage({
|
|
669
|
-
id: "global.name",
|
|
670
|
-
defaultMessage: "Name"
|
|
671
|
-
}),
|
|
672
663
|
error: errors?.name ? formatMessage({ id: errors.name, defaultMessage: "Name is required" }) : false,
|
|
673
|
-
required: true
|
|
664
|
+
required: true,
|
|
665
|
+
children: [
|
|
666
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
667
|
+
id: "global.name",
|
|
668
|
+
defaultMessage: "Name"
|
|
669
|
+
}) }),
|
|
670
|
+
/* @__PURE__ */ jsx(TextInput, { value: values.name || "", onChange: handleChange }),
|
|
671
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
672
|
+
]
|
|
674
673
|
}
|
|
675
674
|
) }),
|
|
676
|
-
/* @__PURE__ */ jsx(
|
|
677
|
-
|
|
675
|
+
/* @__PURE__ */ jsx(Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
|
|
676
|
+
Field.Root,
|
|
678
677
|
{
|
|
679
|
-
|
|
680
|
-
value: values.description || "",
|
|
681
|
-
onChange: handleChange,
|
|
682
|
-
label: formatMessage({
|
|
683
|
-
id: "global.description",
|
|
684
|
-
defaultMessage: "Description"
|
|
685
|
-
}),
|
|
678
|
+
name: "description",
|
|
686
679
|
error: errors?.description ? formatMessage({
|
|
687
680
|
id: errors.description,
|
|
688
681
|
defaultMessage: "Description is required"
|
|
689
682
|
}) : false,
|
|
690
|
-
required: true
|
|
683
|
+
required: true,
|
|
684
|
+
children: [
|
|
685
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
686
|
+
id: "global.description",
|
|
687
|
+
defaultMessage: "Description"
|
|
688
|
+
}) }),
|
|
689
|
+
/* @__PURE__ */ jsx(Textarea, { value: values.description || "", onChange: handleChange }),
|
|
690
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
691
|
+
]
|
|
691
692
|
}
|
|
692
693
|
) })
|
|
693
694
|
] })
|
|
@@ -708,14 +709,13 @@ const CreatePage = () => {
|
|
|
708
709
|
)
|
|
709
710
|
] });
|
|
710
711
|
};
|
|
711
|
-
const ProtectedRolesCreatePage = () => /* @__PURE__ */ jsx(
|
|
712
|
+
const ProtectedRolesCreatePage = () => /* @__PURE__ */ jsx(Page.Protect, { permissions: PERMISSIONS.createRole, children: /* @__PURE__ */ jsx(CreatePage, {}) });
|
|
712
713
|
const EditPage = () => {
|
|
713
714
|
const { formatMessage } = useIntl();
|
|
714
|
-
const toggleNotification = useNotification();
|
|
715
|
-
const { lockApp, unlockApp } = useOverlayBlocker();
|
|
715
|
+
const { toggleNotification } = useNotification();
|
|
716
716
|
const {
|
|
717
717
|
params: { id }
|
|
718
|
-
} =
|
|
718
|
+
} = useMatch(`/settings/users-permissions/roles/:id`);
|
|
719
719
|
const { get: get2 } = useFetchClient();
|
|
720
720
|
const { isLoading: isLoadingPlugins, routes } = usePlugins();
|
|
721
721
|
const {
|
|
@@ -734,32 +734,33 @@ const EditPage = () => {
|
|
|
734
734
|
const mutation = useMutation((body) => put(`/users-permissions/roles/${id}`, body), {
|
|
735
735
|
onError(error) {
|
|
736
736
|
toggleNotification({
|
|
737
|
-
type: "
|
|
737
|
+
type: "danger",
|
|
738
738
|
message: formatAPIError(error)
|
|
739
739
|
});
|
|
740
740
|
},
|
|
741
741
|
async onSuccess() {
|
|
742
742
|
toggleNotification({
|
|
743
743
|
type: "success",
|
|
744
|
-
message: {
|
|
744
|
+
message: formatMessage({
|
|
745
745
|
id: getTrad("Settings.roles.created"),
|
|
746
746
|
defaultMessage: "Role edited"
|
|
747
|
-
}
|
|
747
|
+
})
|
|
748
748
|
});
|
|
749
749
|
await refetchRole();
|
|
750
750
|
}
|
|
751
751
|
});
|
|
752
752
|
const handleEditRoleSubmit = async (data) => {
|
|
753
|
-
lockApp();
|
|
754
753
|
const permissions = permissionsRef.current.getPermissions();
|
|
755
754
|
await mutation.mutate({ ...data, ...permissions, users: [] });
|
|
756
|
-
unlockApp();
|
|
757
755
|
};
|
|
758
756
|
if (isLoadingRole) {
|
|
759
|
-
return /* @__PURE__ */ jsx(
|
|
757
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
760
758
|
}
|
|
761
759
|
return /* @__PURE__ */ jsxs(Main, { children: [
|
|
762
|
-
/* @__PURE__ */ jsx(
|
|
760
|
+
/* @__PURE__ */ jsx(Page.Title, { children: formatMessage(
|
|
761
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
762
|
+
{ name: "Roles" }
|
|
763
|
+
) }),
|
|
763
764
|
/* @__PURE__ */ jsx(
|
|
764
765
|
Formik,
|
|
765
766
|
{
|
|
@@ -769,9 +770,9 @@ const EditPage = () => {
|
|
|
769
770
|
validationSchema: createRoleSchema,
|
|
770
771
|
children: ({ handleSubmit, values, handleChange, errors }) => /* @__PURE__ */ jsxs(Form, { noValidate: true, onSubmit: handleSubmit, children: [
|
|
771
772
|
/* @__PURE__ */ jsx(
|
|
772
|
-
|
|
773
|
+
Layouts.Header,
|
|
773
774
|
{
|
|
774
|
-
primaryAction: !isLoadingPlugins
|
|
775
|
+
primaryAction: !isLoadingPlugins ? /* @__PURE__ */ jsx(
|
|
775
776
|
Button,
|
|
776
777
|
{
|
|
777
778
|
disabled: role.code === "strapi-super-admin",
|
|
@@ -783,16 +784,13 @@ const EditPage = () => {
|
|
|
783
784
|
defaultMessage: "Save"
|
|
784
785
|
})
|
|
785
786
|
}
|
|
786
|
-
),
|
|
787
|
+
) : null,
|
|
787
788
|
title: role.name,
|
|
788
789
|
subtitle: role.description,
|
|
789
|
-
navigationAction: /* @__PURE__ */ jsx(
|
|
790
|
-
id: "global.back",
|
|
791
|
-
defaultMessage: "Back"
|
|
792
|
-
}) })
|
|
790
|
+
navigationAction: /* @__PURE__ */ jsx(BackButton, {})
|
|
793
791
|
}
|
|
794
792
|
),
|
|
795
|
-
/* @__PURE__ */ jsx(
|
|
793
|
+
/* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(
|
|
796
794
|
Flex,
|
|
797
795
|
{
|
|
798
796
|
background: "neutral0",
|
|
@@ -807,40 +805,47 @@ const EditPage = () => {
|
|
|
807
805
|
shadow: "filterShadow",
|
|
808
806
|
children: [
|
|
809
807
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 4, children: [
|
|
810
|
-
/* @__PURE__ */ jsx(Typography, { variant: "delta",
|
|
808
|
+
/* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
|
811
809
|
id: getTrad("EditPage.form.roles"),
|
|
812
810
|
defaultMessage: "Role details"
|
|
813
811
|
}) }),
|
|
814
|
-
/* @__PURE__ */ jsxs(Grid, { gap: 4, children: [
|
|
815
|
-
/* @__PURE__ */ jsx(
|
|
816
|
-
|
|
812
|
+
/* @__PURE__ */ jsxs(Grid.Root, { gap: 4, children: [
|
|
813
|
+
/* @__PURE__ */ jsx(Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
|
|
814
|
+
Field.Root,
|
|
817
815
|
{
|
|
818
816
|
name: "name",
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
817
|
+
error: errors?.name ? formatMessage({
|
|
818
|
+
id: errors.name,
|
|
819
|
+
defaultMessage: "Name is required"
|
|
820
|
+
}) : false,
|
|
821
|
+
required: true,
|
|
822
|
+
children: [
|
|
823
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
824
|
+
id: "global.name",
|
|
825
|
+
defaultMessage: "Name"
|
|
826
|
+
}) }),
|
|
827
|
+
/* @__PURE__ */ jsx(TextInput, { value: values.name || "", onChange: handleChange }),
|
|
828
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
829
|
+
]
|
|
827
830
|
}
|
|
828
831
|
) }),
|
|
829
|
-
/* @__PURE__ */ jsx(
|
|
830
|
-
|
|
832
|
+
/* @__PURE__ */ jsx(Grid.Item, { col: 6, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
|
|
833
|
+
Field.Root,
|
|
831
834
|
{
|
|
832
|
-
|
|
833
|
-
value: values.description || "",
|
|
834
|
-
onChange: handleChange,
|
|
835
|
-
label: formatMessage({
|
|
836
|
-
id: "global.description",
|
|
837
|
-
defaultMessage: "Description"
|
|
838
|
-
}),
|
|
835
|
+
name: "description",
|
|
839
836
|
error: errors?.description ? formatMessage({
|
|
840
837
|
id: errors.description,
|
|
841
838
|
defaultMessage: "Description is required"
|
|
842
839
|
}) : false,
|
|
843
|
-
required: true
|
|
840
|
+
required: true,
|
|
841
|
+
children: [
|
|
842
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
843
|
+
id: "global.description",
|
|
844
|
+
defaultMessage: "Description"
|
|
845
|
+
}) }),
|
|
846
|
+
/* @__PURE__ */ jsx(Textarea, { value: values.description || "", onChange: handleChange }),
|
|
847
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
848
|
+
]
|
|
844
849
|
}
|
|
845
850
|
) })
|
|
846
851
|
] })
|
|
@@ -861,18 +866,18 @@ const EditPage = () => {
|
|
|
861
866
|
)
|
|
862
867
|
] });
|
|
863
868
|
};
|
|
864
|
-
const ProtectedRolesEditPage = () => /* @__PURE__ */ jsx(
|
|
865
|
-
const EditLink = styled(Link
|
|
869
|
+
const ProtectedRolesEditPage = () => /* @__PURE__ */ jsx(Page.Protect, { permissions: PERMISSIONS.updateRole, children: /* @__PURE__ */ jsx(EditPage, {}) });
|
|
870
|
+
const EditLink = styled(Link)`
|
|
866
871
|
align-items: center;
|
|
867
|
-
height:
|
|
872
|
+
height: 3.2rem;
|
|
873
|
+
width: 3.2rem;
|
|
868
874
|
display: flex;
|
|
869
875
|
justify-content: center;
|
|
870
|
-
padding: ${({ theme }) => `${theme.spaces[2]}
|
|
871
|
-
width: ${pxToRem(32)};
|
|
876
|
+
padding: ${({ theme }) => `${theme.spaces[2]}`};
|
|
872
877
|
|
|
873
878
|
svg {
|
|
874
|
-
height:
|
|
875
|
-
width:
|
|
879
|
+
height: 1.6rem;
|
|
880
|
+
width: 1.6rem;
|
|
876
881
|
|
|
877
882
|
path {
|
|
878
883
|
fill: ${({ theme }) => theme.colors.neutral500};
|
|
@@ -888,19 +893,16 @@ const EditLink = styled(Link$1)`
|
|
|
888
893
|
}
|
|
889
894
|
}
|
|
890
895
|
`;
|
|
891
|
-
const TableBody = ({ sortedRoles, canDelete,
|
|
896
|
+
const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelete }) => {
|
|
892
897
|
const { formatMessage } = useIntl();
|
|
893
|
-
const
|
|
898
|
+
const navigate = useNavigate();
|
|
894
899
|
const [showConfirmDelete, setShowConfirmDelete] = onDelete;
|
|
895
900
|
const checkCanDeleteRole = (role) => canDelete && !["public", "authenticated"].includes(role.type);
|
|
896
901
|
const handleClickDelete = (id) => {
|
|
897
902
|
setRoleToDelete(id);
|
|
898
903
|
setShowConfirmDelete(!showConfirmDelete);
|
|
899
904
|
};
|
|
900
|
-
|
|
901
|
-
push(`/settings/users-permissions/roles/${id}`);
|
|
902
|
-
};
|
|
903
|
-
return /* @__PURE__ */ jsx(Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxs(Tr, { ...onRowClick({ fn: () => handleClickEdit(role.id) }), children: [
|
|
905
|
+
return /* @__PURE__ */ jsx(Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxs(Tr, { onClick: () => navigate(role.id.toString()), children: [
|
|
904
906
|
/* @__PURE__ */ jsx(Td, { width: "20%", children: /* @__PURE__ */ jsx(Typography, { children: role.name }) }),
|
|
905
907
|
/* @__PURE__ */ jsx(Td, { width: "50%", children: /* @__PURE__ */ jsx(Typography, { children: role.description }) }),
|
|
906
908
|
/* @__PURE__ */ jsx(Td, { width: "30%", children: /* @__PURE__ */ jsx(Typography, { children: formatMessage(
|
|
@@ -910,82 +912,58 @@ const TableBody = ({ sortedRoles, canDelete, permissions, setRoleToDelete, onDel
|
|
|
910
912
|
},
|
|
911
913
|
{ number: role.nb_users }
|
|
912
914
|
) }) }),
|
|
913
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "end",
|
|
914
|
-
|
|
915
|
+
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "end", onClick: (e) => e.stopPropagation(), children: [
|
|
916
|
+
canUpdate ? /* @__PURE__ */ jsx(
|
|
915
917
|
EditLink,
|
|
916
918
|
{
|
|
917
|
-
|
|
919
|
+
tag: NavLink,
|
|
920
|
+
to: role.id.toString(),
|
|
918
921
|
"aria-label": formatMessage(
|
|
919
922
|
{ id: "app.component.table.edit", defaultMessage: "Edit {target}" },
|
|
920
923
|
{ target: `${role.name}` }
|
|
921
924
|
),
|
|
922
925
|
children: /* @__PURE__ */ jsx(Pencil, {})
|
|
923
926
|
}
|
|
924
|
-
)
|
|
925
|
-
checkCanDeleteRole(role) && /* @__PURE__ */ jsx(
|
|
927
|
+
) : null,
|
|
928
|
+
checkCanDeleteRole(role) && /* @__PURE__ */ jsx(
|
|
926
929
|
IconButton,
|
|
927
930
|
{
|
|
928
|
-
onClick: () => handleClickDelete(role.id),
|
|
929
|
-
|
|
930
|
-
icon: /* @__PURE__ */ jsx(Trash, {}),
|
|
931
|
+
onClick: () => handleClickDelete(role.id.toString()),
|
|
932
|
+
variant: "ghost",
|
|
931
933
|
label: formatMessage(
|
|
932
934
|
{ id: "global.delete-target", defaultMessage: "Delete {target}" },
|
|
933
935
|
{ target: `${role.name}` }
|
|
934
|
-
)
|
|
936
|
+
),
|
|
937
|
+
children: /* @__PURE__ */ jsx(Trash, {})
|
|
935
938
|
}
|
|
936
|
-
)
|
|
939
|
+
)
|
|
937
940
|
] }) })
|
|
938
941
|
] }, role.name)) });
|
|
939
942
|
};
|
|
940
943
|
TableBody.defaultProps = {
|
|
941
|
-
canDelete: false
|
|
944
|
+
canDelete: false,
|
|
945
|
+
canUpdate: false
|
|
942
946
|
};
|
|
943
947
|
TableBody.propTypes = {
|
|
944
948
|
onDelete: PropTypes.array.isRequired,
|
|
945
|
-
permissions: PropTypes.object.isRequired,
|
|
946
949
|
setRoleToDelete: PropTypes.func.isRequired,
|
|
947
950
|
sortedRoles: PropTypes.array.isRequired,
|
|
948
|
-
canDelete: PropTypes.bool
|
|
949
|
-
|
|
950
|
-
const fetchData = async (toggleNotification, notifyStatus) => {
|
|
951
|
-
try {
|
|
952
|
-
const { get: get2 } = getFetchClient();
|
|
953
|
-
const { data } = await get2("/users-permissions/roles");
|
|
954
|
-
notifyStatus("The roles have loaded successfully");
|
|
955
|
-
return data;
|
|
956
|
-
} catch (err) {
|
|
957
|
-
toggleNotification({
|
|
958
|
-
type: "warning",
|
|
959
|
-
message: { id: "notification.error" }
|
|
960
|
-
});
|
|
961
|
-
throw new Error(err);
|
|
962
|
-
}
|
|
963
|
-
};
|
|
964
|
-
const deleteData = async (id, toggleNotification) => {
|
|
965
|
-
try {
|
|
966
|
-
const { del } = getFetchClient();
|
|
967
|
-
await del(`/users-permissions/roles/${id}`);
|
|
968
|
-
} catch (error) {
|
|
969
|
-
toggleNotification({
|
|
970
|
-
type: "warning",
|
|
971
|
-
message: { id: "notification.error", defaultMessage: "An error occured" }
|
|
972
|
-
});
|
|
973
|
-
}
|
|
951
|
+
canDelete: PropTypes.bool,
|
|
952
|
+
canUpdate: PropTypes.bool
|
|
974
953
|
};
|
|
975
954
|
const RolesListPage = () => {
|
|
976
955
|
const { trackUsage } = useTracking();
|
|
977
956
|
const { formatMessage, locale } = useIntl();
|
|
978
|
-
const toggleNotification = useNotification();
|
|
957
|
+
const { toggleNotification } = useNotification();
|
|
979
958
|
const { notifyStatus } = useNotifyAT();
|
|
980
959
|
const [{ query }] = useQueryParams();
|
|
981
960
|
const _q = query?._q || "";
|
|
982
961
|
const [showConfirmDelete, setShowConfirmDelete] = useState(false);
|
|
983
|
-
const [isConfirmButtonLoading, setIsConfirmButtonLoading] = useState(false);
|
|
984
962
|
const [roleToDelete, setRoleToDelete] = useState();
|
|
985
|
-
|
|
963
|
+
const { del, get: get2 } = useFetchClient();
|
|
986
964
|
const {
|
|
987
965
|
isLoading: isLoadingForPermissions,
|
|
988
|
-
allowedActions: { canRead, canDelete }
|
|
966
|
+
allowedActions: { canRead, canDelete, canCreate, canUpdate }
|
|
989
967
|
} = useRBAC({
|
|
990
968
|
create: PERMISSIONS.createRole,
|
|
991
969
|
read: PERMISSIONS.readRoles,
|
|
@@ -997,20 +975,43 @@ const RolesListPage = () => {
|
|
|
997
975
|
data: { roles },
|
|
998
976
|
isFetching,
|
|
999
977
|
refetch
|
|
1000
|
-
} = useQuery("get-roles", () => fetchData(toggleNotification, notifyStatus), {
|
|
978
|
+
} = useQuery("get-roles", () => fetchData(toggleNotification, formatMessage, notifyStatus), {
|
|
1001
979
|
initialData: {},
|
|
1002
980
|
enabled: canRead
|
|
1003
981
|
});
|
|
1004
|
-
const {
|
|
982
|
+
const { contains } = useFilter(locale, {
|
|
1005
983
|
sensitivity: "base"
|
|
1006
984
|
});
|
|
1007
985
|
const formatter = useCollator(locale, {
|
|
1008
986
|
sensitivity: "base"
|
|
1009
987
|
});
|
|
1010
|
-
const isLoading = isLoadingForData || isFetching;
|
|
988
|
+
const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;
|
|
1011
989
|
const handleShowConfirmDelete = () => {
|
|
1012
990
|
setShowConfirmDelete(!showConfirmDelete);
|
|
1013
991
|
};
|
|
992
|
+
const deleteData = async (id, formatMessage2, toggleNotification2) => {
|
|
993
|
+
try {
|
|
994
|
+
await del(`/users-permissions/roles/${id}`);
|
|
995
|
+
} catch (error) {
|
|
996
|
+
toggleNotification2({
|
|
997
|
+
type: "danger",
|
|
998
|
+
message: formatMessage2({ id: "notification.error", defaultMessage: "An error occured" })
|
|
999
|
+
});
|
|
1000
|
+
}
|
|
1001
|
+
};
|
|
1002
|
+
const fetchData = async (toggleNotification2, formatMessage2, notifyStatus2) => {
|
|
1003
|
+
try {
|
|
1004
|
+
const { data } = await get2("/users-permissions/roles");
|
|
1005
|
+
notifyStatus2("The roles have loaded successfully");
|
|
1006
|
+
return data;
|
|
1007
|
+
} catch (err) {
|
|
1008
|
+
toggleNotification2({
|
|
1009
|
+
type: "danger",
|
|
1010
|
+
message: formatMessage2({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1011
|
+
});
|
|
1012
|
+
throw new Error(err);
|
|
1013
|
+
}
|
|
1014
|
+
};
|
|
1014
1015
|
const emptyLayout = {
|
|
1015
1016
|
roles: {
|
|
1016
1017
|
id: getTrad("Roles.empty"),
|
|
@@ -1025,28 +1026,32 @@ const RolesListPage = () => {
|
|
|
1025
1026
|
id: "global.roles",
|
|
1026
1027
|
defaultMessage: "Roles"
|
|
1027
1028
|
});
|
|
1028
|
-
const deleteMutation = useMutation((id) => deleteData(id, toggleNotification), {
|
|
1029
|
+
const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {
|
|
1029
1030
|
async onSuccess() {
|
|
1030
1031
|
await refetch();
|
|
1031
1032
|
}
|
|
1032
1033
|
});
|
|
1033
1034
|
const handleConfirmDelete = async () => {
|
|
1034
|
-
setIsConfirmButtonLoading(true);
|
|
1035
1035
|
await deleteMutation.mutateAsync(roleToDelete);
|
|
1036
1036
|
setShowConfirmDelete(!showConfirmDelete);
|
|
1037
|
-
setIsConfirmButtonLoading(false);
|
|
1038
1037
|
};
|
|
1039
|
-
const sortedRoles = (roles || []).filter((role) =>
|
|
1038
|
+
const sortedRoles = (roles || []).filter((role) => contains(role.name, _q) || contains(role.description, _q)).sort(
|
|
1040
1039
|
(a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)
|
|
1041
1040
|
);
|
|
1042
1041
|
const emptyContent = _q && !sortedRoles.length ? "search" : "roles";
|
|
1043
1042
|
const colCount = 4;
|
|
1044
1043
|
const rowCount = (roles?.length || 0) + 1;
|
|
1045
|
-
|
|
1046
|
-
/* @__PURE__ */ jsx(
|
|
1047
|
-
|
|
1044
|
+
if (isLoading) {
|
|
1045
|
+
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
1046
|
+
}
|
|
1047
|
+
return /* @__PURE__ */ jsxs(Layouts.Root, { children: [
|
|
1048
|
+
/* @__PURE__ */ jsx(Page.Title, { children: formatMessage(
|
|
1049
|
+
{ id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
|
|
1050
|
+
{ name: pageTitle }
|
|
1051
|
+
) }),
|
|
1052
|
+
/* @__PURE__ */ jsxs(Page.Main, { children: [
|
|
1048
1053
|
/* @__PURE__ */ jsx(
|
|
1049
|
-
|
|
1054
|
+
Layouts.Header,
|
|
1050
1055
|
{
|
|
1051
1056
|
title: formatMessage({
|
|
1052
1057
|
id: "global.roles",
|
|
@@ -1056,10 +1061,11 @@ const RolesListPage = () => {
|
|
|
1056
1061
|
id: "Settings.roles.list.description",
|
|
1057
1062
|
defaultMessage: "List of roles"
|
|
1058
1063
|
}),
|
|
1059
|
-
primaryAction:
|
|
1064
|
+
primaryAction: canCreate ? /* @__PURE__ */ jsx(
|
|
1060
1065
|
LinkButton,
|
|
1061
1066
|
{
|
|
1062
|
-
to: "
|
|
1067
|
+
to: "new",
|
|
1068
|
+
tag: NavLink,
|
|
1063
1069
|
onClick: () => trackUsage("willCreateRole"),
|
|
1064
1070
|
startIcon: /* @__PURE__ */ jsx(Plus, {}),
|
|
1065
1071
|
size: "S",
|
|
@@ -1068,14 +1074,14 @@ const RolesListPage = () => {
|
|
|
1068
1074
|
defaultMessage: "Add new role"
|
|
1069
1075
|
})
|
|
1070
1076
|
}
|
|
1071
|
-
)
|
|
1077
|
+
) : null
|
|
1072
1078
|
}
|
|
1073
1079
|
),
|
|
1074
1080
|
/* @__PURE__ */ jsx(
|
|
1075
|
-
|
|
1081
|
+
Layouts.Action,
|
|
1076
1082
|
{
|
|
1077
1083
|
startActions: /* @__PURE__ */ jsx(
|
|
1078
|
-
|
|
1084
|
+
SearchInput,
|
|
1079
1085
|
{
|
|
1080
1086
|
label: formatMessage({
|
|
1081
1087
|
id: "app.component.search.label",
|
|
@@ -1085,9 +1091,8 @@ const RolesListPage = () => {
|
|
|
1085
1091
|
)
|
|
1086
1092
|
}
|
|
1087
1093
|
),
|
|
1088
|
-
/* @__PURE__ */ jsxs(
|
|
1089
|
-
!canRead && /* @__PURE__ */ jsx(NoPermissions, {}),
|
|
1090
|
-
(isLoading || isLoadingForPermissions) && /* @__PURE__ */ jsx(LoadingIndicatorPage, {}),
|
|
1094
|
+
/* @__PURE__ */ jsxs(Layouts.Content, { children: [
|
|
1095
|
+
!canRead && /* @__PURE__ */ jsx(Page.NoPermissions, {}),
|
|
1091
1096
|
canRead && sortedRoles && sortedRoles?.length ? /* @__PURE__ */ jsxs(Table, { colCount, rowCount, children: [
|
|
1092
1097
|
/* @__PURE__ */ jsx(Thead, { children: /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1093
1098
|
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }),
|
|
@@ -1109,51 +1114,29 @@ const RolesListPage = () => {
|
|
|
1109
1114
|
{
|
|
1110
1115
|
sortedRoles,
|
|
1111
1116
|
canDelete,
|
|
1117
|
+
canUpdate,
|
|
1112
1118
|
permissions: PERMISSIONS,
|
|
1113
1119
|
setRoleToDelete,
|
|
1114
1120
|
onDelete: [showConfirmDelete, setShowConfirmDelete]
|
|
1115
1121
|
}
|
|
1116
1122
|
)
|
|
1117
|
-
] }) : /* @__PURE__ */ jsx(EmptyStateLayout, { content: emptyLayout[emptyContent] })
|
|
1123
|
+
] }) : /* @__PURE__ */ jsx(EmptyStateLayout, { content: formatMessage(emptyLayout[emptyContent]) })
|
|
1118
1124
|
] }),
|
|
1119
|
-
/* @__PURE__ */ jsx(
|
|
1120
|
-
ConfirmDialog,
|
|
1121
|
-
{
|
|
1122
|
-
isConfirmButtonLoading,
|
|
1123
|
-
onConfirm: handleConfirmDelete,
|
|
1124
|
-
onToggleDialog: handleShowConfirmDelete,
|
|
1125
|
-
isOpen: showConfirmDelete
|
|
1126
|
-
}
|
|
1127
|
-
)
|
|
1125
|
+
/* @__PURE__ */ jsx(Dialog.Root, { open: showConfirmDelete, onOpenChange: handleShowConfirmDelete, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleConfirmDelete }) })
|
|
1128
1126
|
] })
|
|
1129
1127
|
] });
|
|
1130
1128
|
};
|
|
1131
1129
|
const ProtectedRolesListPage = () => {
|
|
1132
|
-
return /* @__PURE__ */ jsx(
|
|
1130
|
+
return /* @__PURE__ */ jsx(Page.Protect, { permissions: PERMISSIONS.accessRoles, children: /* @__PURE__ */ jsx(RolesListPage, {}) });
|
|
1133
1131
|
};
|
|
1134
1132
|
const Roles = () => {
|
|
1135
|
-
return /* @__PURE__ */ jsx(
|
|
1136
|
-
/* @__PURE__ */ jsx(
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
path: "/settings/users-permissions/roles/new",
|
|
1140
|
-
component: ProtectedRolesCreatePage,
|
|
1141
|
-
exact: true
|
|
1142
|
-
}
|
|
1143
|
-
),
|
|
1144
|
-
/* @__PURE__ */ jsx(
|
|
1145
|
-
Route,
|
|
1146
|
-
{
|
|
1147
|
-
path: "/settings/users-permissions/roles/:id",
|
|
1148
|
-
component: ProtectedRolesEditPage,
|
|
1149
|
-
exact: true
|
|
1150
|
-
}
|
|
1151
|
-
),
|
|
1152
|
-
/* @__PURE__ */ jsx(Route, { path: "/settings/users-permissions/roles", component: ProtectedRolesListPage, exact: true }),
|
|
1153
|
-
/* @__PURE__ */ jsx(Route, { path: "", component: AnErrorOccurred })
|
|
1133
|
+
return /* @__PURE__ */ jsx(Page.Protect, { permissions: PERMISSIONS.accessRoles, children: /* @__PURE__ */ jsxs(Routes, { children: [
|
|
1134
|
+
/* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(ProtectedRolesListPage, {}) }),
|
|
1135
|
+
/* @__PURE__ */ jsx(Route, { path: "new", element: /* @__PURE__ */ jsx(ProtectedRolesCreatePage, {}) }),
|
|
1136
|
+
/* @__PURE__ */ jsx(Route, { path: ":id", element: /* @__PURE__ */ jsx(ProtectedRolesEditPage, {}) })
|
|
1154
1137
|
] }) });
|
|
1155
1138
|
};
|
|
1156
1139
|
export {
|
|
1157
1140
|
Roles as default
|
|
1158
1141
|
};
|
|
1159
|
-
//# sourceMappingURL=index-
|
|
1142
|
+
//# sourceMappingURL=index-CnX2wiLY.mjs.map
|