This commit is contained in:
Rizky 2023-12-17 21:27:21 +07:00
parent 4a0ae73c0c
commit fcbf3b6721
11 changed files with 85 additions and 45 deletions

View File

@ -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 });

View File

@ -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 };
};

View File

@ -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;

View File

@ -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,

View File

@ -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({

View File

@ -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 = "";

View File

@ -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;

View File

@ -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>

View File

@ -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({

View File

@ -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);
}
};

View File

@ -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>;