import { Button, Group, Modal, MultiSelect, Select, TextInput, type ModalBaseProps, } from "@mantine/core"; import { t } from "@/config/i18n"; import { DatePickerInput } from "@mantine/dates"; import { IconCancel, IconEdit, IconPlus } from "@tabler/icons-react"; import { useForm } from "@mantine/form"; import { useMemo } from "react"; import { type Shipment, type ShipmentInputs } from "@/services/resources/shipments"; import { useGetForms, useGetProductors, useGetProducts } from "@/services/api"; export type ShipmentModalProps = ModalBaseProps & { currentShipment?: Shipment; handleSubmit: (shipment: ShipmentInputs, id?: number) => void; }; export default function ShipmentModal({ opened, onClose, currentShipment, handleSubmit, }: ShipmentModalProps) { const form = useForm({ initialValues: { name: currentShipment?.name ?? "", date: currentShipment?.date ?? null, form_id: currentShipment ? String(currentShipment?.form_id) : "", product_ids: currentShipment?.products.map((el) => String(el.id)) ?? [], }, validate: { name: (value) => !value ? `${t("a name", { capfirst: true })} ${t("is required")}` : null, date: (value) => !value ? `${t("a shipment date", { capfirst: true })} ${t("is required")}` : null, form_id: (value) => !value ? `${t("a form", { capfirst: true })} ${t("is required")}` : null, }, }); const { data: allForms } = useGetForms(); const { data: allProducts } = useGetProducts(new URLSearchParams("types=1")); const { data: allProductors } = useGetProductors(); const formsSelect = useMemo(() => { return allForms?.map((currentForm) => ({ value: String(currentForm.id), label: `${currentForm.name} ${currentForm.season}`, })); }, [allForms]); const productsSelect = useMemo(() => { if (!allProducts) return; return allProductors?.map((productor) => { return { group: productor.name, items: allProducts .filter((product) => product.productor.id === productor.id) .map((product) => ({ value: String(product.id), label: `${product.name}`, })), }; }); }, [allProductors, allProducts]); return (