Add selectedLogs, rename setSelectedProjectId
This commit is contained in:
@@ -33,7 +33,7 @@ export default function ProjectMenu() {
|
|||||||
const utils = api.useContext();
|
const utils = api.useContext();
|
||||||
|
|
||||||
const selectedProjectId = useAppStore((s) => s.selectedProjectId);
|
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();
|
const { data: projects } = api.projects.list.useQuery();
|
||||||
|
|
||||||
@@ -43,9 +43,9 @@ export default function ProjectMenu() {
|
|||||||
projects[0] &&
|
projects[0] &&
|
||||||
(!selectedProjectId || !projects.find((proj) => proj.id === selectedProjectId))
|
(!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();
|
const { data: selectedProject } = useSelectedProject();
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ export default function ProjectMenu() {
|
|||||||
const [createProject, isLoading] = useHandledAsyncCallback(async () => {
|
const [createProject, isLoading] = useHandledAsyncCallback(async () => {
|
||||||
const newProj = await createMutation.mutateAsync({ name: "Untitled Project" });
|
const newProj = await createMutation.mutateAsync({ name: "Untitled Project" });
|
||||||
await utils.projects.list.invalidate();
|
await utils.projects.list.invalidate();
|
||||||
setselectedProjectId(newProj.id);
|
setSelectedProjectId(newProj.id);
|
||||||
await router.push({ pathname: "/project/settings" });
|
await router.push({ pathname: "/project/settings" });
|
||||||
}, [createMutation, router]);
|
}, [createMutation, router]);
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ const ProjectOption = ({
|
|||||||
isActive: boolean;
|
isActive: boolean;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
}) => {
|
}) => {
|
||||||
const setselectedProjectId = useAppStore((s) => s.setselectedProjectId);
|
const setSelectedProjectId = useAppStore((s) => s.setSelectedProjectId);
|
||||||
const [gearHovered, setGearHovered] = useState(false);
|
const [gearHovered, setGearHovered] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -184,7 +184,7 @@ const ProjectOption = ({
|
|||||||
as={Link}
|
as={Link}
|
||||||
href="/experiments"
|
href="/experiments"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setselectedProjectId(proj.id);
|
setSelectedProjectId(proj.id);
|
||||||
onClose();
|
onClose();
|
||||||
}}
|
}}
|
||||||
w="full"
|
w="full"
|
||||||
|
|||||||
25
app/src/state/selectedLogsSlice.ts
Normal file
25
app/src/state/selectedLogsSlice.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { type SliceCreator } from "./store";
|
||||||
|
|
||||||
|
export const editorBackground = "#fafafa";
|
||||||
|
|
||||||
|
export type SelectedLogsSlice = {
|
||||||
|
selectedLogIds: Set<string>;
|
||||||
|
setSelectedLogIds: (ids: Set<string>) => void;
|
||||||
|
toggleSelectedLogId: (id: string) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const createSelectedLogsSlice: SliceCreator<SelectedLogsSlice> = (set, get) => ({
|
||||||
|
selectedLogIds: new Set(),
|
||||||
|
setSelectedLogIds: (ids: Set<string>) =>
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
});
|
||||||
@@ -8,6 +8,7 @@ import {
|
|||||||
} from "./sharedVariantEditor.slice";
|
} from "./sharedVariantEditor.slice";
|
||||||
import { type APIClient } from "~/utils/api";
|
import { type APIClient } from "~/utils/api";
|
||||||
import { persistOptions, type stateToPersist } from "./persist";
|
import { persistOptions, type stateToPersist } from "./persist";
|
||||||
|
import { type SelectedLogsSlice, createSelectedLogsSlice } from "./selectedLogsSlice";
|
||||||
|
|
||||||
export type State = {
|
export type State = {
|
||||||
drawerOpen: boolean;
|
drawerOpen: boolean;
|
||||||
@@ -17,7 +18,8 @@ export type State = {
|
|||||||
setApi: (api: APIClient) => void;
|
setApi: (api: APIClient) => void;
|
||||||
sharedVariantEditor: SharedVariantEditorSlice;
|
sharedVariantEditor: SharedVariantEditorSlice;
|
||||||
selectedProjectId: string | null;
|
selectedProjectId: string | null;
|
||||||
setselectedProjectId: (id: string) => void;
|
setSelectedProjectId: (id: string) => void;
|
||||||
|
selectedLogs: SelectedLogsSlice;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SliceCreator<T> = StateCreator<State, [["zustand/immer", never]], [], T>;
|
export type SliceCreator<T> = StateCreator<State, [["zustand/immer", never]], [], T>;
|
||||||
@@ -48,10 +50,11 @@ const useBaseStore = create<
|
|||||||
}),
|
}),
|
||||||
sharedVariantEditor: createVariantEditorSlice(set, get, ...rest),
|
sharedVariantEditor: createVariantEditorSlice(set, get, ...rest),
|
||||||
selectedProjectId: null,
|
selectedProjectId: null,
|
||||||
setselectedProjectId: (id: string) =>
|
setSelectedProjectId: (id: string) =>
|
||||||
set((state) => {
|
set((state) => {
|
||||||
state.selectedProjectId = id;
|
state.selectedProjectId = id;
|
||||||
}),
|
}),
|
||||||
|
selectedLogs: createSelectedLogsSlice(set, get, ...rest),
|
||||||
})),
|
})),
|
||||||
persistOptions,
|
persistOptions,
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user