Skip to content

Commit 5456f71

Browse files
committed
fixup! - adapt selection timetable for paced train
1 parent 372e4bb commit 5456f71

File tree

6 files changed

+43
-57
lines changed

6 files changed

+43
-57
lines changed

front/src/applications/operationalStudies/components/Scenario/ScenarioContent.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const ScenarioContent = ({
5353
MANAGE_TRAIN_SCHEDULE_TYPES.none
5454
);
5555
const [collapsedTimetable, setCollapsedTimetable] = useState(false);
56-
const [trainIdToEdit, setTrainIdToEdit] = useState<TimetableItemId>();
56+
const [itemIdToEdit, setItemIdToEdit] = useState<TimetableItemId>();
5757
const [isMacro, setIsMacro] = useState(false);
5858
const {
5959
trainScheduleSummaries,
@@ -151,8 +151,8 @@ const ScenarioContent = ({
151151
displayTrainScheduleManagement={displayTrainScheduleManagement}
152152
setDisplayTrainScheduleManagement={setDisplayTrainScheduleManagement}
153153
upsertTrainSchedules={upsertTrainSchedules}
154-
trainIdToEdit={trainIdToEdit}
155-
setTrainIdToEdit={setTrainIdToEdit}
154+
itemIdToEdit={itemIdToEdit}
155+
setItemIdToEdit={setItemIdToEdit}
156156
infraState={infra.state}
157157
dtoImport={dtoImport}
158158
/>
@@ -163,8 +163,8 @@ const ScenarioContent = ({
163163
conflicts={conflicts}
164164
upsertTrainSchedules={upsertTrainSchedules}
165165
removeTrains={removeTrains}
166-
setTrainIdToEdit={setTrainIdToEdit}
167-
trainIdToEdit={trainIdToEdit}
166+
setItemIdToEdit={setItemIdToEdit}
167+
itemIdToEdit={itemIdToEdit}
168168
trainSchedules={trainSchedules}
169169
trainSchedulesWithDetails={trainScheduleSummaries}
170170
dtoImport={dtoImport}

front/src/modules/trainschedule/components/ManageTrainSchedule/TimetableManageTrainSchedule.tsx

+7-7
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import useUpdateTrainSchedule from './hooks/useUpdateTrainSchedule';
1414

1515
type TimetableManageTrainScheduleProps = {
1616
displayTrainScheduleManagement: string;
17-
trainIdToEdit?: TimetableItemId;
17+
itemIdToEdit?: TimetableItemId;
1818
setDisplayTrainScheduleManagement: (type: string) => void;
1919
upsertTrainSchedules: (trainSchedules: TrainScheduleResultWithTrainId[]) => void;
2020
infraState?: InfraState;
21-
setTrainIdToEdit: (trainIdToEdit?: TimetableItemId) => void;
21+
setItemIdToEdit: (itemIdToEdit?: TimetableItemId) => void;
2222
dtoImport: () => void;
2323
};
2424

@@ -27,25 +27,25 @@ const TimetableManageTrainSchedule = ({
2727
setDisplayTrainScheduleManagement,
2828
upsertTrainSchedules,
2929
infraState,
30-
trainIdToEdit,
31-
setTrainIdToEdit,
30+
itemIdToEdit,
31+
setItemIdToEdit,
3232
dtoImport,
3333
}: TimetableManageTrainScheduleProps) => {
3434
const { t } = useTranslation('operationalStudies/manageTrainSchedule');
3535
const [isWorking, setIsWorking] = useState(false);
3636

3737
const leaveManageTrainSchedule = () => {
3838
setDisplayTrainScheduleManagement(MANAGE_TRAIN_SCHEDULE_TYPES.none);
39-
setTrainIdToEdit(undefined);
39+
setItemIdToEdit(undefined);
4040
};
4141

4242
const updateTrainSchedule = useUpdateTrainSchedule(
4343
setIsWorking,
4444
setDisplayTrainScheduleManagement,
4545
upsertTrainSchedules,
46-
setTrainIdToEdit,
46+
setItemIdToEdit,
4747
dtoImport,
48-
trainIdToEdit
48+
itemIdToEdit
4949
);
5050
return (
5151
<div className="scenario-timetable-managetrainschedule">

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

+4-16
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ import cx from 'classnames';
66
import dayjs from 'dayjs';
77
import { useTranslation } from 'react-i18next';
88

9-
import { MANAGE_TRAIN_SCHEDULE_TYPES } from 'applications/operationalStudies/consts';
10-
import { selectTrainToEdit } from 'reducers/osrdconf/operationalStudiesConf';
11-
import type { PacedTrainId, TimetableItemId } from 'reducers/osrdconf/types';
12-
import { useAppDispatch } from 'store';
9+
import type { PacedTrainId } from 'reducers/osrdconf/types';
1310
import { ms2min } from 'utils/timeManipulation';
1411

1512
import TimetableItemActions from '../TimetableItemActions';
@@ -18,36 +15,27 @@ import type { PacedTrainWithResult } from '../types';
1815
type PacedTrainItemProps = {
1916
isInSelection: boolean;
2017
handleSelectPacedTrain: (pacedTrainId: PacedTrainId) => void;
21-
setPacedTrainIdToEdit: (trainIdToEdit?: TimetableItemId) => void;
22-
setDisplayTrainScheduleManagement: (arg0: string) => void;
2318
pacedTrain: PacedTrainWithResult;
2419
isOnEdit: boolean;
2520
isProjectionPathUsed: boolean;
21+
selectPacedTrainToEdit: (pacedTrain: PacedTrainWithResult) => void;
2622
};
2723

2824
const PacedTrainItem = ({
2925
isInSelection,
3026
handleSelectPacedTrain,
31-
setPacedTrainIdToEdit,
32-
setDisplayTrainScheduleManagement,
3327
pacedTrain,
3428
isOnEdit,
3529
isProjectionPathUsed,
30+
selectPacedTrainToEdit,
3631
}: PacedTrainItemProps) => {
3732
const { t } = useTranslation(['operationalStudies/scenario']);
38-
const dispatch = useAppDispatch();
3933

4034
const [isOccurrencesListOpen, setIsOccurrencesListOpen] = useState(false);
4135

4236
const toggleOccurrencesList = () => setIsOccurrencesListOpen((open) => !open);
4337
const selectPathProjection = async () => {};
4438
const duplicatePacedTrain = async () => {};
45-
const editPacedTrain = () => {
46-
dispatch(selectTrainToEdit(pacedTrain));
47-
// TODO Paced train : Adapt this to handle paced trains in issue https://github.com/OpenRailAssociation/osrd/issues/10615
48-
setPacedTrainIdToEdit(pacedTrain.id);
49-
setDisplayTrainScheduleManagement(MANAGE_TRAIN_SCHEDULE_TYPES.edit);
50-
};
5139
const deletePacedTrain = async () => {};
5240

5341
const pacedTrainCadence = pacedTrain.paced.step;
@@ -123,7 +111,7 @@ const PacedTrainItem = ({
123111
<TimetableItemActions
124112
selectPathProjection={selectPathProjection}
125113
duplicateTimetableItem={duplicatePacedTrain}
126-
editTimetableItem={editPacedTrain}
114+
editTimetableItem={() => selectPacedTrainToEdit(pacedTrain)}
127115
deleteTimetableItem={deletePacedTrain}
128116
/>
129117
<div className="occurrences" />

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

+18-12
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { MANAGE_TRAIN_SCHEDULE_TYPES } from 'applications/operationalStudies/con
1010
import type { Conflict, InfraState } from 'common/api/osrdEditoastApi';
1111
import i18n from 'i18n';
1212
import ConflictsList from 'modules/conflict/components/ConflictsList';
13+
import { selectTrainToEdit } from 'reducers/osrdconf/operationalStudiesConf';
1314
import type {
1415
PacedTrainId,
1516
TimetableItemId,
@@ -40,9 +41,9 @@ type TimetableProps = {
4041
infraState: InfraState;
4142
conflicts?: Conflict[];
4243
upsertTrainSchedules: (trainSchedules: TrainScheduleResultWithTrainId[]) => void;
43-
setTrainIdToEdit: (trainId?: TimetableItemId) => void;
44+
setItemIdToEdit: (trainId?: TimetableItemId) => void;
4445
removeTrains: (trainIds: TimetableItemId[]) => void;
45-
trainIdToEdit?: TimetableItemId;
46+
itemIdToEdit?: TimetableItemId;
4647
trainSchedules?: TrainScheduleResultWithTrainId[];
4748
trainSchedulesWithDetails: TrainScheduleWithDetails[];
4849
dtoImport: () => void;
@@ -56,8 +57,8 @@ const Timetable = ({
5657
conflicts,
5758
upsertTrainSchedules,
5859
removeTrains,
59-
setTrainIdToEdit,
60-
trainIdToEdit,
60+
setItemIdToEdit,
61+
itemIdToEdit,
6162
trainSchedules = [],
6263
trainSchedulesWithDetails,
6364
dtoImport,
@@ -137,10 +138,17 @@ const Timetable = ({
137138
});
138139
}, [currentDepartureDates]);
139140

141+
const selectTimeTableItemToEdit = (itemToEdit: TimetableItemResult) => {
142+
dispatch(selectTrainToEdit(itemToEdit));
143+
// TODO Paced train : Adapt this to handle paced trains in issue https://github.com/OpenRailAssociation/osrd/issues/10615
144+
setItemIdToEdit(itemToEdit.id);
145+
setDisplayTrainScheduleManagement(MANAGE_TRAIN_SCHEDULE_TYPES.edit);
146+
};
147+
140148
// TODO PACED TRAIN : Remove this after adapting the code to handle paced trains in issue
141149
useEffect(() => {
142150
setTimetableItems(
143-
showPacedTrains
151+
showPacedTrains && trainSchedulesWithDetails.length > 0
144152
? [
145153
...trainSchedulesWithDetails,
146154
{
@@ -154,7 +162,7 @@ const Timetable = ({
154162
]
155163
: trainSchedulesWithDetails
156164
);
157-
}, [showPacedTrains]);
165+
}, [showPacedTrains, trainSchedulesWithDetails]);
158166

159167
return (
160168
<div className="scenario-timetable">
@@ -217,11 +225,10 @@ const Timetable = ({
217225
handleSelectTrain={handleSelectTimetableItem}
218226
train={timetableItem as TrainScheduleWithDetails}
219227
isSelected={infraState === 'CACHED' && selectedTrainId === timetableItem.id}
220-
isModified={timetableItem.id === trainIdToEdit}
221-
setDisplayTrainScheduleManagement={setDisplayTrainScheduleManagement}
228+
isModified={timetableItem.id === itemIdToEdit}
222229
upsertTrainSchedules={upsertTrainSchedules}
223-
setTrainIdToEdit={setTrainIdToEdit}
224230
removeTrains={removeAndUnselectTrains}
231+
selectTrainToEdit={selectTimeTableItemToEdit}
225232
projectionPathIsUsed={
226233
infraState === 'CACHED' && trainIdUsedForProjection === timetableItem.id
227234
}
@@ -231,10 +238,9 @@ const Timetable = ({
231238
<PacedTrainItem
232239
pacedTrain={timetableItem as PacedTrainWithResult}
233240
isInSelection={selectedTimetableItemIds.pacedTrainIds.includes(timetableItem.id)}
234-
setPacedTrainIdToEdit={setTrainIdToEdit}
235-
setDisplayTrainScheduleManagement={setDisplayTrainScheduleManagement}
241+
selectPacedTrainToEdit={selectTimeTableItemToEdit}
236242
handleSelectPacedTrain={handleSelectTimetableItem}
237-
isOnEdit={timetableItem.id === trainIdToEdit}
243+
isOnEdit={timetableItem.id === itemIdToEdit}
238244
isProjectionPathUsed={false}
239245
/>
240246
)}

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

+3-14
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import dayjs from 'dayjs';
77
import { omit } from 'lodash';
88
import { useTranslation } from 'react-i18next';
99

10-
import { MANAGE_TRAIN_SCHEDULE_TYPES } from 'applications/operationalStudies/consts';
1110
import { osrdEditoastApi } from 'common/api/osrdEditoastApi';
1211
import type { TrainScheduleBase } from 'common/api/osrdEditoastApi';
1312
import RollingStock2Img from 'modules/rollingStock/components/RollingStock2Img';
1413
import trainNameWithNum from 'modules/trainschedule/components/ManageTrainSchedule/helpers/trainNameHelper';
1514
import { setFailure, setSuccess } from 'reducers/main';
16-
import { selectTrainToEdit } from 'reducers/osrdconf/operationalStudiesConf';
1715
import type {
1816
TimetableItemId,
1917
TrainId,
@@ -38,12 +36,11 @@ type TimetableTrainCardProps = {
3836
isSelected: boolean;
3937
isModified?: boolean;
4038
handleSelectTrain: (trainId: TrainScheduleId) => void;
41-
setDisplayTrainScheduleManagement: (arg0: string) => void;
4239
upsertTrainSchedules: (trainSchedules: TrainScheduleResultWithTrainId[]) => void;
43-
setTrainIdToEdit: (trainIdToEdit?: TimetableItemId) => void;
4440
removeTrains: (trainIds: TimetableItemId[]) => void;
4541
projectionPathIsUsed: boolean;
4642
dtoImport: () => void;
43+
selectTrainToEdit: (train: TrainScheduleWithDetails) => void;
4744
};
4845

4946
const formatFullDate = (d: Date) => dayjs(d).format('D/MM/YYYY HH:mm:ss');
@@ -54,13 +51,12 @@ const TimetableTrainCard = ({
5451
train,
5552
isSelected,
5653
isModified,
57-
setDisplayTrainScheduleManagement,
5854
handleSelectTrain,
5955
upsertTrainSchedules,
60-
setTrainIdToEdit,
6156
removeTrains,
6257
projectionPathIsUsed,
6358
dtoImport,
59+
selectTrainToEdit,
6460
}: TimetableTrainCardProps) => {
6561
const { t } = useTranslation(['operationalStudies/scenario']);
6662
const dispatch = useAppDispatch();
@@ -74,13 +70,6 @@ const TimetableTrainCard = ({
7470
dispatch(updateSelectedTrainId(trainId));
7571
};
7672

77-
const editTrainSchedule = () => {
78-
dispatch(selectTrainToEdit(train));
79-
// TODO Paced train : Adapt this to handle paced trains in issue https://github.com/OpenRailAssociation/osrd/issues/10615
80-
setTrainIdToEdit(train.id);
81-
setDisplayTrainScheduleManagement(MANAGE_TRAIN_SCHEDULE_TYPES.edit);
82-
};
83-
8473
const deleteTrain = async () => {
8574
if (isSelected) {
8675
// we need to set selectedTrainId to undefined, otherwise just after the delete,
@@ -282,7 +271,7 @@ const TimetableTrainCard = ({
282271
<TimetableItemActions
283272
selectPathProjection={selectPathProjection}
284273
duplicateTimetableItem={duplicateTrain}
285-
editTimetableItem={editTrainSchedule}
274+
editTimetableItem={() => selectTrainToEdit(train)}
286275
deleteTimetableItem={deleteTrain}
287276
/>
288277
</div>

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

+6-3
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@ export type ScheduledPointsHonoredFilter = 'both' | 'honored' | 'notHonored';
1414

1515
type SimulationSummaryResultSuccess = Extract<SimulationSummaryResult, { status: 'success' }>;
1616

17-
export type TrainScheduleWithDetails = Omit<
17+
export type TimetableItemWithDetails = Omit<
1818
TrainScheduleResult,
1919
'id' | 'train_name' | 'rolling_stock_name' | 'timetable_id' | 'start_time'
2020
> & {
21-
id: TrainScheduleId;
2221
trainName: string;
2322
startTime: Date;
2423
arrivalTime: Date | null;
@@ -45,7 +44,11 @@ export type InvalidReason =
4544
| PathfindingNotFound['error_type']
4645
| PathfindingInputError['error_type'];
4746

48-
export type PacedTrainWithResult = Omit<TrainScheduleWithDetails, 'id'> & {
47+
export type TrainScheduleWithDetails = TimetableItemWithDetails & {
48+
id: TrainScheduleId;
49+
};
50+
51+
export type PacedTrainWithResult = TimetableItemWithDetails & {
4952
id: PacedTrainId;
5053
paced: {
5154
duration: Duration;

0 commit comments

Comments
 (0)