mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-10-07 02:58:11 +00:00
88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
import { create } from "zustand";
|
|
import { persist } from "zustand/middleware";
|
|
import { DEFAULT_PROJECT_ID } from "@repo/lib/constants";
|
|
|
|
interface ProjectState {
|
|
selectedProject: string;
|
|
setSelectedProject: (projectId: string) => void;
|
|
}
|
|
|
|
export const useProjectStore = create<ProjectState>()(
|
|
persist(
|
|
(set) => ({
|
|
selectedProject: DEFAULT_PROJECT_ID,
|
|
setSelectedProject: (projectId) => set({ selectedProject: projectId }),
|
|
}),
|
|
{
|
|
name: "selectedProject",
|
|
},
|
|
),
|
|
);
|
|
|
|
interface MemoryGraphState {
|
|
positionX: number;
|
|
positionY: number;
|
|
setPositionX: (x: number) => void;
|
|
setPositionY: (y: number) => void;
|
|
setPosition: (x: number, y: number) => void;
|
|
}
|
|
|
|
export const useMemoryGraphStore = create<MemoryGraphState>()((set) => ({
|
|
positionX: 0,
|
|
positionY: 0,
|
|
setPositionX: (x) => set({ positionX: x }),
|
|
setPositionY: (y) => set({ positionY: y }),
|
|
setPosition: (x, y) => set({ positionX: x, positionY: y }),
|
|
}));
|
|
|
|
interface ChatState {
|
|
isOpen: boolean;
|
|
setIsOpen: (isOpen: boolean) => void;
|
|
toggleChat: () => void;
|
|
}
|
|
|
|
export const useChatStore = create<ChatState>()((set, get) => ({
|
|
isOpen: false,
|
|
setIsOpen: (isOpen) => set({ isOpen }),
|
|
toggleChat: () => set({ isOpen: !get().isOpen }),
|
|
}));
|
|
|
|
export function useProject() {
|
|
const selectedProject = useProjectStore((state) => state.selectedProject);
|
|
const setSelectedProject = useProjectStore(
|
|
(state) => state.setSelectedProject,
|
|
);
|
|
|
|
const finalProject = selectedProject || DEFAULT_PROJECT_ID;
|
|
|
|
return {
|
|
selectedProject: finalProject,
|
|
setSelectedProject,
|
|
resetToDefault: () => setSelectedProject(DEFAULT_PROJECT_ID)
|
|
};
|
|
}
|
|
|
|
export function useMemoryGraphPosition() {
|
|
const positionX = useMemoryGraphStore((state) => state.positionX);
|
|
const positionY = useMemoryGraphStore((state) => state.positionY);
|
|
const setPositionX = useMemoryGraphStore((state) => state.setPositionX);
|
|
const setPositionY = useMemoryGraphStore((state) => state.setPositionY);
|
|
const setPosition = useMemoryGraphStore((state) => state.setPosition);
|
|
|
|
return {
|
|
x: positionX,
|
|
y: positionY,
|
|
setX: setPositionX,
|
|
setY: setPositionY,
|
|
setPosition,
|
|
};
|
|
}
|
|
|
|
export function useChatOpen() {
|
|
const isOpen = useChatStore((state) => state.isOpen);
|
|
const setIsOpen = useChatStore((state) => state.setIsOpen);
|
|
const toggleChat = useChatStore((state) => state.toggleChat);
|
|
return { isOpen, setIsOpen, toggleChat };
|
|
}
|
|
|
|
export { usePersistentChat, usePersistentChatStore } from "./chat";
|