Skip to content

Commit cce61b8

Browse files
committed
front: use Date in TrainScheduleWithDetails
Instead of passing around formatted strings, pass a Date object. That way we don't need to undo the formatting in TimetableTrainCard later on, and we get improved type safety. Signed-off-by: Simon Ser <[email protected]>
1 parent 508ac32 commit cce61b8

File tree

3 files changed

+18
-21
lines changed

3 files changed

+18
-21
lines changed

front/src/applications/operationalStudies/helpers/formatTrainScheduleSummaries.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import dayjs from 'dayjs';
21
import { compact } from 'lodash';
32

43
import type {
@@ -7,7 +6,6 @@ import type {
76
TrainScheduleResult,
87
} from 'common/api/osrdEditoastApi';
98
import type { TrainScheduleWithDetails } from 'modules/trainschedule/components/Timetable/types';
10-
import { formatToIsoDate, isoDateToMs } from 'utils/date';
119
import { jouleToKwh } from 'utils/physics';
1210
import { formatKmValue } from 'utils/strings';
1311
import { ISO8601Duration2sec } from 'utils/timeManipulation';
@@ -36,21 +34,20 @@ const formatTrainScheduleSummaries = (
3634
notHonoredReason = 'scheduleNotHonored';
3735
}
3836

37+
const startTime = new Date(trainSchedule.start_time);
38+
3939
const otherProps =
4040
trainSummary.status === 'success'
4141
? {
4242
isValid: true,
43-
arrivalTime: formatToIsoDate(
44-
isoDateToMs(trainSchedule.start_time) + trainSummary.time,
45-
true
46-
),
43+
arrivalTime: new Date(startTime.getTime() + trainSummary.time),
4744
duration: trainSummary.time,
4845
pathLength: formatKmValue(trainSummary.length, 'millimeters', 1),
4946
mechanicalEnergyConsumed: jouleToKwh(trainSummary.energy_consumption, true),
5047
}
5148
: {
5249
isValid: false,
53-
arrivalTime: '',
50+
arrivalTime: null,
5451
duration: 0,
5552
pathLength: '',
5653
mechanicalEnergyConsumed: 0,
@@ -64,7 +61,7 @@ const formatTrainScheduleSummaries = (
6461
return {
6562
id: trainSchedule.id,
6663
trainName: trainSchedule.train_name,
67-
startTime: dayjs(trainSchedule.start_time).format('D/MM/YYYY HH:mm:ss'), // format to time
64+
startTime,
6865
stopsCount:
6966
(trainSchedule.schedule?.filter(
7067
(step) => step.stop_for && ISO8601Duration2sec(step.stop_for) > 0

front/src/modules/trainschedule/components/Timetable/TimetableTrainCard.tsx

+11-11
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ type TimetableTrainCardProps = {
3434
projectionPathIsUsed: boolean;
3535
};
3636

37+
const formatFullDate = (d: Date) => dayjs(d).format('D/MM/YYYY HH:mm:ss');
38+
const formatDateHours = (d: Date) => dayjs(d).format('HH:mm');
39+
3740
const TimetableTrainCard = ({
3841
isInSelection,
3942
train,
@@ -133,11 +136,7 @@ const TimetableTrainCard = ({
133136
dispatch(updateTrainIdUsedForProjection(train.id));
134137
};
135138

136-
/* TODO: delete the format when the date management PR has been passed */
137-
const isAfterMidnight = dayjs(train.arrivalTime, 'D/MM/YYYY').isAfter(
138-
dayjs(train.startTime, 'D/MM/YYYY'),
139-
'day'
140-
);
139+
const isAfterMidnight = dayjs(train.arrivalTime).isAfter(train.startTime, 'day');
141140

142141
return (
143142
<div
@@ -196,9 +195,11 @@ const TimetableTrainCard = ({
196195
<div className="train-time">
197196
<div className="status-icon after-midnight">{isAfterMidnight && <Moon />}</div>
198197
{train.isValid && (
199-
<div className="scenario-timetable-train-departure" title={train.startTime}>
200-
{/* TODO: delete the format when the date management `PR` has been passed */}
201-
{dayjs(train.startTime, 'D/MM/YYYY HH:mm:ss').format('HH:mm')}
198+
<div
199+
className="scenario-timetable-train-departure"
200+
title={formatFullDate(train.startTime)}
201+
>
202+
{formatDateHours(train.startTime)}
202203
</div>
203204
)}
204205
<div className="status-icon not-honored-or-too-fast">
@@ -209,10 +210,9 @@ const TimetableTrainCard = ({
209210
<div
210211
data-testid="train-arrival-time"
211212
className="scenario-timetable-train-arrival"
212-
title={train.arrivalTime}
213+
title={formatFullDate(train.arrivalTime)}
213214
>
214-
{/* TODO: delete the format when the date management `PR` has been passed */}
215-
{dayjs(train.arrivalTime, 'D/MM/YYYY HH:mm:ss').format('HH:mm')}
215+
{formatDateHours(train.arrivalTime)}
216216
</div>
217217
)}
218218
<div

front/src/modules/trainschedule/components/Timetable/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ export type ScheduledPointsHonoredFilter = 'both' | 'honored' | 'notHonored';
1212
export type TrainScheduleWithDetails = {
1313
id: number;
1414
trainName: string;
15-
startTime: string;
16-
arrivalTime: string;
15+
startTime: Date;
16+
arrivalTime: Date | null;
1717
/** in ms */
1818
duration: number;
1919
stopsCount: number;

0 commit comments

Comments
 (0)