@@ -5,26 +5,53 @@ import React from "react";
5
5
import { AntdForm , AntdFormInstance } from "./antd" ;
6
6
7
7
export class FormInstance {
8
+ // 校验上下文
8
9
private readonly validateContext : FormValidateContext ;
10
+ // 重新加载上下文
9
11
private readonly reloadContext : FormFieldReloadListenerContext ;
12
+ // 选项重新加载上下文
10
13
private readonly optionContext : FormFieldOptionListenerContext ;
14
+ // 表单实例
11
15
private readonly formInstance : AntdFormInstance | undefined ;
16
+ // 表单操作对象
12
17
private readonly formAction : FormAction ;
18
+ // 动态表单字段
13
19
private fields : FormField [ ] ;
14
-
20
+ // 表单字段组件
21
+ private formFields : FormField [ ] ;
22
+ // 表单字段更新函数
15
23
private fieldsUpdateDispatch : React . Dispatch < React . SetStateAction < FormField [ ] > > | undefined ;
16
24
25
+ /**
26
+ * 表单字段更新函数
27
+ * @param fieldsUpdateDispatch
28
+ */
17
29
public setFieldsUpdateDispatch = ( fieldsUpdateDispatch : React . Dispatch < React . SetStateAction < FormField [ ] > > ) => {
18
30
this . fieldsUpdateDispatch = fieldsUpdateDispatch ;
19
31
}
20
32
33
+ /**
34
+ * 更新表单字段
35
+ * @param resetFields
36
+ */
21
37
private updateFields = ( resetFields : ( prevState : FormField [ ] ) => FormField [ ] ) => {
22
38
this . fields = resetFields ( this . fields ) ;
23
39
if ( this . fieldsUpdateDispatch ) {
24
40
this . fieldsUpdateDispatch ( resetFields ) ;
25
41
}
26
42
}
27
43
44
+ /**
45
+ * 添加表单字段
46
+ * @param field
47
+ */
48
+ public addFormField = ( field : FormField ) => {
49
+ const formFieldNames = this . formFields . map ( ( item ) => item . props . name ) ;
50
+ if ( formFieldNames . indexOf ( field . props . name ) === - 1 ) {
51
+ this . formFields . push ( field ) ;
52
+ }
53
+ }
54
+
28
55
private namePathEqual = ( name1 : NamePath , name2 : NamePath ) => {
29
56
if ( Array . isArray ( name1 ) && Array . isArray ( name2 ) ) {
30
57
if ( name1 . length !== name2 . length ) {
@@ -216,6 +243,24 @@ export class FormInstance {
216
243
return this . formInstance ?. getFieldsValue ( ) ;
217
244
}
218
245
246
+
247
+ /**
248
+ * 获取Form表单字段
249
+ * @param name
250
+ */
251
+ public getFormFieldProps = ( name : NamePath ) => {
252
+ for ( const field of this . formFields ) {
253
+ if ( field . props . name && this . namePathEqual ( field . props . name , name ) ) {
254
+ return field ;
255
+ }
256
+ }
257
+ return null ;
258
+ }
259
+
260
+ /**
261
+ * 获取动态表单字段
262
+ * @param name
263
+ */
219
264
public getFieldProps = ( name : NamePath ) => {
220
265
for ( const field of this . fields ) {
221
266
if ( field . props . name && this . namePathEqual ( field . props . name , name ) ) {
@@ -262,6 +307,7 @@ export class FormInstance {
262
307
this . optionContext = new FormFieldOptionListenerContext ( ) ;
263
308
this . formInstance = AntdForm . getInstance ( ) . useForm ( ) ;
264
309
this . fields = [ ] ;
310
+ this . formFields = [ ] ;
265
311
this . formAction = {
266
312
submit : this . submit ,
267
313
reset : this . reset ,
0 commit comments