diff --git a/front/src/applications/stdcmV2/components/StdcmDestination.tsx b/front/src/applications/stdcmV2/components/StdcmDestination.tsx index a15eb35b25c..fa67259671f 100644 --- a/front/src/applications/stdcmV2/components/StdcmDestination.tsx +++ b/front/src/applications/stdcmV2/components/StdcmDestination.tsx @@ -1,4 +1,4 @@ -import { useEffect, useMemo } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -8,12 +8,12 @@ import type { StdcmConfSliceActions } from 'reducers/osrdconf/stdcmConf'; import type { PathStep } from 'reducers/osrdconf/types'; import { useAppDispatch } from 'store'; import { replaceElementAtIndex } from 'utils/array'; -import { extractDateAndTimefromISO } from 'utils/date'; +import { extractDateAndTimefromISO, generateISODateFromDateTime } from 'utils/date'; import StdcmCard from './StdcmCard'; import StdcmOperationalPoint from './StdcmOperationalPoint'; import StdcmOpSchedule from './StdcmOpSchedule'; -import { ArrivalTimeTypes, type StdcmConfigCardProps } from '../types'; +import { ArrivalTimeTypes, type ScheduleConstraint, type StdcmConfigCardProps } from '../types'; const StdcmDestination = ({ setCurrentSimulationInputs, @@ -24,6 +24,11 @@ const StdcmDestination = ({ }) => { const { t } = useTranslation('stdcm'); const dispatch = useAppDispatch(); + + const [arrivalScheduleConstraint, setArrivalScheduleConstraint] = useState< + ScheduleConstraint | undefined + >(); + const { updateDestination, updateDestinationArrival, @@ -58,11 +63,23 @@ const StdcmDestination = ({ }, [destination]); const updateDestinationPoint = (pathStep: PathStep | null) => { - dispatch(updateDestination(pathStep)); + if (!pathStep || !arrivalScheduleConstraint) { + dispatch(updateDestination(pathStep)); + } else { + dispatch( + updateDestination({ + ...pathStep, + arrival: generateISODateFromDateTime(arrivalScheduleConstraint), + }) + ); + } }; - const onDestinationArrivalChange = (arrival: string) => { - dispatch(updateDestinationArrival(arrival)); + const onDestinationArrivalChange = (schedule: ScheduleConstraint) => { + setArrivalScheduleConstraint(schedule); + + const newOpArrival = generateISODateFromDateTime(schedule); + dispatch(updateDestinationArrival(newOpArrival)); }; const onDestinationArrivalTypeChange = (arrivalType: ArrivalTimeTypes) => { diff --git a/front/src/applications/stdcmV2/components/StdcmOpSchedule.tsx b/front/src/applications/stdcmV2/components/StdcmOpSchedule.tsx index 922089d7eda..1e30ff8c827 100644 --- a/front/src/applications/stdcmV2/components/StdcmOpSchedule.tsx +++ b/front/src/applications/stdcmV2/components/StdcmOpSchedule.tsx @@ -6,13 +6,13 @@ import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { useOsrdConfSelectors } from 'common/osrdContext'; -import { formatLocaleDateToIsoDate, isArrivalDateInSearchTimeWindow } from 'utils/date'; +import { isArrivalDateInSearchTimeWindow } from 'utils/date'; -import type { ArrivalTimeTypes } from '../types'; +import type { ArrivalTimeTypes, ScheduleConstraint } from '../types'; type StdcmOpScheduleProps = { disabled: boolean; - onArrivalChange: (arrival: string) => void; + onArrivalChange: ({ date, hours, minutes }: ScheduleConstraint) => void; onArrivalTypeChange: (arrivalType: ArrivalTimeTypes) => void; onArrivalToleranceChange: ({ toleranceBefore, @@ -77,13 +77,6 @@ const StdcmOpSchedule = ({ }; }, [opTimingData, opToleranceValues, searchDatetimeWindow]); - const updateOpArrival = (date: Date, { hours, minutes }: { hours: number; minutes: number }) => { - date.setHours(hours); - date.setMinutes(minutes); - const newOpArrival = formatLocaleDateToIsoDate(date); - onArrivalChange(newOpArrival); - }; - return (