diff options
Diffstat (limited to 'src/lib/Utility/persistentStore.ts')
| -rw-r--r-- | src/lib/Utility/persistentStore.ts | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/lib/Utility/persistentStore.ts b/src/lib/Utility/persistentStore.ts index 7df3049f..a3837a5b 100644 --- a/src/lib/Utility/persistentStore.ts +++ b/src/lib/Utility/persistentStore.ts @@ -5,14 +5,23 @@ export const persistentStore = <T>(key: string, initial: T): Writable<T> => { const store = writable<T>(initial); if (browser) - import("localforage").then((localforage) => { - localforage.default.getItem<T>(key).then((value) => { - if (value !== null) store.set(value); - }); + import("localforage").then(async (localforage) => { + let hydrated = false; + let pendingValue = initial; store.subscribe((value) => { - localforage.default.setItem(key, value); + pendingValue = value; + + if (hydrated) localforage.default.setItem(key, value); }); + + const value = await localforage.default.getItem<T>(key); + + if (value !== null) store.set(value); + + hydrated = true; + + await localforage.default.setItem(key, pendingValue); }); return store; |