Skip to content

Commit 5d1a191

Browse files
committed
front: create type StdcmPathStep
Signed-off-by: Clara Ni <[email protected]>
1 parent f91b8ec commit 5d1a191

File tree

14 files changed

+317
-449
lines changed

14 files changed

+317
-449
lines changed

front/src/applications/stdcm/components/StdcmForm/StdcmConfig.tsx

+18-11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { useOsrdConfActions, useOsrdConfSelectors } from 'common/osrdContext';
1010
import useInfraStatus from 'modules/pathfinding/hooks/useInfraStatus';
1111
import { Map } from 'modules/trainschedule/components/ManageTrainSchedule';
1212
import type { StdcmConfSliceActions } from 'reducers/osrdconf/stdcmConf';
13+
import type { StdcmConfSelectors } from 'reducers/osrdconf/stdcmConf/selectors';
1314
import { useAppDispatch } from 'store';
1415

1516
import StdcmConsist from './StdcmConsist';
@@ -50,15 +51,20 @@ const StdcmConfig = ({
5051
updateGridMarginAfter,
5152
updateGridMarginBefore,
5253
updateStdcmStandardAllowance,
53-
updateOriginArrivalType,
54-
updateDestinationArrivalType,
54+
updateStdcmPathStep,
5555
} = useOsrdConfActions() as StdcmConfSliceActions;
5656

57-
const { getOrigin, getDestination, getPathSteps, getProjectID, getScenarioID, getStudyID } =
58-
useOsrdConfSelectors();
59-
const origin = useSelector(getOrigin);
60-
const pathSteps = useSelector(getPathSteps);
61-
const destination = useSelector(getDestination);
57+
const {
58+
getStdcmOrigin,
59+
getStdcmDestination,
60+
getStdcmPathSteps,
61+
getProjectID,
62+
getScenarioID,
63+
getStudyID,
64+
} = useOsrdConfSelectors() as StdcmConfSelectors;
65+
const origin = useSelector(getStdcmOrigin);
66+
const pathSteps = useSelector(getStdcmPathSteps);
67+
const destination = useSelector(getStdcmDestination);
6268
const projectID = useSelector(getProjectID);
6369
const studyID = useSelector(getStudyID);
6470
const scenarioID = useSelector(getScenarioID);
@@ -88,10 +94,10 @@ const StdcmConfig = ({
8894
};
8995

9096
const removeOriginArrivalTime = () => {
91-
dispatch(updateOriginArrivalType(ArrivalTimeTypes.ASAP));
97+
dispatch(updateStdcmPathStep({ ...origin, arrivalType: ArrivalTimeTypes.ASAP }));
9298
};
9399
const removeDestinationArrivalTime = () => {
94-
dispatch(updateDestinationArrivalType(ArrivalTimeTypes.ASAP));
100+
dispatch(updateStdcmPathStep({ ...destination, arrivalType: ArrivalTimeTypes.ASAP }));
95101
};
96102

97103
useEffect(() => {
@@ -139,9 +145,9 @@ const StdcmConfig = ({
139145
<div className="stdcm-simulation-itinerary">
140146
{/* //TODO: use them when we implement this feature #403 */}
141147
{/* <StdcmDefaultCard text="Indiquer le sillon antérieur" Icon={<ArrowUp size="lg" />} /> */}
142-
<StdcmOrigin disabled={disabled} origin={origin} />
148+
<StdcmOrigin disabled={disabled} />
143149
<StdcmVias disabled={disabled} />
144-
<StdcmDestination disabled={disabled} destination={destination} />
150+
<StdcmDestination disabled={disabled} />
145151
{/* <StdcmDefaultCard text="Indiquer le sillon postérieur" Icon={<ArrowDown size="lg" />} /> */}
146152
<div
147153
className={cx('stdcm-launch-request', {
@@ -169,6 +175,7 @@ const StdcmConfig = ({
169175
preventPointSelection
170176
pathGeometry={pathfinding?.geometry}
171177
showStdcmAssets
178+
simulationPathSteps={pathSteps}
172179
/>
173180
</div>
174181
<div />

front/src/applications/stdcm/components/StdcmForm/StdcmDestination.tsx

+38-62
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,66 @@
1-
import { useMemo, useState } from 'react';
1+
import { useMemo } from 'react';
22

33
import { useTranslation } from 'react-i18next';
4+
import { useSelector } from 'react-redux';
45

56
import DestinationIcon from 'assets/pictures/stdcm/destination.svg';
6-
import { useOsrdConfActions } from 'common/osrdContext';
7+
import { useOsrdConfActions, useOsrdConfSelectors } from 'common/osrdContext';
78
import type { StdcmConfSliceActions } from 'reducers/osrdconf/stdcmConf';
8-
import type { PathStep } from 'reducers/osrdconf/types';
9+
import type { StdcmConfSelectors } from 'reducers/osrdconf/stdcmConf/selectors';
910
import { useAppDispatch } from 'store';
1011
import { extractDateAndTimefromISO, generateISODateFromDateTime } from 'utils/date';
1112

1213
import StdcmCard from './StdcmCard';
1314
import StdcmOperationalPoint from './StdcmOperationalPoint';
1415
import StdcmOpSchedule from './StdcmOpSchedule';
1516
import { DEFAULT_TOLERANCE } from '../../consts';
16-
import { ArrivalTimeTypes, type ScheduleConstraint, type StdcmConfigCardProps } from '../../types';
17+
import type { ArrivalTimeTypes, ScheduleConstraint, StdcmConfigCardProps } from '../../types';
1718

18-
const StdcmDestination = ({
19-
disabled = false,
20-
destination,
21-
}: StdcmConfigCardProps & {
22-
destination: PathStep | null;
23-
}) => {
19+
const StdcmDestination = ({ disabled = false }: StdcmConfigCardProps) => {
2420
const { t } = useTranslation('stdcm');
2521
const dispatch = useAppDispatch();
2622

27-
const [arrivalScheduleConstraint, setArrivalScheduleConstraint] = useState<ScheduleConstraint>();
23+
const { getStdcmDestination } = useOsrdConfSelectors() as StdcmConfSelectors;
2824

29-
const {
30-
updateDestination,
31-
updateDestinationArrival,
32-
updateDestinationArrivalType,
33-
updateDestinationTolerances,
34-
} = useOsrdConfActions() as StdcmConfSliceActions;
25+
const destination = useSelector(getStdcmDestination);
26+
27+
const { updateStdcmPathStep } = useOsrdConfActions() as StdcmConfSliceActions;
3528

3629
const { destinationArrival, destinationToleranceValues } = useMemo(
3730
() => ({
38-
destinationArrival: destination?.arrival
31+
destinationArrival: destination.arrival
3932
? extractDateAndTimefromISO(destination.arrival)
4033
: undefined,
4134
destinationToleranceValues: {
42-
arrivalToleranceBefore: destination?.arrivalToleranceBefore || DEFAULT_TOLERANCE,
43-
arrivalToleranceAfter: destination?.arrivalToleranceAfter || DEFAULT_TOLERANCE,
35+
arrivalToleranceBefore: destination.tolerances?.before || DEFAULT_TOLERANCE,
36+
arrivalToleranceAfter: destination.tolerances?.after || DEFAULT_TOLERANCE,
4437
},
4538
}),
4639
[destination]
4740
);
4841

49-
const updateDestinationPoint = (pathStep: PathStep | null) => {
50-
if (!pathStep || !arrivalScheduleConstraint) {
51-
dispatch(updateDestination(pathStep));
52-
} else {
53-
dispatch(
54-
updateDestination({
55-
...pathStep,
56-
arrival: generateISODateFromDateTime(arrivalScheduleConstraint),
57-
})
58-
);
59-
}
60-
};
61-
62-
const onDestinationArrivalChange = (schedule: ScheduleConstraint) => {
63-
setArrivalScheduleConstraint(schedule);
64-
65-
const newOpArrival = generateISODateFromDateTime(schedule);
66-
dispatch(updateDestinationArrival(newOpArrival));
42+
const onArrivalChange = (schedule: ScheduleConstraint) => {
43+
const newPathStep = { ...destination, arrival: generateISODateFromDateTime(schedule) };
44+
dispatch(updateStdcmPathStep(newPathStep));
6745
};
6846

69-
const onDestinationArrivalTypeChange = (arrivalType: ArrivalTimeTypes) => {
70-
dispatch(updateDestinationArrivalType(arrivalType));
47+
const onArrivalTypeChange = (arrivalType: ArrivalTimeTypes) => {
48+
dispatch(updateStdcmPathStep({ ...destination, arrivalType }));
7149
};
7250

73-
const onDestinationToleranceChange = ({
51+
const onToleranceChange = ({
7452
toleranceBefore,
7553
toleranceAfter,
7654
}: {
7755
toleranceBefore: number;
7856
toleranceAfter: number;
7957
}) => {
80-
dispatch(updateDestinationTolerances({ toleranceBefore, toleranceAfter }));
58+
dispatch(
59+
updateStdcmPathStep({
60+
...destination,
61+
tolerances: { before: toleranceBefore, after: toleranceAfter },
62+
})
63+
);
8164
};
8265

8366
return (
@@ -87,26 +70,19 @@ const StdcmDestination = ({
8770
disabled={disabled}
8871
className="extremity"
8972
>
90-
<div className="stdcm-destination">
91-
<StdcmOperationalPoint
92-
updatePoint={updateDestinationPoint}
93-
point={destination}
94-
opPointId={destination?.id || 'destination'}
95-
disabled={disabled}
96-
/>
97-
{destination && (
98-
<StdcmOpSchedule
99-
onArrivalChange={onDestinationArrivalChange}
100-
onArrivalTypeChange={onDestinationArrivalTypeChange}
101-
onArrivalToleranceChange={onDestinationToleranceChange}
102-
opTimingData={destinationArrival}
103-
opToleranceValues={destinationToleranceValues}
104-
opScheduleTimeType={destination?.arrivalType || ArrivalTimeTypes.ASAP}
105-
disabled={disabled}
106-
opId="destination-arrival"
107-
/>
108-
)}
109-
</div>
73+
{'uic' in destination && (
74+
<StdcmOperationalPoint point={destination} opPointId={destination.id} disabled={disabled} />
75+
)}
76+
<StdcmOpSchedule
77+
onArrivalChange={onArrivalChange}
78+
onArrivalTypeChange={onArrivalTypeChange}
79+
onArrivalToleranceChange={onToleranceChange}
80+
opTimingData={destinationArrival}
81+
opToleranceValues={destinationToleranceValues}
82+
opScheduleTimeType={destination.arrivalType}
83+
disabled={disabled}
84+
opId="destination-arrival"
85+
/>
11086
</StdcmCard>
11187
);
11288
};

front/src/applications/stdcm/components/StdcmForm/StdcmOperationalPoint.tsx

+13-15
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ import { useEffect, useMemo } from 'react';
22

33
import { Select, ComboBox } from '@osrd-project/ui-core';
44
import { useTranslation } from 'react-i18next';
5-
import nextId from 'react-id-generator';
65

76
import type { SearchResultItemOperationalPoint } from 'common/api/osrdEditoastApi';
87
import useSearchOperationalPoint from 'common/Map/Search/useSearchOperationalPoint';
9-
import type { PathStep } from 'reducers/osrdconf/types';
8+
import { useOsrdConfActions } from 'common/osrdContext';
9+
import type { StdcmConfSliceActions } from 'reducers/osrdconf/stdcmConf';
10+
import type { StdcmPathStep } from 'reducers/osrdconf/types';
11+
import { useAppDispatch } from 'store';
1012
import { normalized } from 'utils/strings';
1113
import { createFixedSelectOptions } from 'utils/uiCoreHelpers';
1214

1315
type StdcmOperationalPointProps = {
14-
updatePoint: (pathStep: PathStep | null) => void;
15-
point: PathStep | null;
16+
point: StdcmPathStep;
1617
opPointId: string;
1718
disabled?: boolean;
1819
};
@@ -23,16 +24,14 @@ function formatChCode(chCode: string) {
2324
return chCode === '' ? 'BV' : chCode;
2425
}
2526

26-
const StdcmOperationalPoint = ({
27-
updatePoint,
28-
point,
29-
opPointId,
30-
disabled,
31-
}: StdcmOperationalPointProps) => {
27+
const StdcmOperationalPoint = ({ point, opPointId, disabled }: StdcmOperationalPointProps) => {
3228
const { t } = useTranslation('stdcm');
29+
const dispatch = useAppDispatch();
3330

3431
const { searchTerm, chCodeFilter, sortedSearchResults, setSearchTerm, setChCodeFilter } =
35-
useSearchOperationalPoint({ initialSearchTerm: point?.name, initialChCodeFilter: point?.ch });
32+
useSearchOperationalPoint({ initialSearchTerm: point.name, initialChCodeFilter: point.ch });
33+
34+
const { updateStdcmPathStep } = useOsrdConfActions() as StdcmConfSliceActions;
3635

3736
const operationalPointsSuggestions = useMemo(
3837
() =>
@@ -76,17 +75,16 @@ const StdcmOperationalPoint = ({
7675
);
7776

7877
const dispatchNewPoint = (p?: SearchResultItemOperationalPoint) => {
79-
if (p && p.ch === point?.ch && 'uic' in point && p.uic === point?.uic) return;
78+
if (p && p.ch === point.ch && 'uic' in point && p.uic === point.uic) return;
8079
const newPoint = p
8180
? {
8281
name: p.name,
8382
ch: p.ch,
84-
id: point?.id || nextId(),
8583
uic: p.uic,
8684
coordinates: p.geographic.coordinates,
8785
}
88-
: null;
89-
updatePoint(newPoint);
86+
: { name: undefined, ch: undefined, uic: -1, coordinates: undefined };
87+
dispatch(updateStdcmPathStep({ ...point, ...newPoint }));
9088
};
9189

9290
const updateSelectedPoint = (

0 commit comments

Comments
 (0)