From 8199a0d24e601a9044bd431052c76fbe5ad723c5 Mon Sep 17 00:00:00 2001 From: codetypes Date: Thu, 20 Mar 2025 13:05:04 +0800 Subject: [PATCH] fix editing variable no not use group --- sample/workdir/subtree1.json | 13 +++++++------ src/components/editor.tsx | 24 +++--------------------- src/components/inspector.tsx | 31 ++++++++++++++++--------------- src/misc/util.ts | 18 ++++++++++++++++-- 4 files changed, 42 insertions(+), 44 deletions(-) diff --git a/sample/workdir/subtree1.json b/sample/workdir/subtree1.json index e1d7a4a..aeaf0af 100644 --- a/sample/workdir/subtree1.json +++ b/sample/workdir/subtree1.json @@ -1,5 +1,11 @@ { + "version": "1.8.0", "name": "subtree1", + "desc": "子树1", + "firstid": 1, + "group": [], + "import": [], + "declvar": [], "root": { "id": 1, "name": "Sequence", @@ -20,10 +26,5 @@ } } ] - }, - "desc": "子树1", - "firstid": 1, - "group": [], - "import": [], - "declvar": [] + } } \ No newline at end of file diff --git a/src/components/editor.tsx b/src/components/editor.tsx index d4b0921..e6d4f53 100644 --- a/src/components/editor.tsx +++ b/src/components/editor.tsx @@ -21,21 +21,13 @@ import { EditTree, useWorkspace, } from "../contexts/workspace-context"; -import { - ImportDef, - isExprType, - NodeModel, - TreeGraphData, - TreeModel, - VarDef, - VERSION, -} from "../misc/b3type"; +import { ImportDef, isExprType, NodeModel, TreeGraphData, TreeModel, VarDef } from "../misc/b3type"; import * as b3util from "../misc/b3util"; import { message } from "../misc/hooks"; import i18n from "../misc/i18n"; import { Hotkey, isMacos, useKeyDown } from "../misc/keys"; import Path from "../misc/path"; -import { mergeClassNames, readJson } from "../misc/util"; +import { mergeClassNames, readJson, writeTree } from "../misc/util"; import "./register-node"; import { calcTreeDataSize } from "./register-node"; @@ -829,17 +821,7 @@ export const Editor: FC = ({ onUpdate: updateState, data: editor, . editor.autoId = b3util.refreshTreeDataId(editor.root, editor.data.firstid); editor.data.root = b3util.createFileData(editor.root); editor.modifiedTime = Date.now(); - fs.writeFileSync( - path, - JSON.stringify( - { - ...editor.data, - version: VERSION, - }, - null, - 2 - ) - ); + writeTree(path, editor.data); workspace.updateFileMeta(editor); editor.unsave = false; editor.graph.changeData(editor.root); diff --git a/src/components/inspector.tsx b/src/components/inspector.tsx index 781e5af..fc08135 100644 --- a/src/components/inspector.tsx +++ b/src/components/inspector.tsx @@ -60,18 +60,17 @@ interface VarDefItem extends VarDef { } interface VarDefItemProps { - id: number; + name: number; disabled?: boolean; value?: VarDefItem; onChange?: (vardef: VarDefItem) => void; - onRemove?: (index: number | number[]) => void; + onRemove?: (name: number | number[]) => void; } -const VarDefItem: FC = ({ id, value, onChange, onRemove, disabled }) => { +const VarDefItem: FC = ({ name, onChange, onRemove, disabled, ...props }) => { const { t } = useTranslation(); const form = useFormInstance(); - const [name, setName] = useState(value?.name ?? ""); - const [desc, setDesc] = useState(value?.desc ?? ""); + const [value, setValue] = useState(props.value ?? { name: "", desc: "" }); const { editing } = useWorkspace( useShallow((state) => ({ editing: state.editing, @@ -79,7 +78,7 @@ const VarDefItem: FC = ({ id, value, onChange, onRemove, disabl ); const onSubmit = () => { - onChange?.({ name, desc }); + onChange?.(value); form.submit(); }; @@ -108,24 +107,24 @@ const VarDefItem: FC = ({ id, value, onChange, onRemove, disabl setName(e.target.value)} + onChange={(e) => setValue({ ...value, name: e.target.value })} /> setDesc(e.target.value)} + onChange={(e) => setValue({ ...value, desc: e.target.value })} /> {!disabled && ( { - onRemove?.(id); + onRemove?.(name); form.submit(); }} /> @@ -257,7 +256,9 @@ const TreeInspector: FC = () => { desc: values.desc, export: values.export, firstid: Number(values.firstid), - group: Array.from(new Set((values.group as GroupDef[]).map((v) => (v.value ? v.name : "")))) + group: Array.from( + new Set(((values.group ?? []) as GroupDef[]).map((v) => (v.value ? v.name : ""))) + ) .filter((v) => v) .sort((a, b) => a.localeCompare(b)), declvar: (values.declvar as VarDef[]) @@ -369,7 +370,7 @@ const TreeInspector: FC = () => { }, ]} > - + ))} {
{fields.map((item) => ( - + ))}
@@ -456,7 +457,7 @@ const TreeInspector: FC = () => {
{vars.map((v) => ( - + ))}
diff --git a/src/misc/util.ts b/src/misc/util.ts index 213a173..54842a9 100644 --- a/src/misc/util.ts +++ b/src/misc/util.ts @@ -7,16 +7,30 @@ export const readJson = (path: string) => { }; export const readTree = (path: string) => { - const str = fs.readFileSync(path, "utf-8"); - const data = JSON.parse(str) as TreeModel; + const data = readJson(path); data.version = data.version ?? VERSION; data.firstid = data.firstid ?? 1; data.group = data.group || []; data.import = data.import || []; data.declvar = data.declvar || []; + data.root = data.root || {}; return data; }; +export const writeTree = (path: string, data: TreeModel) => { + writeJson(path, { + version: VERSION, + name: data.name, + desc: data.desc, + firstid: data.firstid, + export: data.export, + group: data.group, + import: data.import, + declvar: data.declvar, + root: data.root, + }); +}; + export const writeJson = (path: string, data: unknown) => { const str = JSON.stringify(data, undefined, 2); fs.writeFileSync(path, str, "utf-8");