wip fix
This commit is contained in:
parent
4a0ae73c0c
commit
fcbf3b6721
|
|
@ -23,21 +23,6 @@ export const loadComponent = async (comp_id: string, sync?: SyncConnection) => {
|
|||
const attachOnUpdate = async (doc: Y.Doc, um: Y.UndoManager) => {
|
||||
snapshot.set("comp", comp_id, "id_doc", um.doc.clientID);
|
||||
|
||||
const mitem = (doc as DComp).getMap("map").get("root");
|
||||
if (mitem) {
|
||||
const item = mitem.toJSON() as IItem;
|
||||
if (!item.component) {
|
||||
const component = new Y.Map();
|
||||
syncronize(component, { id: comp_id, props: {} });
|
||||
mitem.set("component", component as any);
|
||||
} else if (item.component.id !== comp_id) {
|
||||
const mcomp = mitem.get("component");
|
||||
if (mcomp && mcomp.get("id") !== comp_id) {
|
||||
mcomp.set("id", comp_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
doc.on("update", async (update: Uint8Array, origin: any) => {
|
||||
const bin = Y.encodeStateAsUpdate(doc);
|
||||
snapshot.set("comp", comp_id, "bin", bin);
|
||||
|
|
@ -71,6 +56,11 @@ export const loadComponent = async (comp_id: string, sync?: SyncConnection) => {
|
|||
if (!snap && !ydoc) {
|
||||
const comp = await db.component.findFirst({ where: { id: comp_id } });
|
||||
if (comp) {
|
||||
const item = comp.content_tree as IItem;
|
||||
if (item && item.component?.id !== comp.id) {
|
||||
item.component = { id: comp.id, props: {} };
|
||||
}
|
||||
|
||||
const doc = new Y.Doc();
|
||||
let root = doc.getMap("map");
|
||||
syncronize(root, { id: comp_id, root: comp.content_tree });
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import { genMeta } from "../../../vi/meta/meta";
|
|||
import { IMeta, PG } from "../ed-global";
|
||||
import { treeRebuild } from "../tree/build";
|
||||
import { pushTreeNode } from "../tree/build/push-tree";
|
||||
import { initLoadComp } from "../../../vi/meta/comp/init-comp-load";
|
||||
|
||||
export const loadcomp = {
|
||||
timeout: 0 as any,
|
||||
|
|
@ -49,7 +50,7 @@ export const loadCompSnapshot = async (
|
|||
doc.off("update", p.comp.list[comp_id].on_update);
|
||||
}
|
||||
|
||||
const updated = updateComponentMeta(p, doc, comp_id);
|
||||
const updated = await updateComponentMeta(p, doc, comp_id);
|
||||
if (updated) {
|
||||
const { meta, tree } = updated;
|
||||
if (p.comp.list[comp_id]) {
|
||||
|
|
@ -84,7 +85,7 @@ export const loadCompSnapshot = async (
|
|||
comp_id,
|
||||
Buffer.from(compress(diff_local))
|
||||
);
|
||||
const updated = updateComponentMeta(p, doc, comp_id);
|
||||
const updated = await updateComponentMeta(p, doc, comp_id);
|
||||
if (updated) {
|
||||
p.comp.list[comp_id].meta = updated.meta;
|
||||
p.comp.list[comp_id].tree = updated.tree;
|
||||
|
|
@ -101,7 +102,11 @@ export const loadCompSnapshot = async (
|
|||
}
|
||||
};
|
||||
|
||||
export const updateComponentMeta = (p: PG, doc: DComp, comp_id: string) => {
|
||||
export const updateComponentMeta = async (
|
||||
p: PG,
|
||||
doc: DComp,
|
||||
comp_id: string
|
||||
) => {
|
||||
const mitem = doc.getMap("map").get("root");
|
||||
if (!mitem) return;
|
||||
|
||||
|
|
@ -111,6 +116,26 @@ export const updateComponentMeta = (p: PG, doc: DComp, comp_id: string) => {
|
|||
p.comp.loaded[comp_id] = {
|
||||
comp: item,
|
||||
};
|
||||
|
||||
await initLoadComp(
|
||||
{
|
||||
comps: p.comp.loaded,
|
||||
meta,
|
||||
set_meta: false,
|
||||
},
|
||||
item,
|
||||
async (comp_ids: string[]) => {
|
||||
const comps = await p.sync.comp.load(comp_ids, true);
|
||||
let result = Object.entries(comps);
|
||||
|
||||
for (const [id_comp, comp] of result) {
|
||||
if (comp && comp.snapshot) {
|
||||
await loadCompSnapshot(p, id_comp, comp.snapshot);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
genMeta(
|
||||
{
|
||||
comps: p.comp.loaded,
|
||||
|
|
@ -138,9 +163,10 @@ export const updateComponentMeta = (p: PG, doc: DComp, comp_id: string) => {
|
|||
}
|
||||
},
|
||||
},
|
||||
note: "load-comp",
|
||||
note: "load-comp-scan-meta",
|
||||
},
|
||||
{ item, ignore_first_component: true }
|
||||
);
|
||||
|
||||
return { meta, tree };
|
||||
};
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ export const edInitSync = (p: PG) => {
|
|||
if (data.type === "page") {
|
||||
await treeRebuild(p, { note: "sv_remote" });
|
||||
} else {
|
||||
const updated = updateComponentMeta(p, doc, data.id);
|
||||
const updated = await updateComponentMeta(p, doc, data.id);
|
||||
if (updated) {
|
||||
p.comp.list[data.id].meta = updated.meta;
|
||||
p.comp.list[data.id].tree = updated.tree;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
|
|||
if (item) {
|
||||
genMeta(
|
||||
{
|
||||
note: "tree-rebuild",
|
||||
comps: p.comp.loaded,
|
||||
meta,
|
||||
smeta: p.page.smeta,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { NodeModel } from "@minoru/react-dnd-treeview";
|
||||
import { IMeta, PG } from "../../ed-global";
|
||||
import { IMeta, PG, active } from "../../ed-global";
|
||||
|
||||
export const pushTreeNode = (
|
||||
p: PG,
|
||||
|
|
@ -29,7 +29,7 @@ export const pushTreeNode = (
|
|||
}
|
||||
|
||||
if (tree.find((t) => t.id === meta.item.id)) {
|
||||
console.log(meta.item.id, meta.item.name);
|
||||
console.warn("Double Tree Item: ", meta.item.id, meta.item.name);
|
||||
} else {
|
||||
if (!meta.parent?.comp_id) {
|
||||
tree.push({
|
||||
|
|
|
|||
|
|
@ -105,19 +105,30 @@ export const mainPerItemVisit = (
|
|||
meta
|
||||
);
|
||||
|
||||
if (active.comp_id) {
|
||||
if (m && m.parent?.comp_id === active.comp_id) {
|
||||
if (m.item.originalId) {
|
||||
active.item_id = m.item.originalId;
|
||||
}
|
||||
} else if (meta.parent?.comp_id === active.comp_id) {
|
||||
active.item_id = meta.item.originalId || meta.item.id;
|
||||
} else {
|
||||
active.comp_id = "";
|
||||
}
|
||||
if (
|
||||
m &&
|
||||
active.item_id === m.item.id &&
|
||||
m.item.component?.id &&
|
||||
active.comp_id !== m.item.component.id
|
||||
) {
|
||||
active.comp_id = m.item.component.id;
|
||||
} else {
|
||||
if (m) {
|
||||
active.item_id = m.item.id;
|
||||
if (active.comp_id) {
|
||||
if (meta.item.component?.id === active.comp_id) {
|
||||
active.item_id = meta.item.id;
|
||||
} else if (m && m.parent?.comp_id === active.comp_id) {
|
||||
if (m.item.originalId) {
|
||||
active.item_id = m.item.originalId;
|
||||
}
|
||||
} else if (meta.parent?.comp_id === active.comp_id) {
|
||||
active.item_id = meta.item.originalId || meta.item.id;
|
||||
} else {
|
||||
active.comp_id = "";
|
||||
}
|
||||
} else {
|
||||
if (m) {
|
||||
active.item_id = m.item.id;
|
||||
}
|
||||
}
|
||||
}
|
||||
active.hover.id = "";
|
||||
|
|
|
|||
|
|
@ -33,8 +33,10 @@ export const declareScope = async (
|
|||
for (const m of parents) {
|
||||
if (active.comp_id && m.parent?.id === "root" && active.instance) {
|
||||
const meta = p.page.meta[active.instance.item_id];
|
||||
if (!m.scope.def) m.scope.def = {};
|
||||
m.scope.def.props = meta.scope?.def?.props;
|
||||
if (meta) {
|
||||
if (!m.scope.def) m.scope.def = {};
|
||||
m.scope.def.props = meta.scope?.def?.props;
|
||||
}
|
||||
}
|
||||
|
||||
const def = m.scope.def;
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ 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"}>{node.id} - {item.originalId}</div> */}
|
||||
<div className={"text-[9px] text-gray-500 -mt-1"}>{node.id} - {item.originalId}</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import { EdTreeName } from "./item/name";
|
|||
import { treeItemKeyMap } from "./key-map";
|
||||
import { IContent } from "../../../../../utils/types/general";
|
||||
|
||||
const jsxPropVis = {} as Record<string, string>;
|
||||
|
||||
export const nodeRender: NodeRender<IMeta> = (node, prm) => {
|
||||
const p = useGlobal(EDGlobal, "EDITOR");
|
||||
const local = useLocal({
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ import { genMeta } from "../meta";
|
|||
export const initLoadComp = async (
|
||||
p: GenMetaP,
|
||||
item: IItem,
|
||||
load: (comp_ids: string[]) => Promise<void>
|
||||
load: (comp_ids: string[]) => Promise<void>,
|
||||
_loaded?: Set<string>
|
||||
) => {
|
||||
const comp_ids = new Set<string>();
|
||||
genMeta(
|
||||
|
|
@ -14,17 +15,28 @@ export const initLoadComp = async (
|
|||
on: {
|
||||
visit_component: (id) => {
|
||||
if (!p.comps[id]) {
|
||||
comp_ids.add(id);
|
||||
if (!_loaded || (_loaded && !_loaded.has(id))) {
|
||||
comp_ids.add(id);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
set_meta: false,
|
||||
note: "init-load-comp",
|
||||
},
|
||||
{ item }
|
||||
{ item, ignore_first_component: true }
|
||||
);
|
||||
|
||||
if (comp_ids.size > 0) {
|
||||
await load([...comp_ids]);
|
||||
await initLoadComp(p, item, load);
|
||||
|
||||
let loaded = _loaded;
|
||||
if (!loaded) {
|
||||
loaded = new Set<string>();
|
||||
}
|
||||
comp_ids.forEach((id) => {
|
||||
if (loaded) loaded.add(id);
|
||||
});
|
||||
|
||||
await initLoadComp(p, item, load, loaded);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ export type FNAdv = {
|
|||
export type FMAdv = TypedMap<FNAdv>;
|
||||
export type FNComponent = {
|
||||
id: string;
|
||||
name: string;
|
||||
name?: string;
|
||||
updated_at?: number;
|
||||
props: Record<string, FNCompDef>;
|
||||
ref_ids?: Record<string, string>;
|
||||
|
|
|
|||
Loading…
Reference in New Issue