import { Col, Form, Input, Modal, Row, Select } from 'antd'; import type React from 'react'; import { useEffect, useState } from 'react'; import { ApiError } from '../../api/client'; import { useMe } from '../../auth/useMe'; import { useAppSelector } from '../../store/store'; import type { CreateCompanyGroupProps } from '../../types/companyGroups/companyGroups'; import { useNotificationApi } from '../../utils/useNotification'; import { loadOffices } from '../Admin/UsersTable'; type Props = { open: boolean; onCancel: () => void; onOk: (values: CreateCompanyGroupProps) => void | Promise; }; export const CompanyGroupForm: React.FC = ({ open, onCancel, onOk }) => { const [form] = Form.useForm(); const { me } = useMe(); const notification = useNotificationApi(); const activeCompanyGroup = useAppSelector((state) => state.company_groups.activeCompanyGroup); const [officesOptions, setOfficesOptions] = useState<{ value: string; label: string }[]>([]); const [loadingOptions, setLoadingOptions] = useState(false); const [confirmLoading, setConfirmLoading] = useState(false); async function getOfficesOptionsHandler() { setLoadingOptions(true); try { const res = await loadOffices(); const options = res.map((elem) => elem && { value: elem.id, label: elem.name }); setOfficesOptions(options); } catch (e) { if (e instanceof ApiError) { notification.error({ description: e.message }); } } finally { setLoadingOptions(false); } } const handleOk = async () => { setConfirmLoading(true); try { const values = await form.validateFields(); await onOk({ ...values, base_regional_office_id: values?.base_regional_office_id ? values?.base_regional_office_id : (me?.regional_office.id as string), }); } catch (e) { if (e instanceof ApiError) { notification.error({ description: e.message, }); } else if (e instanceof Error && e.name !== 'ValidationError') { console.error(e); } } finally { setConfirmLoading(false); } }; const handleCancel = () => { form.resetFields(); onCancel(); }; useEffect(() => { getOfficesOptionsHandler(); }, [activeCompanyGroup]); return (