11import * as React from 'react' ;
2- import { ValidateMessages , FormInstance , FieldData } from './interface' ;
2+ import { ValidateMessages , FormInstance , FieldData , Store } from './interface' ;
33
44interface Forms {
55 [ name : string ] : FormInstance ;
@@ -10,26 +10,35 @@ interface FormChangeInfo {
1010 forms : Forms ;
1111}
1212
13+ interface FormFinishInfo {
14+ values : Store ;
15+ forms : Forms ;
16+ }
17+
1318export interface FormProviderProps {
1419 validateMessages ?: ValidateMessages ;
1520 onFormChange ?: ( name : string , info : FormChangeInfo ) => void ;
21+ onFormFinish ?: ( name : string , info : FormFinishInfo ) => void ;
1622}
1723
1824export interface FormContextProps extends FormProviderProps {
1925 triggerFormChange : ( name : string , changedFields : FieldData [ ] ) => void ;
26+ triggerFormFinish : ( name : string , values : Store ) => void ;
2027 registerForm : ( name : string , form : FormInstance ) => void ;
2128 unregisterForm : ( name : string ) => void ;
2229}
2330
2431const FormContext = React . createContext < FormContextProps > ( {
2532 triggerFormChange : ( ) => { } ,
33+ triggerFormFinish : ( ) => { } ,
2634 registerForm : ( ) => { } ,
2735 unregisterForm : ( ) => { } ,
2836} ) ;
2937
3038const FormProvider : React . FunctionComponent < FormProviderProps > = ( {
3139 validateMessages,
3240 onFormChange,
41+ onFormFinish,
3342 children,
3443} ) => {
3544 const formContext = React . useContext ( FormContext ) ;
@@ -55,6 +64,16 @@ const FormProvider: React.FunctionComponent<FormProviderProps> = ({
5564
5665 formContext . triggerFormChange ( name , changedFields ) ;
5766 } ,
67+ triggerFormFinish : ( name , values ) => {
68+ if ( onFormFinish ) {
69+ onFormFinish ( name , {
70+ values,
71+ forms : formsRef . current ,
72+ } ) ;
73+ }
74+
75+ formContext . triggerFormFinish ( name , values ) ;
76+ } ,
5877 registerForm : ( name , form ) => {
5978 if ( name ) {
6079 formsRef . current = {
0 commit comments