diff --git a/app/srv/ws/sync/editor/parser/parse-js.ts b/app/srv/ws/sync/editor/parser/parse-js.ts index fbfa0af2..21e8e5bd 100644 --- a/app/srv/ws/sync/editor/parser/parse-js.ts +++ b/app/srv/ws/sync/editor/parser/parse-js.ts @@ -3,7 +3,7 @@ import babel from "recast/parsers/babel-ts"; export type ParsedScope = Exclude, undefined>; -export const parseJs = (code?: string) => { +export const parseJs = (code?: string, show_error?: boolean) => { if (!code) return undefined; const local = { name: "", value: "", start: 0, end: 0 }; const passprop: Record< diff --git a/app/srv/ws/sync/editor/prep-page.ts b/app/srv/ws/sync/editor/prep-page.ts index 52437cb2..2e7549e4 100644 --- a/app/srv/ws/sync/editor/prep-page.ts +++ b/app/srv/ws/sync/editor/prep-page.ts @@ -4,6 +4,7 @@ import { GenMetaP } from "../../../../web/src/nova/vi/utils/types"; import { IItem } from "../../../../web/src/utils/types/item"; import { IRoot } from "../../../../web/src/utils/types/root"; import { docs } from "../entity/docs"; +import { snapshot } from "../entity/snapshot"; import { SyncConnection } from "../type"; import { loadComponent, userSyncComponent } from "./load-component"; import { parseJs } from "./parser/parse-js"; @@ -49,6 +50,7 @@ export const loadCompForPage = async (ctree: IRoot, sync: SyncConnection) => { const mcomps: GenMetaP["comps"] = {}; const result = new Set(); const loading = {} as Record>; + const should_save = {} as Record; for (const child of ctree.childs) { await initLoadComp( { comps: mcomps, meta, mode: "page" }, @@ -56,11 +58,12 @@ export const loadCompForPage = async (ctree: IRoot, sync: SyncConnection) => { { visit(meta, item, shared) { if (item.adv?.js) { - const script = parseJs(item.adv.js); - + let script = undefined; + script = parseJs(item.adv.js); if ( !item.script || - Object.keys(script || {}) !== Object.keys(item.script || {}) + Object.keys(script || {}).length !== + Object.keys(item.script || {}).length ) { shared.should_save = true; item.script = script; @@ -69,12 +72,7 @@ export const loadCompForPage = async (ctree: IRoot, sync: SyncConnection) => { }, async done(shared) { if (shared.should_save && shared.root.component?.id) { - // await db.component.update({ - // where: { id: shared.root.component.id }, - // data: { - // content_tree: shared.root, - // }, - // }); + should_save[shared.root.component.id] = shared.root; } }, load: async (comp_ids) => { @@ -101,5 +99,20 @@ export const loadCompForPage = async (ctree: IRoot, sync: SyncConnection) => { } ); } + + if (Object.keys(should_save).length > 0) { + for (const [comp_id, v] of Object.entries(should_save)) { + await db.component.update({ + where: { id: comp_id }, + data: { + content_tree: v, + name: v.name, + }, + }); + await snapshot.del("comp", comp_id); + delete docs.comp[comp_id]; + await loadComponent(comp_id, sync); + } + } return [...result]; }; diff --git a/app/srv/ws/sync/entity/snapshot.ts b/app/srv/ws/sync/entity/snapshot.ts index 303e4685..757e44b4 100644 --- a/app/srv/ws/sync/entity/snapshot.ts +++ b/app/srv/ws/sync/entity/snapshot.ts @@ -86,6 +86,10 @@ export const snapshot = { return res as DocSnapshot; }, + async del(type: K, id: string) { + await this.db.remove(`${type}-${id}`); + }, + get(type: K, id: string) { return this.db.get(`${type}-${id}`) as DocSnapshotMap[K] | null; }, diff --git a/app/web/src/nova/vi/meta/comp/init-comp-load.tsx b/app/web/src/nova/vi/meta/comp/init-comp-load.tsx index 95cea1cd..b50cfcae 100644 --- a/app/web/src/nova/vi/meta/comp/init-comp-load.tsx +++ b/app/web/src/nova/vi/meta/comp/init-comp-load.tsx @@ -1,5 +1,3 @@ -import { parseJs } from "../../../../../../srv/ws/sync/editor/parser/parse-js"; -import { IContent } from "../../../../utils/types/general"; import { IItem } from "../../../../utils/types/item"; import { GenMetaP, IMeta } from "../../utils/types"; import { genMeta } from "../meta";