import { useMemo, useState } from "react"; import { Link, useSearchParams } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { DiagnosisStatusBadge } from "@/components/diagnosis-status-badge"; import { RiskBadge } from "@/components/risk-badge"; import { apiClient } from "@/lib/api-client"; import type { DiagnosisStatus, RiskLevel } from "@zeavis/shared"; const STATUS_OPTIONS: { value: "all" | DiagnosisStatus; label: string }[] = [ { value: "all", label: "Semua" }, { value: "ai_verified", label: "Terverifikasi AI" }, { value: "needs_review", label: "Menunggu Review" }, { value: "expert_verified", label: "Diverifikasi Pakar" }, { value: "expert_corrected", label: "Dikoreksi Pakar" }, { value: "failed", label: "Gagal" }, ]; const RISK_OPTIONS: { value: "all" | RiskLevel; label: string }[] = [ { value: "all", label: "Semua Risiko" }, { value: "high", label: "Risiko Tinggi" }, { value: "medium", label: "Risiko Sedang" }, { value: "low", label: "Risiko Rendah" }, ]; export function DiagnosesPage() { const [searchParams, setSearchParams] = useSearchParams(); const initialStatus = searchParams.get("status") as DiagnosisStatus | null; const initialRisk = searchParams.get("risk") as RiskLevel | null; const [statusFilter, setStatusFilter] = useState< "all" | DiagnosisStatus >(initialStatus ?? "all"); const [riskFilter, setRiskFilter] = useState< "all" | RiskLevel >(initialRisk ?? "all"); const query = useQuery({ queryKey: ["diagnoses"], queryFn: () => apiClient.getDiagnoses(), }); const diagnoses = query.data ?? []; const filtered = useMemo(() => { return diagnoses.filter((d) => { if (statusFilter !== "all" && d.status !== statusFilter) return false; if (riskFilter !== "all") { const level = d.disease?.riskLevel ?? "low"; if (level !== riskFilter) return false; } return true; }); }, [diagnoses, statusFilter, riskFilter]); const handleStatusChange = (value: string) => { const v = value as "all" | DiagnosisStatus; setStatusFilter(v); const next = new URLSearchParams(searchParams); if (v === "all") next.delete("status"); else next.set("status", v); setSearchParams(next); }; const handleRiskChange = (value: string) => { const v = value as "all" | RiskLevel; setRiskFilter(v); const next = new URLSearchParams(searchParams); if (v === "all") next.delete("risk"); else next.set("risk", v); setSearchParams(next); }; return (
Lihat hasil diagnosa dari scan yang telah dilakukan
Tidak ada diagnosis sesuai filter
{diagnoses.length === 0 && (Mulai dengan{" "} melakukan scan daun .
)}{d.disease?.label ?? d.predictedDiseaseSlug}