"use client"; import { useEffect, useState, useRef } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useUploadContext } from "../_context/upload-context"; import { Button } from "@/shared/components/ui/button"; // Sesuaikan dengan UI kit Anda // Pastikan Anda memiliki variabel env atau konstanta untuk WS_URL // Jika belum ada, bisa ganti sementara dengan string hardcoded atau process.env const WS_URL = process.env.NEXT_PUBLIC_WS_URL || "ws://localhost:8000"; export default function StepSuccess() { const { state, reset } = useUploadContext(); const { validatedData } = state; const router = useRouter(); const geomIcons: Record = { Point: "📍", MultiPoint: "🔹", LineString: "📏", MultiLineString: "🛣️", Polygon: "⬛", MultiPolygon: "🗾", GeometryCollection: "🧩", }; const PROCESS_STEPS = [ { key: "upload", label: "Upload data" }, { key: "cleansing", label: "Cleansing data" }, { key: "publish_geoserver", label: "Publish GeoServer" }, { key: "done", label: "Publish GeoNetwork" }, ]; const INITIAL_STEP_STATUS: Record = { upload: "done", cleansing: "pending", publish_geoserver: "pending", done: "pending", }; const [stepStatus, setStepStatus] = useState(INITIAL_STEP_STATUS); const wsRef = useRef(null); // Jika user refresh halaman dan data hilang, kembalikan ke awal useEffect(() => { if (!validatedData) { router.replace("/admin/mapset-upload?step=VALIDATE"); } }, [validatedData, router]); // WebSocket Logic // useEffect(() => { // if (!validatedData?.job_id || validatedData.job_status === "done") return; // // Construct WS URL // const wsUrl = `${WS_URL}/ws/job/${validatedData.job_id}`; // const ws = new WebSocket(wsUrl); // wsRef.current = ws; // ws.onopen = () => { // console.log("WS connected:", validatedData.job_id); // }; // ws.onmessage = (event) => { // try { // const data = JSON.parse(event.data); // const finishedStep = data.step; // setStepStatus((prev) => { // const updated = { ...prev }; // const stepIndex = PROCESS_STEPS.findIndex((s) => s.key === finishedStep); // // 1️⃣ step yang dikirim WS → DONE // if (stepIndex >= 0) { // updated[finishedStep] = "done"; // } // // 2️⃣ step setelahnya → RUNNING // const nextStep = PROCESS_STEPS[stepIndex + 1]; // if (nextStep) { // updated[nextStep.key] = "running"; // } // // 3️⃣ step setelah itu → PENDING // PROCESS_STEPS.slice(stepIndex + 2).forEach((s) => { // if (updated[s.key] !== "done") { // updated[s.key] = "pending"; // } // }); // return updated; // }); // // 🔥 AUTO CLOSE WS JIKA SELESAI // if (finishedStep === "done") { // setTimeout(() => { // wsRef.current?.close(); // }, 2000); // } // } catch (e) { // console.error("Error parsing WS message", e); // } // }; // ws.onerror = (err) => { // console.error("WS error", err); // }; // return () => { // ws.close(); // }; // }, [validatedData]); // Render Helpers const Spinner = () => ( ); const renderIcon = (status: string) => { if (status === "running") return ; if (status === "done") return "✔"; if (status === "error") return "❌"; return "⬜"; }; if (!validatedData){ return null;}else{console.log("val", validatedData);} // Prevent render if redirecting return (

✅ Upload Berhasil!

Data Anda berhasil disimpan ke database.

{/* Background Accents */}

Ringkasan Hasil Upload

{validatedData.data.table_name && (
📁 Nama Tabel {validatedData.data.table_name}
)} {validatedData.data.total_rows && (
📊 Jumlah Baris {validatedData.data.total_rows.toLocaleString()} data
)} {validatedData.data.geometry_type && (
🧭 Jenis Geometry {Array.isArray(validatedData.data.geometry_type) ? validatedData.data.geometry_type.map((g: string) => `${geomIcons[g] || "❓"} ${g}`).join(", ") : validatedData.data.geometry_type }
)} {validatedData.data.upload_time && (
🕒 Waktu Upload {new Date(validatedData.data.upload_time).toLocaleString("id-ID", { dateStyle: "full", timeStyle: "short", })}
)} {/* PROGRESS STEPS (WS LIVE) */} {(validatedData.data.message && validatedData.data.job_status !== "done") && (
{PROCESS_STEPS.map((step) => (
{renderIcon(stepStatus[step.key] || "-")} {step.label}
))}
)}
{(validatedData.data.job_status !== "done") && (

Sistem sedang melakukan cleansing data dan publikasi ke GeoServer dan GeoNetwork.
Anda tidak perlu menunggu di halaman ini.

)} {/* Metadata Section JSON View */} {validatedData.data.metadata && (

Metadata

{JSON.stringify(validatedData.data.metadata, null, 2)}
)}
{/* Tombol ke Dashboard (Next.js Link) */} {/* Tombol Upload Lagi (Reset Context) */}
); }