create-vite-app-cli
Version:
a fast create webapp template cli, perfect engineering development experience, currently supported template presets include: - `react-ts` (React + TypeScript + Vite + Pnpm + Zustand + Openapi + Docker) - `vue-ts` (Vue 3 + TypeScript + Vite + Pnpm + Pinia
70 lines (61 loc) • 1.73 kB
text/typescript
import { create } from "zustand";
import { StorageValue, devtools, persist } from "zustand/middleware";
import { logger } from "./loggerMiddleware";
interface ILoginInfo {
accessToken: string;
refreshToken?: string;
uid?: string;
expireAt?: string;
expires_in?: number;
name?: string;
}
interface ILoginInfoState {
loginInfo: ILoginInfo | null;
updateLoginInfo: (nextState: ILoginInfo) => void;
clear: () => void;
}
export const loginInfoStorageKey = "login-info-storage";
export const defaultLoginInfoStorage = { state: { loginInfo: null }, version: 0 };
export type ILoginInfoStorageState = StorageValue<Pick<ILoginInfoState, "loginInfo">>;
export const useLoginInfoStore = create<ILoginInfoState>()(
logger(
devtools(
persist(
(set) => ({
loginInfo: null,
updateLoginInfo: (newLoginInfo) => set(() => ({ loginInfo: newLoginInfo })),
clear: () => set(() => ({ loginInfo: null })),
}),
{
name: loginInfoStorageKey,
},
),
),
),
);
interface IProjectInfo {
projectId: string;
projectName: string;
}
interface IProjectInfoState {
projectInfo: IProjectInfo[] | null;
updateProjectInfo: (nextState: IProjectInfo[]) => void;
clear: () => void;
}
const projectInfoStorageKey = "project-info-storage";
export const useProjectInfoStore = create<IProjectInfoState>()(
logger(
devtools(
persist(
(set) => ({
projectInfo: null,
updateProjectInfo: (newProjectInfo) => set(() => ({ projectInfo: newProjectInfo })),
clear: () => set(() => ({ projectInfo: null })),
}),
{
name: projectInfoStorageKey,
},
),
),
),
);