Merge pull request #235 from Overbryd/fix/notification-timeout

Fix InlineNotification and ToastNotification timeout
This commit is contained in:
Eric Liu 2020-08-23 13:29:07 -07:00 committed by GitHub
commit c00dbe6830
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 14 deletions

View file

@ -17,6 +17,12 @@
*/ */
export let lowContrast = false; export let lowContrast = false;
/**
* Set the timeout duration (ms) to hide the notification after opening it
* @type {number} [timeout=0]
*/
export let timeout = 0;
/** /**
* Set the `role` attribute * Set the `role` attribute
* @type {string} [role="alert"] * @type {string} [role="alert"]
@ -47,14 +53,30 @@
*/ */
export let iconDescription = "Closes notification"; export let iconDescription = "Closes notification";
import { createEventDispatcher } from "svelte"; import { createEventDispatcher, onMount } from "svelte";
import NotificationIcon from "./NotificationIcon.svelte"; import NotificationIcon from "./NotificationIcon.svelte";
import NotificationTextDetails from "./NotificationTextDetails.svelte"; import NotificationTextDetails from "./NotificationTextDetails.svelte";
import NotificationButton from "./NotificationButton.svelte"; import NotificationButton from "./NotificationButton.svelte";
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
$: open = true; let open = true;
let timeoutId = undefined;
function close() {
open = false;
dispatch('close');
}
onMount(() => {
if (timeout) {
timeoutId = setTimeout(() => close(), timeout);
}
return () => {
clearTimeout(timeoutId);
};
});
</script> </script>
{#if open} {#if open}
@ -81,10 +103,7 @@
<NotificationButton <NotificationButton
{iconDescription} {iconDescription}
{notificationType} {notificationType}
on:click={() => { on:click={close} />
open = false;
dispatch('close');
}} />
{/if} {/if}
</div> </div>
{/if} {/if}

View file

@ -18,7 +18,7 @@
export let lowContrast = false; export let lowContrast = false;
/** /**
* Set the timeout duration (ms) to hide the notification after closing it * Set the timeout duration (ms) to hide the notification after opening it
* @type {number} [timeout=0] * @type {number} [timeout=0]
*/ */
export let timeout = 0; export let timeout = 0;
@ -69,11 +69,14 @@
let open = true; let open = true;
let timeoutId = undefined; let timeoutId = undefined;
function close() {
open = false;
dispatch('close');
}
onMount(() => { onMount(() => {
if (timeout) { if (timeout) {
timeoutId = setTimeout(() => { timeoutId = setTimeout(() => close(), timeout);
open = false;
}, timeout);
} }
return () => { return () => {
@ -102,10 +105,7 @@
<NotificationButton <NotificationButton
{iconDescription} {iconDescription}
{notificationType} {notificationType}
on:click={() => { on:click={close} />
open = false;
dispatch('close');
}} />
{/if} {/if}
</div> </div>
{/if} {/if}