@transferwise/components 0.0.0-experimental-322d55c → 0.0.0-experimental-cb4aafe
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +46 -43
- package/build/index.js.map +1 -1
- package/build/index.mjs +46 -43
- package/build/index.mjs.map +1 -1
- package/build/types/segmentedControl/SegmentedControl.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/segmentedControl/SegmentedControl.spec.tsx +27 -1
- package/src/segmentedControl/SegmentedControl.tsx +14 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../src/segmentedControl/SegmentedControl.tsx"],"names":[],"mappings":";AAMA,KAAK,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,KAAK,OAAO,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAClD,KAAK,mBAAmB,GAAG,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,QAAQ,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,mBAAmB,EAAE,CAAC;AAE3E,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC1C,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,GAC3D,CAAC,yBAAyB,GAAG,0BAA0B,CAAC,CAAC;AAE3D,QAAA,MAAM,gBAAgB,sDAMnB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../src/segmentedControl/SegmentedControl.tsx"],"names":[],"mappings":";AAMA,KAAK,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,KAAK,OAAO,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAClD,KAAK,mBAAmB,GAAG,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,QAAQ,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,mBAAmB,EAAE,CAAC;AAE3E,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC1C,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,GAC3D,CAAC,yBAAyB,GAAG,0BAA0B,CAAC,CAAC;AAE3D,QAAA,MAAM,gBAAgB,sDAMnB,qBAAqB,gCAuIvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import '@testing-library/jest-dom';
|
|
2
|
-
import
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
import { render, screen, userEvent, waitFor } from '../test-utils';
|
|
3
5
|
|
|
4
6
|
import SegmentedControl, { SegmentedControlProps } from './SegmentedControl';
|
|
5
7
|
|
|
@@ -86,6 +88,30 @@ describe('SegmentedControl', () => {
|
|
|
86
88
|
expect(onChange).toHaveBeenCalledWith('reporting');
|
|
87
89
|
});
|
|
88
90
|
|
|
91
|
+
it('does not repeatedly call the onChange, when the provided onChange prop changes on every render of its parent component', async () => {
|
|
92
|
+
let onChangeCallCount = 0;
|
|
93
|
+
|
|
94
|
+
const ParentComponent = () => {
|
|
95
|
+
const [_, simulateRerender] = React.useState({});
|
|
96
|
+
|
|
97
|
+
// new function is created on every render
|
|
98
|
+
const onChange = () => {
|
|
99
|
+
onChangeCallCount++;
|
|
100
|
+
simulateRerender({});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
return <SegmentedControl {...defaultProps} onChange={onChange} />;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const { rerender } = render(<ParentComponent />);
|
|
107
|
+
|
|
108
|
+
rerender(<ParentComponent />);
|
|
109
|
+
|
|
110
|
+
await waitFor(() => {
|
|
111
|
+
expect(onChangeCallCount).toBe(1);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
89
115
|
it('throws error if user tries to add too many segments', () => {
|
|
90
116
|
expect(() => {
|
|
91
117
|
renderSegmentedControl({
|
|
@@ -87,7 +87,9 @@ const SegmentedControl = ({
|
|
|
87
87
|
|
|
88
88
|
useEffect(() => {
|
|
89
89
|
onChange(selectedValue);
|
|
90
|
-
|
|
90
|
+
// only call onChange once when the component mounts, to maintain previous behavior
|
|
91
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
92
|
+
}, []);
|
|
91
93
|
|
|
92
94
|
return (
|
|
93
95
|
<div
|
|
@@ -103,8 +105,13 @@ const SegmentedControl = ({
|
|
|
103
105
|
})}
|
|
104
106
|
role={mode !== 'input' ? 'tablist' : undefined}
|
|
105
107
|
>
|
|
106
|
-
{segmentsWithRefs.map((segment) =>
|
|
107
|
-
|
|
108
|
+
{segmentsWithRefs.map((segment) => {
|
|
109
|
+
const onSelect = () => {
|
|
110
|
+
setAnimate(true);
|
|
111
|
+
setSelectedValue(segment.value);
|
|
112
|
+
onChange(segment.value);
|
|
113
|
+
};
|
|
114
|
+
return mode === 'input' ? (
|
|
108
115
|
<label
|
|
109
116
|
ref={segment.ref as React.RefObject<HTMLLabelElement>}
|
|
110
117
|
key={segment.id}
|
|
@@ -120,10 +127,7 @@ const SegmentedControl = ({
|
|
|
120
127
|
name={name}
|
|
121
128
|
value={segment.value}
|
|
122
129
|
checked={selectedValue === segment.value}
|
|
123
|
-
onChange={
|
|
124
|
-
setAnimate(true);
|
|
125
|
-
setSelectedValue(segment.value);
|
|
126
|
-
}}
|
|
130
|
+
onChange={onSelect}
|
|
127
131
|
/>
|
|
128
132
|
<Body
|
|
129
133
|
className="segmented-control__text"
|
|
@@ -149,10 +153,7 @@ const SegmentedControl = ({
|
|
|
149
153
|
className={classNames('segmented-control__segment', 'segmented-control__button', {
|
|
150
154
|
'segmented-control__selected-segment': selectedValue === segment.value,
|
|
151
155
|
})}
|
|
152
|
-
onClick={
|
|
153
|
-
setAnimate(true);
|
|
154
|
-
setSelectedValue(segment.value);
|
|
155
|
-
}}
|
|
156
|
+
onClick={onSelect}
|
|
156
157
|
>
|
|
157
158
|
<Body
|
|
158
159
|
as="span"
|
|
@@ -166,8 +167,8 @@ const SegmentedControl = ({
|
|
|
166
167
|
{segment.label}
|
|
167
168
|
</Body>
|
|
168
169
|
</button>
|
|
169
|
-
)
|
|
170
|
-
)}
|
|
170
|
+
);
|
|
171
|
+
})}
|
|
171
172
|
</div>
|
|
172
173
|
</div>
|
|
173
174
|
);
|