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 {
iconChevronDown,
iconDownload,
iconNewTab,
iconScrollOff,
iconScrollOn,
iconUpload,
} from "./icons";
import { CodeNameItem, CodeNameList } from "./name-list";
export const code = {
mode: "" as "" | "old" | "new",
};
export const EdPopCode = () => {
const p = useGlobal(EDGlobal, "EDITOR");
useEffect(() => {
(async () => {
if (code.mode === "new") {
p.ui.popup.code.init = true;
}
})();
}, [p.ui.popup.code.open]);
useEffect(() => {
if (code.mode === "" && p.site.id) {
_db.code.findFirst({ where: { id_site: p.site.id } }).then((e) => {
code.mode = e ? "new" : "old";
if (localStorage.vsc_opened === "yes") {
localStorage.removeItem("vsc_opened");
p.ui.popup.code.open = true;
}
p.render();
});
}
}, [p.site.id]);
if (p.ui.popup.code.startup_status === "init" && p.sync?.code.action) {
p.ui.popup.code.startup_status = "loading";
p.sync.code
.action({ type: "startup-check", site_id: p.site.id })
.then((res) => {
if (res) {
if (res.type === "startup-check") {
p.ui.popup.code.startup_status = res.status;
p.render();
}
}
});
}
return (
{
localStorage.removeItem("vsc_opened");
if (!open) {
p.ui.popup.code.startup_status = "init";
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";
_db.code.create({
data: { id_site: p.site.id, name: "site" },
});
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&";
const code_mode = p.site.code.mode;
return (
{/*
{
local.namePicker = false;
p.ui.popup.code.name = e.name;
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 border-r "
)}
open={local.namePicker}
onOpenChange={(open) => {
local.namePicker = open;
local.render();
}}
>
*/}
{/*
{
p.ui.popup.code.show_log = !p.ui.popup.code.show_log;
p.render();
}}
>
{p.ui.popup.code.show_log && (
)}
*/}
{p.ui.popup.code.startup_status !== "disabled" && (
{["loading", "init"].includes(p.ui.popup.code.startup_status) ? (
) : (
{
if (
p.ui.popup.code.startup_status === "stopped" &&
p.sync
) {
p.ui.popup.code.startup_status = "loading";
p.render();
p.sync.code
.action({ type: "startup-run", site_id: p.site.id })
.then(() => {
p.sync?.code
.action({
type: "startup-check",
site_id: p.site.id,
})
.then((res) => {
if (res) {
if (res.type === "startup-check") {
p.ui.popup.code.startup_status = res.status;
p.render();
}
}
});
});
} else {
p.ui.popup.code.startup_status = "loading";
p.render();
p.sync?.code
.action({ type: "startup-stop", site_id: p.site.id })
.then(() => {
p.sync?.code
.action({
type: "startup-check",
site_id: p.site.id,
})
.then((res) => {
if (res) {
if (res.type === "startup-check") {
p.ui.popup.code.startup_status = res.status;
p.render();
}
}
});
});
}
}}
>
)}
)}
{
window.open(`${vscode_url}folder=/site/${p.site.id}/site/src`);
}}
>
{code_mode === "vsc" && (
{
if (
confirm(
"Are you sure want to turn off VSCode?\nThis will enable old npm module"
)
) {
localStorage.vsc_opened = "yes";
await _db.site.update({
where: { id: p.site.id },
data: { code_mode: "old" },
});
location.reload();
}
}}
>
Turn off VSCode
)}
{p.ui.popup.code.show_log && (
{p.ui.popup.code.log || "stdout is empty..."}
)}
{code_mode === "vsc" ? (
{!p.ui.popup.code.open ? (
) : (
<>
Loading VSCode...
>
)}
) : (
VSCode is turned off
{
if (
confirm(
"Are you sure want to turn on VSCode?\nThis will disable old npm module (you can enable it again later)."
)
) {
localStorage.vsc_opened = "yes";
await _db.site.update({
where: { id: p.site.id },
data: { code_mode: "vsc" },
});
location.reload();
}
}}
>
Turn on VSCode
)}
{(local.namePicker || local.codeAssign) && (
{
local.namePicker = false;
local.codeAssign = false;
local.render();
}}
>
)}
);
};