diff --git a/frontend/doutok/components/UserStore/useUserStore.tsx b/frontend/doutok/components/UserStore/useUserStore.tsx index 9450f0f..7c28693 100644 --- a/frontend/doutok/components/UserStore/useUserStore.tsx +++ b/frontend/doutok/components/UserStore/useUserStore.tsx @@ -1,26 +1,65 @@ import { create } from "zustand"; -const useUserStore = create(set => ({ - token: localStorage.getItem("token") || "", - setToken: () => set((state: { token: string }) => ({ token: state.token })), - removeToken: () => set({ token: "" }), - avatar: localStorage.getItem("avatar") || "", - setAvatar: () => - set((state: { avatar: string }) => ({ avatar: state.avatar })), - currentUserId: localStorage.getItem("currentUserId") || "", - setCurrentUserId: () => - set((state: { currentUserId: string }) => ({ - currentUserId: state.currentUserId - })), - isOpenLoginModal: localStorage.getItem("openLoginModal") || false, +interface UserState { + token: string; + setToken: (token: string) => void; + removeToken: () => void; + avatar: string; + setAvatar: (avatar: string) => void; + currentUserId: string; + setCurrentUserId: (id: string) => void; + isOpenLoginModal: boolean; + openLoginModal: () => void; + closeLoginModal: () => void; +} + +const isClient = typeof window !== "undefined"; + +const localStorageUtil = { + getItem: (key: string, defaultValue: string) => { + return isClient ? localStorage.getItem(key) ?? defaultValue : defaultValue; + }, + setItem: (key: string, value: string) => { + if (isClient) { + localStorage.setItem(key, value); + } + }, + removeItem: (key: string) => { + if (isClient) { + localStorage.removeItem(key); + } + } +}; + +const useUserStore = create((set) => ({ + token: localStorageUtil.getItem("token", ""), + setToken: (token: string) => { + localStorageUtil.setItem("token", token); + set({ token }); + }, + removeToken: () => { + localStorageUtil.removeItem("token"); + set({ token: "" }); + }, + avatar: localStorageUtil.getItem("avatar", ""), + setAvatar: (avatar: string) => { + localStorageUtil.setItem("avatar", avatar); + set({ avatar }); + }, + currentUserId: localStorageUtil.getItem("currentUserId", ""), + setCurrentUserId: (id: string) => { + localStorageUtil.setItem("currentUserId", id); + set({ currentUserId: id }); + }, + isOpenLoginModal: localStorageUtil.getItem("openLoginModal", "false") === "true", openLoginModal: () => { - localStorage.setItem("openLoginModal", "true"); - set({ isOpen: true }); + localStorageUtil.setItem("openLoginModal", "true"); + set({ isOpenLoginModal: true }); }, closeLoginModal: () => { - localStorage.setItem("openLoginModal", "false"); - set({ isOpen: false }); + localStorageUtil.setItem("openLoginModal", "false"); + set({ isOpenLoginModal: false }); } })); -export default useUserStore; +export default useUserStore; \ No newline at end of file