diff options
Diffstat (limited to 'src/stores/identity.ts')
| -rw-r--r-- | src/stores/identity.ts | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/stores/identity.ts b/src/stores/identity.ts index 52e0cba7..abe0b40d 100644 --- a/src/stores/identity.ts +++ b/src/stores/identity.ts @@ -13,16 +13,28 @@ const createStore = () => { const store = writable<UserIdentity>(defaultIdentity); let state: UserIdentity = defaultIdentity; let hydrated = !browser; + let changedBeforeHydration = false; + let initialEmission = true; + let applyingStoredValue = false; store.subscribe((value) => { state = value; + if (browser && !hydrated && !initialEmission && !applyingStoredValue) + changedBeforeHydration = true; + if (browser && hydrated) localforage.setItem("identity", value); + + initialEmission = false; }); if (browser) localforage.getItem<UserIdentity>("identity").then(async (value) => { - if (value && typeof value === "object") store.set(value); + if (value && typeof value === "object" && !changedBeforeHydration) { + applyingStoredValue = true; + store.set(value); + applyingStoredValue = false; + } hydrated = true; |