From 418d712519aa946db2579d099d44b023f9be1627 Mon Sep 17 00:00:00 2001 From: Clara Ni Date: Mon, 25 Nov 2024 14:44:05 +0100 Subject: [PATCH 1/2] front: move useSimulationResults in SimulationResults Moving this hook in SimulationResults avoids unnecessary renders and bring the code closer to where it is used. Signed-off-by: Clara Ni --- .../components/Scenario/ScenarioContent.tsx | 4 ++-- .../hooks/useScenarioData.ts | 12 +++------- .../applications/operationalStudies/types.ts | 2 -- .../views/SimulationResults.tsx | 23 +++++++++++-------- 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/front/src/applications/operationalStudies/components/Scenario/ScenarioContent.tsx b/front/src/applications/operationalStudies/components/Scenario/ScenarioContent.tsx index 07865651c1e..3eb67889417 100644 --- a/front/src/applications/operationalStudies/components/Scenario/ScenarioContent.tsx +++ b/front/src/applications/operationalStudies/components/Scenario/ScenarioContent.tsx @@ -52,10 +52,10 @@ const ScenarioContent = ({ const [isMacro, setIsMacro] = useState(false); const { selectedTrainId, + selectedTrainSummary, trainScheduleSummaries, trainSchedules, projectionData, - simulationResults, conflicts, upsertTrainSchedules, removeTrains, @@ -209,9 +209,9 @@ const ScenarioContent = ({ scenarioData={{ name: scenario.name, infraName: scenario.infra_name }} collapsedTimetable={collapsedTimetable} projectionData={projectionData} - simulationResults={simulationResults} infraId={infra.id} conflicts={conflicts} + selectedTrainSummary={selectedTrainSummary} /> ) )} diff --git a/front/src/applications/operationalStudies/hooks/useScenarioData.ts b/front/src/applications/operationalStudies/hooks/useScenarioData.ts index 05fd1ad3662..199203f417c 100644 --- a/front/src/applications/operationalStudies/hooks/useScenarioData.ts +++ b/front/src/applications/operationalStudies/hooks/useScenarioData.ts @@ -22,7 +22,6 @@ import { mapBy } from 'utils/types'; import useAutoUpdateProjection from './useAutoUpdateProjection'; import useLazyLoadTrains from './useLazyLoadTrains'; import usePathProjection from './usePathProjection'; -import useSimulationResults from './useSimulationResults'; const useScenarioData = ( scenario: ScenarioResponse, @@ -45,8 +44,6 @@ const useScenarioData = ( const projectionPath = usePathProjection(infra); - const simulationResults = useSimulationResults(); - const { trainScheduleSummariesById, projectedTrainsById, @@ -165,6 +162,9 @@ const useScenarioData = ( return { selectedTrainId, + selectedTrainSummary: selectedTrainId + ? trainScheduleSummariesById.get(selectedTrainId) + : undefined, trainScheduleSummaries, trainSchedules, projectionData: @@ -179,12 +179,6 @@ const useScenarioData = ( }, } : undefined, - simulationResults: { - ...simulationResults, - selectedTrainSummary: selectedTrainId - ? trainScheduleSummariesById.get(selectedTrainId) - : undefined, - }, conflicts, removeTrains, upsertTrainSchedules, diff --git a/front/src/applications/operationalStudies/types.ts b/front/src/applications/operationalStudies/types.ts index 31047c0ebd1..b78ee9b9065 100644 --- a/front/src/applications/operationalStudies/types.ts +++ b/front/src/applications/operationalStudies/types.ts @@ -15,7 +15,6 @@ import type { } from 'common/api/osrdEditoastApi'; import type { RangedValue } from 'common/types'; import type { SuggestedOP } from 'modules/trainschedule/components/ManageTrainSchedule/types'; -import type { TrainScheduleWithDetails } from 'modules/trainschedule/components/Timetable/types'; import type { ArrayElement } from 'utils/types'; export interface Step { @@ -163,7 +162,6 @@ export type SimulationResultsData = { selectedTrainSchedule?: TrainScheduleResult; selectedTrainRollingStock?: RollingStockWithLiveries; selectedTrainPowerRestrictions: LayerData[]; - selectedTrainSummary?: TrainScheduleWithDetails; trainSimulation?: SimulationResponseSuccess; pathProperties?: PathPropertiesFormatted; pathLength?: number; diff --git a/front/src/applications/operationalStudies/views/SimulationResults.tsx b/front/src/applications/operationalStudies/views/SimulationResults.tsx index fc29092bf30..239d8eebe29 100644 --- a/front/src/applications/operationalStudies/views/SimulationResults.tsx +++ b/front/src/applications/operationalStudies/views/SimulationResults.tsx @@ -4,7 +4,6 @@ import { ChevronLeft, ChevronRight } from '@osrd-project/ui-icons'; import cx from 'classnames'; import { useTranslation } from 'react-i18next'; -import type { SimulationResultsData } from 'applications/operationalStudies/types'; import type { Conflict } from 'common/api/osrdEditoastApi'; import SimulationWarpedMap from 'common/Map/WarpedMap/SimulationWarpedMap'; import ResizableSection from 'common/ResizableSection'; @@ -21,10 +20,13 @@ import { useFormattedOperationalPoints } from 'modules/simulationResult/hooks/us import SimulationResultExport from 'modules/simulationResult/SimulationResultExport/SimulationResultsExport'; import type { ProjectionData } from 'modules/simulationResult/types'; import TimesStopsOutput from 'modules/timesStops/TimesStopsOutput'; +import type { TrainScheduleWithDetails } from 'modules/trainschedule/components/Timetable/types'; import { updateViewport, type Viewport } from 'reducers/map'; import { useAppDispatch } from 'store'; import { getPointCoordinates } from 'utils/geometry'; +import useSimulationResults from '../hooks/useSimulationResults'; + const SPEED_SPACE_CHART_HEIGHT = 521.5; const HANDLE_TAB_RESIZE_HEIGHT = 20; const MANCHETTE_HEIGHT_DIFF = 76; @@ -33,8 +35,8 @@ type SimulationResultsProps = { scenarioData: { name: string; infraName: string }; collapsedTimetable: boolean; infraId?: number; - simulationResults: SimulationResultsData; projectionData?: ProjectionData; + selectedTrainSummary?: TrainScheduleWithDetails; conflicts?: Conflict[]; }; @@ -42,20 +44,21 @@ const SimulationResults = ({ scenarioData, collapsedTimetable, infraId, - simulationResults: { + projectionData, + selectedTrainSummary, + conflicts = [], +}: SimulationResultsProps) => { + const { t } = useTranslation('simulation'); + const dispatch = useAppDispatch(); + + const { selectedTrainSchedule, selectedTrainRollingStock, selectedTrainPowerRestrictions, - selectedTrainSummary, trainSimulation, pathProperties, path, - }, - projectionData, - conflicts = [], -}: SimulationResultsProps) => { - const { t } = useTranslation('simulation'); - const dispatch = useAppDispatch(); + } = useSimulationResults(); const [extViewport, setExtViewport] = useState(); const [showWarpedMap, setShowWarpedMap] = useState(false); From d6b49dde173c59a684673a8627daf31c4cc21fc1 Mon Sep 17 00:00:00 2001 From: Clara Ni Date: Mon, 25 Nov 2024 14:47:07 +0100 Subject: [PATCH 2/2] front: remove some conditions in SimulationResults - Removed the first condition trainSimulation.status === 'success' to allow the user to see the SpaceTimeChart even if the current selected train is invalid. - Removed not needed condition on pathproperties to display the spacetimechart Signed-off-by: Clara Ni --- .../operationalStudies/views/SimulationResults.tsx | 6 +----- front/src/modules/timesStops/TimesStopsOutput.tsx | 4 ++-- front/src/modules/timesStops/hooks/useOutputTableData.ts | 4 ++-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/front/src/applications/operationalStudies/views/SimulationResults.tsx b/front/src/applications/operationalStudies/views/SimulationResults.tsx index 239d8eebe29..91cbcfd0282 100644 --- a/front/src/applications/operationalStudies/views/SimulationResults.tsx +++ b/front/src/applications/operationalStudies/views/SimulationResults.tsx @@ -116,10 +116,6 @@ const SimulationResults = ({ } }, [extViewport]); - if (!trainSimulation) return null; - - if (trainSimulation.status !== 'success') return null; - return (
{/* SIMULATION : STICKY BAR */} @@ -150,7 +146,7 @@ const SimulationResults = ({ className="simulation-warped-map d-flex flex-row align-items-stretch mb-2" style={{ height: manchetteWithSpaceTimeChartHeight }} > - {projectionData && projectionData.projectedTrains.length > 0 && pathProperties && ( + {projectionData && projectionData.projectedTrains.length > 0 && ( <>