/* eslint-disable @typescript-eslint/no-explicit-any */
import { useState } from "react";
import classNames from "classnames";
import { toast } from "react-toastify";
import { FaPowerOff } from "react-icons/fa6";
import SpaceIcon from "@/assets/space.svg";
import Loading from "../loading/loading";
import Login from "../login/login";
import { Auth } from "./../../../utils/types";
import LoadButton from "../load-button/load-button";
const MsgToast = ({ url }: { url: string }) => (
Your space is live!
{
window.open(url, "_blank");
}}
>
See Space
);
function DeployButton({
html,
error = false,
auth,
setHtml,
prompts,
}: {
html: string;
error: boolean;
auth?: Auth;
setHtml: (html: string) => void;
prompts: string[];
}) {
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState(false);
const [path, setPath] = useState(undefined);
const [config, setConfig] = useState({
title: "",
});
const createSpace = async () => {
setLoading(true);
try {
const request = await fetch("/api/deploy", {
method: "POST",
body: JSON.stringify({
title: config.title,
path,
html,
prompts,
}),
headers: {
"Content-Type": "application/json",
},
});
const response = await request.json();
if (response.ok) {
toast.success(
,
{
autoClose: 10000,
}
);
setPath(response.path);
} else {
toast.error(response.message);
}
} catch (err: any) {
toast.error(err.message);
} finally {
setLoading(false);
setOpen(false);
}
};
return (
{auth &&
(auth.isLocalUse ? (
<>
Local Usage
>
) : (
<>
{
if (confirm("Are you sure you want to log out?")) {
// go to /auth/logout page
window.location.href = "/auth/logout";
}
}}
>
Connected as
{auth.preferred_username}
>
))}
setOpen(!open)}
>
{path ? "Update Space" : "Deploy to Space"}
setOpen(false)}
>
{!auth ? (
Host this project for free and share it with your friends.
) : (
<>
Space
Configure Deployment
{path ? (
Your space is live at{" "}
huggingface.co/{path}
. You can update it by deploying again.
) : (
"Deploy your project to a space on the Hub. Spaces are a way to share your project with the world."
)}
{!path && (
Space Title
setConfig({ ...config, title: e.target.value })
}
/>
)}
{error && (
Your code has errors. Fix them before deploying.
)}
{path ? "Update Space" : "Create Space"}
{loading && }
>
)}
);
}
export default DeployButton;