wip fix
This commit is contained in:
parent
25a32dfae7
commit
051b71f944
File diff suppressed because one or more lines are too long
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue