From b693855012644ca1fa53a9f0090afb429bb7c46d Mon Sep 17 00:00:00 2001 From: codetypes Date: Wed, 8 May 2024 00:09:18 +0800 Subject: [PATCH] support search file desc --- electron/main/index.ts | 5 ++ package-lock.json | 4 +- package.json | 2 +- public/locales/en.json | 1 - public/locales/zh.json | 1 - sample/workspace.b3-workspace | 29 ++++++++- src/components/editor.tsx | 8 ++- src/components/explorer.tsx | 2 +- src/components/inspector.tsx | 15 +++-- src/components/menu.tsx | 2 - src/components/titlebar.tsx | 19 ++++-- src/contexts/workspace-context.ts | 104 ++++++++++++++++++++++++++---- src/misc/b3type.ts | 2 +- 13 files changed, 154 insertions(+), 40 deletions(-) diff --git a/electron/main/index.ts b/electron/main/index.ts index 5cbd79e..7222992 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -171,3 +171,8 @@ ipcMain.handle("trashItem", (_, arg: string) => { arg = arg.replace(/\//g, path.sep); shell.trashItem(arg).catch((e) => console.error(e)); }); + +ipcMain.handle("showItemInFolder", (_, arg: string) => { + arg = arg.replace(/\//g, path.sep); + shell.showItemInFolder(arg); +}); diff --git a/package-lock.json b/package-lock.json index 2482522..9a3e6ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "behavior3editor", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "behavior3editor", - "version": "1.2.0", + "version": "1.3.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 0a6aeca..14748c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "behavior3editor", - "version": "1.2.0", + "version": "1.3.0", "main": "dist-electron/main/index.js", "description": "行为树编辑器", "author": "zhandouxiaojiji & codetypes", diff --git a/public/locales/en.json b/public/locales/en.json index 391a1f5..c7ff136 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -77,7 +77,6 @@ "regnode.subtree": "Subtree: ", "node.args": "Const arguments", - "node.codePlaceholder": "a.b * 3 > 2", "node.debug": "Debug", "node.disabled": "Disabled", "node.deleteRootNodeDenied": "Unable to delete the root node", diff --git a/public/locales/zh.json b/public/locales/zh.json index dace1d3..f9db29f 100644 --- a/public/locales/zh.json +++ b/public/locales/zh.json @@ -77,7 +77,6 @@ "regnode.subtree": "子树:", "node.args": "常量参数", - "node.codePlaceholder": "a.b * 3 > 2", "node.debug": "调试", "node.disabled": "禁用", "node.deleteRootNodeDenied": "不能删除根节点", diff --git a/sample/workspace.b3-workspace b/sample/workspace.b3-workspace index 9a58516..577cdcc 100644 --- a/sample/workspace.b3-workspace +++ b/sample/workspace.b3-workspace @@ -1,5 +1,28 @@ { - "isRelative": true, - "nodeConfPath": "node-config.json", - "workdir": "workdir" + "files": [ + { + "path": "workdir/hero.json", + "desc": "英雄测试AI" + }, + { + "path": "workdir/monster.json", + "desc": "怪物测试AI" + }, + { + "path": "workdir/sub/subtree1.json", + "desc": "子树1" + }, + { + "path": "workdir/sub/subtree2.json", + "desc": "子树2" + }, + { + "path": "workdir/subtree1.json", + "desc": "子树1" + }, + { + "path": "workdir/subtree2.json", + "desc": "子树2" + } + ] } \ No newline at end of file diff --git a/src/components/editor.tsx b/src/components/editor.tsx index 37381cd..6244826 100644 --- a/src/components/editor.tsx +++ b/src/components/editor.tsx @@ -131,6 +131,8 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . onEditingTree: useWorkspace((state) => state.onEditingTree), open: useWorkspace((state) => state.open), workdir: useWorkspace((state) => state.workdir), + relative: useWorkspace((state) => state.relative), + updateFileMeta: useWorkspace((state) => state.updateFileMeta), }; const searchInputRef = useRef(null); @@ -605,8 +607,8 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . desc: editor.desc, } as TreeModel; fs.writeFileSync(path, JSON.stringify(treeModel, null, 2)); + workspace.updateFileMeta(editor); editor.unsave = false; - editor.data = b3util.createTreeData(root); editor.autoId = b3util.refreshTreeDataId(editor.data); editor.graph.changeData(editor.data); @@ -664,7 +666,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . desc: data.desc, } as TreeModel; fs.writeFileSync(subpath, JSON.stringify(subtreeModel, null, 2)); - data.path = Path.relative(workspace.workdir, subpath).replaceAll(Path.sep, "/"); + data.path = workspace.relative(subpath); reload(); pushHistory(); onChange(); @@ -858,7 +860,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . { id: editor.autoId++, name: "unknow", - path: Path.relative(workspace.workdir, exploreFile).replaceAll(Path.sep, "/"), + path: workspace.relative(exploreFile), }, dstData.id ); diff --git a/src/components/explorer.tsx b/src/components/explorer.tsx index d3b1dac..d6ab114 100644 --- a/src/components/explorer.tsx +++ b/src/components/explorer.tsx @@ -551,7 +551,7 @@ export const Explorer: FC = () => { break; } case "revealFile": - shell.showItemInFolder(node.path.replaceAll("/", Path.sep)); + ipcRenderer.invoke("showItemInFolder", node.path); break; case "rename": { node.editing = true; diff --git a/src/components/inspector.tsx b/src/components/inspector.tsx index 819a1e2..3c35159 100644 --- a/src/components/inspector.tsx +++ b/src/components/inspector.tsx @@ -9,7 +9,9 @@ import { FC, useEffect, useMemo } from "react"; import { useTranslation } from "react-i18next"; import Markdown from "react-markdown"; -interface OptionType extends DefaultOptionType {} +interface OptionType extends DefaultOptionType { + value: string; +} const TreeInspector: FC = () => { const workspace = { @@ -70,6 +72,7 @@ const NodeInspector: FC = () => { onEditingNode: useWorkspace((state) => state.onEditingNode), allFiles: useWorkspace((state) => state.allFiles), fileTree: useWorkspace((state) => state.fileTree), + relative: useWorkspace((state) => state.relative), }; const { t } = useTranslation(); const [form] = Form.useForm(); @@ -133,14 +136,15 @@ const NodeInspector: FC = () => { // auto complete for subtree const subtreeOptions = useMemo(() => { const options: OptionType[] = []; - workspace.allFiles.forEach((path) => { - const value = Path.relative(workspace.fileTree!.path, path).replaceAll(Path.sep, "/"); + workspace.allFiles.forEach((file) => { + const value = workspace.relative(file.path); const desc = ""; //fileNode.desc ? `(${fileNode.desc})` : ""; options.push({ label: `${value}${desc}`, value: value, }); }); + options.sort((a, b) => a.value.localeCompare(b.value)); return options; }, [workspace.allFiles, workspace.fileTree]); @@ -328,9 +332,7 @@ const NodeInspector: FC = () => { )} {type === "float" && } {type === "boolean" && } - {type === "code" && ( - - )} + {type === "code" && } {type === "enum" && (