forked from akai/readest
30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import { create } from 'zustand';
|
|
|
|
interface SidebarState {
|
|
sideBarBookKey: string | null;
|
|
sideBarWidth: string;
|
|
isSideBarVisible: boolean;
|
|
isSideBarPinned: boolean;
|
|
getIsSideBarVisible: () => boolean;
|
|
setSideBarBookKey: (key: string) => void;
|
|
setSideBarWidth: (width: string) => void;
|
|
toggleSideBar: () => void;
|
|
toggleSideBarPin: () => void;
|
|
setSideBarVisible: (visible: boolean) => void;
|
|
setSideBarPin: (pinned: boolean) => void;
|
|
}
|
|
|
|
export const useSidebarStore = create<SidebarState>((set, get) => ({
|
|
sideBarBookKey: null,
|
|
sideBarWidth: '',
|
|
isSideBarVisible: false,
|
|
isSideBarPinned: false,
|
|
getIsSideBarVisible: () => get().isSideBarVisible,
|
|
setSideBarBookKey: (key: string) => set({ sideBarBookKey: key }),
|
|
setSideBarWidth: (width: string) => set({ sideBarWidth: width }),
|
|
toggleSideBar: () => set((state) => ({ isSideBarVisible: !state.isSideBarVisible })),
|
|
toggleSideBarPin: () => set((state) => ({ isSideBarPinned: !state.isSideBarPinned })),
|
|
setSideBarVisible: (visible: boolean) => set({ isSideBarVisible: visible }),
|
|
setSideBarPin: (pinned: boolean) => set({ isSideBarPinned: pinned }),
|
|
}));
|