import React, { useRef } from "react"; import { useSnapshot, ref } from "valtio"; import Editor, { loader } from "@monaco-editor/react"; import type monaco from "monaco-editor"; import { useTheme } from "next-themes"; import { useRouter } from "next/router"; import NextLink from "next/link"; import Box from "./Box"; import Container from "./Container"; import dark from "../theme/editor/amy.json"; import light from "../theme/editor/xcode_default.json"; import state from "../state"; import EditorNavigation from "./EditorNavigation"; import Text from "./Text"; import Link from "./Link"; loader.config({ paths: { vs: "https://cdn.jsdelivr.net/npm/monaco-editor@0.30.1/min/vs", }, }); const DeployEditor = () => { const editorRef = useRef(); const snap = useSnapshot(state); const router = useRouter(); const { theme } = useTheme(); return ( {snap.files?.filter((file) => file.compiledWatContent).length > 0 && router.isReady ? ( { if (!state.editorCtx) { state.editorCtx = ref(monaco.editor); // @ts-expect-error monaco.editor.defineTheme("dark", dark); // @ts-expect-error monaco.editor.defineTheme("light", light); } }} onMount={(editor, monaco) => { editorRef.current = editor; editor.updateOptions({ glyphMargin: true, readOnly: true, }); }} theme={theme === "dark" ? "dark" : "light"} /> ) : ( {!snap.loading && router.isReady && ( {`You haven't compiled any files yet, compile files on `} develop view )} )} ); }; export default DeployEditor;