@strapi/plugin-users-permissions 0.0.0-next.c443fb2cf1a0b330fbf8f4bf6b967c3002ccbd92 → 0.0.0-next.d1dda661d262d4773c59ee693c38542d9b0dc54c
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/BoundRoute/index.js +5 -3
- package/admin/src/components/FormModal/Input/index.js +3 -2
- package/admin/src/components/FormModal/index.js +13 -10
- package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.js +1 -1
- package/admin/src/components/Permissions/PermissionRow/SubCategory.js +26 -5
- package/admin/src/components/Permissions/PermissionRow/index.js +4 -2
- package/admin/src/components/Permissions/index.js +5 -2
- package/admin/src/components/Policies/index.js +3 -2
- package/admin/src/components/UsersPermissions/index.js +8 -5
- package/admin/src/{permissions.js → constants.js} +1 -3
- package/admin/src/contexts/UsersPermissionsContext/index.js +1 -0
- package/admin/src/hooks/index.js +1 -1
- package/admin/src/hooks/useFetchRole/index.js +6 -3
- package/admin/src/hooks/useForm/index.js +4 -1
- package/admin/src/hooks/usePlugins.js +71 -0
- package/admin/src/hooks/useRolesList/index.js +4 -1
- package/admin/src/index.js +7 -5
- package/admin/src/pages/AdvancedSettings/index.js +24 -24
- package/admin/src/pages/AdvancedSettings/utils/api.js +1 -0
- package/admin/src/pages/AdvancedSettings/utils/schema.js +1 -1
- package/admin/src/pages/EmailTemplates/components/EmailForm.js +13 -12
- package/admin/src/pages/EmailTemplates/components/EmailTable.js +9 -7
- package/admin/src/pages/EmailTemplates/index.js +15 -12
- package/admin/src/pages/EmailTemplates/utils/api.js +1 -0
- package/admin/src/pages/EmailTemplates/utils/schema.js +1 -1
- package/admin/src/pages/Providers/index.js +31 -28
- package/admin/src/pages/Providers/utils/api.js +1 -0
- package/admin/src/pages/Providers/utils/forms.js +1 -1
- package/admin/src/pages/Roles/{CreatePage/index.js → CreatePage.js} +25 -22
- package/admin/src/pages/Roles/{EditPage/index.js → EditPage.js} +22 -19
- package/admin/src/pages/Roles/ListPage/components/TableBody.js +4 -3
- package/admin/src/pages/Roles/ListPage/index.js +26 -24
- package/admin/src/pages/Roles/ListPage/utils/api.js +2 -1
- package/admin/src/pages/Roles/{ProtectedCreatePage/index.js → ProtectedCreatePage.js} +6 -3
- package/admin/src/pages/Roles/{ProtectedEditPage/index.js → ProtectedEditPage.js} +6 -3
- package/admin/src/pages/Roles/{ProtectedListPage/index.js → ProtectedListPage.js} +5 -3
- package/admin/src/pages/Roles/{CreatePage/utils/schema.js → constants.js} +2 -4
- package/admin/src/pages/Roles/index.js +9 -6
- package/admin/src/utils/index.js +1 -1
- package/jest.config.front.js +1 -0
- package/package.json +15 -17
- package/server/strategies/users-permissions.js +1 -8
- package/admin/src/hooks/usePlugins/index.js +0 -67
- package/admin/src/hooks/usePlugins/init.js +0 -5
- package/admin/src/hooks/usePlugins/reducer.js +0 -34
- package/admin/src/pages/Roles/EditPage/utils/schema.js +0 -9
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
2
|
+
|
|
3
|
+
import { Box, Flex, Typography } from '@strapi/design-system';
|
|
4
4
|
import map from 'lodash/map';
|
|
5
5
|
import tail from 'lodash/tail';
|
|
6
|
-
import { useIntl } from 'react-intl';
|
|
7
6
|
import PropTypes from 'prop-types';
|
|
7
|
+
import { useIntl } from 'react-intl';
|
|
8
|
+
import styled from 'styled-components';
|
|
9
|
+
|
|
8
10
|
import getMethodColor from './getMethodColor';
|
|
9
11
|
|
|
10
12
|
const MethodBox = styled(Box)`
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import React from 'react';
|
|
8
|
-
|
|
9
|
-
import {
|
|
8
|
+
|
|
9
|
+
import { TextInput, ToggleInput } from '@strapi/design-system';
|
|
10
10
|
import PropTypes from 'prop-types';
|
|
11
|
+
import { useIntl } from 'react-intl';
|
|
11
12
|
|
|
12
13
|
const Input = ({
|
|
13
14
|
description,
|
|
@@ -5,22 +5,23 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import React from 'react';
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
import {
|
|
10
10
|
Button,
|
|
11
11
|
Flex,
|
|
12
|
-
Breadcrumbs,
|
|
13
|
-
Crumb,
|
|
14
12
|
Grid,
|
|
15
13
|
GridItem,
|
|
16
|
-
ModalLayout,
|
|
17
|
-
ModalHeader,
|
|
18
|
-
ModalFooter,
|
|
19
14
|
ModalBody,
|
|
15
|
+
ModalFooter,
|
|
16
|
+
ModalHeader,
|
|
17
|
+
ModalLayout,
|
|
20
18
|
} from '@strapi/design-system';
|
|
21
|
-
import
|
|
22
|
-
import { Formik } from 'formik';
|
|
19
|
+
import { Breadcrumbs, Crumb } from '@strapi/design-system/v2';
|
|
23
20
|
import { Form } from '@strapi/helper-plugin';
|
|
21
|
+
import { Formik } from 'formik';
|
|
22
|
+
import PropTypes from 'prop-types';
|
|
23
|
+
import { useIntl } from 'react-intl';
|
|
24
|
+
|
|
24
25
|
import Input from './Input';
|
|
25
26
|
|
|
26
27
|
const FormModal = ({
|
|
@@ -43,8 +44,10 @@ const FormModal = ({
|
|
|
43
44
|
<ModalLayout onClose={onToggle} labelledBy="title">
|
|
44
45
|
<ModalHeader>
|
|
45
46
|
<Breadcrumbs label={headerBreadcrumbs.join(', ')}>
|
|
46
|
-
{headerBreadcrumbs.map((crumb) => (
|
|
47
|
-
<Crumb
|
|
47
|
+
{headerBreadcrumbs.map((crumb, index, arr) => (
|
|
48
|
+
<Crumb isCurrent={index === arr.length - 1} key={crumb}>
|
|
49
|
+
{crumb}
|
|
50
|
+
</Crumb>
|
|
48
51
|
))}
|
|
49
52
|
</Breadcrumbs>
|
|
50
53
|
</ModalHeader>
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
import React, { useCallback, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
Box,
|
|
5
|
+
Checkbox,
|
|
6
|
+
Flex,
|
|
7
|
+
Typography,
|
|
8
|
+
Grid,
|
|
9
|
+
GridItem,
|
|
10
|
+
VisuallyHidden,
|
|
11
|
+
} from '@strapi/design-system';
|
|
12
|
+
import { Cog as CogIcon } from '@strapi/icons';
|
|
2
13
|
import get from 'lodash/get';
|
|
3
|
-
import styled from 'styled-components';
|
|
4
14
|
import PropTypes from 'prop-types';
|
|
5
|
-
import { Box, Checkbox, Flex, Typography, Grid, GridItem } from '@strapi/design-system';
|
|
6
|
-
import { Cog as CogIcon } from '@strapi/icons';
|
|
7
15
|
import { useIntl } from 'react-intl';
|
|
8
|
-
import
|
|
16
|
+
import styled from 'styled-components';
|
|
17
|
+
|
|
9
18
|
import { useUsersPermissions } from '../../../contexts/UsersPermissionsContext';
|
|
10
19
|
|
|
20
|
+
import CheckboxWrapper from './CheckboxWrapper';
|
|
21
|
+
|
|
11
22
|
const Border = styled.div`
|
|
12
23
|
flex: 1;
|
|
13
24
|
align-self: center;
|
|
@@ -87,10 +98,20 @@ const SubCategory = ({ subCategory }) => {
|
|
|
87
98
|
</Checkbox>
|
|
88
99
|
<button
|
|
89
100
|
type="button"
|
|
90
|
-
data-testid="action-cog"
|
|
91
101
|
onClick={() => onSelectedAction(action.name)}
|
|
92
102
|
style={{ display: 'inline-flex', alignItems: 'center' }}
|
|
93
103
|
>
|
|
104
|
+
<VisuallyHidden as="span">
|
|
105
|
+
{formatMessage(
|
|
106
|
+
{
|
|
107
|
+
id: 'app.utils.show-bound-route',
|
|
108
|
+
defaultMessage: 'Show bound route for {route}',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
route: action.name,
|
|
112
|
+
}
|
|
113
|
+
)}
|
|
114
|
+
</VisuallyHidden>
|
|
94
115
|
<CogIcon />
|
|
95
116
|
</button>
|
|
96
117
|
</CheckboxWrapper>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
|
-
|
|
3
|
-
import sortBy from 'lodash/sortBy';
|
|
2
|
+
|
|
4
3
|
import { Box } from '@strapi/design-system';
|
|
4
|
+
import sortBy from 'lodash/sortBy';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
|
|
5
7
|
import SubCategory from './SubCategory';
|
|
6
8
|
|
|
7
9
|
const PermissionRow = ({ name, permissions }) => {
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import React, { useReducer } from 'react';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import { Accordion, AccordionContent, AccordionToggle, Box, Flex } from '@strapi/design-system';
|
|
3
4
|
import { useIntl } from 'react-intl';
|
|
5
|
+
|
|
4
6
|
import { useUsersPermissions } from '../../contexts/UsersPermissionsContext';
|
|
5
7
|
import formatPluginName from '../../utils/formatPluginName';
|
|
6
|
-
|
|
8
|
+
|
|
7
9
|
import init from './init';
|
|
10
|
+
import PermissionRow from './PermissionRow';
|
|
8
11
|
import { initialState, reducer } from './reducer';
|
|
9
12
|
|
|
10
13
|
const Permissions = () => {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
2
|
+
|
|
3
|
+
import { Flex, GridItem, Typography } from '@strapi/design-system';
|
|
4
4
|
import get from 'lodash/get';
|
|
5
5
|
import isEmpty from 'lodash/isEmpty';
|
|
6
6
|
import without from 'lodash/without';
|
|
7
|
+
import { useIntl } from 'react-intl';
|
|
7
8
|
|
|
8
9
|
import { useUsersPermissions } from '../../contexts/UsersPermissionsContext';
|
|
9
10
|
import BoundRoute from '../BoundRoute';
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { forwardRef, memo, useImperativeHandle, useReducer } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Flex, Grid, GridItem, Typography } from '@strapi/design-system';
|
|
2
4
|
import PropTypes from 'prop-types';
|
|
3
|
-
import { Typography, Flex, Grid, GridItem } from '@strapi/design-system';
|
|
4
5
|
import { useIntl } from 'react-intl';
|
|
6
|
+
|
|
7
|
+
import { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext';
|
|
5
8
|
import getTrad from '../../utils/getTrad';
|
|
6
|
-
import Policies from '../Policies';
|
|
7
9
|
import Permissions from '../Permissions';
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
+
import Policies from '../Policies';
|
|
11
|
+
|
|
10
12
|
import init from './init';
|
|
13
|
+
import reducer, { initialState } from './reducer';
|
|
11
14
|
|
|
12
15
|
const UsersPermissions = forwardRef(({ permissions, routes }, ref) => {
|
|
13
16
|
const { formatMessage } = useIntl();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
export const PERMISSIONS = {
|
|
2
2
|
// Roles
|
|
3
3
|
accessRoles: [
|
|
4
4
|
{ action: 'plugin::users-permissions.roles.create', subject: null },
|
|
@@ -27,5 +27,3 @@ const pluginPermissions = {
|
|
|
27
27
|
readProviders: [{ action: 'plugin::users-permissions.providers.read', subject: null }],
|
|
28
28
|
updateProviders: [{ action: 'plugin::users-permissions.providers.update', subject: null }],
|
|
29
29
|
};
|
|
30
|
-
|
|
31
|
-
export default pluginPermissions;
|
package/admin/src/hooks/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// eslint-disable-next-line import/prefer-default-export
|
|
2
2
|
export { default as useForm } from './useForm';
|
|
3
3
|
export { default as useRolesList } from './useRolesList';
|
|
4
|
-
export
|
|
4
|
+
export * from './usePlugins';
|
|
5
5
|
export { default as useFetchRole } from './useFetchRole';
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { useCallback,
|
|
2
|
-
|
|
3
|
-
import
|
|
1
|
+
import { useCallback, useEffect, useReducer, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
import { useFetchClient, useNotification } from '@strapi/helper-plugin';
|
|
4
|
+
|
|
4
5
|
import pluginId from '../../pluginId';
|
|
5
6
|
|
|
7
|
+
import reducer, { initialState } from './reducer';
|
|
8
|
+
|
|
6
9
|
const useFetchRole = (id) => {
|
|
7
10
|
const [state, dispatch] = useReducer(reducer, initialState);
|
|
8
11
|
const toggleNotification = useNotification();
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { useCallback, useEffect, useReducer, useRef } from 'react';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import { useFetchClient, useNotification, useRBAC } from '@strapi/helper-plugin';
|
|
4
|
+
|
|
3
5
|
import { getRequestURL } from '../../utils';
|
|
6
|
+
|
|
4
7
|
import reducer, { initialState } from './reducer';
|
|
5
8
|
|
|
6
9
|
const useUserForm = (endPoint, permissions) => {
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
import { useNotification, useFetchClient, useAPIErrorHandler } from '@strapi/helper-plugin';
|
|
4
|
+
import { useQueries } from 'react-query';
|
|
5
|
+
|
|
6
|
+
import pluginId from '../pluginId';
|
|
7
|
+
import { cleanPermissions, getTrad } from '../utils';
|
|
8
|
+
|
|
9
|
+
export const usePlugins = () => {
|
|
10
|
+
const toggleNotification = useNotification();
|
|
11
|
+
const { get } = useFetchClient();
|
|
12
|
+
const { formatAPIError } = useAPIErrorHandler(getTrad);
|
|
13
|
+
|
|
14
|
+
const [
|
|
15
|
+
{
|
|
16
|
+
data: permissions,
|
|
17
|
+
isLoading: isLoadingPermissions,
|
|
18
|
+
error: permissionsError,
|
|
19
|
+
refetch: refetchPermissions,
|
|
20
|
+
},
|
|
21
|
+
{ data: routes, isLoading: isLoadingRoutes, error: routesError, refetch: refetchRoutes },
|
|
22
|
+
] = useQueries([
|
|
23
|
+
{
|
|
24
|
+
queryKey: [pluginId, 'permissions'],
|
|
25
|
+
async queryFn() {
|
|
26
|
+
const res = await get(`/${pluginId}/permissions`);
|
|
27
|
+
|
|
28
|
+
return res.data.permissions;
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
queryKey: [pluginId, 'routes'],
|
|
33
|
+
async queryFn() {
|
|
34
|
+
const res = await get(`/${pluginId}/routes`);
|
|
35
|
+
|
|
36
|
+
return res.data.routes;
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
]);
|
|
40
|
+
|
|
41
|
+
const refetchQueries = async () => {
|
|
42
|
+
await Promise.all([refetchPermissions(), refetchRoutes()]);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (permissionsError) {
|
|
47
|
+
toggleNotification({
|
|
48
|
+
type: 'warning',
|
|
49
|
+
message: formatAPIError(permissionsError),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}, [toggleNotification, permissionsError, formatAPIError]);
|
|
53
|
+
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (routesError) {
|
|
56
|
+
toggleNotification({
|
|
57
|
+
type: 'warning',
|
|
58
|
+
message: formatAPIError(routesError),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}, [toggleNotification, routesError, formatAPIError]);
|
|
62
|
+
|
|
63
|
+
const isLoading = isLoadingPermissions || isLoadingRoutes;
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
permissions: permissions ? cleanPermissions(permissions) : {},
|
|
67
|
+
routes: routes ?? {},
|
|
68
|
+
getData: refetchQueries,
|
|
69
|
+
isLoading,
|
|
70
|
+
};
|
|
71
|
+
};
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { useCallback, useEffect, useReducer, useRef } from 'react';
|
|
2
|
+
|
|
2
3
|
import { useFetchClient, useNotification } from '@strapi/helper-plugin';
|
|
3
4
|
import get from 'lodash/get';
|
|
4
|
-
|
|
5
|
+
|
|
5
6
|
import pluginId from '../../pluginId';
|
|
7
|
+
|
|
8
|
+
import init from './init';
|
|
6
9
|
import reducer, { initialState } from './reducer';
|
|
7
10
|
|
|
8
11
|
const useRolesList = (shouldFetchData = true) => {
|
package/admin/src/index.js
CHANGED
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
// Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated
|
|
6
6
|
// IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED
|
|
7
7
|
import { prefixPluginTranslations } from '@strapi/helper-plugin';
|
|
8
|
+
|
|
8
9
|
import pluginPkg from '../../package.json';
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
import { PERMISSIONS } from './constants';
|
|
10
12
|
import pluginId from './pluginId';
|
|
11
13
|
import getTrad from './utils/getTrad';
|
|
12
14
|
|
|
@@ -38,7 +40,7 @@ export default {
|
|
|
38
40
|
|
|
39
41
|
return component;
|
|
40
42
|
},
|
|
41
|
-
permissions:
|
|
43
|
+
permissions: PERMISSIONS.accessRoles,
|
|
42
44
|
},
|
|
43
45
|
{
|
|
44
46
|
intlLabel: {
|
|
@@ -54,7 +56,7 @@ export default {
|
|
|
54
56
|
|
|
55
57
|
return component;
|
|
56
58
|
},
|
|
57
|
-
permissions:
|
|
59
|
+
permissions: PERMISSIONS.readProviders,
|
|
58
60
|
},
|
|
59
61
|
{
|
|
60
62
|
intlLabel: {
|
|
@@ -70,7 +72,7 @@ export default {
|
|
|
70
72
|
|
|
71
73
|
return component;
|
|
72
74
|
},
|
|
73
|
-
permissions:
|
|
75
|
+
permissions: PERMISSIONS.readEmailTemplates,
|
|
74
76
|
},
|
|
75
77
|
{
|
|
76
78
|
intlLabel: {
|
|
@@ -86,7 +88,7 @@ export default {
|
|
|
86
88
|
|
|
87
89
|
return component;
|
|
88
90
|
},
|
|
89
|
-
permissions:
|
|
91
|
+
permissions: PERMISSIONS.readAdvancedSettings,
|
|
90
92
|
},
|
|
91
93
|
]
|
|
92
94
|
);
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
Box,
|
|
5
|
+
Button,
|
|
6
|
+
ContentLayout,
|
|
7
|
+
Flex,
|
|
8
|
+
Grid,
|
|
9
|
+
GridItem,
|
|
10
|
+
HeaderLayout,
|
|
11
|
+
Main,
|
|
12
|
+
Option,
|
|
13
|
+
Select,
|
|
14
|
+
Typography,
|
|
15
|
+
useNotifyAT,
|
|
16
|
+
} from '@strapi/design-system';
|
|
5
17
|
import {
|
|
6
18
|
CheckPagePermissions,
|
|
7
19
|
Form,
|
|
@@ -13,29 +25,20 @@ import {
|
|
|
13
25
|
useOverlayBlocker,
|
|
14
26
|
useRBAC,
|
|
15
27
|
} from '@strapi/helper-plugin';
|
|
16
|
-
import {
|
|
17
|
-
useNotifyAT,
|
|
18
|
-
Main,
|
|
19
|
-
HeaderLayout,
|
|
20
|
-
ContentLayout,
|
|
21
|
-
Button,
|
|
22
|
-
Box,
|
|
23
|
-
Flex,
|
|
24
|
-
Select,
|
|
25
|
-
Option,
|
|
26
|
-
Typography,
|
|
27
|
-
Grid,
|
|
28
|
-
GridItem,
|
|
29
|
-
} from '@strapi/design-system';
|
|
30
28
|
import { Check } from '@strapi/icons';
|
|
31
|
-
import
|
|
29
|
+
import { Formik } from 'formik';
|
|
30
|
+
import { useIntl } from 'react-intl';
|
|
31
|
+
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
|
32
|
+
|
|
33
|
+
import { PERMISSIONS } from '../../constants';
|
|
32
34
|
import { getTrad } from '../../utils';
|
|
35
|
+
|
|
36
|
+
import { fetchData, putAdvancedSettings } from './utils/api';
|
|
33
37
|
import layout from './utils/layout';
|
|
34
38
|
import schema from './utils/schema';
|
|
35
|
-
import { fetchData, putAdvancedSettings } from './utils/api';
|
|
36
39
|
|
|
37
40
|
const ProtectedAdvancedSettingsPage = () => (
|
|
38
|
-
<CheckPagePermissions permissions={
|
|
41
|
+
<CheckPagePermissions permissions={PERMISSIONS.readAdvancedSettings}>
|
|
39
42
|
<AdvancedSettingsPage />
|
|
40
43
|
</CheckPagePermissions>
|
|
41
44
|
);
|
|
@@ -48,10 +51,7 @@ const AdvancedSettingsPage = () => {
|
|
|
48
51
|
const queryClient = useQueryClient();
|
|
49
52
|
useFocusWhenNavigate();
|
|
50
53
|
|
|
51
|
-
const updatePermissions = useMemo(
|
|
52
|
-
() => ({ update: pluginPermissions.updateAdvancedSettings }),
|
|
53
|
-
[]
|
|
54
|
-
);
|
|
54
|
+
const updatePermissions = useMemo(() => ({ update: PERMISSIONS.updateAdvancedSettings }), []);
|
|
55
55
|
const {
|
|
56
56
|
isLoading: isLoadingForPermissions,
|
|
57
57
|
allowedActions: { canUpdate },
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import { useIntl } from 'react-intl';
|
|
4
|
-
import { Form, GenericInput } from '@strapi/helper-plugin';
|
|
5
|
-
import { Formik } from 'formik';
|
|
2
|
+
|
|
6
3
|
import {
|
|
7
|
-
|
|
8
|
-
ModalHeader,
|
|
9
|
-
ModalFooter,
|
|
10
|
-
ModalBody,
|
|
4
|
+
Button,
|
|
11
5
|
Grid,
|
|
12
6
|
GridItem,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
ModalBody,
|
|
8
|
+
ModalFooter,
|
|
9
|
+
ModalHeader,
|
|
10
|
+
ModalLayout,
|
|
16
11
|
Textarea,
|
|
17
12
|
} from '@strapi/design-system';
|
|
13
|
+
import { Breadcrumbs, Crumb } from '@strapi/design-system/v2';
|
|
14
|
+
import { Form, GenericInput } from '@strapi/helper-plugin';
|
|
15
|
+
import { Formik } from 'formik';
|
|
16
|
+
import PropTypes from 'prop-types';
|
|
17
|
+
import { useIntl } from 'react-intl';
|
|
18
|
+
|
|
18
19
|
import { getTrad } from '../../../utils';
|
|
19
20
|
import schema from '../utils/schema';
|
|
20
21
|
|
|
@@ -45,7 +46,7 @@ const EmailForm = ({ template, onToggle, onSubmit }) => {
|
|
|
45
46
|
defaultMessage: 'Edit email template',
|
|
46
47
|
})}
|
|
47
48
|
</Crumb>
|
|
48
|
-
<Crumb>
|
|
49
|
+
<Crumb isCurrent>
|
|
49
50
|
{formatMessage({ id: getTrad(template.display), defaultMessage: template.display })}
|
|
50
51
|
</Crumb>
|
|
51
52
|
</Breadcrumbs>
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import { useIntl } from 'react-intl';
|
|
2
|
+
|
|
4
3
|
import {
|
|
4
|
+
Icon,
|
|
5
|
+
IconButton,
|
|
5
6
|
Table,
|
|
6
|
-
Thead,
|
|
7
7
|
Tbody,
|
|
8
|
-
Tr,
|
|
9
8
|
Td,
|
|
10
9
|
Th,
|
|
10
|
+
Thead,
|
|
11
|
+
Tr,
|
|
11
12
|
Typography,
|
|
12
|
-
IconButton,
|
|
13
|
-
Icon,
|
|
14
13
|
VisuallyHidden,
|
|
15
14
|
} from '@strapi/design-system';
|
|
16
|
-
import { Pencil, Refresh, Check } from '@strapi/icons';
|
|
17
15
|
import { onRowClick, stopPropagation } from '@strapi/helper-plugin';
|
|
16
|
+
import { Check, Pencil, Refresh } from '@strapi/icons';
|
|
17
|
+
import PropTypes from 'prop-types';
|
|
18
|
+
import { useIntl } from 'react-intl';
|
|
19
|
+
|
|
18
20
|
import { getTrad } from '../../../utils';
|
|
19
21
|
|
|
20
22
|
const EmailTable = ({ canUpdate, onEditClick }) => {
|
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
import React, { useMemo, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
2
|
+
|
|
3
|
+
import { ContentLayout, HeaderLayout, Main, useNotifyAT } from '@strapi/design-system';
|
|
4
4
|
import {
|
|
5
|
+
CheckPagePermissions,
|
|
6
|
+
LoadingIndicatorPage,
|
|
5
7
|
SettingsPageTitle,
|
|
6
|
-
|
|
8
|
+
useFocusWhenNavigate,
|
|
7
9
|
useNotification,
|
|
8
10
|
useOverlayBlocker,
|
|
9
|
-
CheckPagePermissions,
|
|
10
11
|
useRBAC,
|
|
11
|
-
|
|
12
|
-
LoadingIndicatorPage,
|
|
12
|
+
useTracking,
|
|
13
13
|
} from '@strapi/helper-plugin';
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
14
|
+
import { useIntl } from 'react-intl';
|
|
15
|
+
import { useMutation, useQuery, useQueryClient } from 'react-query';
|
|
16
|
+
|
|
17
|
+
import { PERMISSIONS } from '../../constants';
|
|
16
18
|
import { getTrad } from '../../utils';
|
|
17
|
-
|
|
18
|
-
import EmailTable from './components/EmailTable';
|
|
19
|
+
|
|
19
20
|
import EmailForm from './components/EmailForm';
|
|
21
|
+
import EmailTable from './components/EmailTable';
|
|
22
|
+
import { fetchData, putEmailTemplate } from './utils/api';
|
|
20
23
|
|
|
21
24
|
const ProtectedEmailTemplatesPage = () => (
|
|
22
|
-
<CheckPagePermissions permissions={
|
|
25
|
+
<CheckPagePermissions permissions={PERMISSIONS.readEmailTemplates}>
|
|
23
26
|
<EmailTemplatesPage />
|
|
24
27
|
</CheckPagePermissions>
|
|
25
28
|
);
|
|
@@ -38,7 +41,7 @@ const EmailTemplatesPage = () => {
|
|
|
38
41
|
const [templateToEdit, setTemplateToEdit] = useState(null);
|
|
39
42
|
|
|
40
43
|
const updatePermissions = useMemo(() => {
|
|
41
|
-
return { update:
|
|
44
|
+
return { update: PERMISSIONS.updateEmailTemplates };
|
|
42
45
|
}, []);
|
|
43
46
|
|
|
44
47
|
const {
|