diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2025-10-26 16:46:04 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2025-11-07 17:01:41 -0500 |
| commit | 78d901328261d2306cf59c8e83fc217a63aa4a64 (patch) | |
| tree | b2999341645dec61e8143d7bb1b8a9d0056e0db1 /ui/routes/(app)/me | |
| parent | 1f44cd930cdff94bb8cf04f645a5b035507438d9 (diff) | |
Add a button to the client to set up a push subscription.
Once a user has set up a push subscription, the client will re-establish it as needed whenever possible, falling back to manual intervention only when it is unable to create a push subscription.
This change imposes some architectural changes to the client, though they're not huge: the `session` type now includes a body of state (`push`) whose methods also call into the Pilcrow API. Previously, calls to the API were not made within the `session` types, and were instead only made by page and layout code, but orchestrating that for the push subscription lifecycle proved too complex to deal with. This is an experimental alternative, but it might be something we explore further in the future.
Diffstat (limited to 'ui/routes/(app)/me')
| -rw-r--r-- | ui/routes/(app)/me/+page.svelte | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/ui/routes/(app)/me/+page.svelte b/ui/routes/(app)/me/+page.svelte index 0c960c8..ddb1245 100644 --- a/ui/routes/(app)/me/+page.svelte +++ b/ui/routes/(app)/me/+page.svelte @@ -2,10 +2,16 @@ import LogOut from '$lib/components/LogOut.svelte'; import Invites from '$lib/components/Invites.svelte'; import ChangePassword from '$lib/components/ChangePassword.svelte'; + import PushSubscription from '$lib/components/PushSubscription.svelte'; import { goto } from '$app/navigation'; import * as api from '$lib/apiServer.js'; + const { data } = $props(); + const { session } = data; + const subscription = $derived(session.push.subscription); + const vapid = $derived(session.push.vapidKey); + let invites = $state([]); async function logOut() { @@ -25,10 +31,16 @@ invites.push(response.data); } } + + async function subscribe() { + await session.push.subscribe(); + } </script> <ChangePassword {changePassword} /> <hr /> +<PushSubscription {subscription} {vapid} {subscribe} /> +<hr /> <Invites {invites} {createInvite} /> <hr /> <LogOut {logOut} /> |
