frontPanel/src/stores/user.ts

53 lines
1.3 KiB
TypeScript
Raw Normal View History

2023-12-19 16:06:09 +00:00
import { User, UserAccount } from "@frontend/kitui";
2023-11-08 12:51:40 +00:00
import { produce } from "immer";
import { create } from "zustand";
import { createJSONStorage, devtools, persist } from "zustand/middleware";
interface UserStore {
2023-12-31 02:53:25 +00:00
userId: string | null;
user: User | null;
userAccount: UserAccount | null;
2023-11-08 12:51:40 +00:00
}
const initialState: UserStore = {
2023-12-31 02:53:25 +00:00
userId: null,
user: null,
userAccount: null,
2023-11-08 12:51:40 +00:00
};
export const useUserStore = create<UserStore>()(
2023-12-31 02:53:25 +00:00
persist(
devtools((set, get) => initialState, {
name: "User",
enabled: process.env.NODE_ENV === "development",
trace: process.env.NODE_ENV === "development",
}),
{
version: 2,
name: "user",
partialize: (state) => ({
userId: state.userId,
user: state.user,
}),
migrate: (persistedState, version) => ({
...(persistedState as UserStore),
user: null,
}),
},
),
2023-11-08 12:51:40 +00:00
);
2023-12-31 02:53:25 +00:00
export const setUserId = (userId: string | null) =>
useUserStore.setState({ userId });
2023-11-08 12:51:40 +00:00
export const setUser = (user: User) =>
2023-12-31 02:53:25 +00:00
useUserStore.setState(
produce<UserStore>((state) => {
state.user = user;
}),
);
2023-11-08 12:51:40 +00:00
export const clearUserData = () => useUserStore.setState({ ...initialState });
2023-12-19 16:06:09 +00:00
2023-12-31 02:53:25 +00:00
export const setUserAccount = (userAccount: UserAccount) =>
useUserStore.setState({ userAccount });