Skip to content

Commit 736a8be

Browse files
committed
Enable conditional validation of fields in DDF forms
1 parent a2bed95 commit 736a8be

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

app/javascript/forms/data-driven-form.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { connect } from 'react-redux';
1616
import { bindActionCreators } from 'redux';
1717

1818
import defaultComponentMapper from './mappers/componentMapper';
19+
import validatorMapper from './mappers/validatorMapper';
1920
import SpyField from './spy-field';
2021

2122
Validators.messages = {
@@ -60,6 +61,7 @@ const MiqFormRenderer = ({
6061
return (
6162
<FormRender
6263
componentMapper={{ ...componentMapper, 'spy-field': SpyField }}
64+
validatorMapper={validatorMapper}
6365
FormTemplate={MiqFormTemplate}
6466
schema={{ fields: [...fields, { component: 'spy-field', name: 'spy-field', initialize }], ...schema }}
6567
{...props}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { parseCondition, validatorMapper } from '@data-driven-forms/react-form-renderer';
2+
3+
const conditionalValidator = fn => ({ condition, ...schema }) => (value, allValues, meta) => (
4+
!condition || parseCondition(condition, allValues).result ? fn(schema)(value, allValues, meta) : undefined
5+
);
6+
7+
const mapper = Object.keys(validatorMapper).reduce((obj, key) => ({
8+
...obj,
9+
[key]: conditionalValidator(validatorMapper[key]),
10+
}), {});
11+
12+
export default mapper;

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
"dependencies": {
3434
"@carbon/icons-react": "~10.11.0",
3535
"@carbon/themes": "~10.12.0",
36-
"@data-driven-forms/pf3-component-mapper": "~2.8.13",
37-
"@data-driven-forms/react-form-renderer": "~2.8.13",
36+
"@data-driven-forms/pf3-component-mapper": "~2.8.23",
37+
"@data-driven-forms/react-form-renderer": "~2.8.23",
3838
"@manageiq/react-ui-components": "~0.11.70",
3939
"@manageiq/ui-components": "~1.4.3",
4040
"@pf3/select": "~1.12.6",

0 commit comments

Comments
 (0)