From 6b9773a23d89442015cb93941f33b3bb92bb28f2 Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Thu, 9 Jan 2025 12:42:20 -0800 Subject: [PATCH] enh: realtime user record updates --- packages/dashboard/src/util/stores.ts | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/dashboard/src/util/stores.ts b/packages/dashboard/src/util/stores.ts index d0240dc3..4f48e4e1 100644 --- a/packages/dashboard/src/util/stores.ts +++ b/packages/dashboard/src/util/stores.ts @@ -99,10 +99,11 @@ export const init = () => { const user = authStoreProps.model as UserFields userStore.set(isLoggedIn ? user : undefined) isAuthStateInitialized.set(true) + tryUserSubscribe(user?.id) }) userStore.subscribe((user) => { - console.log({ user }) + console.log(`userStore.subscribe`, { user }) isUserPaid.set( [ SubscriptionType.Founder, @@ -158,3 +159,31 @@ export const init = () => { tryInstanceSubscribe() }) } + +const tryUserSubscribe = (() => { + let unsub: UnsubscribeFunc | undefined + let tid: NodeJS.Timeout | undefined + + const _trySubscribe = (id?: string) => { + clearTimeout(tid) + unsub?.() + unsub = undefined + if (!id) return + console.log('Subscribing to user', id) + client() + .client.collection('users') + .subscribe(id, (data) => { + console.log('User subscribed update', data) + userStore.set(data.record) + }) + .then((u) => { + unsub = u + }) + .catch(() => { + console.error('Failed to subscribe to user') + tid = setTimeout(_trySubscribe, 1000) + }) + } + + return _trySubscribe +})()