From 960162fa08f9a2f0f4eba27adee5bc926b9d0aba Mon Sep 17 00:00:00 2001 From: rizrmd Date: Sat, 25 May 2024 01:01:12 +0700 Subject: [PATCH] fix expand tree --- .../src/nova/ed/panel/main/main-history.tsx | 29 +++++++++++++------ .../ed/panel/tree/node/item/indent-hook.ts | 11 ++++--- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/app/web/src/nova/ed/panel/main/main-history.tsx b/app/web/src/nova/ed/panel/main/main-history.tsx index 3d381ec8..aa34fabd 100644 --- a/app/web/src/nova/ed/panel/main/main-history.tsx +++ b/app/web/src/nova/ed/panel/main/main-history.tsx @@ -1,17 +1,17 @@ -import { useGlobal, useLocal } from "web-utils"; -import { EDGlobal } from "../../logic/ed-global"; import { FC, useEffect } from "react"; import { decompress } from "wasm-gzip"; -import { Vi } from "../../../vi/vi"; -import { genMeta } from "../../../vi/meta/meta"; -import { IRoot } from "../../../../utils/types/root"; +import { deepClone, useGlobal, useLocal } from "web-utils"; import { IContent } from "../../../../utils/types/general"; -import { initLoadComp } from "../../../vi/meta/comp/init-comp-load"; -import { loadCompSnapshot, loadComponent } from "../../logic/comp/load"; import { IItem } from "../../../../utils/types/item"; -import { mainStyle } from "./main"; +import { IRoot } from "../../../../utils/types/root"; import { Loading } from "../../../../utils/ui/loading"; +import { initLoadComp } from "../../../vi/meta/comp/init-comp-load"; +import { genMeta } from "../../../vi/meta/meta"; +import { Vi } from "../../../vi/vi"; +import { loadCompSnapshot, loadComponent } from "../../logic/comp/load"; +import { EDGlobal } from "../../logic/ed-global"; import { treeRebuild } from "../../logic/tree/build"; +import { mainStyle } from "./main"; const decoder = new TextDecoder(); export const EdPageHistoryMain: FC<{}> = ({}) => { @@ -92,7 +92,7 @@ export const EdPageHistoryMain: FC<{}> = ({}) => {
{ if (confirm("Are you sure ?") && local.root) { p.page.history.id = ""; @@ -140,6 +140,17 @@ export const EdPageHistoryMain: FC<{}> = ({}) => { page_id={p.page.cur.id} entry={local.entry} api={p.script.api} + comp_load={async (comp_id) => { + let comp = p.comp.loaded[comp_id]; + if (comp) { + return comp; + } + + await loadComponent(p, comp_id); + comp = p.comp.loaded[comp_id]; + + return deepClone(comp); + }} db={p.script.db} script={{ init_local_effect: p.script.init_local_effect }} /> diff --git a/app/web/src/nova/ed/panel/tree/node/item/indent-hook.ts b/app/web/src/nova/ed/panel/tree/node/item/indent-hook.ts index 974f107d..aa5d9a22 100644 --- a/app/web/src/nova/ed/panel/tree/node/item/indent-hook.ts +++ b/app/web/src/nova/ed/panel/tree/node/item/indent-hook.ts @@ -30,11 +30,14 @@ export const expandTreeHook = ( let meta: IMeta | undefined = getMetaById(p, id); while (meta) { const id = meta.parent?.id; - if (id && !shouldOpen.has(id)) { - shouldOpen.add(id); + if (id) { meta = getMetaById(p, id); - } else { - break; + + if (!shouldOpen.has(id)) { + shouldOpen.add(id); + } else if ((meta && !meta.parent) || !meta) { + break; + } } } }