summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/desktop/src')
-rw-r--r--packages/desktop/src/index.tsx23
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>()