Skip to content

Commit da5a617

Browse files
committed
front: update stdcmEnvironment when selecting a new scenario
Signed-off-by: Clara Ni <clara.ni@outlook.fr>
1 parent 5b98233 commit da5a617

File tree

5 files changed

+51
-63
lines changed

5 files changed

+51
-63
lines changed

front/src/applications/stdcm/components/StdcmSimulationParams.tsx

-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import { useTranslation } from 'react-i18next';
2-
import { useSelector } from 'react-redux';
32

43
import ScenarioExplorer from 'modules/scenario/components/ScenarioExplorer';
54
import StdcmAllowances from 'modules/stdcmAllowances/components/StdcmAllowances';
6-
import { getStdcmTimetableID } from 'reducers/osrdconf/stdcmConf/selectors';
75

86
import StdcmCard from './StdcmForm/StdcmCard';
97

@@ -22,8 +20,6 @@ const StdcmSimulationParams = ({
2220
}: StdcmSimulationParamsProps) => {
2321
const { t } = useTranslation('stdcm');
2422

25-
const timetableId = useSelector(getStdcmTimetableID);
26-
2723
return (
2824
<StdcmCard name={t('debug.simulationSettings')} disabled={disabled}>
2925
<div className="d-flex stdcm-simulation-params">
@@ -33,7 +29,6 @@ const StdcmSimulationParams = ({
3329
globalStudyId={studyID}
3430
globalScenarioId={scenarioID}
3531
displayImgProject={false}
36-
timetableId={timetableId}
3732
/>
3833
</div>
3934
<div className="stdcm-allowances ml-2">

front/src/modules/scenario/components/ScenarioExplorer/MiniCards.tsx

+39-22
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,36 @@ import { useContext } from 'react';
22

33
import cx from 'classnames';
44

5-
import type {
6-
ProjectWithStudies,
7-
ScenarioWithDetails,
8-
StudyWithScenarios,
5+
import {
6+
osrdEditoastApi,
7+
type ProjectWithStudies,
8+
type ScenarioWithDetails,
9+
type StudyWithScenarios,
910
} from 'common/api/osrdEditoastApi';
1011
import { ModalContext } from 'common/BootstrapSNCF/ModalSNCF/ModalProvider';
11-
import { useOsrdConfActions } from 'common/osrdContext';
12+
import { getScenarioDatetimeWindow } from 'modules/scenario/helpers/utils';
13+
import { updateStdcmEnvironment } from 'reducers/osrdconf/stdcmConf';
1214
import { useAppDispatch } from 'store';
1315

1416
import Project2Image from './ScenarioExplorerProject2Image';
1517

1618
type MiniCardProps = {
1719
isSelected?: boolean;
18-
setSelectedID: (arg0?: number) => void;
1920
};
2021

21-
interface MiniCardProjectProps extends MiniCardProps {
22+
type MiniCardProjectProps = MiniCardProps & {
2223
project: ProjectWithStudies;
23-
}
24-
interface MiniCardStudyProps extends MiniCardProps {
24+
setSelectedID: (id: number) => void;
25+
};
26+
type MiniCardStudyProps = MiniCardProps & {
2527
study: StudyWithScenarios;
26-
}
27-
interface MiniCardScenarioProps extends MiniCardProps {
28+
setSelectedID: (id: number) => void;
29+
};
30+
type MiniCardScenarioProps = MiniCardProps & {
2831
scenario: ScenarioWithDetails;
2932
projectID: number;
3033
studyID: number;
31-
}
34+
};
3235

3336
export const ProjectMiniCard = ({ project, setSelectedID, isSelected }: MiniCardProjectProps) => (
3437
<div
@@ -71,24 +74,38 @@ export const StudyMiniCard = ({ study, setSelectedID, isSelected }: MiniCardStud
7174

7275
export const ScenarioMiniCard = ({
7376
scenario,
74-
setSelectedID,
7577
isSelected,
7678
projectID,
7779
studyID,
7880
}: MiniCardScenarioProps) => {
7981
const dispatch = useAppDispatch();
8082
const { closeModal } = useContext(ModalContext);
81-
const { updateInfraID, updateProjectID, updateScenarioID, updateStudyID, updateTimetableID } =
82-
useOsrdConfActions();
83-
const selectScenario = () => {
84-
setSelectedID(scenario.id);
85-
dispatch(updateProjectID(projectID));
86-
dispatch(updateStudyID(studyID));
87-
dispatch(updateScenarioID(scenario.id));
88-
dispatch(updateInfraID(scenario.infra_id));
89-
dispatch(updateTimetableID(scenario.timetable_id));
83+
84+
const [getTimetableTrainSchedules] =
85+
osrdEditoastApi.endpoints.getAllTimetableByIdTrainSchedules.useLazyQuery();
86+
87+
const selectScenario = async () => {
88+
const trainSchedules = await getTimetableTrainSchedules({
89+
timetableId: scenario.timetable_id,
90+
}).unwrap();
91+
92+
const scenarioDateTimeWindow = getScenarioDatetimeWindow(trainSchedules);
93+
94+
dispatch(
95+
updateStdcmEnvironment({
96+
infraID: scenario.infra_id,
97+
timetableID: scenario.timetable_id,
98+
electricalProfileSetId: scenario.electrical_profile_set_id,
99+
searchDatetimeWindow: scenarioDateTimeWindow,
100+
projectID,
101+
studyID,
102+
scenarioID: scenario.id,
103+
})
104+
);
105+
90106
closeModal();
91107
};
108+
92109
return (
93110
<div
94111
className={cx('minicard', 'scenario', {

front/src/modules/scenario/components/ScenarioExplorer/ScenarioExplorer.tsx

+1-30
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ import { getDocument } from 'common/api/documentApi';
1212
import { osrdEditoastApi } from 'common/api/osrdEditoastApi';
1313
import { useModal } from 'common/BootstrapSNCF/ModalSNCF';
1414
import { LoaderFill } from 'common/Loaders';
15-
import { getScenarioDatetimeWindow } from 'modules/scenario/helpers/utils';
16-
import { updateStdcmEnvironment } from 'reducers/osrdconf/stdcmConf';
17-
import { useAppDispatch } from 'store';
1815

1916
import ScenarioExplorerModal, { type ScenarioExplorerProps } from './ScenarioExplorerModal';
2017

@@ -23,13 +20,10 @@ const ScenarioExplorer = ({
2320
globalStudyId,
2421
globalScenarioId,
2522
displayImgProject = true,
26-
timetableId,
2723
}: ScenarioExplorerProps & {
2824
displayImgProject?: boolean;
29-
timetableId: number | undefined;
3025
}) => {
3126
const { t } = useTranslation('common/scenarioExplorer');
32-
const dispatch = useAppDispatch();
3327
const { openModal } = useModal();
3428
const [imageUrl, setImageUrl] = useState<string>();
3529

@@ -57,13 +51,6 @@ const ScenarioExplorer = ({
5751
}
5852
);
5953

60-
const { data: timetable } = osrdEditoastApi.endpoints.getAllTimetableByIdTrainSchedules.useQuery(
61-
{ timetableId: timetableId! },
62-
{
63-
skip: !timetableId,
64-
}
65-
);
66-
6754
const getProjectImage = async (imageId: number) => {
6855
try {
6956
const blobImage = await getDocument(imageId);
@@ -73,22 +60,6 @@ const ScenarioExplorer = ({
7360
}
7461
};
7562

76-
useEffect(() => {
77-
if (scenario && timetable) {
78-
const scenarioDateTimeWindow = getScenarioDatetimeWindow(timetable);
79-
80-
// We also set the stdcm environment in case we select a scenario from the stdcm interface.
81-
dispatch(
82-
updateStdcmEnvironment({
83-
infraID: scenario.infra_id,
84-
timetableID: scenario.timetable_id,
85-
electricalProfileSetId: scenario.electrical_profile_set_id,
86-
searchDatetimeWindow: scenarioDateTimeWindow,
87-
})
88-
);
89-
}
90-
}, [timetable]);
91-
9263
useEffect(() => {
9364
if (projectDetails?.image) {
9465
getProjectImage(projectDetails?.image);
@@ -161,7 +132,7 @@ const ScenarioExplorer = ({
161132
</span>
162133

163134
<span className="scenario-explorator-card-head-scenario-traincount">
164-
{timetable && timetable.length}
135+
{scenario.trains_count}
165136
<MdTrain />
166137
</span>
167138
</div>

front/src/modules/scenario/components/ScenarioExplorer/ScenarioExplorerModal.tsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,8 @@ const ScenarioExplorerModal = ({
3434
const { t } = useTranslation('common/scenarioExplorer');
3535
const dispatch = useAppDispatch();
3636

37-
const [projectID, setProjectID] = useState<number | undefined>(globalProjectId);
38-
const [studyID, setStudyID] = useState<number | undefined>(globalStudyId);
39-
const [scenarioID, setScenarioID] = useState<number | undefined>(globalScenarioId);
37+
const [projectID, setProjectID] = useState(globalProjectId);
38+
const [studyID, setStudyID] = useState(globalStudyId);
4039
const [studiesList, setStudiesList] = useState<StudyWithScenarios[]>();
4140
const [scenariosList, setScenariosList] = useState<ScenarioWithDetails[]>();
4241

@@ -173,8 +172,7 @@ const ScenarioExplorerModal = ({
173172
scenariosList.map((scenario) => (
174173
<ScenarioMiniCard
175174
scenario={scenario}
176-
setSelectedID={setScenarioID}
177-
isSelected={scenario.id === scenarioID}
175+
isSelected={scenario.id === globalScenarioId}
178176
projectID={projectID}
179177
studyID={studyID}
180178
key={`scenario-explorator-modal-${scenario.id}`}

front/src/reducers/osrdconf/stdcmConf/index.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,10 @@ export const stdcmConfSlice = createSlice({
145145
| 'electricalProfileSetId'
146146
| 'workScheduleGroupId'
147147
| 'temporarySpeedLimitGroupId'
148-
| 'searchDatetimeWindow',
148+
| 'searchDatetimeWindow'
149+
| 'projectID'
150+
| 'studyID'
151+
| 'scenarioID',
149152
'infraID' | 'timetableID'
150153
>
151154
>
@@ -158,6 +161,10 @@ export const stdcmConfSlice = createSlice({
158161
state.workScheduleGroupId = action.payload.workScheduleGroupId;
159162
state.temporarySpeedLimitGroupId = action.payload.temporarySpeedLimitGroupId;
160163

164+
state.projectID = action.payload.projectID;
165+
state.studyID = action.payload.studyID;
166+
state.scenarioID = action.payload.scenarioID;
167+
161168
// check that the arrival dates are in the search time window
162169
const origin = state.stdcmPathSteps.at(0) as Extract<StdcmPathStep, { isVia: false }>;
163170
const destination = state.stdcmPathSteps.at(-1) as Extract<StdcmPathStep, { isVia: false }>;

0 commit comments

Comments
 (0)