From b9a7bc0ac1d67c63ac04b9c768b67b9df83b0338 Mon Sep 17 00:00:00 2001 From: Alexandre Damiron Date: Fri, 18 Nov 2022 17:00:24 +0100 Subject: [PATCH 1/5] move opeation to reducer --- .../Simulation/SpaceTimeChart/createTrain.ts | 2 +- .../osrd/views/OSRDSimulation/OSRDSimulation.tsx | 7 +++++-- .../applications/stdcm/views/OSRDStdcmResults.js | 5 ++++- .../stdcm/views/StdcmRequestModal.js | 2 +- front/src/reducers/osrdsimulation/index.ts | 16 +++++++++++++--- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/front/src/applications/osrd/components/Simulation/SpaceTimeChart/createTrain.ts b/front/src/applications/osrd/components/Simulation/SpaceTimeChart/createTrain.ts index 875e33f1fe0..52af8797671 100644 --- a/front/src/applications/osrd/components/Simulation/SpaceTimeChart/createTrain.ts +++ b/front/src/applications/osrd/components/Simulation/SpaceTimeChart/createTrain.ts @@ -63,7 +63,7 @@ export default function createTrain( eco_speed: formatStepsWithTime(train.eco.speeds), }; } - if (train.eco && train.eco.error) { + if (train.eco && train.eco.error && dispatch && t) { // Tbe removed, useless dispatch( setFailure({ diff --git a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx index 78d23e553d0..df47a034915 100644 --- a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx +++ b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx @@ -16,6 +16,7 @@ import { } from 'reducers/osrdsimulation'; import { useDispatch, useSelector } from 'react-redux'; + import Allowances from 'applications/osrd/views/OSRDSimulation/Allowances'; import ButtonFullscreen from 'common/ButtonFullscreen'; import CenterLoader from 'common/CenterLoader/CenterLoader'; @@ -31,7 +32,7 @@ import TimeButtons from 'applications/osrd/views/OSRDSimulation/TimeButtons'; import TimeLine from 'applications/osrd/components/TimeLine/TimeLine'; import TrainDetails from 'applications/osrd/views/OSRDSimulation/TrainDetails'; import TrainList from 'applications/osrd/views/OSRDSimulation/TrainList'; -import createTrain from 'applications/osrd/components/Simulation/SpaceTimeChart/createTrain'; + import { trainscheduleURI } from 'applications/osrd/components/Simulation/consts'; import { get } from 'common/requests'; import { sec2time } from 'utils/timeManipulation'; @@ -40,7 +41,7 @@ import { setFailure } from 'reducers/main'; import { updateViewport, Viewport } from 'reducers/map'; import { useTranslation } from 'react-i18next'; -export const KEY_VALUES_FOR_CONSOLIDATED_SIMULATION = ['time', 'position']; + export const timetableURI = '/timetable/'; const MAP_MIN_HEIGHT = 450; @@ -190,6 +191,7 @@ function OSRDSimulation() { // With this hook we update and store // the consolidatedSimuation (simualtion stucture for the selected train) + /* useEffect(() => { const consolidatedSimulation = createTrain( dispatch, @@ -200,6 +202,7 @@ function OSRDSimulation() { // Store it to allow time->position logic to be hosted by redux dispatch(updateConsolidatedSimulation(consolidatedSimulation)); }, [simulation]); + */ const waitingLoader = isEmpty ? (

{t('simulation:noData')}

diff --git a/front/src/applications/stdcm/views/OSRDStdcmResults.js b/front/src/applications/stdcm/views/OSRDStdcmResults.js index 4d4f986368e..2d394548001 100644 --- a/front/src/applications/stdcm/views/OSRDStdcmResults.js +++ b/front/src/applications/stdcm/views/OSRDStdcmResults.js @@ -1,4 +1,7 @@ -import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/views/OSRDSimulation/OSRDSimulation'; +import 'applications/osrd/views/OSRDSimulation/OSRDSimulation.scss'; +import 'applications/osrd/views/OSRDConfig/OSRDConfig.scss'; + +import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/components/Simulation/consts'; import React, { useEffect } from 'react'; import { diff --git a/front/src/applications/stdcm/views/StdcmRequestModal.js b/front/src/applications/stdcm/views/StdcmRequestModal.js index b4c2ce88cd4..acc8ba6df7a 100644 --- a/front/src/applications/stdcm/views/StdcmRequestModal.js +++ b/front/src/applications/stdcm/views/StdcmRequestModal.js @@ -11,7 +11,7 @@ import { } from 'reducers/osrdsimulation'; import { useDispatch, useSelector } from 'react-redux'; -import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/views/OSRDSimulation/OSRDSimulation'; +import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/components/Simulation/consts'; // Generic components import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; diff --git a/front/src/reducers/osrdsimulation/index.ts b/front/src/reducers/osrdsimulation/index.ts index d0f005428c4..604a2684eba 100644 --- a/front/src/reducers/osrdsimulation/index.ts +++ b/front/src/reducers/osrdsimulation/index.ts @@ -4,8 +4,10 @@ import produce from 'immer'; import { LIST_VALUES_NAME_SPACE_TIME, SIGNAL_BASE_DEFAULT, + KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from '../../applications/osrd/components/Simulation/consts'; import undoableSimulation, { REDO_SIMULATION, UNDO_SIMULATION } from './simulation'; +import createTrain from 'applications/osrd/components/Simulation/SpaceTimeChart/createTrain'; import { interpolateOnTime, @@ -289,14 +291,20 @@ export default function reducer(inputState: OsrdSimulationState | undefined, act draft.departureArrivalTimes = action.departureArrivalTimes; break; case UPDATE_SIMULATION: - draft.simulation = undoableSimulation(state.simulation, action); - draft.departureArrivalTimes = makeDepartureArrivalTimes(draft.simulation.present, 0); - break; case UNDO_SIMULATION: case REDO_SIMULATION: // get only the present, thanks draft.simulation = undoableSimulation(state.simulation, action); draft.departureArrivalTimes = makeDepartureArrivalTimes(draft.simulation.present, 0); + const consolidatedSimulation = createTrain( + undefined, + KEY_VALUES_FOR_CONSOLIDATED_SIMULATION, + draft.simulation.present.trains, + undefined + ); + + draft.consolidatedSimulation = consolidatedSimulation + break; case UPDATE_SPEEDSPACE_SETTINGS: draft.speedSpaceSettings = action.speedSpaceSettings; @@ -330,6 +338,8 @@ export default function reducer(inputState: OsrdSimulationState | undefined, act draft.positionValues = positionsValues; break; } + default: + break; } }); } From 7480e713e09c6e10e84b7a6fe8f0133eb2bf83b5 Mon Sep 17 00:00:00 2001 From: Alexandre Damiron Date: Tue, 22 Nov 2022 14:22:42 +0100 Subject: [PATCH 2/5] correct key_value export --- front/src/applications/osrd/components/Simulation/consts.js | 1 + 1 file changed, 1 insertion(+) diff --git a/front/src/applications/osrd/components/Simulation/consts.js b/front/src/applications/osrd/components/Simulation/consts.js index c5812277c51..554f82e45c5 100644 --- a/front/src/applications/osrd/components/Simulation/consts.js +++ b/front/src/applications/osrd/components/Simulation/consts.js @@ -12,6 +12,7 @@ export const LIST_VALUES_NAME_SPACE_TIME = [ ]; export const LIST_VALUES_NAME_SPEED_SPACE = ['speed', 'margins_speed', 'eco_speed']; export const LIST_VALUES_NAME_SPACE_CURVES_SLOPES = ['slopesCurve']; +export const KEY_VALUES_FOR_CONSOLIDATED_SIMULATION = ['time', 'position']; // Signal Base is the Signaling system chosen for results display From fa8a21ec2e909d5e5ba37c2541991c2056fc3a1a Mon Sep 17 00:00:00 2001 From: alexandredamiron Date: Mon, 21 Nov 2022 18:32:24 +0100 Subject: [PATCH 3/5] limitSimulationTrainSelector --- front/src/applications/osrd/Home.js | 12 ++++++++---- .../views/OSRDSimulation/OSRDSimulation.tsx | 15 ++++++++------- front/src/reducers/osrdsimulation/index.ts | 17 +++++++++++------ 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/front/src/applications/osrd/Home.js b/front/src/applications/osrd/Home.js index 34fe3a63715..3663711f738 100644 --- a/front/src/applications/osrd/Home.js +++ b/front/src/applications/osrd/Home.js @@ -19,11 +19,15 @@ import AboutOSRD from './About'; class HomeOSRD extends React.Component { static propTypes = { t: PropTypes.func.isRequired, - osrdsimulation: PropTypes.object.isRequired, + redirectToGraph: PropTypes.bool.isRequired, }; + static defaultProps = { + redirectToGraph: false + } + render() { - const { t, osrdsimulation } = this.props; + const { t, redirectToGraph } = this.props; return ( <> } @@ -73,7 +77,7 @@ class HomeOSRD extends React.Component { } const mapStateToProps = (state) => ({ - osrdsimulation: state.osrdsimulation, + redirectToGraph: state.osrdsimulation.redirectToGraph, }); export default connect(mapStateToProps)(withTranslation()(HomeOSRD)); diff --git a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx index df47a034915..65386783cc0 100644 --- a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx +++ b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx @@ -84,8 +84,9 @@ function OSRDSimulation() { departureArrivalTimes, selectedTrain, stickyBar, + displaySimulation } = useSelector((state: RootState) => state.osrdsimulation); - const simulation = useSelector((state: RootState) => state.osrdsimulation.simulation.present); + //const simulation = useSelector((state: RootState) => state.osrdsimulation.simulation.present); const dispatch = useDispatch(); /** @@ -93,7 +94,7 @@ function OSRDSimulation() { */ const getTimetable = async () => { try { - if (!simulation.trains || !simulation.trains[selectedTrain]) { + if (displaySimulation) { dispatch(updateSelectedTrain(0)); } const timetable = await get(`${timetableURI}${timetableID}/`); @@ -213,7 +214,7 @@ function OSRDSimulation() { const mapMaxHeight = getMapMaxHeight(timeTableRef); return (
- {!simulation || simulation.trains.length === 0 ? ( + {!displaySimulation ? (
{waitingLoader}
) : (
@@ -257,7 +258,7 @@ function OSRDSimulation() { className="spacetimechart-container" style={{ height: `${heightOfSpaceTimeChart}px` }} > - {simulation.trains.length > 0 && ( + {displaySimulation && ( - {simulation.trains.length > 0 && ( + {displaySimulation && ( - {simulation.trains.length > 0 && ( + {displaySimulation && (
- {simulation.trains.length > 0 ? : null} + {displaySimulation ? : null}
diff --git a/front/src/reducers/osrdsimulation/index.ts b/front/src/reducers/osrdsimulation/index.ts index 604a2684eba..876cee8c083 100644 --- a/front/src/reducers/osrdsimulation/index.ts +++ b/front/src/reducers/osrdsimulation/index.ts @@ -4,7 +4,7 @@ import produce from 'immer'; import { LIST_VALUES_NAME_SPACE_TIME, SIGNAL_BASE_DEFAULT, - KEY_VALUES_FOR_CONSOLIDATED_SIMULATION + KEY_VALUES_FOR_CONSOLIDATED_SIMULATION, } from '../../applications/osrd/components/Simulation/consts'; import undoableSimulation, { REDO_SIMULATION, UNDO_SIMULATION } from './simulation'; import createTrain from 'applications/osrd/components/Simulation/SpaceTimeChart/createTrain'; @@ -14,6 +14,7 @@ import { offsetSeconds, MergedDataPoint, } from '../../applications/osrd/components/Helpers/ChartHelpers'; +import { isNull } from 'lodash'; // Action Types export const UPDATE_CHART = 'osrdsimu/UPDATE_CHART'; @@ -198,6 +199,7 @@ export interface OsrdSimulationState { timePosition: any; consolidatedSimulation: SimulationTrain[]; departureArrivalTimes: Array; + displaySimulation: boolean; simulation: { past: SimulationHistory; present: SimulationSnapshot; @@ -244,6 +246,7 @@ export const initialState: OsrdSimulationState = { timePosition: undefined, consolidatedSimulation: [], departureArrivalTimes: [], + displaySimulation: false, simulation: { past: [], present: { trains: [] }, @@ -296,14 +299,16 @@ export default function reducer(inputState: OsrdSimulationState | undefined, act // get only the present, thanks draft.simulation = undoableSimulation(state.simulation, action); draft.departureArrivalTimes = makeDepartureArrivalTimes(draft.simulation.present, 0); - const consolidatedSimulation = createTrain( - undefined, + + draft.consolidatedSimulation = createTrain( + () => {}, KEY_VALUES_FOR_CONSOLIDATED_SIMULATION, draft.simulation.present.trains, - undefined + () => {} ); - - draft.consolidatedSimulation = consolidatedSimulation + draft.displaySimulation = + draft.simulation.present?.trains.length > 0 && + draft.simulation.present.trains[state.selectedTrain] !== undefined; break; case UPDATE_SPEEDSPACE_SETTINGS: From d09851f40981da8593e08394e618dabead5e06e3 Mon Sep 17 00:00:00 2001 From: alexandredamiron Date: Mon, 21 Nov 2022 18:38:52 +0100 Subject: [PATCH 4/5] divideSelectors --- .../views/OSRDSimulation/OSRDSimulation.tsx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx index 65386783cc0..62e73ef9f6b 100644 --- a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx +++ b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx @@ -78,14 +78,15 @@ function OSRDSimulation() { useState(heightOfSpaceCurvesSlopesChart); const { timetableID } = useSelector((state: RootState) => state.osrdconf); - const { - allowancesSettings, - selectedProjection, - departureArrivalTimes, - selectedTrain, - stickyBar, - displaySimulation - } = useSelector((state: RootState) => state.osrdsimulation); + + const allowancesSettings = useSelector( + (state: RootState) => state.osrdsimulation.allowancesSettings + ); + const selectedProjection = useSelector((state: RootState) => state.osrdsimulation.selectedProjection); + const departureArrivalTimes = useSelector((state: RootState) => state.osrdsimulation.departureArrivalTimes); + const selectedTrain = useSelector((state: RootState) => state.osrdsimulation.selectedTrain); + const stickyBar = useSelector((state: RootState) => state.osrdsimulation.stickyBar); + const displaySimulation = useSelector((state: RootState) => state.osrdsimulation.displaySimulation); //const simulation = useSelector((state: RootState) => state.osrdsimulation.simulation.present); const dispatch = useDispatch(); From 349c97f762fc4f891838891a09b7d7c02b84da55 Mon Sep 17 00:00:00 2001 From: Alexandre Damiron Date: Tue, 22 Nov 2022 14:27:46 +0100 Subject: [PATCH 5/5] cleanup --- .../views/OSRDSimulation/OSRDSimulation.tsx | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx index 62e73ef9f6b..0e8f6628406 100644 --- a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx +++ b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx @@ -16,7 +16,6 @@ import { } from 'reducers/osrdsimulation'; import { useDispatch, useSelector } from 'react-redux'; - import Allowances from 'applications/osrd/views/OSRDSimulation/Allowances'; import ButtonFullscreen from 'common/ButtonFullscreen'; import CenterLoader from 'common/CenterLoader/CenterLoader'; @@ -41,7 +40,6 @@ import { setFailure } from 'reducers/main'; import { updateViewport, Viewport } from 'reducers/map'; import { useTranslation } from 'react-i18next'; - export const timetableURI = '/timetable/'; const MAP_MIN_HEIGHT = 450; @@ -82,11 +80,17 @@ function OSRDSimulation() { const allowancesSettings = useSelector( (state: RootState) => state.osrdsimulation.allowancesSettings ); - const selectedProjection = useSelector((state: RootState) => state.osrdsimulation.selectedProjection); - const departureArrivalTimes = useSelector((state: RootState) => state.osrdsimulation.departureArrivalTimes); + const selectedProjection = useSelector( + (state: RootState) => state.osrdsimulation.selectedProjection + ); + const departureArrivalTimes = useSelector( + (state: RootState) => state.osrdsimulation.departureArrivalTimes + ); const selectedTrain = useSelector((state: RootState) => state.osrdsimulation.selectedTrain); const stickyBar = useSelector((state: RootState) => state.osrdsimulation.stickyBar); - const displaySimulation = useSelector((state: RootState) => state.osrdsimulation.displaySimulation); + const displaySimulation = useSelector( + (state: RootState) => state.osrdsimulation.displaySimulation + ); //const simulation = useSelector((state: RootState) => state.osrdsimulation.simulation.present); const dispatch = useDispatch(); @@ -191,21 +195,6 @@ function OSRDSimulation() { } }, [extViewport]); - // With this hook we update and store - // the consolidatedSimuation (simualtion stucture for the selected train) - /* - useEffect(() => { - const consolidatedSimulation = createTrain( - dispatch, - KEY_VALUES_FOR_CONSOLIDATED_SIMULATION, - simulation.trains, - t - ); - // Store it to allow time->position logic to be hosted by redux - dispatch(updateConsolidatedSimulation(consolidatedSimulation)); - }, [simulation]); - */ - const waitingLoader = isEmpty ? (

{t('simulation:noData')}

) : ( @@ -411,9 +400,7 @@ function OSRDSimulation() {
-
- {displaySimulation ? : null} -
+
{displaySimulation ? : null}
) : (