import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { ObjectForm, type ObjectFormValues } from "./object-form"; import { useCreateObject, useSetFields, FieldRejection } from "../api/queries"; import { useDocumentTitle } from "../lib/use-document-title"; import { useBreadcrumb } from "../shell/use-breadcrumb"; import { PageTitle } from "@/components/ui/page-title"; export function ObjectNewPage() { const { t } = useTranslation(); const navigate = useNavigate(); const create = useCreateObject(); const setFields = useSetFields(); const [error, setError] = useState(null); useDocumentTitle(t("objects.new")); useBreadcrumb([{ label: t("nav.objects"), to: "/objects" }, { label: t("objects.new") }]); const onSubmit = async (values: ObjectFormValues) => { setError(null); let id: string; try { const created = await create.mutateAsync({ ...values.core, visibility: values.visibility ?? "draft", }); id = created.id; } catch { setError(t("form.rejected")); return; } if (Object.keys(values.fields).length > 0) { try { await setFields.mutateAsync({ id, fields: values.fields }); } catch (e) { const fieldErrorKey = e instanceof FieldRejection ? e.field : undefined; navigate(`/objects/${id}/edit`, { state: { fieldsError: true, fieldErrorKey } }); return; } } navigate(`/objects/${id}`); }; return (
{t("objects.new")} navigate("/objects")} />
); }