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; const res = parseJs(adv.get("js")) || false;
if (res) { if (res) {
mitem.set("script", 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); map_childs(p, metas, entry, paths);
let cur = active.comp_id ? active.comp_id : "page"; 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); gen_content(cur, p, paths, import_map, monaco);
return import_map[active.item_id]; return import_map[parent_id];
}; };
const gen_content = ( const gen_content = (
@ -38,6 +44,18 @@ const gen_content = (
let idx = 0; let idx = 0;
let last_import = ""; let last_import = "";
for (const m of path) { 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 (!import_map[m.item.id]) {
if (idx === 0) { if (idx === 0) {
break; break;
@ -45,16 +63,6 @@ const gen_content = (
} else { } else {
last_import = import_map[m.item.id]; 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++; idx++;
} }
} }
@ -68,18 +76,23 @@ const extract_import_map = (
monaco: Monaco monaco: Monaco
) => { ) => {
const added = new Set<string>(); const added = new Set<string>();
let parent_id = "";
const import_map = {} as Record<string, string>; const import_map = {} as Record<string, string>;
for (const path of paths) { for (const path of paths) {
const imports = new Set<string>(); const imports = new Set<string>();
if (path.map((e) => e.item.id).includes(meta.item.id)) { if (path.map((e) => e.item.id).includes(meta.item.id)) {
let i = 0; let i = 0;
for (const meta of path) { let prev_m = null as any;
if (!added.has(meta.item.id)) { for (const m of path) {
added.add(meta.item.id); 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)) { for (const [k, v] of Object.entries(ex)) {
let src = ""; let src = "";
@ -110,13 +123,13 @@ ${src}`
); );
} }
import_map[meta.item.id] = [...imports].join("\n"); import_map[m.item.id] = [...imports].join("\n");
} }
i++; i++;
} }
} }
} }
return import_map; return { import_map, parent_id };
}; };
const comp_map = {} as Record< const comp_map = {} as Record<
@ -167,6 +180,7 @@ const map_childs = (
); );
jprop = comp_map[meta.item.component.id]; jprop = comp_map[meta.item.component.id];
//todo: comp prop src: import from page scope
for (const path of jprop.paths) { for (const path of jprop.paths) {
for (const m of path) { for (const m of path) {
if (!jprop.exports[m.item.id]) { if (!jprop.exports[m.item.id]) {

View File

@ -32,6 +32,19 @@ export const viEvalProps = (
const id = prop.content?.id; const id = prop.content?.id;
if (id) { if (id) {
const meta = vi.meta[id]; const meta = vi.meta[id];
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 <ViRender meta={meta} passprop={arg.passprop} />;
} }
return null; return null;

View File

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

View File

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