diff --git a/app/srv/ws/sync/actions/site_update.ts b/app/srv/ws/sync/actions/site_update.ts index 6d94fcec..863d7ec1 100644 --- a/app/srv/ws/sync/actions/site_update.ts +++ b/app/srv/ws/sync/actions/site_update.ts @@ -33,7 +33,7 @@ export const site_update: SAction["site"]["update"] = async function ( if (ws) sendWS(ws, { type: SyncType.Event, - event: "site_js_updated", + event: "site_updated", data: site, }); } diff --git a/app/web/src/render/ed/logic/ed-sync.tsx b/app/web/src/render/ed/logic/ed-sync.tsx index 7707e157..32463ab7 100644 --- a/app/web/src/render/ed/logic/ed-sync.tsx +++ b/app/web/src/render/ed/logic/ed-sync.tsx @@ -108,7 +108,7 @@ export const edInitSync = (p: PG) => { p.site = site; p.render(); }, - site_js_updated(site) { + site_updated(site) { for (const [k, v] of Object.entries(site)) { if (k === "js" || k === "js_compiled") { p.site[k] = decoder.decode(decompress(v as any)); diff --git a/app/web/src/render/ed/panel/header/left/api.tsx b/app/web/src/render/ed/panel/header/left/api.tsx index ea0e1bf1..a85b3897 100644 --- a/app/web/src/render/ed/panel/header/left/api.tsx +++ b/app/web/src/render/ed/panel/header/left/api.tsx @@ -6,7 +6,7 @@ export const EdApi = () => { } + popover={(popover) => } placement="right" >
API
diff --git a/app/web/src/render/ed/panel/header/top-btn.tsx b/app/web/src/render/ed/panel/header/top-btn.tsx index 5564b48a..0bf4afcf 100644 --- a/app/web/src/render/ed/panel/header/top-btn.tsx +++ b/app/web/src/render/ed/panel/header/top-btn.tsx @@ -1,6 +1,7 @@ import { ReactElement, ReactNode } from "react"; import { Popover } from "../../../../utils/ui/popover"; import { Placement } from "@floating-ui/react"; +import { useLocal } from "web-utils"; export const TopBtn = ({ children, @@ -18,9 +19,10 @@ export const TopBtn = ({ underlight?: string; onClick?: React.MouseEventHandler; style?: "slim" | "normal"; - popover?: ReactElement; + popover?: ReactElement | ((popover: { onClose: () => void }) => ReactElement); placement?: Placement; }) => { + const local = useLocal({ open: false, onClose: () => {} }); const result = (
{ + if (popover) { + local.open = true; + local.render(); + } + if (onClick) { + onClick(e); + } + }} > {underlight && (
{ + if (!open) local.onClose(); + local.open = open; + local.render(); + }} placement={placement} > {result} diff --git a/app/web/src/render/ed/panel/popup/api/api-server.tsx b/app/web/src/render/ed/panel/popup/api/api-server.tsx index 960b8033..49a10d2e 100644 --- a/app/web/src/render/ed/panel/popup/api/api-server.tsx +++ b/app/web/src/render/ed/panel/popup/api/api-server.tsx @@ -1,9 +1,14 @@ import { forwardRef } from "react"; import { useGlobal, useLocal } from "web-utils"; -import { EDGlobal, PG } from "../../../logic/ed-global"; -import { checkAPI, dev } from "./api-utils"; +import { EDGlobal } from "../../../logic/ed-global"; +import { apiUrl, checkAPI, dev } from "./api-utils"; -export const EdApiServer = forwardRef((arg, ref) => { +export const EdApiServer = forwardRef< + HTMLDivElement, + { + popover: { onClose: () => void }; + } +>(({ popover }, ref) => { const p = useGlobal(EDGlobal, "EDITOR"); const local = useLocal( { @@ -26,6 +31,8 @@ export const EdApiServer = forwardRef((arg, ref) => { } ); + const url = apiUrl(p); + const check = () => { local.status = "checking"; local.render(); @@ -42,6 +49,15 @@ export const EdApiServer = forwardRef((arg, ref) => { local.render(); } }; + const update = async () => { + p.site.config.api_url = local.api_url; + await p.sync.site.update(p.site.id, { + config: { api_url: local.api_url }, + }); + check(); + }; + popover.onClose = update; + return (
((arg, ref) => { >
Server URL:
-
- {local.status === "online" && ( -
ONLINE
- )} - {local.status === "offline" && ( -
OFFLINE
- )} - {local.status === "checking" && ( -
Checking...
- )} -
+ {url && ( +
+ {local.status === "online" && ( +
ONLINE
+ )} + {local.status === "offline" && ( +
OFFLINE
+ )} + {local.status === "checking" && ( +
Checking...
+ )} +
+ )} + {!url && ( +
INVALID SERVER
+ )}
{ local.api_url = e.currentTarget.value; @@ -85,7 +107,7 @@ export const EdApiServer = forwardRef((arg, ref) => { e.currentTarget.blur(); } }} - onBlur={check} + onBlur={update} placeholder="https://..." />
@@ -107,6 +129,7 @@ export const EdApiServer = forwardRef((arg, ref) => { dev.enabled = !dev.enabled; localStorage.setItem("prasi-dev", JSON.stringify(dev)); local.render(); + check(); }} > DEV{" "} @@ -116,6 +139,7 @@ export const EdApiServer = forwardRef((arg, ref) => { { diff --git a/app/web/src/utils/sync/ws-client.ts b/app/web/src/utils/sync/ws-client.ts index bfeafced..6a55dabd 100644 --- a/app/web/src/utils/sync/ws-client.ts +++ b/app/web/src/utils/sync/ws-client.ts @@ -82,7 +82,7 @@ export const clientStartSync = async (arg: { id: string; sv_local: Uint8Array; }) => void; - site_js_updated: ( + site_updated: ( arg: Partial< Omit & { js: Uint8Array;