diff --git a/app/web/src/nova/ed/ed-right.tsx b/app/web/src/nova/ed/ed-right.tsx index 40b68f24..fbf69da5 100644 --- a/app/web/src/nova/ed/ed-right.tsx +++ b/app/web/src/nova/ed/ed-right.tsx @@ -12,7 +12,7 @@ export const EdRight = () => { meta?.item.type === "item" && meta?.item.component?.id && meta?.item.component.id !== active.comp_id; - const showProp = isComponent && p.ui.side.prop; + return (
{ - if (child.get("id") === m.item.id) { - m.mitem = child; + const cid = child.get("id"); + if (cid) { + if ( + cid === m.item.id || + (m.instances && + m.instances[cid] && + m.instances[cid][m.item.id]) + ) { + m.mitem = child; + } } }); } diff --git a/app/web/src/nova/ed/logic/tree/build.tsx b/app/web/src/nova/ed/logic/tree/build.tsx index 821272fb..5c5a760a 100644 --- a/app/web/src/nova/ed/logic/tree/build.tsx +++ b/app/web/src/nova/ed/logic/tree/build.tsx @@ -104,8 +104,16 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => { export const getMetaById = (p: PG, id: string) => { if (active.comp_id) { - if (p.comp.list[active.comp_id]) - return p.comp.list[active.comp_id].meta[id]; + if (p.comp.list[active.comp_id] && p.comp.list[active.comp_id].meta) { + const meta = p.comp.list[active.comp_id].meta[id]; + if (meta) { + return meta; + } else if (p.comp.list[active.comp_id].meta) { + for (const v of Object.values(p.comp.list[active.comp_id].meta)) { + if (v.item.id === id) return v; + } + } + } } else { return p.page.meta[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 3c44772d..78c7c20d 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 @@ -25,6 +25,7 @@ export const mainPerItemVisit = ( e.currentTarget.blur(); } }; + parts.props.onBlur = (e) => { p.page.prevent_rebuild = false; p.render(); @@ -79,7 +80,16 @@ export const mainPerItemVisit = ( ); parts.props.onPointerOver = (e) => { e.stopPropagation(); - active.hover.id = meta.item.id; + + if (active.comp_id) { + if (meta.parent?.comp_id === active.comp_id && meta.item.originalId) { + active.hover.id = meta.item.originalId; + } else { + active.hover.id = meta.item.id; + } + } else { + active.hover.id = meta.item.id; + } active.hover.renderMain(); active.hover.renderTree(); }; @@ -122,8 +132,15 @@ export const mainPerItemVisit = ( } } else if (meta.parent?.comp_id === active.comp_id) { active.item_id = meta.item.originalId || meta.item.id; - } else { - active.comp_id = ""; + } else if (m) { + if (m.mitem) { + active.comp_id = ""; + } else if (m.parent?.comp_id && m.parent?.instance_id) { + const pmeta = p.page.meta[m.parent.instance_id]; + if (pmeta.item.originalId) { + active.item_id = pmeta.item.originalId; + } + } } } else { if (m) { @@ -141,7 +158,7 @@ const getOuterMeta = (p: { meta: Record }, meta: IMeta) => { if (cur.jsx_prop) return meta; - while (cur?.parent?.instance_id) { + while (cur?.parent?.instance_id && p.meta[cur?.parent?.instance_id]) { cur = p.meta[cur?.parent?.instance_id]; } diff --git a/app/web/src/nova/ed/panel/side/prop-instance.tsx b/app/web/src/nova/ed/panel/side/prop-instance.tsx index 6af1128d..cd583cf2 100644 --- a/app/web/src/nova/ed/panel/side/prop-instance.tsx +++ b/app/web/src/nova/ed/panel/side/prop-instance.tsx @@ -17,21 +17,35 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => { showJSX: false, }); - const item = meta?.item as IItem; - if (!item) return null; + let _meta = meta; + if (active.comp_id) { + if ( + p.comp.list[active.comp_id] && + p.comp.list[active.comp_id].meta && + meta.item.originalId + ) { + const m = p.comp.list[active.comp_id].meta[meta.item.originalId]; + if (m) { + _meta = m; + } + } + } + + const item = _meta?.item as IItem; + if (!item) return <>Warning: Item not found; let filtered = [] as { mprop: FMCompDef; name: string }[]; - const mprops = meta.mitem?.get("component")?.get("props"); - const comp_id = meta.mitem?.get("component")?.get("id") || ""; + const mprops = _meta.mitem?.get("component")?.get("props"); + const comp_id = _meta.mitem?.get("component")?.get("id") || ""; - if (!p.comp.list[comp_id]) return null; + if (!p.comp.list[comp_id]) return <>Warning: Component not found; const mcprops = p.comp.list[comp_id].doc .getMap("map") .get("root") ?.get("component") ?.get("props"); - if (mprops && meta.mitem && mcprops) { + if (mprops && _meta.mitem && mcprops) { mcprops.forEach((m, key) => { let mprop = mprops.get(key); @@ -67,12 +81,12 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => {
- {meta.item.name} + {_meta.item.name}
{ - const item = meta.item as IItem; + const item = _meta.item as IItem; const comp_id = item.component?.id; diff --git a/app/web/src/nova/vi/meta/comp.tsx b/app/web/src/nova/vi/meta/comp.tsx index c1428bbb..ef21eba5 100644 --- a/app/web/src/nova/vi/meta/comp.tsx +++ b/app/web/src/nova/vi/meta/comp.tsx @@ -84,7 +84,7 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => { name, }, parent: { - item, + item: meta.item, instance_id: item.id, comp: pcomp.comp, }, diff --git a/app/web/src/nova/vi/meta/meta.ts b/app/web/src/nova/vi/meta/meta.ts index ac67ecaa..a68a9d40 100644 --- a/app/web/src/nova/vi/meta/meta.ts +++ b/app/web/src/nova/vi/meta/meta.ts @@ -44,9 +44,9 @@ export const genMeta = (p: GenMetaP, arg: GenMetaArg) => { } if (item.id) { if (p.set_meta !== false) { - p.meta[item.id] = meta; + p.meta[meta.item.id] = meta; } - } + } if (item.childs) { for (const [_, v] of Object.entries(item.childs)) { @@ -54,7 +54,7 @@ export const genMeta = (p: GenMetaP, arg: GenMetaArg) => { item: v, is_root: false, parent: { - item, + item: meta.item, instance_id: arg.parent?.instance_id, comp: arg.parent?.comp, },