Skip to content

Commit 31f40a6

Browse files
committed
front: remove modal for pathfindingjson detail
1 parent a05e9cf commit 31f40a6

File tree

3 files changed

+18
-108
lines changed

3 files changed

+18
-108
lines changed

front/src/common/Pathfinding/Pathfinding.tsx

+9-23
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@ import { Position } from 'geojson';
44
import bbox from '@turf/bbox';
55
import { useTranslation } from 'react-i18next';
66
import { compact, isEqual } from 'lodash';
7-
import { BiCheckCircle, BiXCircle, BiErrorCircle } from 'react-icons/bi';
7+
import { GoAlert, GoCheckCircle, GoStop } from 'react-icons/go';
88

99
import { setFailure } from 'reducers/main';
1010

1111
import { ArrayElement } from 'utils/types';
1212
import { conditionalStringConcat, formatKmValue } from 'utils/strings';
13-
import { lengthFromLineCoordinates } from 'utils/geometry';
1413

1514
import { Path, PathQuery, osrdEditoastApi } from 'common/api/osrdEditoastApi';
16-
import { useModal } from 'common/BootstrapSNCF/ModalSNCF';
1715
import { PointOnMap } from 'applications/operationalStudies/consts';
1816

1917
import {
@@ -31,8 +29,6 @@ import {
3129
getPathfindingID,
3230
getGeojson,
3331
} from 'reducers/osrdconf/selectors';
34-
35-
import ModalPathJSONDetail from 'modules/trainschedule/components/ManageTrainSchedule/Itinerary/ModalPathJSONDetail';
3632
import infraLogo from 'assets/pictures/components/tracks.svg';
3733
import InfraLoadingState from 'applications/operationalStudies/components/Scenario/InfraLoadingState';
3834
import { Spinner } from '../Loader';
@@ -265,7 +261,6 @@ function Pathfinding({ zoomToFeature }: PathfindingProps) {
265261
const { t } = useTranslation(['operationalStudies/manageTrainSchedule']);
266262
const [pathfindingRequest, setPathfindingRequest] =
267263
useState<ReturnType<typeof postPathfinding>>();
268-
const { openModal } = useModal();
269264
const dispatch = useDispatch();
270265
const infraID = useSelector(getInfraID, isEqual);
271266
const origin = useSelector(getOrigin, isEqual);
@@ -345,7 +340,7 @@ function Pathfinding({ zoomToFeature }: PathfindingProps) {
345340
const displayInfraSoftError = () => (
346341
<div className="content pathfinding-error my-2">
347342
<span className="lead">
348-
<BiXCircle />
343+
<GoStop />
349344
</span>
350345
{reloadCount <= 5 ? (
351346
<span className="flex-grow-1">{t('errorMessages.unableToLoadInfra', { reloadCount })}</span>
@@ -358,7 +353,7 @@ function Pathfinding({ zoomToFeature }: PathfindingProps) {
358353
const displayInfraHardError = () => (
359354
<div className="content pathfinding-error my-2">
360355
<span className="lead">
361-
<BiXCircle />
356+
<GoStop />
362357
</span>
363358
<span className="flex-grow-1">{t('errorMessages.hardErrorInfra')}</span>
364359
</div>
@@ -475,17 +470,6 @@ function Pathfinding({ zoomToFeature }: PathfindingProps) {
475470
}
476471
}, [origin, destination, rollingStockID]);
477472

478-
const pathDetailsToggleButton = (
479-
<button
480-
type="button"
481-
onClick={() => openModal(<ModalPathJSONDetail />, 'lg')}
482-
className="btn btn-link details"
483-
data-testid="result-pathfinding-distance"
484-
>
485-
{formatKmValue(lengthFromLineCoordinates(geojson?.geographic?.coordinates))}
486-
</button>
487-
);
488-
489473
const loaderPathfindingInProgress = (
490474
<div className="pathfinding-in-progress">
491475
<div className="pathfinding-in-progress-card">
@@ -543,18 +527,20 @@ function Pathfinding({ zoomToFeature }: PathfindingProps) {
543527
{pathfindingState.done && !pathfindingState.error && (
544528
<div className="content pathfinding-done">
545529
<span className="lead">
546-
<BiCheckCircle />
530+
<GoCheckCircle />
547531
</span>
548532
<span className="flex-grow-1">{t('pathfindingDone')}</span>
549-
{pathDetailsToggleButton}
533+
<small className="text-secondary">
534+
{geojson?.length && formatKmValue(geojson?.length / 1000, 3)}
535+
</small>
550536
</div>
551537
)}
552538
{pathfindingState.error && (
553539
<div
554540
className={`content pathfinding-error ${infra && infra.state !== 'CACHED' && 'mt-2'}`}
555541
>
556542
<span className="lead">
557-
<BiXCircle />
543+
<GoStop />
558544
</span>
559545
<span className="flex-grow-1">
560546
{t('pathfindingError', { errorMessage: t(pathfindingState.error) })}
@@ -564,7 +550,7 @@ function Pathfinding({ zoomToFeature }: PathfindingProps) {
564550
{pathfindingState.missingParam && (
565551
<div className="content missing-params">
566552
<span className="lead">
567-
<BiErrorCircle />
553+
<GoAlert />
568554
</span>
569555
<span className="flex-grow-1">
570556
{t('pathfindingMissingParams', { missingElements })}

front/src/common/Pathfinding/TypeAndPath.tsx

+9-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
SearchResultItemOperationalPoint,
66
osrdEditoastApi,
77
} from 'common/api/osrdEditoastApi';
8-
import React, { useEffect, useState } from 'react';
8+
import React, { useEffect, useMemo, useState } from 'react';
99
import { useTranslation } from 'react-i18next';
1010
import { useDispatch, useSelector } from 'react-redux';
1111
import { getInfraID, getRollingStockID } from 'reducers/osrdconf/selectors';
@@ -52,28 +52,29 @@ function OpTooltips({ opList }: { opList: SearchResultItemOperationalPoint[] })
5252

5353
export default function TypeAndPath({ zoomToFeature }: PathfindingProps) {
5454
const dispatch = useDispatch();
55-
const [inputText, setInputText] = useState<string>('');
55+
const [inputText, setInputText] = useState('');
5656
const [opList, setOpList] = useState<SearchResultItemOperationalPoint[]>([]);
5757
const infraId = useSelector(getInfraID);
5858
const rollingStockId = useSelector(getRollingStockID);
59-
const [postSearch] = osrdEditoastApi.usePostSearchMutation();
60-
const [postPathfinding] = osrdEditoastApi.usePostPathfindingMutation();
59+
const [postSearch] = osrdEditoastApi.endpoints.postSearch.useMutation();
60+
const [postPathfinding] = osrdEditoastApi.endpoints.postPathfinding.useMutation();
6161
const { t } = useTranslation('operationalStudies/manageTrainSchedule');
6262

6363
const debouncedInputText = useDebounce(inputText.trimEnd(), 500);
6464

6565
const handleInput = (text: string) => {
66-
// setInputText(text.trimStart().toUpperCase());
6766
setInputText(text.trimStart());
6867
};
6968

7069
function getOpNames() {
7170
if (infraId !== undefined) {
72-
const opTrigrams = inputText.toUpperCase().split(' ');
71+
const opTrigrams = inputText.toUpperCase().trimEnd().split(' ');
7372
const constraint = opTrigrams.reduce(
7473
(res, trigram) => [...res, ['=', ['trigram'], trigram]],
7574
['or'] as (string | SearchConstraintType)[]
7675
);
76+
// SNCF trigrams come with a yard name, for main station it could be nothing '',
77+
// 'BV' (as Bâtiment Voyageurs) or '00', all are the same signification: this is the main station.
7778
const limitToMainStationConstraint = [
7879
'or',
7980
['=', ['ch'], ''],
@@ -100,7 +101,7 @@ export default function TypeAndPath({ zoomToFeature }: PathfindingProps) {
100101
}
101102
}
102103

103-
const isInvalid = !opList.every((op) => op.name || op.trigram === '');
104+
const isInvalid = useMemo(() => opList.some((op) => !op.name && op.trigram !== ''), [opList]);
104105

105106
function launchPathFinding() {
106107
if (infraId && rollingStockId && opList.length > 0) {
@@ -169,7 +170,7 @@ export default function TypeAndPath({ zoomToFeature }: PathfindingProps) {
169170
className="btn btn-sm btn-success"
170171
type="button"
171172
onClick={launchPathFinding}
172-
disabled={isInvalid}
173+
disabled={isInvalid || opList.length < 2}
173174
>
174175
<GoTriangleRight />
175176
</button>

front/src/modules/trainschedule/components/ManageTrainSchedule/Itinerary/ModalPathJSONDetail.tsx

-77
This file was deleted.

0 commit comments

Comments
 (0)