wip checkpoint
This commit is contained in:
parent
32be6a806e
commit
57044a6a08
|
|
@ -1,4 +1,5 @@
|
||||||
import { EPage } from "../../../../web/src/nova/ed/logic/ed-global";
|
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 { initLoadComp } from "../../../../web/src/nova/vi/meta/comp/init-comp-load";
|
||||||
import { genMeta } from "../../../../web/src/nova/vi/meta/meta";
|
import { genMeta } from "../../../../web/src/nova/vi/meta/meta";
|
||||||
import { simplifyMeta } from "../../../../web/src/nova/vi/meta/simplify";
|
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) {
|
for (const mitem of childs) {
|
||||||
const item = mitem.toJSON() as IItem;
|
const item = mitem.toJSON() as IItem;
|
||||||
entry.push(item.id);
|
entry.push(item.id);
|
||||||
|
|
@ -247,10 +252,21 @@ const scanMeta = async (doc: DPage, sync: SyncConnection) => {
|
||||||
comps: mcomps,
|
comps: mcomps,
|
||||||
meta,
|
meta,
|
||||||
on: {
|
on: {
|
||||||
visit(meta) {
|
visit_component(item) {
|
||||||
if (!meta.parent?.comp_id) {
|
if (!item.component?.instances) {
|
||||||
if (typeof meta.item.adv?.js === "string") {
|
transact.instances_check[item.id] = true;
|
||||||
meta.scope.def = parseJs(meta.item.adv?.js);
|
}
|
||||||
|
},
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
"@qiwi/deep-proxy": "^2.0.3",
|
"@qiwi/deep-proxy": "^2.0.3",
|
||||||
"algoliasearch": "^4.22.0",
|
"algoliasearch": "^4.22.0",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
"fast-safe-stringify": "^2.1.1",
|
"safe-flat": "^2.1.0",
|
||||||
"dbgen": "workspace:*",
|
"dbgen": "workspace:*",
|
||||||
"downshift": "^8.2.3",
|
"downshift": "^8.2.3",
|
||||||
"esbuild-wasm": "^0.19.10",
|
"esbuild-wasm": "^0.19.10",
|
||||||
|
|
@ -105,4 +105,4 @@
|
||||||
"staticFiles": {
|
"staticFiles": {
|
||||||
"staticPath": "public"
|
"staticPath": "public"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -2,6 +2,7 @@ import { IItem, MItem } from "../../../../utils/types/item";
|
||||||
import { FMCompDef, FNCompDef } from "../../../../utils/types/meta-fn";
|
import { FMCompDef, FNCompDef } from "../../../../utils/types/meta-fn";
|
||||||
import { genMeta } from "../../../vi/meta/meta";
|
import { genMeta } from "../../../vi/meta/meta";
|
||||||
import { IMeta, PG, active } from "../ed-global";
|
import { IMeta, PG, active } from "../ed-global";
|
||||||
|
import { assignMitem } from "./assign-mitem";
|
||||||
import { pushTreeNode } from "./build/push-tree";
|
import { pushTreeNode } from "./build/push-tree";
|
||||||
|
|
||||||
export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
|
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) {
|
if (!is_layout) {
|
||||||
pushTreeNode(p, m, meta, p.page.tree);
|
pushTreeNode(p, m, meta, p.page.tree);
|
||||||
|
|
||||||
if (m.parent) {
|
assignMitem({ m, item, mitem, meta });
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ export const EdTreeName = ({
|
||||||
) : (
|
) : (
|
||||||
<div className="flex flex-col">
|
<div className="flex flex-col">
|
||||||
<Name name={node.text} is_jsx_prop={is_jsx_prop} />
|
<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>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { deepClone } from "web-utils";
|
import { deepClone } from "web-utils";
|
||||||
import { GenMetaArg, GenMetaP, IMeta, ISimpleMeta } from "../utils/types";
|
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 { walkProp } from "./comp/walk-prop";
|
||||||
import { genMeta } from "./meta";
|
import { genMeta } from "./meta";
|
||||||
import { simplifyItemChild } from "./simplify";
|
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) {
|
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];
|
||||||
if (p.on?.visit_component) {
|
if (p.on?.visit_component) {
|
||||||
p.on.visit_component(item.component.id);
|
p.on.visit_component(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pcomp) {
|
if (!pcomp) {
|
||||||
|
|
@ -21,10 +21,15 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => {
|
||||||
let instance = {};
|
let instance = {};
|
||||||
let instances: IMeta["instances"] = undefined;
|
let instances: IMeta["instances"] = undefined;
|
||||||
|
|
||||||
const parent_instance = getParentInstance(p, arg, item.id);
|
if (item.component.instances) {
|
||||||
|
instances = item.component.instances;
|
||||||
instance = parent_instance || {};
|
instance = instances[item.id] || {};
|
||||||
instances = !parent_instance ? { [item.id]: instance } : undefined;
|
instances[item.id] = instance;
|
||||||
|
} else {
|
||||||
|
const parent_instance = getParentInstance(p, arg, item.id);
|
||||||
|
instance = parent_instance || {};
|
||||||
|
instances = !parent_instance ? { [item.id]: instance } : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
instantiate({
|
instantiate({
|
||||||
item,
|
item,
|
||||||
|
|
@ -72,8 +77,6 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => {
|
||||||
|
|
||||||
if (prop.meta?.type === "content-element" && comp_id) {
|
if (prop.meta?.type === "content-element" && comp_id) {
|
||||||
if (prop.content) {
|
if (prop.content) {
|
||||||
walkChild(prop.content, instance);
|
|
||||||
|
|
||||||
genMeta(
|
genMeta(
|
||||||
{ ...p, smeta },
|
{ ...p, smeta },
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,13 @@ export const initLoadComp = async (
|
||||||
{
|
{
|
||||||
...p,
|
...p,
|
||||||
on: {
|
on: {
|
||||||
visit_component: (id) => {
|
visit_component: ({ component }) => {
|
||||||
if (!p.comps[id]) {
|
if (component) {
|
||||||
if (!_loaded || (_loaded && !_loaded.has(id))) {
|
const { id } = component;
|
||||||
comp_ids.add(id);
|
if (!p.comps[id]) {
|
||||||
|
if (!_loaded || (_loaded && !_loaded.has(id))) {
|
||||||
|
comp_ids.add(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ export const instantiate = (arg: {
|
||||||
if (item.component.props[k]) {
|
if (item.component.props[k]) {
|
||||||
newitem.component.props[k] = item.component.props[k];
|
newitem.component.props[k] = item.component.props[k];
|
||||||
}
|
}
|
||||||
|
|
||||||
const content = newitem.component.props[k].content;
|
const content = newitem.component.props[k].content;
|
||||||
if (content) {
|
if (content) {
|
||||||
walkChild(content, ids);
|
walkChild(content, ids);
|
||||||
|
|
@ -37,7 +37,6 @@ export const instantiate = (arg: {
|
||||||
for (const [k, v] of Object.entries(newitem)) {
|
for (const [k, v] of Object.entries(newitem)) {
|
||||||
(item as any)[k] = v;
|
(item as any)[k] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const walkChild = (
|
export const walkChild = (
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import { updatePropScope } from "./eval-prop";
|
||||||
import { createViLocal } from "./local";
|
import { createViLocal } from "./local";
|
||||||
import { createViPassProp } from "./passprop";
|
import { createViPassProp } from "./passprop";
|
||||||
import hash_sum from "hash-sum";
|
import hash_sum from "hash-sum";
|
||||||
|
import { flatten } from "safe-flat";
|
||||||
|
|
||||||
export const viEvalScript = (
|
export const viEvalScript = (
|
||||||
vi: {
|
vi: {
|
||||||
|
|
@ -22,7 +23,7 @@ export const viEvalScript = (
|
||||||
|
|
||||||
if (vi.visit) vi.visit(meta, parts);
|
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) meta.script = {};
|
||||||
if (!meta.script[mhash]) {
|
if (!meta.script[mhash]) {
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ export type GenMetaP = {
|
||||||
meta: Record<string, IMeta>;
|
meta: Record<string, IMeta>;
|
||||||
comps: Record<string, { comp: IItem; smeta: Record<string, ISimpleMeta> }>;
|
comps: Record<string, { comp: IItem; smeta: Record<string, ISimpleMeta> }>;
|
||||||
on?: {
|
on?: {
|
||||||
visit_component?: (id: string) => void;
|
visit_component?: (item: IItem) => void;
|
||||||
visit?: (meta: IMeta) => void;
|
visit?: (meta: IMeta) => void;
|
||||||
item_exists?: (arg: { old: IMeta; new: IMeta }) => void;
|
item_exists?: (arg: { old: IMeta; new: IMeta }) => void;
|
||||||
item_new?: (arg: { new: IMeta }) => void;
|
item_new?: (arg: { new: IMeta }) => void;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
import { TypedMap } from "yjs-types";
|
import { TypedMap } from "yjs-types";
|
||||||
import { IItem, MItem } from "./item";
|
import { IItem, MItem } from "./item";
|
||||||
import * as Y from "yjs";
|
|
||||||
import { YText } from "yjs/dist/src/internals";
|
|
||||||
export type FNLayout = {
|
export type FNLayout = {
|
||||||
dir: "row" | "col" | "row-reverse" | "col-reverse";
|
dir: "row" | "col" | "row-reverse" | "col-reverse";
|
||||||
align: FNAlign;
|
align: FNAlign;
|
||||||
|
|
@ -25,6 +23,7 @@ export type FNComponent = {
|
||||||
loaded?: boolean;
|
loaded?: boolean;
|
||||||
props: Record<string, FNCompDef>;
|
props: Record<string, FNCompDef>;
|
||||||
ref_ids?: Record<string, string>;
|
ref_ids?: Record<string, string>;
|
||||||
|
instances?: Record<string, Record<string, string>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type FNCompDef = {
|
export type FNCompDef = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue