@strapi/plugin-users-permissions 4.20.5 → 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.
- package/admin/src/components/FormModal/index.jsx +1 -2
- package/admin/src/components/Permissions/reducer.js +1 -1
- package/admin/src/components/UsersPermissions/reducer.js +1 -1
- package/admin/src/index.js +14 -30
- package/admin/src/pages/AdvancedSettings/index.jsx +69 -107
- package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
- package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
- package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +47 -74
- package/admin/src/pages/EmailTemplates/index.jsx +22 -50
- package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
- package/admin/src/pages/Providers/index.jsx +91 -96
- package/admin/src/pages/Providers/utils/forms.js +11 -11
- package/admin/src/pages/Roles/constants.js +3 -3
- package/admin/src/pages/Roles/hooks/usePlugins.js +5 -4
- package/admin/src/pages/Roles/index.jsx +9 -18
- package/admin/src/pages/Roles/pages/CreatePage.jsx +21 -28
- package/admin/src/pages/Roles/pages/EditPage.jsx +23 -40
- package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +23 -27
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +42 -38
- package/admin/src/pages/Roles/pages/ListPage/utils/api.js +6 -6
- package/admin/src/translations/en.json +1 -1
- package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs +84370 -0
- package/dist/_chunks/EditViewPage-xYzUSAwS-5mOQ_-nB.mjs.map +1 -0
- package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js +84398 -0
- package/dist/_chunks/EditViewPage-xYzUSAwS-wpHlxdkC.js.map +1 -0
- package/dist/_chunks/Helmet-d9JljxUo.js +1010 -0
- package/dist/_chunks/Helmet-d9JljxUo.js.map +1 -0
- package/dist/_chunks/Helmet-kyJ1Zklj.mjs +1008 -0
- package/dist/_chunks/Helmet-kyJ1Zklj.mjs.map +1 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js +1618 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-elahT0e9.js.map +1 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs +1595 -0
- package/dist/_chunks/ListViewPage-xOVa04T_-lbfb219V.mjs.map +1 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs +33 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-IWfB3WVH.mjs.map +1 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js +33 -0
- package/dist/_chunks/ReviewWorkflowsColumn-FDxVKdto-m8hslkeI.js.map +1 -0
- package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs +190 -0
- package/dist/_chunks/constants-WjN6I3sL-7e3gpx4b.mjs.map +1 -0
- package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js +209 -0
- package/dist/_chunks/constants-WjN6I3sL-cDZPE6ED.js.map +1 -0
- package/dist/_chunks/{en-m608rMZx.js → en-TaNIVnDO.js} +2 -2
- package/dist/_chunks/en-TaNIVnDO.js.map +1 -0
- package/dist/_chunks/{en-CE3wEy_c.mjs → en-jvJ-d-Qq.mjs} +2 -2
- package/dist/_chunks/en-jvJ-d-Qq.mjs.map +1 -0
- package/dist/_chunks/{index-iNtwnT3f.mjs → index-53jX2hhF.mjs} +26 -34
- package/dist/_chunks/index-53jX2hhF.mjs.map +1 -0
- package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs +16421 -0
- package/dist/_chunks/index-5ZvCaCyY-06DLg5eU.mjs.map +1 -0
- package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js +16446 -0
- package/dist/_chunks/index-5ZvCaCyY-JgYo3Jws.js.map +1 -0
- package/dist/_chunks/{index-rryiT0-Z.mjs → index-A3oJlPcE.mjs} +111 -108
- package/dist/_chunks/index-A3oJlPcE.mjs.map +1 -0
- package/dist/_chunks/{index-XqdaO5WZ.js → index-MEUac_4V.js} +124 -122
- package/dist/_chunks/index-MEUac_4V.js.map +1 -0
- package/dist/_chunks/index-N-GcFWtg.mjs +261 -0
- package/dist/_chunks/index-N-GcFWtg.mjs.map +1 -0
- package/dist/_chunks/{index-O9AAUvyy.js → index-TJUxOCtJ.js} +26 -34
- package/dist/_chunks/index-TJUxOCtJ.js.map +1 -0
- package/dist/_chunks/{index-6Kdo3KXv.js → index-VgvlwVA7.js} +106 -147
- package/dist/_chunks/index-VgvlwVA7.js.map +1 -0
- package/dist/_chunks/{index-1uupZmu0.js → index-bRuKnVcH.js} +39 -32
- package/dist/_chunks/index-bRuKnVcH.js.map +1 -0
- package/dist/_chunks/{index-ethhTEkj.mjs → index-ee_14Ldw.mjs} +36 -29
- package/dist/_chunks/index-ee_14Ldw.mjs.map +1 -0
- package/dist/_chunks/index-mzJ2Vb5u.js +280 -0
- package/dist/_chunks/index-mzJ2Vb5u.js.map +1 -0
- package/dist/_chunks/{index-a9oKDd3C.mjs → index-vXywiVeM.mjs} +101 -142
- package/dist/_chunks/index-vXywiVeM.mjs.map +1 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs +39 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-Z54sMEPM.mjs.map +1 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js +57 -0
- package/dist/_chunks/useSyncRbac-Kt8Li0Yf-h8HqtZ6y.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/style.css +84 -0
- package/package.json +13 -13
- package/server/bootstrap/grant-config.js +9 -0
- package/server/bootstrap/index.js +2 -39
- package/server/content-types/user/index.js +0 -1
- package/server/controllers/auth.js +24 -53
- package/server/controllers/content-manager-user.js +24 -28
- package/server/controllers/role.js +1 -1
- package/server/controllers/user.js +5 -5
- package/server/middlewares/rateLimit.js +1 -1
- package/server/register.js +1 -1
- package/server/services/jwt.js +3 -3
- package/server/services/permission.js +3 -7
- package/server/services/providers-registry.js +15 -0
- package/server/services/providers.js +10 -5
- package/server/services/role.js +15 -13
- package/server/services/user.js +28 -14
- package/server/services/users-permissions.js +12 -10
- package/server/utils/sanitize/sanitizers.js +2 -2
- package/dist/_chunks/en-CE3wEy_c.mjs.map +0 -1
- package/dist/_chunks/en-m608rMZx.js.map +0 -1
- package/dist/_chunks/index-1uupZmu0.js.map +0 -1
- package/dist/_chunks/index-6Kdo3KXv.js.map +0 -1
- package/dist/_chunks/index-O9AAUvyy.js.map +0 -1
- package/dist/_chunks/index-Un-J-cxQ.js +0 -320
- package/dist/_chunks/index-Un-J-cxQ.js.map +0 -1
- package/dist/_chunks/index-X0yw_GgN.mjs +0 -301
- package/dist/_chunks/index-X0yw_GgN.mjs.map +0 -1
- package/dist/_chunks/index-XqdaO5WZ.js.map +0 -1
- package/dist/_chunks/index-a9oKDd3C.mjs.map +0 -1
- package/dist/_chunks/index-ethhTEkj.mjs.map +0 -1
- package/dist/_chunks/index-iNtwnT3f.mjs.map +0 -1
- package/dist/_chunks/index-rryiT0-Z.mjs.map +0 -1
|
@@ -17,8 +17,7 @@ import {
|
|
|
17
17
|
ModalLayout,
|
|
18
18
|
} from '@strapi/design-system';
|
|
19
19
|
import { Breadcrumbs, Crumb } from '@strapi/design-system/v2';
|
|
20
|
-
import { Form } from '
|
|
21
|
-
import { Formik } from 'formik';
|
|
20
|
+
import { Form, Formik } from 'formik';
|
|
22
21
|
import PropTypes from 'prop-types';
|
|
23
22
|
import { useIntl } from 'react-intl';
|
|
24
23
|
|
package/admin/src/index.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
// NOTE TO PLUGINS DEVELOPERS:
|
|
2
|
-
// If you modify this file by adding new options to the plugin entry point
|
|
3
|
-
// Here's the file: strapi/docs/3.0.0-beta.x/plugin-development/frontend-field-api.md
|
|
4
|
-
// Here's the file: strapi/docs/3.0.0-beta.x/guides/registering-a-field-in-admin.md
|
|
5
|
-
// Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated
|
|
6
|
-
// IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED
|
|
7
1
|
import { prefixPluginTranslations } from '@strapi/helper-plugin';
|
|
8
2
|
|
|
9
3
|
import pluginPkg from '../../package.json';
|
|
@@ -31,12 +25,8 @@ export default {
|
|
|
31
25
|
defaultMessage: 'Roles',
|
|
32
26
|
},
|
|
33
27
|
id: 'roles',
|
|
34
|
-
to:
|
|
35
|
-
|
|
36
|
-
const component = await import('./pages/Roles');
|
|
37
|
-
|
|
38
|
-
return component;
|
|
39
|
-
},
|
|
28
|
+
to: `users-permissions/roles`,
|
|
29
|
+
Component: () => import('./pages/Roles'),
|
|
40
30
|
permissions: PERMISSIONS.accessRoles,
|
|
41
31
|
},
|
|
42
32
|
{
|
|
@@ -45,12 +35,8 @@ export default {
|
|
|
45
35
|
defaultMessage: 'Providers',
|
|
46
36
|
},
|
|
47
37
|
id: 'providers',
|
|
48
|
-
to:
|
|
49
|
-
|
|
50
|
-
const component = await import('./pages/Providers');
|
|
51
|
-
|
|
52
|
-
return component;
|
|
53
|
-
},
|
|
38
|
+
to: `users-permissions/providers`,
|
|
39
|
+
Component: () => import('./pages/Providers'),
|
|
54
40
|
permissions: PERMISSIONS.readProviders,
|
|
55
41
|
},
|
|
56
42
|
{
|
|
@@ -59,12 +45,11 @@ export default {
|
|
|
59
45
|
defaultMessage: 'Email templates',
|
|
60
46
|
},
|
|
61
47
|
id: 'email-templates',
|
|
62
|
-
to:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
},
|
|
48
|
+
to: `users-permissions/email-templates`,
|
|
49
|
+
Component: () =>
|
|
50
|
+
import('./pages/EmailTemplates').then((mod) => ({
|
|
51
|
+
default: mod.ProtectedEmailTemplatesPage,
|
|
52
|
+
})),
|
|
68
53
|
permissions: PERMISSIONS.readEmailTemplates,
|
|
69
54
|
},
|
|
70
55
|
{
|
|
@@ -73,12 +58,11 @@ export default {
|
|
|
73
58
|
defaultMessage: 'Advanced Settings',
|
|
74
59
|
},
|
|
75
60
|
id: 'advanced-settings',
|
|
76
|
-
to:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
},
|
|
61
|
+
to: `users-permissions/advanced-settings`,
|
|
62
|
+
Component: () =>
|
|
63
|
+
import('./pages/AdvancedSettings').then((mod) => ({
|
|
64
|
+
default: mod.ProtectedAdvancedSettingsPage,
|
|
65
|
+
})),
|
|
82
66
|
permissions: PERMISSIONS.readAdvancedSettings,
|
|
83
67
|
},
|
|
84
68
|
]
|
|
@@ -9,26 +9,19 @@ import {
|
|
|
9
9
|
GridItem,
|
|
10
10
|
HeaderLayout,
|
|
11
11
|
Main,
|
|
12
|
-
Option,
|
|
13
|
-
Select,
|
|
14
12
|
Typography,
|
|
15
13
|
useNotifyAT,
|
|
16
14
|
} from '@strapi/design-system';
|
|
15
|
+
import { useFetchClient, useFocusWhenNavigate, useRBAC } from '@strapi/helper-plugin';
|
|
16
|
+
import { Check } from '@strapi/icons';
|
|
17
17
|
import {
|
|
18
|
-
CheckPagePermissions,
|
|
19
|
-
Form,
|
|
20
|
-
GenericInput,
|
|
21
|
-
LoadingIndicatorPage,
|
|
22
|
-
SettingsPageTitle,
|
|
23
18
|
useAPIErrorHandler,
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
Page,
|
|
20
|
+
Form,
|
|
21
|
+
InputRenderer,
|
|
26
22
|
useNotification,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} from '@strapi/helper-plugin';
|
|
30
|
-
import { Check } from '@strapi/icons';
|
|
31
|
-
import { Formik } from 'formik';
|
|
23
|
+
} from '@strapi/strapi/admin';
|
|
24
|
+
import { Helmet } from 'react-helmet';
|
|
32
25
|
import { useIntl } from 'react-intl';
|
|
33
26
|
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
|
34
27
|
|
|
@@ -39,15 +32,14 @@ import layout from './utils/layout';
|
|
|
39
32
|
import schema from './utils/schema';
|
|
40
33
|
|
|
41
34
|
const ProtectedAdvancedSettingsPage = () => (
|
|
42
|
-
<
|
|
35
|
+
<Page.Protect permissions={PERMISSIONS.readAdvancedSettings}>
|
|
43
36
|
<AdvancedSettingsPage />
|
|
44
|
-
</
|
|
37
|
+
</Page.Protect>
|
|
45
38
|
);
|
|
46
39
|
|
|
47
40
|
const AdvancedSettingsPage = () => {
|
|
48
41
|
const { formatMessage } = useIntl();
|
|
49
|
-
const toggleNotification = useNotification();
|
|
50
|
-
const { lockApp, unlockApp } = useOverlayBlocker();
|
|
42
|
+
const { toggleNotification } = useNotification();
|
|
51
43
|
const { notifyStatus } = useNotifyAT();
|
|
52
44
|
const queryClient = useQueryClient();
|
|
53
45
|
const { get, put } = useFetchClient();
|
|
@@ -78,8 +70,11 @@ const AdvancedSettingsPage = () => {
|
|
|
78
70
|
},
|
|
79
71
|
onError() {
|
|
80
72
|
toggleNotification({
|
|
81
|
-
type: '
|
|
82
|
-
message: {
|
|
73
|
+
type: 'danger',
|
|
74
|
+
message: formatMessage({
|
|
75
|
+
id: getTrad('notification.error'),
|
|
76
|
+
defaultMessage: 'An error occured',
|
|
77
|
+
}),
|
|
83
78
|
});
|
|
84
79
|
},
|
|
85
80
|
}
|
|
@@ -93,18 +88,17 @@ const AdvancedSettingsPage = () => {
|
|
|
93
88
|
|
|
94
89
|
toggleNotification({
|
|
95
90
|
type: 'success',
|
|
96
|
-
message: {
|
|
91
|
+
message: formatMessage({
|
|
92
|
+
id: getTrad('notification.success.saved'),
|
|
93
|
+
defaultMessage: 'Saved',
|
|
94
|
+
}),
|
|
97
95
|
});
|
|
98
|
-
|
|
99
|
-
unlockApp();
|
|
100
96
|
},
|
|
101
97
|
onError(error) {
|
|
102
98
|
toggleNotification({
|
|
103
|
-
type: '
|
|
99
|
+
type: 'danger',
|
|
104
100
|
message: formatAPIError(error),
|
|
105
101
|
});
|
|
106
|
-
|
|
107
|
-
unlockApp();
|
|
108
102
|
},
|
|
109
103
|
refetchActive: true,
|
|
110
104
|
});
|
|
@@ -112,8 +106,6 @@ const AdvancedSettingsPage = () => {
|
|
|
112
106
|
const { isLoading: isSubmittingForm } = submitMutation;
|
|
113
107
|
|
|
114
108
|
const handleSubmit = async (body) => {
|
|
115
|
-
lockApp();
|
|
116
|
-
|
|
117
109
|
submitMutation.mutate({
|
|
118
110
|
...body,
|
|
119
111
|
email_confirmation_redirection: body.email_confirmation
|
|
@@ -123,45 +115,26 @@ const AdvancedSettingsPage = () => {
|
|
|
123
115
|
};
|
|
124
116
|
|
|
125
117
|
if (isLoading) {
|
|
126
|
-
return
|
|
127
|
-
<Main aria-busy="true">
|
|
128
|
-
<SettingsPageTitle
|
|
129
|
-
name={formatMessage({
|
|
130
|
-
id: getTrad('HeaderNav.link.advancedSettings'),
|
|
131
|
-
defaultMessage: 'Advanced Settings',
|
|
132
|
-
})}
|
|
133
|
-
/>
|
|
134
|
-
<HeaderLayout
|
|
135
|
-
title={formatMessage({
|
|
136
|
-
id: getTrad('HeaderNav.link.advancedSettings'),
|
|
137
|
-
defaultMessage: 'Advanced Settings',
|
|
138
|
-
})}
|
|
139
|
-
/>
|
|
140
|
-
<ContentLayout>
|
|
141
|
-
<LoadingIndicatorPage />
|
|
142
|
-
</ContentLayout>
|
|
143
|
-
</Main>
|
|
144
|
-
);
|
|
118
|
+
return <Page.Loading />;
|
|
145
119
|
}
|
|
146
120
|
|
|
147
121
|
return (
|
|
148
122
|
<Main aria-busy={isSubmittingForm}>
|
|
149
|
-
<
|
|
150
|
-
|
|
151
|
-
id:
|
|
152
|
-
|
|
153
|
-
|
|
123
|
+
<Helmet
|
|
124
|
+
title={formatMessage(
|
|
125
|
+
{ id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
|
|
126
|
+
{
|
|
127
|
+
name: formatMessage({
|
|
128
|
+
id: getTrad('HeaderNav.link.advancedSettings'),
|
|
129
|
+
defaultMessage: 'Advanced Settings',
|
|
130
|
+
}),
|
|
131
|
+
}
|
|
132
|
+
)}
|
|
154
133
|
/>
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
initialValues={data.settings}
|
|
158
|
-
validateOnChange={false}
|
|
159
|
-
validationSchema={schema}
|
|
160
|
-
enableReinitialize
|
|
161
|
-
>
|
|
162
|
-
{({ errors, values, handleChange, isSubmitting, dirty }) => {
|
|
134
|
+
<Form onSubmit={handleSubmit} initialValues={data.settings} validationSchema={schema}>
|
|
135
|
+
{({ values, isSubmitting, modified }) => {
|
|
163
136
|
return (
|
|
164
|
-
|
|
137
|
+
<>
|
|
165
138
|
<HeaderLayout
|
|
166
139
|
title={formatMessage({
|
|
167
140
|
id: getTrad('HeaderNav.link.advancedSettings'),
|
|
@@ -171,7 +144,7 @@ const AdvancedSettingsPage = () => {
|
|
|
171
144
|
<Button
|
|
172
145
|
loading={isSubmitting}
|
|
173
146
|
type="submit"
|
|
174
|
-
disabled={
|
|
147
|
+
disabled={!modified || !canUpdate}
|
|
175
148
|
startIcon={<Check />}
|
|
176
149
|
size="S"
|
|
177
150
|
>
|
|
@@ -197,63 +170,52 @@ const AdvancedSettingsPage = () => {
|
|
|
197
170
|
})}
|
|
198
171
|
</Typography>
|
|
199
172
|
<Grid gap={6}>
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
label
|
|
173
|
+
{[
|
|
174
|
+
{
|
|
175
|
+
label: {
|
|
203
176
|
id: getTrad('EditForm.inputSelect.label.role'),
|
|
204
177
|
defaultMessage: 'Default role for authenticated users',
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
hint={formatMessage({
|
|
178
|
+
},
|
|
179
|
+
hint: {
|
|
208
180
|
id: getTrad('EditForm.inputSelect.description.role'),
|
|
209
181
|
defaultMessage:
|
|
210
182
|
'It will attach the new authenticated user to the selected role.',
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
error={errors[input.name]}
|
|
238
|
-
disabled={
|
|
239
|
-
input.name === 'email_confirmation_redirection' &&
|
|
240
|
-
values.email_confirmation === false
|
|
241
|
-
}
|
|
242
|
-
onChange={handleChange}
|
|
243
|
-
/>
|
|
244
|
-
</GridItem>
|
|
245
|
-
);
|
|
246
|
-
})}
|
|
183
|
+
},
|
|
184
|
+
options: data.roles.map((role) => ({
|
|
185
|
+
label: role.name,
|
|
186
|
+
value: role.type,
|
|
187
|
+
})),
|
|
188
|
+
name: 'default_role',
|
|
189
|
+
size: 6,
|
|
190
|
+
type: 'enumeration',
|
|
191
|
+
},
|
|
192
|
+
...layout,
|
|
193
|
+
].map(({ size, ...field }) => (
|
|
194
|
+
<GridItem key={field.name} col={size}>
|
|
195
|
+
<InputRenderer
|
|
196
|
+
{...field}
|
|
197
|
+
disabled={
|
|
198
|
+
field.name === 'email_confirmation_redirection' &&
|
|
199
|
+
values.email_confirmation === false
|
|
200
|
+
}
|
|
201
|
+
label={formatMessage(field.label)}
|
|
202
|
+
hint={field.hint ? formatMessage(field.hint) : undefined}
|
|
203
|
+
placeholder={
|
|
204
|
+
field.placeholder ? formatMessage(field.placeholder) : undefined
|
|
205
|
+
}
|
|
206
|
+
/>
|
|
207
|
+
</GridItem>
|
|
208
|
+
))}
|
|
247
209
|
</Grid>
|
|
248
210
|
</Flex>
|
|
249
211
|
</Box>
|
|
250
212
|
</ContentLayout>
|
|
251
|
-
|
|
213
|
+
</>
|
|
252
214
|
);
|
|
253
215
|
}}
|
|
254
|
-
</
|
|
216
|
+
</Form>
|
|
255
217
|
</Main>
|
|
256
218
|
);
|
|
257
219
|
};
|
|
258
220
|
|
|
259
|
-
export
|
|
221
|
+
export { ProtectedAdvancedSettingsPage, AdvancedSettingsPage };
|
|
@@ -2,45 +2,39 @@ import { getTrad } from '../../../utils';
|
|
|
2
2
|
|
|
3
3
|
const layout = [
|
|
4
4
|
{
|
|
5
|
-
|
|
5
|
+
label: {
|
|
6
6
|
id: getTrad('EditForm.inputToggle.label.email'),
|
|
7
7
|
defaultMessage: 'One account per email address',
|
|
8
8
|
},
|
|
9
|
-
|
|
9
|
+
hint: {
|
|
10
10
|
id: getTrad('EditForm.inputToggle.description.email'),
|
|
11
11
|
defaultMessage:
|
|
12
12
|
'Disallow the user to create multiple accounts using the same email address with different authentication providers.',
|
|
13
13
|
},
|
|
14
14
|
name: 'unique_email',
|
|
15
|
-
type: '
|
|
16
|
-
size:
|
|
17
|
-
col: 12,
|
|
18
|
-
xs: 12,
|
|
19
|
-
},
|
|
15
|
+
type: 'boolean',
|
|
16
|
+
size: 12,
|
|
20
17
|
},
|
|
21
18
|
{
|
|
22
|
-
|
|
19
|
+
label: {
|
|
23
20
|
id: getTrad('EditForm.inputToggle.label.sign-up'),
|
|
24
21
|
defaultMessage: 'Enable sign-ups',
|
|
25
22
|
},
|
|
26
|
-
|
|
23
|
+
hint: {
|
|
27
24
|
id: getTrad('EditForm.inputToggle.description.sign-up'),
|
|
28
25
|
defaultMessage:
|
|
29
26
|
'When disabled (OFF), the registration process is forbidden. No one can subscribe anymore no matter the used provider.',
|
|
30
27
|
},
|
|
31
28
|
name: 'allow_register',
|
|
32
|
-
type: '
|
|
33
|
-
size:
|
|
34
|
-
col: 12,
|
|
35
|
-
xs: 12,
|
|
36
|
-
},
|
|
29
|
+
type: 'boolean',
|
|
30
|
+
size: 12,
|
|
37
31
|
},
|
|
38
32
|
{
|
|
39
|
-
|
|
33
|
+
label: {
|
|
40
34
|
id: getTrad('EditForm.inputToggle.label.email-reset-password'),
|
|
41
35
|
defaultMessage: 'Reset password page',
|
|
42
36
|
},
|
|
43
|
-
|
|
37
|
+
hint: {
|
|
44
38
|
id: getTrad('EditForm.inputToggle.description.email-reset-password'),
|
|
45
39
|
defaultMessage: "URL of your application's reset password page.",
|
|
46
40
|
},
|
|
@@ -49,34 +43,28 @@ const layout = [
|
|
|
49
43
|
defaultMessage: 'ex: https://youtfrontend.com/reset-password',
|
|
50
44
|
},
|
|
51
45
|
name: 'email_reset_password',
|
|
52
|
-
type: '
|
|
53
|
-
size:
|
|
54
|
-
col: 6,
|
|
55
|
-
xs: 12,
|
|
56
|
-
},
|
|
46
|
+
type: 'string',
|
|
47
|
+
size: 12,
|
|
57
48
|
},
|
|
58
49
|
{
|
|
59
|
-
|
|
50
|
+
label: {
|
|
60
51
|
id: getTrad('EditForm.inputToggle.label.email-confirmation'),
|
|
61
52
|
defaultMessage: 'Enable email confirmation',
|
|
62
53
|
},
|
|
63
|
-
|
|
54
|
+
hint: {
|
|
64
55
|
id: getTrad('EditForm.inputToggle.description.email-confirmation'),
|
|
65
56
|
defaultMessage: 'When enabled (ON), new registered users receive a confirmation email.',
|
|
66
57
|
},
|
|
67
58
|
name: 'email_confirmation',
|
|
68
|
-
type: '
|
|
69
|
-
size:
|
|
70
|
-
col: 12,
|
|
71
|
-
xs: 12,
|
|
72
|
-
},
|
|
59
|
+
type: 'boolean',
|
|
60
|
+
size: 12,
|
|
73
61
|
},
|
|
74
62
|
{
|
|
75
|
-
|
|
63
|
+
label: {
|
|
76
64
|
id: getTrad('EditForm.inputToggle.label.email-confirmation-redirection'),
|
|
77
65
|
defaultMessage: 'Redirection url',
|
|
78
66
|
},
|
|
79
|
-
|
|
67
|
+
hint: {
|
|
80
68
|
id: getTrad('EditForm.inputToggle.description.email-confirmation-redirection'),
|
|
81
69
|
defaultMessage: 'After you confirmed your email, choose where you will be redirected.',
|
|
82
70
|
},
|
|
@@ -85,11 +73,8 @@ const layout = [
|
|
|
85
73
|
defaultMessage: 'ex: https://youtfrontend.com/email-confirmation',
|
|
86
74
|
},
|
|
87
75
|
name: 'email_confirmation_redirection',
|
|
88
|
-
type: '
|
|
89
|
-
size:
|
|
90
|
-
col: 6,
|
|
91
|
-
xs: 12,
|
|
92
|
-
},
|
|
76
|
+
type: 'string',
|
|
77
|
+
size: 12,
|
|
93
78
|
},
|
|
94
79
|
];
|
|
95
80
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { translatedErrors } from '@strapi/
|
|
1
|
+
import { translatedErrors } from '@strapi/strapi/admin';
|
|
2
2
|
import * as yup from 'yup';
|
|
3
3
|
|
|
4
4
|
// eslint-disable-next-line prefer-regex-literals
|
|
@@ -12,7 +12,10 @@ const schema = yup.object().shape({
|
|
|
12
12
|
}),
|
|
13
13
|
email_reset_password: yup
|
|
14
14
|
.string(translatedErrors.string)
|
|
15
|
-
.matches(URL_REGEX,
|
|
15
|
+
.matches(URL_REGEX, {
|
|
16
|
+
id: translatedErrors.regex.id,
|
|
17
|
+
defaultMessage: 'This is not a valid URL',
|
|
18
|
+
})
|
|
16
19
|
.nullable(),
|
|
17
20
|
});
|
|
18
21
|
|
|
@@ -8,11 +8,9 @@ import {
|
|
|
8
8
|
ModalFooter,
|
|
9
9
|
ModalHeader,
|
|
10
10
|
ModalLayout,
|
|
11
|
-
Textarea,
|
|
12
11
|
} from '@strapi/design-system';
|
|
13
12
|
import { Breadcrumbs, Crumb } from '@strapi/design-system/v2';
|
|
14
|
-
import { Form,
|
|
15
|
-
import { Formik } from 'formik';
|
|
13
|
+
import { Form, InputRenderer } from '@strapi/strapi/admin';
|
|
16
14
|
import PropTypes from 'prop-types';
|
|
17
15
|
import { useIntl } from 'react-intl';
|
|
18
16
|
|
|
@@ -51,88 +49,63 @@ const EmailForm = ({ template, onToggle, onSubmit }) => {
|
|
|
51
49
|
</Crumb>
|
|
52
50
|
</Breadcrumbs>
|
|
53
51
|
</ModalHeader>
|
|
54
|
-
<
|
|
55
|
-
|
|
56
|
-
initialValues={template}
|
|
57
|
-
validateOnChange={false}
|
|
58
|
-
validationSchema={schema}
|
|
59
|
-
enableReinitialize
|
|
60
|
-
>
|
|
61
|
-
{({ errors, values, handleChange, isSubmitting }) => {
|
|
52
|
+
<Form onSubmit={onSubmit} initialValues={template} validationSchema={schema}>
|
|
53
|
+
{({ isSubmitting }) => {
|
|
62
54
|
return (
|
|
63
|
-
|
|
55
|
+
<>
|
|
64
56
|
<ModalBody>
|
|
65
57
|
<Grid gap={5}>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
58
|
+
{[
|
|
59
|
+
{
|
|
60
|
+
label: formatMessage({
|
|
69
61
|
id: getTrad('PopUpForm.Email.options.from.name.label'),
|
|
70
62
|
defaultMessage: 'Shipper name',
|
|
71
|
-
}
|
|
72
|
-
name
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
</GridItem>
|
|
79
|
-
<GridItem col={6} s={12}>
|
|
80
|
-
<GenericInput
|
|
81
|
-
intlLabel={{
|
|
63
|
+
}),
|
|
64
|
+
name: 'options.from.name',
|
|
65
|
+
size: 6,
|
|
66
|
+
type: 'string',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: formatMessage({
|
|
82
70
|
id: getTrad('PopUpForm.Email.options.from.email.label'),
|
|
83
71
|
defaultMessage: 'Shipper email',
|
|
84
|
-
}
|
|
85
|
-
name
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
</GridItem>
|
|
92
|
-
<GridItem col={6} s={12}>
|
|
93
|
-
<GenericInput
|
|
94
|
-
intlLabel={{
|
|
72
|
+
}),
|
|
73
|
+
name: 'options.from.email',
|
|
74
|
+
size: 6,
|
|
75
|
+
type: 'string',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
label: formatMessage({
|
|
95
79
|
id: getTrad('PopUpForm.Email.options.response_email.label'),
|
|
96
80
|
defaultMessage: 'Response email',
|
|
97
|
-
}
|
|
98
|
-
name
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
</GridItem>
|
|
105
|
-
<GridItem col={6} s={12}>
|
|
106
|
-
<GenericInput
|
|
107
|
-
intlLabel={{
|
|
81
|
+
}),
|
|
82
|
+
name: 'options.response_email',
|
|
83
|
+
size: 6,
|
|
84
|
+
type: 'string',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
label: formatMessage({
|
|
108
88
|
id: getTrad('PopUpForm.Email.options.object.label'),
|
|
109
89
|
defaultMessage: 'Subject',
|
|
110
|
-
}
|
|
111
|
-
name
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
</GridItem>
|
|
118
|
-
<GridItem col={12} s={12}>
|
|
119
|
-
<Textarea
|
|
120
|
-
label={formatMessage({
|
|
90
|
+
}),
|
|
91
|
+
name: 'options.object',
|
|
92
|
+
size: 6,
|
|
93
|
+
type: 'string',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
label: formatMessage({
|
|
121
97
|
id: getTrad('PopUpForm.Email.options.message.label'),
|
|
122
98
|
defaultMessage: 'Message',
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
/>
|
|
135
|
-
</GridItem>
|
|
99
|
+
}),
|
|
100
|
+
name: 'options.message',
|
|
101
|
+
size: 12,
|
|
102
|
+
type: 'text',
|
|
103
|
+
},
|
|
104
|
+
].map(({ size, ...field }) => (
|
|
105
|
+
<GridItem key={field.name} col={size}>
|
|
106
|
+
<InputRenderer {...field} />
|
|
107
|
+
</GridItem>
|
|
108
|
+
))}
|
|
136
109
|
</Grid>
|
|
137
110
|
</ModalBody>
|
|
138
111
|
<ModalFooter
|
|
@@ -147,10 +120,10 @@ const EmailForm = ({ template, onToggle, onSubmit }) => {
|
|
|
147
120
|
</Button>
|
|
148
121
|
}
|
|
149
122
|
/>
|
|
150
|
-
|
|
123
|
+
</>
|
|
151
124
|
);
|
|
152
125
|
}}
|
|
153
|
-
</
|
|
126
|
+
</Form>
|
|
154
127
|
</ModalLayout>
|
|
155
128
|
);
|
|
156
129
|
};
|