From 42c4d97b1cad9e1ad00b65396d12422837f980af Mon Sep 17 00:00:00 2001 From: Rizky Date: Sun, 4 Feb 2024 14:52:58 +0700 Subject: [PATCH] wip fix --- app/srv/api/npm.ts | 11 ++- app/web/package.json | 1 + app/web/public/index.html | 2 +- app/web/src/base/load/api/api-proxy-def.tsx | 7 +- app/web/src/nova/ed/ed-mid.tsx | 12 +-- .../nova/ed/panel/popup/script/pop-script.tsx | 2 +- .../ed/panel/side/style/tools/mobile-qr.tsx | 78 ++++++++++++++++++ bun.lockb | Bin 267744 -> 268608 bytes pkgs/core/api/_proxy.ts | 6 ++ pkgs/core/package.json | 1 + 10 files changed, 111 insertions(+), 9 deletions(-) create mode 100644 app/web/src/nova/ed/panel/side/style/tools/mobile-qr.tsx diff --git a/app/srv/api/npm.ts b/app/srv/api/npm.ts index 4db678d0..798da748 100644 --- a/app/srv/api/npm.ts +++ b/app/srv/api/npm.ts @@ -8,8 +8,17 @@ import { g } from "utils/global"; export const _ = { url: "/npm/:mode/:id/*", - async api(mode: "site" | "page", id: string) { + async api(mode: "site" | "page" | "apk-qr", id: string) { const { req, res, mode: _mode } = apiContext(this); + + if (mode === "apk-qr") { + const file_apk = Bun.file(dir.path(`${g.datadir}/prasi-wrap.apk`)); + if (!await file_apk.exists()) { + return new Response('not found'); + } + return new Response(file_apk); + } + let path = dir.path(`${g.datadir}/npm/${mode}/${id}/${req.params._}`); const contentType = mime.lookup(path); diff --git a/app/web/package.json b/app/web/package.json index 4833a709..842c9582 100644 --- a/app/web/package.json +++ b/app/web/package.json @@ -10,6 +10,7 @@ "@floating-ui/react": "^0.26.4", "@leeoniya/ufuzzy": "^1.0.14", "@minoru/react-dnd-treeview": "^3.4.4", + "@wojtekmaj/react-qr-svg": "^1.0.0", "constrained-editor-plugin": "^1.3.0", "@monaco-editor/react": "^4.6.0", "@paralleldrive/cuid2": "2.2.2", diff --git a/app/web/public/index.html b/app/web/public/index.html index 2f376f2f..50125740 100644 --- a/app/web/public/index.html +++ b/app/web/public/index.html @@ -6,12 +6,12 @@ Prasi: App Builder +
- \ No newline at end of file diff --git a/app/web/src/base/load/api/api-proxy-def.tsx b/app/web/src/base/load/api/api-proxy-def.tsx index aaf09c12..07ba754c 100644 --- a/app/web/src/base/load/api/api-proxy-def.tsx +++ b/app/web/src/base/load/api/api-proxy-def.tsx @@ -30,7 +30,12 @@ export const loadApiProxyDef = async (_url: string, with_types: boolean) => { } else { script.src = `${base}/_prasi/load.js?url=${url}&v3&ts=${ts}`; } - d.body.appendChild(script); + + if (!document.querySelector(`script[src="${script.src}"]`)) { + d.body.appendChild(script); + } else { + done(); + } }); } else { const apiEntry = await fetch(base + "/_prasi/api-entry"); diff --git a/app/web/src/nova/ed/ed-mid.tsx b/app/web/src/nova/ed/ed-mid.tsx index c27fb0e1..83c7459d 100644 --- a/app/web/src/nova/ed/ed-mid.tsx +++ b/app/web/src/nova/ed/ed-mid.tsx @@ -9,9 +9,10 @@ import { TopBtn } from "./panel/header/top-btn"; import { useGlobal } from "web-utils"; import { ResponsiveToggle } from "./panel/header/right/responsive-toggle"; import { EdCompEditable } from "./panel/header/mid/comp-editable"; +import { MobileQRButton } from "./panel/side/style/tools/mobile-qr"; export const EdMid: FC<{}> = () => { - const ed = useGlobal(EDGlobal, "EDITORF"); + const p = useGlobal(EDGlobal, "EDITORF"); return (
= () => {
+ {p.site.responsive !== "desktop-only" && }