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: drop tsv2 switch #8217

Merged
merged 2 commits into from
Jul 30, 2024
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
1 change: 1 addition & 0 deletions front/public/locales/en/rollingstock.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"comfortAcceleration": "Comfort acceleration",
"comfortTypes": {
"AC": "Air conditioning",
"AIR_CONDITIONING": "Air conditioning",
"HEATING": "Heating",
"STANDARD": "Standard"
},
Expand Down
1 change: 1 addition & 0 deletions front/public/locales/fr/rollingstock.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"comfortAcceleration": "Accélération «\u202Fconfort\u202F»",
"comfortTypes": {
"AC": "Climatisation",
"AIR_CONDITIONING": "Climatisation",
"HEATING": "Chauffage",
"STANDARD": "Standard"
},
Expand Down
15 changes: 0 additions & 15 deletions front/src/applications/operationalStudies/views/Scenario.tsx

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import { Rnd } from 'react-rnd';

import { osrdEditoastApi, type SimulationReport } from 'common/api/osrdEditoastApi';
import { osrdEditoastApi } from 'common/api/osrdEditoastApi';
import SimulationWarpedMap from 'common/Map/WarpedMap/SimulationWarpedMap';
import getScaleDomainFromValues from 'modules/simulationResult/components/ChartHelpers/getScaleDomainFromValues';
import SimulationResultsMap from 'modules/simulationResult/components/SimulationResultsMap';
Expand Down Expand Up @@ -143,9 +143,7 @@ export default function SimulationResults({
})}
>
<div className="row">
<div className="col-xl-4">
{selectedTrain && <TimeButtons selectedTrain={selectedTrain as SimulationReport} />}
</div>
<div className="col-xl-4">{selectedTrain && <TimeButtons />}</div>
<div className="col-xl-8 d-flex justify-content-end mt-2 mt-xl-0">
<TrainDetails />
</div>
Expand Down
21 changes: 2 additions & 19 deletions front/src/applications/operationalStudies/views/Study.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import React, { useEffect, useMemo, useState } from 'react';
import { Pencil } from '@osrd-project/ui-icons';
import { useTranslation } from 'react-i18next';
import nextId from 'react-id-generator';
import { useSelector } from 'react-redux';
import { useParams } from 'react-router-dom';

import BreadCrumbs from 'applications/operationalStudies/components/BreadCrumbs';
Expand All @@ -23,7 +22,6 @@ import { Loader, Spinner } from 'common/Loaders';
import ScenarioCard from 'modules/scenario/components/ScenarioCard';
import ScenarioCardEmpty from 'modules/scenario/components/ScenarioCardEmpty';
import AddOrEditStudyModal from 'modules/study/components/AddOrEditStudyModal';
import { getStdcmV2Activated, getTrainScheduleV2Activated } from 'reducers/user/userSelectors';
import { budgetFormat } from 'utils/numbers';

type SortOptions =
Expand All @@ -43,9 +41,6 @@ export default function Study() {
const { t } = useTranslation('operationalStudies/study');
const { openModal } = useModal();
const { projectId: urlProjectId, studyId: urlStudyId } = useParams() as studyParams;
const trainScheduleV2Activated = useSelector(getTrainScheduleV2Activated);
const stdcmV2Activated = useSelector(getStdcmV2Activated);
const useTrainScheduleV2 = trainScheduleV2Activated || stdcmV2Activated;

const [scenariosList, setScenariosList] = useState<ScenarioWithCountTrains[]>([]);
const [filter, setFilter] = useState('');
Expand Down Expand Up @@ -77,17 +72,6 @@ export default function Study() {

const [postSearch] = osrdEditoastApi.endpoints.postSearch.useMutation();

const { data: scenariosV1 } =
osrdEditoastApi.endpoints.getProjectsByProjectIdStudiesAndStudyIdScenarios.useQuery(
{
projectId: projectId!,
studyId: studyId!,
ordering: sortOption,
pageSize: 1000,
},
{ skip: !projectId || !studyId }
);

const { data: scenariosV2 } =
osrdEditoastApi.endpoints.getV2ProjectsByProjectIdStudiesAndStudyIdScenarios.useQuery(
{
Expand Down Expand Up @@ -156,8 +140,7 @@ export default function Study() {
console.error(error);
}
} else {
const scenarios = useTrainScheduleV2 ? scenariosV2?.results : scenariosV1?.results;
setScenariosList(scenarios || []);
setScenariosList(scenariosV2?.results || []);
}
setIsLoading(false);
}
Expand Down Expand Up @@ -188,7 +171,7 @@ export default function Study() {

useEffect(() => {
getScenarioList();
}, [sortOption, filter, scenariosV1, scenariosV2, useTrainScheduleV2]);
}, [sortOption, filter, scenariosV2]);

return (
<>
Expand Down
108 changes: 5 additions & 103 deletions front/src/applications/stdcm/hooks/useStdcm.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
import { useState } from 'react';

import { cloneDeep } from 'lodash';
import { useTranslation } from 'react-i18next';
import nextId from 'react-id-generator';
import { useSelector } from 'react-redux';

import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types';
import { STDCM_REQUEST_STATUS, STDCM_TRAIN_ID } from 'applications/stdcm/consts';
import formatStdcmConf from 'applications/stdcm/formatStdcmConf';
import type { StdcmRequestStatus, StdcmV2SuccessResponse } from 'applications/stdcm/types';
import { osrdEditoastApi } from 'common/api/osrdEditoastApi';
import type {
SimulationReport,
PostStdcmApiResponse,
TrainScheduleResult,
} from 'common/api/osrdEditoastApi';
import { useOsrdConfActions, useOsrdConfSelectors } from 'common/osrdContext';
import type { TrainScheduleResult } from 'common/api/osrdEditoastApi';
import { useOsrdConfSelectors } from 'common/osrdContext';
import { useStoreDataForSpeedLimitByTagSelector } from 'common/SpeedLimitByTagSelector/useStoreDataForSpeedLimitByTagSelector';
import createTrain from 'modules/simulationResult/components/SpaceTimeChart/createTrain';
import { CHART_AXES } from 'modules/simulationResult/consts';
Expand All @@ -25,10 +19,7 @@ import {
updateConsolidatedSimulation,
updateSelectedTrainId,
updateSimulation,
updateSelectedProjection,
} from 'reducers/osrdsimulation/actions';
import type { Train } from 'reducers/osrdsimulation/types';
import { getStdcmV2Activated, getTrainScheduleV2Activated } from 'reducers/user/userSelectors';
import { useAppDispatch } from 'store';
import { castErrorToFailure } from 'utils/error';

Expand All @@ -37,7 +28,6 @@ import { checkStdcmConf, formatStdcmPayload } from '../utils/formatStdcmConfV2';

const useStdcm = () => {
const [stdcmTrainResult, setStdcmTrainResult] = useState<TrainScheduleResult>();
const [stdcmResults, setStdcmResults] = useState<PostStdcmApiResponse>();
const [stdcmV2Response, setStdcmV2Response] = useState<StdcmV2SuccessResponse>();
const [currentStdcmRequestStatus, setCurrentStdcmRequestStatus] = useState<StdcmRequestStatus>(
STDCM_REQUEST_STATUS.idle
Expand All @@ -48,107 +38,29 @@ const useStdcm = () => {
const { t } = useTranslation(['translation', 'stdcm']);
const { getConf, getTimetableID } = useOsrdConfSelectors();
const osrdconf = useSelector(getConf);
const trainScheduleV2Activated = useSelector(getTrainScheduleV2Activated);
const stdcmV2Activated = useSelector(getStdcmV2Activated);
const timetableId = useSelector(getTimetableID);

const stdcmV2Results = useStdcmResults(stdcmV2Response, stdcmTrainResult, setPathProperties);

const [postStdcm] = osrdEditoastApi.endpoints.postStdcm.useMutation();
const [postV2TimetableByIdStdcm] =
osrdEditoastApi.endpoints.postV2TimetableByIdStdcm.useMutation();
const [postTrainScheduleResults] =
osrdEditoastApi.endpoints.postTrainScheduleResults.useMutation();

const [getTimetable] = osrdEditoastApi.endpoints.getTimetableById.useLazyQuery();

const { data: stdcmRollingStock } =
osrdEditoastApi.endpoints.getLightRollingStockByRollingStockId.useQuery(
{
rollingStockId: osrdconf.rollingStockID as number,
},
{ skip: !osrdconf.rollingStockID && !trainScheduleV2Activated }
{ skip: !osrdconf.rollingStockID }
);

const { updateItinerary } = useOsrdConfActions();

// https://developer.mozilla.org/en-US/docs/Web/API/AbortController
const controller = new AbortController();

const { timetableID } = osrdconf;

const { speedLimitByTag } = useStoreDataForSpeedLimitByTagSelector();

const resetResults = () => {
dispatch(updateSelectedTrainId(undefined));
dispatch(updateConsolidatedSimulation([]));
dispatch(updateSimulation({ trains: [] }));
setStdcmResults(undefined);
};

const launchStdcmRequestV1 = async () => {
const payload = formatStdcmConf(dispatch, t, osrdconf as OsrdStdcmConfState);
if (payload && timetableID) {
resetResults();
postStdcm(payload)
.unwrap()
.then((result) => {
setCurrentStdcmRequestStatus(STDCM_REQUEST_STATUS.success);
setStdcmResults(result);
dispatch(updateItinerary(result.path));

const fakedNewTrain = {
...cloneDeep(result.simulation),
id: STDCM_TRAIN_ID,
isStdcm: true,
};
getTimetable({ id: timetableID }).then(({ data: timetable }) => {
const trainIdsToFetch =
timetable?.train_schedule_summaries.map((train) => train.id) ?? [];
postTrainScheduleResults({
body: {
path_id: result.path.id,
train_ids: trainIdsToFetch,
},
})
.unwrap()
.then((timetableTrains) => {
const trains: SimulationReport[] = [...timetableTrains.simulations, fakedNewTrain];
const consolidatedSimulation = createTrain(
CHART_AXES.SPACE_TIME,
trains as Train[] // TODO: remove Train interface
);
dispatch(updateConsolidatedSimulation(consolidatedSimulation));
dispatch(updateSimulation({ trains }));
dispatch(updateSelectedTrainId(fakedNewTrain.id));

dispatch(
updateSelectedProjection({
id: fakedNewTrain.id,
path: result.path.id,
})
);
})
.catch((e) => {
dispatch(
setFailure(
castErrorToFailure(e, {
name: t('stdcm:stdcmError'),
message: t('translation:common.error'),
})
)
);
});
});
})
.catch((e) => {
setCurrentStdcmRequestStatus(STDCM_REQUEST_STATUS.rejected);
dispatch(setFailure(castErrorToFailure(e, { name: t('stdcm:stdcmError') })));
});
}
};
const launchStdcmRequest = async () => {
setCurrentStdcmRequestStatus(STDCM_REQUEST_STATUS.pending);

const launchStdcmRequestV2 = async () => {
const validConfig = checkStdcmConf(dispatch, t, osrdconf as OsrdStdcmConfState);
if (validConfig) {
const payload = formatStdcmPayload(validConfig);
Expand Down Expand Up @@ -197,15 +109,6 @@ const useStdcm = () => {
}
};

const launchStdcmRequest = async () => {
setCurrentStdcmRequestStatus(STDCM_REQUEST_STATUS.pending);
if (trainScheduleV2Activated || stdcmV2Activated) {
launchStdcmRequestV2();
} else {
launchStdcmRequestV1();
}
};

const cancelStdcmRequest = () => {
// when http ready https://axios-http.com/docs/cancellation

Expand All @@ -221,7 +124,6 @@ const useStdcm = () => {
const isPending = currentStdcmRequestStatus === STDCM_REQUEST_STATUS.pending;

return {
stdcmResults,
stdcmV2Results,
launchStdcmRequest,
currentStdcmRequestStatus,
Expand Down
42 changes: 12 additions & 30 deletions front/src/applications/stdcm/views/StdcmConfig.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,23 @@ import type { ManageTrainSchedulePathProperties } from 'applications/operational
import RunningTime from 'applications/stdcm/components/RunningTime';
import { STDCM_REQUEST_STATUS } from 'applications/stdcm/consts';
import type { StdcmV2Results } from 'applications/stdcm/types';
import StdcmResults from 'applications/stdcm/views/StdcmResults';
import { osrdEditoastApi, type PostStdcmApiResponse } from 'common/api/osrdEditoastApi';
import { osrdEditoastApi } from 'common/api/osrdEditoastApi';
import { useInfraID, useOsrdConfSelectors } from 'common/osrdContext';
import SpeedLimitByTagSelector from 'common/SpeedLimitByTagSelector/SpeedLimitByTagSelector';
import { useStoreDataForSpeedLimitByTagSelector } from 'common/SpeedLimitByTagSelector/useStoreDataForSpeedLimitByTagSelector';
import Itinerary from 'modules/pathfinding/components/Itinerary/Itinerary';
import ItineraryV2 from 'modules/pathfinding/components/Itinerary/ItineraryV2';
import { RollingStockSelector } from 'modules/rollingStock/components/RollingStockSelector';
import { useStoreDataForRollingStockSelector } from 'modules/rollingStock/components/RollingStockSelector/useStoreDataForRollingStockSelector';
import ScenarioExplorer from 'modules/scenario/components/ScenarioExplorer';
import StdcmAllowances from 'modules/stdcmAllowances/components/StdcmAllowances';
import { Map } from 'modules/trainschedule/components/ManageTrainSchedule';
import type { OsrdStdcmConfState } from 'reducers/osrdconf/types';
import { getTrainScheduleV2Activated } from 'reducers/user/userSelectors';

import StdcmResultsV2 from './StdcmResultsV2';

type OSRDStdcmConfigProps = {
currentStdcmRequestStatus: string;
launchStdcmRequest: () => Promise<void>;
stdcmResults?: PostStdcmApiResponse;
stdcmV2Results?: StdcmV2Results | null;
pathProperties?: ManageTrainSchedulePathProperties;
setPathProperties: (pathProperties?: ManageTrainSchedulePathProperties) => void;
Expand All @@ -37,7 +33,6 @@ type OSRDStdcmConfigProps = {
const StdcmConfig = ({
currentStdcmRequestStatus,
launchStdcmRequest,
stdcmResults,
stdcmV2Results,
pathProperties,
setPathProperties,
Expand All @@ -55,7 +50,6 @@ const StdcmConfig = ({
const studyID = useSelector(getStudyID);
const scenarioID = useSelector(getScenarioID);
const timetableID = useSelector(getTimetableID);
const trainScheduleV2Activated = useSelector(getTrainScheduleV2Activated);
const originV2 = useSelector(getOriginV2);
const destinationV2 = useSelector(getDestinationV2);
const infraID = useInfraID();
Expand Down Expand Up @@ -83,12 +77,9 @@ const StdcmConfig = ({
);

const disabledApplyButton = useMemo(() => {
if (trainScheduleV2Activated) {
if (!originV2 || !destinationV2 || !osrdconf.originDate || !osrdconf.destinationDate)
return true;
} else if (!osrdconf.origin || !osrdconf.destination) {
if (!originV2 || !destinationV2 || !osrdconf.originDate || !osrdconf.destinationDate)
return true;
}

return (
infra?.state !== 'CACHED' ||
!(osrdconf.originTime || osrdconf.destinationTime) ||
Expand Down Expand Up @@ -138,15 +129,13 @@ const StdcmConfig = ({
speedLimitsByTags={speedLimitsByTags}
dispatchUpdateSpeedLimitByTag={dispatchUpdateSpeedLimitByTag}
/>
{trainScheduleV2Activated ? (
<ItineraryV2
pathProperties={pathProperties}
setPathProperties={setPathProperties}
shouldManageStopDuration
/>
) : (
<Itinerary />
)}

<ItineraryV2
pathProperties={pathProperties}
setPathProperties={setPathProperties}
shouldManageStopDuration
/>

<RunningTime />
<StdcmAllowances />
<div className="osrd-config-stdcm-apply">
Expand Down Expand Up @@ -195,15 +184,8 @@ const StdcmConfig = ({
)}
</div>
</div>
{!trainScheduleV2Activated && rollingStock && stdcmResults && (
<StdcmResults
mapCanvas={mapCanvas}
stdcmResults={stdcmResults}
rollingStockData={rollingStock}
speedLimitByTag={speedLimitByTag}
/>
)}
{trainScheduleV2Activated && rollingStock && stdcmV2Results && (

{rollingStock && stdcmV2Results && (
<StdcmResultsV2
mapCanvas={mapCanvas}
stdcmV2Results={stdcmV2Results}
Expand Down
Loading
Loading