Skip to content

Commit 1bd12b0

Browse files
Adn/refacto osrd simulation base (#2438)
* move opeation to reducer * correct key_value export * limitSimulationTrainSelector * divideSelectors * cleanup
1 parent f657d72 commit 1bd12b0

File tree

7 files changed

+56
-41
lines changed

7 files changed

+56
-41
lines changed

front/src/applications/osrd/Home.js

+8-4
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ import AboutOSRD from './About';
1919
class HomeOSRD extends React.Component {
2020
static propTypes = {
2121
t: PropTypes.func.isRequired,
22-
osrdsimulation: PropTypes.object.isRequired,
22+
redirectToGraph: PropTypes.bool.isRequired,
2323
};
2424

25+
static defaultProps = {
26+
redirectToGraph: false
27+
}
28+
2529
render() {
26-
const { t, osrdsimulation } = this.props;
30+
const { t, redirectToGraph } = this.props;
2731
return (
2832
<>
2933
<MastNavSNCF
@@ -60,7 +64,7 @@ class HomeOSRD extends React.Component {
6064
path=""
6165
element={
6266
<Navigate
63-
to={osrdsimulation.redirectToGraph ? '/osrd/simulation' : '/osrd/settings'}
67+
to={redirectToGraph ? '/osrd/simulation' : '/osrd/settings'}
6468
replace
6569
/>
6670
}
@@ -73,7 +77,7 @@ class HomeOSRD extends React.Component {
7377
}
7478

7579
const mapStateToProps = (state) => ({
76-
osrdsimulation: state.osrdsimulation,
80+
redirectToGraph: state.osrdsimulation.redirectToGraph,
7781
});
7882

7983
export default connect(mapStateToProps)(withTranslation()(HomeOSRD));

front/src/applications/osrd/components/Simulation/SpaceTimeChart/createTrain.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export default function createTrain(
6363
eco_speed: formatStepsWithTime(train.eco.speeds),
6464
};
6565
}
66-
if (train.eco && train.eco.error) {
66+
if (train.eco && train.eco.error && dispatch && t) {
6767
// Tbe removed, useless
6868
dispatch(
6969
setFailure({

front/src/applications/osrd/components/Simulation/consts.js

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const LIST_VALUES_NAME_SPACE_TIME = [
1212
];
1313
export const LIST_VALUES_NAME_SPEED_SPACE = ['speed', 'margins_speed', 'eco_speed'];
1414
export const LIST_VALUES_NAME_SPACE_CURVES_SLOPES = ['slopesCurve'];
15+
export const KEY_VALUES_FOR_CONSOLIDATED_SIMULATION = ['time', 'position'];
1516

1617
// Signal Base is the Signaling system chosen for results display
1718

front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.tsx

+23-31
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import TimeButtons from 'applications/osrd/views/OSRDSimulation/TimeButtons';
3131
import TimeLine from 'applications/osrd/components/TimeLine/TimeLine';
3232
import TrainDetails from 'applications/osrd/views/OSRDSimulation/TrainDetails';
3333
import TrainList from 'applications/osrd/views/OSRDSimulation/TrainList';
34-
import createTrain from 'applications/osrd/components/Simulation/SpaceTimeChart/createTrain';
34+
3535
import { trainscheduleURI } from 'applications/osrd/components/Simulation/consts';
3636
import { get } from 'common/requests';
3737
import { sec2time } from 'utils/timeManipulation';
@@ -40,7 +40,6 @@ import { setFailure } from 'reducers/main';
4040
import { updateViewport, Viewport } from 'reducers/map';
4141
import { useTranslation } from 'react-i18next';
4242

43-
export const KEY_VALUES_FOR_CONSOLIDATED_SIMULATION = ['time', 'position'];
4443
export const timetableURI = '/timetable/';
4544
const MAP_MIN_HEIGHT = 450;
4645

@@ -77,22 +76,30 @@ function OSRDSimulation() {
7776
useState(heightOfSpaceCurvesSlopesChart);
7877

7978
const { timetableID } = useSelector((state: RootState) => state.osrdconf);
80-
const {
81-
allowancesSettings,
82-
selectedProjection,
83-
departureArrivalTimes,
84-
selectedTrain,
85-
stickyBar,
86-
} = useSelector((state: RootState) => state.osrdsimulation);
87-
const simulation = useSelector((state: RootState) => state.osrdsimulation.simulation.present);
79+
80+
const allowancesSettings = useSelector(
81+
(state: RootState) => state.osrdsimulation.allowancesSettings
82+
);
83+
const selectedProjection = useSelector(
84+
(state: RootState) => state.osrdsimulation.selectedProjection
85+
);
86+
const departureArrivalTimes = useSelector(
87+
(state: RootState) => state.osrdsimulation.departureArrivalTimes
88+
);
89+
const selectedTrain = useSelector((state: RootState) => state.osrdsimulation.selectedTrain);
90+
const stickyBar = useSelector((state: RootState) => state.osrdsimulation.stickyBar);
91+
const displaySimulation = useSelector(
92+
(state: RootState) => state.osrdsimulation.displaySimulation
93+
);
94+
//const simulation = useSelector((state: RootState) => state.osrdsimulation.simulation.present);
8895
const dispatch = useDispatch();
8996

9097
/**
9198
* Recover the time table for all the trains
9299
*/
93100
const getTimetable = async () => {
94101
try {
95-
if (!simulation.trains || !simulation.trains[selectedTrain]) {
102+
if (displaySimulation) {
96103
dispatch(updateSelectedTrain(0));
97104
}
98105
const timetable = await get(`${timetableURI}${timetableID}/`);
@@ -188,19 +195,6 @@ function OSRDSimulation() {
188195
}
189196
}, [extViewport]);
190197

191-
// With this hook we update and store
192-
// the consolidatedSimuation (simualtion stucture for the selected train)
193-
useEffect(() => {
194-
const consolidatedSimulation = createTrain(
195-
dispatch,
196-
KEY_VALUES_FOR_CONSOLIDATED_SIMULATION,
197-
simulation.trains,
198-
t
199-
);
200-
// Store it to allow time->position logic to be hosted by redux
201-
dispatch(updateConsolidatedSimulation(consolidatedSimulation));
202-
}, [simulation]);
203-
204198
const waitingLoader = isEmpty ? (
205199
<h1 className="text-center">{t('simulation:noData')}</h1>
206200
) : (
@@ -210,7 +204,7 @@ function OSRDSimulation() {
210204
const mapMaxHeight = getMapMaxHeight(timeTableRef);
211205
return (
212206
<main className={`mastcontainer ${fullscreen ? ' fullscreen' : ''}`}>
213-
{!simulation || simulation.trains.length === 0 ? (
207+
{!displaySimulation ? (
214208
<div className="pt-5 mt-5">{waitingLoader}</div>
215209
) : (
216210
<div className="m-0 p-3">
@@ -254,7 +248,7 @@ function OSRDSimulation() {
254248
className="spacetimechart-container"
255249
style={{ height: `${heightOfSpaceTimeChart}px` }}
256250
>
257-
{simulation.trains.length > 0 && (
251+
{displaySimulation && (
258252
<Rnd
259253
default={{
260254
x: 0,
@@ -285,7 +279,7 @@ function OSRDSimulation() {
285279
className="speedspacechart-container"
286280
style={{ height: `${heightOfSpeedSpaceChart}px` }}
287281
>
288-
{simulation.trains.length > 0 && (
282+
{displaySimulation && (
289283
<Rnd
290284
default={{
291285
x: 0,
@@ -315,7 +309,7 @@ function OSRDSimulation() {
315309
className="spacecurvesslopes-container"
316310
style={{ height: `${heightOfSpaceCurvesSlopesChart}px` }}
317311
>
318-
{simulation.trains.length > 0 && (
312+
{displaySimulation && (
319313
<Rnd
320314
default={{
321315
x: 0,
@@ -406,9 +400,7 @@ function OSRDSimulation() {
406400
<div className="col-lg-4">
407401
<TimeButtons />
408402
</div>
409-
<div className="col-lg-8">
410-
{simulation.trains.length > 0 ? <TrainDetails /> : null}
411-
</div>
403+
<div className="col-lg-8">{displaySimulation ? <TrainDetails /> : null}</div>
412404
</div>
413405
</div>
414406
) : (

front/src/applications/stdcm/views/OSRDStdcmResults.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/views/OSRDSimulation/OSRDSimulation';
1+
import 'applications/osrd/views/OSRDSimulation/OSRDSimulation.scss';
2+
import 'applications/osrd/views/OSRDConfig/OSRDConfig.scss';
3+
4+
import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/components/Simulation/consts';
25

36
import React, { useEffect } from 'react';
47
import {

front/src/applications/stdcm/views/StdcmRequestModal.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
} from 'reducers/osrdsimulation';
1212
import { useDispatch, useSelector } from 'react-redux';
1313

14-
import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/views/OSRDSimulation/OSRDSimulation';
14+
import { KEY_VALUES_FOR_CONSOLIDATED_SIMULATION } from 'applications/osrd/components/Simulation/consts';
1515

1616
// Generic components
1717
import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF';

front/src/reducers/osrdsimulation/index.ts

+18-3
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ import produce from 'immer';
44
import {
55
LIST_VALUES_NAME_SPACE_TIME,
66
SIGNAL_BASE_DEFAULT,
7+
KEY_VALUES_FOR_CONSOLIDATED_SIMULATION,
78
} from '../../applications/osrd/components/Simulation/consts';
89
import undoableSimulation, { REDO_SIMULATION, UNDO_SIMULATION } from './simulation';
10+
import createTrain from 'applications/osrd/components/Simulation/SpaceTimeChart/createTrain';
911

1012
import {
1113
interpolateOnTime,
1214
offsetSeconds,
1315
MergedDataPoint,
1416
} from '../../applications/osrd/components/Helpers/ChartHelpers';
17+
import { isNull } from 'lodash';
1518

1619
// Action Types
1720
export const UPDATE_CHART = 'osrdsimu/UPDATE_CHART';
@@ -196,6 +199,7 @@ export interface OsrdSimulationState {
196199
timePosition: any;
197200
consolidatedSimulation: SimulationTrain[];
198201
departureArrivalTimes: Array<any>;
202+
displaySimulation: boolean;
199203
simulation: {
200204
past: SimulationHistory;
201205
present: SimulationSnapshot;
@@ -242,6 +246,7 @@ export const initialState: OsrdSimulationState = {
242246
timePosition: undefined,
243247
consolidatedSimulation: [],
244248
departureArrivalTimes: [],
249+
displaySimulation: false,
245250
simulation: {
246251
past: [],
247252
present: { trains: [] },
@@ -289,14 +294,22 @@ export default function reducer(inputState: OsrdSimulationState | undefined, act
289294
draft.departureArrivalTimes = action.departureArrivalTimes;
290295
break;
291296
case UPDATE_SIMULATION:
292-
draft.simulation = undoableSimulation(state.simulation, action);
293-
draft.departureArrivalTimes = makeDepartureArrivalTimes(draft.simulation.present, 0);
294-
break;
295297
case UNDO_SIMULATION:
296298
case REDO_SIMULATION:
297299
// get only the present, thanks
298300
draft.simulation = undoableSimulation(state.simulation, action);
299301
draft.departureArrivalTimes = makeDepartureArrivalTimes(draft.simulation.present, 0);
302+
303+
draft.consolidatedSimulation = createTrain(
304+
() => {},
305+
KEY_VALUES_FOR_CONSOLIDATED_SIMULATION,
306+
draft.simulation.present.trains,
307+
() => {}
308+
);
309+
draft.displaySimulation =
310+
draft.simulation.present?.trains.length > 0 &&
311+
draft.simulation.present.trains[state.selectedTrain] !== undefined;
312+
300313
break;
301314
case UPDATE_SPEEDSPACE_SETTINGS:
302315
draft.speedSpaceSettings = action.speedSpaceSettings;
@@ -330,6 +343,8 @@ export default function reducer(inputState: OsrdSimulationState | undefined, act
330343
draft.positionValues = positionsValues;
331344
break;
332345
}
346+
default:
347+
break;
333348
}
334349
});
335350
}

0 commit comments

Comments
 (0)