Skip to content

Commit 08606e9

Browse files
committed
reset toast timeout on children updates
1 parent d16e9e2 commit 08606e9

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/internal/components/Toast.test.tsx

+38
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,44 @@ describe('Toast component', () => {
262262
vi.useRealTimers();
263263
});
264264

265+
it('should reset the timer when re-triggered while already visible', async () => {
266+
vi.useFakeTimers();
267+
const handleClose = vi.fn();
268+
const durationMs = 5000;
269+
270+
const { rerender } = render(
271+
<Toast
272+
isVisible={true}
273+
position="bottom-right"
274+
onClose={handleClose}
275+
durationMs={durationMs}
276+
>
277+
<div>Test Child</div>
278+
</Toast>,
279+
);
280+
vi.advanceTimersByTime(2000);
281+
expect(handleClose).not.toHaveBeenCalled();
282+
283+
rerender(
284+
<Toast
285+
isVisible={true}
286+
position="bottom-right"
287+
onClose={handleClose}
288+
durationMs={durationMs}
289+
>
290+
<div>Updated Child</div>
291+
</Toast>,
292+
);
293+
294+
vi.advanceTimersByTime(4000);
295+
expect(handleClose).not.toHaveBeenCalled();
296+
297+
vi.advanceTimersByTime(2000);
298+
expect(handleClose).toHaveBeenCalled();
299+
300+
vi.useRealTimers();
301+
});
302+
265303
it('should not fire timer after manual close', () => {
266304
vi.useFakeTimers();
267305
const handleClose = vi.fn();

src/internal/components/Toast.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function Toast({
4444
clearTimeout(timer);
4545
}
4646
};
47-
}, [durationMs, isVisible, onClose]);
47+
}, [durationMs, isVisible, onClose, children]);
4848

4949
if (!isVisible) {
5050
return null;

0 commit comments

Comments
 (0)