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;