Skip to content

Commit b5f411f

Browse files
committed
chore: move editor instance out of zustand
1 parent 9d1e71e commit b5f411f

File tree

6 files changed

+47
-22
lines changed

6 files changed

+47
-22
lines changed

src/client/Editor.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
ZapIcon,
3232
} from "lucide-react";
3333
import { type FC, useEffect, useRef, useState } from "react";
34+
import { useEditor } from "@/client/contexts/editor";
3435

3536
type EditorProps = {
3637
code: string;
@@ -39,6 +40,7 @@ type EditorProps = {
3940

4041
export const Editor: FC<EditorProps> = ({ code, setCode }) => {
4142
const { appliedTheme } = useTheme();
43+
const editorRef = useEditor();
4244

4345
const [codeCopied, setCodeCopied] = useState(() => false);
4446
const copyTimeoutId = useRef<ReturnType<typeof setTimeout> | undefined>(
@@ -159,7 +161,7 @@ export const Editor: FC<EditorProps> = ({ code, setCode }) => {
159161
<MonacoEditor
160162
value={code}
161163
onMount={(editor) => {
162-
// $setEditor(editor);
164+
editorRef.current = editor;
163165
}}
164166
onChange={(code) => {
165167
if (code !== undefined) {

src/client/components/DynamicParameter.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
} from "lucide-react";
4343
import { type FC, useEffect, useId, useRef, useState } from "react";
4444
import * as Yup from "yup";
45-
import { useStore } from "@/client/store";
45+
import { useEditor } from "@/client/contexts/editor";
4646

4747
interface WorkspaceBuildParameter {
4848
readonly name: string;
@@ -127,17 +127,17 @@ const ParameterLabel: FC<ParameterLabelProps> = ({
127127
autofill,
128128
id,
129129
}) => {
130-
const $editor = useStore((state) => state.editor);
130+
const ediorRef = useEditor();
131131

132132
const onGoToDefinition = () => {
133-
$editor?.revealLine(parameter.def_range.Start.Line);
134-
$editor?.setSelection({
133+
ediorRef.current?.revealLine(parameter.def_range.Start.Line);
134+
ediorRef.current?.setSelection({
135135
startLineNumber: parameter.def_range.Start.Line,
136136
startColumn: parameter.def_range.Start.Column,
137137
endColumn: parameter.def_range.End.Column,
138138
endLineNumber: parameter.def_range.End.Line,
139139
});
140-
$editor?.focus()
140+
ediorRef.current?.focus();
141141
};
142142

143143
const displayName = parameter.display_name

src/client/contexts/editor.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import type { editor as monaco } from "monaco-editor";
2+
import {
3+
type FC,
4+
type PropsWithChildren,
5+
createContext,
6+
useContext,
7+
useRef,
8+
} from "react";
9+
10+
type EditorContext =
11+
React.RefObject<monaco.IStandaloneCodeEditor | null> | null;
12+
13+
const EditorContext = createContext<EditorContext>(null);
14+
15+
export const EditorProvider: FC<PropsWithChildren> = ({ children }) => {
16+
const editor = useRef<monaco.IStandaloneCodeEditor>(null);
17+
18+
return (
19+
<EditorContext.Provider value={editor}>{children}</EditorContext.Provider>
20+
);
21+
};
22+
23+
export const useEditor = () => {
24+
const editor = useContext(EditorContext);
25+
26+
if (!editor) {
27+
throw new Error("useEditor must eb used within an EditorProvider");
28+
}
29+
30+
return editor;
31+
};

src/client/index.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { createRoot } from "react-dom/client";
55
import { RouterProvider, createBrowserRouter, redirect } from "react-router";
66
import { App, loader as appLoader } from "./App.tsx";
77
import "@/client/index.css";
8+
import { EditorProvider } from "./contexts/editor.tsx";
89

910
const router = createBrowserRouter([
1011
{
@@ -27,11 +28,13 @@ if (!root) {
2728
} else {
2829
createRoot(root).render(
2930
<StrictMode>
30-
<ThemeProvider>
31-
<TooltipProvider>
32-
<RouterProvider router={router} />
33-
</TooltipProvider>
34-
</ThemeProvider>
31+
<EditorProvider>
32+
<ThemeProvider>
33+
<TooltipProvider>
34+
<RouterProvider router={router} />
35+
</TooltipProvider>
36+
</ThemeProvider>
37+
</EditorProvider>
3538
</StrictMode>,
3639
);
3740
}

src/client/store.tsx

Lines changed: 0 additions & 10 deletions
This file was deleted.

tsconfig.app.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
"erasableSyntaxOnly": true,
3131
"noFallthroughCasesInSwitch": true,
3232
"noUncheckedSideEffectImports": false,
33-
"noUncheckedIndexedAccess": true
3433
},
3534
"include": [
3635
"src"

0 commit comments

Comments
 (0)