@@ -2,16 +2,33 @@ import React, { useState } from 'react';
22import FormRenderer from '@data-driven-forms/react-form-renderer/dist/cjs/form-renderer' ;
33import componentTypes from '@data-driven-forms/react-form-renderer/dist/cjs/component-types' ;
44import 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 ' ;
66import 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' ;
78import submitFunction from './upload-handler' ;
89
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+
921const FileUploadComponent = ( props ) => {
10- const { input, label } = useFieldApi ( props ) ;
22+ const { input, meta , label } = useFieldApi ( props ) ;
1123 return (
1224 < div >
1325 < label htmlFor = { input . name } > { label } </ label >
1426 < input id = { input . name } { ...input } />
27+ { meta . error && (
28+ < div >
29+ < span style = { { color : 'red' } } > { meta . error } </ span >
30+ </ div >
31+ ) }
1532 </ div >
1633 ) ;
1734} ;
@@ -32,11 +49,16 @@ const schema = {
3249 component : 'file-upload' ,
3350 label : 'File upload' ,
3451 name : 'file-upload-field-name' ,
35- type : 'file'
52+ type : 'file' ,
53+ validate : [ { type : validatorTypes . REQUIRED } , { type : 'file-size' , maxSize : 40000 } ]
3654 }
3755 ]
3856} ;
3957
58+ const validatorMapper = {
59+ 'file-size' : fileSizeValidator
60+ } ;
61+
4062const FormWithFileUpload = ( ) => {
4163 const [ values , setValues ] = useState ( ) ;
4264 return (
@@ -52,6 +74,7 @@ const FormWithFileUpload = () => {
5274 schema = { schema }
5375 componentMapper = { componentMapper }
5476 FormTemplate = { FormTemplate }
77+ validatorMapper = { validatorMapper }
5578 onSubmit = { async ( values , formApi ) => {
5679 setValues ( values ) ;
5780 console . log ( 'form values' , values ) ;
0 commit comments