wip fix jprop

This commit is contained in:
Rizky 2024-01-03 20:40:11 +07:00
parent e3e7fc9812
commit 5640ebe08a
5 changed files with 75 additions and 32 deletions

View File

@ -97,7 +97,7 @@ export const EdScriptMonaco: FC<{}> = () => {
if (meta) { if (meta) {
const imports = declareScope(p, meta, monaco); const imports = declareScope(p, meta, monaco);
let cur = "page"; let cur = active.comp_id ? active.comp_id : "page";
monaco.editor.getModels().forEach((model) => { monaco.editor.getModels().forEach((model) => {
if ( if (
model.uri.path === `/${cur}_${active.item_id}_src_src.tsx` model.uri.path === `/${cur}_${active.item_id}_src_src.tsx`
@ -106,15 +106,21 @@ export const EdScriptMonaco: FC<{}> = () => {
} }
}); });
const model = editor.getModel();
if (!model) {
const nmodel = monaco.editor.createModel(
val,
"typescript",
monaco.Uri.parse("file:///active.tsx")
);
editor.setModel(nmodel);
}
if (imports) { if (imports) {
local.imports = imports; local.imports = imports;
const end = imports.split("\n").length + 1;
const range = new monaco.Range( const range = new monaco.Range(1, 0, end, 0);
1,
0,
imports.split("\n").length + 1,
0
);
(editor as any).setHiddenAreas([range]); (editor as any).setHiddenAreas([range]);
} }
@ -156,8 +162,8 @@ export const EdScriptMonaco: FC<{}> = () => {
?.getValue() ?.getValue()
.replace(/\{\s*children\s*\}/gi, newval); .replace(/\{\s*children\s*\}/gi, newval);
if (curval.includes("/** IMPORT BOUNDARY **/")) { if (curval.includes("/** IMPORT MODULE **/")) {
curval = curval.split("/** IMPORT BOUNDARY **/\n").pop() || ""; curval = curval.split("/** IMPORT MODULE **/\n").pop() || "";
} }
const text = trim( const text = trim(
@ -170,7 +176,7 @@ export const EdScriptMonaco: FC<{}> = () => {
let final_src = text; let final_src = text;
if (local.imports) { if (local.imports) {
final_src = `${local.imports}\n/** IMPORT BOUNDARY **/\n${text}`; final_src = `${local.imports}\n/** IMPORT MODULE **/\n${text}`;
} }
local.editor.executeEdits(null, [ local.editor.executeEdits(null, [
{ {
@ -218,8 +224,8 @@ export const EdScriptMonaco: FC<{}> = () => {
{ css: "scss", js: "typescript", html: "html" }[p.ui.popup.script.mode] { css: "scss", js: "typescript", html: "html" }[p.ui.popup.script.mode]
} }
onChange={(value) => { onChange={(value) => {
if ((value || "").includes("/** IMPORT BOUNDARY **/")) { if ((value || "").includes("/** IMPORT MODULE **/")) {
const valparts = (value || "").split("/** IMPORT BOUNDARY **/\n"); const valparts = (value || "").split("/** IMPORT MODULE **/\n");
if (valparts.length === 2) local.value = valparts[1]; if (valparts.length === 2) local.value = valparts[1];
} else { } else {
local.value = value || ""; local.value = value || "";

View File

@ -1,6 +1,6 @@
import { extractLoc } from "../../../../../../utils/script/mount"; import { extractLoc } from "../../../../../../utils/script/mount";
import { PG } from "../../../../logic/ed-global"; import { PG, active } from "../../../../logic/ed-global";
import { CodeLoc, Monaco } from "./type"; import { Monaco } from "./type";
export const addScope = ( export const addScope = (
p: PG, p: PG,
@ -20,9 +20,11 @@ export const addScope = (
const arg = extractLoc(uri.path.split("_"), p); const arg = extractLoc(uri.path.split("_"), p);
model.onDidChangeContent((e) => { model.onDidChangeContent((e) => {
const text = model.getValue(); if (arg.id !== active.item_id) {
console.log(arg); const text = model.getValue();
console.warn(text); console.log(arg);
console.warn(text);
}
}); });
} }
}; };

View File

@ -26,6 +26,7 @@ export const extractExport = (p: PG, m: IMeta) => {
if (script?.passprop) { if (script?.passprop) {
for (const [k, v] of Object.entries(script.passprop)) { for (const [k, v] of Object.entries(script.passprop)) {
if (k === "key") continue;
result[k] = { result[k] = {
type: "passprop", type: "passprop",
id: m.item.id, id: m.item.id,

View File

@ -1,9 +1,8 @@
import type { OnMount } from "@monaco-editor/react"; import type { OnMount } from "@monaco-editor/react";
import hash_sum from "hash-sum";
import { IContent } from "../../../../../../utils/types/general"; import { IContent } from "../../../../../../utils/types/general";
import { IMeta, PG, active } from "../../../../logic/ed-global"; import { IMeta, PG, active } from "../../../../logic/ed-global";
import { extractExport } from "./extract-export";
import { addScope } from "./add-scope"; import { addScope } from "./add-scope";
import { extractExport } from "./extract-export";
type Monaco = Parameters<OnMount>[1]; type Monaco = Parameters<OnMount>[1];
export type MonacoEditor = Parameters<OnMount>[0]; export type MonacoEditor = Parameters<OnMount>[0];
@ -18,10 +17,11 @@ export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => {
const paths: IMeta[][] = []; const paths: IMeta[][] = [];
map_childs(metas, entry, paths); map_childs(p, metas, entry, paths);
let cur = "page"; let cur = active.comp_id ? active.comp_id : "page";
const import_map = extract_import_map(cur, paths, meta, p, monaco); const import_map = 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[active.item_id];
}; };
@ -45,12 +45,11 @@ 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) { if (!added.has(m.item.id) && m.item.adv?.js) {
added.add(m.item.id); added.add(m.item.id);
const content = `\ const content = `\
${last_import} ${last_import}
/** IMPORT BOUNDARY **/ /** IMPORT MODULE **/
${m.item.adv.js} ${m.item.adv.js}
`; `;
@ -99,7 +98,7 @@ export const ${k}: typeof _local & { render: ()=>void } = _local;
`file:///${cur}_${v.id}_${v.type}_${k}.tsx`, `file:///${cur}_${v.id}_${v.type}_${k}.tsx`,
`\ `\
${[...imports].join("\n")} ${[...imports].join("\n")}
/** IMPORT BOUNDARY **/ /** IMPORT MODULE **/
${src}` ${src}`
); );
} }
@ -120,7 +119,17 @@ ${src}`
return import_map; return import_map;
}; };
const comp_map = {} as Record<
string,
{
paths: IMeta[][];
prop_imports: Record<string, string>;
exports: Record<string, ReturnType<typeof extractExport>>;
}
>;
const map_childs = ( const map_childs = (
p: PG,
metas: Record<string, IMeta>, metas: Record<string, IMeta>,
childs: IContent[], childs: IContent[],
paths: IMeta[][], paths: IMeta[][],
@ -135,16 +144,41 @@ const map_childs = (
meta.item.component?.id && meta.item.component?.id &&
meta.item.component?.id !== active.comp_id meta.item.component?.id !== active.comp_id
) { ) {
if (meta.item.component?.props) { const comp_id = meta.item.component.id;
for (const [_, p] of Object.entries(meta.item.component.props)) { let jprop = comp_map[comp_id];
if (p.meta?.type === "content-element" && p.content) { if (!jprop) {
// map_childs(metas, [p.content], paths, [...(curpath || []), meta]); const comp_metas = p.comp.list[comp_id].meta;
comp_map[meta.item.component.id] = {
paths: [],
prop_imports: {},
exports: {},
};
const id = p.comp.list[comp_id].doc
.getMap("map")
.get("root")
?.get("id");
if (id) {
map_childs(
p,
comp_metas,
[comp_metas[id].item],
comp_map[meta.item.component.id].paths
);
jprop = comp_map[meta.item.component.id];
for (const path of jprop.paths) {
for (const m of path) {
if (!jprop.exports[m.item.id]) {
jprop.exports[m.item.id] = extractExport(p, m);
}
}
} }
} }
} }
} else { } else {
if (Array.isArray(meta.item.childs)) { if (Array.isArray(meta.item.childs)) {
map_childs(metas, meta.item.childs, paths, [ map_childs(p, metas, meta.item.childs, paths, [
...(curpath || []), ...(curpath || []),
meta, meta,
]); ]);

View File

@ -104,9 +104,9 @@ export const EdTreeName = ({
) : ( ) : (
<div className="flex flex-col"> <div className="flex flex-col">
<Name name={node.text} is_jsx_prop={is_jsx_prop} /> <Name name={node.text} is_jsx_prop={is_jsx_prop} />
{/* <div className={"text-[9px] text-gray-500 -mt-1"}> <div className={"text-[9px] text-gray-500 -mt-1"}>
{node.id} - {item.originalId} {node.id} - {item.originalId}
</div> */} </div>
</div> </div>
)} )}
</div> </div>