Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

front: stdcm: modify stdcm allowances settings to display the trains on get #5120

Merged
merged 1 commit into from
Sep 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { ComponentType } from 'react';
import React from 'react';
import { useDispatch, useSelector } from 'react-redux';

import {
Expand All @@ -25,12 +25,7 @@ import {
time2datetime,
datetime2Isostring,
} from 'utils/timeManipulation';
import {
AllowancesSetting,
Chart,
Train,
TrainsWithArrivalAndDepartureTimes,
} from 'reducers/osrdsimulation/types';
import { Chart, Train, TrainsWithArrivalAndDepartureTimes } from 'reducers/osrdsimulation/types';
import { TimeString } from 'common/types';
import SpaceTimeChart, { SpaceTimeChartProps } from './SpaceTimeChart';
import {
Expand All @@ -41,39 +36,6 @@ import {
DispatchUpdateTimePositionValues,
} from './types';

/**
* Stdcm will automatically show ecoBlocks if exisiting. This function takes a component and returns another component that will set the forcedEcoAllowancesSettings prop on its children
* @param {*} Component
* @returns RFC with OSRD Data. SignalSwitch
*/
function withForcedEcoAllowanceSettings<T extends SpaceTimeChartProps>(
Component: ComponentType<T>
): React.ComponentType<T> {
return (props: T) => {
const { simulation } = props;
const forcedEcoAllowancesSettings: AllowancesSetting[] = [];
// eslint-disable-next-line react/prop-types
simulation?.trains?.forEach((train) => {
forcedEcoAllowancesSettings[train.id] = train.eco?.route_aspects
? {
base: true,
baseBlocks: false,
eco: true,
ecoBlocks: true,
}
: {
base: true,
baseBlocks: true,
eco: false,
ecoBlocks: false,
};
});

// Render the original component passing all props and forcedEcoAllowancesSettings as props to it
return <Component {...props} allowancesSettings={forcedEcoAllowancesSettings} />;
};
}

/**
* HOC to provide store data
* @param {RFC} Component
Expand Down Expand Up @@ -134,7 +96,6 @@ function withOSRDData<T extends SpaceTimeChartProps>(

return (
<Component
{...props}
allowancesSettings={allowancesSettings}
dispatchUpdateChart={dispatchUpdateChart}
dispatchUpdateDepartureArrivalTimes={dispatchUpdateDepartureArrivalTimes}
Expand All @@ -149,16 +110,11 @@ function withOSRDData<T extends SpaceTimeChartProps>(
simulation={simulation}
simulationIsPlaying={isPlaying}
timePosition={timePosition}
{...props}
/>
);
};
}

export const ForcedEcoSpaceTimeChart: React.FC<SpaceTimeChartProps> = (props) => {
const WithOSRDData = withOSRDData(SpaceTimeChart);
const WithForcedEcoAllowanceSettings = withForcedEcoAllowanceSettings(WithOSRDData);
return <WithForcedEcoAllowanceSettings {...props} />;
};

const OSRDSpaceTimeChart = withOSRDData(SpaceTimeChart);
export default OSRDSpaceTimeChart;
28 changes: 26 additions & 2 deletions front/src/applications/stdcm/views/OSRDStdcmResults.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import React, { useState } from 'react';
import { ForcedEcoSpaceTimeChart } from 'applications/operationalStudies/components/SimulationResults/SpaceTimeChart/withOSRDData';
import SpaceTimeChart from 'applications/operationalStudies/components/SimulationResults/SpaceTimeChart/withOSRDData';
import SpeedSpaceChart from 'applications/operationalStudies/components/SimulationResults/SpeedSpaceChart/withOSRDData';
import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import { getPresentSimulation } from 'reducers/osrdsimulation/selectors';
import { AllowancesSettings } from 'reducers/osrdsimulation/types';
import { SimulationReport } from 'common/api/osrdEditoastApi';

const OSRDStcdmResults = () => {
const { t } = useTranslation(['translation', 'operationalStudies/manageTrainSchedule']);
Expand All @@ -10,6 +14,25 @@ const OSRDStcdmResults = () => {
const [spaceTimeChartHeight, setSpaceTimeChartHeight] = useState(450);
const [speedSpaceChartHeight, setSpeedSpaceChartHeight] = useState(450);

const simulation = useSelector(getPresentSimulation);
// by default, we show the ecoblocks for stdcm (if existing)
const allowancesSettings = (simulation.trains as SimulationReport[]).reduce((acc, train) => {
acc[train.id] = train.eco?.route_aspects
? {
base: true,
baseBlocks: false,
eco: true,
ecoBlocks: true,
}
: {
base: true,
baseBlocks: true,
eco: false,
ecoBlocks: false,
};
return acc;
}, {} as AllowancesSettings);

return (
<main className="osrd-config-mastcontainer" style={{ height: '115vh' }}>
<div className="osrd-simulation-container mb-2 simulation-results">
Expand All @@ -22,7 +45,8 @@ const OSRDStcdmResults = () => {
className="spacetimechart-container mt-2"
style={{ height: `${spaceTimeChartHeight}px` }}
>
<ForcedEcoSpaceTimeChart
<SpaceTimeChart
allowancesSettings={allowancesSettings}
initialHeightOfSpaceTimeChart={450}
onSetBaseHeightOfSpaceTimeChart={setSpaceTimeChartHeight}
/>
Expand Down