Skip to content

Commit c0f0025

Browse files
committed
fixup! front: select op with map when add train
1 parent ea07f17 commit c0f0025

File tree

3 files changed

+52
-46
lines changed

3 files changed

+52
-46
lines changed

front/src/modules/trainschedule/components/ManageTrainSchedule/ManageTrainScheduleMap/RenderPopup.tsx

+52-39
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import React, { useEffect, useState, useMemo } from 'react';
44

55
import { Select } from '@osrd-project/ui-core';
66
import { point } from '@turf/helpers';
7-
87
import { useTranslation } from 'react-i18next';
98
import { IoFlag } from 'react-icons/io5';
109
import { RiMapPin2Fill, RiMapPin3Fill } from 'react-icons/ri';
@@ -17,12 +16,7 @@ import type { TrackSectionEntity } from 'applications/editor/tools/trackEdition/
1716
import { calculateDistanceAlongTrack } from 'applications/editor/tools/utils';
1817
import { useScenarioContext } from 'applications/operationalStudies/hooks/useScenarioContext';
1918
import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types';
20-
import {
21-
osrdEditoastApi,
22-
type OperationalPoint,
23-
type OperationalPointReference,
24-
type TrackReference,
25-
} from 'common/api/osrdEditoastApi';
19+
import { osrdEditoastApi, type OperationalPoint } from 'common/api/osrdEditoastApi';
2620
import { useOsrdConfActions, useOsrdConfSelectors } from 'common/osrdContext';
2721
import { setPointIti } from 'modules/trainschedule/components/ManageTrainSchedule/ManageTrainScheduleMap/setPointIti';
2822
import { type PathStep } from 'reducers/osrdconf/types';
@@ -38,8 +32,6 @@ type RenderPopupProps = {
3832
pathProperties?: ManageTrainSchedulePathProperties;
3933
};
4034

41-
type SelectOp = Extract<OperationalPointReference, { uic: number }> & { coordinates: number[] };
42-
4335
function RenderPopup({ pathProperties }: RenderPopupProps) {
4436
const { getFeatureInfoClick, getInfraID, getOrigin, getDestination } = useOsrdConfSelectors();
4537
const osrdConfActions = useOsrdConfActions();
@@ -58,11 +50,16 @@ function RenderPopup({ pathProperties }: RenderPopupProps) {
5850
const { getTrackSectionsByIds } = useScenarioContext();
5951

6052
const [trackOffset, setTrackOffset] = useState(0);
61-
const [trackSelected, setTrackSelected] = useState<TrackReference>();
62-
const [selectOp, setSelectedOp] = useState<any>();
63-
const [trackOptions, setTrackOptions] = useState<(TrackReference & { coordinates: number[] })[]>(
64-
[]
65-
);
53+
54+
const [clickedOp, setClickedOp] = useState<
55+
PathStep & {
56+
tracks: {
57+
trackName: string;
58+
coordinates: number[];
59+
isSelected: boolean;
60+
}[];
61+
}
62+
>();
6663

6764
const [getTrackEntity] =
6865
osrdEditoastApi.endpoints.postInfraByInfraIdObjectsAndObjectType.useLazyQuery();
@@ -76,12 +73,12 @@ function RenderPopup({ pathProperties }: RenderPopupProps) {
7673
)
7774
return;
7875

79-
const trackId = featureInfoClick.feature.properties.id;
76+
const objectId = featureInfoClick.feature.properties.id;
8077

8178
const result = await getTrackEntity({
8279
infraId: infraId!,
8380
objectType: isOperationalPoint ? 'OperationalPoint' : 'TrackSection',
84-
body: [trackId],
81+
body: [objectId],
8582
}).unwrap();
8683

8784
if (!result.length) {
@@ -90,32 +87,34 @@ function RenderPopup({ pathProperties }: RenderPopupProps) {
9087
}
9188

9289
if (isOperationalPoint) {
90+
const trackId = featureInfoClick.feature.properties.track_id;
91+
const clickedTrack = await getTrackEntity({
92+
infraId: infraId!,
93+
objectType: 'TrackSection',
94+
body: [trackId],
95+
}).unwrap();
96+
9397
const { parts } = result[0].railjson as OperationalPoint;
9498
const trackIds = parts.map((part) => part.track);
95-
9699
const tracks = await getTrackSectionsByIds(trackIds);
97100

98101
const trackPartCoordinates = parts.map((step) => {
99102
const track = tracks[step.track];
100-
101103
return {
104+
trackName: track.extensions?.sncf?.track_name as string,
102105
coordinates: getPointCoordinates(track.geo, track.length, step.position),
103-
track_name: track.extensions?.sncf?.track_name as string,
106+
isSelected: step.track === clickedTrack[0].obj_id,
104107
};
105108
});
106109

107-
setSelectedOp({
110+
setClickedOp({
111+
id: nextId(),
108112
secondary_code: result[0].railjson.extensions.sncf.ch,
109113
uic: result[0].railjson.extensions.identifier.uic,
110-
track_reference: trackSelected,
111-
coordinates: featureInfoClick.coordinates.slice(0, 2),
114+
tracks: trackPartCoordinates,
112115
});
113-
114-
setTrackOptions(trackPartCoordinates);
115-
}
116-
117-
setTrackSelected(undefined);
118-
if (!isOperationalPoint) {
116+
} else {
117+
setClickedOp(undefined);
119118
// if operationnalPoint we already have coordinates
120119
const trackEntity = editoastToEditorEntity<TrackSectionEntity>(result[0], 'TrackSection');
121120
const offset = calculateDistanceAlongTrack(
@@ -144,10 +143,9 @@ function RenderPopup({ pathProperties }: RenderPopupProps) {
144143
const coordinates = featureInfoClick.coordinates.slice(0, 2);
145144

146145
let pathStepProperties: PathStep;
147-
if (isOperationalPoint && selectOp) {
146+
if (isOperationalPoint && clickedOp) {
148147
pathStepProperties = {
149-
id: nextId(),
150-
...selectOp,
148+
...clickedOp,
151149
};
152150
} else {
153151
pathStepProperties = {
@@ -165,8 +163,6 @@ function RenderPopup({ pathProperties }: RenderPopupProps) {
165163
} as PathStep;
166164
}
167165

168-
console.log(trackSelected, 'trackSelected');
169-
170166
return (
171167
<Popup
172168
longitude={coordinates[0]}
@@ -191,14 +187,31 @@ function RenderPopup({ pathProperties }: RenderPopupProps) {
191187
</div>
192188
</div>
193189

194-
{isOperationalPoint && trackOptions && (
190+
{isOperationalPoint && clickedOp?.tracks && (
195191
<Select
196-
getOptionLabel={(option) => option.track_name}
197-
getOptionValue={(option) => option.track_name}
192+
getOptionLabel={(option) => option.trackName}
193+
getOptionValue={(option) => option.trackName}
198194
id="select-track"
199-
onChange={(selectedOption) => setTrackSelected(selectedOption)}
200-
options={trackOptions}
201-
value={trackSelected}
195+
onChange={(selectedOption) => {
196+
const updatedTracks = clickedOp.tracks.map((track) => {
197+
if (track.trackName === selectedOption?.trackName) {
198+
return {
199+
...track,
200+
isSelected: true,
201+
};
202+
}
203+
if (track.isSelected) {
204+
return {
205+
...track,
206+
isSelected: false,
207+
};
208+
}
209+
return track;
210+
});
211+
setClickedOp({ ...clickedOp, tracks: updatedTracks });
212+
}}
213+
options={clickedOp.tracks}
214+
value={clickedOp.tracks.find((track) => track.isSelected === true) || clickedOp.tracks[0]}
202215
/>
203216
)}
204217

front/src/modules/trainschedule/components/ManageTrainSchedule/Map.tsx

-5
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,6 @@ const Map = ({
150150
result.feature.properties.id &&
151151
(result.feature.geometry.type === 'LineString' || result.feature.geometry.type === 'Point')
152152
) {
153-
//
154-
if (result.feature.geometry.type === 'Point') {
155-
console.log('Click on PR in Map.tsx');
156-
}
157-
//
158153
dispatch(
159154
updateFeatureInfoClick({
160155
displayPopup: true,

front/src/reducers/osrdconf/helpers.ts

-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ export const insertViaFromMap = (
2222
)
2323
return pathSteps;
2424

25-
console.log(newVia, ' : le nouveau via');
26-
2725
const origin = pathSteps[0];
2826
const destination = last(pathSteps);
2927
let newStep;

0 commit comments

Comments
 (0)