mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 05:18:11 +00:00
- Implemented migration to release stuck assigned locomotives. - Added schedule window phases to train schedules. - Created booking batch offers table for partial capacity bookings. - Developed BookingSplitService to handle partial booking offers and splits. - Introduced BookingWindowService to manage booking window lifecycle and transitions. - Added BookingBatchOffer entity to represent offers made during booking splits. - Enhanced locomotive options with warnings for scheduling. - Created UpcomingWindowsSection component to display upcoming booking windows.
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import hotToast from "react-hot-toast";
|
|
|
|
import type { LocomotiveRecord } from "@/types/trainScheduling";
|
|
|
|
/**
|
|
* Locomotives can now be scheduled in advance: not-at-origin-yard or
|
|
* already-on-future-schedules is allowed with a warning (only OUT_OF_SERVICE
|
|
* is blocked server-side). This returns the hint to surface in the picker,
|
|
* or null when the locomotive is ready at the origin yard.
|
|
*/
|
|
export function locomotiveWarning(loco: LocomotiveRecord): string | null {
|
|
const hints: string[] = [];
|
|
if (loco.atOriginYard === false) hints.push("not at origin yard");
|
|
const futureCount = loco.futureScheduleCount ?? 0;
|
|
if (futureCount > 0) {
|
|
hints.push(`on ${futureCount} future schedule${futureCount === 1 ? "" : "s"}`);
|
|
}
|
|
return hints.length ? hints.join(" · ") : null;
|
|
}
|
|
|
|
/** MultiSelect option for the schedule-creation locomotive picker. */
|
|
export function locomotiveOption(
|
|
loco: LocomotiveRecord,
|
|
nameSeparator = " — ",
|
|
): { value: string; label: string } {
|
|
const base = `${loco.code}${loco.name ? `${nameSeparator}${loco.name}` : ""}`;
|
|
const warning = locomotiveWarning(loco);
|
|
return {
|
|
value: loco.id,
|
|
label: warning ? `${base} · ⚠ ${warning}` : base,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Yellow toast listing create-schedule warnings (e.g. locomotive not at the
|
|
* origin yard yet). The shared `useToast` hook only knows success/error, so
|
|
* this styles a react-hot-toast directly.
|
|
*/
|
|
export function showScheduleWarnings(warnings?: string[] | null): void {
|
|
if (!warnings?.length) return;
|
|
hotToast(warnings.join("\n"), {
|
|
icon: "⚠️",
|
|
duration: 8000,
|
|
style: {
|
|
background: "var(--mantine-color-yellow-0)",
|
|
color: "var(--mantine-color-yellow-9)",
|
|
border: "1px solid var(--mantine-color-yellow-4)",
|
|
},
|
|
});
|
|
}
|