@roochnetwork/rooch-sdk-kit
Version:
Rooch SDK Kit
65 lines (64 loc) • 1.89 kB
JavaScript
// src/provider/sessionStore.ts
import { createStore } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import { Session } from "@roochnetwork/rooch-sdk";
function createSessionStore({ storage, storageKey, sessionConf }) {
return createStore()(
persist(
(set, get) => ({
sessions: [],
currentSession: null,
sessionConf,
addSession(session) {
const cache = get().sessions;
cache.push(session);
set(() => ({
sessions: cache
}));
},
setCurrentSession(session) {
if (!session) {
set(() => ({
currentSession: null
}));
} else {
const cache = get().sessions;
if (!cache.find((item) => item.getAuthKey() === session.getAuthKey())) {
cache.push(session);
}
set(() => ({
currentSession: session,
sessions: cache
}));
}
},
removeSession(session) {
const cacheSessions = get().sessions;
const cacheCurSession = get().currentSession;
set(() => ({
currentSession: cacheCurSession?.getAuthKey() === session.getAuthKey() ? null : cacheCurSession,
sessions: cacheSessions.filter((c) => c.getAuthKey() !== session.getAuthKey())
}));
}
}),
{
name: storageKey,
storage: createJSONStorage(() => storage, {
reviver: (key, value) => {
if (key === "sessions") {
return value.map((session) => Session.fromJson(session));
}
return value;
}
}),
partialize: ({ sessions }) => ({
sessions
})
}
)
);
}
export {
createSessionStore
};
//# sourceMappingURL=sessionStore.js.map