import * as React from 'react'; import { ValidateInfoManager } from './validator/ValidateInfoManager'; export interface IContextProps { model?: M; itemProps?: any; inputProps?: any; needValidate?: boolean; validateInfoManager?: ValidateInfoManager; [x: string]: any; } interface IProps extends IContextProps { validateAtFirst?: boolean; } export const FormContext = React.createContext>({ model: null, needValidate: false, itemProps: null, validateInfoManager: undefined, inputProps: null }); export default function FormWithContext( props: IProps & React.DetailedHTMLProps, HTMLFormElement> ) { const { model, itemProps, validateAtFirst, inputProps, ...otherProps } = props; const [needValidate, setNeedValidate] = React.useState(validateAtFirst); const ref = React.useRef(); if (!ref.current) { ref.current = new ValidateInfoManager(); } const validateInfoManager = ref.current; function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!needValidate) { setNeedValidate(true); } let isValid = validateInfoManager.isValid; if (otherProps.onSubmit && isValid) { otherProps.onSubmit(e); } } return (
handleSubmit(e)} /> ); }