Skip to content

Commit f87dd05

Browse files
committed
chore: move owner out of zustand
1 parent afd9353 commit f87dd05

File tree

3 files changed

+59
-62
lines changed

3 files changed

+59
-62
lines changed

src/client/App.tsx

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,42 @@
11
import { Editor } from "@/client/Editor";
22
import { Preview } from "@/client/Preview";
3-
import { Logo } from "@/client/components/Logo";
4-
import {
5-
ResizableHandle,
6-
ResizablePanelGroup,
7-
} from "@/client/components/Resizable";
3+
import { Button } from "@/client/components/Button";
84
import {
95
DropdownMenu,
106
DropdownMenuContent,
117
DropdownMenuItem,
128
DropdownMenuPortal,
139
DropdownMenuTrigger,
1410
} from "@/client/components/DropdownMenu";
15-
import { type FC, useEffect, useMemo, useRef, useState } from "react";
16-
import { useTheme } from "@/client/contexts/theme";
17-
import { MoonIcon, ShareIcon, SunIcon, SunMoonIcon } from "lucide-react";
18-
import { Button } from "@/client/components/Button";
11+
import { Logo } from "@/client/components/Logo";
12+
import {
13+
ResizableHandle,
14+
ResizablePanelGroup,
15+
} from "@/client/components/Resizable";
1916
import {
2017
Tooltip,
2118
TooltipContent,
2219
TooltipTrigger,
2320
} from "@/client/components/Tooltip";
21+
import { useTheme } from "@/client/contexts/theme";
22+
import { defaultCode } from "@/client/snippets";
23+
import type {
24+
ParameterWithSource,
25+
PreviewOutput,
26+
WorkspaceOwner,
27+
} from "@/gen/types";
2428
import { rpc } from "@/utils/rpc";
25-
import { useLoaderData, type LoaderFunctionArgs } from "react-router";
2629
import {
30+
type WasmLoadState,
2731
getDynamicParametersOutput,
2832
initWasm,
29-
type WasmLoadState,
3033
} from "@/utils/wasm";
31-
import { defaultCode } from "@/client/snippets";
32-
import type { ParameterWithSource, PreviewOutput } from "@/gen/types";
33-
import { useDebouncedValue } from "./hooks/debounce";
3434
import isEqual from "lodash/isEqual";
35+
import { MoonIcon, ShareIcon, SunIcon, SunMoonIcon } from "lucide-react";
36+
import { type FC, useEffect, useMemo, useRef, useState } from "react";
37+
import { type LoaderFunctionArgs, useLoaderData } from "react-router";
38+
import { useDebouncedValue } from "./hooks/debounce";
39+
import { mockUsers } from "@/owner";
3540

3641
/**
3742
* Load the shared code if present.
@@ -69,6 +74,7 @@ export const App = () => {
6974
>({});
7075
const [output, setOutput] = useState<PreviewOutput | null>(null);
7176
const [parameters, setParameters] = useState<ParameterWithSource[]>([]);
77+
const [owner, setOwner] = useState<WorkspaceOwner>(mockUsers.admin);
7278

7379
const onDownloadOutput = () => {
7480
const blob = new Blob([JSON.stringify(output, null, 2)], {
@@ -149,7 +155,7 @@ export const App = () => {
149155
return;
150156
}
151157

152-
getDynamicParametersOutput(debouncedCode, parameterValues)
158+
getDynamicParametersOutput(debouncedCode, parameterValues, owner)
153159
.catch((e) => {
154160
console.error(e);
155161
setWasmLoadingState("error");
@@ -159,7 +165,7 @@ export const App = () => {
159165
.then((output) => {
160166
setOutput(output);
161167
});
162-
}, [debouncedCode, parameterValues, wasmLoadState]);
168+
}, [debouncedCode, parameterValues, wasmLoadState, owner]);
163169

164170
return (
165171
<main className="flex h-dvh w-screen flex-col items-center bg-surface-primary">
@@ -221,6 +227,10 @@ export const App = () => {
221227
setParameterValues={setParameterValues}
222228
parameters={parameters}
223229
onReset={onReset}
230+
setOwner={(owner) => {
231+
onReset();
232+
setOwner(owner);
233+
}}
224234
/>
225235
</ResizablePanelGroup>
226236
</main>

src/client/Preview.tsx

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ type PreviewProps = {
5757
>;
5858
parameters: ParameterWithSource[];
5959
onReset: () => void;
60+
setOwner: (owner: WorkspaceOwner) => void;
6061
};
6162

6263
export const Preview: FC<PreviewProps> = ({
@@ -67,6 +68,7 @@ export const Preview: FC<PreviewProps> = ({
6768
setParameterValues,
6869
parameters,
6970
onReset,
71+
setOwner,
7072
}) => {
7173
const $errors = useStore((state) => state.errors);
7274
const [params] = useSearchParams();
@@ -236,7 +238,7 @@ export const Preview: FC<PreviewProps> = ({
236238
) : null}
237239
</AnimatePresence>
238240
</div>
239-
<UserSelect />
241+
<UserSelect setOwner={setOwner} />
240242
</div>
241243
}
242244
{parameters.length === 0 ? (
@@ -253,11 +255,7 @@ export const Preview: FC<PreviewProps> = ({
253255
</div>
254256
)}
255257
<div className="flex w-full justify-between gap-3">
256-
<Button
257-
variant="outline"
258-
onClick={onReset}
259-
className="w-fit"
260-
>
258+
<Button variant="outline" onClick={onReset} className="w-fit">
261259
Reset form
262260
</Button>
263261
<ViewOutput parameters={parameters} />
@@ -571,43 +569,42 @@ type FormElementProps = {
571569
React.SetStateAction<Record<string, string>>
572570
>;
573571
};
574-
const FormElement: FC<FormElementProps> = React.memo(({
575-
parameter,
576-
value,
577-
setParameterValues,
578-
}) => {
579-
const defaultValue =
580-
parameter.default_value.value !== "??"
581-
? parameter.default_value.value
582-
: undefined;
583-
584-
const onValueChange = (value: string) => {
585-
setParameterValues((curr) => {
586-
return { ...curr, [parameter.name]: value };
587-
});
588-
};
589-
590-
return (
591-
<DynamicParameter
592-
parameter={parameter}
593-
value={value ?? defaultValue}
594-
autofill={false}
595-
onChange={onValueChange}
596-
disabled={parameter.styling.disabled}
597-
/>
598-
);
599-
});
572+
const FormElement: FC<FormElementProps> = React.memo(
573+
({ parameter, value, setParameterValues }) => {
574+
const defaultValue =
575+
parameter.default_value.value !== "??"
576+
? parameter.default_value.value
577+
: undefined;
578+
579+
const onValueChange = (value: string) => {
580+
setParameterValues((curr) => {
581+
return { ...curr, [parameter.name]: value };
582+
});
583+
};
584+
585+
return (
586+
<DynamicParameter
587+
parameter={parameter}
588+
value={value ?? defaultValue}
589+
autofill={false}
590+
onChange={onValueChange}
591+
disabled={parameter.styling.disabled}
592+
/>
593+
);
594+
},
595+
);
600596
FormElement.displayName = "FormElement";
601597

602-
const UserSelect: FC = () => {
603-
const $setWorkspaceOwner = useStore((state) => state.setWorkspaceOwner);
604-
598+
type UserSelectProps = {
599+
setOwner: (owner: WorkspaceOwner) => void;
600+
};
601+
const UserSelect: FC<UserSelectProps> = ({ setOwner }) => {
605602
return (
606603
<Select
607604
defaultValue="admin"
608605
onValueChange={(value) => {
609606
const users: Record<string, WorkspaceOwner | undefined> = mockUsers;
610-
$setWorkspaceOwner(users[value] ?? mockUsers.admin);
607+
setOwner(users[value] ?? mockUsers.admin);
611608
}}
612609
>
613610
<SelectTrigger className="w-fit min-w-40">

src/client/store.tsx

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { Diagnostic } from "@/client/diagnostics";
2-
import type { WorkspaceOwner } from "@/gen/types";
32
import type { editor } from "monaco-editor";
43
import { create } from "zustand";
54
import { defaultCode } from "./snippets";
@@ -16,16 +15,13 @@ const defaultErrorsState: ErrorsState = {
1615

1716
type State = {
1817
editor: editor.IStandaloneCodeEditor | null;
19-
owner: WorkspaceOwner;
2018
errors: ErrorsState;
2119
setError: (diagnostics: Diagnostic[]) => void;
2220
toggleShowError: (open?: boolean) => void;
2321
setEditor: (editor: editor.IStandaloneCodeEditor) => void;
24-
setWorkspaceOwner: (owner: WorkspaceOwner) => void;
2522
};
2623

2724
export const useStore = create<State>()((set) => ({
28-
_force: 0,
2925
code: window.CODE ?? defaultCode,
3026
editor: null,
3127
owner: mockUsers.admin,
@@ -48,10 +44,4 @@ export const useStore = create<State>()((set) => ({
4844
};
4945
}),
5046
setEditor: (editor) => set(() => ({ editor })),
51-
setWorkspaceOwner: (owner) =>
52-
set((state) => ({
53-
...state,
54-
owner,
55-
form: {},
56-
})),
5747
}));

0 commit comments

Comments
 (0)