@@ -4,6 +4,7 @@ import cx from 'classnames';
4
4
import dayjs from 'dayjs' ;
5
5
import { useTranslation } from 'react-i18next' ;
6
6
import { useSelector } from 'react-redux' ;
7
+ import { Virtualizer } from 'virtua' ;
7
8
8
9
import { MANAGE_TRAIN_SCHEDULE_TYPES } from 'applications/operationalStudies/consts' ;
9
10
import type { Conflict , InfraState , TrainScheduleResult } from 'common/api/osrdEditoastApi' ;
@@ -148,30 +149,32 @@ const Timetable = ({
148
149
trainSchedules = { trainSchedules }
149
150
isInSelection = { selectedTrainIds . length > 0 }
150
151
/>
151
- { displayedTrainSchedules . map ( ( train : TrainScheduleWithDetails , index ) => (
152
- < div key = { `timetable-train-card-${ train . id } ` } >
153
- { showDepartureDates [ index ] && (
154
- < div className = "scenario-timetable-departure-date" >
155
- { currentDepartureDates [ index ] }
156
- </ div >
157
- ) }
158
- < TimetableTrainCard
159
- isInSelection = { selectedTrainIds . includes ( train . id ) }
160
- handleSelectTrain = { handleSelectTrain }
161
- train = { train }
162
- isSelected = { infraState === 'CACHED' && selectedTrainId === train . id }
163
- isModified = { train . id === trainIdToEdit }
164
- setDisplayTrainScheduleManagement = { setDisplayTrainScheduleManagement }
165
- upsertTrainSchedules = { upsertTrainSchedules }
166
- setTrainIdToEdit = { setTrainIdToEdit }
167
- removeTrains = { removeAndUnselectTrains }
168
- projectionPathIsUsed = {
169
- infraState === 'CACHED' && trainIdUsedForProjection === train . id
170
- }
171
- dtoImport = { dtoImport }
172
- />
173
- </ div >
174
- ) ) }
152
+ < Virtualizer overscan = { 15 } >
153
+ { displayedTrainSchedules . map ( ( train : TrainScheduleWithDetails , index ) => (
154
+ < div key = { `timetable-train-card-${ train . id } ` } >
155
+ { showDepartureDates [ index ] && (
156
+ < div className = "scenario-timetable-departure-date" >
157
+ { currentDepartureDates [ index ] }
158
+ </ div >
159
+ ) }
160
+ < TimetableTrainCard
161
+ isInSelection = { selectedTrainIds . includes ( train . id ) }
162
+ handleSelectTrain = { handleSelectTrain }
163
+ train = { train }
164
+ isSelected = { infraState === 'CACHED' && selectedTrainId === train . id }
165
+ isModified = { train . id === trainIdToEdit }
166
+ setDisplayTrainScheduleManagement = { setDisplayTrainScheduleManagement }
167
+ upsertTrainSchedules = { upsertTrainSchedules }
168
+ setTrainIdToEdit = { setTrainIdToEdit }
169
+ removeTrains = { removeAndUnselectTrains }
170
+ projectionPathIsUsed = {
171
+ infraState === 'CACHED' && trainIdUsedForProjection === train . id
172
+ }
173
+ dtoImport = { dtoImport }
174
+ />
175
+ </ div >
176
+ ) ) }
177
+ </ Virtualizer >
175
178
< div
176
179
className = { cx ( 'bottom-timetables-trains' , {
177
180
'empty-list' : trainSchedulesWithDetails . length === 0 ,
0 commit comments