Update store/routes

This commit is contained in:
jeffvli
2022-10-24 22:20:35 -07:00
parent f8e7d02daf
commit 8973571147
10 changed files with 418 additions and 293 deletions
+124
View File
@@ -0,0 +1,124 @@
import create from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { Server } from '@/renderer/api/types';
export interface AuthState {
accessToken: string;
currentServer?: Server;
permissions: {
isAdmin: boolean;
};
refreshToken: string;
serverCredentials: {
enabled: boolean;
id: string;
serverId: string;
token: string;
username: string;
}[];
serverKey: string;
serverUrl: string;
}
export interface AuthSlice extends AuthState {
addServerCredential: (options: {
enabled: boolean;
id: string;
serverId: string;
token: string;
username: string;
}) => void;
deleteServerCredential: (options: { id: string }) => void;
disableServerCredential: (options: { id: string }) => void;
enableServerCredential: (options: { id: string }) => void;
login: (auth: Partial<AuthState>) => void;
logout: () => void;
setCurrentServer: (server: Server) => void;
}
const persistedState = JSON.parse(
localStorage.getItem('authentication') || '{}'
);
export const useAuthStore = create<AuthSlice>()(
persist(
devtools(
immer((set) => ({
accessToken: '',
addServerCredential: (options) => {
set((state) => {
state.serverCredentials = state.serverCredentials.filter(
(c) => c.username !== options.username
);
state.serverCredentials.push(options);
});
},
currentServer: undefined,
deleteServerCredential: (options) => {
set((state) => {
state.serverCredentials = state.serverCredentials.filter(
(credential) => credential.id !== options.id
);
});
},
disableServerCredential: (options) => {
set((state) => {
state.serverCredentials = state.serverCredentials.map(
(credential) => {
if (credential.id === options.id) {
credential.enabled = false;
}
return credential;
}
);
});
},
enableServerCredential: (options) => {
set((state) => {
state.serverCredentials = state.serverCredentials.map(
(credential) => {
if (credential.id === options.id) {
credential.enabled = true;
}
return credential;
}
);
});
},
login: (auth: Partial<AuthState>) => {
return set({ ...auth });
},
logout: () => {
return set({
accessToken: undefined,
permissions: { isAdmin: false },
refreshToken: undefined,
});
},
permissions: {
isAdmin: false,
},
refreshToken: '',
serverCredentials: [],
serverKey: '',
serverPermissions: '',
serverUrl: '',
setCurrentServer: (server: Server) => {
const prev = JSON.parse(
localStorage.getItem('authentication') || '{}'
);
localStorage.setItem(
'authentication',
JSON.stringify({
...prev,
state: { ...prev.state, currentServer: server },
})
);
return set({ currentServer: server });
},
}))
),
{ name: 'authentication' }
)
);