diff --git a/app/srv/ws/sync/actions-def.ts b/app/srv/ws/sync/actions-def.ts index cf922cff..1d910792 100644 --- a/app/srv/ws/sync/actions-def.ts +++ b/app/srv/ws/sync/actions-def.ts @@ -23,4 +23,4 @@ export const SyncActionPaths = { "5": "comp.doc", "6": "page.list", "7": "page.load" -}; \ No newline at end of file +}; diff --git a/app/srv/ws/sync/user.ts b/app/srv/ws/sync/user.ts index 53cd616e..c602944b 100644 --- a/app/srv/ws/sync/user.ts +++ b/app/srv/ws/sync/user.ts @@ -11,6 +11,12 @@ export type UserConf = typeof defaultConf; export const user = { conf: { _db: null as null | RootDatabase, + init() { + this._db = open({ + name: "user-conf", + path: dir.path(`${g.datadir}/lmdb/user-conf.lmdb`), + }); + }, get db() { if (!this._db) { this._db = open({ diff --git a/app/web/src/base/page/all.tsx b/app/web/src/base/page/all.tsx index 33844b5e..f41c0817 100644 --- a/app/web/src/base/page/all.tsx +++ b/app/web/src/base/page/all.tsx @@ -1,17 +1,20 @@ import { useEffect } from "react"; -import { page } from "web-utils"; +import { page, useGlobal } from "web-utils"; import { Loading } from "../../utils/ui/loading"; +import { bootEd } from "../../render/ed/ed"; +import { EDGlobal } from "../../render/ed/logic/ed-global"; export default page({ url: "**", component: ({}) => { + const p = useGlobal(EDGlobal, "EDITOR"); useEffect(() => { if (localStorage.getItem("prasi-session")) { if ( location.pathname === "/ed" || location.pathname.startsWith("/ed/") ) { - navigate("/ed/_/_"); + bootEd(p); } else if (location.pathname.startsWith("/editor")) { const arr = location.pathname.split("/"); if (arr.length <= 2) { diff --git a/app/web/src/base/page/ed.tsx b/app/web/src/base/page/ed.tsx index 0f4a35e4..cef1d024 100644 --- a/app/web/src/base/page/ed.tsx +++ b/app/web/src/base/page/ed.tsx @@ -1,53 +1,17 @@ import { page, useGlobal } from "web-utils"; +import { Ed, bootEd } from "../../render/ed/ed"; import { EDGlobal } from "../../render/ed/logic/ed-global"; -import { clientStartSync } from "../../utils/sync/client"; import { Loading } from "../../utils/ui/loading"; -import { Ed } from "../../render/ed/ed"; export default page({ url: "/ed/:site_id/:page_id", component: ({}) => { const p = useGlobal(EDGlobal, "EDITOR"); - const session = JSON.parse( - localStorage.getItem("prasi-session") || "null" - ) as { data: { user: { id: string } } }; - if (!session) { - navigate("/login"); - return ; + if (!bootEd(p)) { + return ; } - if (!p.sync) { - clientStartSync({ - user_id: session.data.user.id, - events: { - editor_start(e) { - if ( - !!params.site_id && - !!params.page_id && - params.site_id !== "_" && - params.page_id !== "_" - ) { - p.site.id = params.site_id; - p.page.id = params.page_id; - p.render(); - } else { - if (e.site_id && e.page_id) { - navigate(`/ed/${e.site_id}/${e.page_id}`); - } - } - }, - site_loaded({ site }) { - p.site = site; - p.render(); - }, - }, - }).then((e) => (p.sync = e)); - return ; - } - - if (!p.site.id && p.page.id) return ; - return ; }, }); diff --git a/app/web/src/render/ed/ed.tsx b/app/web/src/render/ed/ed.tsx index b66e4c27..cc47ab4c 100644 --- a/app/web/src/render/ed/ed.tsx +++ b/app/web/src/render/ed/ed.tsx @@ -1,13 +1,14 @@ import { useGlobal } from "web-utils"; import { Loading } from "../../utils/ui/loading"; -import { EDGlobal } from "./logic/ed-global"; +import { EDGlobal, PG } from "./logic/ed-global"; import { edRoute } from "./logic/ed-route"; +import { clientStartSync } from "../../utils/sync/client"; export const Ed = () => { const p = useGlobal(EDGlobal, "EDITOR"); edRoute(p); - console.log(p.status); + if (p.status === "loading") { return ; } @@ -20,3 +21,46 @@ export const Ed = () => { } return
asfa
; }; + +export const bootEd = (p: PG) => { + const session = JSON.parse( + localStorage.getItem("prasi-session") || "null" + ) as { data: { user: { id: string } } }; + if (!session) { + navigate("/login"); + return ; + } + const paramsOK = + !!params.site_id && + !!params.page_id && + params.site_id !== "_" && + params.page_id !== "_"; + + if (!p.sync) { + clientStartSync({ + user_id: session.data.user.id, + events: { + editor_start(e) { + if (!paramsOK) { + if (e.site_id && e.page_id) { + p.site.id = e.site_id; + p.page.id = e.page_id; + navigate(`/ed/${e.site_id}/${e.page_id}`); + } + } else { + p.site.id = params.site_id; + p.page.id = params.page_id; + p.render(); + } + }, + site_loaded({ site }) { + p.site = site; + p.render(); + }, + }, + }).then((e) => (p.sync = e)); + + return false; + } + return true; +}; diff --git a/pkgs/core/index.ts b/pkgs/core/index.ts index 08c41a02..ab91bcda 100644 --- a/pkgs/core/index.ts +++ b/pkgs/core/index.ts @@ -9,6 +9,7 @@ import { g } from "./utils/global"; import { createLogger } from "./utils/logger"; import { preparePrisma } from "./utils/prisma"; import { syncActionDefinition } from "utils/sync-def"; +import { user } from "../../app/srv/ws/sync/user"; g.status = "init"; @@ -23,6 +24,7 @@ if (g.mode === "dev") { await startDevWatcher(); } +user.conf.init(); await preparePrisma(); await ensureNotRunning(); @@ -33,10 +35,10 @@ if (g.db) { } await syncActionDefinition(); -await parcelBuild(); await generateAPIFrm(); await prepareApiRoutes(); await createServer(); await prepareAPITypes(); +await parcelBuild(); g.status = "ready"; diff --git a/pkgs/core/utils/sync-def.ts b/pkgs/core/utils/sync-def.ts index 68fcdc20..85f2d797 100644 --- a/pkgs/core/utils/sync-def.ts +++ b/pkgs/core/utils/sync-def.ts @@ -1,6 +1,6 @@ import { dir } from "dir"; import { SyncActions } from "../../../app/srv/ws/sync/actions"; -import { writeAsync } from "fs-jetpack"; +import { readAsync, writeAsync } from "fs-jetpack"; export const syncActionDefinition = async () => { const def: any = {}; @@ -22,10 +22,13 @@ export const syncActionDefinition = async () => { }; walk(SyncActions, def, []); - await writeAsync( - dir.path("app/srv/ws/sync/actions-def.ts"), - `\ + const content = `\ export const SyncActionDefinition = ${JSON.stringify(def, null, 2)}; -export const SyncActionPaths = ${JSON.stringify(paths, null, 2)}; ` - ); +export const SyncActionPaths = ${JSON.stringify(paths, null, 2)}; +`; + + const path = dir.path("app/srv/ws/sync/actions-def.ts"); + if ((await readAsync(path)) !== content) { + await writeAsync(path, content); + } }; diff --git a/undefined/lmdb/user-conf.lmdb b/undefined/lmdb/user-conf.lmdb deleted file mode 100644 index cba48a1e..00000000 Binary files a/undefined/lmdb/user-conf.lmdb and /dev/null differ diff --git a/undefined/lmdb/user-conf.lmdb-lock b/undefined/lmdb/user-conf.lmdb-lock deleted file mode 100644 index def258c5..00000000 Binary files a/undefined/lmdb/user-conf.lmdb-lock and /dev/null differ