This commit is contained in:
Rizky 2024-03-26 11:17:37 +07:00
parent 25a32dfae7
commit 051b71f944
7 changed files with 88 additions and 34 deletions

File diff suppressed because one or more lines are too long

View File

@ -17,7 +17,6 @@ export const loadcomp = {
};
export const loadComponent = async (p: PG, id_comp: string, sync?: boolean) => {
console.log("load comp", id_comp);
return new Promise<boolean>((resolve) => {
if (p.comp.list[id_comp]) {
resolve(true);

View File

@ -5,7 +5,7 @@ import { FMCompDef } from "../../../../utils/types/meta-fn";
import { initLoadComp } from "../../../vi/meta/comp/init-comp-load";
import { genMeta } from "../../../vi/meta/meta";
import { nav } from "../../../vi/render/script/extract-nav";
import { loadCompSnapshot } from "../comp/load";
import { loadCompSnapshot, loadComponent } from "../comp/load";
import { IMeta, PG, active } from "../ed-global";
import { assignMitem } from "./assign-mitem";
import { pushTreeNode } from "./build/push-tree";
@ -122,6 +122,12 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
pushTreeNode(p, m, meta, p.page.tree);
}
if (m.item.component?.id) {
if (!p.comp.loaded[m.item.component.id]) {
loadComponent(p, m.item.component.id);
}
}
assignMitem({
m,
root: item,

View File

@ -1,9 +1,12 @@
import { createId } from "@paralleldrive/cuid2";
import { FMCompDef } from "../../../../utils/types/meta-fn";
import { IMeta } from "../../../ed/logic/ed-global";
import { VG } from "../global";
import { ViRender } from "../render";
import { viScriptArg } from "./arg";
import { replaceWithObject, replacement } from "./eval-script";
import { extractNavigate } from "./extract-nav";
import type { Doc } from "yjs";
export const viEvalProps = (
vi: {
@ -108,6 +111,14 @@ export const viEvalProps = (
extractNavigate(vi, prop.value);
}
if (!prop.valueBuilt && prop.value && meta.mitem) {
const mprop = meta.mitem?.get("component")?.get("props")?.get(name);
if (mprop) {
updatePropValueBuilt(mprop, prop.value);
return;
}
}
const js = prop.valueBuilt || "";
const src = replaceWithObject(js, replacement) || "";
const fn = new Function(
@ -140,6 +151,46 @@ export const viEvalProps = (
}
};
const conf = {
timeout: null as any,
set: new WeakSet<FMCompDef>(),
map: {} as Record<string, { mprop: FMCompDef }>,
src: {} as Record<string, string>,
};
const updatePropValueBuilt = (mprop: FMCompDef, src: string) => {
if (!conf.set.has(mprop)) {
conf.set.add(mprop);
const id = createId();
conf.map[id] = { mprop };
conf.src[id] = src;
}
clearTimeout(conf.timeout);
conf.timeout = setTimeout(async () => {
const result = await _api.code_build(conf.src);
let doc = null as unknown as Doc;
for (const [k, v] of Object.entries(result)) {
const mprop = conf.map[k].mprop;
if (!doc && mprop.doc) {
doc = mprop.doc;
break;
}
}
if (doc) {
doc.transact(() => {
for (const [k, v] of Object.entries(result)) {
const mprop = conf.map[k].mprop;
mprop.set("valueBuilt", v);
}
});
conf.set = new WeakSet();
conf.map = {};
conf.src = {};
}
}, 300);
};
export const updatePropScope = (
vi: { site: { db: any; api: any } },
meta: IMeta,

View File

@ -61,7 +61,6 @@ export const viEvalScript = (
...passprop,
};
if (typeof passprop === "object") {
for (const [k, v] of Object.entries(passprop)) {
if (typeof v === "object" && v && (v as any)._jsx) {

View File

@ -5,7 +5,7 @@ import { VG } from "../global";
import { ViRender } from "../render";
export const createViPassProp = (
vi: { meta: VG["meta"]; render: () => void },
vi: { meta: VG["meta"]; render?: () => void },
is_layout: boolean,
meta: IMeta,
passprop: any

View File

@ -49,7 +49,6 @@ export const Vi: FC<{
vi.entry = entry;
vi.on_preload = on_preload;
w.siteurl = (pathname: string, forceOriginal?: boolean) => {
if (pathname.startsWith("http://") || pathname.startsWith("https://"))
return pathname;