@@ -5,16 +5,16 @@ import { round, isEqual, isNil } from 'lodash';
5
5
import { keyColumn , createTextColumn } from 'react-datasheet-grid' ;
6
6
7
7
import type { ReceptionSignal } from 'common/api/osrdEditoastApi' ;
8
- import type { IsoDurationString , TimeString } from 'common/types' ;
8
+ import type { TimeString } from 'common/types' ;
9
9
import { matchPathStepAndOp } from 'modules/pathfinding/utils' ;
10
10
import type { SuggestedOP } from 'modules/trainschedule/components/ManageTrainSchedule/types' ;
11
11
import type { PathStep } from 'reducers/osrdconf/types' ;
12
+ import { Duration } from 'utils/duration' ;
13
+ import { msToS } from 'utils/physics' ;
12
14
import { NO_BREAK_SPACE } from 'utils/strings' ;
13
15
import {
14
- calculateTimeDifferenceInSeconds ,
15
16
datetime2sec ,
16
17
durationInSeconds ,
17
- formatDurationAsISO8601 ,
18
18
sec2time ,
19
19
SECONDS_IN_A_DAY ,
20
20
secToHoursString ,
@@ -79,10 +79,15 @@ export const formatSuggestedViasToRowVias = (
79
79
const { arrival, receptionSignal, stopFor, theoreticalMargin } = objectToUse || { } ;
80
80
81
81
const isMarginValid = theoreticalMargin ? marginRegExValidation . test ( theoreticalMargin ) : true ;
82
- const durationArrivalTime = i === 0 ? 'PT0S' : arrival ;
83
- const arrivalInSeconds = durationArrivalTime ? time2sec ( durationArrivalTime ) : null ;
82
+ const rawArrivalDuration = i === 0 ? Duration . zero : arrival ;
83
+ // TODO: turn PathStep.arrival into a Duration instead of a string
84
+ const arrivalDuration =
85
+ typeof rawArrivalDuration === 'string'
86
+ ? Duration . parse ( rawArrivalDuration )
87
+ : rawArrivalDuration ;
88
+ const arrivalInSeconds = arrivalDuration ? msToS ( arrivalDuration . ms ) : null ;
84
89
85
- const formattedArrival = calculateStepTimeAndDays ( startTime , durationArrivalTime ) ;
90
+ const formattedArrival = calculateStepTimeAndDays ( startTime , arrivalDuration ) ;
86
91
87
92
const departureTime =
88
93
stopFor && arrivalInSeconds
@@ -281,7 +286,7 @@ export function updateDaySinceDeparture(
281
286
export function durationSinceStartTime (
282
287
startTime ?: Date ,
283
288
stepTimeDays ?: TimeExtraDays
284
- ) : IsoDurationString | null {
289
+ ) : Duration | null {
285
290
if ( ! startTime || ! stepTimeDays ?. time || stepTimeDays ?. daySinceDeparture === undefined ) {
286
291
return null ;
287
292
}
@@ -290,23 +295,21 @@ export function durationSinceStartTime(
290
295
stepTimeDays . daySinceDeparture ,
291
296
'day'
292
297
) ;
293
- return formatDurationAsISO8601 (
294
- calculateTimeDifferenceInSeconds ( start . toISOString ( ) , step . toISOString ( ) )
295
- ) ;
298
+ return Duration . subtractDate ( step . toDate ( ) , startTime ) ;
296
299
}
297
300
298
301
export function calculateStepTimeAndDays (
299
302
startTime ?: Date | null ,
300
- isoDuration ?: IsoDurationString | null
303
+ duration ?: Duration | null
301
304
) : TimeExtraDays | undefined {
302
- if ( ! startTime || ! isoDuration ) {
305
+ if ( ! startTime || ! duration ) {
303
306
return undefined ;
304
307
}
305
308
306
309
const start = dayjs ( startTime ) ;
307
- const duration = dayjs . duration ( isoDuration ) ;
310
+ const dur = dayjs . duration ( duration . ms ) ;
308
311
309
- const waypointArrivalTime = start . add ( duration ) ;
312
+ const waypointArrivalTime = start . add ( dur ) ;
310
313
const daySinceDeparture = waypointArrivalTime . diff ( start , 'day' ) ;
311
314
const time : TimeString = waypointArrivalTime . format ( 'HH:mm:ss' ) ;
312
315
0 commit comments