aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Utility
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Utility')
-rw-r--r--src/lib/Utility/persistentStore.ts19
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;