diff --git a/front/src/applications/operationalStudies/consts.ts b/front/src/applications/operationalStudies/consts.ts index 3fce5376281..092c41abc68 100644 --- a/front/src/applications/operationalStudies/consts.ts +++ b/front/src/applications/operationalStudies/consts.ts @@ -170,7 +170,6 @@ export interface OsrdConfState { infraID?: number; switchTypes?: SwitchType[]; pathfindingID?: number; - shouldRunPathfinding: boolean; timetableID?: number; rollingStockID?: number; speedLimitByTag?: string; diff --git a/front/src/applications/operationalStudies/views/ManageTrainSchedule.tsx b/front/src/applications/operationalStudies/views/ManageTrainSchedule.tsx index ac186421647..e6e2fc784b8 100644 --- a/front/src/applications/operationalStudies/views/ManageTrainSchedule.tsx +++ b/front/src/applications/operationalStudies/views/ManageTrainSchedule.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; @@ -13,10 +13,8 @@ import Allowances from 'modules/trainschedule/components/ManageTrainSchedule/All import { getPathfindingID, getRollingStockID, - getShouldRunPathfinding, getTrainScheduleIDsToModify, } from 'reducers/osrdconf/selectors'; -import { updateShouldRunPathfinding } from 'reducers/osrdconf'; import { RollingStock2Img, RollingStockSelector, @@ -32,8 +30,6 @@ import { isElectric } from 'modules/rollingStock/helpers/utils'; export default function ManageTrainSchedule() { const dispatch = useDispatch(); - const shouldRunPathfinding = useSelector(getShouldRunPathfinding); - const [mustUpdatePathfinding, setMustUpdatePathfinding] = useState(false); const { t } = useTranslation(['operationalStudies/manageTrainSchedule']); const rollingStockID = useSelector(getRollingStockID); const pathFindingID = useSelector(getPathfindingID); @@ -110,7 +106,7 @@ export default function ManageTrainSchedule() { content: (
- +
@@ -170,17 +166,6 @@ export default function ManageTrainSchedule() { }); }, [trainScheduleIDsToModify]); - useEffect(() => { - setMustUpdatePathfinding(false); - dispatch(updateShouldRunPathfinding(false)); - }, []); - - useEffect(() => { - if (shouldRunPathfinding && mustUpdatePathfinding === false) { - setMustUpdatePathfinding(true); - } - }, [shouldRunPathfinding]); - return ( <>
diff --git a/front/src/common/Pathfinding/Pathfinding.tsx b/front/src/common/Pathfinding/Pathfinding.tsx index 3798e2f28ea..28c4561d50a 100644 --- a/front/src/common/Pathfinding/Pathfinding.tsx +++ b/front/src/common/Pathfinding/Pathfinding.tsx @@ -65,6 +65,7 @@ interface Action { destination?: Partial; rollingStockID?: number; vias?: Partial[]; + pathfindingId?: number; }; } @@ -122,7 +123,11 @@ export function reducer(state: PathfindingState, action: Action): PathfindingSta case 'PATHFINDING_PARAM_CHANGED': case 'VIAS_CHANGED': case 'INFRA_CHANGED': { - if (!action.params || state.running) { + if ( + !action.params || + state.running || + (action.type === 'INFRA_CHANGED' && action.params.pathfindingId) + ) { return state; } const { origin, destination, rollingStockID } = action.params; @@ -170,7 +175,6 @@ function init({ } interface PathfindingProps { - mustUpdate?: boolean; zoomToFeature: (lngLat: Position, id?: undefined, source?: undefined) => void; } @@ -257,7 +261,7 @@ export function getPathfindingQuery({ return null; } -function Pathfinding({ mustUpdate = true, zoomToFeature }: PathfindingProps) { +function Pathfinding({ zoomToFeature }: PathfindingProps) { const { t } = useTranslation(['operationalStudies/manageTrainSchedule']); const [pathfindingRequest, setPathfindingRequest] = useState>(); @@ -281,8 +285,12 @@ function Pathfinding({ mustUpdate = true, zoomToFeature }: PathfindingProps) { const [isInfraLoaded, setIsInfraLoaded] = useState(false); const [reloadCount, setReloadCount] = useState(1); const [isInfraError, setIsInfraError] = useState(false); - const [postPathfinding] = osrdEditoastApi.usePostPathfindingMutation(); - const { data: infra } = osrdEditoastApi.useGetInfraByIdQuery( + + const [isPathfindingInitialized, setIsPathfindingInitialized] = useState(false); + + const [postPathfinding] = osrdEditoastApi.endpoints.postPathfinding.useMutation(); + + const { data: infra } = osrdEditoastApi.endpoints.getInfraById.useQuery( { id: infraID as number }, { refetchOnMountOrArgChange: true, @@ -323,6 +331,7 @@ function Pathfinding({ mustUpdate = true, zoomToFeature }: PathfindingProps) { origin, destination, rollingStockID, + pathfindingId: pathfindingID, }, }); break; @@ -426,7 +435,7 @@ function Pathfinding({ mustUpdate = true, zoomToFeature }: PathfindingProps) { }, []); useEffect(() => { - if (mustUpdate) { + if (isPathfindingInitialized) { pathfindingDispatch({ type: 'VIAS_CHANGED', params: { @@ -437,7 +446,7 @@ function Pathfinding({ mustUpdate = true, zoomToFeature }: PathfindingProps) { }, }); } - }, [mustUpdate, vias]); + }, [vias]); useEffect(() => { if (isInfraError) { @@ -453,7 +462,7 @@ function Pathfinding({ mustUpdate = true, zoomToFeature }: PathfindingProps) { }, [pathfindingState.mustBeLaunched, infra]); useEffect(() => { - if (mustUpdate) { + if (isPathfindingInitialized) { pathfindingDispatch({ type: 'PATHFINDING_PARAM_CHANGED', params: { @@ -463,7 +472,7 @@ function Pathfinding({ mustUpdate = true, zoomToFeature }: PathfindingProps) { }, }); } - }, [mustUpdate, origin, destination, rollingStockID]); + }, [origin, destination, rollingStockID]); const pathDetailsToggleButton = (