wip fix
This commit is contained in:
parent
92bea833a1
commit
e69ff0fb3d
|
|
@ -1,6 +1,10 @@
|
||||||
import { compress, decompress } from "wasm-gzip";
|
import { compress, decompress } from "wasm-gzip";
|
||||||
|
import { IItem } from "../../../../utils/types/item";
|
||||||
import { DComp } from "../../../../utils/types/root";
|
import { DComp } from "../../../../utils/types/root";
|
||||||
import { PG } from "../ed-global";
|
import { genMeta } from "../../../vi/meta/meta";
|
||||||
|
import { IMeta, PG } from "../ed-global";
|
||||||
|
import { NodeModel } from "@minoru/react-dnd-treeview";
|
||||||
|
import { pushTreeNode } from "../tree/build/push-tree";
|
||||||
|
|
||||||
export const loadcomp = {
|
export const loadcomp = {
|
||||||
timeout: 0 as any,
|
timeout: 0 as any,
|
||||||
|
|
@ -46,13 +50,31 @@ export const loadCompSnapshot = async (
|
||||||
doc.off("update", p.comp.list[id_comp].on_update);
|
doc.off("update", p.comp.list[id_comp].on_update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const meta = {};
|
||||||
|
const tree: NodeModel<IMeta>[] = [];
|
||||||
|
const item = mitem.toJSON() as IItem;
|
||||||
|
p.comp.loaded[id_comp] = {
|
||||||
|
comp: item,
|
||||||
|
};
|
||||||
|
genMeta(
|
||||||
|
{
|
||||||
|
comps: p.comp.loaded,
|
||||||
|
meta,
|
||||||
|
on: {
|
||||||
|
visit(m) {
|
||||||
|
pushTreeNode(p, m, meta, tree);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
note: "load-comp",
|
||||||
|
},
|
||||||
|
{ item, ignore_first_component: true }
|
||||||
|
);
|
||||||
|
|
||||||
p.comp.list[id_comp] = {
|
p.comp.list[id_comp] = {
|
||||||
comp: { id: id_comp, snapshot },
|
comp: { id: id_comp, snapshot },
|
||||||
doc,
|
doc,
|
||||||
} as any;
|
meta,
|
||||||
|
tree,
|
||||||
p.comp.list[id_comp] = {
|
|
||||||
...p.comp.list[id_comp],
|
|
||||||
async on_update(bin, origin) {
|
async on_update(bin, origin) {
|
||||||
if (origin === "sv_remote" || origin === "local") {
|
if (origin === "sv_remote" || origin === "local") {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
|
||||||
on: {
|
on: {
|
||||||
async visit(m) {
|
async visit(m) {
|
||||||
if (!is_layout) {
|
if (!is_layout) {
|
||||||
pushTreeNode(p, m, meta);
|
pushTreeNode(p, m, meta, p.page.tree);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
|
import { NodeModel } from "@minoru/react-dnd-treeview";
|
||||||
import { IMeta, PG } from "../../ed-global";
|
import { IMeta, PG } from "../../ed-global";
|
||||||
|
|
||||||
export const pushTreeNode = (
|
export const pushTreeNode = (
|
||||||
p: PG,
|
p: PG,
|
||||||
meta: IMeta,
|
meta: IMeta,
|
||||||
metas: Record<string, IMeta>
|
metas: Record<string, IMeta>,
|
||||||
|
tree: NodeModel<IMeta>[]
|
||||||
) => {
|
) => {
|
||||||
if (meta.parent?.id === "root") {
|
if (meta.parent?.id === "root") {
|
||||||
p.page.doc
|
p.page.doc
|
||||||
|
|
@ -26,18 +28,18 @@ export const pushTreeNode = (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.page.tree.find((t) => t.id === meta.item.id)) {
|
if (tree.find((t) => t.id === meta.item.id)) {
|
||||||
console.log(meta.item.id, meta.item.name);
|
console.log(meta.item.id, meta.item.name);
|
||||||
} else {
|
} else {
|
||||||
if (!meta.parent?.comp_id) {
|
if (!meta.parent?.comp_id) {
|
||||||
p.page.tree.push({
|
tree.push({
|
||||||
id: meta.item.id,
|
id: meta.item.id,
|
||||||
parent: meta.parent?.id || "root",
|
parent: meta.parent?.id || "root",
|
||||||
text: meta.item.name,
|
text: meta.item.name,
|
||||||
data: meta,
|
data: meta,
|
||||||
});
|
});
|
||||||
} else if (meta.jsx_prop) {
|
} else if (meta.jsx_prop) {
|
||||||
p.page.tree.push({
|
tree.push({
|
||||||
id: meta.item.id,
|
id: meta.item.id,
|
||||||
parent: meta.parent?.instance_id || "root",
|
parent: meta.parent?.instance_id || "root",
|
||||||
text: meta.item.name,
|
text: meta.item.name,
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,35 @@
|
||||||
import { useGlobal } from "web-utils";
|
import { useGlobal, useLocal } 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";
|
||||||
|
|
||||||
export const EdMain = () => {
|
export const EdMain = () => {
|
||||||
|
const local = useLocal({
|
||||||
|
hover_id: "",
|
||||||
|
});
|
||||||
// return <div className="flex flex-1 flex-col relative"></div>;
|
// return <div className="flex flex-1 flex-col relative"></div>;
|
||||||
const p = useGlobal(EDGlobal, "EDITOR");
|
const p = useGlobal(EDGlobal, "EDITOR");
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-1 relative overflow-auto">
|
<div className="flex flex-1 relative overflow-auto">
|
||||||
<div className="absolute inset-0 flex">
|
<div
|
||||||
|
className={cx(
|
||||||
|
"absolute inset-0 flex",
|
||||||
|
local.hover_id &&
|
||||||
|
css`
|
||||||
|
.s-${local.hover_id} {
|
||||||
|
&::after {
|
||||||
|
content: " ";
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
border: 2px solid #73b8ff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
)}
|
||||||
|
>
|
||||||
<Vi
|
<Vi
|
||||||
meta={p.page.meta}
|
meta={p.page.meta}
|
||||||
api_url={p.site.config.api_url}
|
api_url={p.site.config.api_url}
|
||||||
|
|
@ -15,6 +37,17 @@ export const EdMain = () => {
|
||||||
entry={p.page.entry}
|
entry={p.page.entry}
|
||||||
api={p.script.api}
|
api={p.script.api}
|
||||||
db={p.script.db}
|
db={p.script.db}
|
||||||
|
visit={(meta, parts) => {
|
||||||
|
parts.props.onPointerOver = (e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
local.hover_id = meta.item.id;
|
||||||
|
local.render();
|
||||||
|
};
|
||||||
|
parts.props.onPointerLeave = (e) => {
|
||||||
|
local.hover_id = "";
|
||||||
|
local.render();
|
||||||
|
};
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => {
|
||||||
let filtered = [] as { mprop: FMCompDef; name: string }[];
|
let filtered = [] as { mprop: FMCompDef; name: string }[];
|
||||||
const mprops = meta.mitem?.get("component")?.get("props");
|
const mprops = meta.mitem?.get("component")?.get("props");
|
||||||
const comp_id = meta.mitem?.get("component")?.get("id") || "";
|
const comp_id = meta.mitem?.get("component")?.get("id") || "";
|
||||||
|
|
||||||
|
if (!p.comp.list[comp_id]) return null;
|
||||||
const mcprops = p.comp.list[comp_id].doc
|
const mcprops = p.comp.list[comp_id].doc
|
||||||
.getMap("map")
|
.getMap("map")
|
||||||
.get("root")
|
.get("root")
|
||||||
|
|
@ -73,7 +75,10 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => {
|
||||||
const item = meta.item as IItem;
|
const item = meta.item as IItem;
|
||||||
|
|
||||||
const comp_id = item.component?.id;
|
const comp_id = item.component?.id;
|
||||||
|
|
||||||
if (comp_id) {
|
if (comp_id) {
|
||||||
|
if (!p.comp.list[comp_id]) return;
|
||||||
|
|
||||||
active.instance.item_id = item.id;
|
active.instance.item_id = item.id;
|
||||||
active.instance.comp_id = active.comp_id;
|
active.instance.comp_id = active.comp_id;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,10 @@ export const genMeta = (p: GenMetaP, arg: GenMetaArg) => {
|
||||||
const item = arg.item as IItem;
|
const item = arg.item as IItem;
|
||||||
|
|
||||||
if (item.type === "item" && item.component?.id) {
|
if (item.type === "item" && item.component?.id) {
|
||||||
genComp(p, arg);
|
if (arg.ignore_first_component !== true) {
|
||||||
return;
|
genComp(p, arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let scope: IMeta["scope"] = {};
|
let scope: IMeta["scope"] = {};
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { IMeta } from "../../ed/logic/ed-global";
|
import { IMeta } from "../../ed/logic/ed-global";
|
||||||
|
import { viParts } from "./parts";
|
||||||
|
|
||||||
export const ViGlobal = {
|
export const ViGlobal = {
|
||||||
status: "init" as "init" | "loading" | "ready",
|
status: "init" as "init" | "loading" | "ready",
|
||||||
|
|
@ -10,6 +11,9 @@ export const ViGlobal = {
|
||||||
api: null as any,
|
api: null as any,
|
||||||
db: null as any,
|
db: null as any,
|
||||||
},
|
},
|
||||||
|
visit: undefined as
|
||||||
|
| undefined
|
||||||
|
| ((meta: IMeta, parts: ReturnType<typeof viParts>) => void),
|
||||||
};
|
};
|
||||||
|
|
||||||
export type VG = typeof ViGlobal & { render: () => void };
|
export type VG = typeof ViGlobal & { render: () => void };
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { produceCSS } from "../../../utils/css/gen";
|
import { produceCSS } from "../../../utils/css/gen";
|
||||||
import { IContent } from "../../../utils/types/general";
|
import { IContent } from "../../../utils/types/general";
|
||||||
import { IMeta } from "../../ed/logic/ed-global";
|
import { IMeta } from "../../ed/logic/ed-global";
|
||||||
|
import { VG } from "./global";
|
||||||
|
|
||||||
export type ViParts = {
|
export type ViParts = {
|
||||||
mode: "mobile" | "desktop";
|
mode: "mobile" | "desktop";
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ export const ViChild: FC<{
|
||||||
}> = ({ meta, children }) => {
|
}> = ({ meta, children }) => {
|
||||||
const vi = useGlobal(ViGlobal, "VI");
|
const vi = useGlobal(ViGlobal, "VI");
|
||||||
const parts = viParts(meta);
|
const parts = viParts(meta);
|
||||||
|
if (vi.visit) vi.visit(meta, parts);
|
||||||
|
|
||||||
let renderChild = undefined;
|
let renderChild = undefined;
|
||||||
|
|
||||||
if (parts.shouldRenderChild) {
|
if (parts.shouldRenderChild) {
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,13 @@ import { createViLocal } from "./local";
|
||||||
import { createViPassProp } from "./passprop";
|
import { createViPassProp } from "./passprop";
|
||||||
|
|
||||||
export const viEvalScript = (
|
export const viEvalScript = (
|
||||||
vi: { meta: VG["meta"] },
|
vi: { meta: VG["meta"]; visit?: VG["visit"] },
|
||||||
meta: IMeta,
|
meta: IMeta,
|
||||||
scope: any
|
scope: any
|
||||||
) => {
|
) => {
|
||||||
const childs = meta.item.childs;
|
const childs = meta.item.childs;
|
||||||
const parts = viParts(meta);
|
const parts = viParts(meta);
|
||||||
|
if (vi.visit) vi.visit(meta, parts);
|
||||||
|
|
||||||
let children = undefined;
|
let children = undefined;
|
||||||
if (parts.shouldRenderChild) {
|
if (parts.shouldRenderChild) {
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,14 @@ export type GenMetaP = {
|
||||||
};
|
};
|
||||||
smeta?: Record<string, ISimpleMeta>;
|
smeta?: Record<string, ISimpleMeta>;
|
||||||
set_meta?: boolean;
|
set_meta?: boolean;
|
||||||
|
note?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type GenMetaArg = {
|
export type GenMetaArg = {
|
||||||
item: IContent;
|
item: IContent;
|
||||||
is_root?: boolean;
|
is_root?: boolean;
|
||||||
jsx_prop?: IMeta["jsx_prop"];
|
jsx_prop?: IMeta["jsx_prop"];
|
||||||
|
ignore_first_component?: boolean;
|
||||||
parent?: {
|
parent?: {
|
||||||
item: IItem;
|
item: IItem;
|
||||||
instance_id?: string;
|
instance_id?: string;
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,10 @@ import { FC, Suspense } from "react";
|
||||||
import { useGlobal } from "web-utils";
|
import { useGlobal } from "web-utils";
|
||||||
import { IMeta } from "../ed/logic/ed-global";
|
import { IMeta } from "../ed/logic/ed-global";
|
||||||
import { viLoad } from "./load/load";
|
import { viLoad } from "./load/load";
|
||||||
import { ViGlobal } from "./render/global";
|
import { VG, ViGlobal } from "./render/global";
|
||||||
import { ViRoot } from "./root";
|
import { ViRoot } from "./root";
|
||||||
import { ErrorBox } from "./utils/error-box";
|
import { ErrorBox } from "./utils/error-box";
|
||||||
|
import { viParts } from "./render/parts";
|
||||||
|
|
||||||
export const Vi: FC<{
|
export const Vi: FC<{
|
||||||
meta: Record<string, IMeta>;
|
meta: Record<string, IMeta>;
|
||||||
|
|
@ -13,11 +14,13 @@ export const Vi: FC<{
|
||||||
site_id: string;
|
site_id: string;
|
||||||
api?: any;
|
api?: any;
|
||||||
db?: any;
|
db?: any;
|
||||||
}> = ({ meta, entry, api_url, site_id, api, db }) => {
|
visit?: VG["visit"];
|
||||||
|
}> = ({ meta, entry, api_url, site_id, api, db, visit }) => {
|
||||||
const vi = useGlobal(ViGlobal, "VI");
|
const vi = useGlobal(ViGlobal, "VI");
|
||||||
if (vi.meta !== meta) {
|
if (vi.meta !== meta) {
|
||||||
vi.meta = meta;
|
vi.meta = meta;
|
||||||
}
|
}
|
||||||
|
vi.visit = visit;
|
||||||
|
|
||||||
if (vi.status === "init") {
|
if (vi.status === "init") {
|
||||||
vi.site.db = db;
|
vi.site.db = db;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue