/* eslint-disable @typescript-eslint/no-explicit-any */ import { useState } from "react"; import classNames from "classnames"; import { toast } from "react-toastify"; import SpaceIcon from "@/assets/space.svg"; import Loading from "../loading/loading"; import Login from "../login/login"; import { Auth } from "../../utils/types"; const MsgToast = ({ url }: { url: string }) => (
Your space is live!
); // ✅ DOWNLOAD FUNCTION (no JSZip needed) const downloadFile = (filename: string, content: string) => { const blob = new Blob([content], { type: "text/html" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = filename; a.click(); URL.revokeObjectURL(url); }; function DeployButton({ html, error = false, auth, }: { html: string; error: boolean; auth?: Auth; }) { 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, }), headers: { "Content-Type": "application/json", }, }); const response = await request.json(); if (response.ok) { toast.success( ); setPath(response.path); } else { toast.error(response.message); } } catch (err: any) { toast.error(err.message); } finally { setLoading(false); setOpen(false); } }; return (
{auth && (

Connected as{" "} {auth.preferred_username}

)} {/* Deploy to Space Button */} {/* Pop-up Overlay */}
setOpen(false)} >
{/* Pop-up Content */}
{!auth ? (

Host this project for free and share it with your friends.

) : ( <>
Space Icon 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 && ( )} {error && (

Your code has errors. Fix them before deploying.

)} {/* ✅ DOWNLOAD HTML BUTTON */} {/* ✅ CREATE / UPDATE SPACE BUTTON */}
)}
); } export default DeployButton;