wip checkpoint

This commit is contained in:
Rizky 2023-12-26 23:42:30 +07:00
parent 32be6a806e
commit 57044a6a08
12 changed files with 102 additions and 68 deletions

View File

@ -1,4 +1,5 @@
import { EPage } from "../../../../web/src/nova/ed/logic/ed-global";
import { assignMitem } from "../../../../web/src/nova/ed/logic/tree/assign-mitem";
import { initLoadComp } from "../../../../web/src/nova/vi/meta/comp/init-comp-load";
import { genMeta } from "../../../../web/src/nova/vi/meta/meta";
import { simplifyMeta } from "../../../../web/src/nova/vi/meta/simplify";
@ -239,6 +240,10 @@ const scanMeta = async (doc: DPage, sync: SyncConnection) => {
);
}
const transact = {
instances_check: {} as Record<string, true | IMeta>,
};
for (const mitem of childs) {
const item = mitem.toJSON() as IItem;
entry.push(item.id);
@ -247,10 +252,21 @@ const scanMeta = async (doc: DPage, sync: SyncConnection) => {
comps: mcomps,
meta,
on: {
visit(meta) {
if (!meta.parent?.comp_id) {
if (typeof meta.item.adv?.js === "string") {
meta.scope.def = parseJs(meta.item.adv?.js);
visit_component(item) {
if (!item.component?.instances) {
transact.instances_check[item.id] = true;
}
},
visit(m) {
if (!m.parent?.comp_id) {
if (typeof m.item.adv?.js === "string") {
m.scope.def = parseJs(m.item.adv?.js);
}
}
if (m.item.component?.id) {
if (transact.instances_check[m.item.id]) {
transact.instances_check[m.item.id] = m;
}
}
},

View File

@ -19,7 +19,7 @@
"@qiwi/deep-proxy": "^2.0.3",
"algoliasearch": "^4.22.0",
"date-fns": "^2.30.0",
"fast-safe-stringify": "^2.1.1",
"safe-flat": "^2.1.0",
"dbgen": "workspace:*",
"downshift": "^8.2.3",
"esbuild-wasm": "^0.19.10",

View File

@ -0,0 +1,54 @@
import { IItem, MItem } from "../../../../utils/types/item";
import { IMeta } from "../ed-global";
export const assignMitem = (arg: {
m: IMeta;
item: IItem;
mitem: MItem;
meta: Record<string, IMeta>;
}) => {
const { m, item, mitem, meta } = arg;
if (m.parent) {
if (m.parent.id === "root") {
if (m.item.id === item.id) {
m.mitem = mitem;
}
} else {
const parent = meta[m.parent.id];
if (parent.mitem) {
parent.mitem.get("childs")?.forEach((child) => {
if (child.get("id") === m.item.id) {
m.mitem = child;
if (m.item.component?.props) {
for (const [prop_name, v] of Object.entries(
m.item.component.props
)) {
const mprop = m.mitem
?.get("component")
?.get("props")
?.get(prop_name);
if (v.content && mprop) {
const pmeta = meta[v.content.id];
if (pmeta) {
pmeta.mitem = mprop.get("content");
}
}
}
}
}
});
}
}
}
if (m.jsx_prop && m.parent?.instance_id) {
const parent = meta[m.parent?.instance_id];
if (parent) {
const prop = parent.item.component?.props[m.jsx_prop.name];
if (prop) {
prop.content = m.item;
}
}
}
};

View File

@ -2,6 +2,7 @@ import { IItem, MItem } from "../../../../utils/types/item";
import { FMCompDef, FNCompDef } from "../../../../utils/types/meta-fn";
import { genMeta } from "../../../vi/meta/meta";
import { IMeta, PG, active } from "../ed-global";
import { assignMitem } from "./assign-mitem";
import { pushTreeNode } from "./build/push-tree";
export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
@ -45,49 +46,7 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
if (!is_layout) {
pushTreeNode(p, m, meta, p.page.tree);
if (m.parent) {
if (m.parent.id === "root") {
if (m.item.id === item.id) {
m.mitem = mitem;
}
} else {
const parent = meta[m.parent.id];
if (parent.mitem) {
parent.mitem.get("childs")?.forEach((child) => {
if (child.get("id") === m.item.id) {
m.mitem = child;
if (m.item.component?.props) {
for (const [prop_name, v] of Object.entries(
m.item.component.props
)) {
const mprop = m.mitem
?.get("component")
?.get("props")
?.get(prop_name);
if (v.content && mprop) {
const pmeta = meta[v.content.id];
if (pmeta) {
pmeta.mitem = mprop.get("content");
}
}
}
}
}
});
}
}
}
if (m.jsx_prop && m.parent?.instance_id) {
const parent = meta[m.parent?.instance_id];
if (parent) {
const prop = parent.item.component?.props[m.jsx_prop.name];
if (prop) {
prop.content = m.item;
}
}
}
assignMitem({ m, item, mitem, meta });
}
},
},

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

@ -1,6 +1,6 @@
import { deepClone } from "web-utils";
import { GenMetaArg, GenMetaP, IMeta, ISimpleMeta } from "../utils/types";
import { instantiate, walkChild } from "./comp/instantiate";
import { instantiate } from "./comp/instantiate";
import { walkProp } from "./comp/walk-prop";
import { genMeta } from "./meta";
import { simplifyItemChild } from "./simplify";
@ -10,7 +10,7 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => {
if (item.type === "item" && item.component?.id && arg.parent?.item.id) {
let pcomp = p.comps[item.component.id];
if (p.on?.visit_component) {
p.on.visit_component(item.component.id);
p.on.visit_component(item);
}
if (!pcomp) {
@ -21,10 +21,15 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => {
let instance = {};
let instances: IMeta["instances"] = undefined;
if (item.component.instances) {
instances = item.component.instances;
instance = instances[item.id] || {};
instances[item.id] = instance;
} else {
const parent_instance = getParentInstance(p, arg, item.id);
instance = parent_instance || {};
instances = !parent_instance ? { [item.id]: instance } : undefined;
}
instantiate({
item,
@ -72,8 +77,6 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => {
if (prop.meta?.type === "content-element" && comp_id) {
if (prop.content) {
walkChild(prop.content, instance);
genMeta(
{ ...p, smeta },
{

View File

@ -13,12 +13,15 @@ export const initLoadComp = async (
{
...p,
on: {
visit_component: (id) => {
visit_component: ({ component }) => {
if (component) {
const { id } = component;
if (!p.comps[id]) {
if (!_loaded || (_loaded && !_loaded.has(id))) {
comp_ids.add(id);
}
}
}
},
},
set_meta: false,

View File

@ -37,7 +37,6 @@ export const instantiate = (arg: {
for (const [k, v] of Object.entries(newitem)) {
(item as any)[k] = v;
}
};
export const walkChild = (

View File

@ -8,6 +8,7 @@ import { updatePropScope } from "./eval-prop";
import { createViLocal } from "./local";
import { createViPassProp } from "./passprop";
import hash_sum from "hash-sum";
import { flatten } from "safe-flat";
export const viEvalScript = (
vi: {
@ -22,7 +23,7 @@ export const viEvalScript = (
if (vi.visit) vi.visit(meta, parts);
const mhash = hash_sum(passprop);
const mhash = hash_sum(flatten(passprop));
if (!meta.script) meta.script = {};
if (!meta.script[mhash]) {

View File

@ -9,7 +9,7 @@ export type GenMetaP = {
meta: Record<string, IMeta>;
comps: Record<string, { comp: IItem; smeta: Record<string, ISimpleMeta> }>;
on?: {
visit_component?: (id: string) => void;
visit_component?: (item: IItem) => void;
visit?: (meta: IMeta) => void;
item_exists?: (arg: { old: IMeta; new: IMeta }) => void;
item_new?: (arg: { new: IMeta }) => void;

View File

@ -1,7 +1,5 @@
import { TypedMap } from "yjs-types";
import { IItem, MItem } from "./item";
import * as Y from "yjs";
import { YText } from "yjs/dist/src/internals";
export type FNLayout = {
dir: "row" | "col" | "row-reverse" | "col-reverse";
align: FNAlign;
@ -25,6 +23,7 @@ export type FNComponent = {
loaded?: boolean;
props: Record<string, FNCompDef>;
ref_ids?: Record<string, string>;
instances?: Record<string, Record<string, string>>;
};
export type FNCompDef = {

BIN
bun.lockb

Binary file not shown.