1
1
import * as React from 'react' ;
2
- import { ValidateMessages , FormInstance , FieldData } from './interface' ;
2
+ import { ValidateMessages , FormInstance , FieldData , Store } from './interface' ;
3
3
4
4
interface Forms {
5
5
[ name : string ] : FormInstance ;
@@ -10,26 +10,35 @@ interface FormChangeInfo {
10
10
forms : Forms ;
11
11
}
12
12
13
+ interface FormFinishInfo {
14
+ values : Store ;
15
+ forms : Forms ;
16
+ }
17
+
13
18
export interface FormProviderProps {
14
19
validateMessages ?: ValidateMessages ;
15
20
onFormChange ?: ( name : string , info : FormChangeInfo ) => void ;
21
+ onFormFinish ?: ( name : string , info : FormFinishInfo ) => void ;
16
22
}
17
23
18
24
export interface FormContextProps extends FormProviderProps {
19
25
triggerFormChange : ( name : string , changedFields : FieldData [ ] ) => void ;
26
+ triggerFormFinish : ( name : string , values : Store ) => void ;
20
27
registerForm : ( name : string , form : FormInstance ) => void ;
21
28
unregisterForm : ( name : string ) => void ;
22
29
}
23
30
24
31
const FormContext = React . createContext < FormContextProps > ( {
25
32
triggerFormChange : ( ) => { } ,
33
+ triggerFormFinish : ( ) => { } ,
26
34
registerForm : ( ) => { } ,
27
35
unregisterForm : ( ) => { } ,
28
36
} ) ;
29
37
30
38
const FormProvider : React . FunctionComponent < FormProviderProps > = ( {
31
39
validateMessages,
32
40
onFormChange,
41
+ onFormFinish,
33
42
children,
34
43
} ) => {
35
44
const formContext = React . useContext ( FormContext ) ;
@@ -55,6 +64,16 @@ const FormProvider: React.FunctionComponent<FormProviderProps> = ({
55
64
56
65
formContext . triggerFormChange ( name , changedFields ) ;
57
66
} ,
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
+ } ,
58
77
registerForm : ( name , form ) => {
59
78
if ( name ) {
60
79
formsRef . current = {
0 commit comments