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

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 (108) hide show
  1. package/admin/src/components/FormModal/index.jsx +1 -2
  2. package/admin/src/components/Permissions/reducer.js +1 -1
  3. package/admin/src/components/UsersPermissions/reducer.js +1 -1
  4. package/admin/src/index.js +14 -30
  5. package/admin/src/pages/AdvancedSettings/index.jsx +69 -107
  6. package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
  7. package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
  8. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +47 -74
  9. package/admin/src/pages/EmailTemplates/index.jsx +22 -50
  10. package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
  11. package/admin/src/pages/Providers/index.jsx +91 -96
  12. package/admin/src/pages/Providers/utils/forms.js +11 -11
  13. package/admin/src/pages/Roles/constants.js +3 -3
  14. package/admin/src/pages/Roles/hooks/usePlugins.js +5 -4
  15. package/admin/src/pages/Roles/index.jsx +9 -18
  16. package/admin/src/pages/Roles/pages/CreatePage.jsx +21 -28
  17. package/admin/src/pages/Roles/pages/EditPage.jsx +23 -40
  18. package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +23 -27
  19. package/admin/src/pages/Roles/pages/ListPage/index.jsx +42 -38
  20. package/admin/src/pages/Roles/pages/ListPage/utils/api.js +6 -6
  21. package/admin/src/translations/en.json +1 -1
  22. package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs +84370 -0
  23. package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs.map +1 -0
  24. package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js +84398 -0
  25. package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js.map +1 -0
  26. package/dist/_chunks/Helmet-d9JljxUo.js +1010 -0
  27. package/dist/_chunks/Helmet-d9JljxUo.js.map +1 -0
  28. package/dist/_chunks/Helmet-kyJ1Zklj.mjs +1008 -0
  29. package/dist/_chunks/Helmet-kyJ1Zklj.mjs.map +1 -0
  30. package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js +1618 -0
  31. package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js.map +1 -0
  32. package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs +1595 -0
  33. package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs.map +1 -0
  34. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs +33 -0
  35. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs.map +1 -0
  36. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js +33 -0
  37. package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js.map +1 -0
  38. package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs +190 -0
  39. package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs.map +1 -0
  40. package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js +209 -0
  41. package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js.map +1 -0
  42. package/dist/_chunks/{en-m608rMZx.js → en-TaNIVnDO.js} +2 -2
  43. package/dist/_chunks/en-TaNIVnDO.js.map +1 -0
  44. package/dist/_chunks/{en-CE3wEy_c.mjs → en-jvJ-d-Qq.mjs} +2 -2
  45. package/dist/_chunks/en-jvJ-d-Qq.mjs.map +1 -0
  46. package/dist/_chunks/{index-BWyhWRPa.mjs → index-53jX2hhF.mjs} +28 -36
  47. package/dist/_chunks/index-53jX2hhF.mjs.map +1 -0
  48. package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs +16421 -0
  49. package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs.map +1 -0
  50. package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js +16446 -0
  51. package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js.map +1 -0
  52. package/dist/_chunks/{index-kKUYoIsq.mjs → index-A3oJlPcE.mjs} +111 -108
  53. package/dist/_chunks/index-A3oJlPcE.mjs.map +1 -0
  54. package/dist/_chunks/{index-MfP0ffb0.js → index-MEUac_4V.js} +124 -122
  55. package/dist/_chunks/index-MEUac_4V.js.map +1 -0
  56. package/dist/_chunks/index-N-GcFWtg.mjs +261 -0
  57. package/dist/_chunks/index-N-GcFWtg.mjs.map +1 -0
  58. package/dist/_chunks/{index-tUo88Kqt.js → index-TJUxOCtJ.js} +28 -36
  59. package/dist/_chunks/index-TJUxOCtJ.js.map +1 -0
  60. package/dist/_chunks/{index-sarofNNK.js → index-VgvlwVA7.js} +106 -147
  61. package/dist/_chunks/index-VgvlwVA7.js.map +1 -0
  62. package/dist/_chunks/{index-KmMoN4sr.js → index-bRuKnVcH.js} +39 -32
  63. package/dist/_chunks/index-bRuKnVcH.js.map +1 -0
  64. package/dist/_chunks/{index-FETf_nGC.mjs → index-ee_14Ldw.mjs} +36 -29
  65. package/dist/_chunks/index-ee_14Ldw.mjs.map +1 -0
  66. package/dist/_chunks/index-mzJ2Vb5u.js +280 -0
  67. package/dist/_chunks/index-mzJ2Vb5u.js.map +1 -0
  68. package/dist/_chunks/{index-xHL-7Hse.mjs → index-vXywiVeM.mjs} +101 -142
  69. package/dist/_chunks/index-vXywiVeM.mjs.map +1 -0
  70. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs +39 -0
  71. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs.map +1 -0
  72. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js +57 -0
  73. package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js.map +1 -0
  74. package/dist/admin/index.js +1 -1
  75. package/dist/admin/index.mjs +1 -1
  76. package/dist/style.css +84 -0
  77. package/package.json +15 -15
  78. package/server/bootstrap/grant-config.js +9 -0
  79. package/server/bootstrap/index.js +2 -39
  80. package/server/content-types/user/index.js +0 -1
  81. package/server/controllers/auth.js +24 -53
  82. package/server/controllers/content-manager-user.js +24 -28
  83. package/server/controllers/role.js +1 -1
  84. package/server/controllers/user.js +5 -5
  85. package/server/middlewares/rateLimit.js +1 -1
  86. package/server/register.js +1 -1
  87. package/server/services/jwt.js +3 -3
  88. package/server/services/permission.js +3 -7
  89. package/server/services/providers-registry.js +15 -0
  90. package/server/services/providers.js +10 -5
  91. package/server/services/role.js +15 -13
  92. package/server/services/user.js +28 -14
  93. package/server/services/users-permissions.js +12 -10
  94. package/server/utils/sanitize/sanitizers.js +2 -2
  95. package/dist/_chunks/en-CE3wEy_c.mjs.map +0 -1
  96. package/dist/_chunks/en-m608rMZx.js.map +0 -1
  97. package/dist/_chunks/index-4W1jrPVd.js +0 -320
  98. package/dist/_chunks/index-4W1jrPVd.js.map +0 -1
  99. package/dist/_chunks/index-BWyhWRPa.mjs.map +0 -1
  100. package/dist/_chunks/index-FETf_nGC.mjs.map +0 -1
  101. package/dist/_chunks/index-H0k1w1px.mjs +0 -301
  102. package/dist/_chunks/index-H0k1w1px.mjs.map +0 -1
  103. package/dist/_chunks/index-KmMoN4sr.js.map +0 -1
  104. package/dist/_chunks/index-MfP0ffb0.js.map +0 -1
  105. package/dist/_chunks/index-kKUYoIsq.mjs.map +0 -1
  106. package/dist/_chunks/index-sarofNNK.js.map +0 -1
  107. package/dist/_chunks/index-tUo88Kqt.js.map +0 -1
  108. package/dist/_chunks/index-xHL-7Hse.mjs.map +0 -1
@@ -1,18 +1,10 @@
1
1
  import * as React from 'react';
2
2
 
3
+ import { useTracking } from '@strapi/admin/strapi-admin';
3
4
  import { ContentLayout, HeaderLayout, Main, useNotifyAT } from '@strapi/design-system';
4
- import {
5
- CheckPagePermissions,
6
- LoadingIndicatorPage,
7
- SettingsPageTitle,
8
- useAPIErrorHandler,
9
- useFetchClient,
10
- useFocusWhenNavigate,
11
- useNotification,
12
- useOverlayBlocker,
13
- useRBAC,
14
- useTracking,
15
- } from '@strapi/helper-plugin';
5
+ import { useFetchClient, useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';
6
+ import { Page, useAPIErrorHandler, useNotification } from '@strapi/strapi/admin';
7
+ import { Helmet } from 'react-helmet';
16
8
  import { useIntl } from 'react-intl';
17
9
  import { useMutation, useQuery, useQueryClient } from 'react-query';
18
10
 
@@ -23,17 +15,15 @@ import EmailForm from './components/EmailForm';
23
15
  import EmailTable from './components/EmailTable';
24
16
 
25
17
  const ProtectedEmailTemplatesPage = () => (
26
- <CheckPagePermissions permissions={PERMISSIONS.readEmailTemplates}>
18
+ <Page.Protect permissions={PERMISSIONS.readEmailTemplates}>
27
19
  <EmailTemplatesPage />
28
- </CheckPagePermissions>
20
+ </Page.Protect>
29
21
  );
30
-
31
22
  const EmailTemplatesPage = () => {
32
23
  const { formatMessage } = useIntl();
33
24
  const { trackUsage } = useTracking();
34
25
  const { notifyStatus } = useNotifyAT();
35
- const toggleNotification = useNotification();
36
- const { lockApp, unlockApp } = useOverlayBlocker();
26
+ const { toggleNotification } = useNotification();
37
27
  const queryClient = useQueryClient();
38
28
  const { get, put } = useFetchClient();
39
29
  const { formatAPIError } = useAPIErrorHandler();
@@ -66,7 +56,7 @@ const EmailTemplatesPage = () => {
66
56
  },
67
57
  onError(error) {
68
58
  toggleNotification({
69
- type: 'warning',
59
+ type: 'danger',
70
60
  message: formatAPIError(error),
71
61
  });
72
62
  },
@@ -92,29 +82,24 @@ const EmailTemplatesPage = () => {
92
82
 
93
83
  toggleNotification({
94
84
  type: 'success',
95
- message: { id: 'notification.success.saved', defaultMessage: 'Saved' },
85
+ message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),
96
86
  });
97
87
 
98
88
  trackUsage('didEditEmailTemplates');
99
89
 
100
- unlockApp();
101
90
  handleToggle();
102
91
  },
103
92
  onError(error) {
104
93
  toggleNotification({
105
- type: 'warning',
94
+ type: 'danger',
106
95
  message: formatAPIError(error),
107
96
  });
108
-
109
- unlockApp();
110
97
  },
111
98
  refetchActive: true,
112
99
  }
113
100
  );
114
101
 
115
102
  const handleSubmit = (body) => {
116
- lockApp();
117
-
118
103
  trackUsage('willEditEmailTemplates');
119
104
 
120
105
  const editedTemplates = { ...data, [templateToEdit]: body };
@@ -122,34 +107,21 @@ const EmailTemplatesPage = () => {
122
107
  };
123
108
 
124
109
  if (isLoading) {
125
- return (
126
- <Main aria-busy="true">
127
- <SettingsPageTitle
128
- name={formatMessage({
129
- id: getTrad('HeaderNav.link.emailTemplates'),
130
- defaultMessage: 'Email templates',
131
- })}
132
- />
133
- <HeaderLayout
134
- title={formatMessage({
135
- id: getTrad('HeaderNav.link.emailTemplates'),
136
- defaultMessage: 'Email templates',
137
- })}
138
- />
139
- <ContentLayout>
140
- <LoadingIndicatorPage />
141
- </ContentLayout>
142
- </Main>
143
- );
110
+ return <Page.Loading />;
144
111
  }
145
112
 
146
113
  return (
147
114
  <Main aria-busy={submitMutation.isLoading}>
148
- <SettingsPageTitle
149
- name={formatMessage({
150
- id: getTrad('HeaderNav.link.emailTemplates'),
151
- defaultMessage: 'Email templates',
152
- })}
115
+ <Helmet
116
+ title={formatMessage(
117
+ { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
118
+ {
119
+ name: formatMessage({
120
+ id: getTrad('HeaderNav.link.emailTemplates'),
121
+ defaultMessage: 'Email templates',
122
+ }),
123
+ }
124
+ )}
153
125
  />
154
126
  <HeaderLayout
155
127
  title={formatMessage({
@@ -171,4 +143,4 @@ const EmailTemplatesPage = () => {
171
143
  );
172
144
  };
173
145
 
174
- export default ProtectedEmailTemplatesPage;
146
+ export { ProtectedEmailTemplatesPage, EmailTemplatesPage };
@@ -1,4 +1,4 @@
1
- import { translatedErrors } from '@strapi/helper-plugin';
1
+ import { translatedErrors } from '@strapi/strapi/admin';
2
2
  import * as yup from 'yup';
3
3
 
4
4
  const schema = yup.object().shape({
@@ -8,15 +8,27 @@ const schema = yup.object().shape({
8
8
  from: yup
9
9
  .object()
10
10
  .shape({
11
- name: yup.string().required(translatedErrors.required),
12
- email: yup.string().email(translatedErrors.email).required(translatedErrors.required),
11
+ name: yup.string().required({
12
+ id: translatedErrors.required.id,
13
+ defaultMessage: 'This field is required',
14
+ }),
15
+ email: yup.string().email(translatedErrors.email).required({
16
+ id: translatedErrors.required.id,
17
+ defaultMessage: 'This field is required',
18
+ }),
13
19
  })
14
20
  .required(),
15
21
  response_email: yup.string().email(translatedErrors.email),
16
- object: yup.string().required(translatedErrors.required),
17
- message: yup.string().required(translatedErrors.required),
22
+ object: yup.string().required({
23
+ id: translatedErrors.required.id,
24
+ defaultMessage: 'This field is required',
25
+ }),
26
+ message: yup.string().required({
27
+ id: translatedErrors.required.id,
28
+ defaultMessage: 'This field is required',
29
+ }),
18
30
  })
19
- .required(translatedErrors.required),
31
+ .required(translatedErrors.required.id),
20
32
  });
21
33
 
22
34
  export default schema;
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
 
3
+ import { useTracking } from '@strapi/admin/strapi-admin';
3
4
  import {
4
5
  ContentLayout,
5
6
  HeaderLayout,
@@ -14,24 +15,19 @@ import {
14
15
  Tr,
15
16
  Typography,
16
17
  VisuallyHidden,
18
+ useCollator,
17
19
  } from '@strapi/design-system';
18
20
  import {
19
- CheckPagePermissions,
20
- LoadingIndicatorPage,
21
21
  onRowClick,
22
- SettingsPageTitle,
23
22
  stopPropagation,
24
- useAPIErrorHandler,
25
- useCollator,
26
23
  useFetchClient,
27
24
  useFocusWhenNavigate,
28
- useNotification,
29
- useOverlayBlocker,
30
25
  useRBAC,
31
- useTracking,
32
26
  } from '@strapi/helper-plugin';
33
27
  import { Pencil } from '@strapi/icons';
28
+ import { Page, useAPIErrorHandler, useNotification } from '@strapi/strapi/admin';
34
29
  import upperFirst from 'lodash/upperFirst';
30
+ import { Helmet } from 'react-helmet';
35
31
  import { useIntl } from 'react-intl';
36
32
  import { useMutation, useQuery, useQueryClient } from 'react-query';
37
33
 
@@ -47,8 +43,7 @@ export const ProvidersPage = () => {
47
43
  const { trackUsage } = useTracking();
48
44
  const [isOpen, setIsOpen] = React.useState(false);
49
45
  const [providerToEditName, setProviderToEditName] = React.useState(null);
50
- const toggleNotification = useNotification();
51
- const { lockApp, unlockApp } = useOverlayBlocker();
46
+ const { toggleNotification } = useNotification();
52
47
  const { get, put } = useFetchClient();
53
48
  const { formatAPIError } = useAPIErrorHandler();
54
49
  const formatter = useCollator(locale, {
@@ -80,21 +75,18 @@ export const ProvidersPage = () => {
80
75
 
81
76
  toggleNotification({
82
77
  type: 'success',
83
- message: { id: getTrad('notification.success.submit') },
78
+ message: formatMessage({ id: getTrad('notification.success.submit') }),
84
79
  });
85
80
 
86
81
  trackUsage('didEditAuthenticationProvider');
87
82
 
88
83
  handleToggleModal();
89
- unlockApp();
90
84
  },
91
85
  onError(error) {
92
86
  toggleNotification({
93
- type: 'warning',
87
+ type: 'danger',
94
88
  message: formatAPIError(error),
95
89
  });
96
-
97
- unlockApp();
98
90
  },
99
91
  refetchActive: false,
100
92
  });
@@ -150,20 +142,27 @@ export const ProvidersPage = () => {
150
142
  };
151
143
 
152
144
  const handleSubmit = async (values) => {
153
- lockApp();
154
-
155
145
  trackUsage('willEditAuthenticationProvider');
156
146
 
157
147
  submitMutation.mutate({ providers: { ...data, [providerToEditName]: values } });
158
148
  };
159
149
 
150
+ if (isLoading) {
151
+ return <Page.Loading />;
152
+ }
153
+
160
154
  return (
161
155
  <Layout>
162
- <SettingsPageTitle
163
- name={formatMessage({
164
- id: getTrad('HeaderNav.link.providers'),
165
- defaultMessage: 'Providers',
166
- })}
156
+ <Helmet
157
+ title={formatMessage(
158
+ { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
159
+ {
160
+ name: formatMessage({
161
+ id: getTrad('HeaderNav.link.providers'),
162
+ defaultMessage: 'Providers',
163
+ }),
164
+ }
165
+ )}
167
166
  />
168
167
  <Main>
169
168
  <HeaderLayout
@@ -172,81 +171,77 @@ export const ProvidersPage = () => {
172
171
  defaultMessage: 'Providers',
173
172
  })}
174
173
  />
175
- {isLoading ? (
176
- <LoadingIndicatorPage />
177
- ) : (
178
- <ContentLayout>
179
- <Table colCount={3} rowCount={providers.length + 1}>
180
- <Thead>
181
- <Tr>
182
- <Th>
183
- <Typography variant="sigma" textColor="neutral600">
184
- {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}
174
+ <ContentLayout>
175
+ <Table colCount={3} rowCount={providers.length + 1}>
176
+ <Thead>
177
+ <Tr>
178
+ <Th>
179
+ <Typography variant="sigma" textColor="neutral600">
180
+ {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}
181
+ </Typography>
182
+ </Th>
183
+ <Th>
184
+ <Typography variant="sigma" textColor="neutral600">
185
+ {formatMessage({ id: getTrad('Providers.status'), defaultMessage: 'Status' })}
186
+ </Typography>
187
+ </Th>
188
+ <Th>
189
+ <Typography variant="sigma">
190
+ <VisuallyHidden>
191
+ {formatMessage({
192
+ id: 'global.settings',
193
+ defaultMessage: 'Settings',
194
+ })}
195
+ </VisuallyHidden>
196
+ </Typography>
197
+ </Th>
198
+ </Tr>
199
+ </Thead>
200
+ <Tbody>
201
+ {providers.map((provider) => (
202
+ <Tr
203
+ key={provider.name}
204
+ {...onRowClick({
205
+ fn: () => handleClickEdit(provider),
206
+ condition: canUpdate,
207
+ })}
208
+ >
209
+ <Td width="45%">
210
+ <Typography fontWeight="semiBold" textColor="neutral800">
211
+ {provider.name}
185
212
  </Typography>
186
- </Th>
187
- <Th>
188
- <Typography variant="sigma" textColor="neutral600">
189
- {formatMessage({ id: getTrad('Providers.status'), defaultMessage: 'Status' })}
213
+ </Td>
214
+ <Td width="65%">
215
+ <Typography
216
+ textColor={provider.enabled ? 'success600' : 'danger600'}
217
+ data-testid={`enable-${provider.name}`}
218
+ >
219
+ {provider.enabled
220
+ ? formatMessage({
221
+ id: 'global.enabled',
222
+ defaultMessage: 'Enabled',
223
+ })
224
+ : formatMessage({
225
+ id: 'global.disabled',
226
+ defaultMessage: 'Disabled',
227
+ })}
190
228
  </Typography>
191
- </Th>
192
- <Th>
193
- <Typography variant="sigma">
194
- <VisuallyHidden>
195
- {formatMessage({
196
- id: 'global.settings',
197
- defaultMessage: 'Settings',
198
- })}
199
- </VisuallyHidden>
200
- </Typography>
201
- </Th>
229
+ </Td>
230
+ <Td {...stopPropagation}>
231
+ {canUpdate && (
232
+ <IconButton
233
+ onClick={() => handleClickEdit(provider)}
234
+ noBorder
235
+ icon={<Pencil />}
236
+ label="Edit"
237
+ />
238
+ )}
239
+ </Td>
202
240
  </Tr>
203
- </Thead>
204
- <Tbody>
205
- {providers.map((provider) => (
206
- <Tr
207
- key={provider.name}
208
- {...onRowClick({
209
- fn: () => handleClickEdit(provider),
210
- condition: canUpdate,
211
- })}
212
- >
213
- <Td width="45%">
214
- <Typography fontWeight="semiBold" textColor="neutral800">
215
- {provider.name}
216
- </Typography>
217
- </Td>
218
- <Td width="65%">
219
- <Typography
220
- textColor={provider.enabled ? 'success600' : 'danger600'}
221
- data-testid={`enable-${provider.name}`}
222
- >
223
- {provider.enabled
224
- ? formatMessage({
225
- id: 'global.enabled',
226
- defaultMessage: 'Enabled',
227
- })
228
- : formatMessage({
229
- id: 'global.disabled',
230
- defaultMessage: 'Disabled',
231
- })}
232
- </Typography>
233
- </Td>
234
- <Td {...stopPropagation}>
235
- {canUpdate && (
236
- <IconButton
237
- onClick={() => handleClickEdit(provider)}
238
- noBorder
239
- icon={<Pencil />}
240
- label="Edit"
241
- />
242
- )}
243
- </Td>
244
- </Tr>
245
- ))}
246
- </Tbody>
247
- </Table>
248
- </ContentLayout>
249
- )}
241
+ ))}
242
+ </Tbody>
243
+ </Table>
244
+ </ContentLayout>
250
245
  </Main>
251
246
  <FormModal
252
247
  initialData={data[providerToEditName]}
@@ -269,9 +264,9 @@ export const ProvidersPage = () => {
269
264
  };
270
265
 
271
266
  const ProtectedProvidersPage = () => (
272
- <CheckPagePermissions permissions={PERMISSIONS.readProviders}>
267
+ <Page.Protect permissions={PERMISSIONS.readProviders}>
273
268
  <ProvidersPage />
274
- </CheckPagePermissions>
269
+ </Page.Protect>
275
270
  );
276
271
 
277
272
  export default ProtectedProvidersPage;
@@ -1,4 +1,4 @@
1
- import { translatedErrors } from '@strapi/helper-plugin';
1
+ import { translatedErrors } from '@strapi/strapi/admin';
2
2
  import * as yup from 'yup';
3
3
 
4
4
  import { getTrad } from '../../../utils';
@@ -52,7 +52,7 @@ const forms = {
52
52
  ],
53
53
  ],
54
54
  schema: yup.object().shape({
55
- enabled: yup.bool().required(translatedErrors.required),
55
+ enabled: yup.bool().required(translatedErrors.required.id),
56
56
  }),
57
57
  },
58
58
  providers: {
@@ -117,20 +117,20 @@ const forms = {
117
117
  ],
118
118
  ],
119
119
  schema: yup.object().shape({
120
- enabled: yup.bool().required(translatedErrors.required),
120
+ enabled: yup.bool().required(translatedErrors.required.id),
121
121
  key: yup.string().when('enabled', {
122
122
  is: true,
123
- then: yup.string().required(translatedErrors.required),
123
+ then: yup.string().required(translatedErrors.required.id),
124
124
  otherwise: yup.string(),
125
125
  }),
126
126
  secret: yup.string().when('enabled', {
127
127
  is: true,
128
- then: yup.string().required(translatedErrors.required),
128
+ then: yup.string().required(translatedErrors.required.id),
129
129
  otherwise: yup.string(),
130
130
  }),
131
131
  callback: yup.string().when('enabled', {
132
132
  is: true,
133
- then: yup.string().required(translatedErrors.required),
133
+ then: yup.string().required(translatedErrors.required.id),
134
134
  otherwise: yup.string(),
135
135
  }),
136
136
  }),
@@ -231,25 +231,25 @@ const forms = {
231
231
  ],
232
232
  ],
233
233
  schema: yup.object().shape({
234
- enabled: yup.bool().required(translatedErrors.required),
234
+ enabled: yup.bool().required(translatedErrors.required.id),
235
235
  key: yup.string().when('enabled', {
236
236
  is: true,
237
- then: yup.string().required(translatedErrors.required),
237
+ then: yup.string().required(translatedErrors.required.id),
238
238
  otherwise: yup.string(),
239
239
  }),
240
240
  secret: yup.string().when('enabled', {
241
241
  is: true,
242
- then: yup.string().required(translatedErrors.required),
242
+ then: yup.string().required(translatedErrors.required.id),
243
243
  otherwise: yup.string(),
244
244
  }),
245
245
  subdomain: yup.string().when('enabled', {
246
246
  is: true,
247
- then: yup.string().required(translatedErrors.required),
247
+ then: yup.string().required(translatedErrors.required.id),
248
248
  otherwise: yup.string(),
249
249
  }),
250
250
  callback: yup.string().when('enabled', {
251
251
  is: true,
252
- then: yup.string().required(translatedErrors.required),
252
+ then: yup.string().required(translatedErrors.required.id),
253
253
  otherwise: yup.string(),
254
254
  }),
255
255
  }),
@@ -1,7 +1,7 @@
1
- import { translatedErrors } from '@strapi/helper-plugin';
1
+ import { translatedErrors } from '@strapi/strapi/admin';
2
2
  import * as yup from 'yup';
3
3
 
4
4
  export const createRoleSchema = yup.object().shape({
5
- name: yup.string().required(translatedErrors.required),
6
- description: yup.string().required(translatedErrors.required),
5
+ name: yup.string().required(translatedErrors.required.id),
6
+ description: yup.string().required(translatedErrors.required.id),
7
7
  });
@@ -1,12 +1,13 @@
1
1
  import { useEffect } from 'react';
2
2
 
3
- import { useNotification, useFetchClient, useAPIErrorHandler } from '@strapi/helper-plugin';
3
+ import { useFetchClient } from '@strapi/helper-plugin';
4
+ import { useAPIErrorHandler, useNotification } from '@strapi/strapi/admin';
4
5
  import { useQueries } from 'react-query';
5
6
 
6
7
  import { cleanPermissions, getTrad } from '../../../utils';
7
8
 
8
9
  export const usePlugins = () => {
9
- const toggleNotification = useNotification();
10
+ const { toggleNotification } = useNotification();
10
11
  const { get } = useFetchClient();
11
12
  const { formatAPIError } = useAPIErrorHandler(getTrad);
12
13
 
@@ -48,7 +49,7 @@ export const usePlugins = () => {
48
49
  useEffect(() => {
49
50
  if (permissionsError) {
50
51
  toggleNotification({
51
- type: 'warning',
52
+ type: 'danger',
52
53
  message: formatAPIError(permissionsError),
53
54
  });
54
55
  }
@@ -57,7 +58,7 @@ export const usePlugins = () => {
57
58
  useEffect(() => {
58
59
  if (routesError) {
59
60
  toggleNotification({
60
- type: 'warning',
61
+ type: 'danger',
61
62
  message: formatAPIError(routesError),
62
63
  });
63
64
  }
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
- import { AnErrorOccurred, CheckPagePermissions } from '@strapi/helper-plugin';
4
- import { Route, Switch } from 'react-router-dom';
3
+ import { Page } from '@strapi/strapi/admin';
4
+ import { Route, Routes } from 'react-router-dom';
5
5
 
6
6
  import { PERMISSIONS } from '../../constants';
7
7
 
@@ -11,22 +11,13 @@ import { ProtectedRolesListPage } from './pages/ListPage';
11
11
 
12
12
  const Roles = () => {
13
13
  return (
14
- <CheckPagePermissions permissions={PERMISSIONS.accessRoles}>
15
- <Switch>
16
- <Route
17
- path="/settings/users-permissions/roles/new"
18
- component={ProtectedRolesCreatePage}
19
- exact
20
- />
21
- <Route
22
- path="/settings/users-permissions/roles/:id"
23
- component={ProtectedRolesEditPage}
24
- exact
25
- />
26
- <Route path="/settings/users-permissions/roles" component={ProtectedRolesListPage} exact />
27
- <Route path="" component={AnErrorOccurred} />
28
- </Switch>
29
- </CheckPagePermissions>
14
+ <Page.Protect permissions={PERMISSIONS.accessRoles}>
15
+ <Routes>
16
+ <Route index element={<ProtectedRolesListPage />} />
17
+ <Route path="new" element={<ProtectedRolesCreatePage />} />
18
+ <Route path=":id" element={<ProtectedRolesEditPage />} />
19
+ </Routes>
20
+ </Page.Protect>
30
21
  );
31
22
  };
32
23