"use client";
// src/Components/Trip/TripTable.tsx
// MIGRATED to ReusableTable + ActionButtons — same props, same visual
// result as the original. StatusBadge kept custom since colors come
// dynamically from TRIP_STATUS_MAP (per-status color+dot).
import { Button, ReusableTable, ActionButtons } from "../UI";
import { TRIP_STATUS_MAP } from "@/src/types/trip";
import type { TableColumn } from "@/src/types/models";
import type { Trip } from "@/src/types/trip";
function StatusBadge({ status }: { status: Trip["status"] }) {
const s = TRIP_STATUS_MAP[status];
return (
{s.label}
);
}
function fmtDate(iso?: string | null): string {
if (!iso) return "—";
return new Date(iso).toLocaleDateString("en-US", { year: "numeric", month: "short", day: "numeric" });
}
interface TripTableProps {
trips: Trip[];
loading: boolean;
search: string;
page: number;
pages: number;
onEdit: (trip: Trip) => void;
onDelete: (trip: Trip) => void;
onView: (trip: Trip) => void;
onAddFirst: () => void;
onPageChange: (p: number) => void;
}
export function TripTable({
trips, loading, search, page, pages,
onEdit, onDelete, onView, onAddFirst, onPageChange,
}: TripTableProps) {
const columns: TableColumn[] = [
{
key: "title",
header: "الرحلة",
width: "2fr",
render: (t) => (
),
},
{ key: "driver", header: "السائق", width: "1.3fr", render: (t) => t.driver?.name ?? "—" },
{
key: "car",
header: "السيارة",
width: "1.3fr",
render: (t) => (t.car ? `${t.car.manufacturer} ${t.car.model}` : "—"),
},
{ key: "branch", header: "الفرع", width: "1fr", render: (t) => t.branch?.name ?? "—" },
{ key: "status", header: "الحالة", width: "1fr", render: (t) => },
{
key: "startTime",
header: "معاد البداء",
width: "1fr",
align: "center",
render: (t) => fmtDate(t.startTime),
},
];
return (
Add first trip
)
}
renderActions={(t) => (
onView(t)}
onEdit={() => onEdit(t)}
onDelete={() => onDelete(t)}
/>
)}
/>
);
}