Compare commits

..

4 Commits

Author SHA1 Message Date
Kyle Corbitt
b2af83341d Preserve linebreaks in model output 2023-08-09 21:58:41 -07:00
Kyle Corbitt
e6d229d5f9 Merge pull request #129 from OpenPipe/persist-proj
persist the currently-selected project
2023-08-09 17:05:17 -07:00
Kyle Corbitt
1a6ae3aef7 Merge pull request #128 from OpenPipe/proj-styling
Sidebar styling
2023-08-09 17:05:02 -07:00
Kyle Corbitt
6c060c6ea0 persist the currently-selected project 2023-08-09 16:45:54 -07:00
3 changed files with 45 additions and 24 deletions

View File

@@ -191,7 +191,7 @@ export default function OutputCell({
return ( return (
<CellWrapper> <CellWrapper>
<Text>{contentToDisplay}</Text> <Text whiteSpace="pre-wrap">{contentToDisplay}</Text>
</CellWrapper> </CellWrapper>
); );
} }

13
app/src/state/persist.ts Normal file
View File

@@ -0,0 +1,13 @@
import { PersistOptions } from "zustand/middleware/persist";
import { State } from "./store";
export const stateToPersist = {
selectedProjectId: null as string | null,
};
export const persistOptions: PersistOptions<State, typeof stateToPersist> = {
name: "persisted-app-store",
partialize: (state) => ({
selectedProjectId: state.selectedProjectId,
}),
};

View File

@@ -1,11 +1,13 @@
import { type StateCreator, create } from "zustand"; import { type StateCreator, create } from "zustand";
import { immer } from "zustand/middleware/immer"; import { immer } from "zustand/middleware/immer";
import { persist } from "zustand/middleware";
import { createSelectors } from "./createSelectors"; import { createSelectors } from "./createSelectors";
import { import {
type SharedVariantEditorSlice, type SharedVariantEditorSlice,
createVariantEditorSlice, createVariantEditorSlice,
} from "./sharedVariantEditor.slice"; } from "./sharedVariantEditor.slice";
import { type APIClient } from "~/utils/api"; import { type APIClient } from "~/utils/api";
import { persistOptions, stateToPersist } from "./persist";
export type State = { export type State = {
drawerOpen: boolean; drawerOpen: boolean;
@@ -23,30 +25,36 @@ export type SliceCreator<T> = StateCreator<State, [["zustand/immer", never]], []
export type SetFn = Parameters<SliceCreator<unknown>>[0]; export type SetFn = Parameters<SliceCreator<unknown>>[0];
export type GetFn = Parameters<SliceCreator<unknown>>[1]; export type GetFn = Parameters<SliceCreator<unknown>>[1];
const useBaseStore = create<State, [["zustand/immer", never]]>( const useBaseStore = create<
immer((set, get, ...rest) => ({ State,
api: null, [["zustand/persist", typeof stateToPersist], ["zustand/immer", never]]
setApi: (api) => >(
set((state) => { persist(
state.api = api; immer((set, get, ...rest) => ({
}), api: null,
setApi: (api) =>
set((state) => {
state.api = api;
}),
drawerOpen: false, drawerOpen: false,
openDrawer: () => openDrawer: () =>
set((state) => { set((state) => {
state.drawerOpen = true; state.drawerOpen = true;
}), }),
closeDrawer: () => closeDrawer: () =>
set((state) => { set((state) => {
state.drawerOpen = false; state.drawerOpen = false;
}), }),
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;
}), }),
})), })),
persistOptions,
),
); );
export const useAppStore = createSelectors(useBaseStore); export const useAppStore = createSelectors(useBaseStore);