This commit is contained in:
natib21
2026-06-19 11:42:27 +00:00
parent b4ed7d492d
commit 8d69630f01
65 changed files with 8980 additions and 6 deletions

View File

@@ -6,7 +6,9 @@ export type FleetResourceSlug =
| "trains"
| "wagons"
| "containers"
| "cargoes";
| "cargoes"
| "vehicles"
| "drivers";
export const FLEET_SELECT_NONE = "__none__";
@@ -73,6 +75,8 @@ export const FLEET_BASE_PATH_BY_SLUG: Record<FleetResourceSlug, string> = {
wagons: "/dashboard/wagons",
containers: "/dashboard/containers",
cargoes: "/dashboard/cargoes",
vehicles: "/dashboard/vehicles",
drivers: "/dashboard/drivers",
};
const LOCOMOTIVE_TYPE_OPTIONS = [
@@ -94,6 +98,37 @@ const WAGON_STATUS_OPTIONS = [
{ label: "Retired", value: Freight.WagonStatus.Retired },
];
const VEHICLE_TYPE_OPTIONS = [
{ label: "Truck", value: "TRUCK" },
{ label: "Van", value: "VAN" },
{ label: "Car", value: "CAR" },
{ label: "Bus", value: "BUS" },
{ label: "Trailer", value: "TRAILER" },
{ label: "Tanker", value: "TANKER" },
{ label: "Flatbed", value: "FLATBED" },
];
const FUEL_TYPE_OPTIONS = [
{ label: "Petrol", value: "PETROL" },
{ label: "Diesel", value: "DIESEL" },
{ label: "Electric", value: "ELECTRIC" },
{ label: "Hybrid", value: "HYBRID" },
];
const VEHICLE_STATUS_OPTIONS = [
{ label: "Active", value: "ACTIVE" },
{ label: "Maintenance", value: "MAINTENANCE" },
{ label: "Retired", value: "RETIRED" },
{ label: "Out of service", value: "OUT_OF_SERVICE" },
];
const DRIVER_STATUS_OPTIONS = [
{ label: "Active", value: "ACTIVE" },
{ label: "Inactive", value: "INACTIVE" },
{ label: "Suspended", value: "SUSPENDED" },
{ label: "On leave", value: "ON_LEAVE" },
];
export const FLEET_RESOURCES: FleetResourceConfig[] = [
{
@@ -342,6 +377,120 @@ export const FLEET_RESOURCES: FleetResourceConfig[] = [
status: "PENDING",
},
},
{
slug: "vehicles",
label: "Vehicles",
subtitle: "Manage vehicle master data for fleet operations",
basePath: "/dashboard/vehicles",
addLabel: "Add Vehicle",
entityLabel: "Vehicle",
searchPlaceholder: "Search vehicles…",
supportsSearch: true,
removeAction: "delete",
cardTitleKey: "plateNumber",
cardCodeKey: "plateNumber",
cardSubtitleKey: "status",
listFilters: [
{
key: "status",
label: "Status",
allLabel: "All statuses",
options: VEHICLE_STATUS_OPTIONS,
},
],
searchKeys: ["plateNumber", "registrationNumber", "manufacturer", "model", "vehicleType", "status"],
columns: [
{ id: "plateNumber", header: "Plate Number", accessorKey: "plateNumber", format: "code" },
{ id: "vehicleType", header: "Type", accessorKey: "vehicleType" },
{ id: "manufacturer", header: "Manufacturer", accessorKey: "manufacturer" },
{ id: "model", header: "Model", accessorKey: "model" },
{ id: "year", header: "Year", accessorKey: "year", format: "number" },
{ id: "fuelType", header: "Fuel Type", accessorKey: "fuelType" },
{ id: "capacity", header: "Capacity", accessorKey: "capacity", format: "number" },
{ id: "status", header: "Status", accessorKey: "status", format: "statusBadge" },
],
formFields: [
{ name: "plateNumber", label: "Plate Number", type: "text", required: true },
{ name: "vehicleType", label: "Vehicle Type", type: "select", required: true, options: VEHICLE_TYPE_OPTIONS },
{ name: "manufacturer", label: "Manufacturer", type: "text", required: true },
{ name: "model", label: "Model", type: "text", required: true },
{ name: "year", label: "Year", type: "number", required: true },
{ name: "fuelType", label: "Fuel Type", type: "select", required: true, options: FUEL_TYPE_OPTIONS },
{ name: "capacity", label: "Capacity", type: "number", required: true },
{ name: "status", label: "Status", type: "select", required: true, options: VEHICLE_STATUS_OPTIONS },
{ name: "description", label: "Description", type: "textarea" },
],
emptyValues: {
plateNumber: "",
vehicleType: "TRUCK",
manufacturer: "",
model: "",
year: new Date().getFullYear(),
fuelType: "DIESEL",
capacity: 0,
status: "ACTIVE",
description: "",
},
},
{
slug: "drivers",
label: "Drivers",
subtitle: "Manage driver records and licenses",
basePath: "/dashboard/drivers",
addLabel: "Add Driver",
entityLabel: "Driver",
searchPlaceholder: "Search drivers…",
supportsSearch: true,
removeAction: "delete",
cardTitleKey: "firstName",
cardCodeKey: "licenseNumber",
cardSubtitleKey: "status",
listFilters: [
{
key: "status",
label: "Status",
allLabel: "All statuses",
options: DRIVER_STATUS_OPTIONS,
},
],
searchKeys: ["firstName", "lastName", "email", "phoneNumber", "licenseNumber", "status"],
columns: [
{ id: "licenseNumber", header: "License Number", accessorKey: "licenseNumber", format: "code" },
{ id: "firstName", header: "First Name", accessorKey: "firstName" },
{ id: "lastName", header: "Last Name", accessorKey: "lastName" },
{ id: "email", header: "Email", accessorKey: "email" },
{ id: "phoneNumber", header: "Phone", accessorKey: "phoneNumber" },
{ id: "licenseExpiryDate", header: "License Expiry", accessorKey: "licenseExpiryDate" },
{ id: "status", header: "Status", accessorKey: "status", format: "statusBadge" },
],
formFields: [
{ name: "licenseNumber", label: "License Number", type: "text", required: true },
{ name: "firstName", label: "First Name", type: "text", required: true },
{ name: "lastName", label: "Last Name", type: "text", required: true },
{ name: "email", label: "Email", type: "text", required: true },
{ name: "phoneNumber", label: "Phone Number", type: "text", required: true },
{ name: "dateOfBirth", label: "Date of Birth", type: "text", required: true },
{ name: "licenseExpiryDate", label: "License Expiry Date", type: "text", required: true },
{ name: "status", label: "Status", type: "select", required: true, options: DRIVER_STATUS_OPTIONS },
{ name: "address", label: "Address", type: "textarea" },
{ name: "emergencyContact", label: "Emergency Contact", type: "text" },
{ name: "notes", label: "Notes", type: "textarea" },
],
emptyValues: {
licenseNumber: "",
firstName: "",
lastName: "",
email: "",
phoneNumber: "",
dateOfBirth: "",
licenseExpiryDate: "",
status: "ACTIVE",
vehicleTypesAuthorized: [],
address: "",
emergencyContact: "",
notes: "",
},
},
];
export const getFleetResource = (slug: string): FleetResourceConfig | undefined =>