Skip to content

Commit 2e11158

Browse files
committed
front: update stdcm arrival dates when searchDatetimeWindow changes
Signed-off-by: Clara Ni <[email protected]>
1 parent cffcb02 commit 2e11158

File tree

3 files changed

+40
-32
lines changed

3 files changed

+40
-32
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

+38-17
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
@@ -134,28 +135,48 @@ export const stdcmConfSlice = createSlice({
134135
},
135136
updateStdcmEnvironment(
136137
state: Draft<OsrdStdcmConfState>,
137-
action: PayloadAction<
138-
Pick<
139-
OsrdStdcmConfState,
140-
| 'infraID'
141-
| 'timetableID'
142-
| 'electricalProfileSetId'
143-
| 'workScheduleGroupId'
144-
| 'temporarySpeedLimitGroupId'
145-
| 'searchDatetimeWindow'
146-
>
147-
>
138+
action: PayloadAction<{
139+
infraID: number;
140+
timetableID: number;
141+
searchDatetimeWindow?: {
142+
begin: Date;
143+
end: Date;
144+
};
145+
electricalProfileSetId?: number;
146+
temporarySpeedLimitGroupId?: number;
147+
workScheduleGroupId?: number;
148+
}>
148149
) {
150+
const { searchDatetimeWindow } = action.payload;
149151
state.infraID = action.payload.infraID;
150152
state.timetableID = action.payload.timetableID;
151153
state.electricalProfileSetId = action.payload.electricalProfileSetId;
152-
state.searchDatetimeWindow = action.payload.searchDatetimeWindow;
153-
if (action.payload.workScheduleGroupId) {
154-
state.workScheduleGroupId = action.payload.workScheduleGroupId;
155-
}
156-
if (action.payload.temporarySpeedLimitGroupId) {
157-
state.temporarySpeedLimitGroupId = action.payload.temporarySpeedLimitGroupId;
154+
state.searchDatetimeWindow = searchDatetimeWindow;
155+
state.workScheduleGroupId = action.payload.workScheduleGroupId;
156+
state.temporarySpeedLimitGroupId = action.payload.temporarySpeedLimitGroupId;
157+
158+
// check that the arrival dates are in the search time window
159+
const origin = state.stdcmPathSteps.at(0) as Extract<StdcmPathStep, { isVia: false }>;
160+
const destination = state.stdcmPathSteps.at(-1) as Extract<StdcmPathStep, { isVia: false }>;
161+
let newOrigin = origin;
162+
let newDestination = destination;
163+
164+
if (searchDatetimeWindow) {
165+
if (
166+
!origin.arrival ||
167+
!isArrivalDateInSearchTimeWindow(origin.arrival, searchDatetimeWindow)
168+
) {
169+
newOrigin = { ...origin, arrival: searchDatetimeWindow.begin };
170+
}
171+
if (
172+
!destination.arrival ||
173+
!isArrivalDateInSearchTimeWindow(destination.arrival, searchDatetimeWindow)
174+
) {
175+
newDestination = { ...destination, arrival: searchDatetimeWindow.begin };
176+
}
158177
}
178+
179+
state.stdcmPathSteps = [newOrigin, ...state.stdcmPathSteps.slice(1, -1), newDestination];
159180
},
160181
updateStdcmPathSteps(
161182
state: Draft<OsrdStdcmConfState>,

front/src/reducers/osrdconf/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ export type StdcmPathStep = {
9797
| {
9898
isVia: false;
9999
arrivalType: ArrivalTimeTypes;
100+
// TODO: make arrival non nullable (/!\ store migration)
100101
arrival?: Date;
101102
tolerances: { before: number; after: number };
102103
}

0 commit comments

Comments
 (0)