From 765aa6be57b74e7a250a5892c7545a3f360cf90d Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 24 Feb 2025 15:24:32 +0100 Subject: [PATCH 1/2] front: use Duration in StdcmPathStep tolerances Improves type safety. Signed-off-by: Simon Ser --- .../stdcm/components/StdcmForm/StdcmOpSchedule.tsx | 12 +++++++++--- .../StdcmResults/SimulationReportSheet.tsx | 9 ++++----- .../src/applications/stdcm/utils/formatStdcmConf.ts | 4 ++-- front/src/reducers/osrdconf/stdcmConf/index.ts | 3 ++- .../osrdconf/stdcmConf/stdcmConfReducers.spec.ts | 9 +++++---- front/src/reducers/osrdconf/types.ts | 2 +- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/front/src/applications/stdcm/components/StdcmForm/StdcmOpSchedule.tsx b/front/src/applications/stdcm/components/StdcmForm/StdcmOpSchedule.tsx index 04be718fc60..0dc025d6a75 100644 --- a/front/src/applications/stdcm/components/StdcmForm/StdcmOpSchedule.tsx +++ b/front/src/applications/stdcm/components/StdcmForm/StdcmOpSchedule.tsx @@ -9,6 +9,7 @@ import { getSearchDatetimeWindow } from 'reducers/osrdconf/stdcmConf/selectors'; import type { StdcmPathStep } from 'reducers/osrdconf/types'; import { useAppDispatch } from 'store'; import { formatDateString } from 'utils/date'; +import { Duration } from 'utils/duration'; import { createStringSelectOptions } from 'utils/uiCoreHelpers'; import type { ArrivalTimeTypes, ScheduleConstraint } from '../../types'; @@ -41,8 +42,8 @@ const StdcmOpSchedule = ({ disabled, pathStep, opId, isOrigin = false }: StdcmOp const tolerances = useMemo( () => ({ - minusTolerance: pathStep.tolerances.before, - plusTolerance: pathStep.tolerances.after, + minusTolerance: pathStep.tolerances.before.total('second'), + plusTolerance: pathStep.tolerances.after.total('second'), }), [pathStep.tolerances] ); @@ -148,7 +149,12 @@ const StdcmOpSchedule = ({ disabled, pathStep, opId, isOrigin = false }: StdcmOp dispatch( updateStdcmPathStep({ id: pathStep.id, - updates: { tolerances: { before: minusTolerance, after: plusTolerance } }, + updates: { + tolerances: { + before: new Duration({ seconds: minusTolerance }), + after: new Duration({ seconds: plusTolerance }), + }, + }, }) ); }} diff --git a/front/src/applications/stdcm/components/StdcmResults/SimulationReportSheet.tsx b/front/src/applications/stdcm/components/StdcmResults/SimulationReportSheet.tsx index 0b28380ebe6..7670617c881 100644 --- a/front/src/applications/stdcm/components/StdcmResults/SimulationReportSheet.tsx +++ b/front/src/applications/stdcm/components/StdcmResults/SimulationReportSheet.tsx @@ -11,7 +11,6 @@ import { dateToHHMMSS, formatDateToString, formatDay } from 'utils/date'; import { Duration } from 'utils/duration'; import { msToKmh } from 'utils/physics'; import { capitalizeFirstLetter } from 'utils/strings'; -import { secToMin } from 'utils/timeManipulation'; import styles from './SimulationReportStyleSheet'; import type { SimulationReportSheetProps } from '../../types'; @@ -203,12 +202,12 @@ const SimulationReportSheet = ({ {step.tolerances?.before - ? `+${secToMin(step.tolerances?.before)}` + ? `+${step.tolerances.before.total('minute')}` : ''} {step.tolerances?.after - ? `-${secToMin(step.tolerances?.after)}` + ? `-${step.tolerances.after.total('minute')}` : ''} @@ -237,10 +236,10 @@ const SimulationReportSheet = ({ step.arrivalType === 'preciseTime' && ( - {`+${secToMin(step.tolerances.before)}`} + {`+${step.tolerances.before.total('minute')}`} - {`-${secToMin(step.tolerances.after)}`} + {`-${step.tolerances.after.total('minute')}`} )} diff --git a/front/src/applications/stdcm/utils/formatStdcmConf.ts b/front/src/applications/stdcm/utils/formatStdcmConf.ts index 83a1fb6c843..4683fb568f1 100644 --- a/front/src/applications/stdcm/utils/formatStdcmConf.ts +++ b/front/src/applications/stdcm/utils/formatStdcmConf.ts @@ -165,8 +165,8 @@ export const checkStdcmConf = ( if (arrivalType === 'preciseTime' && arrival) { timingData = { arrival_time: arrival.toISOString(), - arrival_time_tolerance_before: sec2ms(tolerances?.before ?? 0), - arrival_time_tolerance_after: sec2ms(tolerances?.after ?? 0), + arrival_time_tolerance_before: tolerances?.before?.ms ?? 0, + arrival_time_tolerance_after: tolerances?.after?.ms ?? 0, }; } } diff --git a/front/src/reducers/osrdconf/stdcmConf/index.ts b/front/src/reducers/osrdconf/stdcmConf/index.ts index 152d321bcdb..4d9b3530c71 100644 --- a/front/src/reducers/osrdconf/stdcmConf/index.ts +++ b/front/src/reducers/osrdconf/stdcmConf/index.ts @@ -14,9 +14,10 @@ import { defaultCommonConf, buildCommonConfReducers } from 'reducers/osrdconf/os import type { OsrdStdcmConfState, StdcmPathStep } from 'reducers/osrdconf/types'; import { addElementAtIndex, replaceElementAtIndex } from 'utils/array'; import { isArrivalDateInSearchTimeWindow } from 'utils/date'; +import { Duration } from 'utils/duration'; import type { ArrayElement, PickAndNonNullableFields } from 'utils/types'; -const DEFAULT_TOLERANCE = 1800; // 30min +const DEFAULT_TOLERANCE = new Duration({ minutes: 30 }); export const stdcmConfInitialState: OsrdStdcmConfState = { ...defaultCommonConf, diff --git a/front/src/reducers/osrdconf/stdcmConf/stdcmConfReducers.spec.ts b/front/src/reducers/osrdconf/stdcmConf/stdcmConfReducers.spec.ts index 1529f089f14..45793c03577 100644 --- a/front/src/reducers/osrdconf/stdcmConf/stdcmConfReducers.spec.ts +++ b/front/src/reducers/osrdconf/stdcmConf/stdcmConfReducers.spec.ts @@ -25,6 +25,7 @@ import { } from 'reducers/osrdconf/stdcmConf'; import type { OsrdStdcmConfState, StandardAllowance, StdcmPathStep } from 'reducers/osrdconf/types'; import { createStoreWithoutMiddleware } from 'store'; +import { Duration } from 'utils/duration'; import commonConfBuilder from '../osrdConfCommon/__tests__/commonConfBuilder'; import testCommonConfReducers from '../osrdConfCommon/__tests__/utils'; @@ -180,8 +181,8 @@ describe('stdcmConfReducers', () => { arrivalType: ArrivalTimeTypes.ASAP, arrival: new Date('2024-08-12T15:45:00.000+02:00'), tolerances: { - before: 60, - after: 60, + before: new Duration({ seconds: 60 }), + after: new Duration({ seconds: 60 }), }, }; @@ -210,8 +211,8 @@ describe('stdcmConfReducers', () => { arrivalType: ArrivalTimeTypes.ASAP, arrival: new Date('2024-08-12T15:45:00.000+02:00'), tolerances: { - before: 60, - after: 60, + before: new Duration({ seconds: 60 }), + after: new Duration({ seconds: 60 }), }, }; diff --git a/front/src/reducers/osrdconf/types.ts b/front/src/reducers/osrdconf/types.ts index be4d7010b18..4e33ac3d60c 100644 --- a/front/src/reducers/osrdconf/types.ts +++ b/front/src/reducers/osrdconf/types.ts @@ -123,7 +123,7 @@ export type StdcmPathStep = { arrivalType: ArrivalTimeTypes; // TODO: make arrival non nullable (/!\ store migration) arrival?: Date; - tolerances: { before: number; after: number }; + tolerances: { before: Duration; after: Duration }; } ); From 7e17acd9ea9ae852ddc7edba68b9c300df4f405c Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 25 Feb 2025 14:24:17 +0100 Subject: [PATCH 2/2] front: remove unnecessary optional chain in checkStdcmConf() Signed-off-by: Simon Ser --- front/src/applications/stdcm/utils/formatStdcmConf.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/applications/stdcm/utils/formatStdcmConf.ts b/front/src/applications/stdcm/utils/formatStdcmConf.ts index 4683fb568f1..c7dd9f45c8e 100644 --- a/front/src/applications/stdcm/utils/formatStdcmConf.ts +++ b/front/src/applications/stdcm/utils/formatStdcmConf.ts @@ -165,8 +165,8 @@ export const checkStdcmConf = ( if (arrivalType === 'preciseTime' && arrival) { timingData = { arrival_time: arrival.toISOString(), - arrival_time_tolerance_before: tolerances?.before?.ms ?? 0, - arrival_time_tolerance_after: tolerances?.after?.ms ?? 0, + arrival_time_tolerance_before: tolerances.before.ms, + arrival_time_tolerance_after: tolerances.after.ms, }; } }