wip fix
This commit is contained in:
parent
b3f76211c8
commit
3e7e060964
|
|
@ -16,6 +16,8 @@ import { EdPopPage } from "./panel/popup/page/page-popup";
|
||||||
import { EdPopScript } from "./panel/popup/script/pop-script";
|
import { EdPopScript } from "./panel/popup/script/pop-script";
|
||||||
import { EdPopSite } from "./panel/popup/site/site-popup";
|
import { EdPopSite } from "./panel/popup/site/site-popup";
|
||||||
import { EdMain } from "./panel/main/main";
|
import { EdMain } from "./panel/main/main";
|
||||||
|
import { ViGlobal } from "../vi/render/global";
|
||||||
|
import { viLoad } from "../vi/load/load";
|
||||||
|
|
||||||
export const EdBase = () => {
|
export const EdBase = () => {
|
||||||
const p = useGlobal(EDGlobal, "EDITOR");
|
const p = useGlobal(EDGlobal, "EDITOR");
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
import { useGlobal } from "web-utils";
|
import { useGlobal } from "web-utils";
|
||||||
import { Vi } from "../../../vi/vi";
|
import { Vi } from "../../../vi/vi";
|
||||||
import { EDGlobal } from "../../logic/ed-global";
|
import { EDGlobal } from "../../logic/ed-global";
|
||||||
|
import { ViGlobal } from "../../../vi/render/global";
|
||||||
|
|
||||||
export const EdMain = () => {
|
export const EdMain = () => {
|
||||||
const p = useGlobal(EDGlobal, "EDITOR");
|
const p = useGlobal(EDGlobal, "EDITOR");
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Vi
|
<Vi
|
||||||
meta={p.page.meta}
|
meta={p.page.meta}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
import { createAPI } from "../../../utils/script/init-api";
|
|
||||||
import { VG } from "../render/global";
|
import { VG } from "../render/global";
|
||||||
import { viLoadLegacy } from "./load-legacy";
|
import { viLoadLegacy } from "./load-legacy";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,10 @@
|
||||||
import { instantiate } from "./comp/instantiate";
|
import { instantiate } from "./comp/instantiate";
|
||||||
import { walkProp } from "./comp/walk-prop";
|
import { walkProp } from "./comp/walk-prop";
|
||||||
import { genMeta } from "./meta";
|
import { genMeta } from "./meta";
|
||||||
import { applyRefIds } from "./ref-ids";
|
|
||||||
import { simplifyItemChild } from "./simplify";
|
import { simplifyItemChild } from "./simplify";
|
||||||
import { GenMetaArg, GenMetaP, IMeta } from "./types";
|
import { GenMetaArg, GenMetaP, IMeta } from "./types";
|
||||||
|
|
||||||
export const genComp = (
|
export const genComp = (p: GenMetaP, arg: GenMetaArg) => {
|
||||||
p: GenMetaP,
|
|
||||||
arg: GenMetaArg,
|
|
||||||
r: ReturnType<typeof applyRefIds>
|
|
||||||
) => {
|
|
||||||
const { item } = arg;
|
const { item } = arg;
|
||||||
if (item.type === "item" && item.component?.id && arg.parent?.item.id) {
|
if (item.type === "item" && item.component?.id && arg.parent?.item.id) {
|
||||||
let pcomp = p.comps[item.component.id];
|
let pcomp = p.comps[item.component.id];
|
||||||
|
|
@ -22,34 +17,46 @@ export const genComp = (
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pcomp) {
|
if (pcomp) {
|
||||||
const ref_ids = r?.ref_ids || item.component?.ref_ids || {};
|
let smeta_instances: IMeta["instances"] = undefined;
|
||||||
|
if (p.smeta && p.smeta[item.id]) {
|
||||||
|
const smeta = p.smeta[item.id];
|
||||||
|
if (smeta && smeta.comp) {
|
||||||
|
smeta_instances = smeta.comp.instances;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
instantiate(item, pcomp.comp, ref_ids);
|
let instance = {};
|
||||||
|
let instances: IMeta["instances"] = undefined;
|
||||||
|
|
||||||
|
if (!smeta_instances) {
|
||||||
|
const parent_instance = getParentInstance(p, arg, item.id);
|
||||||
|
instance = parent_instance || {};
|
||||||
|
instances = !parent_instance ? { [item.id]: instance } : undefined;
|
||||||
|
} else {
|
||||||
|
instance = smeta_instances[item.id];
|
||||||
|
instances = smeta_instances;
|
||||||
|
}
|
||||||
|
|
||||||
|
instantiate({
|
||||||
|
item,
|
||||||
|
comp: pcomp.comp,
|
||||||
|
ids: instance,
|
||||||
|
});
|
||||||
|
|
||||||
const meta: IMeta = {
|
const meta: IMeta = {
|
||||||
item: simplifyItemChild(item),
|
item: simplifyItemChild(item),
|
||||||
parent: {
|
parent: {
|
||||||
id: arg.parent.item.id,
|
id: arg.parent.item.id,
|
||||||
instance_id: arg.parent?.instance?.id,
|
|
||||||
comp_id: arg.parent?.comp?.id,
|
comp_id: arg.parent?.comp?.id,
|
||||||
},
|
},
|
||||||
scope: {
|
instances,
|
||||||
def: {
|
scope: {},
|
||||||
props: {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
walkProp({
|
walkProp({
|
||||||
item,
|
item,
|
||||||
pcomp,
|
pcomp,
|
||||||
each(name, prop) {
|
each(name, prop) {
|
||||||
if (meta.scope.def?.props) {
|
|
||||||
meta.scope.def.props[name] = {
|
|
||||||
value: prop.valueBuilt,
|
|
||||||
visible: false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
const comp_id = item.component?.id;
|
const comp_id = item.component?.id;
|
||||||
if (
|
if (
|
||||||
prop.meta?.type === "content-element" &&
|
prop.meta?.type === "content-element" &&
|
||||||
|
|
@ -67,7 +74,6 @@ export const genComp = (
|
||||||
parent: {
|
parent: {
|
||||||
item,
|
item,
|
||||||
comp: pcomp.comp,
|
comp: pcomp.comp,
|
||||||
instance: arg.parent?.instance || item,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -92,17 +98,30 @@ export const genComp = (
|
||||||
p.on.visit(meta);
|
p.on.visit(meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [k, v] of Object.entries(item.childs)) {
|
for (const child of Object.values(item.childs)) {
|
||||||
genMeta(p, {
|
genMeta(p, {
|
||||||
item: v,
|
item: child,
|
||||||
is_root: false,
|
is_root: false,
|
||||||
parent: {
|
parent: {
|
||||||
item,
|
item,
|
||||||
|
instance_id: item.id,
|
||||||
comp: pcomp.comp,
|
comp: pcomp.comp,
|
||||||
instance: arg.parent?.instance || item,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getParentInstance = (p: GenMetaP, arg: GenMetaArg, id: string) => {
|
||||||
|
if (arg.parent?.instance_id && p.meta[arg.parent?.instance_id]) {
|
||||||
|
const parent_instance = p.meta[arg.parent?.instance_id];
|
||||||
|
if (parent_instance.instances) {
|
||||||
|
if (!parent_instance.instances[id]) {
|
||||||
|
parent_instance.instances[id] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent_instance.instances[id];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
import { createId } from "@paralleldrive/cuid2";
|
import { deepClone } from "web-utils";
|
||||||
import { IItem } from "../../../../../utils/types/item";
|
import { IItem } from "../../../../../utils/types/item";
|
||||||
|
import { createId } from "@paralleldrive/cuid2";
|
||||||
|
import { FNComponent } from "../../../../../utils/types/meta-fn";
|
||||||
|
|
||||||
export const instantiate = (
|
export const instantiate = (arg: {
|
||||||
item: IItem,
|
item: IItem;
|
||||||
comp: IItem,
|
comp: IItem;
|
||||||
ref_ids: Record<string, string>
|
ids: Record<string, string>;
|
||||||
) => {
|
}) => {
|
||||||
const newitem = structuredClone(comp);
|
const { item, comp, ids } = arg;
|
||||||
if (newitem.component) {
|
const newitem = deepClone(comp);
|
||||||
newitem.component.ref_ids = {};
|
|
||||||
}
|
walkChild(newitem, ids);
|
||||||
|
|
||||||
if (item.id) {
|
if (item.id) {
|
||||||
newitem.id = item.id;
|
newitem.id = item.id;
|
||||||
|
|
@ -19,8 +21,6 @@ export const instantiate = (
|
||||||
newitem.component = item.component;
|
newitem.component = item.component;
|
||||||
}
|
}
|
||||||
|
|
||||||
walkChild(newitem, ref_ids);
|
|
||||||
|
|
||||||
for (const key of Object.keys(item)) {
|
for (const key of Object.keys(item)) {
|
||||||
delete (item as any)[key];
|
delete (item as any)[key];
|
||||||
}
|
}
|
||||||
|
|
@ -30,16 +30,19 @@ export const instantiate = (
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const walkChild = (item: IItem, ref_ids: Record<string, string>) => {
|
const walkChild = (
|
||||||
if (!ref_ids[item.id]) {
|
item: IItem,
|
||||||
ref_ids[item.id] = createId();
|
ids: Exclude<FNComponent["ref_ids"], undefined>
|
||||||
|
) => {
|
||||||
|
if (!ids[item.id]) {
|
||||||
|
ids[item.id] = createId();
|
||||||
}
|
}
|
||||||
|
|
||||||
item.id = ref_ids[item.id];
|
item.id = ids[item.id];
|
||||||
|
|
||||||
if (item.childs) {
|
if (item.childs) {
|
||||||
for (const child of item.childs) {
|
for (const child of item.childs) {
|
||||||
walkChild(child as IItem, ref_ids);
|
walkChild(child as IItem, ids);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import { IItem } from "../../../../utils/types/item";
|
import { IItem } from "../../../../utils/types/item";
|
||||||
import { genComp } from "./comp";
|
import { genComp } from "./comp";
|
||||||
import { applyRefIds } from "./ref-ids";
|
|
||||||
import { simplifyItemChild } from "./simplify";
|
import { simplifyItemChild } from "./simplify";
|
||||||
import { GenMetaArg, GenMetaP, IMeta } from "./types";
|
import { GenMetaArg, GenMetaP, IMeta } from "./types";
|
||||||
|
|
||||||
|
|
@ -10,12 +9,10 @@ export const genMeta = (p: GenMetaP, arg: GenMetaArg) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapper(() => {
|
wrapper(() => {
|
||||||
const { parent } = arg;
|
|
||||||
const item = arg.item as IItem;
|
const item = arg.item as IItem;
|
||||||
|
|
||||||
const r = applyRefIds(item, parent);
|
|
||||||
if (item.type === "item" && item.component?.id) {
|
if (item.type === "item" && item.component?.id) {
|
||||||
genComp(p, arg, r);
|
genComp(p, arg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -31,7 +28,7 @@ export const genMeta = (p: GenMetaP, arg: GenMetaArg) => {
|
||||||
jsx_prop: arg.jsx_prop,
|
jsx_prop: arg.jsx_prop,
|
||||||
parent: {
|
parent: {
|
||||||
id: arg.parent?.item.id || "root",
|
id: arg.parent?.item.id || "root",
|
||||||
instance_id: arg.parent?.instance?.id,
|
instance_id: arg.parent?.instance_id,
|
||||||
comp_id: arg.parent?.comp?.id,
|
comp_id: arg.parent?.comp?.id,
|
||||||
},
|
},
|
||||||
scope,
|
scope,
|
||||||
|
|
@ -61,8 +58,8 @@ export const genMeta = (p: GenMetaP, arg: GenMetaArg) => {
|
||||||
is_root: false,
|
is_root: false,
|
||||||
parent: {
|
parent: {
|
||||||
item,
|
item,
|
||||||
|
instance_id: arg.parent?.instance_id,
|
||||||
comp: arg.parent?.comp,
|
comp: arg.parent?.comp,
|
||||||
instance: arg.parent?.instance,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { createId } from "@paralleldrive/cuid2";
|
|
||||||
import { IContent, MContent } from "../../../../utils/types/general";
|
|
||||||
import { IItem } from "../../../../utils/types/item";
|
|
||||||
|
|
||||||
export const applyRefIds = (item: IContent, parent?: { instance?: IItem }) => {
|
|
||||||
const instance = parent?.instance;
|
|
||||||
|
|
||||||
if (instance && instance.component) {
|
|
||||||
const ref_ids = instance.component.ref_ids;
|
|
||||||
|
|
||||||
if (ref_ids) {
|
|
||||||
if (!ref_ids[item.id]) {
|
|
||||||
ref_ids[item.id] = createId();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ref_ids[item.id]) {
|
|
||||||
if (!item.originalId) item.originalId = item.id;
|
|
||||||
item.id = ref_ids[item.id];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return { ref_ids };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
@ -32,9 +32,13 @@ export const simplifyMeta = (allmeta: Record<string, IMeta>) => {
|
||||||
instance_id: meta.parent.instance_id,
|
instance_id: meta.parent.instance_id,
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
comp: meta.item.component?.id
|
comp:
|
||||||
? { id: meta.item.component.id, ref_ids: meta.item.component.ref_ids }
|
meta.item.component && meta.instances
|
||||||
: undefined,
|
? {
|
||||||
|
id: meta.item.component.id,
|
||||||
|
instances: meta.instances,
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
scope: meta.scope.def,
|
scope: meta.scope.def,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ export type GenMetaArg = {
|
||||||
jsx_prop?: IMeta["jsx_prop"];
|
jsx_prop?: IMeta["jsx_prop"];
|
||||||
parent?: {
|
parent?: {
|
||||||
item: IItem;
|
item: IItem;
|
||||||
|
instance_id?: string;
|
||||||
comp?: IItem;
|
comp?: IItem;
|
||||||
instance?: IItem;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ export type ISimpleMeta = {
|
||||||
id: string;
|
id: string;
|
||||||
comp?: {
|
comp?: {
|
||||||
id: string;
|
id: string;
|
||||||
ref_ids: Record<string, string>;
|
instances: Record<string, Record<string, string>>;
|
||||||
};
|
};
|
||||||
parent?: {
|
parent?: {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
@ -51,6 +51,7 @@ export type IMeta = {
|
||||||
instance_id?: string;
|
instance_id?: string;
|
||||||
comp_id?: string;
|
comp_id?: string;
|
||||||
};
|
};
|
||||||
|
instances?: Record<string, Record<string, string>>;
|
||||||
jsx_prop?: {
|
jsx_prop?: {
|
||||||
name: string;
|
name: string;
|
||||||
comp_id: string;
|
comp_id: string;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ export type FNComponent = {
|
||||||
name: string;
|
name: string;
|
||||||
updated_at?: number;
|
updated_at?: number;
|
||||||
props: Record<string, FNCompDef>;
|
props: Record<string, FNCompDef>;
|
||||||
ref_ids: Record<string, string>;
|
ref_ids?: Record<string, string>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type FNCompDef = {
|
export type FNCompDef = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue