Skip to content

Commit

Permalink
in progress
Browse files Browse the repository at this point in the history
Signed-off-by: Clara Ni <[email protected]>
  • Loading branch information
clarani committed Oct 7, 2024
1 parent 50a67e5 commit 2179ccb
Show file tree
Hide file tree
Showing 17 changed files with 183 additions and 172 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ const ManageTrainSchedule = ({ trainIdToEdit }: ManageTrainScheduleProps) => {
<div className="floating-itinerary">
<Itinerary pathProperties={pathProperties} setPathProperties={setPathProperties} />
</div>
<Map pathProperties={pathProperties}>
<Map pathProperties={pathProperties} geometry={pathProperties?.geometry}>
<IncompatibleConstraints pathProperties={pathProperties} />
</Map>
</div>
Expand Down
16 changes: 3 additions & 13 deletions front/src/applications/stdcm/utils/formatStdcmConfV2.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import type { TFunction } from 'i18next';
import { compact, last } from 'lodash';
import type { Dispatch } from 'redux';
Expand All @@ -14,12 +13,7 @@ import { setFailure } from 'reducers/main';
import type { OsrdStdcmConfState, StandardAllowance, StdcmPathStep } from 'reducers/osrdconf/types';
import { dateTimeFormatting, dateTimeToIso } from 'utils/date';
import { mToMm } from 'utils/physics';
import {
ISO8601Duration2sec,
formatDurationAsISO8601,
sec2ms,
time2sec,
} from 'utils/timeManipulation';
import { ISO8601Duration2sec, sec2ms, time2sec } from 'utils/timeManipulation';

import createMargin from './createMargin';

Expand Down Expand Up @@ -201,20 +195,16 @@ export const checkStdcmConf = (
let timingData;
if (step.arrival) {
const { arrival } = step;
const timeFromDeparture = formatDurationAsISO8601(
startDateTime.getTime() - arrival.getTime()
);
console.log({ arrival, timeFromDeparture });
if (step.isVia) {
timingData = {
arrival_time: timeFromDeparture,
arrival_time: arrival.toISOString(),
arrival_time_tolerance_before: sec2ms(step.arrivalToleranceBefore ?? 0),
arrival_time_tolerance_after: sec2ms(step.arrivalToleranceAfter ?? 0),
};
} else {
if (step.arrivalType === 'preciseTime') {
timingData = {
arrival_time: timeFromDeparture,
arrival_time: arrival.toISOString(),
arrival_time_tolerance_before: 0,
arrival_time_tolerance_after: 0,
};
Expand Down
44 changes: 24 additions & 20 deletions front/src/applications/stdcmV2/components/StdcmConfig.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,10 @@ import cx from 'classnames';
import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';

import type { ManageTrainSchedulePathProperties } from 'applications/operationalStudies/types';
import { useOsrdConfActions, useOsrdConfSelectors } from 'common/osrdContext';
import { usePathfinding } from 'modules/pathfinding/hooks/usePathfinding';
import { Map } from 'modules/trainschedule/components/ManageTrainSchedule';
import type { StdcmConfSliceActions } from 'reducers/osrdconf/stdcmConf';
import { useAppDispatch } from 'store';
import { extractHHMMFromDate } from 'utils/date';

import StdcmConsist from './StdcmConsist';
import StdcmDestination from './StdcmDestination';
Expand All @@ -21,11 +18,11 @@ import StdcmSimulationParams from './StdcmSimulationParams';
import StdcmStatusBanner from './StdcmStatusBanner';
import StdcmVias from './StdcmVias';
import StdcmWarningBox from './StdcmWarningBox';
import { ArrivalTimeTypes, StdcmConfigErrorTypes } from '../types';
import { ArrivalTimeTypes } from '../types';
import type { StdcmConfigErrors, StdcmSimulation } from '../types';
import checkStdcmConfigErrors from '../utils/checkStdcmConfigErrors';
import type { StdcmConfSelectors } from 'reducers/osrdconf/stdcmConf/selectors';
import usePathfindingIsPossible from '../hooks/usePathfindingIsPossible';
import { compact } from 'lodash';

/**
* Inputs in different cards inside the StdcmConfig component come from the stdcm redux store.
Expand Down Expand Up @@ -65,18 +62,22 @@ const StdcmConfig = ({
updateStdcmPathStep,
} = useOsrdConfActions() as StdcmConfSliceActions;

const { getStdcmOrigin, getStdcmDestination, getProjectID, getScenarioID, getStudyID } =
useOsrdConfSelectors() as StdcmConfSelectors;
const {
getStdcmOrigin,
getStdcmDestination,
getStdcmPathSteps,
getProjectID,
getScenarioID,
getStudyID,
} = useOsrdConfSelectors() as StdcmConfSelectors;
const origin = useSelector(getStdcmOrigin);
const destination = useSelector(getStdcmDestination);
const pathSteps = useSelector(getStdcmPathSteps);
const projectID = useSelector(getProjectID);
const studyID = useSelector(getStudyID);
const scenarioID = useSelector(getScenarioID);

const [pathfindingProperties, setPathfindingProperties] =
useState<ManageTrainSchedulePathProperties>();

const pathfindingStatus = usePathfindingIsPossible();
const pathfinding = usePathfindingIsPossible();

const [formErrors, setFormErrors] = useState<StdcmConfigErrors>();

Expand All @@ -88,7 +89,7 @@ const StdcmConfig = ({
};

const startSimulation = () => {
if (pathfindingStatus === 'success' && !formErrors) {
if (pathfinding?.status === 'success' && !formErrors) {
launchStdcmRequest();
}
};
Expand All @@ -105,7 +106,7 @@ const StdcmConfig = ({
}, [isPending]);

useEffect(() => {
if (!pathfindingStatus || pathfindingStatus !== 'success') {
if (!pathfinding || pathfinding.status !== 'success') {
return;
}
// const isPathfindingFailed = pathfindingStatus.error !== '';
Expand All @@ -124,7 +125,7 @@ const StdcmConfig = ({
// };s
//
// setFormErrors(formErrorsStatus);
}, [origin, destination, pathfindingStatus]);
}, [origin, destination, pathfinding]);

// TODO: DROP STDCMV1: set those values by default in the store when <StdcmAllowances/> is not used anymore.
useEffect(() => {
Expand Down Expand Up @@ -157,15 +158,17 @@ const StdcmConfig = ({
{/* <StdcmDefaultCard text="Indiquer le sillon postérieur" Icon={<ArrowDown size="lg" />} /> */}
<div
className={cx('stdcm-v2-launch-request', {
'wizz-effect': pathfindingStatus === 'success' || formErrors,
'wizz-effect': pathfinding?.status === 'success' || formErrors,
'pb-5':
!!pathfindingStatus &&
pathfindingStatus !== 'success' &&
showBtnToLaunchSimulation,
!!pathfinding && pathfinding.status !== 'success' && showBtnToLaunchSimulation,
})}
>
{showBtnToLaunchSimulation && (
<Button label={t('simulation.getSimulation')} onClick={startSimulation} />
<Button
label={t('simulation.getSimulation')}
onClick={startSimulation}
isDisabled={!pathfinding}
/>
)}
{formErrors && (
<StdcmWarningBox
Expand All @@ -185,7 +188,8 @@ const StdcmConfig = ({
hideAttribution
hideItinerary
preventPointSelection
pathProperties={pathfindingProperties}
simulationPathSteps={compact(pathSteps.map((step) => step.location))}
geometry={pathfinding?.geometry}
showStdcmAssets
/>
</div>
Expand Down
26 changes: 13 additions & 13 deletions front/src/applications/stdcmV2/components/StdcmDestination.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,13 @@ const StdcmDestination = ({ disabled = false }: StdcmConfigCardProps) => {
[destination]
);

const updateDestinationPoint = (pathStep: StdcmPathStep) => {
const updateDestinationLocation = (newLocation: StdcmPathStep['location']) => {
const newPathStep = {
...pathStep,
arrival: arrivalScheduleConstraint
? generateDatetimeFromDateAndTime(arrivalScheduleConstraint)
: undefined,
...destination,
location: newLocation,
};
dispatch(
updateStdcmPathStep(newPathStep)
);
// Changes to check
dispatch(updateStdcmPathStep(newPathStep));
};

const onDestinationArrivalChange = (schedule: ScheduleConstraint) => {
Expand Down Expand Up @@ -86,11 +83,14 @@ const StdcmDestination = ({ disabled = false }: StdcmConfigCardProps) => {
disabled={disabled}
>
<div className="stdcm-v2-destination">
<StdcmOperationalPoint
updatePoint={updateDestinationPoint}
pathStep={destination}
disabled={disabled}
/>
{(!destination.location || 'uic' in destination.location) && (
<StdcmOperationalPoint
updatePathStepLocation={updateDestinationLocation}
pathStepId={destination.id}
pathStepLocation={destination.location}
disabled={disabled}
/>
)}
<StdcmOpSchedule
onArrivalChange={onDestinationArrivalChange}
onArrivalTypeChange={onDestinationArrivalTypeChange}
Expand Down
48 changes: 28 additions & 20 deletions front/src/applications/stdcmV2/components/StdcmOperationalPoint.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,13 @@ import { createFixedSelectOptions } from 'utils/uiCoreHelpers';
import type { StdcmPathStep } from 'reducers/osrdconf/types';

type StdcmOperationalPointProps = {
updatePoint: (pathStep: StdcmPathStep) => void;
pathStep: StdcmPathStep;
pathStepId: string;
updatePathStepLocation: (location: StdcmPathStep['location']) => void;
pathStepLocation?: {
secondaryCode?: string | null;
uic: number;
name: string;
};
disabled?: boolean;
};

Expand All @@ -20,12 +25,19 @@ function formatChCode(chCode: string) {
return chCode === '' ? 'BV' : chCode;
}

const StdcmOperationalPoint = ({ updatePoint, pathStep, disabled }: StdcmOperationalPointProps) => {
const StdcmOperationalPoint = ({
pathStepId,
disabled,
pathStepLocation: point,
updatePathStepLocation,
}: StdcmOperationalPointProps) => {
const { t } = useTranslation('stdcm');

const point = pathStep.location;
const { searchTerm, chCodeFilter, sortedSearchResults, setSearchTerm, setChCodeFilter } =
useSearchOperationalPoint({ initialSearchTerm: point?.name, initialChCodeFilter: point?.secondaryCode });
useSearchOperationalPoint({
initialSearchTerm: point?.name,
initialChCodeFilter: point?.secondaryCode || undefined,
});

const operationalPointsSuggestions = useMemo(
() =>
Expand Down Expand Up @@ -64,18 +76,15 @@ const StdcmOperationalPoint = ({ updatePoint, pathStep, disabled }: StdcmOperati
const dispatchNewPoint = (p?: SearchResultItemOperationalPoint) => {
if (p && p.ch === point?.secondaryCode && 'uic' in point && p.uic === point?.uic) return;

const newPathStep = {
...pathStep,
location: p
? {
name: p.name,
uic: p.uic,
secondaryCode: p.ch,
coordinates: p.geographic.coordinates,
}
: undefined,
};
updatePoint(newPathStep);
const newLocation = p
? {
name: p.name,
uic: p.uic,
secondaryCode: p.ch,
coordinates: p.geographic.coordinates,
}
: undefined;
updatePathStepLocation(newLocation);
};

const updateSelectedPoint = (
Expand Down Expand Up @@ -117,7 +126,6 @@ const StdcmOperationalPoint = ({ updatePoint, pathStep, disabled }: StdcmOperati
setSearchTerm(point.name);
setChCodeFilter(point.secondaryCode || undefined);
} else {
// console.log(searchTerm);
if (searchTerm !== '') {
setSearchTerm('');
}
Expand All @@ -129,7 +137,7 @@ const StdcmOperationalPoint = ({ updatePoint, pathStep, disabled }: StdcmOperati
<div className="flex">
<div className="suggestions col-9">
<ComboBox
id={`${pathStep.id}-ci`}
id={`${pathStepId}-ci`}
label={t('trainPath.ci')}
value={searchTerm}
onChange={onInputChange}
Expand All @@ -143,7 +151,7 @@ const StdcmOperationalPoint = ({ updatePoint, pathStep, disabled }: StdcmOperati
<div className="suggestions stdcm-v2-ch-selector w-100 px-1 pb-2 col-3">
<Select
label={t('trainPath.ch')}
id={`${pathStep.id}-ch`}
id={`${pathStepId}-ch`}
value={chCodeFilter ? { label: formatChCode(chCodeFilter), id: chCodeFilter } : undefined}
onChange={(e) => onSelectChCodeFilter(e)}
{...createFixedSelectOptions(sortedChOptions)}
Expand Down
24 changes: 11 additions & 13 deletions front/src/applications/stdcmV2/components/StdcmOrigin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ const StdcmOrigin = ({ disabled = false }: StdcmConfigCardProps) => {

const origin = useSelector(getStdcmOrigin);

const [arrivalScheduleConstraint, setArrivalScheduleConstraint] = useState<ScheduleConstraint>();

const { updateStdcmPathStep } = useOsrdConfActions() as StdcmConfSliceActions;

const { originArrival, originToleranceValues } = useMemo(
Expand All @@ -39,19 +37,16 @@ const StdcmOrigin = ({ disabled = false }: StdcmConfigCardProps) => {
[origin]
);

const updateOriginPoint = (pathStep: StdcmPathStep) => {
const updateOriginLocation = (newLocation: StdcmPathStep['location']) => {
dispatch(
updateStdcmPathStep({
...pathStep,
arrival: arrivalScheduleConstraint
? generateDatetimeFromDateAndTime(arrivalScheduleConstraint)
: undefined,
...origin,
location: newLocation,
})
);
};

const onOriginArrivalChange = (schedule: ScheduleConstraint) => {
setArrivalScheduleConstraint(schedule);
const newPathStep = { ...origin, arrival: generateDatetimeFromDateAndTime(schedule) };
dispatch(updateStdcmPathStep(newPathStep));
};
Expand Down Expand Up @@ -84,11 +79,14 @@ const StdcmOrigin = ({ disabled = false }: StdcmConfigCardProps) => {
hasTip
>
<div className="stdcm-v2-origin__parameters">
<StdcmOperationalPoint
updatePoint={updateOriginPoint}
pathStep={origin}
disabled={disabled}
/>
{(!origin.location || 'uic' in origin.location) && (
<StdcmOperationalPoint
updatePathStepLocation={updateOriginLocation}
pathStepId={origin.id}
pathStepLocation={origin.location}
disabled={disabled}
/>
)}
<StdcmOpSchedule
onArrivalChange={onOriginArrivalChange}
onArrivalTypeChange={onOriginArrivalTypeChange}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { Map } from 'modules/trainschedule/components/ManageTrainSchedule';

import StcdmResultsTable from './StdcmResultsTable';
import StdcmSimulationNavigator from './StdcmSimulationNavigator';
import { compact } from 'lodash';

type StcdmResultsV2Props = {
isCalculationFailed: boolean;
Expand Down Expand Up @@ -131,8 +132,10 @@ const StcdmResults = ({
hideAttribution
showStdcmAssets
setMapCanvas={setMapCanvas}
pathProperties={selectedSimulation.outputs?.pathProperties}
simulationPathSteps={selectedSimulation.outputs?.results.simulationPathSteps}
geometry={selectedSimulation.outputs?.pathProperties?.geometry}
simulationPathSteps={compact(
selectedSimulation.inputs.pathSteps.map((step) => step.location)
)}
/>
</div>
</div>
Expand Down
Loading

0 comments on commit 2179ccb

Please sign in to comment.