From 1cbd61888f6035a70912a91e0ecd6720f983db04 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Tue, 25 Apr 2023 01:36:26 -0700 Subject: [PATCH] Refactor server list as hash table --- src/renderer/store/auth.store.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/renderer/store/auth.store.ts b/src/renderer/store/auth.store.ts index 4ecdf99e..1037358e 100644 --- a/src/renderer/store/auth.store.ts +++ b/src/renderer/store/auth.store.ts @@ -11,14 +11,14 @@ import { ServerListItem } from '/@/renderer/types'; export interface AuthState { currentServer: ServerListItem | null; deviceId: string; - serverList: ServerListItem[]; + serverList: Record; } export interface AuthSlice extends AuthState { actions: { addServer: (args: ServerListItem) => void; deleteServer: (id: string) => void; - getServer: (id?: string) => ServerListItem | undefined; + getServer: (id: string) => ServerListItem | undefined; setCurrentServer: (server: ServerListItem | null) => void; updateServer: (id: string, args: Partial) => void; }; @@ -31,19 +31,20 @@ export const useAuthStore = create()( actions: { addServer: (args) => { set((state) => { - state.serverList.push(args); + state.serverList[args.id] = args; }); }, deleteServer: (id) => { set((state) => { - state.serverList = state.serverList.filter((credential) => credential.id !== id); + delete state.serverList[id]; + if (state.currentServer?.id === id) { state.currentServer = null; } }); }, getServer: (id) => { - return get().serverList.find((server) => server.id === id); + return get().serverList[id]; }, setCurrentServer: (server) => { set((state) => { @@ -61,16 +62,17 @@ export const useAuthStore = create()( }, updateServer: (id: string, args: Partial) => { set((state) => { - const server = state.serverList.find((server) => server.id === id); - if (server) { - Object.assign(server, { ...server, ...args }); + state.serverList[id] = { ...state.serverList[id], ...args }; + + if (state.currentServer?.id === id) { + state.currentServer = { ...state.serverList[id], ...args }; } }); }, }, currentServer: null, deviceId: nanoid(), - serverList: [], + serverList: {}, })), { name: 'store_authentication' }, ),