import { zodResolver } from "@hookform/resolvers/zod"; import { Button } from "@repo/shadcn-ui/components/button"; import { FormActions } from "@repo/shadcn-ui/components/form-dialog"; import { Input } from "@repo/shadcn-ui/components/input"; import { Label } from "@repo/shadcn-ui/components/label"; import { Textarea } from "@repo/shadcn-ui/components/textarea"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useId } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import type { SiteDTO, SiteRequestDTO } from "../../common"; import { SiteRequestSchema } from "../../common"; import { EntityHelp } from "../access/entity-help"; import { companyApi, companyKeys } from "../api/company-api"; import { CompanyFeedback } from "./company-feedback"; export function SiteForm({ site, companyId, csrfToken, onSaved, showTitle = true, }: { site?: SiteDTO; companyId: string; csrfToken: string; onSaved?: (id: string) => void; showTitle?: boolean; }) { const { t } = useTranslation("companies"); const id = useId(); const client = useQueryClient(); const form = useForm({ resolver: zodResolver(SiteRequestSchema), defaultValues: { name: site?.name ?? "", address: site?.address ?? "" }, }); const mutation = useMutation({ mutationFn: (values: SiteRequestDTO) => companyApi.site( companyId, site?.id, { ...values, address: values.address?.trim() ? values.address : null }, csrfToken ), onSuccess: (response) => { client.setQueryData(companyKeys.detail(companyId), response); if (!site) { form.reset(); } const saved = site ? response.company.sites.find((item) => item.id === site.id) : response.company.sites.at(-1); if (saved) { onSaved?.(saved.id); } }, }); return (
mutation.mutate(values))}> {showTitle &&

{t(site ? "editSite" : "newSite")}

}