From 963392edb3b7519260794c4acb547bc102f512ed Mon Sep 17 00:00:00 2001 From: natib21 Date: Sat, 20 Jun 2026 09:38:12 +0000 Subject: [PATCH] fix data table --- .../vehicles/dto/create-vehicle.dto.ts | 10 +++++- .../vehicles/entities/vehicle.entity.ts | 6 ++++ .../src/pages/fleet/FleetResourcePage.tsx | 35 ++++++++++++++++--- .../src/pages/fleet/config/vehicles.ts | 1 + 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/apps/edr-freight-api/src/modules/vehicles/dto/create-vehicle.dto.ts b/apps/edr-freight-api/src/modules/vehicles/dto/create-vehicle.dto.ts index fb5c4e92b..8a2ad8519 100644 --- a/apps/edr-freight-api/src/modules/vehicles/dto/create-vehicle.dto.ts +++ b/apps/edr-freight-api/src/modules/vehicles/dto/create-vehicle.dto.ts @@ -1,4 +1,4 @@ -import { IsString, IsEnum, IsNumber, IsOptional } from 'class-validator'; +import { IsString, IsEnum, IsNumber, IsOptional, IsUUID } from 'class-validator'; import { VehicleType, FuelType, VehicleStatus } from '../entities/vehicle.entity'; export class CreateVehicleDto { @@ -29,4 +29,12 @@ export class CreateVehicleDto { @IsOptional() @IsString() description?: string; + + @IsOptional() + @IsUUID() + assignedDriverId?: string; + + @IsOptional() + @IsString() + assignedDriverName?: string; } diff --git a/apps/edr-freight-api/src/modules/vehicles/entities/vehicle.entity.ts b/apps/edr-freight-api/src/modules/vehicles/entities/vehicle.entity.ts index d898bb78b..005118b0a 100644 --- a/apps/edr-freight-api/src/modules/vehicles/entities/vehicle.entity.ts +++ b/apps/edr-freight-api/src/modules/vehicles/entities/vehicle.entity.ts @@ -56,4 +56,10 @@ export class Vehicle extends BaseEntity { @Column({ type: 'text', nullable: true }) description?: string | null; + + @Column({ name: 'assigned_driver_id', type: 'uuid', nullable: true }) + assignedDriverId?: string; + + @Column({ name: 'assigned_driver_name', nullable: true }) + assignedDriverName?: string; } diff --git a/apps/edr-freight-web/backoffice/src/pages/fleet/FleetResourcePage.tsx b/apps/edr-freight-web/backoffice/src/pages/fleet/FleetResourcePage.tsx index f29a481af..a49f6d3d9 100644 --- a/apps/edr-freight-web/backoffice/src/pages/fleet/FleetResourcePage.tsx +++ b/apps/edr-freight-web/backoffice/src/pages/fleet/FleetResourcePage.tsx @@ -299,6 +299,34 @@ const FleetResourcePage = () => { } }; + const handleAssignDriver = async () => { + if (!assigningDriver || !("id" in assigningDriver) || !selectedDriver) return; + try { + const selectedDriverRecord = (drivers as Array>).find( + (d) => String(d.id) === selectedDriver + ); + if (!selectedDriverRecord) return; + + const driverName = `${selectedDriverRecord.firstName} ${selectedDriverRecord.lastName}`; + + await update.mutateAsync({ + id: String(assigningDriver.id), + data: { + assignedDriverId: selectedDriver, + assignedDriverName: driverName, + }, + }); + toast({ title: "Driver assigned successfully" }); + setAssigningDriver(null); + setSelectedDriver(""); + } catch (err: unknown) { + const message = + (err as { response?: { data?: { message?: string } } })?.response?.data?.message ?? + "Assignment failed"; + toast({ title: "Assignment failed", description: String(message), variant: "destructive" }); + } + }; + const itemLabel = config.label.toLowerCase(); return ( @@ -519,12 +547,9 @@ const FleetResourcePage = () => { Cancel diff --git a/apps/edr-freight-web/backoffice/src/pages/fleet/config/vehicles.ts b/apps/edr-freight-web/backoffice/src/pages/fleet/config/vehicles.ts index 02946145b..689d278a2 100644 --- a/apps/edr-freight-web/backoffice/src/pages/fleet/config/vehicles.ts +++ b/apps/edr-freight-web/backoffice/src/pages/fleet/config/vehicles.ts @@ -55,6 +55,7 @@ export const vehiclesConfig: FleetResourceConfig = { { id: "year", header: "Year", accessorKey: "year", format: "number", size: 80 }, { id: "fuelType", header: "Fuel Type", accessorKey: "fuelType", format: "code", size: 110 }, { id: "capacity", header: "Capacity (tons)", accessorKey: "capacity", format: "number", size: 130 }, + { id: "assignedDriverName", header: "Assigned Driver", accessorKey: "assignedDriverName", format: "code", size: 140 }, { id: "status", header: "Status", accessorKey: "status", format: "statusBadge", size: 100 }, ], formFields: [