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 { useId } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import type { z } from "zod/v4"; import { AssetDefinitionSchema, type CatalogItemDTO } from "../common"; import { CatalogError } from "./catalog-error"; import { CatalogHelp } from "./catalog-help"; import type { CatalogSaved } from "./use-catalog-save"; import { useCatalogSave } from "./use-catalog-save"; const schema = AssetDefinitionSchema.options[2]; export function CatalogRelationForm({ scope, csrfToken, item, onSaved, }: { scope: string; csrfToken: string; item?: CatalogItemDTO | undefined; onSaved: CatalogSaved; }) { const { t } = useTranslation("assets"); const id = useId(); const current = item?.values.kind === "relation" ? item.values : undefined; const form = useForm>({ resolver: zodResolver(schema), defaultValues: current ?? { kind: "relation", name: "", inverseName: "", description: "", symmetric: false, }, }); const mutation = useCatalogSave(scope, csrfToken, onSaved, item?.id); const symmetric = form.watch("symmetric"); return (
mutation.mutate(values))}>
{ form.setValue("name", event.target.value); if (symmetric) { form.setValue("inverseName", event.target.value); } }} />
{!symmetric && (
)}