Skip to content

Commit 173e23d

Browse files
authored
Merge pull request #320 from rvsia/validateMuiTabs
Validate MUI hidden tabs
2 parents 10fc6de + 17525e5 commit 173e23d

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed

packages/mui-component-mapper/src/form-fields/form-fields.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ const selectComponent = ({
5656
required={ isRequired }
5757
inputProps={{
5858
readOnly: isReadOnly,
59+
required: false,
5960
}}
6061
{ ...rest }
6162
/>
@@ -73,6 +74,7 @@ const selectComponent = ({
7374
multiline
7475
inputProps={{
7576
readOnly: isReadOnly,
77+
required: false,
7678
}}
7779
{ ...rest }
7880
/>

packages/mui-component-mapper/src/form-fields/tabs.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import React, { Component, Fragment } from 'react';
1+
import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
33
import AppBar from '@material-ui/core/AppBar';
44
import Tabs from '@material-ui/core/Tabs';
55
import Tab from '@material-ui/core/Tab';
66

77
const renderTabHeader = items => items.map(({ title, key, name }) => <Tab key={ name } label={ title } />);
8-
const renderTabContet = ({ name, fields }, formOptions) => <Fragment key={ name }>{ formOptions.renderForm(fields, formOptions) }</Fragment>;
8+
const renderTabContet = (tabs, formOptions, activeTab) => tabs.map(({ fields, name }, idx) => (
9+
<div key={ name } hidden={ idx !== activeTab }>{ formOptions.renderForm(fields, formOptions) }</div>
10+
));
911

1012
class FormTabs extends Component {
1113
state = {
@@ -24,7 +26,7 @@ class FormTabs extends Component {
2426
{ renderTabHeader(fields) }
2527
</Tabs>
2628
</AppBar>
27-
{ renderTabContet(fields[activeTab], formOptions) }
29+
{ renderTabContet(fields, formOptions, activeTab) }
2830
</div>
2931
);
3032
}

packages/mui-component-mapper/src/tests/tabs.test.js

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import AppBar from '@material-ui/core/AppBar';
44
import Tabs from '@material-ui/core/Tabs';
55
import Tab from '@material-ui/core/Tab';
66

7+
import FormRenderer, { validatorTypes } from '@data-driven-forms/react-form-renderer';
8+
import { formFieldsMapper, layoutMapper } from '../index';
79
import FormTabs from '../form-fields/tabs';
810

911
describe('tabs', () => {
@@ -31,7 +33,7 @@ describe('tabs', () => {
3133
expect(wrapper.find(AppBar)).toHaveLength(1);
3234
expect(wrapper.find(Tabs)).toHaveLength(1);
3335
expect(wrapper.find(Tab)).toHaveLength(2);
34-
expect(wrapper.find('h1')).toHaveLength(1);
36+
expect(wrapper.find('h1')).toHaveLength(2);
3537
});
3638

3739
it('should switch tabs correctly', () => {
@@ -43,4 +45,50 @@ describe('tabs', () => {
4345

4446
expect(wrapper.instance().state.activeTab).toEqual(1);
4547
});
48+
49+
it('validate all tabs', () => {
50+
const onSubmit = jest.fn();
51+
const wrapper = mount(<FormRenderer
52+
formFieldsMapper={ formFieldsMapper }
53+
layoutMapper={ layoutMapper }
54+
onSubmit={ (values) => onSubmit(values) }
55+
schema={{ fields: [{
56+
component: 'tabs',
57+
name: 'tabs1',
58+
title: 'tabs1',
59+
fields: [{
60+
name: 'tabitem1',
61+
component: 'tab-item',
62+
fields: [{
63+
component: 'text-field',
64+
name: 'name',
65+
validate: [{ type: validatorTypes.REQUIRED }],
66+
}],
67+
}, {
68+
name: 'tabitem2',
69+
component: 'tab-item',
70+
fields: [{
71+
component: 'text-field',
72+
name: 'password',
73+
validate: [{ type: validatorTypes.REQUIRED }],
74+
}],
75+
}],
76+
}]}}
77+
/>);
78+
79+
wrapper.find('input').first().simulate('change', { target: { value: 'NAME' }});
80+
wrapper.update();
81+
82+
wrapper.find('form').simulate('submit');
83+
wrapper.update();
84+
85+
expect(onSubmit).not.toHaveBeenCalled();
86+
87+
wrapper.find('input').last().simulate('change', { target: { value: 'PASSWORD' }});
88+
wrapper.update();
89+
90+
wrapper.find('form').simulate('submit');
91+
92+
expect(onSubmit).toHaveBeenCalledWith({ name: 'NAME', password: 'PASSWORD' });
93+
});
4694
});

0 commit comments

Comments
 (0)