@@ -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
@@ -127,11 +128,34 @@ export const stdcmConfSlice = createSlice({
127
128
state . timetableID = action . payload . timetableID ;
128
129
state . electricalProfileSetId = action . payload . electricalProfileSetId ;
129
130
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 ] ;
135
159
}
136
160
} ,
137
161
updateStdcmPathSteps (
0 commit comments