"use client"; import { useEffect, useState } from "react"; type ImportStatus = "RAW" | "PENDING_MAPPING" | "MAPPED"; type SummaryRow = { status: ImportStatus; count: number; }; type ByMerchantRow = { merchantName: string; platform: string; status: ImportStatus; count: number; }; const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? "http://localhost:8080"; export default function ImportStatusPage() { const [summary, setSummary] = useState([]); const [byMerchant, setByMerchant] = useState([]); useEffect(() => { async function load() { const [summaryRes, byMerchantRes] = await Promise.all([ fetch(`${API_BASE_URL}/api/admin/import-status/summary`), fetch(`${API_BASE_URL}/api/admin/import-status/by-merchant`), ]); setSummary(await summaryRes.json()); setByMerchant(await byMerchantRes.json()); } load(); }, []); const total = summary.reduce((sum, row) => sum + row.count, 0); return (

Import Status Dashboard

Quick sanity check on how clean (or not) your catalog is.

{/* Status cards */}
{summary.map((row) => (
{row.status}
{row.count}
{total > 0 ? `${((row.count / total) * 100).toFixed(1)}% of catalog` : "—"}
))}
{/* Merchant breakdown */}

By Merchant & Platform

{byMerchant.map((row, i) => ( ))}
Merchant Platform Status Count
{row.merchantName} {row.platform} {row.status} {row.count}
); }