@@ -2,16 +2,33 @@ import React, { useState } from 'react';
2
2
import FormRenderer from '@data-driven-forms/react-form-renderer/dist/cjs/form-renderer' ;
3
3
import componentTypes from '@data-driven-forms/react-form-renderer/dist/cjs/component-types' ;
4
4
import FormTemplate from '@data-driven-forms/pf4-component-mapper/dist/cjs/form-template' ;
5
- import TextField from '@data-driven-forms/pf4-component-mapper /dist/cjs/text-field ' ;
5
+ import validatorTypes from '@data-driven-forms/react-form-renderer /dist/cjs/validator-types ' ;
6
6
import useFieldApi from '@data-driven-forms/react-form-renderer/dist/cjs/use-field-api' ;
7
+ import TextField from '@data-driven-forms/pf4-component-mapper/dist/cjs/text-field' ;
7
8
import submitFunction from './upload-handler' ;
8
9
10
+ const fileSizeValidator = ( { maxSize } ) => {
11
+ return ( value ) => {
12
+ if ( value && value . inputFiles [ 0 ] && value . inputFiles [ 0 ] . size > maxSize ) {
13
+ /**
14
+ * Human readable message should be generated!
15
+ */
16
+ return `File is too large, maximum allowed size is ${ maxSize } bytes. Current file has ${ value . inputFiles [ 0 ] . size } bytes` ;
17
+ }
18
+ } ;
19
+ } ;
20
+
9
21
const FileUploadComponent = ( props ) => {
10
- const { input, label } = useFieldApi ( props ) ;
22
+ const { input, meta , label } = useFieldApi ( props ) ;
11
23
return (
12
24
< div >
13
25
< label htmlFor = { input . name } > { label } </ label >
14
26
< input id = { input . name } { ...input } />
27
+ { meta . error && (
28
+ < div >
29
+ < span style = { { color : 'red' } } > { meta . error } </ span >
30
+ </ div >
31
+ ) }
15
32
</ div >
16
33
) ;
17
34
} ;
@@ -32,11 +49,16 @@ const schema = {
32
49
component : 'file-upload' ,
33
50
label : 'File upload' ,
34
51
name : 'file-upload-field-name' ,
35
- type : 'file'
52
+ type : 'file' ,
53
+ validate : [ { type : validatorTypes . REQUIRED } , { type : 'file-size' , maxSize : 40000 } ]
36
54
}
37
55
]
38
56
} ;
39
57
58
+ const validatorMapper = {
59
+ 'file-size' : fileSizeValidator
60
+ } ;
61
+
40
62
const FormWithFileUpload = ( ) => {
41
63
const [ values , setValues ] = useState ( ) ;
42
64
return (
@@ -52,6 +74,7 @@ const FormWithFileUpload = () => {
52
74
schema = { schema }
53
75
componentMapper = { componentMapper }
54
76
FormTemplate = { FormTemplate }
77
+ validatorMapper = { validatorMapper }
55
78
onSubmit = { async ( values , formApi ) => {
56
79
setValues ( values ) ;
57
80
console . log ( 'form values' , values ) ;
0 commit comments