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;