Files
nice-app-web/src/entities/user/model/store.ts
focp212@naver.com 31b9c3682d 메뉴 즐겨찾기
2025-09-30 15:15:02 +09:00

91 lines
2.8 KiB
TypeScript

import { lens } from '@dhmk/zustand-lens';
import { SetStateAction } from 'react';
import { UserFavorite, UserInfo } from './types';
import { StorageKeys } from '@/shared/constants/local-storage';
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;
};
const initialUserInfoState = {
userInfo: {} as UserInfo,
userFavorite: [] as Array<UserFavorite>,
userMids: [] as Array<string>,
selectOptionsMids: [] as Array<Record<string, 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
],
};
});
},
}));