import { useState } from "react"; import { useLanguage } from "../contexts/LanguageContext"; import { useListPublishedRequests } from "@workspace/api-client-react"; import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Progress } from "@/components/ui/progress"; import { Skeleton } from "@/components/ui/skeleton"; import { Link } from "wouter"; type NeedTypeKey = | "electricity" | "water" | "food" | "health" | "housing" | "refrigerator" | "air_conditioner" | "court_order"; const NEED_TYPES: NeedTypeKey[] = [ "electricity", "water", "food", "health", "housing", "refrigerator", "air_conditioner", "court_order", ]; export default function Opportunities() { const { t } = useLanguage(); const { data: requests, isLoading } = useListPublishedRequests(); const [activeFilter, setActiveFilter] = useState("all"); const filtered = (requests || []).filter((r) => activeFilter === "all" ? true : r.needType === activeFilter ); return (

{t.opportunities.title}

{/* Filter Bar */}

{t.opportunities.filterByType}

{NEED_TYPES.map((type) => ( ))}
{isLoading ? (
{[1, 2, 3].map((i) => ( ))}
) : filtered.length === 0 ? (
{t.opportunities.noOpportunities}
) : (
{filtered.map((request) => { const progress = Math.min( 100, request.requestedAmount > 0 ? Math.round((request.collectedAmount / request.requestedAmount) * 100) : 0 ); const remaining = Math.max(0, request.requestedAmount - request.collectedAmount); return (
{t.needTypes[request.needType as keyof typeof t.needTypes] || request.needType} {t.opportunities.verified}
{request.description}

{request.caseId}

{t.opportunities.collected}:{" "} {request.collectedAmount.toLocaleString()} ﷼ {t.opportunities.target}:{" "} {request.requestedAmount.toLocaleString()} ﷼
{progress}%
{t.opportunities.remaining}: {remaining.toLocaleString()} ﷼
); })}
)}
); }