import { useCallback, useEffect, useMemo, useState } from 'react'; import Modal from '../../../components/common/Modal/Modal'; import { Box, Button, Typography } from '@mui/material'; import SelectWithOptions from '../components/SelectWithOptions'; import { ROLES_NAME_ID } from '../../../constants/constants'; import { AutocompleteForChangeOptions } from '../components/AutocompleteForChangeOptions'; export const ModalEditUserSsp = ({ open, onClose, user, deps = [], onEdit, }) => { const [curUser, setCurUser] = useState(user); const [depsData, setDepsData] = useState({ update: [], delete: [] }); const [newDepsData, setNewDepsData] = useState({ update: [], delete: [] }); const [ssps, setSsps] = useState([]); const [rfs, setRfs] = useState([]); const [selectedType, setSelectedType] = useState('rf'); // 'rf' или 'ssp' useEffect(() => { if (!open) { setCurUser(null); return; } setCurUser(user); try { if (user && user.role_id == ROLES_NAME_ID.executor_rf) { const isSsp = user.org_units?.[0]?.is_ssp; setSelectedType(isSsp ? 'ssp' : 'rf'); } } catch { setSelectedType('rf'); } }, [user, open]); useEffect(() => { if (!deps) return; const ssps = []; const rfs = []; deps.forEach((dep) => { if (dep.is_ssp) { ssps.push(dep); return; } rfs.push(dep); }); setSsps(ssps); setRfs(rfs); }, [deps]); const handleChangeDepForSingle = (depId) => { const selectedDep = deps.find((dep) => dep.id == depId); if (!selectedDep) return; setDepsData({ update: [selectedDep], delete: [...(user.org_units ?? [])], }); setCurUser((prev) => ({ ...prev, org_units: [selectedDep], })); }; const handleClickSave = () => { onEdit(curUser, newDepsData); onClose(); }; useEffect(() => { const newDataDeps = { update: depsData.update.map((d) => d.id), delete: depsData.delete.map((d) => d.id), }; setNewDepsData(newDataDeps); }, [depsData]); const sspForDfip = useMemo(() => { if (!curUser|| !open) return []; return curUser.org_units ?? []; }, [curUser, deps, newDepsData, open]); const handleTypeChange = (value) => { setSelectedType(value); // Сбрасываем выбранное подразделение при смене типа setCurUser((prev) => ({ ...prev, ssp_id: null, })); setDepsData({ update: [], delete: [] }); }; if (!curUser) return null; return ( } > {curUser.role_id == ROLES_NAME_ID['executor_dfip'] && ( ССП/РФ )} {curUser.role_id == ROLES_NAME_ID['executor_rf'] && ( Тип {selectedType === 'rf' ? 'РФ' : 'ССП'} )} {curUser.role_id == ROLES_NAME_ID['admin'] && ( ССП/РФ )} ); };