import { useEffect } from "react";
import { useGlobal, useLocal } from "web-utils";
import { isLocalhost } from "../../../../../utils/ui/is-localhost";
import { Loading } from "../../../../../utils/ui/loading";
import { Modal } from "../../../../../utils/ui/modal";
import { Popover } from "../../../../../utils/ui/popover";
import { Tooltip } from "../../../../../utils/ui/tooltip";
import { EDGlobal } from "../../../logic/ed-global";
import { CodeAssign } from "./assign";
import {
iconChevronDown,
iconGear,
iconLoading,
iconLog,
iconTrash,
} from "./icons";
import { CodeNameItem, CodeNameList, codeName } from "./name-list";
export const code = {
mode: "" as "" | "old" | "new",
};
export const EdPopCode = () => {
const p = useGlobal(EDGlobal, "EDITOR");
useEffect(() => {
(async () => {
if (code.mode === "new") {
if (p.ui.popup.code.open) {
const id_code = await p.sync.activity("site", {
action: p.ui.popup.code.open ? "open" : "close",
id: p.site.id,
type: "code",
name: p.ui.popup.code.name,
});
if (id_code) {
p.ui.popup.code.id = id_code;
p.render();
}
}
p.ui.popup.code.init = true;
}
})();
}, [p.ui.popup.code.open]);
useEffect(() => {
if (code.mode === "") {
db.code.findFirst({ where: { id_site: p.site.id } }).then((e) => {
code.mode = e ? "new" : "old";
p.render();
});
}
}, []);
return (
{
if (!open) {
p.ui.popup.code.open = false;
p.render();
}
}}
>
{!code.mode &&
}
{code.mode === "new" &&
}
{code.mode === "old" && (
This site still using old code
{
if (
confirm(
"Old code will not load, are you sure want to upgrade ?",
)
) {
code.mode = "new";
p.ui.popup.code.open = false;
p.render();
}
}}
className="border border-blue-500 cursor-pointer bg-blue-100 p-2 hover:bg-blue-200"
>
Upgrade to New Code Project
Warning: old code will not load once upgraded.
)}
);
};
const CodeBody = () => {
const p = useGlobal(EDGlobal, "EDITOR");
const local = useLocal({ namePicker: false, codeAssign: false });
const vscode_url = isLocalhost()
? "http://localhost:3000?"
: "https://prasi-vsc.avolut.com/?tkn=prasi&";
return (
{
local.namePicker = false;
p.ui.popup.code.name = e.name;
p.ui.popup.code.id = "";
p.render();
const id_code = await p.sync.activity("site", {
action: "open",
id: p.site.id,
type: "code",
name: p.ui.popup.code.name,
});
if (id_code) {
p.ui.popup.code.id = id_code;
p.render();
}
}}
/>
}
popoverClassName="bg-white shadow-md"
className={cx(
"flex items-center px-2 w-[200px] hover:bg-blue-50 space-x-1",
"cursor-pointer justify-between",
)}
open={local.namePicker}
onOpenChange={(open) => {
local.namePicker = open;
local.render();
}}
>
{p.ui.popup.code.name !== "site" && p.ui.popup.code.name !== "SSR" && (
<>
{
if (
prompt(
"Are you sure want to delete this code?\ntype 'yes' to confirm:",
) === "yes"
) {
await db.code.delete({
where: { id: p.ui.popup.code.id },
});
codeName.list = codeName.list.filter(
(e) => e.id !== p.ui.popup.code.id,
);
p.ui.popup.code.name = codeName.list[0].name;
p.ui.popup.code.id = codeName.list[0].id;
p.render();
}
}}
>
{
local.codeAssign = open;
local.render();
}}
backdrop={false}
placement="bottom"
popoverClassName="p-0 shadow-lg bg-white"
content={
{
local.codeAssign = false;
local.render();
}}
id_code={p.ui.popup.code.id}
/>
}
className="flex items-center border-l relative hover:bg-blue-50 cursor-pointer px-2 transition-all"
>
>
)}
{
p.ui.popup.code.show_log = !p.ui.popup.code.show_log;
p.render();
}}
>
{p.ui.popup.code.show_log && (
)}
{p.ui.popup.code.show_log && (
{p.ui.popup.code.log || "stdout is empty..."}
)}
{!p.ui.popup.code.open || !p.ui.popup.code.id ? (
) : (
<>
Loading VSCode...
>
)}
{(local.namePicker || local.codeAssign) && (
{
local.namePicker = false;
local.codeAssign = false;
local.render();
}}
>
)}
);
};