@@ -3,7 +3,7 @@ import {NamePath} from "rc-field-form/es/interface";
3
3
import { FormField } from "@/components/form/types" ;
4
4
import { FormValidateContext } from "@/components/form/validate" ;
5
5
import { FormFieldOptionListenerContext , FormFieldReloadListenerContext } from "@/components/form/listener" ;
6
- import { Form as AntForm } from "antd" ;
6
+ import { Form as AntForm , message } from "antd" ;
7
7
import FormFactory from "@/components/form/factory" ;
8
8
import "./form.scss" ;
9
9
@@ -28,13 +28,13 @@ export interface FormAction {
28
28
// 禁用表单项,禁用后的表单项还会被提交
29
29
disable : ( name : NamePath ) => void ;
30
30
// 全部禁用,禁用后的表单项还会被提交
31
- disableAll :( ) => void ;
31
+ disableAll : ( ) => void ;
32
32
// 启用表单项,启用后的表单项还会被提交
33
33
enable : ( name : NamePath ) => void ;
34
34
// 全部启用,启用后的表单项还会被提交
35
- enableAll :( ) => void ;
35
+ enableAll : ( ) => void ;
36
36
// 必填选项控制,true为必填false为非必填提示
37
- required : ( name : NamePath , required :boolean ) => void ;
37
+ required : ( name : NamePath , required : boolean ) => void ;
38
38
// 获取字段的值
39
39
getFieldValue : ( name : NamePath ) => any ;
40
40
// 重新加载选项
@@ -57,7 +57,7 @@ export interface FormAction {
57
57
58
58
export interface FormProps {
59
59
// 表单字段
60
- loadFields ?: ( ) => Promise < FormField [ ] > ;
60
+ loadFields ?: ( ) => Promise < FormField [ ] > ;
61
61
// 表单提交事件
62
62
onFinish ?: ( values : any ) => Promise < void > ;
63
63
// 表单控制对象
@@ -78,9 +78,9 @@ interface FormContextProps {
78
78
// 检验控制对象
79
79
validateContext : FormValidateContext ;
80
80
// 表单刷新监听对象
81
- reloadContext :FormFieldReloadListenerContext ;
81
+ reloadContext : FormFieldReloadListenerContext ;
82
82
// 选项刷新监听对象
83
- optionContext :FormFieldOptionListenerContext ;
83
+ optionContext : FormFieldOptionListenerContext ;
84
84
}
85
85
86
86
export const FormContext = React . createContext < FormContextProps | null > ( null ) ;
@@ -100,7 +100,7 @@ const namePathEqual = (name1: NamePath, name2: NamePath): boolean => {
100
100
return name1 === name2 ;
101
101
}
102
102
103
- const Form :React . FC < FormProps > = ( props ) => {
103
+ const Form : React . FC < FormProps > = ( props ) => {
104
104
105
105
const [ form ] = AntForm . useForm ( ) ;
106
106
@@ -126,8 +126,12 @@ const Form:React.FC<FormProps> = (props)=>{
126
126
} ,
127
127
128
128
hidden : ( name : NamePath ) => {
129
+ if ( fields . length == 0 ) {
130
+ message . error ( "表单项未加载" ) . then ( ) ;
131
+ return ;
132
+ }
129
133
setFields ( prevFields => prevFields . map ( ( field ) => {
130
- if ( namePathEqual ( field . props . name , name ) ) {
134
+ if ( namePathEqual ( field . props . name , name ) ) {
131
135
return {
132
136
...field ,
133
137
props : {
@@ -142,9 +146,13 @@ const Form:React.FC<FormProps> = (props)=>{
142
146
validateContext . clear ( ) ;
143
147
} ,
144
148
145
- required :( name : NamePath , required :boolean ) => {
149
+ required : ( name : NamePath , required : boolean ) => {
150
+ if ( fields . length == 0 ) {
151
+ message . error ( "表单项未加载" ) . then ( ) ;
152
+ return ;
153
+ }
146
154
setFields ( prevFields => prevFields . map ( ( field ) => {
147
- if ( namePathEqual ( field . props . name , name ) ) {
155
+ if ( namePathEqual ( field . props . name , name ) ) {
148
156
return {
149
157
...field ,
150
158
props : {
@@ -159,8 +167,12 @@ const Form:React.FC<FormProps> = (props)=>{
159
167
} ,
160
168
161
169
show : ( name : NamePath ) => {
170
+ if ( fields . length == 0 ) {
171
+ message . error ( "表单项未加载" ) . then ( ) ;
172
+ return ;
173
+ }
162
174
setFields ( prevFields => prevFields . map ( ( field ) => {
163
- if ( namePathEqual ( field . props . name , name ) ) {
175
+ if ( namePathEqual ( field . props . name , name ) ) {
164
176
return {
165
177
...field ,
166
178
props : {
@@ -175,8 +187,12 @@ const Form:React.FC<FormProps> = (props)=>{
175
187
} ,
176
188
177
189
disable : ( name : NamePath ) => {
190
+ if ( fields . length == 0 ) {
191
+ message . error ( "表单项未加载" ) . then ( ) ;
192
+ return ;
193
+ }
178
194
setFields ( prevFields => prevFields . map ( ( field ) => {
179
- if ( namePathEqual ( field . props . name , name ) ) {
195
+ if ( namePathEqual ( field . props . name , name ) ) {
180
196
return {
181
197
...field ,
182
198
props : {
@@ -190,7 +206,11 @@ const Form:React.FC<FormProps> = (props)=>{
190
206
validateContext . clear ( ) ;
191
207
} ,
192
208
193
- disableAll :( ) => {
209
+ disableAll : ( ) => {
210
+ if ( fields . length == 0 ) {
211
+ message . error ( "表单项未加载" ) . then ( ) ;
212
+ return ;
213
+ }
194
214
setFields ( prevFields => prevFields . map ( ( field ) => {
195
215
return {
196
216
...field ,
@@ -204,8 +224,12 @@ const Form:React.FC<FormProps> = (props)=>{
204
224
} ,
205
225
206
226
enable : ( name : NamePath ) => {
227
+ if ( fields . length == 0 ) {
228
+ message . error ( "表单项未加载" ) . then ( ) ;
229
+ return ;
230
+ }
207
231
setFields ( prevFields => prevFields . map ( ( field ) => {
208
- if ( namePathEqual ( field . props . name , name ) ) {
232
+ if ( namePathEqual ( field . props . name , name ) ) {
209
233
return {
210
234
...field ,
211
235
props : {
@@ -219,7 +243,11 @@ const Form:React.FC<FormProps> = (props)=>{
219
243
validateContext . clear ( ) ;
220
244
} ,
221
245
222
- enableAll :( ) => {
246
+ enableAll : ( ) => {
247
+ if ( fields . length == 0 ) {
248
+ message . error ( "表单项未加载" ) . then ( ) ;
249
+ return ;
250
+ }
223
251
setFields ( prevFields => prevFields . map ( ( field ) => {
224
252
return {
225
253
...field ,
@@ -233,11 +261,19 @@ const Form:React.FC<FormProps> = (props)=>{
233
261
} ,
234
262
235
263
remove : ( name : NamePath ) => {
236
- setFields ( prevFields => prevFields . filter ( ( field ) => ! namePathEqual ( field . props . name , name ) ) ) ;
264
+ if ( fields . length == 0 ) {
265
+ message . error ( "表单项未加载" ) . then ( ) ;
266
+ return ;
267
+ }
268
+ setFields ( prevFields => prevFields . filter ( ( field ) => ! namePathEqual ( field . props . name , name ) ) ) ;
237
269
validateContext . clear ( ) ;
238
270
} ,
239
271
240
272
create : ( field : FormField , index ?: number ) => {
273
+ if ( fields . length == 0 ) {
274
+ message . error ( "表单项未加载" ) . then ( ) ;
275
+ return ;
276
+ }
241
277
setFields ( prevFields => {
242
278
const filteredFields = prevFields . filter ( ( item ) => item . props . name !== field . props . name ) ;
243
279
if ( index === undefined || index < 0 ) {
@@ -261,18 +297,18 @@ const Form:React.FC<FormProps> = (props)=>{
261
297
262
298
getFieldProps ( name : NamePath ) : FormField | null {
263
299
for ( const field of fields ) {
264
- if ( namePathEqual ( field . props . name , name ) ) {
300
+ if ( namePathEqual ( field . props . name , name ) ) {
265
301
return field ;
266
302
}
267
303
}
268
304
return null ;
269
305
} ,
270
306
271
- reloadOptions :( name : NamePath ) => {
307
+ reloadOptions : ( name : NamePath ) => {
272
308
optionContext . notify ( name ) ;
273
309
} ,
274
310
275
- reloadAllOptions :( ) => {
311
+ reloadAllOptions : ( ) => {
276
312
optionContext . notifyAll ( ) ;
277
313
} ,
278
314
@@ -299,15 +335,15 @@ const Form:React.FC<FormProps> = (props)=>{
299
335
const formContextProps = {
300
336
formAction : formAction ,
301
337
validateContext : validateContext ,
302
- reloadContext :reloadContext ,
303
- optionContext :optionContext
338
+ reloadContext : reloadContext ,
339
+ optionContext : optionContext
304
340
}
305
341
306
342
const [ fields , setFields ] = React . useState < FormField [ ] > ( [ ] ) ;
307
343
308
- const reloadFields = ( ) => {
309
- if ( props . loadFields ) {
310
- props . loadFields ( ) . then ( fields => {
344
+ const reloadFields = ( ) => {
345
+ if ( props . loadFields ) {
346
+ props . loadFields ( ) . then ( fields => {
311
347
setFields ( fields ) ;
312
348
} )
313
349
}
0 commit comments