Skip to content

Commit 298575d

Browse files
committed
[ToggleButtons] normalize onChange api
This is a breaking change. Previously only the value was passed to the onChange callback despite the documentation mentioning the event as the first arg. Since every other on* callback in the core passes the event as the first argument we use the same approach here.
1 parent 6ac978a commit 298575d

File tree

7 files changed

+25
-19
lines changed

7 files changed

+25
-19
lines changed

docs/src/pages/lab/toggle-button/ToggleButtons.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class ToggleButtons extends React.Component {
3333
formats: ['bold'],
3434
};
3535

36-
handleFormat = formats => this.setState({ formats });
36+
handleFormat = (event, formats) => this.setState({ formats });
3737

38-
handleAlignment = alignment => this.setState({ alignment });
38+
handleAlignment = (event, alignment) => this.setState({ alignment });
3939

4040
render() {
4141
const { classes } = this.props;

packages/material-ui-lab/src/ToggleButton/ToggleButton.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ class ToggleButton extends React.Component {
8989
const { onChange, onClick, value } = this.props;
9090

9191
if (onClick) {
92-
onClick(event);
92+
onClick(event, value);
9393
if (event.isDefaultPrevented()) {
9494
return;
9595
}
9696
}
9797

9898
if (onChange) {
99-
onChange(value);
99+
onChange(event, value);
100100
}
101101
};
102102

packages/material-ui-lab/src/ToggleButton/ToggleButton.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ describe('<ToggleButton />', () => {
7878
wrapper.simulate('click', event);
7979

8080
assert.strictEqual(handleChange.callCount, 1);
81-
assert.strictEqual(handleChange.args[0][0], 'one');
81+
assert.strictEqual(handleChange.args[0][1], 'one');
8282
});
8383

8484
it('should not be called if the click is prevented', () => {

packages/material-ui-lab/src/ToggleButtonGroup/ToggleButtonGroup.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@ import * as React from 'react';
33
import { StandardProps } from '@material-ui/core';
44

55
export interface ToggleButtonGroupProps
6-
extends StandardProps<React.HTMLAttributes<HTMLDivElement>, ToggleButtonGroupClassKey> {
6+
extends StandardProps<
7+
React.HTMLAttributes<HTMLDivElement>,
8+
ToggleButtonGroupClassKey,
9+
'onChange'
10+
> {
711
selected?: boolean;
812
exclusive?: boolean;
13+
onChange?: (event: React.MouseEvent<HTMLElement>, value: any) => void;
914
value?: any;
1015
}
1116

packages/material-ui-lab/src/ToggleButtonGroup/ToggleButtonGroup.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const styles = theme => ({
2121
});
2222

2323
class ToggleButtonGroup extends React.Component {
24-
handleChange = buttonValue => {
24+
handleChange = (event, buttonValue) => {
2525
const { onChange, value } = this.props;
2626

2727
if (!onChange) {
@@ -39,17 +39,17 @@ class ToggleButtonGroup extends React.Component {
3939
newValue = value ? [...value, buttonValue] : [buttonValue];
4040
}
4141

42-
onChange(newValue);
42+
onChange(event, newValue);
4343
};
4444

45-
handleExclusiveChange = buttonValue => {
45+
handleExclusiveChange = (event, buttonValue) => {
4646
const { onChange, value } = this.props;
4747

4848
if (!onChange) {
4949
return;
5050
}
5151

52-
onChange(value === buttonValue ? null : buttonValue);
52+
onChange(event, value === buttonValue ? null : buttonValue);
5353
};
5454

5555
render() {
@@ -119,7 +119,8 @@ ToggleButtonGroup.propTypes = {
119119
*
120120
* @param {object} event The event source of the callback
121121
* @param {object} value of the selected buttons. When `exclusive` is true
122-
* this is a single value; when false an array of selected values.
122+
* this is a single value; when false an array of selected values. If no value
123+
* is selected the value is null.
123124
*/
124125
onChange: PropTypes.func,
125126
/**

packages/material-ui-lab/src/ToggleButtonGroup/ToggleButtonGroup.test.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ describe('<ToggleButtonGroup />', () => {
143143
.simulate('click');
144144

145145
assert.strictEqual(handleChange.callCount, 1);
146-
assert.strictEqual(handleChange.args[0][0], null);
146+
assert.strictEqual(handleChange.args[0][1], null);
147147
});
148148

149149
it('should be a single value when value is toggled on', () => {
@@ -161,7 +161,7 @@ describe('<ToggleButtonGroup />', () => {
161161
.simulate('click');
162162

163163
assert.strictEqual(handleChange.callCount, 1);
164-
assert.strictEqual(handleChange.args[0][0], 'one');
164+
assert.strictEqual(handleChange.args[0][1], 'one');
165165
});
166166

167167
it('should be a single value when a new value is toggled on', () => {
@@ -179,7 +179,7 @@ describe('<ToggleButtonGroup />', () => {
179179
.simulate('click');
180180

181181
assert.strictEqual(handleChange.callCount, 1);
182-
assert.strictEqual(handleChange.args[0][0], 'two');
182+
assert.strictEqual(handleChange.args[0][1], 'two');
183183
});
184184
});
185185

@@ -199,7 +199,7 @@ describe('<ToggleButtonGroup />', () => {
199199
.simulate('click');
200200

201201
assert.strictEqual(handleChange.callCount, 1);
202-
assert.strictEqual(handleChange.args[0][0], null);
202+
assert.strictEqual(handleChange.args[0][1], null);
203203
});
204204

205205
it('should be an array with a single value when value is toggled on', () => {
@@ -217,7 +217,7 @@ describe('<ToggleButtonGroup />', () => {
217217
.simulate('click');
218218

219219
assert.strictEqual(handleChange.callCount, 1);
220-
assert.deepEqual(handleChange.args[0][0], ['one']);
220+
assert.deepEqual(handleChange.args[0][1], ['one']);
221221
});
222222

223223
it('should be an array with a single value when a secondary value is toggled off', () => {
@@ -235,7 +235,7 @@ describe('<ToggleButtonGroup />', () => {
235235
.simulate('click');
236236

237237
assert.strictEqual(handleChange.callCount, 1);
238-
assert.deepEqual(handleChange.args[0][0], ['two']);
238+
assert.deepEqual(handleChange.args[0][1], ['two']);
239239
});
240240

241241
it('should be an array of all selected values when a second value is toggled on', () => {
@@ -253,7 +253,7 @@ describe('<ToggleButtonGroup />', () => {
253253
.simulate('click');
254254

255255
assert.strictEqual(handleChange.callCount, 1);
256-
assert.deepEqual(handleChange.args[0][0], ['one', 'two']);
256+
assert.deepEqual(handleChange.args[0][1], ['one', 'two']);
257257
});
258258
});
259259
});

pages/lab/api/toggle-button-group.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import ToggleButtonGroup from '@material-ui/lab/ToggleButton/ToggleButtonGroup';
2222
| <span class="prop-name required">children *</span> | <span class="prop-type">node |   | The content of the button. |
2323
| <span class="prop-name">classes</span> | <span class="prop-type">object |   | Useful to extend the style applied to components. |
2424
| <span class="prop-name">exclusive</span> | <span class="prop-type">bool | <span class="prop-default">false</span> | If `true`, only allow one of the child ToggleButton values to be selected. |
25-
| <span class="prop-name">onChange</span> | <span class="prop-type">func |   | Callback fired when the value changes.<br><br>**Signature:**<br>`function(event: object, value: object) => void`<br>*event:* The event source of the callback<br>*value:* of the selected buttons. When `exclusive` is true this is a single value; when false an array of selected values. |
25+
| <span class="prop-name">onChange</span> | <span class="prop-type">func |   | Callback fired when the value changes.<br><br>**Signature:**<br>`function(event: object, value: object) => void`<br>*event:* The event source of the callback<br>*value:* of the selected buttons. When `exclusive` is true this is a single value; when false an array of selected values. If no value is selected the value is null. |
2626
| <span class="prop-name">selected</span> | <span class="prop-type">union:&nbsp;bool&nbsp;&#124;<br>&nbsp;enum:&nbsp;'auto'<br><br> | <span class="prop-default">'auto'</span> | If `true`, render the group in a selected state. If `auto` (the default) render in a selected state if `value` is not empty. |
2727
| <span class="prop-name">value</span> | <span class="prop-type">any | <span class="prop-default">null</span> | The currently selected value within the group or an array of selected values when `exclusive` is false. |
2828

0 commit comments

Comments
 (0)