Skip to content

Commit 20d51e7

Browse files
committed
front: update stdcm arrival dates when searchDatetimeWindow changes
Signed-off-by: Clara Ni <[email protected]>
1 parent 9b20b9f commit 20d51e7

File tree

3 files changed

+31
-20
lines changed

3 files changed

+31
-20
lines changed

front/src/applications/stdcm/components/StdcmForm/StdcmOpSchedule.tsx

+1-15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useMemo } from 'react';
1+
import { useMemo } from 'react';
22

33
import { DatePicker, Select, TimePicker, TolerancePicker } from '@osrd-project/ui-core';
44
import { useTranslation } from 'react-i18next';
@@ -107,20 +107,6 @@ const StdcmOpSchedule = ({
107107
dispatch(updateStdcmPathStep({ id: pathStep.id, updates: { arrivalType } }));
108108
};
109109

110-
useEffect(() => {
111-
if (
112-
(!isArrivalDateInSearchTimeWindow(arrivalDate, searchDatetimeWindow) ||
113-
!opTimingData?.arrivalDate) &&
114-
pathStep.arrivalType === 'preciseTime'
115-
) {
116-
onArrivalChange({
117-
date: defaultDate(searchDatetimeWindow?.begin),
118-
hours: arrivalTimeHours || 0,
119-
minutes: arrivalTimeMinutes || 0,
120-
});
121-
}
122-
}, [searchDatetimeWindow, pathStep.arrivalType]);
123-
124110
return (
125111
<>
126112
<div className="arrival-type-select">

front/src/reducers/osrdconf/stdcmConf/index.ts

+29-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
import { defaultCommonConf, buildCommonConfReducers } from 'reducers/osrdconf/osrdConfCommon';
1212
import type { OsrdStdcmConfState, StdcmPathStep } from 'reducers/osrdconf/types';
1313
import { addElementAtIndex } from 'utils/array';
14+
import { isArrivalDateInSearchTimeWindow } from 'utils/date';
1415
import type { ArrayElement } from 'utils/types';
1516

1617
const DEFAULT_TOLERANCE = 1800; // 30min
@@ -127,11 +128,34 @@ export const stdcmConfSlice = createSlice({
127128
state.timetableID = action.payload.timetableID;
128129
state.electricalProfileSetId = action.payload.electricalProfileSetId;
129130
state.searchDatetimeWindow = action.payload.searchDatetimeWindow;
130-
if (action.payload.workScheduleGroupId) {
131-
state.workScheduleGroupId = action.payload.workScheduleGroupId;
132-
}
133-
if (action.payload.temporarySpeedLimitGroupId) {
134-
state.temporarySpeedLimitGroupId = action.payload.temporarySpeedLimitGroupId;
131+
state.workScheduleGroupId = action.payload.workScheduleGroupId;
132+
state.temporarySpeedLimitGroupId = action.payload.temporarySpeedLimitGroupId;
133+
134+
// check that the arrival dates are in the search time window
135+
const { searchDatetimeWindow } = action.payload;
136+
if (searchDatetimeWindow) {
137+
const origin = state.stdcmPathSteps.at(0)! as Extract<StdcmPathStep, { isVia: false }>;
138+
const destination = state.stdcmPathSteps.at(-1)! as Extract<
139+
StdcmPathStep,
140+
{ isVia: false }
141+
>;
142+
let newOrigin = origin;
143+
let newDestination = destination;
144+
145+
if (
146+
!origin.arrival ||
147+
!isArrivalDateInSearchTimeWindow(origin.arrival, searchDatetimeWindow)
148+
) {
149+
newOrigin = { ...origin, arrival: searchDatetimeWindow.begin };
150+
}
151+
if (
152+
!destination.arrival ||
153+
!isArrivalDateInSearchTimeWindow(destination.arrival, searchDatetimeWindow)
154+
) {
155+
newDestination = { ...destination, arrival: searchDatetimeWindow.end };
156+
}
157+
158+
state.stdcmPathSteps = [newOrigin, ...state.stdcmPathSteps.slice(1, -1), newDestination];
135159
}
136160
},
137161
updateStdcmPathSteps(

front/src/reducers/osrdconf/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ export type StdcmPathStep = {
102102
| {
103103
isVia: false;
104104
arrivalType: ArrivalTimeTypes;
105+
// TODO: make arrival non nullable (/!\ store migration)
105106
arrival?: Date;
106107
tolerances?: { before: number; after: number };
107108
}

0 commit comments

Comments
 (0)