summaryrefslogtreecommitdiff
path: root/ui/lib/components/PushSubscription.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'ui/lib/components/PushSubscription.svelte')
-rw-r--r--ui/lib/components/PushSubscription.svelte30
1 files changed, 30 insertions, 0 deletions
diff --git a/ui/lib/components/PushSubscription.svelte b/ui/lib/components/PushSubscription.svelte
new file mode 100644
index 0000000..aab4929
--- /dev/null
+++ b/ui/lib/components/PushSubscription.svelte
@@ -0,0 +1,30 @@
+<script>
+ let { vapid, subscription, subscribe = async () => null, ping = async () => null } = $props();
+ let pending = $state(false);
+
+ function onsubmit(callback) {
+ return async (evt) => {
+ evt.preventDefault();
+
+ pending = true;
+ try {
+ await callback();
+ } finally {
+ pending = false;
+ }
+ };
+ }
+</script>
+
+{#if !!vapid}
+ {#if !subscription}
+ <form class="form" onsubmit={onsubmit(subscribe)}>
+ <button disabled={pending} type="submit">create push subscription</button>
+ </form>
+ {/if}
+ <form class="form" onsubmit={onsubmit(ping)}>
+ <button disabled={pending} type="submit">send test notification</button>
+ </form>
+{:else}
+ Waiting for VAPID key…
+{/if}