core-components: invoke onChange only on focus

Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
This commit is contained in:
Vincenzo Scamporlino
2023-11-23 20:59:37 +01:00
committed by Fredrik Adelöw
parent fcf3898e1f
commit 8e110d5a5f
2 changed files with 17 additions and 2 deletions
@@ -83,4 +83,16 @@ describe('<HeaderTabs />', () => {
expect(rendered.getByText('Alarms')).toBeInTheDocument();
expect(rendered.getByText('three new alarms')).toBeInTheDocument();
});
it('should trigger onChange only once', async () => {
const mockOnChange = jest.fn();
const user = userEvent.setup();
const rendered = await renderInTestApp(
<HeaderTabs tabs={mockTabs} onChange={mockOnChange} />,
);
await user.click(rendered.getByText('Docs'));
expect(mockOnChange).toHaveBeenCalledTimes(1);
});
});
@@ -81,11 +81,14 @@ export function HeaderTabs(props: HeaderTabsProps) {
const styles = useStyles();
const handleChange = useCallback(
(_: React.ChangeEvent<{}>, index: number) => {
(e: React.ChangeEvent<{}>, index: number) => {
if (selectedIndex === undefined) {
setSelectedTab(index);
}
if (onChange) onChange(index);
if (e.type === 'focus') {
onChange?.(index);
}
},
[selectedIndex, onChange],
);