Skip to content

Commit 3d188ce

Browse files
fix: selectable tile onChange method gives old value on keyboard sleect (#18859)
* fix: selectable tile onChange method gives old value on keyboard sleect * fix: added console in storybook for testing * fix: remove console
1 parent 86b0232 commit 3d188ce

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

packages/react/src/components/Tile/Tile-test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,17 @@ describe('Tile', () => {
499499
true,
500500
'selectable-tile-1'
501501
);
502+
// should de-select when user press enter key on selected tile.
503+
tile.focus();
504+
await userEvent.keyboard('[Enter]');
505+
expect(onChange).toHaveBeenCalled();
506+
expect(onChange).toHaveBeenCalledWith(
507+
expect.objectContaining({
508+
type: 'keydown',
509+
}),
510+
false,
511+
'selectable-tile-1'
512+
);
502513
});
503514

504515
it('should call onKeyDown', async () => {

packages/react/src/components/Tile/Tile.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -515,15 +515,19 @@ export const SelectableTile = React.forwardRef<
515515
evt?.persist?.();
516516
if (matches(evt, [keys.Enter, keys.Space])) {
517517
evt.preventDefault();
518-
setIsSelected(!isSelected);
519-
onChange(evt, isSelected, id);
518+
setIsSelected((prevSelected) => {
519+
const newSelected = !prevSelected;
520+
onChange(evt, newSelected, id);
521+
return newSelected;
522+
});
520523
}
521524
keyDownHandler(evt);
522525
}
523526

524527
function handleChange(event) {
525-
setIsSelected(event.target.checked);
526-
onChange(event, isSelected, id);
528+
const newSelected = event.target.checked;
529+
setIsSelected(newSelected);
530+
onChange(event, newSelected, id);
527531
}
528532

529533
if (selected !== prevSelected) {

0 commit comments

Comments
 (0)