From a353226816f7a4e4c5fbea9aa4d0e7488c0c39bb Mon Sep 17 00:00:00 2001 From: Rizky Date: Thu, 4 Jan 2024 20:25:16 +0700 Subject: [PATCH] wip prop --- app/srv/ws/sync/actions/page_load.ts | 4 ++++ app/srv/ws/sync/editor/prep-page.ts | 16 ++++++++-------- app/web/src/nova/ed/logic/ed-global.ts | 3 +-- app/web/src/nova/ed/logic/tree/build.tsx | 10 ++++++++-- app/web/src/nova/ed/panel/main/main-per-item.tsx | 6 ++---- app/web/src/nova/ed/panel/main/main.tsx | 2 ++ .../panel/popup/script/scope/extract-export.tsx | 13 +++++++++++++ app/web/src/nova/vi/render/global.tsx | 1 + app/web/src/nova/vi/render/render.tsx | 1 + app/web/src/nova/vi/vi.tsx | 2 ++ 10 files changed, 42 insertions(+), 16 deletions(-) diff --git a/app/srv/ws/sync/actions/page_load.ts b/app/srv/ws/sync/actions/page_load.ts index 3a8f5751..71c112da 100644 --- a/app/srv/ws/sync/actions/page_load.ts +++ b/app/srv/ws/sync/actions/page_load.ts @@ -66,6 +66,10 @@ export const page_load: SAction["page"]["load"] = async function ( return data; }); }; + const page = await db.page.findFirst({ where: { id } }); + if (page) { + await prepContentTree(page.id, page.content_tree, this); + } user.active.delAll({ client_id: this.client_id }); diff --git a/app/srv/ws/sync/editor/prep-page.ts b/app/srv/ws/sync/editor/prep-page.ts index 0a8dfc68..42a609fc 100644 --- a/app/srv/ws/sync/editor/prep-page.ts +++ b/app/srv/ws/sync/editor/prep-page.ts @@ -30,18 +30,18 @@ export const prepContentTree = async ( comps, meta, on: { - visit(meta, item) { - if (item.adv?.js) { - item.script = parseJs(item.adv.js); - } - + visit_component(item) { if (item.component?.id) { if (!item.component?.instances) { item.component.instances = {}; - meta.item.childs = []; } } }, + visit(meta, item) { + if (item.adv?.js) { + item.script = parseJs(item.adv.js); + } + }, }, mode: "page", }, @@ -56,10 +56,10 @@ export const loadCompForPage = async (ctree: IRoot, sync: SyncConnection) => { const mcomps: GenMetaP["comps"] = {}; const result = new Set(); const loading = {} as Record>; - for (const mchild of ctree.childs) { + for (const child of ctree.childs) { await initLoadComp( { comps: mcomps, meta, mode: "page" }, - mchild as unknown as IItem, + child as unknown as IItem, async (comp_ids) => { for (const id of comp_ids) { if (!docs.comp[id]) { diff --git a/app/web/src/nova/ed/logic/ed-global.ts b/app/web/src/nova/ed/logic/ed-global.ts index 8464c91d..88ff15ea 100644 --- a/app/web/src/nova/ed/logic/ed-global.ts +++ b/app/web/src/nova/ed/logic/ed-global.ts @@ -8,8 +8,7 @@ import { IItem } from "../../../utils/types/item"; import { DComp, DPage } from "../../../utils/types/root"; import { GenMetaP, - ISimpleMeta, - IMeta as LogicMeta, + IMeta as LogicMeta } from "../../vi/utils/types"; export type IMeta = LogicMeta; diff --git a/app/web/src/nova/ed/logic/tree/build.tsx b/app/web/src/nova/ed/logic/tree/build.tsx index 1f720639..e1630c2e 100644 --- a/app/web/src/nova/ed/logic/tree/build.tsx +++ b/app/web/src/nova/ed/logic/tree/build.tsx @@ -1,12 +1,18 @@ import { createId } from "@paralleldrive/cuid2"; import { IItem, MItem } from "../../../../utils/types/item"; -import { FMCompDef, FNCompDef } from "../../../../utils/types/meta-fn"; import { genMeta } from "../../../vi/meta/meta"; -import { IMeta, PG } from "../ed-global"; +import { IMeta, PG, active } from "../ed-global"; import { assignMitem } from "./assign-mitem"; import { pushTreeNode } from "./build/push-tree"; export const treeRebuild = async (p: PG, arg?: { note?: string }) => { + if (document.activeElement) { + const a = document.activeElement; + if (a.tagName === "DIV" && a.getAttribute("contenteditable") === "true") { + return; + } + } + const is_layout = p.site.layout && p.site.layout.id === p.page.cur.id && diff --git a/app/web/src/nova/ed/panel/main/main-per-item.tsx b/app/web/src/nova/ed/panel/main/main-per-item.tsx index 6ab5c439..5b526b8c 100644 --- a/app/web/src/nova/ed/panel/main/main-per-item.tsx +++ b/app/web/src/nova/ed/panel/main/main-per-item.tsx @@ -59,10 +59,8 @@ export const mainPerItemVisit = ( text_edit.id === meta.item.id || text_edit.id === meta.item.originalId ) { - if (document.activeElement !== el) { - setCaret(el, text_edit.caret); - text_edit.caret = null; - } + setCaret(el, text_edit.caret); + text_edit.caret = null; } } }; diff --git a/app/web/src/nova/ed/panel/main/main.tsx b/app/web/src/nova/ed/panel/main/main.tsx index 524eb9ff..efbf5278 100644 --- a/app/web/src/nova/ed/panel/main/main.tsx +++ b/app/web/src/nova/ed/panel/main/main.tsx @@ -2,6 +2,8 @@ import { useGlobal, useLocal } from "web-utils"; import { Vi } from "../../../vi/vi"; import { EDGlobal, active } from "../../logic/ed-global"; import { mainPerItemVisit } from "./main-per-item"; +import { VG } from "../../../vi/render/global"; +import { IItem } from "../../../../utils/types/item"; export const EdMain = () => { // return
; diff --git a/app/web/src/nova/ed/panel/popup/script/scope/extract-export.tsx b/app/web/src/nova/ed/panel/popup/script/scope/extract-export.tsx index bc9541f0..882fd3c5 100644 --- a/app/web/src/nova/ed/panel/popup/script/scope/extract-export.tsx +++ b/app/web/src/nova/ed/panel/popup/script/scope/extract-export.tsx @@ -49,5 +49,18 @@ export const extractExport = (p: PG, m: IMeta) => { } } + const props = m.item.component?.props; + if (props) { + for (const [k, v] of Object.entries(props)) { + result[k] = { + type: "prop", + id: m.item.id, + start: 0, + end: 0, + val: v.value, + }; + } + } + return result; }; diff --git a/app/web/src/nova/vi/render/global.tsx b/app/web/src/nova/vi/render/global.tsx index b92c3e33..e06a16e8 100644 --- a/app/web/src/nova/vi/render/global.tsx +++ b/app/web/src/nova/vi/render/global.tsx @@ -1,3 +1,4 @@ +import { IItem } from "../../../utils/types/item"; import { IMeta } from "../../ed/logic/ed-global"; import { viParts } from "./parts"; diff --git a/app/web/src/nova/vi/render/render.tsx b/app/web/src/nova/vi/render/render.tsx index 45ba6db0..7a79da37 100644 --- a/app/web/src/nova/vi/render/render.tsx +++ b/app/web/src/nova/vi/render/render.tsx @@ -11,6 +11,7 @@ export const ViRender: FC<{ children?: ReactNode; passprop?: any; }> = ({ meta, children, passprop }) => { + const vi = useGlobal(ViGlobal, "VI"); if (!meta) return null; if (meta.item.hidden) return null; diff --git a/app/web/src/nova/vi/vi.tsx b/app/web/src/nova/vi/vi.tsx index 67254ff7..cfcc11d9 100644 --- a/app/web/src/nova/vi/vi.tsx +++ b/app/web/src/nova/vi/vi.tsx @@ -8,6 +8,7 @@ import { ErrorBox } from "./utils/error-box"; export const Vi: FC<{ meta: Record; + comp_load?: (comp_id: string) => Promise; entry: string[]; api_url: string; site_id: string; @@ -18,6 +19,7 @@ export const Vi: FC<{ visit?: VG["visit"]; }> = ({ meta, entry, api_url, site_id, api, db, visit, script }) => { const vi = useGlobal(ViGlobal, "VI"); + if (vi.meta !== meta) { vi.meta = meta; }