diff options
Diffstat (limited to 'packages/desktop/src')
| -rw-r--r-- | packages/desktop/src/index.tsx | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index d6ee121af..3b3002967 100644 --- a/packages/desktop/src/index.tsx +++ b/packages/desktop/src/index.tsx @@ -89,11 +89,26 @@ const createPlatform = (password: Accessor<string | null>): Platform => ({ length(): Promise<number> } - const WRITE_DEBOUNCE_MS = 250 + const WRITE_DEBOUNCE_MS = 250 - const storeCache = new Map<string, Promise<StoreLike>>() - const apiCache = new Map<string, AsyncStorage & { flush: () => Promise<void> }>() - const memoryCache = new Map<string, StoreLike>() + const storeCache = new Map<string, Promise<StoreLike>>() + const apiCache = new Map<string, AsyncStorage & { flush: () => Promise<void> }>() + const memoryCache = new Map<string, StoreLike>() + + const flushAll = async () => { + const apis = Array.from(apiCache.values()) + await Promise.all(apis.map((api) => api.flush().catch(() => undefined))) + } + + if ("addEventListener" in globalThis) { + const handleVisibility = () => { + if (document.visibilityState !== "hidden") return + void flushAll() + } + + window.addEventListener("pagehide", () => void flushAll()) + document.addEventListener("visibilitychange", handleVisibility) + } const createMemoryStore = () => { const data = new Map<string, string>() |
