Skip to content

Commit b8af3cb

Browse files
committed
front: remove opTimingData from StdcmOpSchedule and simplify date management
Signed-off-by: Clara Ni <[email protected]>
1 parent 20d51e7 commit b8af3cb

File tree

4 files changed

+27
-73
lines changed

4 files changed

+27
-73
lines changed

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

+1-16
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import { useMemo } from 'react';
2-
31
import { useTranslation } from 'react-i18next';
42
import { useSelector } from 'react-redux';
53

6-
import { getTimesInfoFromDate } from 'applications/stdcm/utils';
74
import DestinationIcon from 'assets/pictures/mapMarkers/destination.svg';
85
import { useOsrdConfSelectors } from 'common/osrdContext';
96
import type { StdcmConfSelectors } from 'reducers/osrdconf/stdcmConf/selectors';
@@ -20,13 +17,6 @@ const StdcmDestination = ({ disabled = false }: StdcmConfigCardProps) => {
2017

2118
const destination = useSelector(getStdcmDestination);
2219

23-
const { destinationArrival } = useMemo(
24-
() => ({
25-
destinationArrival: getTimesInfoFromDate(destination.arrival),
26-
}),
27-
[destination]
28-
);
29-
3020
return (
3121
<StdcmCard
3222
data-testid="destination-card"
@@ -40,12 +30,7 @@ const StdcmDestination = ({ disabled = false }: StdcmConfigCardProps) => {
4030
pathStepId={destination.id}
4131
disabled={disabled}
4232
/>
43-
<StdcmOpSchedule
44-
pathStep={destination}
45-
opTimingData={destinationArrival}
46-
disabled={disabled}
47-
opId="destination-arrival"
48-
/>
33+
<StdcmOpSchedule pathStep={destination} disabled={disabled} opId="destination-arrival" />
4934
</StdcmCard>
5035
);
5136
};

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

+23-38
Original file line numberDiff line numberDiff line change
@@ -8,60 +8,40 @@ import { useOsrdConfActions, useOsrdConfSelectors } from 'common/osrdContext';
88
import type { StdcmConfSliceActions } from 'reducers/osrdconf/stdcmConf';
99
import type { StdcmPathStep } from 'reducers/osrdconf/types';
1010
import { useAppDispatch } from 'store';
11-
import { formatDateString, isArrivalDateInSearchTimeWindow } from 'utils/date';
11+
import { dateToHHMMSS, formatDateString } from 'utils/date';
1212
import { createStringSelectOptions } from 'utils/uiCoreHelpers';
1313

1414
import type { ArrivalTimeTypes, ScheduleConstraint } from '../../types';
1515

1616
type StdcmOpScheduleProps = {
1717
disabled: boolean;
1818
pathStep: Extract<StdcmPathStep, { isVia: false }>;
19-
opTimingData?: {
20-
date: Date;
21-
arrivalDate: string;
22-
arrivalTime: string;
23-
arrivalTimeHours: number;
24-
arrivalTimeMinutes: number;
25-
};
2619
opId: string;
2720
isOrigin?: boolean;
2821
};
2922

30-
const defaultDate = (date?: Date) => {
31-
const newDate = date ? new Date(date) : new Date();
32-
newDate.setHours(0, 0, 0);
33-
return newDate;
34-
};
35-
36-
const StdcmOpSchedule = ({
37-
disabled,
38-
pathStep,
39-
opTimingData,
40-
opId,
41-
isOrigin = false,
42-
}: StdcmOpScheduleProps) => {
23+
const StdcmOpSchedule = ({ disabled, pathStep, opId, isOrigin = false }: StdcmOpScheduleProps) => {
4324
const { t } = useTranslation('stdcm');
4425
const dispatch = useAppDispatch();
4526

4627
const { updateStdcmPathStep } = useOsrdConfActions() as StdcmConfSliceActions;
4728
const { getSearchDatetimeWindow } = useOsrdConfSelectors();
4829
const searchDatetimeWindow = useSelector(getSearchDatetimeWindow);
4930

50-
const { arrivalDate, arrivalTime, arrivalTimeHours, arrivalTimeMinutes } = useMemo(() => {
51-
const isArrivalDateValid =
52-
opTimingData?.arrivalDate &&
53-
isArrivalDateInSearchTimeWindow(opTimingData.date, searchDatetimeWindow);
54-
31+
const { arrivalTime, arrivalTimeHours, arrivalTimeMinutes } = useMemo(() => {
32+
if (!pathStep.arrival) {
33+
return {
34+
arrivalTime: undefined,
35+
arrivalTimeHours: undefined,
36+
arrivalTimeMinutes: undefined,
37+
};
38+
}
5539
return {
56-
arrivalDate:
57-
opTimingData && isArrivalDateValid
58-
? opTimingData.date
59-
: defaultDate(searchDatetimeWindow?.begin),
60-
arrivalTime: opTimingData?.arrivalTime,
61-
arrivalTimeHours: opTimingData?.arrivalTimeHours,
62-
arrivalTimeMinutes: opTimingData?.arrivalTimeMinutes,
40+
arrivalTime: dateToHHMMSS(pathStep.arrival, { withoutSeconds: true }),
41+
arrivalTimeHours: pathStep.arrival.getHours(),
42+
arrivalTimeMinutes: pathStep.arrival.getMinutes(),
6343
};
64-
}, [opTimingData, searchDatetimeWindow]);
44+
}, [pathStep.arrival]);
6545

6646
const tolerances = useMemo(
6747
() => ({
@@ -94,11 +74,12 @@ const StdcmOpSchedule = ({
9474
);
9575

9676
const onArrivalChange = ({ date, hours, minutes }: ScheduleConstraint) => {
97-
date.setHours(hours, minutes);
77+
const newDate = new Date(date);
78+
newDate.setHours(hours, minutes);
9879
dispatch(
9980
updateStdcmPathStep({
10081
id: pathStep.id,
101-
updates: { arrival: date },
82+
updates: { arrival: newDate },
10283
})
10384
);
10485
};
@@ -137,7 +118,7 @@ const StdcmOpSchedule = ({
137118
disabled,
138119
}}
139120
selectableSlot={selectableSlot}
140-
value={arrivalDate}
121+
value={pathStep.arrival}
141122
onDateChange={(e) => {
142123
onArrivalChange({
143124
date: e,
@@ -153,7 +134,11 @@ const StdcmOpSchedule = ({
153134
hours={arrivalTimeHours}
154135
minutes={arrivalTimeMinutes}
155136
onTimeChange={({ hours, minutes }) => {
156-
onArrivalChange({ date: arrivalDate, hours, minutes });
137+
onArrivalChange({
138+
date: pathStep.arrival || searchDatetimeWindow!.begin,
139+
hours,
140+
minutes,
141+
});
157142
}}
158143
disabled={disabled}
159144
value={arrivalTime}

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

+1-17
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import { useMemo } from 'react';
2-
31
import { useTranslation } from 'react-i18next';
42
import { useSelector } from 'react-redux';
53

6-
import { getTimesInfoFromDate } from 'applications/stdcm/utils';
74
import OriginIcon from 'assets/pictures/mapMarkers/start.svg';
85
import { useOsrdConfSelectors } from 'common/osrdContext';
96
import type { StdcmConfSelectors } from 'reducers/osrdconf/stdcmConf/selectors';
@@ -19,13 +16,6 @@ const StdcmOrigin = ({ disabled = false }: StdcmConfigCardProps) => {
1916
const { getStdcmOrigin } = useOsrdConfSelectors() as StdcmConfSelectors;
2017
const origin = useSelector(getStdcmOrigin);
2118

22-
const { originArrival } = useMemo(
23-
() => ({
24-
originArrival: getTimesInfoFromDate(origin.arrival),
25-
}),
26-
[origin]
27-
);
28-
2919
return (
3020
<StdcmCard
3121
name={t('trainPath.origin')}
@@ -39,13 +29,7 @@ const StdcmOrigin = ({ disabled = false }: StdcmConfigCardProps) => {
3929
pathStepId={origin.id}
4030
disabled={disabled}
4131
/>
42-
<StdcmOpSchedule
43-
pathStep={origin}
44-
opTimingData={originArrival}
45-
disabled={disabled}
46-
opId="origin-arrival"
47-
isOrigin
48-
/>
32+
<StdcmOpSchedule pathStep={origin} disabled={disabled} opId="origin-arrival" isOrigin />
4933
</StdcmCard>
5034
);
5135
};

front/tests/utils/setup-utils.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ export async function createDataForTests(): Promise<void> {
177177

178178
const stdcmEnvironment = {
179179
infra_id: smallInfra.id,
180-
search_window_begin: '2024-10-17T00:00:01',
181-
search_window_end: '2024-10-18T23:59:59',
180+
search_window_begin: '2024-10-17T00:00:01+02:00',
181+
search_window_end: '2024-10-18T23:59:59+02:00',
182182
timetable_id: scenarioTrainSchedule.timetable_id,
183183
} as StdcmSearchEnvironment;
184184

0 commit comments

Comments
 (0)