import { c, classy, FormProps as BaseProps, m } from '@onfido/castor'; import React, { FormEvent, ForwardedRef, useState } from 'react'; import { withRef } from '../../utils'; import { getFormValues } from './getFormValues'; import { FormProvider } from './useForm'; export { useForm } from './useForm'; export const Form = withRef(function Form( { disabled, onChange, onInvalid, onSubmit, className, ...restProps }: FormProps, ref: ForwardedRef ) { const [touched, setTouched] = useState(); return (
onChange?.(event, getFormValues(event.currentTarget)) } onInvalid={(event) => { event.preventDefault(); setTouched(true); onInvalid?.(event); }} onSubmit={(event) => { event.preventDefault(); setTouched(true); if (disabled) return; // prevent disabled buttons from submitting // https://github.com/facebook/react/issues/7711 // eslint-disable-next-line @typescript-eslint/no-explicit-any const { submitter } = event.nativeEvent as any; if ((submitter as HTMLButtonElement)?.disabled) return; onSubmit?.(event, getFormValues(event.currentTarget)); }} /> ); }); export interface FormProps extends BaseProps, Omit { onChange?: (event: FormEvent, values: T) => void; onSubmit?: (event: FormEvent, values: T) => void; } // eslint-disable-next-line @typescript-eslint/no-explicit-any type Values = Record;