Skip to content

Commit

Permalink
front: display simulation results in stdcm
Browse files Browse the repository at this point in the history
wip

front: stdcm: add creation date on simuation results
  • Loading branch information
Akctarus committed Jul 8, 2024
1 parent e084c99 commit c7a3bf5
Show file tree
Hide file tree
Showing 14 changed files with 507 additions and 122 deletions.
6 changes: 6 additions & 0 deletions front/public/locales/en/stdcm-simulation-report-sheet.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@
"conventionalSign": "conv. sign",
"convoy": "convoy",
"crossedATE": "crossed ATE",
"displayAll": "Display all operational points",
"displayMain": "Display main operational points",
"downloadSimulationSheet": "Download simulation report sheet",
"endStop": "end",
"for": "for",
"formattedDate": "{{year}}/{{month}}/{{day}} at {{hours}}:{{minutes}}",
"from": "from",
"gesicoRequest":"and attach this document to your GESICO DSDM request.",
"maxLength": "max. length",
"maxSpeed": "max. speed",
"maxWeight": "max. weight",
Expand All @@ -21,8 +25,10 @@
"requestedRoute": "requested route",
"scheduledArrival": "scheduled arrival at",
"scheduledDeparture": "scheduled departure at",
"selectThisSimulation": "Select this simulation",
"serviceStop": "Service stop",
"simulation": "Simulation",
"simulationSelected": "You have selected this simulation",
"speedLimitByTag": "speed limit by tag",
"startStop": "start",
"stdcm": "ST DCM",
Expand Down
2 changes: 2 additions & 0 deletions front/public/locales/en/stdcm.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
"consist": "Consist",
"tractionEngine": "Traction engine"
},
"formattedCreationDate": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}",
"loaderImageLegend": "The TGV Nord line",
"notificationTitle": "Phase 1: from D-7 to D-1 5pm, on the Perrigny-Miramas axis.",
"pathfindingFailed": "No path have been found for these waypoints.",
"pleaseWait": "Please wait…",
"simulation":{
"available": "Simulation available",
"averageRequestTime": "For your request, the time required is generally 90 seconds.",
"calculatingSimulation": "Calculation in progress...",
"getSimulation": "Get the simulation",
Expand Down
6 changes: 6 additions & 0 deletions front/public/locales/fr/stdcm-simulation-report-sheet.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@
"conventionalSign": "signe conv.",
"convoy": "convoi",
"crossedATE": "ATE croisé",
"displayAll": "Afficher tous les jalons",
"displayMain": "Afficher les jalons principaux",
"downloadSimulationSheet": "Télécharger la fiche de simulation",
"endStop": "arrivée",
"for": "pour",
"formattedDate": "le {{day}}/{{month}}/{{year}} à {{hours}}:{{minutes}}",
"from": "du",
"gesicoRequest":"et joignez ce document à votre demande GESICO DSDM",
"maxLength": "longueur max.",
"maxSpeed": "vitesse max.",
"maxWeight": "tonnage max.",
Expand All @@ -21,8 +25,10 @@
"requestedRoute": "parcours demandé",
"scheduledArrival": "arrivée prévue à",
"scheduledDeparture": "départ prévu à",
"selectThisSimulation": "Retenir cette simulation",
"serviceStop": "Arrêt de service",
"simulation": "Simulation",
"simulationSelected": "Vous avez retenu cette simulation",
"speedLimitByTag": "code de composition",
"startStop":"départ",
"stdcm": "ST DCM",
Expand Down
2 changes: 2 additions & 0 deletions front/public/locales/fr/stdcm.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
"consist": "Convoi",
"tractionEngine": "Engin de traction"
},
"formattedCreationDate": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}",
"loaderImageLegend": "La ligne TGV Nord",
"notificationTitle": "Phase 1 : de J-7 à J-1 17h, sur l’axe Perrigny—Miramas.",
"pathfindingFailed": "Aucun chemin n'a été trouvé pour ces points de jalonnement.",
"pleaseWait": "Veuillez patientez…",
"simulation":{
"available": "Simulation disponible",
"averageRequestTime": "Pour votre demande, le temps nécessaire est généralement de 90 secondes.",
"calculatingSimulation": "Calcul en cours...",
"getSimulation": "Obtenir la simulation",
Expand Down
32 changes: 22 additions & 10 deletions front/src/applications/stdcmV2/components/StdcmConfig.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { useTranslation } from 'react-i18next';
import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types';
import { STDCM_REQUEST_STATUS } from 'applications/stdcm/consts';
import useStdcm from 'applications/stdcm/hooks/useStdcm';
import type { StdcmV2SuccessResponse } from 'applications/stdcm/types';
import { useOsrdConfActions } from 'common/osrdContext';
import { usePathfindingV2 } from 'modules/pathfinding/hook/usePathfinding';
import { Map } from 'modules/trainschedule/components/ManageTrainSchedule';
Expand All @@ -28,26 +29,41 @@ type StdcmConfigProps = {
setCurrentSimulationInputs: React.Dispatch<
React.SetStateAction<StdcmSimulationResult['input'] | undefined>
>;
setStdcmSimulationResults: (stdcmSimulationResults: StdcmV2SuccessResponse | undefined) => void;
setSimulationCreationDate: (simulationCreationDate: Date) => void;
};

const StdcmConfig = ({
currentSimulationInputs,
pathProperties,
setPathProperties,
setCurrentSimulationInputs,
setStdcmSimulationResults,
setSimulationCreationDate,
}: StdcmConfigProps) => {
const { t } = useTranslation('stdcm');
const loaderRef = useRef<HTMLDivElement>(null);

const { launchStdcmRequest, cancelStdcmRequest, currentStdcmRequestStatus } = useStdcm();
const { launchStdcmRequest, cancelStdcmRequest, currentStdcmRequestStatus, stdcmV2Results } =
useStdcm();
const isPending = currentStdcmRequestStatus === STDCM_REQUEST_STATUS.pending;
const stdcmResponse = stdcmV2Results?.stdcmResponse;

const dispatch = useAppDispatch();
const { updateGridMarginAfter, updateGridMarginBefore, updateStdcmStandardAllowance } =
useOsrdConfActions() as StdcmConfSliceActions;

const { pathfindingState } = usePathfindingV2(setPathProperties, pathProperties);

const clickOnSimulation = () => {
if (pathfindingState.done) {
const currentDateTime = new Date();
launchStdcmRequest();
setSimulationCreationDate(currentDateTime);
setCurrentSimulationInputs(undefined);
}
};

useEffect(() => {
if (isPending) {
loaderRef?.current?.scrollIntoView({ behavior: 'smooth' });
Expand All @@ -61,6 +77,10 @@ const StdcmConfig = ({
dispatch(updateStdcmStandardAllowance({ type: 'time_per_distance', value: 4.5 }));
}, []);

useEffect(() => {
setStdcmSimulationResults(stdcmResponse);
}, [stdcmResponse]);

return (
<div className="stdcm-v2__body">
<div className="stdcm-v2-simulation-settings">
Expand Down Expand Up @@ -92,15 +112,7 @@ const StdcmConfig = ({
})}
>
{currentSimulationInputs && (
<Button
label={t('simulation.getSimulation')}
onClick={() => {
if (pathfindingState.done) {
launchStdcmRequest();
setCurrentSimulationInputs(undefined);
}
}}
/>
<Button label={t('simulation.getSimulation')} onClick={clickOnSimulation} />
)}
{pathfindingState.error && (
<div className="warning-box">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { useAppDispatch } from 'store';

import StdcmCard from './StdcmCard';
import StdcmOperationalPoint from './StdcmOperationalPoint';
import type { StdcmSimulationResult } from '../views/StdcmViewV2';
import type { StdcmConfigCardProps } from '../types';

const StdcmDestination = ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ const StdcmOperationalPoint = ({ updatePoint, point, disabled }: StdcmOperationa
}
: null;
updatePoint(newPoint);
updatePoint(newPoint);
};

const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
Expand Down
77 changes: 77 additions & 0 deletions front/src/applications/stdcmV2/components/StdcmResults.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import React, { useState } from 'react';

import { CheckCircle } from '@osrd-project/ui-icons';
import { useTranslation } from 'react-i18next';

import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types';
import type { StdcmV2SuccessResponse } from 'applications/stdcm/types';
import { generateCodeNumber } from 'applications/stdcm/utils';
import type { RollingStockWithLiveries } from 'common/api/osrdEditoastApi';
import { Map } from 'modules/trainschedule/components/ManageTrainSchedule';
import { formatDateToString } from 'utils/date';

import StdcmTableResults from './StdcmTableResults';

type StcdmResultsV2Props = {
stdcmData: StdcmV2SuccessResponse;
pathProperties?: ManageTrainSchedulePathProperties;
rollingStockData: RollingStockWithLiveries;
speedLimitByTag?: string;
simulationCreationDate?: Date;
};

const StcdmResults = ({
stdcmData,
pathProperties,
rollingStockData,
speedLimitByTag,
simulationCreationDate,
}: StcdmResultsV2Props) => {
const { t } = useTranslation('stdcm');
const date =
simulationCreationDate &&
t('formattedCreationDate', formatDateToString(simulationCreationDate));

const [isSimulationSelected, setIsSimulationSelected] = useState(false);

const [mapCanvas, setMapCanvas] = useState<string>();

const simulationReportSheetNumber = generateCodeNumber();

return (
<main className="stdcm-v2-results">
<div className="simuation-banner">
<div
className="simulation-validated"
style={{ color: isSimulationSelected ? '#0B723C' : '' }}
>
Simulation n°1
{isSimulationSelected && (
<div className="check-circle">
<CheckCircle variant="fill" />
</div>
)}
</div>
<div className="creation-date">{date}</div>
</div>
<div className="simuation-results">
<StdcmTableResults
stdcmData={stdcmData}
pathProperties={pathProperties}
rollingStockData={rollingStockData}
speedLimitByTag={speedLimitByTag}
creationDate={simulationCreationDate}
simulationReportSheetNumber={simulationReportSheetNumber}
setIsSimulationSelected={setIsSimulationSelected}
mapCanvas={mapCanvas}
isSimulationSelected={isSimulationSelected}
/>
<div className="osrd-config-item-container osrd-config-item-container-map map-results">
<Map hideAttribution setMapCanvas={setMapCanvas} pathProperties={pathProperties} />
</div>
</div>
</main>
);
};

export default StcdmResults;
Loading

0 comments on commit c7a3bf5

Please sign in to comment.