mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 00:38:11 +00:00
Add minDate handling for vessel and departure dates across components
This commit is contained in:
@@ -1,9 +1,19 @@
|
||||
import { useState } from "react";
|
||||
import { useMemo, useState } from "react";
|
||||
import { Button, Group, Modal, Stack, Text, TextInput, Textarea } from "@mantine/core";
|
||||
import toast from "react-hot-toast";
|
||||
|
||||
import { trainSchedulingService } from "@/services/trainScheduling.service";
|
||||
|
||||
/** `min` for a `datetime-local` input: now, in the browser's local zone. */
|
||||
function nowLocalDateTime(): string {
|
||||
const now = new Date();
|
||||
const pad = (n: number) => String(n).padStart(2, "0");
|
||||
return (
|
||||
`${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}` +
|
||||
`T${pad(now.getHours())}:${pad(now.getMinutes())}`
|
||||
);
|
||||
}
|
||||
|
||||
export function RescheduleTrainDialog({
|
||||
scheduleId,
|
||||
currentBookingIds,
|
||||
@@ -20,12 +30,21 @@ export function RescheduleTrainDialog({
|
||||
const [newDepartureDate, setNewDepartureDate] = useState("");
|
||||
const [reason, setReason] = useState("");
|
||||
const [loading, setLoading] = useState(false);
|
||||
// Earliest selectable departure, refreshed each time the dialog opens.
|
||||
const minDepartureDate = useMemo(
|
||||
() => (opened ? nowLocalDateTime() : ""),
|
||||
[opened],
|
||||
);
|
||||
|
||||
const handleSubmit = async () => {
|
||||
if (!newDepartureDate) {
|
||||
toast.error("Select a new departure date");
|
||||
return;
|
||||
}
|
||||
if (new Date(newDepartureDate).getTime() < Date.now()) {
|
||||
toast.error("New departure must be in the future");
|
||||
return;
|
||||
}
|
||||
setLoading(true);
|
||||
try {
|
||||
await trainSchedulingService.maintenanceReschedule(scheduleId, {
|
||||
@@ -53,6 +72,7 @@ export function RescheduleTrainDialog({
|
||||
<TextInput
|
||||
label="New departure"
|
||||
type="datetime-local"
|
||||
min={minDepartureDate}
|
||||
value={newDepartureDate}
|
||||
onChange={(e) => setNewDepartureDate(e.target.value)}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user