diff --git a/app/srv/ws/sync/actions.ts b/app/srv/ws/sync/actions.ts index cdcb21b1..918d2088 100644 --- a/app/srv/ws/sync/actions.ts +++ b/app/srv/ws/sync/actions.ts @@ -8,6 +8,7 @@ import { import { IItem } from "../../../web/src/utils/types/item"; import { site_group } from "./actions/site_group"; import { ParsedScope, parseJs } from "./editor/parser/parse-js"; +import { ISimpleMeta } from "../../../web/src/nova/vi/utils/types"; /* WARNING: @@ -40,7 +41,7 @@ export const SyncActions = { comp_id?: string; item_id: string; item: IItem; - }) => {}, + }) => ({}) as EComp | void, list: async () => ({}) as Record>, group: async (id_site: string) => diff --git a/app/srv/ws/sync/actions/comp_new.ts b/app/srv/ws/sync/actions/comp_new.ts index 4f71c8cd..91bd7dee 100644 --- a/app/srv/ws/sync/actions/comp_new.ts +++ b/app/srv/ws/sync/actions/comp_new.ts @@ -1,11 +1,16 @@ import { TypedArray } from "yjs-types"; -import { MItem } from "../../../../web/src/utils/types/item"; +import { genMeta } from "../../../../web/src/nova/vi/meta/meta"; +import { simplifyMeta } from "../../../../web/src/nova/vi/meta/simplify"; +import { IMeta } from "../../../../web/src/nova/vi/utils/types"; +import { IItem, MItem } from "../../../../web/src/utils/types/item"; import { FMComponent, FNComponent, } from "../../../../web/src/utils/types/meta-fn"; import { MText } from "../../../../web/src/utils/types/text"; import { SAction } from "../actions"; +import { loadComponent } from "../editor/load-component"; +import { parseJs } from "../editor/parser/parse-js"; import { docs } from "../entity/docs"; import { SyncConnection } from "../type"; @@ -61,7 +66,7 @@ export const comp_new: SAction["comp"]["new"] = async function ( walk(e); }); } - }, "server: comp_new"); + }); } else if (comp_id) { const doc = docs.comp[comp_id].doc; doc.transact(() => { @@ -71,7 +76,37 @@ export const comp_new: SAction["comp"]["new"] = async function ( walk(e); }); } - }, "server: comp_new"); + }); + } + + if (comp) { + const load = await loadComponent(comp.id, this); + + if (load) { + const mitem = docs.comp[comp.id].doc.getMap("map").get("root"); + const citem = mitem?.toJSON() as IItem; + const smeta: Record = {}; + genMeta( + { + comps: {}, + meta: smeta, + on: { + visit(meta) { + if (typeof meta.item.adv?.js === "string") { + meta.scope.def = parseJs(meta.item.adv?.js); + } + }, + }, + }, + { item: citem, ignore_first_component: true } + ); + + return { + id: comp.id, + meta: simplifyMeta(smeta), + snapshot: load.snapshot, + }; + } } }; diff --git a/app/srv/ws/sync/actions/page_load.ts b/app/srv/ws/sync/actions/page_load.ts index 66323e3b..167552cb 100644 --- a/app/srv/ws/sync/actions/page_load.ts +++ b/app/srv/ws/sync/actions/page_load.ts @@ -45,11 +45,14 @@ export const page_load: SAction["page"]["load"] = async function ( snapshot.set("page", id, "bin", bin); const sv_local = await gzipAsync(update); + user.active.findAll({ page_id: id }).map((e) => { if (origin !== um) { if (e.client_id === origin) return; } + const ws = conns.get(e.client_id)?.ws; + if (ws) sendWS(ws, { type: SyncType.Event, diff --git a/app/web/src/nova/ed/logic/ed-route.ts b/app/web/src/nova/ed/logic/ed-route.ts index 8f5beaa3..883edb37 100644 --- a/app/web/src/nova/ed/logic/ed-route.ts +++ b/app/web/src/nova/ed/logic/ed-route.ts @@ -74,7 +74,7 @@ export const reloadPage = async (p: PG, page_id: string, note: string) => { } page.on_update = async (bin: Uint8Array, origin: any) => { - if (origin === "sv_remote" || origin === "local") return; + if (origin === "local") return; const res = await p.sync.yjs.sv_local( "page", @@ -88,6 +88,7 @@ export const reloadPage = async (p: PG, page_id: string, note: string) => { decompress(res.sv) ); Y.applyUpdate(doc as any, decompress(res.diff), "local"); + await treeRebuild(p, { note: note + " page-on-update" }); await p.sync.yjs.diff_local( diff --git a/app/web/src/nova/ed/panel/popup/script/scope/add-scope.tsx b/app/web/src/nova/ed/panel/popup/script/scope/add-scope.tsx index db7d79bd..7bca01de 100644 --- a/app/web/src/nova/ed/panel/popup/script/scope/add-scope.tsx +++ b/app/web/src/nova/ed/panel/popup/script/scope/add-scope.tsx @@ -14,7 +14,6 @@ export const addScope = ( if (model) { model.setValue(source); } else { - console.log(filename, source); const model = monaco.editor.createModel( source, "typescript", @@ -22,8 +21,6 @@ export const addScope = ( ); model.onDidChangeContent((e) => { const text = model.getValue(); - console.log(filename, text); - // const models = monaco.editor.getModels().filter((e) => { // return e.uri.toString().startsWith("ts:scope~"); // }); diff --git a/app/web/src/nova/ed/panel/tree/node/item/action/new-comp.tsx b/app/web/src/nova/ed/panel/tree/node/item/action/new-comp.tsx index 54f0dfc6..af3d8768 100644 --- a/app/web/src/nova/ed/panel/tree/node/item/action/new-comp.tsx +++ b/app/web/src/nova/ed/panel/tree/node/item/action/new-comp.tsx @@ -1,6 +1,7 @@ import { IItem } from "../../../../../../../utils/types/item"; import { getMetaById } from "../../../../../logic/active/get-meta"; -import { PG, active } from "../../../../../logic/ed-global"; +import { loadCompSnapshot } from "../../../../../logic/comp/load"; +import { EComp, PG, active } from "../../../../../logic/ed-global"; import { treeRebuild } from "../../../../../logic/tree/build"; export const edActionNewComp = ( @@ -16,16 +17,16 @@ export const edActionNewComp = ( const item = mitem.toJSON() as IItem; let item_id = active.item_id; p.ui.tree.item_loading.push(item_id); - await treeRebuild(p); + let newcomp: void | EComp = undefined; if (active.comp_id) { - await p.sync.comp.new({ + newcomp = await p.sync.comp.new({ group_id, item, comp_id: active.comp_id, item_id: active.item_id, }); } else { - await p.sync.comp.new({ + newcomp = await p.sync.comp.new({ group_id, item, page_id: p.page.cur.id, @@ -33,6 +34,12 @@ export const edActionNewComp = ( }); } + console.log(newcomp); + if (newcomp && newcomp.snapshot) { + await loadCompSnapshot(p, newcomp.id, newcomp.snapshot, newcomp.meta); + await treeRebuild(p); + } + p.ui.tree.item_loading = p.ui.tree.item_loading.filter( (e) => e !== item_id );