@strapi/plugin-users-permissions 0.0.0-next.e50ef5e2ea57ecf3da5bcf308508b51ee3c0deca → 0.0.0-next.e5b87a54008c9de2b3286a4774635dcf69895d9b

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 (149) hide show
  1. package/admin/src/components/Permissions/PermissionRow/SubCategory.jsx +8 -1
  2. package/admin/src/components/Policies/index.jsx +1 -0
  3. package/admin/src/components/UsersPermissions/index.jsx +1 -0
  4. package/admin/src/pages/AdvancedSettings/index.jsx +1 -0
  5. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +2 -1
  6. package/admin/src/pages/Providers/index.jsx +74 -76
  7. package/admin/src/pages/Roles/pages/CreatePage.jsx +26 -8
  8. package/admin/src/pages/Roles/pages/EditPage.jsx +13 -7
  9. package/admin/src/pages/Roles/pages/ListPage/index.jsx +92 -93
  10. package/admin/src/translations/de.json +27 -2
  11. package/admin/src/translations/en.json +1 -0
  12. package/dist/admin/components/FormModal/Input/index.js.map +1 -1
  13. package/dist/admin/components/FormModal/Input/index.mjs.map +1 -1
  14. package/dist/admin/components/Permissions/PermissionRow/SubCategory.js +3 -1
  15. package/dist/admin/components/Permissions/PermissionRow/SubCategory.js.map +1 -1
  16. package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs +3 -1
  17. package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs.map +1 -1
  18. package/dist/admin/components/Permissions/PermissionRow/index.js.map +1 -1
  19. package/dist/admin/components/Permissions/PermissionRow/index.mjs.map +1 -1
  20. package/dist/admin/components/Policies/index.js +1 -0
  21. package/dist/admin/components/Policies/index.js.map +1 -1
  22. package/dist/admin/components/Policies/index.mjs +1 -0
  23. package/dist/admin/components/Policies/index.mjs.map +1 -1
  24. package/dist/admin/components/UsersPermissions/index.js +1 -0
  25. package/dist/admin/components/UsersPermissions/index.js.map +1 -1
  26. package/dist/admin/components/UsersPermissions/index.mjs +1 -0
  27. package/dist/admin/components/UsersPermissions/index.mjs.map +1 -1
  28. package/dist/admin/pages/AdvancedSettings/index.js +1 -0
  29. package/dist/admin/pages/AdvancedSettings/index.js.map +1 -1
  30. package/dist/admin/pages/AdvancedSettings/index.mjs +1 -0
  31. package/dist/admin/pages/AdvancedSettings/index.mjs.map +1 -1
  32. package/dist/admin/pages/EmailTemplates/components/EmailForm.js +2 -1
  33. package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
  34. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +2 -1
  35. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -1
  36. package/dist/admin/pages/Providers/index.js +84 -88
  37. package/dist/admin/pages/Providers/index.js.map +1 -1
  38. package/dist/admin/pages/Providers/index.mjs +84 -88
  39. package/dist/admin/pages/Providers/index.mjs.map +1 -1
  40. package/dist/admin/pages/Roles/pages/CreatePage.js +15 -1
  41. package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -1
  42. package/dist/admin/pages/Roles/pages/CreatePage.mjs +17 -3
  43. package/dist/admin/pages/Roles/pages/CreatePage.mjs.map +1 -1
  44. package/dist/admin/pages/Roles/pages/EditPage.js +14 -3
  45. package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
  46. package/dist/admin/pages/Roles/pages/EditPage.mjs +15 -4
  47. package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
  48. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js.map +1 -1
  49. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs.map +1 -1
  50. package/dist/admin/pages/Roles/pages/ListPage/index.js +96 -99
  51. package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
  52. package/dist/admin/pages/Roles/pages/ListPage/index.mjs +96 -99
  53. package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
  54. package/dist/admin/translations/de.json.js +27 -2
  55. package/dist/admin/translations/de.json.js.map +1 -1
  56. package/dist/admin/translations/de.json.mjs +27 -2
  57. package/dist/admin/translations/de.json.mjs.map +1 -1
  58. package/dist/admin/translations/en.json.js +1 -0
  59. package/dist/admin/translations/en.json.js.map +1 -1
  60. package/dist/admin/translations/en.json.mjs +1 -0
  61. package/dist/admin/translations/en.json.mjs.map +1 -1
  62. package/dist/admin/utils/getTrad.js.map +1 -1
  63. package/dist/admin/utils/getTrad.mjs.map +1 -1
  64. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
  65. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
  66. package/dist/server/bootstrap/index.js +28 -7
  67. package/dist/server/bootstrap/index.js.map +1 -1
  68. package/dist/server/bootstrap/index.mjs +28 -7
  69. package/dist/server/bootstrap/index.mjs.map +1 -1
  70. package/dist/server/config.js +16 -0
  71. package/dist/server/config.js.map +1 -1
  72. package/dist/server/config.mjs +16 -0
  73. package/dist/server/config.mjs.map +1 -1
  74. package/dist/server/controllers/auth.js +204 -3
  75. package/dist/server/controllers/auth.js.map +1 -1
  76. package/dist/server/controllers/auth.mjs +204 -3
  77. package/dist/server/controllers/auth.mjs.map +1 -1
  78. package/dist/server/controllers/content-manager-user.js +3 -3
  79. package/dist/server/controllers/content-manager-user.js.map +1 -1
  80. package/dist/server/controllers/content-manager-user.mjs +3 -3
  81. package/dist/server/controllers/content-manager-user.mjs.map +1 -1
  82. package/dist/server/controllers/validation/user.js +6 -1
  83. package/dist/server/controllers/validation/user.js.map +1 -1
  84. package/dist/server/controllers/validation/user.mjs +6 -1
  85. package/dist/server/controllers/validation/user.mjs.map +1 -1
  86. package/dist/server/graphql/resolvers-configs.js.map +1 -1
  87. package/dist/server/graphql/resolvers-configs.mjs.map +1 -1
  88. package/dist/server/middlewares/rateLimit.js.map +1 -1
  89. package/dist/server/middlewares/rateLimit.mjs.map +1 -1
  90. package/dist/server/routes/content-api/auth.js +155 -91
  91. package/dist/server/routes/content-api/auth.js.map +1 -1
  92. package/dist/server/routes/content-api/auth.mjs +155 -91
  93. package/dist/server/routes/content-api/auth.mjs.map +1 -1
  94. package/dist/server/routes/content-api/index.js +11 -9
  95. package/dist/server/routes/content-api/index.js.map +1 -1
  96. package/dist/server/routes/content-api/index.mjs +11 -9
  97. package/dist/server/routes/content-api/index.mjs.map +1 -1
  98. package/dist/server/routes/content-api/permissions.js +14 -7
  99. package/dist/server/routes/content-api/permissions.js.map +1 -1
  100. package/dist/server/routes/content-api/permissions.mjs +14 -7
  101. package/dist/server/routes/content-api/permissions.mjs.map +1 -1
  102. package/dist/server/routes/content-api/role.js +61 -27
  103. package/dist/server/routes/content-api/role.js.map +1 -1
  104. package/dist/server/routes/content-api/role.mjs +61 -27
  105. package/dist/server/routes/content-api/role.mjs.map +1 -1
  106. package/dist/server/routes/content-api/user.js +119 -57
  107. package/dist/server/routes/content-api/user.js.map +1 -1
  108. package/dist/server/routes/content-api/user.mjs +119 -57
  109. package/dist/server/routes/content-api/user.mjs.map +1 -1
  110. package/dist/server/routes/content-api/validation.js +217 -0
  111. package/dist/server/routes/content-api/validation.js.map +1 -0
  112. package/dist/server/routes/content-api/validation.mjs +215 -0
  113. package/dist/server/routes/content-api/validation.mjs.map +1 -0
  114. package/dist/server/services/constants.js +19 -0
  115. package/dist/server/services/constants.js.map +1 -0
  116. package/dist/server/services/constants.mjs +17 -0
  117. package/dist/server/services/constants.mjs.map +1 -0
  118. package/dist/server/services/jwt.js +45 -2
  119. package/dist/server/services/jwt.js.map +1 -1
  120. package/dist/server/services/jwt.mjs +45 -2
  121. package/dist/server/services/jwt.mjs.map +1 -1
  122. package/dist/server/services/providers-registry.js.map +1 -1
  123. package/dist/server/services/providers-registry.mjs.map +1 -1
  124. package/dist/server/services/role.js.map +1 -1
  125. package/dist/server/services/role.mjs.map +1 -1
  126. package/dist/server/services/user.js +29 -20
  127. package/dist/server/services/user.js.map +1 -1
  128. package/dist/server/services/user.mjs +29 -20
  129. package/dist/server/services/user.mjs.map +1 -1
  130. package/dist/server/services/users-permissions.js +12 -3
  131. package/dist/server/services/users-permissions.js.map +1 -1
  132. package/dist/server/services/users-permissions.mjs +12 -3
  133. package/dist/server/services/users-permissions.mjs.map +1 -1
  134. package/package.json +13 -12
  135. package/server/bootstrap/index.js +31 -0
  136. package/server/config.js +22 -0
  137. package/server/controllers/auth.js +246 -8
  138. package/server/controllers/content-manager-user.js +3 -4
  139. package/server/controllers/validation/user.js +12 -1
  140. package/server/routes/content-api/auth.js +119 -71
  141. package/server/routes/content-api/index.js +11 -4
  142. package/server/routes/content-api/permissions.js +14 -7
  143. package/server/routes/content-api/role.js +57 -27
  144. package/server/routes/content-api/user.js +108 -51
  145. package/server/routes/content-api/validation.js +250 -0
  146. package/server/services/constants.js +9 -0
  147. package/server/services/jwt.js +50 -2
  148. package/server/services/user.js +11 -0
  149. package/server/services/users-permissions.js +6 -2
@@ -78,7 +78,14 @@ const SubCategory = ({ subCategory }) => {
78
78
  const name = `${action.name}.enabled`;
79
79
 
80
80
  return (
81
- <Grid.Item col={6} key={action.name} direction="column" alignItems="stretch">
81
+ <Grid.Item
82
+ col={4}
83
+ xs={12}
84
+ s={6}
85
+ key={action.name}
86
+ direction="column"
87
+ alignItems="stretch"
88
+ >
82
89
  <CheckboxWrapper isActive={isActionSelected(action.name)} padding={2} hasRadius>
83
90
  <Checkbox
84
91
  checked={get(modifiedData, name, false)}
@@ -24,6 +24,7 @@ const Policies = () => {
24
24
  return (
25
25
  <Grid.Item
26
26
  col={5}
27
+ xs={12}
27
28
  background="neutral150"
28
29
  paddingTop={6}
29
30
  paddingBottom={6}
@@ -64,6 +64,7 @@ const UsersPermissions = forwardRef(({ permissions, routes }, ref) => {
64
64
  <Grid.Root gap={0} shadow="filterShadow" hasRadius background="neutral0">
65
65
  <Grid.Item
66
66
  col={7}
67
+ xs={12}
67
68
  paddingTop={6}
68
69
  paddingBottom={6}
69
70
  paddingLeft={7}
@@ -135,6 +135,7 @@ const AdvancedSettingsPage = () => {
135
135
  disabled={!modified || !canUpdate}
136
136
  startIcon={<Check />}
137
137
  size="S"
138
+ fullWidth
138
139
  >
139
140
  {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}
140
141
  </Button>
@@ -104,7 +104,8 @@ const EmailForm = ({ template = {}, onToggle, open, onSubmit }) => {
104
104
  ].map(({ size, ...field }) => (
105
105
  <Grid.Item
106
106
  key={field.name}
107
- col={size}
107
+ m={size}
108
+ xs={12}
108
109
  direction="column"
109
110
  alignItems="stretch"
110
111
  >
@@ -144,7 +144,7 @@ export const ProvidersPage = () => {
144
144
  }
145
145
 
146
146
  return (
147
- <Layouts.Root>
147
+ <Page.Main>
148
148
  <Page.Title>
149
149
  {formatMessage(
150
150
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
@@ -156,83 +156,81 @@ export const ProvidersPage = () => {
156
156
  }
157
157
  )}
158
158
  </Page.Title>
159
- <Page.Main>
160
- <Layouts.Header
161
- title={formatMessage({
162
- id: getTrad('HeaderNav.link.providers'),
163
- defaultMessage: 'Providers',
164
- })}
165
- />
166
- <Layouts.Content>
167
- <Table colCount={3} rowCount={providers.length + 1}>
168
- <Thead>
169
- <Tr>
170
- <Th>
171
- <Typography variant="sigma" textColor="neutral600">
172
- {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}
173
- </Typography>
174
- </Th>
175
- <Th>
176
- <Typography variant="sigma" textColor="neutral600">
177
- {formatMessage({ id: getTrad('Providers.status'), defaultMessage: 'Status' })}
159
+ <Layouts.Header
160
+ title={formatMessage({
161
+ id: getTrad('HeaderNav.link.providers'),
162
+ defaultMessage: 'Providers',
163
+ })}
164
+ />
165
+ <Layouts.Content>
166
+ <Table colCount={3} rowCount={providers.length + 1}>
167
+ <Thead>
168
+ <Tr>
169
+ <Th>
170
+ <Typography variant="sigma" textColor="neutral600">
171
+ {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}
172
+ </Typography>
173
+ </Th>
174
+ <Th>
175
+ <Typography variant="sigma" textColor="neutral600">
176
+ {formatMessage({ id: getTrad('Providers.status'), defaultMessage: 'Status' })}
177
+ </Typography>
178
+ </Th>
179
+ <Th>
180
+ <Typography variant="sigma">
181
+ <VisuallyHidden>
182
+ {formatMessage({
183
+ id: 'global.settings',
184
+ defaultMessage: 'Settings',
185
+ })}
186
+ </VisuallyHidden>
187
+ </Typography>
188
+ </Th>
189
+ </Tr>
190
+ </Thead>
191
+ <Tbody>
192
+ {providers.map((provider) => (
193
+ <Tr
194
+ key={provider.name}
195
+ onClick={() => (canUpdate ? handleClickEdit(provider) : undefined)}
196
+ >
197
+ <Td width="45%">
198
+ <Typography fontWeight="semiBold" textColor="neutral800">
199
+ {provider.name}
178
200
  </Typography>
179
- </Th>
180
- <Th>
181
- <Typography variant="sigma">
182
- <VisuallyHidden>
183
- {formatMessage({
184
- id: 'global.settings',
185
- defaultMessage: 'Settings',
186
- })}
187
- </VisuallyHidden>
201
+ </Td>
202
+ <Td width="65%">
203
+ <Typography
204
+ textColor={provider.enabled ? 'success600' : 'danger600'}
205
+ data-testid={`enable-${provider.name}`}
206
+ >
207
+ {provider.enabled
208
+ ? formatMessage({
209
+ id: 'global.enabled',
210
+ defaultMessage: 'Enabled',
211
+ })
212
+ : formatMessage({
213
+ id: 'global.disabled',
214
+ defaultMessage: 'Disabled',
215
+ })}
188
216
  </Typography>
189
- </Th>
190
- </Tr>
191
- </Thead>
192
- <Tbody>
193
- {providers.map((provider) => (
194
- <Tr
195
- key={provider.name}
196
- onClick={() => (canUpdate ? handleClickEdit(provider) : undefined)}
197
- >
198
- <Td width="45%">
199
- <Typography fontWeight="semiBold" textColor="neutral800">
200
- {provider.name}
201
- </Typography>
202
- </Td>
203
- <Td width="65%">
204
- <Typography
205
- textColor={provider.enabled ? 'success600' : 'danger600'}
206
- data-testid={`enable-${provider.name}`}
217
+ </Td>
218
+ <Td onClick={(e) => e.stopPropagation()}>
219
+ {canUpdate && (
220
+ <IconButton
221
+ onClick={() => handleClickEdit(provider)}
222
+ variant="ghost"
223
+ label="Edit"
207
224
  >
208
- {provider.enabled
209
- ? formatMessage({
210
- id: 'global.enabled',
211
- defaultMessage: 'Enabled',
212
- })
213
- : formatMessage({
214
- id: 'global.disabled',
215
- defaultMessage: 'Disabled',
216
- })}
217
- </Typography>
218
- </Td>
219
- <Td onClick={(e) => e.stopPropagation()}>
220
- {canUpdate && (
221
- <IconButton
222
- onClick={() => handleClickEdit(provider)}
223
- variant="ghost"
224
- label="Edit"
225
- >
226
- <Pencil />
227
- </IconButton>
228
- )}
229
- </Td>
230
- </Tr>
231
- ))}
232
- </Tbody>
233
- </Table>
234
- </Layouts.Content>
235
- </Page.Main>
225
+ <Pencil />
226
+ </IconButton>
227
+ )}
228
+ </Td>
229
+ </Tr>
230
+ ))}
231
+ </Tbody>
232
+ </Table>
233
+ </Layouts.Content>
236
234
  <FormModal
237
235
  initialData={data[providerToEditName]}
238
236
  isOpen={isOpen}
@@ -249,7 +247,7 @@ export const ProvidersPage = () => {
249
247
  onSubmit={handleSubmit}
250
248
  providerToEditName={providerToEditName}
251
249
  />
252
- </Layouts.Root>
250
+ </Page.Main>
253
251
  );
254
252
  };
255
253
 
@@ -4,14 +4,21 @@ import {
4
4
  Button,
5
5
  Flex,
6
6
  Grid,
7
- Main,
8
7
  Textarea,
9
8
  TextInput,
10
9
  Typography,
11
10
  Field,
11
+ Box,
12
12
  } from '@strapi/design-system';
13
13
  import { Check } from '@strapi/icons';
14
- import { Page, useTracking, useNotification, useFetchClient, Layouts } from '@strapi/strapi/admin';
14
+ import {
15
+ Page,
16
+ useTracking,
17
+ useNotification,
18
+ useFetchClient,
19
+ Layouts,
20
+ BackButton,
21
+ } from '@strapi/strapi/admin';
15
22
  import { Formik, Form } from 'formik';
16
23
  import { useIntl } from 'react-intl';
17
24
  import { useMutation } from 'react-query';
@@ -68,7 +75,7 @@ export const CreatePage = () => {
68
75
  };
69
76
 
70
77
  return (
71
- <Main>
78
+ <Page.Main>
72
79
  <Page.Title>
73
80
  {formatMessage(
74
81
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
@@ -86,7 +93,12 @@ export const CreatePage = () => {
86
93
  <Layouts.Header
87
94
  primaryAction={
88
95
  !isLoadingPlugins && (
89
- <Button type="submit" loading={mutation.isLoading} startIcon={<Check />}>
96
+ <Button
97
+ type="submit"
98
+ loading={mutation.isLoading}
99
+ startIcon={<Check />}
100
+ fullWidth
101
+ >
90
102
  {formatMessage({
91
103
  id: 'global.save',
92
104
  defaultMessage: 'Save',
@@ -102,6 +114,12 @@ export const CreatePage = () => {
102
114
  id: 'Settings.roles.create.description',
103
115
  defaultMessage: 'Define the rights given to the role',
104
116
  })}
117
+ navigationAction={
118
+ // The back link for mobile works differently; it is placed higher up in the DOM.
119
+ <Box display={{ initial: 'none', medium: 'block' }}>
120
+ <BackButton fallback=".." />
121
+ </Box>
122
+ }
105
123
  />
106
124
  <Layouts.Content>
107
125
  <Flex
@@ -125,7 +143,7 @@ export const CreatePage = () => {
125
143
  </Typography>
126
144
 
127
145
  <Grid.Root gap={4}>
128
- <Grid.Item col={6} direction="column" alignItems="stretch">
146
+ <Grid.Item col={6} xs={12} direction="column" alignItems="stretch">
129
147
  <Field.Root
130
148
  name="name"
131
149
  error={
@@ -141,11 +159,11 @@ export const CreatePage = () => {
141
159
  defaultMessage: 'Name',
142
160
  })}
143
161
  </Field.Label>
144
- <TextInput value={values.name || ''} onChange={handleChange} />
162
+ <TextInput type="text" value={values.name || ''} onChange={handleChange} />
145
163
  <Field.Error />
146
164
  </Field.Root>
147
165
  </Grid.Item>
148
- <Grid.Item col={6} direction="column" alignItems="stretch">
166
+ <Grid.Item col={6} xs={12} direction="column" alignItems="stretch">
149
167
  <Field.Root
150
168
  name="description"
151
169
  error={
@@ -183,7 +201,7 @@ export const CreatePage = () => {
183
201
  </Form>
184
202
  )}
185
203
  </Formik>
186
- </Main>
204
+ </Page.Main>
187
205
  );
188
206
  };
189
207
 
@@ -1,7 +1,6 @@
1
1
  import * as React from 'react';
2
2
 
3
3
  import {
4
- Main,
5
4
  Button,
6
5
  Flex,
7
6
  TextInput,
@@ -9,6 +8,7 @@ import {
9
8
  Typography,
10
9
  Grid,
11
10
  Field,
11
+ Box,
12
12
  } from '@strapi/design-system';
13
13
  import { Check } from '@strapi/icons';
14
14
  import {
@@ -86,7 +86,7 @@ export const EditPage = () => {
86
86
  }
87
87
 
88
88
  return (
89
- <Main>
89
+ <Page.Main>
90
90
  <Page.Title>
91
91
  {formatMessage(
92
92
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
@@ -109,6 +109,7 @@ export const EditPage = () => {
109
109
  type="submit"
110
110
  loading={mutation.isLoading}
111
111
  startIcon={<Check />}
112
+ fullWidth
112
113
  >
113
114
  {formatMessage({
114
115
  id: 'global.save',
@@ -119,7 +120,12 @@ export const EditPage = () => {
119
120
  }
120
121
  title={role.name}
121
122
  subtitle={role.description}
122
- navigationAction={<BackButton fallback=".." />}
123
+ navigationAction={
124
+ // The back link for mobile works differently; it is placed higher up in the DOM.
125
+ <Box display={{ initial: 'none', medium: 'block' }}>
126
+ <BackButton fallback=".." />
127
+ </Box>
128
+ }
123
129
  />
124
130
  <Layouts.Content>
125
131
  <Flex
@@ -143,7 +149,7 @@ export const EditPage = () => {
143
149
  </Typography>
144
150
 
145
151
  <Grid.Root gap={4}>
146
- <Grid.Item col={6} direction="column" alignItems="stretch">
152
+ <Grid.Item col={6} xs={12} direction="column" alignItems="stretch">
147
153
  <Field.Root
148
154
  name="name"
149
155
  error={
@@ -162,11 +168,11 @@ export const EditPage = () => {
162
168
  defaultMessage: 'Name',
163
169
  })}
164
170
  </Field.Label>
165
- <TextInput value={values.name || ''} onChange={handleChange} />
171
+ <TextInput type="text" value={values.name || ''} onChange={handleChange} />
166
172
  <Field.Error />
167
173
  </Field.Root>
168
174
  </Grid.Item>
169
- <Grid.Item col={6} direction="column" alignItems="stretch">
175
+ <Grid.Item col={6} xs={12} direction="column" alignItems="stretch">
170
176
  <Field.Root
171
177
  name="description"
172
178
  error={
@@ -204,7 +210,7 @@ export const EditPage = () => {
204
210
  </Form>
205
211
  )}
206
212
  </Formik>
207
- </Main>
213
+ </Page.Main>
208
214
  );
209
215
  };
210
216
 
@@ -153,107 +153,106 @@ export const RolesListPage = () => {
153
153
  }
154
154
 
155
155
  return (
156
- <Layouts.Root>
156
+ <Page.Main>
157
157
  <Page.Title>
158
158
  {formatMessage(
159
159
  { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
160
160
  { name: pageTitle }
161
161
  )}
162
162
  </Page.Title>
163
- <Page.Main>
164
- <Layouts.Header
165
- title={formatMessage({
166
- id: 'global.roles',
167
- defaultMessage: 'Roles',
168
- })}
169
- subtitle={formatMessage({
170
- id: 'Settings.roles.list.description',
171
- defaultMessage: 'List of roles',
172
- })}
173
- primaryAction={
174
- canCreate ? (
175
- <LinkButton
176
- to="new"
177
- tag={NavLink}
178
- onClick={() => trackUsage('willCreateRole')}
179
- startIcon={<Plus />}
180
- size="S"
181
- >
182
- {formatMessage({
183
- id: getTrad('List.button.roles'),
184
- defaultMessage: 'Add new role',
185
- })}
186
- </LinkButton>
187
- ) : null
188
- }
189
- />
190
-
191
- <Layouts.Action
192
- startActions={
193
- <SearchInput
194
- label={formatMessage({
195
- id: 'app.component.search.label',
196
- defaultMessage: 'Search',
163
+ <Layouts.Header
164
+ title={formatMessage({
165
+ id: 'global.roles',
166
+ defaultMessage: 'Roles',
167
+ })}
168
+ subtitle={formatMessage({
169
+ id: 'Settings.roles.list.description',
170
+ defaultMessage: 'List of roles',
171
+ })}
172
+ primaryAction={
173
+ canCreate ? (
174
+ <LinkButton
175
+ to="new"
176
+ tag={NavLink}
177
+ onClick={() => trackUsage('willCreateRole')}
178
+ startIcon={<Plus />}
179
+ size="S"
180
+ fullWidth
181
+ >
182
+ {formatMessage({
183
+ id: getTrad('List.button.roles'),
184
+ defaultMessage: 'Add new role',
197
185
  })}
198
- />
199
- }
200
- />
186
+ </LinkButton>
187
+ ) : null
188
+ }
189
+ />
190
+
191
+ <Layouts.Action
192
+ startActions={
193
+ <SearchInput
194
+ label={formatMessage({
195
+ id: 'app.component.search.label',
196
+ defaultMessage: 'Search',
197
+ })}
198
+ />
199
+ }
200
+ />
201
201
 
202
- <Layouts.Content>
203
- {!canRead && <Page.NoPermissions />}
204
- {canRead && sortedRoles && sortedRoles?.length ? (
205
- <Table colCount={colCount} rowCount={rowCount}>
206
- <Thead>
207
- <Tr>
208
- <Th>
209
- <Typography variant="sigma" textColor="neutral600">
210
- {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}
211
- </Typography>
212
- </Th>
213
- <Th>
214
- <Typography variant="sigma" textColor="neutral600">
215
- {formatMessage({
216
- id: 'global.description',
217
- defaultMessage: 'Description',
218
- })}
219
- </Typography>
220
- </Th>
221
- <Th>
222
- <Typography variant="sigma" textColor="neutral600">
223
- {formatMessage({
224
- id: 'global.users',
225
- defaultMessage: 'Users',
226
- })}
227
- </Typography>
228
- </Th>
229
- <Th>
230
- <VisuallyHidden>
231
- {formatMessage({
232
- id: 'global.actions',
233
- defaultMessage: 'Actions',
234
- })}
235
- </VisuallyHidden>
236
- </Th>
237
- </Tr>
238
- </Thead>
239
- <TableBody
240
- sortedRoles={sortedRoles}
241
- canDelete={canDelete}
242
- canUpdate={canUpdate}
243
- permissions={PERMISSIONS}
244
- setRoleToDelete={setRoleToDelete}
245
- onDelete={[showConfirmDelete, setShowConfirmDelete]}
246
- />
247
- </Table>
248
- ) : (
249
- <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />
250
- )}
251
- </Layouts.Content>
252
- <Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>
253
- <ConfirmDialog onConfirm={handleConfirmDelete} />
254
- </Dialog.Root>
255
- </Page.Main>
256
- </Layouts.Root>
202
+ <Layouts.Content>
203
+ {!canRead && <Page.NoPermissions />}
204
+ {canRead && sortedRoles && sortedRoles?.length ? (
205
+ <Table colCount={colCount} rowCount={rowCount}>
206
+ <Thead>
207
+ <Tr>
208
+ <Th>
209
+ <Typography variant="sigma" textColor="neutral600">
210
+ {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}
211
+ </Typography>
212
+ </Th>
213
+ <Th>
214
+ <Typography variant="sigma" textColor="neutral600">
215
+ {formatMessage({
216
+ id: 'global.description',
217
+ defaultMessage: 'Description',
218
+ })}
219
+ </Typography>
220
+ </Th>
221
+ <Th>
222
+ <Typography variant="sigma" textColor="neutral600">
223
+ {formatMessage({
224
+ id: 'global.users',
225
+ defaultMessage: 'Users',
226
+ })}
227
+ </Typography>
228
+ </Th>
229
+ <Th>
230
+ <VisuallyHidden>
231
+ {formatMessage({
232
+ id: 'global.actions',
233
+ defaultMessage: 'Actions',
234
+ })}
235
+ </VisuallyHidden>
236
+ </Th>
237
+ </Tr>
238
+ </Thead>
239
+ <TableBody
240
+ sortedRoles={sortedRoles}
241
+ canDelete={canDelete}
242
+ canUpdate={canUpdate}
243
+ permissions={PERMISSIONS}
244
+ setRoleToDelete={setRoleToDelete}
245
+ onDelete={[showConfirmDelete, setShowConfirmDelete]}
246
+ />
247
+ </Table>
248
+ ) : (
249
+ <EmptyStateLayout content={formatMessage(emptyLayout[emptyContent])} />
250
+ )}
251
+ </Layouts.Content>
252
+ <Dialog.Root open={showConfirmDelete} onOpenChange={handleShowConfirmDelete}>
253
+ <ConfirmDialog onConfirm={handleConfirmDelete} />
254
+ </Dialog.Root>
255
+ </Page.Main>
257
256
  );
258
257
  };
259
258
 
@@ -4,15 +4,25 @@
4
4
  "EditForm.inputSelect.label.role": "Standardrolle für authentifizierte Benutzer",
5
5
  "EditForm.inputToggle.description.email": "Verbiete das Anlegen verschiedener Accounts mit der gleichen E-Mail-Adresse bei unterschiedlichen Anmeldemethoden.",
6
6
  "EditForm.inputToggle.description.email-confirmation": "Wenn aktiviert (ON) erhalten neu registrierte Benutzer eine Bestätigungs-E-Mail.",
7
- "EditForm.inputToggle.description.email-confirmation-redirection": "Nachdem Sie die E-Mail bestätigt haben, wähle wohin sie weitergeleitet wird.",
8
- "EditForm.inputToggle.description.email-reset-password": "URL deiner Passwort-Zurücksetzen-Seite deiner Anwendung",
7
+ "EditForm.inputToggle.description.email-confirmation-redirection": "Wähle wohin weitergeleitet wird, wenn die die E-Mail bestätigt wurde.",
8
+ "EditForm.inputToggle.description.email-reset-password": "URL deiner Passwort-Zurücksetzen-Seite",
9
9
  "EditForm.inputToggle.description.sign-up": "Wenn deaktiviert (OFF), wird der Registrationsprozess unterbunden. Niemand kann sich mehr registrieren.",
10
10
  "EditForm.inputToggle.label.email": "Ein Account pro E-Mail-Adresse",
11
11
  "EditForm.inputToggle.label.email-confirmation": "Aktiviere E-Mail Benachrichtigungen",
12
12
  "EditForm.inputToggle.label.email-confirmation-redirection": "Weiterleitungs-URL",
13
13
  "EditForm.inputToggle.label.email-reset-password": "Passwort-Zurücksetzen-Seite",
14
14
  "EditForm.inputToggle.label.sign-up": "Registration ermöglichen",
15
+ "EditForm.inputToggle.placeholder.email-confirmation-redirection": "z.B.: https://example.com/email-bestaetigung-weiterleitung",
16
+ "EditForm.inputToggle.placeholder.email-reset-password": "z.B.: https://example.com/passwort-zuruecksetzen",
17
+ "EditPage.form.roles": "Rollen-Details",
18
+ "Email.template.data.loaded": "E-Mail-Vorlagen wurden geladen",
15
19
  "Email.template.email_confirmation": "Bestätigung der E-Mail-Addresse",
20
+ "Email.template.reset_password": "Passwort zurücksetzen",
21
+ "Email.template.form.edit.label": "Vorlage bearbeiten",
22
+ "Email.template.table.action.label": "Aktion",
23
+ "Email.template.table.icon.label": "Icon",
24
+ "Email.template.table.name.label": "Name",
25
+ "Form.advancedSettings.data.loaded": "Erweiterte Einstellungsdaten wurden geladen",
16
26
  "HeaderNav.link.advancedSettings": "Erweiterte Einstellungen",
17
27
  "HeaderNav.link.emailTemplates": "E-Mail-Templates",
18
28
  "HeaderNav.link.providers": "Methoden",
@@ -44,10 +54,25 @@
44
54
  "PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
45
55
  "PopUpForm.header.edit.email-templates": "E-Mail-Templates bearbeiten",
46
56
  "PopUpForm.header.edit.providers": "Anbieter bearbeiten",
57
+ "Providers.data.loaded": "Anbieter wurden geladen",
58
+ "Providers.status": "Status",
59
+ "Roles.empty": "Du hast noch keine Rollen.",
60
+ "Roles.empty.search": "Keine Rollen entsprechen der Suche.",
47
61
  "Settings.roles.deleted": "Rolle gelöscht",
48
62
  "Settings.roles.edited": "Rolle bearbeitet",
49
63
  "Settings.section-label": "Nutzer- & Berechtigungen-Plugin",
64
+ "components.Input.error.validation.email": "Das ist keine gültige E-Mail-Adresse",
65
+ "components.Input.error.validation.json": "Das entspricht nicht dem JSON-Format",
66
+ "components.Input.error.validation.max": "Der Wert ist zu hoch.",
67
+ "components.Input.error.validation.maxLength": "Der Wert ist zu lang.",
68
+ "components.Input.error.validation.min": "Der Wert ist zu niedrig.",
69
+ "components.Input.error.validation.minLength": "Der Wert ist zu kurz.",
70
+ "components.Input.error.validation.minSupMax": "Kann nicht größer sein",
71
+ "components.Input.error.validation.regex": "Der Wert entspricht nicht dem regulären Ausdruck.",
72
+ "components.Input.error.validation.required": "Dieser Wert ist erforderlich.",
73
+ "components.Input.error.validation.unique": "Dieser Wert wird bereits verwendet.",
50
74
  "notification.success.submit": "Einstellungen aktualisiert",
75
+ "page.title": "Einstellungen - Rollen",
51
76
  "plugin.description.long": "Beschütze deine API mit einem vollständigen Authentifikationsprozess basierend auf JWT. Zudem bietet dieses Plugin eine ACL-Strategie, die erlaubt, die Berechtigungen für Benutzergruppen festzulegen.",
52
77
  "plugin.description.short": "Beschütze deine API mit einem vollständigen Authentifikationsprozess basierend auf JWT.",
53
78
  "plugin.name": "Nutzer- & Berechtigungen-Plugin",