Skip to content

Commit 9be39d0

Browse files
JackRobardsrluders
andauthored
feat(Toast): add onClick prop to Toast.Toggle (#607) (#666)
Fixes #607 Co-authored-by: Ricardo Lüders <[email protected]>
1 parent 3ab9108 commit 9be39d0

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/lib/components/Toast/Toast.spec.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
11
import { render, screen } from '@testing-library/react';
22
import userEvent from '@testing-library/user-event';
3-
import { describe, expect, it } from 'vitest';
3+
import { describe, expect, it, vi } from 'vitest';
44
import { Toast } from './Toast';
55

66
describe.concurrent('Components / Toast', () => {
77
describe.concurrent('Keyboard interactions', () => {
88
it('should close `Toast` when `Space` is pressed on `Toast.Toggle`', async () => {
99
const user = userEvent.setup();
10+
const handleClick = vi.fn();
11+
1012
render(
1113
<Toast>
12-
<Toast.Toggle />
14+
<Toast.Toggle onClick={handleClick} />
1315
</Toast>,
1416
);
1517

1618
await user.tab();
1719
await user.keyboard('[Space]');
1820

1921
expect(toast().className).toContain('opacity-0');
22+
23+
expect(handleClick).toHaveBeenCalled();
2024
});
2125
});
2226
});

src/lib/components/Toast/ToastToggle.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import classNames from 'classnames';
2-
import type { ComponentProps, FC } from 'react';
2+
import type { ComponentProps, FC, MouseEvent } from 'react';
33
import { HiX } from 'react-icons/hi';
44
import type { DeepPartial } from '..';
55
import { mergeDeep } from '../../helpers/mergeDeep';
@@ -18,14 +18,16 @@ export interface ToastToggleProps extends ComponentProps<'button'> {
1818

1919
export const ToastToggle: FC<ToastToggleProps> = ({
2020
className,
21+
onClick,
2122
theme: customTheme = {},
2223
xIcon: XIcon = HiX,
2324
...props
2425
}) => {
2526
const theme = mergeDeep(useTheme().theme.toast.toggle, customTheme);
2627
const { duration, isClosed, isRemoved, setIsClosed, setIsRemoved } = useToastContext();
2728

28-
const handleClick = () => {
29+
const handleClick = (e: MouseEvent<HTMLButtonElement>) => {
30+
if (onClick) onClick(e);
2931
setIsClosed(!isClosed);
3032
setTimeout(() => setIsRemoved(!isRemoved), duration);
3133
};

0 commit comments

Comments
 (0)