Skip to content

Commit b468d38

Browse files
committed
Added validation to the file input example.
1 parent 4c7b480 commit b468d38

File tree

1 file changed

+26
-3
lines changed
  • packages/react-renderer-demo/src/app/examples/components/file-upload

1 file changed

+26
-3
lines changed

packages/react-renderer-demo/src/app/examples/components/file-upload/file-input.js

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,33 @@ import React, { useState } from 'react';
22
import FormRenderer from '@data-driven-forms/react-form-renderer/dist/cjs/form-renderer';
33
import componentTypes from '@data-driven-forms/react-form-renderer/dist/cjs/component-types';
44
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';
66
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';
78
import 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+
921
const 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+
4062
const 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

Comments
 (0)