mirror of
https://github.com/jeffvli/feishin.git
synced 2026-06-12 23:32:19 +02:00
Update store/routes
This commit is contained in:
@@ -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' }
|
||||
)
|
||||
);
|
||||
Reference in New Issue
Block a user