@@ -11,6 +11,7 @@ import {
11
11
import { defaultCommonConf , buildCommonConfReducers } from 'reducers/osrdconf/osrdConfCommon' ;
12
12
import type { OsrdStdcmConfState , StdcmPathStep } from 'reducers/osrdconf/types' ;
13
13
import { addElementAtIndex } from 'utils/array' ;
14
+ import { isArrivalDateInSearchTimeWindow } from 'utils/date' ;
14
15
import type { ArrayElement } from 'utils/types' ;
15
16
16
17
const DEFAULT_TOLERANCE = 1800 ; // 30min
@@ -150,11 +151,34 @@ export const stdcmConfSlice = createSlice({
150
151
state . timetableID = action . payload . timetableID ;
151
152
state . electricalProfileSetId = action . payload . electricalProfileSetId ;
152
153
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 . workScheduleGroupId = action . payload . workScheduleGroupId ;
155
+ state . temporarySpeedLimitGroupId = action . payload . temporarySpeedLimitGroupId ;
156
+
157
+ // check that the arrival dates are in the search time window
158
+ const { searchDatetimeWindow } = action . payload ;
159
+ if ( searchDatetimeWindow ) {
160
+ const origin = state . stdcmPathSteps . at ( 0 ) ! as Extract < StdcmPathStep , { isVia : false } > ;
161
+ const destination = state . stdcmPathSteps . at ( - 1 ) ! as Extract <
162
+ StdcmPathStep ,
163
+ { isVia : false }
164
+ > ;
165
+ let newOrigin = origin ;
166
+ let newDestination = destination ;
167
+
168
+ if (
169
+ ! origin . arrival ||
170
+ ! isArrivalDateInSearchTimeWindow ( origin . arrival , searchDatetimeWindow )
171
+ ) {
172
+ newOrigin = { ...origin , arrival : searchDatetimeWindow . begin } ;
173
+ }
174
+ if (
175
+ ! destination . arrival ||
176
+ ! isArrivalDateInSearchTimeWindow ( destination . arrival , searchDatetimeWindow )
177
+ ) {
178
+ newDestination = { ...destination , arrival : searchDatetimeWindow . end } ;
179
+ }
180
+
181
+ state . stdcmPathSteps = [ newOrigin , ...state . stdcmPathSteps . slice ( 1 , - 1 ) , newDestination ] ;
158
182
}
159
183
} ,
160
184
updateStdcmPathSteps (
0 commit comments