From 89815e1f7ff0d6b5e1c5efc671bad3b59dc5fc95 Mon Sep 17 00:00:00 2001 From: David Corbitt Date: Sat, 12 Aug 2023 03:35:54 -0700 Subject: [PATCH] Add selectedLogs, rename setSelectedProjectId --- app/src/components/nav/ProjectMenu.tsx | 12 ++++++------ app/src/state/selectedLogsSlice.ts | 25 +++++++++++++++++++++++++ app/src/state/store.ts | 7 +++++-- 3 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 app/src/state/selectedLogsSlice.ts diff --git a/app/src/components/nav/ProjectMenu.tsx b/app/src/components/nav/ProjectMenu.tsx index 821f00d..a14022e 100644 --- a/app/src/components/nav/ProjectMenu.tsx +++ b/app/src/components/nav/ProjectMenu.tsx @@ -33,7 +33,7 @@ export default function ProjectMenu() { const utils = api.useContext(); const selectedProjectId = useAppStore((s) => s.selectedProjectId); - const setselectedProjectId = useAppStore((s) => s.setselectedProjectId); + const setSelectedProjectId = useAppStore((s) => s.setSelectedProjectId); const { data: projects } = api.projects.list.useQuery(); @@ -43,9 +43,9 @@ export default function ProjectMenu() { projects[0] && (!selectedProjectId || !projects.find((proj) => proj.id === selectedProjectId)) ) { - setselectedProjectId(projects[0].id); + setSelectedProjectId(projects[0].id); } - }, [selectedProjectId, setselectedProjectId, projects]); + }, [selectedProjectId, setSelectedProjectId, projects]); const { data: selectedProject } = useSelectedProject(); @@ -55,7 +55,7 @@ export default function ProjectMenu() { const [createProject, isLoading] = useHandledAsyncCallback(async () => { const newProj = await createMutation.mutateAsync({ name: "Untitled Project" }); await utils.projects.list.invalidate(); - setselectedProjectId(newProj.id); + setSelectedProjectId(newProj.id); await router.push({ pathname: "/project/settings" }); }, [createMutation, router]); @@ -176,7 +176,7 @@ const ProjectOption = ({ isActive: boolean; onClose: () => void; }) => { - const setselectedProjectId = useAppStore((s) => s.setselectedProjectId); + const setSelectedProjectId = useAppStore((s) => s.setSelectedProjectId); const [gearHovered, setGearHovered] = useState(false); return ( @@ -184,7 +184,7 @@ const ProjectOption = ({ as={Link} href="/experiments" onClick={() => { - setselectedProjectId(proj.id); + setSelectedProjectId(proj.id); onClose(); }} w="full" diff --git a/app/src/state/selectedLogsSlice.ts b/app/src/state/selectedLogsSlice.ts new file mode 100644 index 0000000..ddd407a --- /dev/null +++ b/app/src/state/selectedLogsSlice.ts @@ -0,0 +1,25 @@ +import { type SliceCreator } from "./store"; + +export const editorBackground = "#fafafa"; + +export type SelectedLogsSlice = { + selectedLogIds: Set; + setSelectedLogIds: (ids: Set) => void; + toggleSelectedLogId: (id: string) => void; +}; + +export const createSelectedLogsSlice: SliceCreator = (set, get) => ({ + selectedLogIds: new Set(), + setSelectedLogIds: (ids: Set) => + set((state) => { + state.selectedLogs.selectedLogIds = ids; + }), + toggleSelectedLogId: (id: string) => + set((state) => { + if (state.selectedLogs.selectedLogIds.has(id)) { + state.selectedLogs.selectedLogIds.delete(id); + } else { + state.selectedLogs.selectedLogIds.add(id); + } + }), +}); diff --git a/app/src/state/store.ts b/app/src/state/store.ts index ef0a590..9fc3bd7 100644 --- a/app/src/state/store.ts +++ b/app/src/state/store.ts @@ -8,6 +8,7 @@ import { } from "./sharedVariantEditor.slice"; import { type APIClient } from "~/utils/api"; import { persistOptions, type stateToPersist } from "./persist"; +import { type SelectedLogsSlice, createSelectedLogsSlice } from "./selectedLogsSlice"; export type State = { drawerOpen: boolean; @@ -17,7 +18,8 @@ export type State = { setApi: (api: APIClient) => void; sharedVariantEditor: SharedVariantEditorSlice; selectedProjectId: string | null; - setselectedProjectId: (id: string) => void; + setSelectedProjectId: (id: string) => void; + selectedLogs: SelectedLogsSlice; }; export type SliceCreator = StateCreator; @@ -48,10 +50,11 @@ const useBaseStore = create< }), sharedVariantEditor: createVariantEditorSlice(set, get, ...rest), selectedProjectId: null, - setselectedProjectId: (id: string) => + setSelectedProjectId: (id: string) => set((state) => { state.selectedProjectId = id; }), + selectedLogs: createSelectedLogsSlice(set, get, ...rest), })), persistOptions, ),