This commit is contained in:
Rizky 2024-01-04 08:30:26 +07:00
parent 5640ebe08a
commit abb843c3de
5 changed files with 50 additions and 21 deletions

View File

@ -72,6 +72,8 @@ export const code_edit: SAction["code"]["edit"] = async function (
const res = parseJs(adv.get("js")) || false;
if (res) {
mitem.set("script", res);
} else {
mitem.delete("script");
}
}
}

View File

@ -20,10 +20,16 @@ export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => {
map_childs(p, metas, entry, paths);
let cur = active.comp_id ? active.comp_id : "page";
const import_map = extract_import_map(cur, paths, meta, p, monaco);
const { import_map, parent_id } = extract_import_map(
cur,
paths,
meta,
p,
monaco
);
gen_content(cur, p, paths, import_map, monaco);
return import_map[active.item_id];
return import_map[parent_id];
};
const gen_content = (
@ -38,6 +44,18 @@ const gen_content = (
let idx = 0;
let last_import = "";
for (const m of path) {
if (!added.has(m.item.id) && m.item.adv?.js) {
added.add(m.item.id);
const content = last_import
? `\
${last_import}
/** IMPORT MODULE **/
${m.item.adv.js}`
: m.item.adv.js;
addScope(p, monaco, `file:///${cur}_${m.item.id}_src_src.tsx`, content);
}
if (!import_map[m.item.id]) {
if (idx === 0) {
break;
@ -45,16 +63,6 @@ const gen_content = (
} else {
last_import = import_map[m.item.id];
}
if (!added.has(m.item.id) && m.item.adv?.js) {
added.add(m.item.id);
const content = `\
${last_import}
/** IMPORT MODULE **/
${m.item.adv.js}
`;
addScope(p, monaco, `file:///${cur}_${m.item.id}_src_src.tsx`, content);
}
idx++;
}
}
@ -68,18 +76,23 @@ const extract_import_map = (
monaco: Monaco
) => {
const added = new Set<string>();
let parent_id = "";
const import_map = {} as Record<string, string>;
for (const path of paths) {
const imports = new Set<string>();
if (path.map((e) => e.item.id).includes(meta.item.id)) {
let i = 0;
for (const meta of path) {
if (!added.has(meta.item.id)) {
added.add(meta.item.id);
let prev_m = null as any;
for (const m of path) {
if (m.item.id === meta.item.id) {
if (prev_m) parent_id = prev_m.item.id;
}
prev_m = m;
if (!added.has(m.item.id)) {
added.add(m.item.id);
const ex = extractExport(p, meta);
const ex = extractExport(p, m);
for (const [k, v] of Object.entries(ex)) {
let src = "";
@ -110,13 +123,13 @@ ${src}`
);
}
import_map[meta.item.id] = [...imports].join("\n");
import_map[m.item.id] = [...imports].join("\n");
}
i++;
}
}
}
return import_map;
return { import_map, parent_id };
};
const comp_map = {} as Record<
@ -167,6 +180,7 @@ const map_childs = (
);
jprop = comp_map[meta.item.component.id];
//todo: comp prop src: import from page scope
for (const path of jprop.paths) {
for (const m of path) {
if (!jprop.exports[m.item.id]) {

View File

@ -32,7 +32,20 @@ export const viEvalProps = (
const id = prop.content?.id;
if (id) {
const meta = vi.meta[id];
return <ViRender meta={meta} passprop={arg.passprop} />;
if (
meta.mitem &&
prop.jsxCalledBy !== (meta.item.originalId || meta.item.id)
) {
meta.mitem
.get("component")
?.get("props")
?.get(name)
?.set(
"jsxCalledBy",
meta.item.originalId || meta.item.id
);
}
return <ViRender meta={meta} passprop={arg.passprop} />;
}
return null;
},

View File

@ -1,5 +1,4 @@
import { TypedArray, TypedMap } from "yjs-types";
import { parseJs } from "../../../../srv/ws/sync/editor/parser/parse-js";
import { BasicItem, MBasicItem, MetaItem } from "./meta";
import { FNAdv, FNComponent, FNLayout, FNLinkTag } from "./meta-fn";
import { MSection } from "./section";

View File

@ -30,6 +30,7 @@ export type FNCompDef = {
valueBuilt: any;
gen?: string;
genBuilt?: string;
jsxCalledBy?: string;
content?: IItem;
visible?: string;
meta?: FNCompMeta;