import trim from "lodash.trim"; import { forwardRef } from "react"; import { useGlobal, useLocal } from "web-utils"; import { deploy_target } from "../../../../../../../db/db"; import { Modal } from "../../../../../utils/ui/modal"; import { Popover } from "../../../../../utils/ui/popover"; import { EDGlobal } from "../../../logic/ed-global"; import { EdApiTab } from "./api-tab"; import { server } from "./api-utils"; export const EdPopApi = () => { const p = useGlobal(EDGlobal, "EDITOR"); return ( { p.ui.popup.api.open = open; p.render(); }} > ); }; export const EdApiServer = forwardRef< HTMLDivElement, { popover: { onClose: () => void }; } >(({ popover }, ref) => { const p = useGlobal(EDGlobal, "EDITOR"); const local = useLocal( { tabs: [{ name: p.site.deploy_name, id: "" }] as deploy_target[], active: 0, open: false, }, async () => { const targets = await _db.deploy_target.findMany({ where: { id_site: p.site.id }, }); for (const t of targets) { local.tabs.push(t); } local.render(); } ); return (
{local.tabs.map((e, idx) => { return (
0 && `ml-1` )} onClick={() => { local.active = idx; local.render(); }} >
{e.name}
{local.active === idx && ( { local.open = open; local.render(); }} content={
{ local.open = false; local.render(); }} > {idx > 0 && (
{ if ( confirm( "Are you sure to delete this deploy target ? This is cannot be reversed." ) ) { const target = local.tabs[idx] as deploy_target; await _db.deploy_target.delete({ where: { id: target.id }, }); local.active -= 1; local.tabs.splice(idx, 1); local.render(); } }} className="mt-2 rounded bg-red-500 text-white px-2 py-1 cursor-pointer hover:bg-red-700" > Delete
)}
} > { local.open = true; local.render(); }} xmlns="http://www.w3.org/2000/svg" width="9" height="9" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1" >
)}
); })}
{ const new_name = prompt("New Deploy Target Name:"); if (new_name) { const new_target = await _db.deploy_target.create({ data: { api_url: "", domain: "", id_site: p.site.id, name: new_name, }, }); local.tabs.push(new_target); local.render(); } }} className="mb-1 ml-1 bg-white px-1 cursor-pointer hover:bg-blue-100 border flex items-center justify-center" >
{ popover.onClose = update; }} target={local.active > 0 ? local.tabs[local.active] : undefined} id_site={p.site.id} api_url={p.site.config.api_url} onUpdate={async ({ api_url }) => { p.render(); if (local.active === 0) { p.site.config.api_url = trim(api_url, "/"); await p.sync?.site.update(p.site.id, { config: { api_url: api_url }, }); } else { const target = local.tabs[local.active]; await _db.deploy_target.update({ where: { id: target.id }, data: { api_url }, }); } server.status = "ready"; p.render(); }} />
); });