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={
{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
)}
}
>
)}
);
})}
{
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();
}}
/>
);
});