Skip to content

Commit 39e138b

Browse files
committed
front: fix allowances do not reset when changing the path
1 parent a24e487 commit 39e138b

File tree

6 files changed

+35
-9
lines changed

6 files changed

+35
-9
lines changed

front/public/locales/en/operationalStudies/manageTrainSchedule.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@
116116
"warningMessages": {
117117
"electrification": "Electrification",
118118
"powerRestrictionInvalidCombination": "{{powerRestrictionCode}} is incompatible with electrification {{electrification}} of the path between {{begin}}m and {{end}}m",
119-
"missingPowerRestriction": "Missing power restriction between {{begin}}m and {{end}}m. "
119+
"missingPowerRestriction": "Missing power restriction between {{begin}}m and {{end}}m.",
120+
"pathfindingChange": "Pathfinding changed",
121+
"marginsAndPowerRestrictionsReset": "Margins and power restrictions have been reset."
120122
}
121123
}

front/public/locales/fr/operationalStudies/manageTrainSchedule.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@
116116
"warningMessages": {
117117
"electrification": "Électrification",
118118
"powerRestrictionInvalidCombination": "Code {{powerRestrictionCode}} incompatible avec l'électrification à {{electrification}} de l'itinéraire entre {{begin}}m et {{end}}m. ",
119-
"missingPowerRestriction": "Restriction de puissance manquante entre {{begin}}m et {{end}}m. "
119+
"missingPowerRestriction": "Restriction de puissance manquante entre {{begin}}m et {{end}}m.",
120+
"pathfindingChange": "Changement de chemin",
121+
"marginsAndPowerRestrictionsReset": "Les marges et les restrictions de puissance ont été réinitialisées."
120122
}
121123
}

front/src/common/Pathfinding/Pathfinding.tsx

+27-5
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ import type { PathResponse, PathfindingRequest, PathfindingStep } from 'common/a
1414
import { osrdEditoastApi } from 'common/api/osrdEditoastApi';
1515
import { Spinner } from 'common/Loaders';
1616
import { useOsrdConfActions, useOsrdConfSelectors } from 'common/osrdContext';
17-
import { setFailure } from 'reducers/main';
17+
import { setFailure, setWarning } from 'reducers/main';
1818
import { useAppDispatch } from 'store';
19+
import { isEmptyArray } from 'utils/array';
1920
import { castErrorToFailure } from 'utils/error';
2021
import { conditionalStringConcat, formatKmValue } from 'utils/strings';
2122
import type { ArrayElement } from 'utils/types';
@@ -245,7 +246,7 @@ export function getPathfindingQuery({
245246
return null;
246247
}
247248

248-
function Pathfinding({ zoomToFeature, path }: PathfindingProps) {
249+
const Pathfinding = ({ zoomToFeature, path }: PathfindingProps) => {
249250
const { t } = useTranslation(['operationalStudies/manageTrainSchedule']);
250251
const [pathfindingRequest, setPathfindingRequest] =
251252
useState<ReturnType<typeof postPathfinding>>();
@@ -258,6 +259,8 @@ function Pathfinding({ zoomToFeature, path }: PathfindingProps) {
258259
getRollingStockID,
259260
getPathfindingID,
260261
getGeojson,
262+
getPowerRestrictionRanges,
263+
getAllowances,
261264
} = useOsrdConfSelectors();
262265
const infraID = useSelector(getInfraID, isEqual);
263266
const origin = useSelector(getOrigin, isEqual);
@@ -266,6 +269,8 @@ function Pathfinding({ zoomToFeature, path }: PathfindingProps) {
266269
const rollingStockID = useSelector(getRollingStockID, isEqual);
267270
const pathfindingID = useSelector(getPathfindingID, isEqual);
268271
const geojson = useSelector(getGeojson, isEqual);
272+
const powerRestrictions = useSelector(getPowerRestrictionRanges, isEqual);
273+
const allowances = useSelector(getAllowances, isEqual);
269274
const initializerArgs = {
270275
pathfindingID,
271276
geojson,
@@ -291,8 +296,14 @@ function Pathfinding({ zoomToFeature, path }: PathfindingProps) {
291296
);
292297
const [reloadInfra] = osrdEditoastApi.usePostInfraByIdLoadMutation();
293298

294-
const { replaceVias, updateItinerary, updatePathfindingID, updateSuggeredVias } =
295-
useOsrdConfActions();
299+
const {
300+
replaceVias,
301+
updateItinerary,
302+
updatePathfindingID,
303+
updateSuggeredVias,
304+
updatePowerRestrictionRanges,
305+
updateAllowances,
306+
} = useOsrdConfActions();
296307

297308
useEffect(() => {
298309
if (reloadCount <= 5 && infra && infra.state === 'TRANSIENT_ERROR') {
@@ -415,6 +426,17 @@ function Pathfinding({ zoomToFeature, path }: PathfindingProps) {
415426
dispatch(updatePathfindingID(itineraryCreated.id));
416427
if (zoom) zoomToFeature(bbox(itineraryCreated.geographic));
417428
pathfindingDispatch({ type: 'PATHFINDING_FINISHED' });
429+
430+
if (!isEmptyArray(powerRestrictions) || !isEmptyArray(allowances)) {
431+
dispatch(updatePowerRestrictionRanges([]));
432+
dispatch(updateAllowances([]));
433+
dispatch(
434+
setWarning({
435+
title: t('warningMessages.pathfindingChange'),
436+
text: t('warningMessages.marginsAndPowerRestrictionsReset'),
437+
})
438+
);
439+
}
418440
})
419441
.catch((e) => {
420442
if (e.error) {
@@ -571,6 +593,6 @@ function Pathfinding({ zoomToFeature, path }: PathfindingProps) {
571593
)}
572594
</div>
573595
);
574-
}
596+
};
575597

576598
export default Pathfinding;

front/src/reducers/osrdconf/osrdConfCommon/__tests__/utils.ts

-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ const testCommonConfReducers = (slice: OperationalStudiesConfSlice | StdcmConfSl
146146
defaultStore.dispatch(slice.actions.updatePathfindingID(newPathfindingID));
147147
const state = defaultStore.getState()[slice.name];
148148
expect(state.pathfindingID).toBe(newPathfindingID);
149-
expect(state.powerRestrictionRanges).toStrictEqual([]);
150149
});
151150

152151
it('should handle updateTimetableID', () => {

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

-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ export function buildCommonConfReducers<S extends OsrdConfState>(): CommonConfRe
137137
},
138138
updatePathfindingID(state: Draft<S>, action: PayloadAction<S['pathfindingID']>) {
139139
state.pathfindingID = action.payload;
140-
state.powerRestrictionRanges = [];
141140
},
142141
updateTimetableID(state: Draft<S>, action: PayloadAction<S['timetableID']>) {
143142
state.timetableID = action.payload;

front/src/utils/array.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
export const isFirstOrLastElement = <T>(array: T[], element: T) =>
22
array[0] === element || array[array.length - 1] === element;
33

4+
export const isEmptyArray = <T>(array: T[]) => array.length;
5+
46
/**
57
* Take an array of strings, sort it and split it in two : one array of letter starting strings and one with digit or special characters starting strings.
68
*/

0 commit comments

Comments
 (0)