import { FC } from "react"; import { useDealPageContext } from "../../../contexts/DealPageContext.tsx"; import { ActionIcon, Button, Checkbox, Divider, Fieldset, Flex, Group, rem, Textarea, TextInput, Tooltip, } from "@mantine/core"; import { useForm } from "@mantine/form"; import { ClientService, DealSchema, DealService, ShippingWarehouseSchema } from "../../../../../client"; import { DealStatus, DealStatusDictionary } from "../../../../../shared/enums/DealStatus.ts"; import { isEqual } from "lodash"; import { notifications } from "../../../../../shared/lib/notifications.ts"; import { useQueryClient } from "@tanstack/react-query"; import ShippingWarehouseAutocomplete from "../../../../../components/Selects/ShippingWarehouseAutocomplete/ShippingWarehouseAutocomplete.tsx"; import { ButtonCopyControlled } from "../../../../../components/ButtonCopyControlled/ButtonCopyControlled.tsx"; import { useClipboard } from "@mantine/hooks"; import ButtonCopy from "../../../../../components/ButtonCopy/ButtonCopy.tsx"; import FileSaver from "file-saver"; import { getCurrentDateTimeForFilename } from "../../../../../shared/lib/date.ts"; import { IconPrinter } from "@tabler/icons-react"; type Props = { deal: DealSchema } type FormType = Omit const Content: FC = ({ deal }) => { const { setSelectedDeal } = useDealPageContext(); const clipboard = useClipboard(); const queryClient = useQueryClient(); const initialValues: FormType = deal; const form = useForm( { initialValues: initialValues, validate: { name: (value: string) => value.length > 0 ? null : "Название сделки не может быть пустым", }, }, ); const updateDealInfo = async (values: FormType) => { return DealService.updateDealGeneralInfo({ requestBody: { dealId: deal.id, data: { ...values, shippingWarehouse: values.shippingWarehouse?.toString() }, }, }).then(({ ok, message }) => { notifications.guess(ok, { message }); if (!ok) return; DealService.getDealById({ dealId: deal.id }) .then((data) => { setSelectedDeal(data); form.setInitialValues(data); queryClient.invalidateQueries({ queryKey: ["getDealSummaries"], }); }); }); }; const updateClientInfo = async (values: FormType) => { return ClientService.updateClient({ requestBody: { data: values.client, }, }).then(({ ok, message }) => notifications.guess(ok, { message })); }; const handleSubmit = async (values: FormType) => { // Updating client info if there changes if (!isEqual(values.client, deal.client)) { await updateClientInfo(values); } // updating deal info await updateDealInfo(values); }; const isShippingWarehouse = (value: (ShippingWarehouseSchema | string | null | undefined)): value is ShippingWarehouseSchema => { return !["string", "null", "undefined"].includes((typeof value)); }; const onCopyGuestUrlClick = () => { DealService.createDealGuestUrl({ requestBody: { dealId: deal.id, }, }).then(({ ok, message, url }) => { if (!ok) notifications.guess(ok, { message }); clipboard.copy( `${window.location.origin}/${url}`, ); }); }; return (
handleSubmit(values))}>