"use client"; import { LoadingIcon } from "@/components/LoadingIcon"; import { Skeleton } from "@/components/ui/skeleton"; import { cn } from "@/lib/utils"; import { checkStatus } from "@/server/generate"; import { useEffect, useState } from "react"; export function ImageGenerationResult({ runId, className }: { runId: string } & React.ComponentProps<"div">) { const [image, setImage] = useState(""); const [status, setStatus] = useState("preparing"); const [loading, setLoading] = useState(true); // Polling in frontend to check for the useEffect(() => { if (!runId) return; const interval = setInterval(() => { checkStatus(runId).then((res) => { if (res) setStatus(res.status); if (res && res.status === "success") { console.log(res.outputs[0]?.data); setImage(res.outputs[0]?.data?.images[0].url); setLoading(false); clearInterval(interval); } }); }, 2000); return () => clearInterval(interval); }, [runId]); return (
{!loading && image && ( Generated image )} {!image && status && (
{status}
)} {loading && }
); }