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) {
const imports = declareScope(p, meta, monaco);
let cur = "page";
let cur = active.comp_id ? active.comp_id : "page";
monaco.editor.getModels().forEach((model) => {
if (
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) {
local.imports = imports;
const range = new monaco.Range(
1,
0,
imports.split("\n").length + 1,
0
);
const end = imports.split("\n").length + 1;
const range = new monaco.Range(1, 0, end, 0);
(editor as any).setHiddenAreas([range]);
}
@ -156,8 +162,8 @@ export const EdScriptMonaco: FC<{}> = () => {
?.getValue()
.replace(/\{\s*children\s*\}/gi, newval);
if (curval.includes("/** IMPORT BOUNDARY **/")) {
curval = curval.split("/** IMPORT BOUNDARY **/\n").pop() || "";
if (curval.includes("/** IMPORT MODULE **/")) {
curval = curval.split("/** IMPORT MODULE **/\n").pop() || "";
}
const text = trim(
@ -170,7 +176,7 @@ export const EdScriptMonaco: FC<{}> = () => {
let final_src = text;
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, [
{
@ -218,8 +224,8 @@ export const EdScriptMonaco: FC<{}> = () => {
{ css: "scss", js: "typescript", html: "html" }[p.ui.popup.script.mode]
}
onChange={(value) => {
if ((value || "").includes("/** IMPORT BOUNDARY **/")) {
const valparts = (value || "").split("/** IMPORT BOUNDARY **/\n");
if ((value || "").includes("/** IMPORT MODULE **/")) {
const valparts = (value || "").split("/** IMPORT MODULE **/\n");
if (valparts.length === 2) local.value = valparts[1];
} else {
local.value = value || "";

View File

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

View File

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

View File

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

View File

@ -104,9 +104,9 @@ export const EdTreeName = ({
) : (
<div className="flex flex-col">
<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}
</div> */}
</div>
</div>
)}
</div>