Skip to content

Commit b9138cb

Browse files
authored
Merge pull request #1049 from rvsia/fixToggle
fix(carbon): fix switch toggled attribute
2 parents a56bcee + d86f194 commit b9138cb

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

packages/carbon-component-mapper/src/switch/switch.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@ import prepareProps from '../prepare-props';
88
import HelperTextBlock from '../helper-text-block/helper-text-block';
99

1010
const Switch = (props) => {
11-
const { input, meta, onText, offText, validateOnMount, helperText, WrapperProps, ...rest } = useFieldApi(prepareProps(props));
11+
const { input, meta, onText, offText, validateOnMount, helperText, WrapperProps, ...rest } = useFieldApi({
12+
...prepareProps(props),
13+
type: 'checkbox'
14+
});
1215

1316
const invalid = (meta.touched || validateOnMount) && (meta.error || meta.submitError);
1417
const warnText = (meta.touched || validateOnMount) && meta.warning;
1518

19+
const { checked, ...inputRest } = input;
20+
1621
return (
1722
<div {...WrapperProps}>
18-
<Toggle {...input} key={input.name} id={input.name} labelA={offText} labelB={onText} {...rest} />
23+
<Toggle {...inputRest} toggled={checked} key={input.name} id={input.name} labelA={offText} labelB={onText} {...rest} />
1924
<HelperTextBlock helperText={helperText} errorText={invalid} warnText={warnText} />
2025
</div>
2126
);
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import React from 'react';
2+
import { act } from 'react-dom/test-utils';
3+
import { mount } from 'enzyme';
4+
5+
import { FormRenderer, componentTypes } from '@data-driven-forms/react-form-renderer';
6+
7+
import FormTemplate from '../form-template';
8+
import componentMapper from '../component-mapper';
9+
import { Toggle } from 'carbon-components-react';
10+
11+
describe('<Switch />', () => {
12+
it('initialValue works', async () => {
13+
const spy = jest.fn();
14+
const schema = {
15+
fields: [
16+
{
17+
component: componentTypes.SWITCH,
18+
name: 'switch',
19+
label: 'Switch',
20+
initialValue: true
21+
}
22+
]
23+
};
24+
25+
const wrapper = mount(
26+
<FormRenderer
27+
onSubmit={(values) => spy(values)}
28+
FormTemplate={(props) => <FormTemplate {...props} />}
29+
schema={schema}
30+
componentMapper={componentMapper}
31+
/>
32+
);
33+
34+
expect(wrapper.find(Toggle)).toHaveLength(1);
35+
expect(wrapper.find(Toggle).props().toggled).toEqual(true);
36+
37+
await act(async () => {
38+
wrapper.find('form').simulate('submit');
39+
});
40+
wrapper.update();
41+
42+
expect(spy).toHaveBeenCalledWith({ switch: true });
43+
spy.mockClear();
44+
45+
await act(async () => {
46+
wrapper.find('input').simulate('change', { target: { checked: false } });
47+
});
48+
wrapper.update();
49+
50+
expect(wrapper.find(Toggle).props().toggled).toEqual(false);
51+
52+
await act(async () => {
53+
wrapper.find('form').simulate('submit');
54+
});
55+
wrapper.update();
56+
57+
expect(spy).toHaveBeenCalledWith({});
58+
});
59+
});

0 commit comments

Comments
 (0)