import useForm, { SubmitPromise, UseFormResult } from "@saleor/hooks/useForm"; import React from "react"; import { FormId } from "./types"; export type CheckIfSaveIsDisabledFnType = (data: T) => boolean; export interface FormProps extends Omit, "onSubmit"> { children: (props: UseFormResult) => React.ReactNode; confirmLeave?: boolean; initial?: TData; resetOnSubmit?: boolean; onSubmit?: (data: TData) => SubmitPromise | void; formId?: FormId; checkIfSaveIsDisabled?: CheckIfSaveIsDisabledFnType; mergeData?: boolean; } function Form({ children, initial, resetOnSubmit, onSubmit, confirmLeave = false, formId, checkIfSaveIsDisabled, disabled, mergeData, ...rest }: FormProps) { const renderProps = useForm(initial, onSubmit, { confirmLeave, formId, checkIfSaveIsDisabled, disabled, mergeData, }); function handleSubmit(event?: React.FormEvent, cb?: () => void) { const { reset, submit } = renderProps; if (event) { event.stopPropagation(); event.preventDefault(); } if (cb) { cb(); } if (resetOnSubmit) { reset(); } submit(); } return (
{children(renderProps)}
); } Form.displayName = "Form"; export default Form;