From 65da157965d90240ef58a1fe600509d45e82193e Mon Sep 17 00:00:00 2001 From: Rizky Date: Sat, 9 Dec 2023 12:32:15 +0700 Subject: [PATCH] wip fix --- app/web/src/nova/ed/logic/ed-global.ts | 1 + app/web/src/nova/ed/logic/tree/sync-walk.tsx | 4 +++ app/web/src/nova/ed/panel/main/main.tsx | 5 ++++ .../src/nova/ed/panel/popup/script/monaco.tsx | 1 + .../panel/side/prop-instance/prop-option.tsx | 1 - .../src/nova/ed/panel/tree/node/render.tsx | 25 +------------------ app/web/src/nova/view/logic/load-code-old.ts | 2 +- .../src/nova/view/render/meta/children.tsx | 9 +------ app/web/src/nova/view/render/meta/elprop.tsx | 0 app/web/src/nova/view/render/meta/script.tsx | 14 ++++++++--- .../view/render/meta/script/comp-propval.tsx | 13 +++------- app/web/src/utils/script/mount.tsx | 20 ++++++++++++++- package.json | 4 +-- 13 files changed, 50 insertions(+), 49 deletions(-) delete mode 100644 app/web/src/nova/view/render/meta/elprop.tsx diff --git a/app/web/src/nova/ed/logic/ed-global.ts b/app/web/src/nova/ed/logic/ed-global.ts index f57ece88..a780321d 100644 --- a/app/web/src/nova/ed/logic/ed-global.ts +++ b/app/web/src/nova/ed/logic/ed-global.ts @@ -126,6 +126,7 @@ export type EdMeta = { el?: ReactElement; is_layout?: boolean; jsx_prop_name?: string; + jsx_prop_root?: boolean; /** script related meta **/ jsx_scope_id?: string; propval?: Record; diff --git a/app/web/src/nova/ed/logic/tree/sync-walk.tsx b/app/web/src/nova/ed/logic/tree/sync-walk.tsx index 58feb0eb..9938cd39 100644 --- a/app/web/src/nova/ed/logic/tree/sync-walk.tsx +++ b/app/web/src/nova/ed/logic/tree/sync-walk.tsx @@ -76,6 +76,7 @@ export const syncWalkMap = ( parent_item: EdMeta["parent_item"]; parent_mcomp?: EdMeta["parent_mcomp"]; jsx_prop_name?: string; + jsx_prop_root?: boolean; skip_add_tree?: boolean; tree_root_id: string; each?: (meta: EdMeta) => void; @@ -239,6 +240,7 @@ export const syncWalkMap = ( tree_root_id: arg.tree_root_id, mitem: mcontent, jsx_prop_name: k, + jsx_prop_root: true, parent_mcomp: { minstance, meta, mcomp }, parent_item: { id: item.id, mitem: mitem as MItem }, portal: arg.portal, @@ -279,6 +281,7 @@ export const syncWalkMap = ( is_layout: arg.is_layout, item, jsx_prop_name: arg.jsx_prop_name, + jsx_prop_root: arg.jsx_prop_root, mitem: mitem as MItem, parent_item, parent_mcomp: arg.parent_mcomp, @@ -311,6 +314,7 @@ export const syncWalkMap = ( is_layout: arg.is_layout, tree_root_id: arg.tree_root_id, mitem: e, + jsx_prop_name: arg.jsx_prop_name, parent_item: { id: item.id, mitem: mitem as MItem }, parent_mcomp: arg.parent_mcomp, portal: arg.portal, diff --git a/app/web/src/nova/ed/panel/main/main.tsx b/app/web/src/nova/ed/panel/main/main.tsx index 481876c4..b68a5983 100644 --- a/app/web/src/nova/ed/panel/main/main.tsx +++ b/app/web/src/nova/ed/panel/main/main.tsx @@ -67,6 +67,8 @@ export const EdMain = () => { }, set(meta) { const outer = getOuterItem(meta); + console.log(meta); + if (outer) { active.item_id = outer.id; } @@ -154,6 +156,9 @@ export const EdMain = () => { const getOuterItem = (meta: EdMeta) => { let cur: undefined | EdMeta = meta; + + if (cur.jsx_prop_name) return meta.item; + while (cur.parent_mcomp) { cur = cur.parent_mcomp.meta; } diff --git a/app/web/src/nova/ed/panel/popup/script/monaco.tsx b/app/web/src/nova/ed/panel/popup/script/monaco.tsx index e325c1f7..4065c702 100644 --- a/app/web/src/nova/ed/panel/popup/script/monaco.tsx +++ b/app/web/src/nova/ed/panel/popup/script/monaco.tsx @@ -47,6 +47,7 @@ export const ScriptMonaco = () => { }, []); useEffect(() => { + clearTimeout(scriptEdit.timeout); (async () => { const editor = local.editor; const monaco = local.monaco; diff --git a/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx b/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx index c3cda8b1..67d0df64 100644 --- a/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx +++ b/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx @@ -101,7 +101,6 @@ else metaOptions = resOpt; local.render(); }} onChange={(sel) => { - console.log(sel); if (!sel) { local.val = evalue; local.isOpen = false; diff --git a/app/web/src/nova/ed/panel/tree/node/render.tsx b/app/web/src/nova/ed/panel/tree/node/render.tsx index 5b512b22..c2a782dd 100644 --- a/app/web/src/nova/ed/panel/tree/node/render.tsx +++ b/app/web/src/nova/ed/panel/tree/node/render.tsx @@ -29,35 +29,12 @@ export const nodeRender: NodeRender = (node, prm) => { ); } - if (node.data?.jsx_prop_name) { + if (node.data?.jsx_prop_root && node.data?.jsx_prop_name) { const meta = getMetaById(p, node.data?.parent_item.id); if (meta) { if (meta.propvis) { jsxPropVisCache[meta.item.id] = meta.propvis; if (meta.propvis[node.data.jsx_prop_name] === false) return <>; - } else { - if (jsxPropVisCache[meta.item.id]) { - meta.propvis = jsxPropVisCache[meta.item.id]; - if (meta.propvis) { - if (meta.propvis[node.data.jsx_prop_name] === false) return <>; - } - } else { - if (!jsxPropLoadingRender[meta.item.id]) { - setTimeout(p.render, 100); - setTimeout(p.render, 500); - jsxPropLoadingRender[meta.item.id] = node.data.jsx_prop_name; - } - if (jsxPropLoadingRender[meta.item.id] === node.data.jsx_prop_name) { - return ( -
- -
- ); - } - return <>; - } } } } diff --git a/app/web/src/nova/view/logic/load-code-old.ts b/app/web/src/nova/view/logic/load-code-old.ts index 44a1cfe2..237b6674 100644 --- a/app/web/src/nova/view/logic/load-code-old.ts +++ b/app/web/src/nova/view/logic/load-code-old.ts @@ -45,7 +45,7 @@ export const oldLoadCode = async (v: VG) => { exports: {} as any, }, }; - exec(site.js_compiled, scope); + await exec(site.js_compiled, scope); if (scope.module.exports) { for (const [k, v] of Object.entries(scope.module.exports)) { w.exports[k] = v; diff --git a/app/web/src/nova/view/render/meta/children.tsx b/app/web/src/nova/view/render/meta/children.tsx index 5abdf692..e3ba7e6e 100644 --- a/app/web/src/nova/view/render/meta/children.tsx +++ b/app/web/src/nova/view/render/meta/children.tsx @@ -37,12 +37,5 @@ export const ViewMetaChildren: FC<{ } } - return ( - <> - {/*
- {item.id} - {item.originalId} -
*/} - {Object.values(children)} - - ); + return <>{Object.values(children)}; }; diff --git a/app/web/src/nova/view/render/meta/elprop.tsx b/app/web/src/nova/view/render/meta/elprop.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/app/web/src/nova/view/render/meta/script.tsx b/app/web/src/nova/view/render/meta/script.tsx index 7007dc56..be1d6f78 100644 --- a/app/web/src/nova/view/render/meta/script.tsx +++ b/app/web/src/nova/view/render/meta/script.tsx @@ -1,5 +1,5 @@ import hash_sum from "hash-sum"; -import { FC, ReactNode, useEffect } from "react"; +import { FC, ReactNode, isValidElement, useEffect } from "react"; import { useLocal } from "web-utils"; import { produceCSS } from "../../../../utils/css/gen"; import { createAPI, createDB } from "../../../../utils/script/init-api"; @@ -170,8 +170,16 @@ export const ViewMetaScript: FC<{ }, useEffect: useEffect, render: (jsx: ReactNode) => { - output.jsx = jsx; - renderLimit[v.current.page_id][item.id].cache = output.jsx; + if (isValidElement(jsx)) { + // output.jsx = ( + // <> + //
{item.id}
+ // {jsx} + // + // ); + output.jsx = jsx; + renderLimit[v.current.page_id][item.id].cache = output.jsx; + } }, }; diff --git a/app/web/src/nova/view/render/meta/script/comp-propval.tsx b/app/web/src/nova/view/render/meta/script/comp-propval.tsx index 86927517..39701b10 100644 --- a/app/web/src/nova/view/render/meta/script/comp-propval.tsx +++ b/app/web/src/nova/view/render/meta/script/comp-propval.tsx @@ -61,7 +61,8 @@ export const compPropVal = ( prop.value ); } - } else if (prop.meta?.type === "content-element") { + } + if (prop.meta?.type === "content-element") { if (!(typeof value === "object" && !!value && value._jsx)) { const id = `${meta.item.id}-${name}`; if (!jsxProps[id]) { @@ -79,14 +80,7 @@ export const compPropVal = ( let parent = v.meta[parent_id]; if (meta && parent) { - if (v.scope) { - while (parent) { - if (v.scope[parent.item.id]) { - v.scope[prop.content.id] = v.scope[parent.item.id]; - } - parent = v.meta[parent.parent_item.id]; - } - } + meta.parent_item.id = parent_id; return ( { const id = path[path.length - 1].replace(".d.ts", ""); if (type === "prop") { + if (p.ui.popup.script.type === "item") { + p.ui.popup.script.open = false; + p.render(); + setTimeout(() => { + p.ui.popup.script.open = true; + p.render(); + }, 100); + } + p.ui.popup.script.prop_name = path[1]; p.ui.popup.script.type = "prop-instance"; p.ui.popup.script.prop_kind = "value"; @@ -66,7 +75,16 @@ export const jsMount = async (editor: MonacoEditor, monaco: Monaco, p?: PG) => { return false; } else { - p.ui.popup.script.type = "item"; + if (p.ui.popup.script.type !== "item") { + p.ui.popup.script.open = false; + p.ui.popup.script.type = "item"; + p.ui.popup.script.prop_name = ""; + p.render(); + setTimeout(() => { + p.ui.popup.script.open = true; + p.render(); + }, 100); + } } if (comp_id) { diff --git a/package.json b/package.json index 4f9717e1..b55e12c4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "type": "module", "scripts": { "dev": "bun run --hot ./pkgs/core/index.ts dev", - "clean": "rm -rf app/static && rm -rf app/web/.parcel-cache", + "clean": "rm -rf data/lmdb && rm -rf app/static && rm -rf app/web/.parcel-cache", "build": "bun run --silent ./pkgs/core/build.ts", "build-site": "bun run --silent ./pkgs/core/build-site.ts", "db-pull": "bun run ./pkgs/crm -rf data && rore/db-pull.ts", @@ -29,4 +29,4 @@ "fdir": "^6.1.0", "typescript": "^5.2.2" } -} +} \ No newline at end of file