Files
nice-app-web/src/entities/user/model/store.ts
2025-10-10 12:45:02 +09:00

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
}
});
}
}));