105 lines
3.2 KiB
TypeScript
105 lines
3.2 KiB
TypeScript
import { lens } from '@dhmk/zustand-lens';
|
|
import { SetStateAction } from 'react';
|
|
import { UserFavorite, UserInfo } from './types';
|
|
import { StorageKeys } from '@/shared/constants/local-storage';
|
|
import { StatementSync } from 'node:sqlite';
|
|
|
|
export interface UserInfoState {
|
|
userInfo: UserInfo;
|
|
setUserInfo: (update: SetStateAction<Partial<UserInfo>>) => void;
|
|
resetUserInfo: () => void;
|
|
userFavorite: Array<UserFavorite>;
|
|
setUserFavorite: (update: SetStateAction<Array<UserFavorite>>) => void;
|
|
userMids: Array<string>;
|
|
setUserMids: (update: SetStateAction<Array<string>>) => void;
|
|
selectOptionsMids: Array<Record<string, string>>;
|
|
setSelectOptionsMids: (update: SetStateAction<Array<Record<string, string>>>) => void;
|
|
mid: string;
|
|
setMid: (update: SetStateAction<string>) => void;
|
|
};
|
|
|
|
const initialUserInfoState = {
|
|
userInfo: {} as UserInfo,
|
|
userFavorite: [] as Array<UserFavorite>,
|
|
userMids: [] as Array<string>,
|
|
selectOptionsMids: [] as Array<Record<string, string>>,
|
|
mid: '' as string
|
|
} as UserInfoState;
|
|
|
|
export const createUserInfoStore = lens<UserInfoState>((set, get) => ({
|
|
...initialUserInfoState,
|
|
setUserInfo: (update) => {
|
|
set((state: UserInfoState) => {
|
|
const newUserInfo = (typeof update === 'function')
|
|
? update(state.userInfo): update;
|
|
return {
|
|
...state,
|
|
userInfo: {
|
|
...state.userInfo,
|
|
...newUserInfo
|
|
},
|
|
};
|
|
});
|
|
},
|
|
resetUserInfo: () => {
|
|
window.localStorage.removeItem(StorageKeys.TokenType);
|
|
window.localStorage.removeItem(StorageKeys.AccessToken);
|
|
window.localStorage.removeItem(StorageKeys.RefreshToken);
|
|
window.localStorage.removeItem(StorageKeys.AccessTokenExpiresIn);
|
|
window.localStorage.removeItem(StorageKeys.RefreshTokenExpiresIn);
|
|
window.localStorage.removeItem(StorageKeys.MenuGrants);
|
|
window.localStorage.removeItem(StorageKeys.Usrid);
|
|
window.localStorage.removeItem(StorageKeys.ClientAddressIP);
|
|
window.localStorage.removeItem(StorageKeys.Requires2FA);
|
|
set(initialUserInfoState);
|
|
},
|
|
setUserFavorite: (update) => {
|
|
set((state: UserInfoState) => {
|
|
const newUserFavorite = (typeof update === 'function')
|
|
? update(state.userFavorite): update;
|
|
return {
|
|
...state,
|
|
userFavorite: [
|
|
...newUserFavorite
|
|
],
|
|
};
|
|
});
|
|
},
|
|
setUserMids: (update) => {
|
|
set((state: UserInfoState) => {
|
|
const newUserMids = (typeof update === 'function')
|
|
? update(state.userMids): update;
|
|
return {
|
|
...state,
|
|
userMids: [
|
|
...state.userMids,
|
|
...newUserMids
|
|
],
|
|
};
|
|
});
|
|
},
|
|
setSelectOptionsMids: (update) => {
|
|
set((state: UserInfoState) => {
|
|
const newSelectOptionsMids = (typeof update === 'function')
|
|
? update(state.selectOptionsMids): update;
|
|
return {
|
|
...state,
|
|
selectOptionsMids: [
|
|
...state.selectOptionsMids,
|
|
...newSelectOptionsMids
|
|
],
|
|
};
|
|
});
|
|
},
|
|
setMid: (update) => {
|
|
set((state: UserInfoState) => {
|
|
const newMid = (typeof update === 'function')
|
|
? update(state.mid): update;
|
|
return {
|
|
...state,
|
|
mid: newMid
|
|
}
|
|
});
|
|
}
|
|
}));
|