diff --git a/src/Notification/ToastNotification.svelte b/src/Notification/ToastNotification.svelte index 63da68c0..b8ac4924 100644 --- a/src/Notification/ToastNotification.svelte +++ b/src/Notification/ToastNotification.svelte @@ -55,6 +55,9 @@ let timeoutId = undefined; function close(closeFromTimeout) { + // Clear the timer if the close button was clicked. + clearTimeout(timeoutId); + const shouldContinue = dispatch( "close", { timeout: closeFromTimeout === true }, @@ -66,14 +69,24 @@ } onMount(() => { - if (timeout) { - timeoutId = setTimeout(() => close(true), timeout); - } - return () => { clearTimeout(timeoutId); }; }); + + $: if (typeof window !== "undefined") { + /** + * Clear the timer if {@link timeout} changes. + * If set to `0`, no new timeout is started. + * Else, a new timeout is started if {@link open} is not set to `false`. + */ + clearTimeout(timeoutId); + + /** Only start the timer of {@link open} has not been set to `false`. */ + if (open && timeout) { + timeoutId = setTimeout(() => close(true), timeout); + } + }