diff --git a/app/store/access.ts b/app/store/access.ts index b89b080d8..30f8ce146 100644 --- a/app/store/access.ts +++ b/app/store/access.ts @@ -210,7 +210,7 @@ export const useAccessStore = createPersistStore( }) .then((res: DangerConfig) => { console.log("[Config] got config from server", res); - set(() => ({ ...res })); + set(() => ({ lastUpdateTime: Date.now(), ...res })); }) .catch(() => { console.error("[Config] failed to fetch config"); diff --git a/app/utils/sync.ts b/app/utils/sync.ts index 645d8ac11..fed030679 100644 --- a/app/utils/sync.ts +++ b/app/utils/sync.ts @@ -128,7 +128,13 @@ const MergeStates: StateMerger = { }); const remoteDeletedSessionIds = remoteState.deletedSessionIds || {}; + + const finalIds: Record = {}; localState.sessions = localState.sessions.filter((localSession) => { + if (finalIds[localSession.id]) { + return false; + } + finalIds[localSession.id] = true; return ( (remoteDeletedSessionIds[localSession.id] || -1) <= localSession.lastUpdate @@ -209,9 +215,9 @@ export function mergeWithUpdate( remoteState: T, ) { const localUpdateTime = localState.lastUpdateTime ?? 0; - const remoteUpdateTime = localState.lastUpdateTime ?? 1; + const remoteUpdateTime = remoteState.lastUpdateTime ?? 1; - if (localUpdateTime < remoteUpdateTime) { + if (localUpdateTime >= remoteUpdateTime) { merge(remoteState, localState); return { ...remoteState }; } else {