"use client"; import { useMemo, useState } from "react"; import { useTranslations } from "next-intl"; import { useQuery } from "@tanstack/react-query"; import { PageShell } from "@/components/layout/page-shell"; import { StatusBadge } from "@/components/shared/status-badge"; import { TableToolbar, matchesSearch } from "@/components/table/table-toolbar"; import { TablePanel } from "@/components/table/table-panel"; import { useAuth } from "@/providers/auth-provider"; import { mockApi } from "@/lib/api/mock-client"; import { formatDate, formatEtb } from "@/lib/format"; import { Link } from "@/i18n/routing"; import { Button } from "@/components/ui/button"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { ArrowLeft } from "lucide-react"; export default function MemberOrdersPage() { const t = useTranslations(); const { user } = useAuth(); const memberId = user?.memberId ?? "mem_001"; const [search, setSearch] = useState(""); const [statusFilter, setStatusFilter] = useState("all"); const { data: orders, isLoading } = useQuery({ queryKey: ["member-orders", memberId], queryFn: () => mockApi.getMemberOrders(memberId), enabled: !!user, }); const filtered = useMemo(() => { return (orders ?? []).filter((order) => { if (statusFilter !== "all" && order.status !== statusFilter) return false; return matchesSearch([order.id, order.status], search); }); }, [orders, search, statusFilter]); if (!user) return null; return ( }> {t("common.back")} } > } > {t("member.order")} {t("statements.total")} {t("statements.covered")} {t("member.memberPaid")} {t("member.items")} {t("common.status")} {t("member.placed")} {t("common.actions")} {filtered.length ? ( filtered.map((order) => ( {order.id} {formatEtb(order.totalEtb)} {formatEtb(order.coveredEtb)} {formatEtb(order.memberPaidEtb)} {order.itemCount} {formatDate(order.placedAt)} )) ) : ( {t("common.empty")} )}
); }