import { zodResolver } from "@hookform/resolvers/zod"; import { Button } from "@repo/shadcn-ui/components/button"; import { Checkbox } from "@repo/shadcn-ui/components/checkbox"; 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 { useMutation, useQueryClient } from "@tanstack/react-query"; import { useId } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import type { CompanyRequestDTO, CompanySummaryDTO } from "../../common"; import { CompanyRequestSchema } from "../../common"; import { EntityHelp } from "../access/entity-help"; import { companyApi, companyKeys } from "../api/company-api"; import { CompanyFeedback } from "./company-feedback"; export function CompanyForm({ company, csrfToken, onCreated, onSaved, showTitle = true, }: { company?: CompanySummaryDTO; csrfToken: string; onCreated?: (id: string) => void; onSaved?: () => void; showTitle?: boolean; }) { const { t } = useTranslation("companies"); const id = useId(); const client = useQueryClient(); const form = useForm({ resolver: zodResolver(CompanyRequestSchema), defaultValues: { name: company?.name ?? "", active: company?.active ?? true }, }); const mutation = useMutation({ mutationFn: (values: CompanyRequestDTO) => companyApi.save(company?.id, values, csrfToken), onSuccess: async (response) => { client.setQueryData(companyKeys.detail(response.company.id), response); await client.invalidateQueries({ queryKey: companyKeys.list }); if (company) { form.reset({ name: response.company.name, active: response.company.active }); } else { form.reset(); onCreated?.(response.company.id); } onSaved?.(); }, }); return (
mutation.mutate(values))}> {showTitle && (

{t(company ? "editCompany" : "newCompany")}

)}
form.setValue("active", checked === true, { shouldDirty: true }) } />
0} success={mutation.isSuccess} /> ); }