diff --git a/package.json b/package.json index d871cf0..d1204b5 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "vite", - "build": "tsc && vite build && electron-builder" + "build": "tsc && vite build --emptyOutDir && electron-builder" }, "repository": { "type": "git", diff --git a/src/far/main/listeners.ts b/src/far/main/listeners.ts index 59e24d3..863c590 100644 --- a/src/far/main/listeners.ts +++ b/src/far/main/listeners.ts @@ -36,7 +36,7 @@ function getFileInfo(rootName = ""): FileInfo["files"] { ipcMain.handle("open-file", () => { const root = dialog.showOpenDialogSync({ // 用户目录 - defaultPath: os.homedir(), + defaultPath: path.join(os.homedir(), "Dev/far-editor"), // 只能选择文件夹 properties: ["openDirectory"], }); @@ -74,7 +74,6 @@ ipcMain.handle("open-file", () => { * 展开或折叠文件夹 */ ipcMain.handle("expand-or-collapse-file", (_, rootName: string) => { - console.log("rootName", rootName); return getFileInfo(rootName); }); diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index d2c5f68..e7e1c7b 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -1,15 +1,15 @@ -import { Tabbar, MainEmpty, Slider } from "@common"; +import { Tabbar, MainEmpty } from "@common"; import { useProject } from "./store"; import { Allotment } from "allotment"; import "allotment/dist/style.css"; import "./assets/iconfont.js"; -import Editor from "./editor/index"; +import Editor from "./layout/editor/index"; +import Slider from "./layout/slider"; export default function App() { const isEmptyProject = useProject((state) => state.projectInfo.files).length === 0; - console.log({ isEmptyProject }); return (
diff --git a/src/renderer/src/common/components/index.ts b/src/renderer/src/common/components/index.ts index 7afc5f6..a201f44 100644 --- a/src/renderer/src/common/components/index.ts +++ b/src/renderer/src/common/components/index.ts @@ -1,4 +1,3 @@ export { default as IconFont } from "./icon-font/index"; export { default as Tabbar } from "./tabbar"; export { default as MainEmpty } from "./main-empty"; -export { default as Slider } from "./slider"; diff --git a/src/renderer/src/common/hooks/index.ts b/src/renderer/src/common/hooks/index.ts index ff8b4c5..aafd722 100644 --- a/src/renderer/src/common/hooks/index.ts +++ b/src/renderer/src/common/hooks/index.ts @@ -1 +1 @@ -export default {}; +export { default as useKeyboardEnter } from "./useKeyboardEnter"; diff --git a/src/renderer/src/common/hooks/useKeyboardEnter.ts b/src/renderer/src/common/hooks/useKeyboardEnter.ts new file mode 100644 index 0000000..97df277 --- /dev/null +++ b/src/renderer/src/common/hooks/useKeyboardEnter.ts @@ -0,0 +1,14 @@ +import { useRef } from "react"; + +export default function useKeyboardEnter(callback: () => void) { + const ref = useRef(null); + + const handleKeyboardEnter = (e: React.KeyboardEvent) => { + console.log(e.key); + if (e.key === "Enter") { + callback?.(); + } + }; + + return handleKeyboardEnter; +} diff --git a/src/renderer/src/editor/index.tsx b/src/renderer/src/editor/index.tsx deleted file mode 100644 index 55dcd8f..0000000 --- a/src/renderer/src/editor/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useFileContent } from "@/store/useFileContent.store"; -import MonacoEditor from "@monaco-editor/react"; -export default function Editor() { - const fileContent = useFileContent((state) => state.fileContent); - const selectedFileInfo = useFileContent((state) => state.selectedFileInfo); - const handleEditorMount = (editor: any, monaco: any) => { - console.log("Editor mounted", editor, monaco); - }; - return ( -
- -
- ); -} diff --git a/src/renderer/src/layout/editor/index.tsx b/src/renderer/src/layout/editor/index.tsx new file mode 100644 index 0000000..717317d --- /dev/null +++ b/src/renderer/src/layout/editor/index.tsx @@ -0,0 +1,52 @@ +import { useFileContent } from "@/store/useFileContent.store"; +import MonacoEditor from "@monaco-editor/react"; +export default function Editor() { + const fileContent = useFileContent((state) => state.fileContent); + const selectedFileInfo = useFileContent((state) => state.selectedFileInfo); + const handleEditorMount = (editor: any, monaco: any) => { + console.log("Editor mounted", editor, monaco); + }; + // 检查类型 + const isTypescript = + selectedFileInfo.name.endsWith(".ts") || + selectedFileInfo.name.endsWith(".tsx"); + const isJs = + selectedFileInfo.name.endsWith(".js") || + selectedFileInfo.name.endsWith(".jsx"); + const isCss = + selectedFileInfo.name.endsWith(".css") || + selectedFileInfo.name.endsWith(".scss") || + selectedFileInfo.name.endsWith(".less"); + const isHtml = + selectedFileInfo.name.endsWith(".html") || + selectedFileInfo.name.endsWith(".razor") || + selectedFileInfo.name.endsWith(".handlebars"); + const isJson = selectedFileInfo.name.endsWith(".json"); + + const language = isTypescript + ? "typescript" + : isJs + ? "javascript" + : isCss + ? "css" + : isHtml + ? "html" + : isJson + ? "json" + : "text"; + + return ( +
+ {selectedFileInfo.id ? ( + + ) : null} +
+ ); +} diff --git a/src/renderer/src/common/components/slider/index.tsx b/src/renderer/src/layout/slider/index.tsx similarity index 89% rename from src/renderer/src/common/components/slider/index.tsx rename to src/renderer/src/layout/slider/index.tsx index 63c28d6..4e8a94a 100644 --- a/src/renderer/src/common/components/slider/index.tsx +++ b/src/renderer/src/layout/slider/index.tsx @@ -1,6 +1,6 @@ import { Fragment, useRef, useState, createContext, useContext } from "react"; import { useProject } from "@/store"; -import IconFont from "../icon-font"; +import { IconFont, useKeyboardEnter } from "@common"; import { cn } from "@/common/utils"; import { expandOrCollapseFile, readFile } from "@/ipc"; import { useFileContent } from "@/store/useFileContent.store"; @@ -12,7 +12,7 @@ const SliderContext = createContext<{ }>({ selectedId: "", handleSelectedId: () => {}, - sliderWidth: 0, + sliderWidth: 0, // TODO: 多余,之后删除 }); export default function Slider() { const projectInfo = useProject((state) => state.projectInfo); @@ -78,8 +78,10 @@ interface FileItemProps { defaultFiles?: FileInfo[]; } function FileItem(props: FileItemProps) { - const { selectedId, handleSelectedId, sliderWidth } = - useContext(SliderContext); + const handleKeyboardEnter = useKeyboardEnter(() => { + console.log("enter"); + }); + const { selectedId, handleSelectedId } = useContext(SliderContext); const [isOpen, setIsOpen] = useState(props.isActive); const [childFiles, setChildFiles] = useState( @@ -100,7 +102,11 @@ function FileItem(props: FileItemProps) { // 文件项 <>
@@ -130,13 +136,13 @@ function FileItem(props: FileItemProps) {
-
+ >
*/}
diff --git a/src/renderer/src/main.tsx b/src/renderer/src/main.tsx index efaa586..5b8dc9c 100644 --- a/src/renderer/src/main.tsx +++ b/src/renderer/src/main.tsx @@ -10,6 +10,18 @@ import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker"; import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker"; import "./index.css"; +monaco.languages.typescript.typescriptDefaults.setCompilerOptions({ + target: monaco.languages.typescript.ScriptTarget.ES2020, + module: monaco.languages.typescript.ModuleKind.CommonJS, + allowJs: true, + jsx: monaco.languages.typescript.JsxEmit.React, + moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs, + noEmit: true, +}); +// monaco.languages.typescript.typescriptDefaults.addExtraLib( +// require("typescript/lib/tsconfig.json"), +// "tsconfig.json" +// ); window.MonacoEnvironment = { getWorker: function (_, label) { if (label === "json") { diff --git a/vite.config.ts b/vite.config.ts index d749dfd..d2adedb 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -7,7 +7,7 @@ import pkg from "./package.json"; // https://vitejs.dev/config/ export default defineConfig(({ command }) => { - rmSync("out/far", { recursive: true, force: true }); + rmSync("out", { recursive: true, force: true }); const isServe = command === "serve"; const isBuild = command === "build"; @@ -33,7 +33,6 @@ export default defineConfig(({ command }) => { entry: path.join(__dirname, "src/far/main/index.ts"), onstart(args) { if (process.env.VSCODE_DEBUG) { - console.log(33); console.log( /* For `.vscode/.debug.script.mjs` */ "[startup] Electron App" );