import { useEffect, useMemo, useState } from 'react';
import {
MaterialReactTable,
useMaterialReactTable,
} from 'material-react-table';
import {
Box,
Typography,
IconButton,
TextField,
Autocomplete,
} from '@mui/material';
import { CheckIcon, CheckedIcon } from '../IconsForTable/icons';
import { TrashSvg } from '../../../components/common/icons/icons';
import { ROLES_NAME_ID } from '../../../constants';
const StyleForChecked = {
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-start',
cursor: 'pointer',
'& svg': {
width: '1rem',
height: '1rem',
},
'&:hover': {
opacity: 0.8,
},
};
const UserTableForAdd = ({
usersEmail = [],
sspOptions = [],
onDeleteUser,
onChangeUsers,
}) => {
const [allUsers, setAllUsers] = useState([]);
useEffect(() => {
const emailUsers = usersEmail.map((email) => ({
id: email,
email: email,
ssp: '',
admin: false,
executor_dfip: false,
executor_rf: false,
username: email.split('@')[0],
ssp_id: null,
}));
setAllUsers((prev) => [...prev, ...emailUsers]);
}, [usersEmail]);
const handleRoleChange = (userId, role) => {
const allRoles = Object.fromEntries(
Object.keys(ROLES_NAME_ID).map((key) => [key, false]),
);
allRoles[role] = true;
setAllUsers((prev) =>
prev.map((user) =>
user.id === userId
? { ...user, ...allRoles, role_id: ROLES_NAME_ID[role] }
: user,
),
);
};
const handleSspChange = (userId, ssp) => {
setAllUsers((prev) =>
prev.map((user) =>
user.id === userId
? {
...user,
ssp: ssp,
ssp_id: ssp.id,
}
: user,
),
);
};
const handleDeleteUser = (userId) => {
setAllUsers((prev) => prev.filter((user) => user.id !== userId));
onDeleteUser(allUsers.length - 1);
};
useEffect(() => {
onChangeUsers?.(allUsers);
}, [allUsers]);
const columns = useMemo(
() => [
{
accessorKey: 'email',
header: 'Email пользователя',
maxSize: 400,
size: 200,
Cell: ({ row }) => {
const user = row.original;
return {user.email};
},
enableEditing: false,
enableColumnActions: false,
},
{
accessorKey: 'ssp',
header: 'ССП/Региональный филиал',
size: 134,
maxSize: 268,
Cell: ({ row }) => {
return (
option.title || option.name || ''}
value={row.original.ssp}
onChange={(e, newValue) =>
handleSspChange(row.original.id, newValue || '')
}
sx={{
height: '1.5rem',
padding: 0,
maxWidth: '10rem',
'.MuiInputBase-root': {
height: '1.5rem',
border: '1px solid var(--stroke)',
borderRadius: '0.5rem',
},
}}
renderInput={(params) => (
)}
freeSolo={false}
/>
);
},
enableColumnActions: false,
},
{
accessorKey: 'admin',
header: 'Администратор',
size: 70,
maxSize: 140,
Cell: ({ row }) => (
handleRoleChange(row.original.id, 'admin')}
>
{row.original.admin ? (
) : (
)}
),
enableColumnActions: false,
},
{
accessorKey: 'executor_dfip',
header: 'Исполнитель ДФиП',
size: 70,
maxSize: 140,
Cell: ({ row }) => (
handleRoleChange(row.original.id, 'executor_dfip')}
>
{row.original.executor_dfip ? (
) : (
)}
),
enableColumnActions: false,
},
{
accessorKey: 'executor_rf',
header: 'Исполнитель РФ',
size: 70,
maxSize: 140,
Cell: ({ row }) => (
handleRoleChange(row.original.id, 'executor_rf')}
>
{row.original.executor_rf ? (
) : (
)}
),
enableColumnActions: false,
},
{
id: 'actions',
header: '',
size: 30,
maxSize: 60,
Cell: ({ row }) => {
return (
handleDeleteUser(row.original.id)}
sx={{ color: 'error.main' }}
>
);
},
enableEditing: false,
enableSorting: false,
enableColumnFilter: false,
enableColumnActions: false,
enableHiding: false,
},
],
[allUsers, sspOptions],
);
const table = useMaterialReactTable({
columns,
data: allUsers,
enablePagination: false,
enableBottomToolbar: false,
enableDensityToggle: false,
enableFullScreenToggle: false,
enableRowActions: false,
enableTopToolbar: false,
enableColumnFilters: false,
enableGlobalFilter: false,
muiTableBodyRowProps: ({ _row }) => ({
sx: {
fontSize: '.75rem',
height: '2.75rem',
'& .MuiTableCell-root': {
padding: 0,
paddingLeft: '.5rem',
height: '2.75rem',
maxHeight: '2.75rem',
},
},
}),
muiTableHeadRowProps: {
sx: {
fontSize: (theme) => theme.adminTable.fontSize,
height: (theme) =>
theme.adminTable.MuiTableRow.styleOverrides.root.height,
'& .MuiTableCell-root': {
padding: 0,
height: '2rem',
textAlign: 'center',
verticalAlign: 'middle',
paddingLeft: '0.75rem',
},
},
},
muiTableBodyCellProps: {
sx: {
maxHeight: '2.75rem',
fontSize: 'inherit',
},
},
muiTableHeadCellProps: {
sx: {
fontSize: 'inherit',
fontWeight: 'bold',
backgroundColor: '#f5f5f5',
},
},
muiTableProps: {
sx: {
'& thead': {
position: 'sticky',
top: 0,
zIndex: 10,
},
},
},
muiTablePaperProps: {
sx: {
width: '72rem',
maxWidth: '72rem',
display: 'flex',
flexDirection: 'column',
minHeight: '18.38rem',
boxShadow: 'none',
border: 'none',
background: 'transparent',
},
},
muiTableContainerProps: {
sx: {
flex: '1 1 auto',
overflow: 'auto',
maxHeight: '18.38rem',
},
},
enableRowNumbers: false,
muiToolbarAlertBannerProps: false,
});
return (
);
};
export default UserTableForAdd;