aboutsummaryrefslogtreecommitdiff
path: root/src/stores/identity.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/stores/identity.ts')
-rw-r--r--src/stores/identity.ts14
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;