import { Form, Link } from "@remix-run/react"; import { useState, useEffect } from "react"; import { DataTable, Pagination } from "~/components/ui/DataTable"; import { Button } from "~/components/ui/Button"; import { Flex } from "~/components/layout/Flex"; import { useSettings } from "~/contexts/SettingsContext"; import { TRANSMISSION_TYPES, FUEL_TYPES, USE_TYPES, BODY_TYPES } from "~/lib/constants"; import type { VehicleWithOwner } from "~/types/database"; interface VehicleListProps { vehicles: VehicleWithOwner[]; currentPage: number; totalPages: number; onPageChange: (page: number) => void; onEditVehicle: (vehicle: VehicleWithOwner) => void; onViewVehicle?: (vehicle: VehicleWithOwner) => void; isLoading: boolean; actionData?: any; } export function VehicleList({ vehicles, currentPage, totalPages, onPageChange, onEditVehicle, onViewVehicle, isLoading, actionData, }: VehicleListProps) { const { formatDate } = useSettings(); const [deletingVehicleId, setDeletingVehicleId] = useState(null); // Reset deleting state when delete action completes useEffect(() => { if (actionData?.success && actionData.action === "delete") { setDeletingVehicleId(null); } }, [actionData]); // Helper functions to get display labels const getTransmissionLabel = (value: string) => { return TRANSMISSION_TYPES.find(t => t.value === value)?.label || value; }; const getFuelLabel = (value: string) => { return FUEL_TYPES.find(f => f.value === value)?.label || value; }; const getUseTypeLabel = (value: string) => { return USE_TYPES.find(u => u.value === value)?.label || value; }; const getBodyTypeLabel = (value: string) => { return BODY_TYPES.find(b => b.value === value)?.label || value; }; const columns = [ { key: "plateNumber", header: "رقم اللوحة", render: (vehicle: VehicleWithOwner) => (
{vehicle.plateNumber}
المركبة رقم: {vehicle.id}
), }, { key: "vehicle", header: "تفاصيل المركبة", render: (vehicle: VehicleWithOwner) => (
{vehicle.manufacturer} {vehicle.model}
{vehicle.year} • {getBodyTypeLabel(vehicle.bodyType)}
{vehicle.trim && (
فئة: {vehicle.trim}
)}
), }, { key: "specifications", header: "المواصفات", render: (vehicle: VehicleWithOwner) => (
{getTransmissionLabel(vehicle.transmission)}
{getFuelLabel(vehicle.fuel)}
{vehicle.cylinders && (
{vehicle.cylinders} أسطوانة
)} {vehicle.engineDisplacement && (
{vehicle.engineDisplacement}L
)}
), }, { key: "owner", header: "المالك", render: (vehicle: VehicleWithOwner) => (
{vehicle.owner.name} {vehicle.owner.phone && (
{vehicle.owner.phone}
)}
), }, { key: "useType", header: "نوع الاستخدام", render: (vehicle: VehicleWithOwner) => (
{getUseTypeLabel(vehicle.useType)}
), }, { key: "maintenance", header: "الصيانة", render: (vehicle: VehicleWithOwner) => (
{vehicle.lastVisitDate ? (
آخر زيارة: {formatDate(vehicle.lastVisitDate)}
) : (
لا توجد زيارات
)} {vehicle.suggestedNextVisitDate && (
الزيارة التالية: {formatDate(vehicle.suggestedNextVisitDate)}
)}
), }, { key: "createdDate", header: "تاريخ التسجيل", render: (vehicle: VehicleWithOwner) => (
{formatDate(vehicle.createdDate)}
), }, { key: "actions", header: "الإجراءات", render: (vehicle: VehicleWithOwner) => ( {onViewVehicle ? ( ) : ( )}
), }, ]; return (
{vehicles.length === 0 ? (
🚗

لا توجد مركبات

لم يتم العثور على أي مركبات. قم بإضافة مركبة جديدة للبدء.

) : ( )}
{totalPages > 1 && (
)}
); }