import PropTypes from 'prop-types'; import Button from '@mui/material/Button'; import Dialog from '@mui/material/Dialog'; import DialogActions from '@mui/material/DialogActions'; import DialogContent from '@mui/material/DialogContent'; import DialogTitle from '@mui/material/DialogTitle'; import Paper from '@mui/material/Paper'; import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableCell from '@mui/material/TableCell'; import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; import TableRow from '@mui/material/TableRow'; import Typography from '@mui/material/Typography'; import * as React from 'react'; import { useFormContext } from 'react-hook-form'; import ControlledCheckbox from 'components/ControlledCheckbox'; import useFormatMessage from 'hooks/useFormatMessage'; function PermissionSettings(props) { const { onClose, open = false, fieldPrefix, subject, actions, conditions, defaultChecked, } = props; const formatMessage = useFormatMessage(); const { getValues, resetField } = useFormContext(); const cancel = () => { for (const action of actions) { for (const condition of conditions) { const fieldName = `${fieldPrefix}.${action.key}.conditions.${condition.key}`; resetField(fieldName); } } onClose(); }; const apply = () => { for (const action of actions) { for (const condition of conditions) { const fieldName = `${fieldPrefix}.${action.key}.conditions.${condition.key}`; const value = getValues(fieldName); resetField(fieldName, { defaultValue: value }); } } onClose(); }; return ( {formatMessage('permissionSettings.title')} {actions.map((action) => ( {action.label} ))} {conditions.map((condition) => ( {condition.label} {actions.map((action) => ( {action.subjects.includes(subject) && ( )} {!action.subjects.includes(subject) && '-'} ))} ))}
); } PermissionSettings.propTypes = { onClose: PropTypes.func.isRequired, fieldPrefix: PropTypes.string.isRequired, subject: PropTypes.string.isRequired, open: PropTypes.bool, defaultChecked: PropTypes.bool, actions: PropTypes.arrayOf( PropTypes.shape({ label: PropTypes.string, key: PropTypes.string, subjects: PropTypes.arrayOf(PropTypes.string), }), ).isRequired, conditions: PropTypes.arrayOf( PropTypes.shape({ label: PropTypes.string, key: PropTypes.string, }), ).isRequired, }; export default PermissionSettings;