"use client"; import { useState, useCallback } from "react"; import { Shrink } from "lucide-react"; import { ToolLayout } from "@/components/tools/tool-layout"; import { UploadZone } from "@/components/tools/upload-zone"; import { useUpload } from "@/hooks/use-upload"; import { useJobStatus } from "@/hooks/use-job-status"; import { ProgressBar } from "@/components/tools/progress-bar"; import { ResultPreview } from "@/components/tools/result-preview"; type PageState = "upload" | "processing" | "result" | "error"; export default function ImageRemoveBgPage() { const [pageState, setPageState] = useState("upload"); const [jobId, setJobId] = useState(null); const [errorMsg, setErrorMsg] = useState(null); const { upload } = useUpload({ tool: "image-remove-bg", options: { quality: 80 }, }); const handleComplete = useCallback(() => setPageState("result"), []); const handleError = useCallback( (err: string) => { setErrorMsg(err); setPageState("error"); }, [], ); const { progress, stage, message, status, result } = useJobStatus(jobId, { onComplete: handleComplete, onError: handleError, }); const handleUpload = useCallback( async (file: File) => { setErrorMsg(null); const res = await upload(file); if (res) { setJobId(res.job_id); setPageState("processing"); } }, [upload], ); const handleRetry = useCallback(() => { setPageState("upload"); setJobId(null); setErrorMsg(null); }, []); return ( {pageState === "upload" && ( )} {pageState === "processing" && jobId && ( )} {pageState === "result" && result && ( )} {pageState === "error" && (

{errorMsg || "Terjadi kesalahan"}

)}
); }