import { useRef, useState } from "react"; import { Button } from "ui/components/buttons/Button"; import { JsonSchemaForm, type JsonSchemaFormProps, type JsonSchemaFormRef, } from "ui/components/form/json-schema"; import type { ContextModalProps } from "@mantine/modals"; import { Alert } from "ui/components/display/Alert"; type Props = JsonSchemaFormProps & { autoCloseAfterSubmit?: boolean; onSubmit?: ( data: any, context: { close: () => void; }, ) => void | Promise; }; export function SchemaFormModal({ context, id, innerProps: { schema, uiSchema, onSubmit, autoCloseAfterSubmit }, }: ContextModalProps) { const [valid, setValid] = useState(false); const formRef = useRef(null); const [submitting, setSubmitting] = useState(false); const was_submitted = useRef(false); const [error, setError] = useState(); function handleChange(data, isValid) { const valid = isValid(); console.log("Data changed", data, valid); setValid(valid); } function handleClose() { context.closeModal(id); } async function handleSubmit() { was_submitted.current = true; if (!formRef.current?.validateForm()) { return; } setSubmitting(true); await onSubmit?.(formRef.current?.formData(), { close: handleClose, setError, }); setSubmitting(false); if (autoCloseAfterSubmit !== false) { handleClose(); } } return ( <> {error && }
); } SchemaFormModal.defaultTitle = "JSON Schema Form Modal"; SchemaFormModal.modalProps = { size: "md", classNames: { root: "bknd-admin", header: "!bg-lightest !py-3 px-5 !h-auto !min-h-px", content: "rounded-lg select-none", title: "!font-bold !text-md", body: "!p-0", }, };