mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-04 14:30:29 +03:00
Swap to load from the latest active session in the matrixSession array and retain fallback behavior for old sessions
This commit is contained in:
parent
9095d3b479
commit
fd2d7fff17
1 changed files with 7 additions and 36 deletions
|
|
@ -1,4 +1,3 @@
|
||||||
import { atom } from 'jotai';
|
|
||||||
import {
|
import {
|
||||||
atomWithLocalStorage,
|
atomWithLocalStorage,
|
||||||
getLocalStorageItem,
|
getLocalStorageItem,
|
||||||
|
|
@ -71,22 +70,19 @@ export const getSessionStoreName = (session: Session): SessionStoreName => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const MATRIX_SESSIONS_KEY = 'matrixSessions';
|
export const MATRIX_SESSIONS_KEY = 'matrixSessions';
|
||||||
const baseSessionsAtom = atomWithLocalStorage<Sessions>(
|
export const sessionsAtom = atomWithLocalStorage<Sessions>(
|
||||||
MATRIX_SESSIONS_KEY,
|
MATRIX_SESSIONS_KEY,
|
||||||
(key) => {
|
(key) => {
|
||||||
const defaultSessions: Sessions = [];
|
|
||||||
const sessions = getLocalStorageItem(key, defaultSessions);
|
|
||||||
|
|
||||||
// Before multi account support session was stored
|
|
||||||
// as multiple item in local storage.
|
|
||||||
// So we need these migration code.
|
|
||||||
const fallbackSession = getFallbackSession();
|
const fallbackSession = getFallbackSession();
|
||||||
if (fallbackSession) {
|
if (fallbackSession) {
|
||||||
|
console.warn('Migrating from a fallback session...');
|
||||||
|
const newSessions: Sessions = [fallbackSession];
|
||||||
|
setLocalStorageItem(key, newSessions);
|
||||||
removeFallbackSession();
|
removeFallbackSession();
|
||||||
sessions.push(fallbackSession);
|
return newSessions;
|
||||||
setLocalStorageItem(key, sessions);
|
|
||||||
}
|
}
|
||||||
return sessions;
|
|
||||||
|
return getLocalStorageItem(key, []);
|
||||||
},
|
},
|
||||||
(key, value) => {
|
(key, value) => {
|
||||||
setLocalStorageItem(key, value);
|
setLocalStorageItem(key, value);
|
||||||
|
|
@ -102,28 +98,3 @@ export type SessionsAction =
|
||||||
type: 'DELETE';
|
type: 'DELETE';
|
||||||
session: Session;
|
session: Session;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const sessionsAtom = atom<Sessions, [SessionsAction], undefined>(
|
|
||||||
(get) => get(baseSessionsAtom),
|
|
||||||
(get, set, action) => {
|
|
||||||
if (action.type === 'PUT') {
|
|
||||||
const sessions = [...get(baseSessionsAtom)];
|
|
||||||
const sessionIndex = sessions.findIndex(
|
|
||||||
(session) => session.userId === action.session.userId
|
|
||||||
);
|
|
||||||
if (sessionIndex === -1) {
|
|
||||||
sessions.push(action.session);
|
|
||||||
} else {
|
|
||||||
sessions.splice(sessionIndex, 1, action.session);
|
|
||||||
}
|
|
||||||
set(baseSessionsAtom, sessions);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (action.type === 'DELETE') {
|
|
||||||
const sessions = get(baseSessionsAtom).filter(
|
|
||||||
(session) => session.userId !== action.session.userId
|
|
||||||
);
|
|
||||||
set(baseSessionsAtom, sessions);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue