2023-06-12 16:22:11 +02:00
|
|
|
import React, { forwardRef, memo, useImperativeHandle, useReducer } from 'react';
|
|
|
|
|
|
|
|
import { Flex, Grid, GridItem, Typography } from '@strapi/design-system';
|
2020-08-06 16:27:51 +02:00
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { useIntl } from 'react-intl';
|
2023-06-12 16:22:11 +02:00
|
|
|
|
|
|
|
import { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext';
|
2020-08-06 16:27:51 +02:00
|
|
|
import getTrad from '../../utils/getTrad';
|
2021-09-13 18:44:34 +02:00
|
|
|
import Permissions from '../Permissions';
|
2023-06-12 16:22:11 +02:00
|
|
|
import Policies from '../Policies';
|
|
|
|
|
2020-08-06 16:27:51 +02:00
|
|
|
import init from './init';
|
2023-06-12 16:22:11 +02:00
|
|
|
import reducer, { initialState } from './reducer';
|
2020-08-06 16:27:51 +02:00
|
|
|
|
2021-09-22 16:56:31 +02:00
|
|
|
const UsersPermissions = forwardRef(({ permissions, routes }, ref) => {
|
2020-08-06 16:27:51 +02:00
|
|
|
const { formatMessage } = useIntl();
|
2022-08-08 23:33:39 +02:00
|
|
|
const [state, dispatch] = useReducer(reducer, initialState, (state) =>
|
2021-09-22 16:56:31 +02:00
|
|
|
init(state, permissions, routes)
|
2020-08-06 16:27:51 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
useImperativeHandle(ref, () => ({
|
2022-08-08 23:33:39 +02:00
|
|
|
getPermissions() {
|
2020-08-06 16:27:51 +02:00
|
|
|
return {
|
2020-08-27 15:00:10 +02:00
|
|
|
permissions: state.modifiedData,
|
2020-08-06 16:27:51 +02:00
|
|
|
};
|
|
|
|
},
|
2022-08-08 23:33:39 +02:00
|
|
|
resetForm() {
|
2020-08-27 15:57:20 +02:00
|
|
|
dispatch({ type: 'ON_RESET' });
|
|
|
|
},
|
2022-08-08 23:33:39 +02:00
|
|
|
setFormAfterSubmit() {
|
2020-08-27 15:57:20 +02:00
|
|
|
dispatch({ type: 'ON_SUBMIT_SUCCEEDED' });
|
|
|
|
},
|
2020-08-06 16:27:51 +02:00
|
|
|
}));
|
|
|
|
|
2021-11-24 11:48:58 +01:00
|
|
|
const handleChange = ({ target: { name, value } }) =>
|
2020-08-06 16:27:51 +02:00
|
|
|
dispatch({
|
2020-08-27 15:00:10 +02:00
|
|
|
type: 'ON_CHANGE',
|
|
|
|
keys: name.split('.'),
|
|
|
|
value: value === 'empty__string_value' ? '' : value,
|
2020-08-06 16:27:51 +02:00
|
|
|
});
|
|
|
|
|
2021-11-24 11:48:58 +01:00
|
|
|
const handleChangeSelectAll = ({ target: { name, value } }) =>
|
2020-08-06 16:27:51 +02:00
|
|
|
dispatch({
|
2020-08-27 15:00:10 +02:00
|
|
|
type: 'ON_CHANGE_SELECT_ALL',
|
|
|
|
keys: name.split('.'),
|
|
|
|
value,
|
2020-08-06 16:27:51 +02:00
|
|
|
});
|
|
|
|
|
2022-08-08 23:33:39 +02:00
|
|
|
const handleSelectedAction = (actionToSelect) =>
|
2020-08-06 16:27:51 +02:00
|
|
|
dispatch({
|
2020-08-27 15:00:10 +02:00
|
|
|
type: 'SELECT_ACTION',
|
|
|
|
actionToSelect,
|
2020-08-06 16:27:51 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
const providerValue = {
|
|
|
|
...state,
|
2020-08-27 15:00:10 +02:00
|
|
|
onChange: handleChange,
|
|
|
|
onChangeSelectAll: handleChangeSelectAll,
|
2020-08-06 16:27:51 +02:00
|
|
|
onSelectedAction: handleSelectedAction,
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<UsersPermissionsProvider value={providerValue}>
|
2021-09-13 12:24:11 +02:00
|
|
|
<Grid gap={0} shadow="filterShadow" hasRadius background="neutral0">
|
|
|
|
<GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>
|
2023-02-16 17:24:28 +01:00
|
|
|
<Flex direction="column" alignItems="stretch" gap={6}>
|
|
|
|
<Flex direction="column" alignItems="stretch" gap={2}>
|
2024-05-07 14:01:26 +01:00
|
|
|
<Typography variant="delta" tag="h2">
|
2021-09-13 18:44:34 +02:00
|
|
|
{formatMessage({
|
2021-09-14 17:37:02 +02:00
|
|
|
id: getTrad('Plugins.header.title'),
|
2021-09-14 18:51:10 +02:00
|
|
|
defaultMessage: 'Permissions',
|
2021-09-14 17:37:02 +02:00
|
|
|
})}
|
2021-11-15 18:27:32 +01:00
|
|
|
</Typography>
|
2024-05-07 14:01:26 +01:00
|
|
|
<Typography tag="p" textColor="neutral600">
|
2021-09-13 18:44:34 +02:00
|
|
|
{formatMessage({
|
2021-09-14 17:37:02 +02:00
|
|
|
id: getTrad('Plugins.header.description'),
|
2021-09-14 18:51:10 +02:00
|
|
|
defaultMessage: 'Only actions bound by a route are listed below.',
|
2021-09-14 17:37:02 +02:00
|
|
|
})}
|
2021-11-15 18:27:32 +01:00
|
|
|
</Typography>
|
2023-02-16 17:24:28 +01:00
|
|
|
</Flex>
|
2021-09-13 18:44:34 +02:00
|
|
|
<Permissions />
|
2023-02-16 17:24:28 +01:00
|
|
|
</Flex>
|
2021-09-13 12:24:11 +02:00
|
|
|
</GridItem>
|
|
|
|
<Policies />
|
|
|
|
</Grid>
|
2020-08-06 16:27:51 +02:00
|
|
|
</UsersPermissionsProvider>
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
UsersPermissions.propTypes = {
|
|
|
|
permissions: PropTypes.object.isRequired,
|
|
|
|
routes: PropTypes.object.isRequired,
|
|
|
|
};
|
|
|
|
|
2020-08-28 14:52:55 +02:00
|
|
|
export default memo(UsersPermissions);
|