From 135e7f03df0fe68dbf9a26097a7fc07a0604dd9c Mon Sep 17 00:00:00 2001 From: Rizky Date: Fri, 12 Jan 2024 08:42:50 +0700 Subject: [PATCH] wip fix component --- app/srv/ws/sync/actions/page_load.ts | 6 +++++- app/srv/ws/sync/editor/prep-page.ts | 5 ++++- app/web/src/nova/vi/meta/comp.tsx | 6 +++--- app/web/src/nova/vi/meta/comp/init-comp-load.tsx | 9 +++++++-- app/web/src/nova/vi/meta/comp/instantiate.tsx | 4 +--- app/web/src/nova/vi/meta/meta.ts | 1 - app/web/src/nova/vi/render/script/eval-prop.tsx | 1 - app/web/src/nova/vi/render/script/eval-script.tsx | 6 ++---- app/web/src/nova/vi/render/script/local.tsx | 1 + 9 files changed, 23 insertions(+), 16 deletions(-) diff --git a/app/srv/ws/sync/actions/page_load.ts b/app/srv/ws/sync/actions/page_load.ts index f2344093..5939d024 100644 --- a/app/srv/ws/sync/actions/page_load.ts +++ b/app/srv/ws/sync/actions/page_load.ts @@ -69,7 +69,11 @@ export const page_load: SAction["page"]["load"] = async function ( }; user.active.delAll({ client_id: this.client_id }); - + const page = await db.page.findFirst({ where: { id } }); + if (page) { + await prepContentTree(page.id, page.content_tree, this); + } + if (!snap && !ydoc) { const page = await db.page.findFirst({ where: { id } }); if (page) { diff --git a/app/srv/ws/sync/editor/prep-page.ts b/app/srv/ws/sync/editor/prep-page.ts index 8fae1d56..a4aecfad 100644 --- a/app/srv/ws/sync/editor/prep-page.ts +++ b/app/srv/ws/sync/editor/prep-page.ts @@ -25,7 +25,6 @@ export const prepContentTree = async ( } const meta = {}; - let proot: any = root; genMeta( { comps, @@ -69,6 +68,10 @@ export const loadCompForPage = async (ctree: IRoot, sync: SyncConnection) => { } result.add(id); + mcomps[id] = docs.comp[id].doc + .getMap("map") + .get("root") + ?.toJSON() as IItem; } } ); diff --git a/app/web/src/nova/vi/meta/comp.tsx b/app/web/src/nova/vi/meta/comp.tsx index 4e105aee..eb1d5d0a 100644 --- a/app/web/src/nova/vi/meta/comp.tsx +++ b/app/web/src/nova/vi/meta/comp.tsx @@ -18,6 +18,7 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => { if (item_comp) { let instances: undefined | typeof item.component.instances = undefined; + if (p.mode === "page") { if (!item.component.instances) { item.component.instances = {}; @@ -33,7 +34,7 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => { if (!instances[item.id]) { instances[item.id] = {}; instance = instances[item.id]; - } + } instantiate({ item, @@ -41,7 +42,6 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => { ids: instance, }); } - const meta: IMeta = { item: simplifyItemChild(item), parent: { @@ -73,7 +73,7 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => { prop.content.name = name; genMeta( - { ...p }, + { ...p, mode: "comp" }, { item: prop.content, root: arg.root || prop.content, diff --git a/app/web/src/nova/vi/meta/comp/init-comp-load.tsx b/app/web/src/nova/vi/meta/comp/init-comp-load.tsx index f7f62a79..1acb28b3 100644 --- a/app/web/src/nova/vi/meta/comp/init-comp-load.tsx +++ b/app/web/src/nova/vi/meta/comp/init-comp-load.tsx @@ -24,7 +24,7 @@ export const initLoadComp = async ( } }, }, - set_meta: false, + set_meta: false, note: "init-load-comp", }, { item, ignore_first_component: true } @@ -40,6 +40,11 @@ export const initLoadComp = async ( if (loaded) loaded.add(id); }); - await initLoadComp(p, item, load, loaded); + for (const id of [...loaded]) { + const comp = p.comps[id]; + if (comp) { + await initLoadComp(p, comp, load, loaded); + } + } } }; diff --git a/app/web/src/nova/vi/meta/comp/instantiate.tsx b/app/web/src/nova/vi/meta/comp/instantiate.tsx index 3e8167f9..8221551f 100644 --- a/app/web/src/nova/vi/meta/comp/instantiate.tsx +++ b/app/web/src/nova/vi/meta/comp/instantiate.tsx @@ -29,9 +29,7 @@ export const instantiate = (arg: { } } } - if (!newitem.component.instances) { - newitem.component.instances = {}; - } + newitem.component.instances = item.component?.instances; } for (const key of Object.keys(item)) { diff --git a/app/web/src/nova/vi/meta/meta.ts b/app/web/src/nova/vi/meta/meta.ts index aad56956..0fb86bf4 100644 --- a/app/web/src/nova/vi/meta/meta.ts +++ b/app/web/src/nova/vi/meta/meta.ts @@ -5,7 +5,6 @@ import { simplifyItemChild } from "./simplify"; export const genMeta = (p: GenMetaP, arg: GenMetaArg) => { const item = arg.item as IItem; - if (item.type === "item" && item.component?.id) { if (arg.ignore_first_component !== true) { genComp(p, arg); diff --git a/app/web/src/nova/vi/render/script/eval-prop.tsx b/app/web/src/nova/vi/render/script/eval-prop.tsx index bb7d75ea..60be4884 100644 --- a/app/web/src/nova/vi/render/script/eval-prop.tsx +++ b/app/web/src/nova/vi/render/script/eval-prop.tsx @@ -30,7 +30,6 @@ export const viEvalProps = ( _jsx: true, fn: (arg: { passprop: any; meta: IMeta }) => { const id = prop.content?.id; - console.log(prop); if (id) { const m = vi.meta[id]; if ( diff --git a/app/web/src/nova/vi/render/script/eval-script.tsx b/app/web/src/nova/vi/render/script/eval-script.tsx index 5319d873..4f18953a 100644 --- a/app/web/src/nova/vi/render/script/eval-script.tsx +++ b/app/web/src/nova/vi/render/script/eval-script.tsx @@ -1,4 +1,5 @@ -import { FC, ReactNode, Suspense, lazy, useEffect } from "react"; +import { FC, ReactNode, Suspense, useEffect } from "react"; +import { useLocal } from "web-utils"; import { IMeta } from "../../../ed/logic/ed-global"; import { ErrorBox } from "../../utils/error-box"; import { VG } from "../global"; @@ -7,9 +8,6 @@ import { viScriptArg } from "./arg"; import { updatePropScope } from "./eval-prop"; import { createViLocal } from "./local"; import { createViPassProp } from "./passprop"; -import hash_sum from "hash-sum"; -import { flatten } from "safe-flat"; -import { useLocal } from "web-utils"; export const viEvalScript = ( vi: { diff --git a/app/web/src/nova/vi/render/script/local.tsx b/app/web/src/nova/vi/render/script/local.tsx index cc33acc5..78bcc0cb 100644 --- a/app/web/src/nova/vi/render/script/local.tsx +++ b/app/web/src/nova/vi/render/script/local.tsx @@ -28,6 +28,7 @@ export const createViLocal = ( useEffect(() => { let id = meta.item.id; + if (meta.parent?.instance_id) { const parent_meta = metas[meta.parent?.instance_id]; if (parent_meta && parent_meta.instances) {