mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 00:45:41 +00:00
type fixes
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { Fragment } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import { ChevronRight, Home } from "lucide-react";
|
||||
import { ChevronRight } from "lucide-react";
|
||||
|
||||
export interface BreadcrumbItem {
|
||||
label: string;
|
||||
@@ -34,10 +34,7 @@ export default function Breadcrumbs({ items }: BreadcrumbsProps) {
|
||||
<ChevronRight className="mx-2 h-4 w-4 text-slate-300" />
|
||||
|
||||
{item.href && !isLast ? (
|
||||
<Link
|
||||
to={item.href}
|
||||
className="transition hover:text-[#10B981]"
|
||||
>
|
||||
<Link to={item.href} className="transition hover:text-[#10B981]">
|
||||
{item.label}
|
||||
</Link>
|
||||
) : (
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
import { FormEvent, useState } from "react";
|
||||
import { Button, FormField } from "@edr/ui-common";
|
||||
|
||||
import type { CreateBookingPayload } from "../../services/bookings.service";
|
||||
|
||||
export interface BookingFormProps {
|
||||
onSubmit: (payload: CreateBookingPayload) => void;
|
||||
isSubmitting?: boolean;
|
||||
}
|
||||
|
||||
const BookingForm = ({ onSubmit, isSubmitting }: BookingFormProps) => {
|
||||
const [reference, setReference] = useState("");
|
||||
const [customerId, setCustomerId] = useState("");
|
||||
const [scheduledDate, setScheduledDate] = useState("");
|
||||
const [totalAmount, setTotalAmount] = useState("0");
|
||||
|
||||
const handleSubmit = (event: FormEvent<HTMLFormElement>) => {
|
||||
event.preventDefault();
|
||||
onSubmit({
|
||||
reference,
|
||||
customerId,
|
||||
scheduledDate,
|
||||
totalAmount: Number(totalAmount),
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit} className="flex flex-col gap-3">
|
||||
<FormField
|
||||
label="Reference"
|
||||
value={reference}
|
||||
onChange={(e) => setReference(e.target.value)}
|
||||
required
|
||||
/>
|
||||
<FormField
|
||||
label="Customer ID"
|
||||
value={customerId}
|
||||
onChange={(e) => setCustomerId(e.target.value)}
|
||||
required
|
||||
/>
|
||||
<FormField
|
||||
label="Scheduled date"
|
||||
type="date"
|
||||
value={scheduledDate}
|
||||
onChange={(e) => setScheduledDate(e.target.value)}
|
||||
required
|
||||
/>
|
||||
<FormField
|
||||
label="Total amount"
|
||||
type="number"
|
||||
value={totalAmount}
|
||||
onChange={(e) => setTotalAmount(e.target.value)}
|
||||
min="0"
|
||||
/>
|
||||
<Button type="submit" isLoading={isSubmitting}>
|
||||
Create booking
|
||||
</Button>
|
||||
</form>
|
||||
);
|
||||
};
|
||||
|
||||
export default BookingForm;
|
||||
@@ -1,81 +0,0 @@
|
||||
import { FormEvent, useState } from "react";
|
||||
import { Button, FormField } from "@edr/ui-common";
|
||||
|
||||
export interface ConsignmentFormProps {
|
||||
onSubmit: (payload: {
|
||||
bookingId: string;
|
||||
trackingNumber: string;
|
||||
cargoType: string;
|
||||
weightKg: number;
|
||||
originStation: string;
|
||||
destinationStation: string;
|
||||
}) => void;
|
||||
isSubmitting?: boolean;
|
||||
}
|
||||
|
||||
const ConsignmentForm = ({ onSubmit, isSubmitting }: ConsignmentFormProps) => {
|
||||
const [bookingId, setBookingId] = useState("");
|
||||
const [trackingNumber, setTrackingNumber] = useState("");
|
||||
const [cargoType, setCargoType] = useState("GENERAL");
|
||||
const [weightKg, setWeightKg] = useState("0");
|
||||
const [originStation, setOriginStation] = useState("");
|
||||
const [destinationStation, setDestinationStation] = useState("");
|
||||
|
||||
const handleSubmit = (event: FormEvent<HTMLFormElement>) => {
|
||||
event.preventDefault();
|
||||
onSubmit({
|
||||
bookingId,
|
||||
trackingNumber,
|
||||
cargoType,
|
||||
weightKg: Number(weightKg),
|
||||
originStation,
|
||||
destinationStation,
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit} className="flex flex-col gap-3">
|
||||
<FormField
|
||||
label="Booking ID"
|
||||
value={bookingId}
|
||||
onChange={(e) => setBookingId(e.target.value)}
|
||||
required
|
||||
/>
|
||||
<FormField
|
||||
label="Tracking #"
|
||||
value={trackingNumber}
|
||||
onChange={(e) => setTrackingNumber(e.target.value)}
|
||||
required
|
||||
/>
|
||||
<FormField
|
||||
label="Cargo type"
|
||||
value={cargoType}
|
||||
onChange={(e) => setCargoType(e.target.value)}
|
||||
/>
|
||||
<FormField
|
||||
label="Weight (kg)"
|
||||
type="number"
|
||||
value={weightKg}
|
||||
onChange={(e) => setWeightKg(e.target.value)}
|
||||
min="0"
|
||||
/>
|
||||
<FormField
|
||||
label="Origin station"
|
||||
value={originStation}
|
||||
onChange={(e) => setOriginStation(e.target.value)}
|
||||
required
|
||||
/>
|
||||
<FormField
|
||||
label="Destination station"
|
||||
value={destinationStation}
|
||||
onChange={(e) => setDestinationStation(e.target.value)}
|
||||
required
|
||||
/>
|
||||
<Button type="submit" isLoading={isSubmitting}>
|
||||
Create consignment
|
||||
</Button>
|
||||
</form>
|
||||
);
|
||||
};
|
||||
|
||||
export default ConsignmentForm;
|
||||
@@ -1,30 +0,0 @@
|
||||
import type { Freight } from "@edr/types";
|
||||
import { Table, type TableColumn } from "@edr/ui-common";
|
||||
|
||||
export interface ConsignmentTableProps {
|
||||
consignments: Freight.IConsignment[];
|
||||
}
|
||||
|
||||
const columns: TableColumn<Freight.IConsignment>[] = [
|
||||
{ key: "trackingNumber", header: "Tracking #" },
|
||||
{ key: "cargoType", header: "Cargo" },
|
||||
{ key: "status", header: "Status" },
|
||||
{ key: "originStation", header: "Origin" },
|
||||
{ key: "destinationStation", header: "Destination" },
|
||||
{
|
||||
key: "weightKg",
|
||||
header: "Weight (kg)",
|
||||
render: (row) => row.weightKg.toFixed(2),
|
||||
},
|
||||
];
|
||||
|
||||
const ConsignmentTable = ({ consignments }: ConsignmentTableProps) => (
|
||||
<Table
|
||||
columns={columns}
|
||||
data={consignments}
|
||||
rowKey={(row) => row.id}
|
||||
emptyMessage="No consignments yet"
|
||||
/>
|
||||
);
|
||||
|
||||
export default ConsignmentTable;
|
||||
@@ -2,7 +2,6 @@ import { useQuery } from "@tanstack/react-query";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { api } from "@/services/api";
|
||||
import { Loader2, AlertCircle } from "lucide-react";
|
||||
import * as React from "react";
|
||||
|
||||
import {
|
||||
Select,
|
||||
@@ -64,11 +63,7 @@ export function DynamicSelect({
|
||||
const options = [...data.children].sort((a, b) => a.order - b.order);
|
||||
|
||||
return (
|
||||
<Select
|
||||
value={value}
|
||||
onValueChange={onValueChange}
|
||||
disabled={disabled}
|
||||
>
|
||||
<Select value={value} onValueChange={onValueChange} disabled={disabled}>
|
||||
<SelectTrigger className={cn("w-full", className)}>
|
||||
<SelectValue placeholder={placeholder ?? `Select ${data.label}`} />
|
||||
</SelectTrigger>
|
||||
|
||||
@@ -17,7 +17,7 @@ const TrackingTimeline = ({ events }: TrackingTimelineProps) => {
|
||||
<div className="flex flex-col gap-1">
|
||||
<div className="flex items-center gap-2 text-sm font-medium text-gray-900">
|
||||
<span>{event.location}</span>
|
||||
<Badge tone="info">{event.status}</Badge>
|
||||
<Badge>{event.status}</Badge>
|
||||
</div>
|
||||
<time className="text-xs text-gray-500">
|
||||
{new Date(event.occurredAt).toLocaleString()}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
export * from './table';
|
||||
export * from './badge';
|
||||
export * from './button';
|
||||
export * from './dialog';
|
||||
export * from './input';
|
||||
export * from './label';
|
||||
export * from './textarea';
|
||||
export * from './Breadcrumbs';
|
||||
export * from "./table";
|
||||
export * from "./badge";
|
||||
export * from "./button";
|
||||
export * from "./dialog";
|
||||
export * from "./input";
|
||||
export * from "./label";
|
||||
export * from "./textarea";
|
||||
|
||||
Reference in New Issue
Block a user