From 14f8395b916b501c8bff2e5711a8ffb87d45c84f Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Wed, 18 Oct 2023 00:42:47 -0700 Subject: [PATCH] fix: getInstances refactor for API rate limiting --- .../dashboard/src/components/Navbar.svelte | 4 -- packages/dashboard/src/routes/+layout.svelte | 3 ++ .../app/instances/[instanceId]/+layout.svelte | 11 ++---- packages/dashboard/src/util/getInstances.ts | 38 +++++++++---------- 4 files changed, 26 insertions(+), 30 deletions(-) diff --git a/packages/dashboard/src/components/Navbar.svelte b/packages/dashboard/src/components/Navbar.svelte index 10d8e1cd..a41bad59 100644 --- a/packages/dashboard/src/components/Navbar.svelte +++ b/packages/dashboard/src/components/Navbar.svelte @@ -4,13 +4,9 @@ import MediaQuery from '$components/MediaQuery.svelte' import { DOCS_URL } from '$src/env' import { handleLogoutAndRedirect } from '$util/database' - import { getInstances } from '$util/getInstances' import { globalInstancesStore } from '$util/stores' import { values } from '@s-libs/micro-dash' - // This will query the database for all instances and then update the global state - getInstances() - const linkClasses = 'font-medium text-xl text-base-content btn btn-ghost capitalize justify-start' const subLinkClasses = diff --git a/packages/dashboard/src/routes/+layout.svelte b/packages/dashboard/src/routes/+layout.svelte index 10cdc78a..ab75d099 100644 --- a/packages/dashboard/src/routes/+layout.svelte +++ b/packages/dashboard/src/routes/+layout.svelte @@ -7,7 +7,10 @@ import '../app.css' import '../services' + import { getInstances } from '$util/getInstances' import { isUserLoggedIn } from '$util/stores' + + getInstances() diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/+layout.svelte b/packages/dashboard/src/routes/app/instances/[instanceId]/+layout.svelte index a4779793..ec8cf9e4 100644 --- a/packages/dashboard/src/routes/app/instances/[instanceId]/+layout.svelte +++ b/packages/dashboard/src/routes/app/instances/[instanceId]/+layout.svelte @@ -2,18 +2,15 @@ import { page } from '$app/stores' import AuthStateGuard from '$components/helpers/AuthStateGuard.svelte' import { getSingleInstance } from '$util/getInstances' - import { createCleanupManager } from '@pockethost/common' - import { onDestroy } from 'svelte' + import { assertTruthy } from '@pockethost/common' import { instance } from './store' - const cm = createCleanupManager() - // Run anytime the page params changes $: { - getSingleInstance($page.params.instanceId) + const { instanceId } = $page.params + assertTruthy(instanceId) + getSingleInstance(instanceId) } - - onDestroy(() => cm.shutdown()) diff --git a/packages/dashboard/src/util/getInstances.ts b/packages/dashboard/src/util/getInstances.ts index e5e58796..1b1473cb 100644 --- a/packages/dashboard/src/util/getInstances.ts +++ b/packages/dashboard/src/util/getInstances.ts @@ -1,7 +1,7 @@ import { browser } from '$app/environment' import { client } from '$src/pocketbase' import { instance } from '$src/routes/app/instances/[instanceId]/store' -import { globalInstancesStore } from '$util/stores' +import { globalInstancesStore, isUserLoggedIn } from '$util/stores' import { LoggerService, assertExists, @@ -13,32 +13,32 @@ import { onDestroy, onMount } from 'svelte' export const getInstances = async () => { const { error } = LoggerService() - onMount(() => { - if (browser) { - ;(async () => { - const { getAllInstancesById } = client() + const cm = createCleanupManager() + onMount(async () => { + const unsub = isUserLoggedIn.subscribe(async (isLoggedIn) => { + if (!isLoggedIn) return + const { getAllInstancesById } = client() - const instances = await getAllInstancesById() + const instances = await getAllInstancesById() - globalInstancesStore.set(instances) + globalInstancesStore.set(instances) - client() - .client.collection('instances') - .subscribe('*', (data) => { - globalInstancesStore.update((instances) => { - instances[data.record.id] = data.record - return instances - }) + const unsub = await client() + .client.collection('instances') + .subscribe('*', (data) => { + globalInstancesStore.update((instances) => { + instances[data.record.id] = data.record + return instances }) - })().catch(error) - } + }) + cm.add(unsub) + }) + cm.add(unsub) }) // Stop listening to the db if this component unmounts onDestroy(() => { - if (browser) { - client().client.collection('instances').unsubscribe('*').catch(error) - } + cm.shutdown().catch(console.error) }) }