import { useEffect, useState } from 'react' import * as Dialog from '@radix-ui/react-dialog' import { X } from 'lucide-react' import { useMutation, useQuery } from '@apollo/client/react' import { GET_ORGANISATIONS_QUERY, GET_USERS_PAGE_QUERY, SIGN_UP_MUTATION, } from '../../../../entities/employee/api/employee.graphql' import type { Employee, EmployeeRole, GetOrganisationsData, GetOrganisationsVariables, SignUpData, SignUpVariables, } from '../../../../entities/employee/model/types' import './AddEmployeeModal.scss' type AddEmployeeModalProps = { open: boolean mode?: 'create' | 'edit' employee?: Employee | null onOpenChange: (open: boolean) => void } export function AddEmployeeModal({ open, mode = 'create', employee = null, onOpenChange, }: AddEmployeeModalProps) { const isEditMode = mode === 'edit' const [orgId, setOrgId] = useState('') const [lastName, setLastName] = useState('') const [firstName, setFirstName] = useState('') const [middleName, setMiddleName] = useState('') const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [role, setRole] = useState('User') useEffect(() => { if (!open) return if (isEditMode && employee) { setOrgId(String(employee.org?.id ?? employee.orgId ?? '')) setLastName(employee.lastName ?? '') setFirstName(employee.firstName ?? '') setMiddleName(employee.middleName ?? '') setUsername('') setPassword('') setRole(employee.role ?? 'User') return } if (!isEditMode) { setLastName('') setFirstName('') setMiddleName('') setUsername('') setPassword('') setRole('User') setOrgId('') } }, [open, isEditMode, employee]) const { data: organisationsData, loading: organisationsLoading, error: organisationsError, } = useQuery( GET_ORGANISATIONS_QUERY, { variables: {}, skip: !open, fetchPolicy: 'network-only', }, ) const organisations = organisationsData?.getOrganisations.page ?? [] useEffect(() => { if (!open) return if (orgId) return if (!organisations.length) return setOrgId(String(organisations[0].id)) }, [open, organisations, orgId]) const [signUp, { loading, error }] = useMutation( SIGN_UP_MUTATION, { refetchQueries: [ { query: GET_USERS_PAGE_QUERY, variables: {}, }, ], onCompleted: () => { setLastName('') setFirstName('') setMiddleName('') setUsername('') setPassword('') setRole('User') setOrgId('') onOpenChange(false) }, }, ) function handleSubmit(event: React.FormEvent) { event.preventDefault() if (!orgId) return if (isEditMode) { console.log('Редактирование сотрудника пока без мутации', { id: employee?.id, orgId, lastName, firstName, middleName, username, password, role, }) onOpenChange(false) return } signUp({ variables: { orgId, lastName, firstName, middleName, username, password, role, }, }) } return (
{isEditMode ? 'Редактировать' : 'Добавить сотрудника'} {isEditMode ? 'Изменение данных пользователя системы MDM' : 'Создание пользователя для доступа к системе MDM'}
{organisationsError && (
Не удалось загрузить список организаций
)} {error && (
Не удалось добавить сотрудника. Проверьте данные.
)}
Отмена
) }