import { useState } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useOrders, Order } from "@/hooks/useAdminData"; import { Skeleton } from "@/components/ui/skeleton"; import { format } from "date-fns"; import { sv } from "date-fns/locale"; import { Search } from "lucide-react"; const statusColors: Record = { pending: "bg-yellow-500/20 text-yellow-700 border-yellow-500/30", processing: "bg-blue-500/20 text-blue-700 border-blue-500/30", completed: "bg-green-500/20 text-green-700 border-green-500/30", cancelled: "bg-red-500/20 text-red-700 border-red-500/30", }; const statusLabels: Record = { pending: "Väntande", processing: "Behandlas", completed: "Slutförd", cancelled: "Avbruten", }; export function OrdersTable() { const { data: orders, isLoading } = useOrders(); const [search, setSearch] = useState(""); const [statusFilter, setStatusFilter] = useState("all"); const filteredOrders = orders?.filter((order) => { const matchesSearch = order.order_number.toLowerCase().includes(search.toLowerCase()) || order.customer_email.toLowerCase().includes(search.toLowerCase()) || order.customer_name?.toLowerCase().includes(search.toLowerCase()); const matchesStatus = statusFilter === "all" || order.status === statusFilter; return matchesSearch && matchesStatus; }); if (isLoading) { return (
); } return (
setSearch(e.target.value)} className="pl-9" />
Ordernummer Kund Datum Status Belopp {filteredOrders?.length === 0 ? ( Inga ordrar hittades ) : ( filteredOrders?.map((order) => ( {order.order_number}
{order.customer_name || "—"}
{order.customer_email}
{format(new Date(order.created_at), "d MMM yyyy, HH:mm", { locale: sv })} {statusLabels[order.status] || order.status} {Number(order.total_amount).toLocaleString("sv-SE")} {order.currency}
)) )}
); }