@@ -6,11 +6,13 @@ import cx from 'classnames';
6
6
import dayjs from 'dayjs' ;
7
7
import { useTranslation } from 'react-i18next' ;
8
8
9
- import type { PacedTrainId } from 'reducers/osrdconf/types' ;
9
+ import type { PacedTrainId , TrainId } from 'reducers/osrdconf/types' ;
10
10
import { ms2min } from 'utils/timeManipulation' ;
11
11
12
12
import TimetableItemActions from '../TimetableItemActions' ;
13
13
import type { PacedTrainWithResult } from '../types' ;
14
+ import useOccurrences from './hooks/useOccurrences' ;
15
+ import OccurrenceItem from './OccurrenceItem' ;
14
16
15
17
type PacedTrainItemProps = {
16
18
isInSelection : boolean ;
@@ -19,6 +21,7 @@ type PacedTrainItemProps = {
19
21
isOnEdit : boolean ;
20
22
isProjectionPathUsed : boolean ;
21
23
selectPacedTrainToEdit : ( pacedTrain : PacedTrainWithResult ) => void ;
24
+ selectedTimeTableItemId : TrainId | undefined ;
22
25
} ;
23
26
24
27
const PacedTrainItem = ( {
@@ -28,19 +31,18 @@ const PacedTrainItem = ({
28
31
isOnEdit,
29
32
isProjectionPathUsed,
30
33
selectPacedTrainToEdit,
34
+ selectedTimeTableItemId,
31
35
} : PacedTrainItemProps ) => {
32
36
const { t } = useTranslation ( [ 'operationalStudies/scenario' ] ) ;
33
37
34
38
const [ isOccurrencesListOpen , setIsOccurrencesListOpen ] = useState ( false ) ;
39
+ const { occurrences, occurrencesCount } = useOccurrences ( pacedTrain ) ;
35
40
36
41
const toggleOccurrencesList = ( ) => setIsOccurrencesListOpen ( ( open ) => ! open ) ;
37
42
const selectPathProjection = async ( ) => { } ;
38
43
const duplicatePacedTrain = async ( ) => { } ;
39
44
const deletePacedTrain = async ( ) => { } ;
40
45
41
- const pacedTrainCadence = pacedTrain . paced . step ;
42
-
43
- const occurrencesCount = Math . ceil ( pacedTrain . paced . duration . ms / pacedTrain . paced . step . ms ) ;
44
46
return (
45
47
< div
46
48
data-testid = "scenario-timetable-train"
@@ -92,7 +94,9 @@ const PacedTrainItem = ({
92
94
93
95
{ ! pacedTrain . invalidReason ? (
94
96
< div className = "paced-train-right-zone" >
95
- { pacedTrain . isValid && < div > — { `${ ms2min ( pacedTrainCadence . ms ) } min` } </ div > }
97
+ { pacedTrain . isValid && (
98
+ < div > — { `${ ms2min ( pacedTrain . paced . step . ms ) } min` } </ div >
99
+ ) }
96
100
< div
97
101
className = { cx ( 'status-icon' , {
98
102
'not-honored-or-too-fast' : pacedTrain . notHonoredReason ,
@@ -120,7 +124,16 @@ const PacedTrainItem = ({
120
124
editTimetableItem = { ( ) => selectPacedTrainToEdit ( pacedTrain ) }
121
125
deleteTimetableItem = { deletePacedTrain }
122
126
/>
123
- < div className = "occurrences" />
127
+ < div className = "occurrences" >
128
+ { occurrences . map ( ( occurrence , index ) => (
129
+ < OccurrenceItem
130
+ occurrence = { occurrence }
131
+ key = { occurrence . id }
132
+ isSelected = { selectedTimeTableItemId === occurrence . id }
133
+ nextOccurrence = { occurrences [ index + 1 ] }
134
+ />
135
+ ) ) }
136
+ </ div >
124
137
{ pacedTrain . isValid && (
125
138
< div className = "more-info" >
126
139
< div className = "more-info-left" >
0 commit comments