Skip to content

Commit 199aa27

Browse files
committed
front: timetable performance
This reverts commit d5369f8.
1 parent c72a249 commit 199aa27

File tree

3 files changed

+60
-26
lines changed

3 files changed

+60
-26
lines changed

front/package-lock.json

+31-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

front/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@
9494
"remark-gfm": "^4.0.0",
9595
"reselect": "^5.1.0",
9696
"uuid": "^11.0.5",
97-
"viewport-mercator-project": "^7.0.4"
97+
"viewport-mercator-project": "^7.0.4",
98+
"virtua": "^0.39.3"
9899
},
99100
"devDependencies": {
100101
"@apidevtools/swagger-parser": "^10.1.1",

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

+27-24
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import cx from 'classnames';
44
import dayjs from 'dayjs';
55
import { useTranslation } from 'react-i18next';
66
import { useSelector } from 'react-redux';
7+
import { Virtualizer } from 'virtua';
78

89
import { MANAGE_TRAIN_SCHEDULE_TYPES } from 'applications/operationalStudies/consts';
910
import type { Conflict, InfraState, TrainScheduleResult } from 'common/api/osrdEditoastApi';
@@ -148,30 +149,32 @@ const Timetable = ({
148149
trainSchedules={trainSchedules}
149150
isInSelection={selectedTrainIds.length > 0}
150151
/>
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>
175178
<div
176179
className={cx('bottom-timetables-trains', {
177180
'empty-list': trainSchedulesWithDetails.length === 0,

0 commit comments

Comments
 (0)