@strapi/plugin-users-permissions 5.0.0-alpha.0 → 5.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/admin/src/index.js +1 -2
  2. package/admin/src/pages/AdvancedSettings/index.jsx +4 -6
  3. package/admin/src/pages/EmailTemplates/components/EmailTable.jsx +4 -5
  4. package/admin/src/pages/EmailTemplates/index.jsx +5 -7
  5. package/admin/src/pages/Providers/index.jsx +6 -18
  6. package/admin/src/pages/Roles/hooks/usePlugins.js +1 -2
  7. package/admin/src/pages/Roles/pages/CreatePage.jsx +1 -2
  8. package/admin/src/pages/Roles/pages/EditPage.jsx +7 -2
  9. package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +2 -3
  10. package/admin/src/pages/Roles/pages/ListPage/index.jsx +33 -6
  11. package/admin/src/utils/prefixPluginTranslations.js +13 -0
  12. package/dist/_chunks/{EditViewPage-xYzUSAwS-wpHlxdkC.js → EditViewPage-JFzIJClS-9jnyNYlZ.js} +181 -167
  13. package/dist/_chunks/{EditViewPage-xYzUSAwS-wpHlxdkC.js.map → EditViewPage-JFzIJClS-9jnyNYlZ.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-xYzUSAwS-5mOQ_-nB.mjs → EditViewPage-JFzIJClS-SluImrzz.mjs} +44 -32
  15. package/dist/_chunks/EditViewPage-JFzIJClS-SluImrzz.mjs.map +1 -0
  16. package/dist/_chunks/{ListViewPage-xOVa04T_-elahT0e9.js → ListViewPage-1VNVP9Rw-94jqnla4.js} +104 -105
  17. package/dist/_chunks/ListViewPage-1VNVP9Rw-94jqnla4.js.map +1 -0
  18. package/dist/_chunks/{ListViewPage-xOVa04T_-lbfb219V.mjs → ListViewPage-1VNVP9Rw-Ce-HkFp1.mjs} +9 -10
  19. package/dist/_chunks/ListViewPage-1VNVP9Rw-Ce-HkFp1.mjs.map +1 -0
  20. package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs → ReviewWorkflowsColumn-sPZxvFUd-Cd4JhTlj.mjs} +2 -2
  21. package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs.map → ReviewWorkflowsColumn-sPZxvFUd-Cd4JhTlj.mjs.map} +1 -1
  22. package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js → ReviewWorkflowsColumn-sPZxvFUd-S2eFi9Dy.js} +5 -5
  23. package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js.map → ReviewWorkflowsColumn-sPZxvFUd-S2eFi9Dy.js.map} +1 -1
  24. package/dist/_chunks/{constants-WjN6I3sL-7e3gpx4b.mjs → constants-0OGkpIzK-R5N7-OUr.mjs} +2 -2
  25. package/dist/_chunks/{constants-WjN6I3sL-7e3gpx4b.mjs.map → constants-0OGkpIzK-R5N7-OUr.mjs.map} +1 -1
  26. package/dist/_chunks/{constants-WjN6I3sL-cDZPE6ED.js → constants-0OGkpIzK-f_M9PDKN.js} +18 -18
  27. package/dist/_chunks/{constants-WjN6I3sL-cDZPE6ED.js.map → constants-0OGkpIzK-f_M9PDKN.js.map} +1 -1
  28. package/dist/_chunks/{index-VgvlwVA7.js → index-6X9XaLjS.js} +10 -11
  29. package/dist/_chunks/index-6X9XaLjS.js.map +1 -0
  30. package/dist/_chunks/{index-5ZvCaCyY-06DLg5eU.mjs → index-GIVuHJgC-_q6V7_2B.mjs} +2822 -2710
  31. package/dist/_chunks/index-GIVuHJgC-_q6V7_2B.mjs.map +1 -0
  32. package/dist/_chunks/{index-5ZvCaCyY-JgYo3Jws.js → index-GIVuHJgC-tj2acNbO.js} +2791 -2679
  33. package/dist/_chunks/index-GIVuHJgC-tj2acNbO.js.map +1 -0
  34. package/dist/_chunks/{index-TJUxOCtJ.js → index-Q5NQ4RI9.js} +20 -12
  35. package/dist/_chunks/index-Q5NQ4RI9.js.map +1 -0
  36. package/dist/_chunks/{index-MEUac_4V.js → index-RT4MW9Nr.js} +35 -37
  37. package/dist/_chunks/index-RT4MW9Nr.js.map +1 -0
  38. package/dist/_chunks/{index-A3oJlPcE.mjs → index-av_iGW-0.mjs} +31 -33
  39. package/dist/_chunks/index-av_iGW-0.mjs.map +1 -0
  40. package/dist/_chunks/{index-bRuKnVcH.js → index-heeE_h30.js} +8 -12
  41. package/dist/_chunks/index-heeE_h30.js.map +1 -0
  42. package/dist/_chunks/{index-53jX2hhF.mjs → index-iaIILeuQ.mjs} +19 -11
  43. package/dist/_chunks/index-iaIILeuQ.mjs.map +1 -0
  44. package/dist/_chunks/{index-vXywiVeM.mjs → index-pDvppjQG.mjs} +11 -12
  45. package/dist/_chunks/index-pDvppjQG.mjs.map +1 -0
  46. package/dist/_chunks/{index-mzJ2Vb5u.js → index-tFzYCM9l.js} +4 -5
  47. package/dist/_chunks/index-tFzYCM9l.js.map +1 -0
  48. package/dist/_chunks/{index-ee_14Ldw.mjs → index-vvcDunmb.mjs} +9 -13
  49. package/dist/_chunks/index-vvcDunmb.mjs.map +1 -0
  50. package/dist/_chunks/{index-N-GcFWtg.mjs → index-whB2wk2v.mjs} +6 -7
  51. package/dist/_chunks/index-whB2wk2v.mjs.map +1 -0
  52. package/dist/_chunks/{useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs → useSyncRbac-JNQibLFa-D0RzXrU4.mjs} +2 -2
  53. package/dist/_chunks/{useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs.map → useSyncRbac-JNQibLFa-D0RzXrU4.mjs.map} +1 -1
  54. package/dist/_chunks/{useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js → useSyncRbac-JNQibLFa-G2N9BPgu.js} +7 -7
  55. package/dist/_chunks/{useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js.map → useSyncRbac-JNQibLFa-G2N9BPgu.js.map} +1 -1
  56. package/dist/admin/index.js +1 -2
  57. package/dist/admin/index.js.map +1 -1
  58. package/dist/admin/index.mjs +1 -2
  59. package/dist/admin/index.mjs.map +1 -1
  60. package/package.json +6 -6
  61. package/admin/src/pages/Roles/pages/ListPage/utils/api.js +0 -30
  62. package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs.map +0 -1
  63. package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js.map +0 -1
  64. package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs.map +0 -1
  65. package/dist/_chunks/index-53jX2hhF.mjs.map +0 -1
  66. package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs.map +0 -1
  67. package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js.map +0 -1
  68. package/dist/_chunks/index-A3oJlPcE.mjs.map +0 -1
  69. package/dist/_chunks/index-MEUac_4V.js.map +0 -1
  70. package/dist/_chunks/index-N-GcFWtg.mjs.map +0 -1
  71. package/dist/_chunks/index-TJUxOCtJ.js.map +0 -1
  72. package/dist/_chunks/index-VgvlwVA7.js.map +0 -1
  73. package/dist/_chunks/index-bRuKnVcH.js.map +0 -1
  74. package/dist/_chunks/index-ee_14Ldw.mjs.map +0 -1
  75. package/dist/_chunks/index-mzJ2Vb5u.js.map +0 -1
  76. package/dist/_chunks/index-vXywiVeM.mjs.map +0 -1
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- const helperPlugin = require("@strapi/helper-plugin");
3
2
  const __variableDynamicImportRuntimeHelper = (glob, path) => {
4
3
  const v = glob[path];
5
4
  if (v) {
@@ -10,7 +9,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path) => {
10
9
  });
11
10
  };
12
11
  const name$1 = "@strapi/plugin-users-permissions";
13
- const version = "4.20.5";
12
+ const version = "5.0.0-alpha.1";
14
13
  const description = "Protect your API with a full-authentication process based on JWT";
15
14
  const repository = {
16
15
  type: "git",
@@ -57,9 +56,9 @@ const scripts = {
57
56
  };
58
57
  const dependencies = {
59
58
  "@strapi/design-system": "1.16.0",
60
- "@strapi/helper-plugin": "4.20.5",
59
+ "@strapi/helper-plugin": "5.0.0-alpha.1",
61
60
  "@strapi/icons": "1.16.0",
62
- "@strapi/utils": "4.20.5",
61
+ "@strapi/utils": "5.0.0-alpha.1",
63
62
  bcryptjs: "2.4.3",
64
63
  formik: "2.4.5",
65
64
  "grant-koa": "5.4.8",
@@ -78,8 +77,8 @@ const dependencies = {
78
77
  yup: "0.32.9"
79
78
  };
80
79
  const devDependencies = {
81
- "@strapi/pack-up": "4.20.5",
82
- "@strapi/strapi": "4.20.5",
80
+ "@strapi/pack-up": "5.0.0-alpha.1",
81
+ "@strapi/strapi": "5.0.0-alpha.1",
83
82
  "@testing-library/dom": "9.2.0",
84
83
  "@testing-library/react": "14.0.0",
85
84
  "@testing-library/user-event": "14.4.3",
@@ -151,6 +150,15 @@ const PERMISSIONS = {
151
150
  };
152
151
  const pluginId = pluginPkg.name.replace(/^@strapi\/plugin-/i, "");
153
152
  const getTrad = (id) => `${pluginId}.${id}`;
153
+ const prefixPluginTranslations = (trad, pluginId2) => {
154
+ if (!pluginId2) {
155
+ throw new TypeError("pluginId can't be empty");
156
+ }
157
+ return Object.keys(trad).reduce((acc, current) => {
158
+ acc[`${pluginId2}.${current}`] = trad[current];
159
+ return acc;
160
+ }, {});
161
+ };
154
162
  const name = pluginPkg.strapi.name;
155
163
  const index = {
156
164
  register(app) {
@@ -170,7 +178,7 @@ const index = {
170
178
  },
171
179
  id: "roles",
172
180
  to: `users-permissions/roles`,
173
- Component: () => Promise.resolve().then(() => require("./index-MEUac_4V.js")),
181
+ Component: () => Promise.resolve().then(() => require("./index-RT4MW9Nr.js")),
174
182
  permissions: PERMISSIONS.accessRoles
175
183
  },
176
184
  {
@@ -180,7 +188,7 @@ const index = {
180
188
  },
181
189
  id: "providers",
182
190
  to: `users-permissions/providers`,
183
- Component: () => Promise.resolve().then(() => require("./index-bRuKnVcH.js")),
191
+ Component: () => Promise.resolve().then(() => require("./index-heeE_h30.js")),
184
192
  permissions: PERMISSIONS.readProviders
185
193
  },
186
194
  {
@@ -190,7 +198,7 @@ const index = {
190
198
  },
191
199
  id: "email-templates",
192
200
  to: `users-permissions/email-templates`,
193
- Component: () => Promise.resolve().then(() => require("./index-VgvlwVA7.js")).then((mod) => ({
201
+ Component: () => Promise.resolve().then(() => require("./index-6X9XaLjS.js")).then((mod) => ({
194
202
  default: mod.ProtectedEmailTemplatesPage
195
203
  })),
196
204
  permissions: PERMISSIONS.readEmailTemplates
@@ -202,7 +210,7 @@ const index = {
202
210
  },
203
211
  id: "advanced-settings",
204
212
  to: `users-permissions/advanced-settings`,
205
- Component: () => Promise.resolve().then(() => require("./index-mzJ2Vb5u.js")).then((mod) => ({
213
+ Component: () => Promise.resolve().then(() => require("./index-tFzYCM9l.js")).then((mod) => ({
206
214
  default: mod.ProtectedAdvancedSettingsPage
207
215
  })),
208
216
  permissions: PERMISSIONS.readAdvancedSettings
@@ -221,7 +229,7 @@ const index = {
221
229
  locales.map((locale) => {
222
230
  return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-t5qTFaAD.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-I8N4u-Sd.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-YTjtq89K.js")), "./translations/dk.json": () => Promise.resolve().then(() => require("./dk-TF-dWjzl.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-TaNIVnDO.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-XBQsB8_9.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-6cz3U-IF.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-RJ934rq-.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-YhZOlM2X.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-xssHUXFv.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-C3mHUSJa.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-d0hfg65Z.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-TA7TfK_5.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-0pUL9hdA.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-WNOhafR4.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-guNR9Gax.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-X3BMXDds.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-NWPw1oTN.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-76NnbB__.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-cbppX21D.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-6mm_Fmz7.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-sI2I1ogF.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-A3zJxaiI.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-ArWWtyP4.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-72SpmFXa.js")) }), `./translations/${locale}.json`).then(({ default: data }) => {
223
231
  return {
224
- data: helperPlugin.prefixPluginTranslations(data, "users-permissions"),
232
+ data: prefixPluginTranslations(data, "users-permissions"),
225
233
  locale
226
234
  };
227
235
  }).catch(() => {
@@ -238,4 +246,4 @@ const index = {
238
246
  exports.PERMISSIONS = PERMISSIONS;
239
247
  exports.getTrad = getTrad;
240
248
  exports.index = index;
241
- //# sourceMappingURL=index-TJUxOCtJ.js.map
249
+ //# sourceMappingURL=index-Q5NQ4RI9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Q5NQ4RI9.js","sources":["../../admin/src/constants.js","../../admin/src/pluginId.js","../../admin/src/utils/getTrad.js","../../admin/src/utils/prefixPluginTranslations.js","../../admin/src/index.js"],"sourcesContent":["export const PERMISSIONS = {\n // Roles\n accessRoles: [\n { action: 'plugin::users-permissions.roles.create', subject: null },\n { action: 'plugin::users-permissions.roles.read', subject: null },\n ],\n createRole: [{ action: 'plugin::users-permissions.roles.create', subject: null }],\n deleteRole: [{ action: 'plugin::users-permissions.roles.delete', subject: null }],\n readRoles: [{ action: 'plugin::users-permissions.roles.read', subject: null }],\n updateRole: [{ action: 'plugin::users-permissions.roles.update', subject: null }],\n\n // AdvancedSettings\n readAdvancedSettings: [\n { action: 'plugin::users-permissions.advanced-settings.read', subject: null },\n ],\n updateAdvancedSettings: [\n { action: 'plugin::users-permissions.advanced-settings.update', subject: null },\n ],\n\n // Emails\n readEmailTemplates: [{ action: 'plugin::users-permissions.email-templates.read', subject: null }],\n updateEmailTemplates: [\n { action: 'plugin::users-permissions.email-templates.update', subject: null },\n ],\n\n // Providers\n readProviders: [{ action: 'plugin::users-permissions.providers.read', subject: null }],\n updateProviders: [{ action: 'plugin::users-permissions.providers.update', subject: null }],\n};\n","import pluginPkg from '../../package.json';\n\nconst pluginId = pluginPkg.name.replace(/^@strapi\\/plugin-/i, '');\n\nexport default pluginId;\n","import pluginId from '../pluginId';\n\nconst getTrad = (id) => `${pluginId}.${id}`;\n\nexport default getTrad;\n","const prefixPluginTranslations = (trad, pluginId) => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n\n return acc;\n }, {});\n};\n\nexport { prefixPluginTranslations };\n","import pluginPkg from '../../package.json';\n\nimport { PERMISSIONS } from './constants';\nimport getTrad from './utils/getTrad';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nconst name = pluginPkg.strapi.name;\n\nexport default {\n register(app) {\n // Create the plugin's settings section\n app.createSettingSection(\n {\n id: 'users-permissions',\n intlLabel: {\n id: getTrad('Settings.section-label'),\n defaultMessage: 'Users & Permissions plugin',\n },\n },\n [\n {\n intlLabel: {\n id: 'global.roles',\n defaultMessage: 'Roles',\n },\n id: 'roles',\n to: `users-permissions/roles`,\n Component: () => import('./pages/Roles'),\n permissions: PERMISSIONS.accessRoles,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.providers'),\n defaultMessage: 'Providers',\n },\n id: 'providers',\n to: `users-permissions/providers`,\n Component: () => import('./pages/Providers'),\n permissions: PERMISSIONS.readProviders,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n },\n id: 'email-templates',\n to: `users-permissions/email-templates`,\n Component: () =>\n import('./pages/EmailTemplates').then((mod) => ({\n default: mod.ProtectedEmailTemplatesPage,\n })),\n permissions: PERMISSIONS.readEmailTemplates,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n },\n id: 'advanced-settings',\n to: `users-permissions/advanced-settings`,\n Component: () =>\n import('./pages/AdvancedSettings').then((mod) => ({\n default: mod.ProtectedAdvancedSettingsPage,\n })),\n permissions: PERMISSIONS.readAdvancedSettings,\n },\n ]\n );\n\n app.registerPlugin({\n id: 'users-permissions',\n name,\n });\n },\n bootstrap() {},\n async registerTrads({ locales }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'users-permissions'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["pluginId"],"mappings":"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"}
@@ -4,9 +4,8 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
5
  const admin = require("@strapi/strapi/admin");
6
6
  const reactRouterDom = require("react-router-dom");
7
- const index = require("./index-TJUxOCtJ.js");
7
+ const index = require("./index-Q5NQ4RI9.js");
8
8
  const designSystem = require("@strapi/design-system");
9
- const helperPlugin = require("@strapi/helper-plugin");
10
9
  const Icons = require("@strapi/icons");
11
10
  const formik = require("formik");
12
11
  const Helmet = require("./Helmet-d9JljxUo.js");
@@ -26,6 +25,7 @@ const set = require("lodash/set");
26
25
  const take = require("lodash/take");
27
26
  const yup = require("yup");
28
27
  const v2 = require("@strapi/design-system/v2");
28
+ const helperPlugin = require("@strapi/helper-plugin");
29
29
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
30
30
  function _interopNamespace(e) {
31
31
  if (e && e.__esModule)
@@ -551,7 +551,7 @@ const cleanPermissions = (permissions) => Object.keys(permissions).reduce((acc,
551
551
  }, {});
552
552
  const usePlugins = () => {
553
553
  const { toggleNotification } = admin.useNotification();
554
- const { get: get2 } = helperPlugin.useFetchClient();
554
+ const { get: get2 } = admin.useFetchClient();
555
555
  const { formatAPIError } = admin.useAPIErrorHandler(index.getTrad);
556
556
  const [
557
557
  {
@@ -618,7 +618,7 @@ const CreatePage = () => {
618
618
  const { isLoading: isLoadingPlugins, permissions, routes } = usePlugins();
619
619
  const { trackUsage } = admin.useTracking();
620
620
  const permissionsRef = React__namespace.useRef();
621
- const { post } = helperPlugin.useFetchClient();
621
+ const { post } = admin.useFetchClient();
622
622
  const mutation = reactQuery.useMutation((body) => post(`/users-permissions/roles`, body), {
623
623
  onError() {
624
624
  toggleNotification({
@@ -756,7 +756,7 @@ const EditPage = () => {
756
756
  const {
757
757
  params: { id }
758
758
  } = reactRouterDom.useMatch(`/settings/users-permissions/roles/:id`);
759
- const { get: get2 } = helperPlugin.useFetchClient();
759
+ const { get: get2 } = admin.useFetchClient();
760
760
  const { isLoading: isLoadingPlugins, routes } = usePlugins();
761
761
  const {
762
762
  data: role,
@@ -769,7 +769,7 @@ const EditPage = () => {
769
769
  return role2;
770
770
  });
771
771
  const permissionsRef = React__namespace.useRef();
772
- const { put } = helperPlugin.useFetchClient();
772
+ const { put } = admin.useFetchClient();
773
773
  const { formatAPIError } = admin.useAPIErrorHandler();
774
774
  const mutation = reactQuery.useMutation((body) => put(`/users-permissions/roles/${id}`, body), {
775
775
  onError(error) {
@@ -940,7 +940,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
940
940
  setRoleToDelete(id);
941
941
  setShowConfirmDelete(!showConfirmDelete);
942
942
  };
943
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { ...helperPlugin.onRowClick({ fn: () => navigate(role.id.toString()) }), children: [
943
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { onClick: () => navigate(role.id.toString()), children: [
944
944
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "20%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: role.name }) }),
945
945
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "50%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: role.description }) }),
946
946
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "30%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage(
@@ -950,7 +950,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
950
950
  },
951
951
  { number: role.nb_users }
952
952
  ) }) }),
953
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "end", ...helperPlugin.stopPropagation, children: [
953
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "end", onClick: (e) => e.stopPropagation(), children: [
954
954
  canUpdate ? /* @__PURE__ */ jsxRuntime.jsx(
955
955
  EditLink,
956
956
  {
@@ -989,41 +989,16 @@ TableBody.propTypes = {
989
989
  canDelete: PropTypes__default.default.bool,
990
990
  canUpdate: PropTypes__default.default.bool
991
991
  };
992
- const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {
993
- try {
994
- const { get: get2 } = helperPlugin.getFetchClient();
995
- const { data } = await get2("/users-permissions/roles");
996
- notifyStatus("The roles have loaded successfully");
997
- return data;
998
- } catch (err) {
999
- toggleNotification({
1000
- type: "danger",
1001
- message: formatMessage({ id: "notification.error" })
1002
- });
1003
- throw new Error(err);
1004
- }
1005
- };
1006
- const deleteData = async (id, formatMessage, toggleNotification) => {
1007
- try {
1008
- const { del } = helperPlugin.getFetchClient();
1009
- await del(`/users-permissions/roles/${id}`);
1010
- } catch (error) {
1011
- toggleNotification({
1012
- type: "danger",
1013
- message: formatMessage({ id: "notification.error", defaultMessage: "An error occured" })
1014
- });
1015
- }
1016
- };
1017
992
  const RolesListPage = () => {
1018
993
  const { trackUsage } = admin.useTracking();
1019
994
  const { formatMessage, locale } = reactIntl.useIntl();
1020
995
  const { toggleNotification } = admin.useNotification();
1021
996
  const { notifyStatus } = designSystem.useNotifyAT();
1022
- const [{ query }] = helperPlugin.useQueryParams();
997
+ const [{ query }] = admin.useQueryParams();
1023
998
  const _q = query?._q || "";
1024
999
  const [showConfirmDelete, setShowConfirmDelete] = React.useState(false);
1025
1000
  const [roleToDelete, setRoleToDelete] = React.useState();
1026
- helperPlugin.useFocusWhenNavigate();
1001
+ const { del, get: get2 } = admin.useFetchClient();
1027
1002
  const {
1028
1003
  isLoading: isLoadingForPermissions,
1029
1004
  allowedActions: { canRead, canDelete, canCreate, canUpdate }
@@ -1052,6 +1027,29 @@ const RolesListPage = () => {
1052
1027
  const handleShowConfirmDelete = () => {
1053
1028
  setShowConfirmDelete(!showConfirmDelete);
1054
1029
  };
1030
+ const deleteData = async (id, formatMessage2, toggleNotification2) => {
1031
+ try {
1032
+ await del(`/users-permissions/roles/${id}`);
1033
+ } catch (error) {
1034
+ toggleNotification2({
1035
+ type: "danger",
1036
+ message: formatMessage2({ id: "notification.error", defaultMessage: "An error occured" })
1037
+ });
1038
+ }
1039
+ };
1040
+ const fetchData = async (toggleNotification2, formatMessage2, notifyStatus2) => {
1041
+ try {
1042
+ const { data } = await get2("/users-permissions/roles");
1043
+ notifyStatus2("The roles have loaded successfully");
1044
+ return data;
1045
+ } catch (err) {
1046
+ toggleNotification2({
1047
+ type: "danger",
1048
+ message: formatMessage2({ id: "notification.error" })
1049
+ });
1050
+ throw new Error(err);
1051
+ }
1052
+ };
1055
1053
  const emptyLayout = {
1056
1054
  roles: {
1057
1055
  id: index.getTrad("Roles.empty"),
@@ -1094,7 +1092,7 @@ const RolesListPage = () => {
1094
1092
  )
1095
1093
  }
1096
1094
  ),
1097
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { "aria-busy": isLoading, children: [
1095
+ /* @__PURE__ */ jsxRuntime.jsxs(admin.Page.Main, { children: [
1098
1096
  /* @__PURE__ */ jsxRuntime.jsx(
1099
1097
  designSystem.HeaderLayout,
1100
1098
  {
@@ -1190,4 +1188,4 @@ const Roles = () => {
1190
1188
  ] }) });
1191
1189
  };
1192
1190
  exports.default = Roles;
1193
- //# sourceMappingURL=index-MEUac_4V.js.map
1191
+ //# sourceMappingURL=index-RT4MW9Nr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-RT4MW9Nr.js","sources":["../../admin/src/contexts/UsersPermissionsContext/index.jsx","../../admin/src/utils/formatPluginName.js","../../admin/src/components/Permissions/init.js","../../admin/src/components/Permissions/PermissionRow/CheckboxWrapper.jsx","../../admin/src/components/Permissions/PermissionRow/SubCategory.jsx","../../admin/src/components/Permissions/PermissionRow/index.jsx","../../admin/src/components/Permissions/reducer.js","../../admin/src/components/Permissions/index.jsx","../../admin/src/components/BoundRoute/getMethodColor.js","../../admin/src/components/BoundRoute/index.jsx","../../admin/src/components/Policies/index.jsx","../../admin/src/components/UsersPermissions/init.js","../../admin/src/components/UsersPermissions/reducer.js","../../admin/src/components/UsersPermissions/index.jsx","../../admin/src/pages/Roles/constants.js","../../admin/src/utils/cleanPermissions.js","../../admin/src/pages/Roles/hooks/usePlugins.js","../../admin/src/pages/Roles/pages/CreatePage.jsx","../../admin/src/pages/Roles/pages/EditPage.jsx","../../admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx","../../admin/src/pages/Roles/pages/ListPage/index.jsx","../../admin/src/pages/Roles/index.jsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\n\nimport PropTypes from 'prop-types';\n\nconst UsersPermissions = createContext({});\n\nconst UsersPermissionsProvider = ({ children, value }) => {\n return <UsersPermissions.Provider value={value}>{children}</UsersPermissions.Provider>;\n};\n\nconst useUsersPermissions = () => useContext(UsersPermissions);\n\nUsersPermissionsProvider.propTypes = {\n children: PropTypes.node.isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport { UsersPermissions, UsersPermissionsProvider, useUsersPermissions };\n","import upperFirst from 'lodash/upperFirst';\n\nfunction formatPluginName(pluginSlug) {\n switch (pluginSlug) {\n case 'application':\n return 'Application';\n case 'plugin::content-manager':\n return 'Content manager';\n case 'plugin::content-type-builder':\n return 'Content types builder';\n case 'plugin::documentation':\n return 'Documentation';\n case 'plugin::email':\n return 'Email';\n case 'plugin::i18n':\n return 'i18n';\n case 'plugin::upload':\n return 'Upload';\n case 'plugin::users-permissions':\n return 'Users-permissions';\n default:\n return upperFirst(pluginSlug.replace('api::', '').replace('plugin::', ''));\n }\n}\n\nexport default formatPluginName;\n","const init = (initialState, permissions) => {\n const collapses = Object.keys(permissions)\n .sort()\n .map((name) => ({ name, isOpen: false }));\n\n return { ...initialState, collapses };\n};\n\nexport default init;\n","import { Box } from '@strapi/design-system';\nimport styled, { css } from 'styled-components';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n svg {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nexport default CheckboxWrapper;\n","import React, { useCallback, useMemo } from 'react';\n\nimport {\n Box,\n Checkbox,\n Flex,\n Typography,\n Grid,\n GridItem,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Cog as CogIcon } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useUsersPermissions } from '../../../contexts/UsersPermissionsContext';\n\nimport CheckboxWrapper from './CheckboxWrapper';\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst SubCategory = ({ subCategory }) => {\n const { formatMessage } = useIntl();\n const { onChange, onChangeSelectAll, onSelectedAction, selectedAction, modifiedData } =\n useUsersPermissions();\n\n const currentScopedModifiedData = useMemo(() => {\n return get(modifiedData, subCategory.name, {});\n }, [modifiedData, subCategory]);\n\n const hasAllActionsSelected = useMemo(() => {\n return Object.values(currentScopedModifiedData).every((action) => action.enabled === true);\n }, [currentScopedModifiedData]);\n\n const hasSomeActionsSelected = useMemo(() => {\n return (\n Object.values(currentScopedModifiedData).some((action) => action.enabled === true) &&\n !hasAllActionsSelected\n );\n }, [currentScopedModifiedData, hasAllActionsSelected]);\n\n const handleChangeSelectAll = useCallback(\n ({ target: { name } }) => {\n onChangeSelectAll({ target: { name, value: !hasAllActionsSelected } });\n },\n [hasAllActionsSelected, onChangeSelectAll]\n );\n\n const isActionSelected = useCallback(\n (actionName) => {\n return selectedAction === actionName;\n },\n [selectedAction]\n );\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategory.label}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n name={subCategory.name}\n value={hasAllActionsSelected}\n onValueChange={(value) =>\n handleChangeSelectAll({ target: { name: subCategory.name, value } })\n }\n indeterminate={hasSomeActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid gap={2} style={{ flex: 1 }}>\n {subCategory.actions.map((action) => {\n const name = `${action.name}.enabled`;\n\n return (\n <GridItem col={6} key={action.name}>\n <CheckboxWrapper isActive={isActionSelected(action.name)} padding={2} hasRadius>\n <Checkbox\n value={get(modifiedData, name, false)}\n name={name}\n onValueChange={(value) => onChange({ target: { name, value } })}\n >\n {action.label}\n </Checkbox>\n <button\n type=\"button\"\n onClick={() => onSelectedAction(action.name)}\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <VisuallyHidden as=\"span\">\n {formatMessage(\n {\n id: 'app.utils.show-bound-route',\n defaultMessage: 'Show bound route for {route}',\n },\n {\n route: action.name,\n }\n )}\n </VisuallyHidden>\n <CogIcon />\n </button>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nSubCategory.propTypes = {\n subCategory: PropTypes.object.isRequired,\n};\n\nexport default SubCategory;\n","import React, { useMemo } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport sortBy from 'lodash/sortBy';\nimport PropTypes from 'prop-types';\n\nimport SubCategory from './SubCategory';\n\nconst PermissionRow = ({ name, permissions }) => {\n const subCategories = useMemo(() => {\n return sortBy(\n Object.values(permissions.controllers).reduce((acc, curr, index) => {\n const currentName = `${name}.controllers.${Object.keys(permissions.controllers)[index]}`;\n const actions = sortBy(\n Object.keys(curr).reduce((acc, current) => {\n return [\n ...acc,\n {\n ...curr[current],\n label: current,\n name: `${currentName}.${current}`,\n },\n ];\n }, []),\n 'label'\n );\n\n return [\n ...acc,\n {\n actions,\n label: Object.keys(permissions.controllers)[index],\n name: currentName,\n },\n ];\n }, []),\n 'label'\n );\n }, [name, permissions]);\n\n return (\n <Box padding={6}>\n {subCategories.map((subCategory) => (\n <SubCategory key={subCategory.name} subCategory={subCategory} />\n ))}\n </Box>\n );\n};\n\nPermissionRow.propTypes = {\n name: PropTypes.string.isRequired,\n permissions: PropTypes.object.isRequired,\n};\n\nexport default PermissionRow;\n","import { produce } from 'immer';\n\nconst initialState = {\n collapses: [],\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case 'TOGGLE_COLLAPSE': {\n draftState.collapses = state.collapses.map((collapse, index) => {\n if (index === action.index) {\n return { ...collapse, isOpen: !collapse.isOpen };\n }\n\n return { ...collapse, isOpen: false };\n });\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { initialState, reducer };\n","import React, { useReducer } from 'react';\n\nimport { Accordion, AccordionContent, AccordionToggle, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport formatPluginName from '../../utils/formatPluginName';\n\nimport init from './init';\nimport PermissionRow from './PermissionRow';\nimport { initialState, reducer } from './reducer';\n\nconst Permissions = () => {\n const { modifiedData } = useUsersPermissions();\n const { formatMessage } = useIntl();\n const [{ collapses }, dispatch] = useReducer(reducer, initialState, (state) =>\n init(state, modifiedData)\n );\n\n const handleToggle = (index) =>\n dispatch({\n type: 'TOGGLE_COLLAPSE',\n index,\n });\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n {collapses.map((collapse, index) => (\n <Accordion\n expanded={collapse.isOpen}\n onToggle={() => handleToggle(index)}\n key={collapse.name}\n variant={index % 2 === 0 ? 'secondary' : undefined}\n >\n <AccordionToggle\n title={formatPluginName(collapse.name)}\n description={formatMessage(\n {\n id: 'users-permissions.Plugin.permissions.plugins.description',\n defaultMessage: 'Define all allowed actions for the {name} plugin.',\n },\n { name: collapse.name }\n )}\n variant={index % 2 ? 'primary' : 'secondary'}\n />\n <AccordionContent>\n <PermissionRow permissions={modifiedData[collapse.name]} name={collapse.name} />\n </AccordionContent>\n </Accordion>\n ))}\n </Flex>\n );\n};\n\nexport default Permissions;\n","const getMethodColor = (verb) => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nexport default getMethodColor;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport getMethodColor from './getMethodColor';\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\nfunction BoundRoute({ route }) {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'users-permissions.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n &nbsp;\n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n}\n\nBoundRoute.defaultProps = {\n route: {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n};\n\nBoundRoute.propTypes = {\n route: PropTypes.shape({\n handler: PropTypes.string,\n method: PropTypes.string,\n path: PropTypes.string,\n }),\n};\n\nexport default BoundRoute;\n","import React from 'react';\n\nimport { Flex, GridItem, Typography } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport without from 'lodash/without';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport BoundRoute from '../BoundRoute';\n\nconst Policies = () => {\n const { formatMessage } = useIntl();\n const { selectedAction, routes } = useUsersPermissions();\n\n const path = without(selectedAction.split('.'), 'controllers');\n const controllerRoutes = get(routes, path[0]);\n const pathResolved = path.slice(1).join('.');\n\n const displayedRoutes = isEmpty(controllerRoutes)\n ? []\n : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));\n\n return (\n <GridItem\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {displayedRoutes.map((route, key) => (\n // eslint-disable-next-line react/no-array-index-key\n <BoundRoute key={key} route={route} />\n ))}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'users-permissions.Policies.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'users-permissions.Policies.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </GridItem>\n );\n};\n\nexport default Policies;\n","const init = (state, permissions, routes) => {\n return {\n ...state,\n initialData: permissions,\n modifiedData: permissions,\n routes,\n };\n};\n\nexport default init;\n","/* eslint-disable consistent-return */\nimport { produce } from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport take from 'lodash/take';\n\nexport const initialState = {\n initialData: {},\n modifiedData: {},\n routes: {},\n selectedAction: '',\n policies: [],\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n const keysLength = action.keys.length;\n const isChangingCheckbox = action.keys[keysLength - 1] === 'enabled';\n\n if (action.value && isChangingCheckbox) {\n const selectedAction = take(action.keys, keysLength - 1).join('.');\n draftState.selectedAction = selectedAction;\n }\n\n set(draftState, ['modifiedData', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_SELECT_ALL': {\n const pathToValue = ['modifiedData', ...action.keys];\n const oldValues = get(state, pathToValue, {});\n const updatedValues = Object.keys(oldValues).reduce((acc, current) => {\n acc[current] = { ...oldValues[current], enabled: action.value };\n\n return acc;\n }, {});\n\n set(draftState, pathToValue, updatedValues);\n\n break;\n }\n case 'ON_RESET': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'ON_SUBMIT_SUCCEEDED': {\n draftState.initialData = state.modifiedData;\n break;\n }\n\n case 'SELECT_ACTION': {\n const { actionToSelect } = action;\n draftState.selectedAction = actionToSelect === state.selectedAction ? '' : actionToSelect;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { forwardRef, memo, useImperativeHandle, useReducer } from 'react';\n\nimport { Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext';\nimport getTrad from '../../utils/getTrad';\nimport Permissions from '../Permissions';\nimport Policies from '../Policies';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nconst UsersPermissions = forwardRef(({ permissions, routes }, ref) => {\n const { formatMessage } = useIntl();\n const [state, dispatch] = useReducer(reducer, initialState, (state) =>\n init(state, permissions, routes)\n );\n\n useImperativeHandle(ref, () => ({\n getPermissions() {\n return {\n permissions: state.modifiedData,\n };\n },\n resetForm() {\n dispatch({ type: 'ON_RESET' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'ON_SUBMIT_SUCCEEDED' });\n },\n }));\n\n const handleChange = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value: value === 'empty__string_value' ? '' : value,\n });\n\n const handleChangeSelectAll = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE_SELECT_ALL',\n keys: name.split('.'),\n value,\n });\n\n const handleSelectedAction = (actionToSelect) =>\n dispatch({\n type: 'SELECT_ACTION',\n actionToSelect,\n });\n\n const providerValue = {\n ...state,\n onChange: handleChange,\n onChangeSelectAll: handleChangeSelectAll,\n onSelectedAction: handleSelectedAction,\n };\n\n return (\n <UsersPermissionsProvider value={providerValue}>\n <Grid gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('Plugins.header.title'),\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Plugins.header.description'),\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n <Permissions />\n </Flex>\n </GridItem>\n <Policies />\n </Grid>\n </UsersPermissionsProvider>\n );\n});\n\nUsersPermissions.propTypes = {\n permissions: PropTypes.object.isRequired,\n routes: PropTypes.object.isRequired,\n};\n\nexport default memo(UsersPermissions);\n","import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\nexport const createRoleSchema = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n","import isEmpty from 'lodash/isEmpty';\n\nconst cleanPermissions = (permissions) =>\n Object.keys(permissions).reduce((acc, current) => {\n const currentPermission = permissions[current].controllers;\n const cleanedControllers = Object.keys(currentPermission).reduce((acc2, curr) => {\n if (isEmpty(currentPermission[curr])) {\n return acc2;\n }\n\n acc2[curr] = currentPermission[curr];\n\n return acc2;\n }, {});\n\n if (isEmpty(cleanedControllers)) {\n return acc;\n }\n\n acc[current] = { controllers: cleanedControllers };\n\n return acc;\n }, {});\n\nexport default cleanPermissions;\n","import { useEffect } from 'react';\n\nimport { useAPIErrorHandler, useNotification, useFetchClient } from '@strapi/strapi/admin';\nimport { useQueries } from 'react-query';\n\nimport { cleanPermissions, getTrad } from '../../../utils';\n\nexport const usePlugins = () => {\n const { toggleNotification } = useNotification();\n const { get } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n\n const [\n {\n data: permissions,\n isLoading: isLoadingPermissions,\n error: permissionsError,\n refetch: refetchPermissions,\n },\n { data: routes, isLoading: isLoadingRoutes, error: routesError, refetch: refetchRoutes },\n ] = useQueries([\n {\n queryKey: ['users-permissions', 'permissions'],\n async queryFn() {\n const {\n data: { permissions },\n } = await get(`/users-permissions/permissions`);\n\n return permissions;\n },\n },\n {\n queryKey: ['users-permissions', 'routes'],\n async queryFn() {\n const {\n data: { routes },\n } = await get(`/users-permissions/routes`);\n\n return routes;\n },\n },\n ]);\n\n const refetchQueries = async () => {\n await Promise.all([refetchPermissions(), refetchRoutes()]);\n };\n\n useEffect(() => {\n if (permissionsError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(permissionsError),\n });\n }\n }, [toggleNotification, permissionsError, formatAPIError]);\n\n useEffect(() => {\n if (routesError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(routesError),\n });\n }\n }, [toggleNotification, routesError, formatAPIError]);\n\n const isLoading = isLoadingPermissions || isLoadingRoutes;\n\n return {\n // TODO: these return values need to be memoized, otherwise\n // they will create infinite rendering loops when used as\n // effect dependencies\n permissions: permissions ? cleanPermissions(permissions) : {},\n routes: routes ?? {},\n\n getData: refetchQueries,\n isLoading,\n };\n};\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Page, useTracking, useNotification, useFetchClient } from '@strapi/strapi/admin';\nimport { Formik, Form } from 'formik';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useNavigate } from 'react-router-dom';\n\nimport UsersPermissions from '../../../components/UsersPermissions';\nimport { PERMISSIONS } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { createRoleSchema } from '../constants';\nimport { usePlugins } from '../hooks/usePlugins';\n\nexport const CreatePage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const { isLoading: isLoadingPlugins, permissions, routes } = usePlugins();\n const { trackUsage } = useTracking();\n const permissionsRef = React.useRef();\n const { post } = useFetchClient();\n const mutation = useMutation((body) => post(`/users-permissions/roles`, body), {\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n }),\n });\n },\n\n onSuccess() {\n trackUsage('didCreateRole');\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('Settings.roles.created'),\n defaultMessage: 'Role created',\n }),\n });\n\n // Forcing redirecting since we don't have the id in the response\n navigate(-1);\n },\n });\n\n const handleCreateRoleSubmit = async (data) => {\n // TODO: refactor. Child -> parent component communication is evil;\n // We should either move the provider one level up or move the state\n // straight into redux.\n const permissions = permissionsRef.current.getPermissions();\n\n await mutation.mutate({ ...data, ...permissions, users: [] });\n };\n\n return (\n <Main>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Roles' }\n )}\n />\n <Formik\n enableReinitialize\n initialValues={{ name: '', description: '' }}\n onSubmit={handleCreateRoleSubmit}\n validationSchema={createRoleSchema}\n >\n {({ handleSubmit, values, handleChange, errors }) => (\n <Form noValidate onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n !isLoadingPlugins && (\n <Button type=\"submit\" loading={mutation.isLoading} startIcon={<Check />}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n )\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n />\n <ContentLayout>\n <Flex\n background=\"neutral0\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={7}\n hasRadius\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n shadow=\"filterShadow\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\">\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('EditPage.form.roles'),\n defaultMessage: 'Role details',\n })}\n </Typography>\n\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n value={values.name || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n error={\n errors?.name\n ? formatMessage({ id: errors.name, defaultMessage: 'Name is required' })\n : false\n }\n required\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n id=\"description\"\n value={values.description || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n error={\n errors?.description\n ? formatMessage({\n id: errors.description,\n defaultMessage: 'Description is required',\n })\n : false\n }\n required\n />\n </GridItem>\n </Grid>\n </Flex>\n\n {!isLoadingPlugins && (\n <UsersPermissions\n ref={permissionsRef}\n permissions={permissions}\n routes={routes}\n />\n )}\n </Flex>\n </ContentLayout>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport const ProtectedRolesCreatePage = () => (\n <Page.Protect permissions={PERMISSIONS.createRole}>\n <CreatePage />\n </Page.Protect>\n);\n","import * as React from 'react';\n\nimport {\n ContentLayout,\n HeaderLayout,\n Main,\n Button,\n Flex,\n TextInput,\n Textarea,\n Typography,\n GridItem,\n Grid,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport {\n Page,\n BackButton,\n useAPIErrorHandler,\n useNotification,\n useFetchClient,\n} from '@strapi/strapi/admin';\nimport { Formik, Form } from 'formik';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useQuery, useMutation } from 'react-query';\nimport { useMatch } from 'react-router-dom';\n\nimport UsersPermissions from '../../../components/UsersPermissions';\nimport { PERMISSIONS } from '../../../constants';\nimport getTrad from '../../../utils/getTrad';\nimport { createRoleSchema } from '../constants';\nimport { usePlugins } from '../hooks/usePlugins';\n\nexport const EditPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const {\n params: { id },\n } = useMatch(`/settings/users-permissions/roles/:id`);\n const { get } = useFetchClient();\n const { isLoading: isLoadingPlugins, routes } = usePlugins();\n const {\n data: role,\n isLoading: isLoadingRole,\n refetch: refetchRole,\n } = useQuery(['users-permissions', 'role', id], async () => {\n // TODO: why doesn't this endpoint follow the admin API conventions?\n const {\n data: { role },\n } = await get(`/users-permissions/roles/${id}`);\n\n return role;\n });\n\n const permissionsRef = React.useRef();\n const { put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n const mutation = useMutation((body) => put(`/users-permissions/roles/${id}`, body), {\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n\n async onSuccess() {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('Settings.roles.created'),\n defaultMessage: 'Role edited',\n }),\n });\n\n await refetchRole();\n },\n });\n\n const handleEditRoleSubmit = async (data) => {\n const permissions = permissionsRef.current.getPermissions();\n\n await mutation.mutate({ ...data, ...permissions, users: [] });\n };\n\n if (isLoadingRole) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Roles' }\n )}\n />\n <Formik\n enableReinitialize\n initialValues={{ name: role.name, description: role.description }}\n onSubmit={handleEditRoleSubmit}\n validationSchema={createRoleSchema}\n >\n {({ handleSubmit, values, handleChange, errors }) => (\n <Form noValidate onSubmit={handleSubmit}>\n <HeaderLayout\n primaryAction={\n !isLoadingPlugins ? (\n <Button\n disabled={role.code === 'strapi-super-admin'}\n type=\"submit\"\n loading={mutation.isLoading}\n startIcon={<Check />}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n ) : null\n }\n title={role.name}\n subtitle={role.description}\n navigationAction={<BackButton />}\n />\n <ContentLayout>\n <Flex\n background=\"neutral0\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={7}\n hasRadius\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n shadow=\"filterShadow\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('EditPage.form.roles'),\n defaultMessage: 'Role details',\n })}\n </Typography>\n\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n value={values.name || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n error={\n errors?.name\n ? formatMessage({ id: errors.name, defaultMessage: 'Name is required' })\n : false\n }\n required\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n id=\"description\"\n value={values.description || ''}\n onChange={handleChange}\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n error={\n errors?.description\n ? formatMessage({\n id: errors.description,\n defaultMessage: 'Description is required',\n })\n : false\n }\n required\n />\n </GridItem>\n </Grid>\n </Flex>\n\n {!isLoadingPlugins && (\n <UsersPermissions\n ref={permissionsRef}\n permissions={role.permissions}\n routes={routes}\n />\n )}\n </Flex>\n </ContentLayout>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nexport const ProtectedRolesEditPage = () => (\n <Page.Protect permissions={PERMISSIONS.updateRole}>\n <EditPage />\n </Page.Protect>\n);\n","import React from 'react';\n\nimport { Flex, IconButton, Link, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport styled from 'styled-components';\n\nconst EditLink = styled(Link)`\n align-items: center;\n height: ${32 / 16}rem;\n display: flex;\n justify-content: center;\n padding: ${({ theme }) => `${theme.spaces[2]}}`};\n width: ${32 / 16}rem;\n\n svg {\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n\n &:hover,\n &:focus {\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral800};\n }\n }\n }\n`;\n\nconst TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelete }) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const [showConfirmDelete, setShowConfirmDelete] = onDelete;\n\n const checkCanDeleteRole = (role) =>\n canDelete && !['public', 'authenticated'].includes(role.type);\n\n const handleClickDelete = (id) => {\n setRoleToDelete(id);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n return (\n <Tbody>\n {sortedRoles?.map((role) => (\n <Tr key={role.name} onClick={() => navigate(role.id.toString())}>\n <Td width=\"20%\">\n <Typography>{role.name}</Typography>\n </Td>\n <Td width=\"50%\">\n <Typography>{role.description}</Typography>\n </Td>\n <Td width=\"30%\">\n <Typography>\n {formatMessage(\n {\n id: 'Roles.RoleRow.user-count',\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: role.nb_users }\n )}\n </Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"end\" onClick={(e) => e.stopPropagation()}>\n {canUpdate ? (\n <EditLink\n to={role.id.toString()}\n aria-label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: `${role.name}` }\n )}\n >\n <Pencil />\n </EditLink>\n ) : null}\n\n {checkCanDeleteRole(role) && (\n <IconButton\n onClick={() => handleClickDelete(role.id.toString())}\n noBorder\n icon={<Trash />}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: `${role.name}` }\n )}\n />\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n );\n};\n\nexport default TableBody;\n\nTableBody.defaultProps = {\n canDelete: false,\n canUpdate: false,\n};\n\nTableBody.propTypes = {\n onDelete: PropTypes.array.isRequired,\n permissions: PropTypes.object.isRequired,\n setRoleToDelete: PropTypes.func.isRequired,\n sortedRoles: PropTypes.array.isRequired,\n canDelete: PropTypes.bool,\n canUpdate: PropTypes.bool,\n};\n","import React, { useState } from 'react';\n\nimport {\n ActionLayout,\n ContentLayout,\n HeaderLayout,\n Layout,\n Table,\n Th,\n Thead,\n Tr,\n Typography,\n useNotifyAT,\n VisuallyHidden,\n EmptyStateLayout,\n useCollator,\n useFilter,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useRBAC } from '@strapi/helper-plugin';\nimport { Plus } from '@strapi/icons';\nimport {\n ConfirmDialog,\n useTracking,\n Page,\n SearchInput,\n BackButton,\n useNotification,\n useQueryParams,\n useFetchClient,\n} from '@strapi/strapi/admin';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { NavLink } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport TableBody from './components/TableBody';\n\nexport const RolesListPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const [{ query }] = useQueryParams();\n const _q = query?._q || '';\n const [showConfirmDelete, setShowConfirmDelete] = useState(false);\n const [roleToDelete, setRoleToDelete] = useState();\n const { del, get } = useFetchClient();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canRead, canDelete, canCreate, canUpdate },\n } = useRBAC({\n create: PERMISSIONS.createRole,\n read: PERMISSIONS.readRoles,\n update: PERMISSIONS.updateRole,\n delete: PERMISSIONS.deleteRole,\n });\n\n const {\n isLoading: isLoadingForData,\n data: { roles },\n isFetching,\n refetch,\n } = useQuery('get-roles', () => fetchData(toggleNotification, formatMessage, notifyStatus), {\n initialData: {},\n enabled: canRead,\n });\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const isLoading = isLoadingForData || isFetching || isLoadingForPermissions;\n\n const handleShowConfirmDelete = () => {\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const deleteData = async (id, formatMessage, toggleNotification) => {\n try {\n await del(`/users-permissions/roles/${id}`);\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occured' }),\n });\n }\n };\n\n const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {\n try {\n const { data } = await get('/users-permissions/roles');\n notifyStatus('The roles have loaded successfully');\n\n return data;\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error' }),\n });\n\n throw new Error(err);\n }\n };\n\n const emptyLayout = {\n roles: {\n id: getTrad('Roles.empty'),\n defaultMessage: \"You don't have any roles yet.\",\n },\n search: {\n id: getTrad('Roles.empty.search'),\n defaultMessage: 'No roles match the search.',\n },\n };\n\n const pageTitle = formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n });\n\n const deleteMutation = useMutation((id) => deleteData(id, formatMessage, toggleNotification), {\n async onSuccess() {\n await refetch();\n },\n });\n\n const handleConfirmDelete = async () => {\n await deleteMutation.mutateAsync(roleToDelete);\n setShowConfirmDelete(!showConfirmDelete);\n };\n\n const sortedRoles = (roles || [])\n .filter((role) => contains(role.name, _q) || contains(role.description, _q))\n .sort(\n (a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)\n );\n\n const emptyContent = _q && !sortedRoles.length ? 'search' : 'roles';\n\n const colCount = 4;\n const rowCount = (roles?.length || 0) + 1;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Layout>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: pageTitle }\n )}\n />\n <Page.Main>\n <HeaderLayout\n title={formatMessage({\n id: 'global.roles',\n defaultMessage: 'Roles',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n primaryAction={\n canCreate ? (\n <LinkButton\n to=\"new\"\n as={NavLink}\n onClick={() => trackUsage('willCreateRole')}\n startIcon={<Plus />}\n size=\"S\"\n >\n {formatMessage({\n id: getTrad('List.button.roles'),\n defaultMessage: 'Add new role',\n })}\n </LinkButton>\n ) : null\n }\n navigationAction={<BackButton />}\n />\n\n <ActionLayout\n startActions={\n <SearchInput\n label={formatMessage({\n id: 'app.component.search.label',\n defaultMessage: 'Search',\n })}\n />\n }\n />\n\n <ContentLayout>\n {!canRead && <Page.NoPermissions />}\n {canRead && sortedRoles && sortedRoles?.length ? (\n <Table colCount={colCount} rowCount={rowCount}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <TableBody\n sortedRoles={sortedRoles}\n canDelete={canDelete}\n canUpdate={canUpdate}\n permissions={PERMISSIONS}\n setRoleToDelete={setRoleToDelete}\n onDelete={[showConfirmDelete, setShowConfirmDelete]}\n />\n </Table>\n ) : (\n <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />\n )}\n </ContentLayout>\n <ConfirmDialog\n onConfirm={handleConfirmDelete}\n onClose={handleShowConfirmDelete}\n isOpen={showConfirmDelete}\n />\n </Page.Main>\n </Layout>\n );\n};\n\nexport const ProtectedRolesListPage = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <RolesListPage />\n </Page.Protect>\n );\n};\n","import React from 'react';\n\nimport { Page } from '@strapi/strapi/admin';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants';\n\nimport { ProtectedRolesCreatePage } from './pages/CreatePage';\nimport { ProtectedRolesEditPage } from './pages/EditPage';\nimport { ProtectedRolesListPage } from './pages/ListPage';\n\nconst Roles = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.accessRoles}>\n <Routes>\n <Route index element={<ProtectedRolesListPage />} />\n <Route path=\"new\" element={<ProtectedRolesCreatePage />} />\n <Route path=\":id\" element={<ProtectedRolesEditPage />} />\n </Routes>\n </Page.Protect>\n );\n};\n\nexport default Roles;\n"],"names":["UsersPermissions","createContext","jsx","useContext","PropTypes","upperFirst","init","initialState","css","styled","Box","useIntl","useMemo","get","useCallback","jsxs","Flex","Typography","Checkbox","Grid","GridItem","VisuallyHidden","CogIcon","sortBy","index","acc","reducer","produce","useReducer","Accordion","AccordionToggle","AccordionContent","tail","without","isEmpty","take","set","forwardRef","state","useImperativeHandle","getTrad","memo","yup","translatedErrors","useNotification","useFetchClient","useAPIErrorHandler","useQueries","permissions","routes","useEffect","useNavigate","useTracking","React","useMutation","Main","Helmet","Formik","Form","HeaderLayout","Button","Check","ContentLayout","TextInput","Textarea","Page","PERMISSIONS","useMatch","useQuery","role","BackButton","Link","Tbody","Tr","Td","Pencil","IconButton","Trash","useNotifyAT","useQueryParams","useState","useRBAC","useFilter","useCollator","formatMessage","toggleNotification","notifyStatus","Layout","LinkButton","NavLink","Plus","ActionLayout","SearchInput","Table","Thead","Th","EmptyStateLayout","ConfirmDialog","Routes","Route"],"mappings":"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"}
@@ -1,11 +1,10 @@
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, useAPIErrorHandler, Page, useTracking, BackButton, SearchInput, ConfirmDialog } from "@strapi/strapi/admin";
4
+ import { translatedErrors, useNotification, useFetchClient, useAPIErrorHandler, Page, useTracking, BackButton, useQueryParams, SearchInput, ConfirmDialog } from "@strapi/strapi/admin";
5
5
  import { useNavigate, useMatch, NavLink, Routes, Route } from "react-router-dom";
6
- import { g as getTrad, P as PERMISSIONS } from "./index-53jX2hhF.mjs";
6
+ import { g as getTrad, P as PERMISSIONS } from "./index-iaIILeuQ.mjs";
7
7
  import { Box, Flex, Typography, Checkbox, Grid, GridItem, VisuallyHidden, Accordion, AccordionToggle, AccordionContent, Main, HeaderLayout, Button, ContentLayout, TextInput, Textarea, Link, Tbody, Tr, Td, IconButton, useNotifyAT, useFilter, useCollator, Layout, ActionLayout, Table, Thead, Th, EmptyStateLayout } from "@strapi/design-system";
8
- import { useFetchClient, onRowClick, stopPropagation, getFetchClient, useQueryParams, useFocusWhenNavigate, useRBAC } from "@strapi/helper-plugin";
9
8
  import { Cog, Check, Pencil, Trash, Plus } from "@strapi/icons";
10
9
  import { Formik, Form } from "formik";
11
10
  import { H as HelmetExport } from "./Helmet-kyJ1Zklj.mjs";
@@ -25,6 +24,7 @@ import set from "lodash/set";
25
24
  import take from "lodash/take";
26
25
  import * as yup from "yup";
27
26
  import { LinkButton } from "@strapi/design-system/v2";
27
+ import { useRBAC } from "@strapi/helper-plugin";
28
28
  const UsersPermissions$2 = createContext({});
29
29
  const UsersPermissionsProvider = ({ children, value }) => {
30
30
  return /* @__PURE__ */ jsx(UsersPermissions$2.Provider, { value, children });
@@ -907,7 +907,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
907
907
  setRoleToDelete(id);
908
908
  setShowConfirmDelete(!showConfirmDelete);
909
909
  };
910
- return /* @__PURE__ */ jsx(Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxs(Tr, { ...onRowClick({ fn: () => navigate(role.id.toString()) }), children: [
910
+ return /* @__PURE__ */ jsx(Tbody, { children: sortedRoles?.map((role) => /* @__PURE__ */ jsxs(Tr, { onClick: () => navigate(role.id.toString()), children: [
911
911
  /* @__PURE__ */ jsx(Td, { width: "20%", children: /* @__PURE__ */ jsx(Typography, { children: role.name }) }),
912
912
  /* @__PURE__ */ jsx(Td, { width: "50%", children: /* @__PURE__ */ jsx(Typography, { children: role.description }) }),
913
913
  /* @__PURE__ */ jsx(Td, { width: "30%", children: /* @__PURE__ */ jsx(Typography, { children: formatMessage(
@@ -917,7 +917,7 @@ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelet
917
917
  },
918
918
  { number: role.nb_users }
919
919
  ) }) }),
920
- /* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "end", ...stopPropagation, children: [
920
+ /* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "end", onClick: (e) => e.stopPropagation(), children: [
921
921
  canUpdate ? /* @__PURE__ */ jsx(
922
922
  EditLink,
923
923
  {
@@ -956,31 +956,6 @@ TableBody.propTypes = {
956
956
  canDelete: PropTypes.bool,
957
957
  canUpdate: PropTypes.bool
958
958
  };
959
- const fetchData = async (toggleNotification, formatMessage, notifyStatus) => {
960
- try {
961
- const { get: get2 } = getFetchClient();
962
- const { data } = await get2("/users-permissions/roles");
963
- notifyStatus("The roles have loaded successfully");
964
- return data;
965
- } catch (err) {
966
- toggleNotification({
967
- type: "danger",
968
- message: formatMessage({ id: "notification.error" })
969
- });
970
- throw new Error(err);
971
- }
972
- };
973
- const deleteData = async (id, formatMessage, toggleNotification) => {
974
- try {
975
- const { del } = getFetchClient();
976
- await del(`/users-permissions/roles/${id}`);
977
- } catch (error) {
978
- toggleNotification({
979
- type: "danger",
980
- message: formatMessage({ id: "notification.error", defaultMessage: "An error occured" })
981
- });
982
- }
983
- };
984
959
  const RolesListPage = () => {
985
960
  const { trackUsage } = useTracking();
986
961
  const { formatMessage, locale } = useIntl();
@@ -990,7 +965,7 @@ const RolesListPage = () => {
990
965
  const _q = query?._q || "";
991
966
  const [showConfirmDelete, setShowConfirmDelete] = useState(false);
992
967
  const [roleToDelete, setRoleToDelete] = useState();
993
- useFocusWhenNavigate();
968
+ const { del, get: get2 } = useFetchClient();
994
969
  const {
995
970
  isLoading: isLoadingForPermissions,
996
971
  allowedActions: { canRead, canDelete, canCreate, canUpdate }
@@ -1019,6 +994,29 @@ const RolesListPage = () => {
1019
994
  const handleShowConfirmDelete = () => {
1020
995
  setShowConfirmDelete(!showConfirmDelete);
1021
996
  };
997
+ const deleteData = async (id, formatMessage2, toggleNotification2) => {
998
+ try {
999
+ await del(`/users-permissions/roles/${id}`);
1000
+ } catch (error) {
1001
+ toggleNotification2({
1002
+ type: "danger",
1003
+ message: formatMessage2({ id: "notification.error", defaultMessage: "An error occured" })
1004
+ });
1005
+ }
1006
+ };
1007
+ const fetchData = async (toggleNotification2, formatMessage2, notifyStatus2) => {
1008
+ try {
1009
+ const { data } = await get2("/users-permissions/roles");
1010
+ notifyStatus2("The roles have loaded successfully");
1011
+ return data;
1012
+ } catch (err) {
1013
+ toggleNotification2({
1014
+ type: "danger",
1015
+ message: formatMessage2({ id: "notification.error" })
1016
+ });
1017
+ throw new Error(err);
1018
+ }
1019
+ };
1022
1020
  const emptyLayout = {
1023
1021
  roles: {
1024
1022
  id: getTrad("Roles.empty"),
@@ -1061,7 +1059,7 @@ const RolesListPage = () => {
1061
1059
  )
1062
1060
  }
1063
1061
  ),
1064
- /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoading, children: [
1062
+ /* @__PURE__ */ jsxs(Page.Main, { children: [
1065
1063
  /* @__PURE__ */ jsx(
1066
1064
  HeaderLayout,
1067
1065
  {
@@ -1159,4 +1157,4 @@ const Roles = () => {
1159
1157
  export {
1160
1158
  Roles as default
1161
1159
  };
1162
- //# sourceMappingURL=index-A3oJlPcE.mjs.map
1160
+ //# sourceMappingURL=index-av_iGW-0.mjs.map