From 23f147ee39428e55d83c6254dea26d0696592d5f Mon Sep 17 00:00:00 2001 From: Rizky Date: Sat, 28 Oct 2023 11:02:42 +0700 Subject: [PATCH] fix api deploy --- .../render/ed/panel/popup/api/api-deploy.tsx | 191 ++++++++++++++++++ .../render/ed/panel/popup/api/api-server.tsx | 15 ++ .../render/ed/panel/popup/api/api-utils.ts | 5 + 3 files changed, 211 insertions(+) create mode 100644 app/web/src/render/ed/panel/popup/api/api-deploy.tsx diff --git a/app/web/src/render/ed/panel/popup/api/api-deploy.tsx b/app/web/src/render/ed/panel/popup/api/api-deploy.tsx new file mode 100644 index 00000000..7cf3ee17 --- /dev/null +++ b/app/web/src/render/ed/panel/popup/api/api-deploy.tsx @@ -0,0 +1,191 @@ +import { format, formatDistance } from "date-fns"; +import { useGlobal } from "web-utils"; +import { EDGlobal } from "../../../logic/ed-global"; +import { apiRef, apiUrl, server } from "./api-utils"; + +export const EdApiDeploy = ({ + deploy, +}: { + deploy: { + current: number; + now: number; + deploys: number[]; + }; +}) => { + const p = useGlobal(EDGlobal, "EDITOR"); + const api = apiRef[apiUrl(p)]; + const local = deploy; + const deploys = local.deploys; + + return ( +
+
+
History:
+
{ + if (server.status !== "deploying") { + server.status = "deploying"; + p.render(); + + const res = await api._deploy({ + type: "deploy", + id_site: p.site.id, + dlurl: `${serverurl}/site-export/${p.site.id}`, + }); + + server.status = "ready"; + p.render(); + if (res && res.current && Array.isArray(res.deploys)) { + local.current = res.current; + local.deploys = res.deploys; + alert("DEPLOY: OK"); + } else { + alert("DEPLOY: FAILED"); + } + } + }} + > + {server.status === "deploying" ? "Deploying..." : "Deploy"} +
+
+ {deploys.length === 0 && ( +
+ No Deployment +
+ )} +
+
+ {deploys + .sort() + .reverse() + .map((e) => { + let ago = ""; + let date = ""; + try { + date = format(e, "yyyy-MM-dd HH:mm:ss"); + ago = formatDistance(e, local.now, { addSuffix: true }); + } catch (e) {} + return ( +
{ + if (local.current === e) return; + if ( + server.status !== "deploying" && + server.status !== "saving" + ) { + server.status = "deploying"; + p.render(); + + const res = await api._deploy({ + type: "redeploy", + id_site: p.site.id, + ts: e, + }); + + server.status = "ready"; + p.render(); + if (res && res.current && Array.isArray(res.deploys)) { + local.current = res.current; + local.deploys = res.deploys; + } else { + alert("DEPLOY: FAILED"); + } + } + }} + className={cx( + "pr-4 pl-1 py-1 hover:bg-blue-50 border-b flex justify-between items-center h-[30px] font-mono text-[10px]", + local.current === e + ? "bg-green-50 border-l-4 border-l-green-700" + : "border-l-4 border-l-transparent", + server.status !== "deploying" && + server.status !== "saving" && + local.current !== e + ? "cursor-pointer" + : "", + css` + &:hover { + .deploy { + display: flex; + } + } + ` + )} + > +
+ {date} ยท {ago} +
+ {local.current !== e && ( +
Redeploy
+ )} + {local.current === e ? ( +
+ + + +
+ ) : ( +
{ + evt.stopPropagation(); + evt.preventDefault(); + if (!confirm("Delete this deploy ?")) return; + server.status = "deploying"; + p.render(); + + const res = await api._deploy({ + type: "deploy-del", + id_site: p.site.id, + ts: e, + }); + + server.status = "ready"; + p.render(); + if (res && res.current && Array.isArray(res.deploys)) { + local.current = res.current; + local.deploys = res.deploys; + } else { + alert("DELETE: FAILED"); + } + }} + > + + + +
+ )} +
+ ); + })} +
+
+
+ ); +}; 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 a365be83..c976d90f 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 @@ -4,6 +4,7 @@ import { EDGlobal } from "../../../logic/ed-global"; import { apiRef, apiUrl, checkAPI, dev, server } from "./api-utils"; import { EdApiDB } from "./api-db"; import { EdApiDomain } from "./api-domain"; +import { EdApiDeploy } from "./api-deploy"; export const EdApiServer = forwardRef< HTMLDivElement, @@ -21,6 +22,11 @@ export const EdApiServer = forwardRef< oldDB: { url: "" }, domains: [] as string[], hasDB: false, + deploy: { + now: 0, + current: 0, + deploys: [] as number[], + }, }, () => { try { @@ -47,6 +53,9 @@ export const EdApiServer = forwardRef< local.oldDB = structuredClone(res.db); local.hasDB = res.hasDB; local.status = "online"; + if (res.deploy) { + local.deploy = res.deploy; + } local.deployable = res.deployable; local.render(); } else { @@ -56,6 +65,11 @@ export const EdApiServer = forwardRef< local.hasDB = false; local.status = res; local.deployable = false; + local.deploy = { + now: 0, + current: 0, + deploys: [], + }; local.render(); } }; @@ -209,6 +223,7 @@ export const EdApiServer = forwardRef< {local.deployable && ( <> + )} diff --git a/app/web/src/render/ed/panel/popup/api/api-utils.ts b/app/web/src/render/ed/panel/popup/api/api-utils.ts index d2f26f87..0084ccee 100644 --- a/app/web/src/render/ed/panel/popup/api/api-utils.ts +++ b/app/web/src/render/ed/panel/popup/api/api-utils.ts @@ -68,6 +68,11 @@ export const checkAPI = async (p: PG) => { db: res.db, hasDB: true, domains: res.domains as string[], + deploy: { + now: res.now, + current: res.current, + deploys: res.deploys, + }, }; } }