Skip to content

Commit a78212b

Browse files
committed
Add terminal details to stop page
1 parent 721eb45 commit a78212b

File tree

6 files changed

+87
-59
lines changed

6 files changed

+87
-59
lines changed

ui/src/components/stop-registry/stops/stop-details/location-details/LocationDetailsForm.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ import React, { ForwardRefRenderFunction } from 'react';
33
import { FormProvider, useForm } from 'react-hook-form';
44
import { useTranslation } from 'react-i18next';
55
import { Column, Row } from '../../../../../layoutComponents';
6+
import { StopWithDetails } from '../../../../../types';
67
import { FormColumn, InputField, InputLabel } from '../../../../forms/common';
78
import { useDirtyFormBlockNavigation } from '../../../../forms/common/NavigationBlocker';
9+
import { LocationTerminalDetails } from './LocationTerminalDetails';
810
import { LocationDetailsFormState, locationDetailsFormSchema } from './schema';
911

1012
const testIds = {
@@ -21,18 +23,14 @@ const testIds = {
2123
type LocationDetailsFormComponentProps = {
2224
readonly className?: string;
2325
readonly defaultValues: Partial<LocationDetailsFormState>;
24-
readonly municipality?: string | null;
25-
readonly fareZone?: string | null;
2626
readonly onSubmit: (state: LocationDetailsFormState) => void;
27+
readonly stop: StopWithDetails;
2728
};
2829

2930
const LocationDetailsFormComponent: ForwardRefRenderFunction<
3031
ExplicitAny,
3132
LocationDetailsFormComponentProps
32-
> = (
33-
{ className = '', defaultValues, municipality, fareZone, onSubmit },
34-
ref,
35-
) => {
33+
> = ({ className = '', defaultValues, onSubmit, stop }, ref) => {
3634
const { t } = useTranslation();
3735

3836
const methods = useForm<LocationDetailsFormState>({
@@ -46,8 +44,9 @@ const LocationDetailsFormComponent: ForwardRefRenderFunction<
4644
// eslint-disable-next-line react/jsx-props-no-spreading
4745
<FormProvider {...methods}>
4846
<form className={className} onSubmit={handleSubmit(onSubmit)} ref={ref}>
47+
<LocationTerminalDetails stop={stop} />
4948
<FormColumn>
50-
<Row className="flex-wrap gap-4">
49+
<Row className="mt-5 flex-wrap gap-4">
5150
<InputField<LocationDetailsFormState>
5251
type="text"
5352
translationPrefix="stopDetails.location"
@@ -76,7 +75,7 @@ const LocationDetailsFormComponent: ForwardRefRenderFunction<
7675
>
7776
{
7877
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
79-
municipality || '-'
78+
stop.stop_place?.municipality || '-'
8079
}
8180
</span>
8281
<i className="icon-info text-lg text-brand" />
@@ -97,7 +96,7 @@ const LocationDetailsFormComponent: ForwardRefRenderFunction<
9796
>
9897
{
9998
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
100-
fareZone || '-'
99+
stop.stop_place?.fareZone || '-'
101100
}
102101
</span>
103102
<i className="icon-info text-lg text-brand" />

ui/src/components/stop-registry/stops/stop-details/location-details/LocationDetailsSection.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { InfoContainer, useInfoContainerControls } from '../../../../common';
77
import { stopInfoContainerColors } from '../stopInfoContainerColors';
88
import { LocationDetailsForm } from './LocationDetailsForm';
99
import { LocationDetailsViewCard } from './LocationDetailsViewCard';
10+
import { LocationTerminalDetails } from './LocationTerminalDetails';
1011
import { LocationDetailsFormState } from './schema';
1112

1213
type LocationDetailsSectionProps = {
@@ -65,13 +66,15 @@ export const LocationDetailsSection: FC<LocationDetailsSectionProps> = ({
6566
{infoContainerControls.isInEditMode && !!defaultValues ? (
6667
<LocationDetailsForm
6768
defaultValues={defaultValues}
68-
municipality={stop.stop_place?.municipality}
69-
fareZone={stop.stop_place?.fareZone}
69+
stop={stop}
7070
ref={formRef}
7171
onSubmit={onSubmit}
7272
/>
7373
) : (
74-
<LocationDetailsViewCard stop={stop} />
74+
<>
75+
<LocationTerminalDetails stop={stop} />
76+
<LocationDetailsViewCard stop={stop} />
77+
</>
7578
)}
7679
</InfoContainer>
7780
);

ui/src/components/stop-registry/stops/stop-details/location-details/LocationDetailsViewCard.tsx

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ const testIds = {
1818
stopAreaName: 'LocationDetailsViewCard::stopAreaName',
1919
stopAreaStops: 'LocationDetailsViewCard::stopAreaStops',
2020
quay: 'LocationDetailsViewCard::quay',
21+
guidanceType: 'LocationDetailsViewCard::guidanceType',
2122
stopAreaQuays: 'LocationDetailsViewCard::stopAreaQuays',
22-
terminal: 'LocationDetailsViewCard::terminal',
23-
terminalName: 'LocationDetailsViewCard::terminalName',
24-
terminalStops: 'LocationDetailsViewCard::terminalStops',
2523
};
2624

2725
type LocationDetailsViewCardProps = {
@@ -85,50 +83,22 @@ export const LocationDetailsViewCard: FC<LocationDetailsViewCardProps> = ({
8583
</DetailRow>
8684
<HorizontalSeparator />
8785
<DetailRow>
88-
<LabeledDetail
89-
title={t('stopDetails.location.stopArea')}
90-
detail={null /* TODO */}
91-
testId={testIds.stopArea}
92-
/>
93-
<LabeledDetail
94-
title={t('stopDetails.location.stopAreaName')}
95-
detail={null /* TODO */}
96-
testId={testIds.stopAreaName}
97-
/>
98-
<LabeledDetail
99-
title={t('stopDetails.location.stopAreaStops')}
100-
detail={null /* TODO */}
101-
testId={testIds.stopAreaStops}
102-
/>
10386
<LabeledDetail
10487
title={t('stopDetails.location.quay')}
105-
detail={
106-
null /* TODO: stop.quay?.placeEquipments?.generalSign?.content?.value */
107-
}
108-
testId={testIds.quay}
109-
/>
110-
<LabeledDetail
111-
title={t('stopDetails.location.stopAreaQuays')}
11288
detail={null /* TODO */}
113-
testId={testIds.stopAreaQuays}
114-
/>
115-
</DetailRow>
116-
<HorizontalSeparator />
117-
<DetailRow>
118-
<LabeledDetail
119-
title={t('stopDetails.location.terminal')}
120-
detail={null /* TODO */}
121-
testId={testIds.terminal}
89+
testId={testIds.quay}
12290
/>
12391
<LabeledDetail
124-
title={t('stopDetails.location.terminalName')}
92+
title={t('stopDetails.location.guidanceType')}
12593
detail={null /* TODO */}
126-
testId={testIds.terminalName}
94+
testId={testIds.guidanceType}
12795
/>
12896
<LabeledDetail
129-
title={t('stopDetails.location.terminalStops')}
97+
title={t('stopDetails.location.stopAreaQuays', {
98+
total: 0,
99+
})}
130100
detail={null /* TODO */}
131-
testId={testIds.terminalStops}
101+
testId={testIds.stopAreaQuays}
132102
/>
133103
</DetailRow>
134104
</div>
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { FC } from 'react';
2+
import { useTranslation } from 'react-i18next';
3+
import { Link } from 'react-router';
4+
import { Path, routeDetails } from '../../../../../router/routeDetails';
5+
import { StopWithDetails } from '../../../../../types';
6+
import { DetailRow, LabeledDetail } from '../layout';
7+
8+
type LocationTerminalDetailsProps = {
9+
readonly stop: StopWithDetails;
10+
};
11+
12+
const testIds = {
13+
terminal: 'LocationDetailsViewCard::terminal',
14+
terminalLink: 'LocationDetailsViewCard::terminalLink',
15+
terminalPrivateCode: 'LocationDetailsViewCard::terminalPrivateCode',
16+
terminalName: 'LocationDetailsViewCard::terminalName',
17+
terminalStops: 'LocationDetailsViewCard::terminalStops',
18+
};
19+
20+
export const LocationTerminalDetails: FC<LocationTerminalDetailsProps> = ({
21+
stop,
22+
}) => {
23+
const { t } = useTranslation();
24+
25+
return (
26+
<div className="-mx-5 -mt-5 bg-background px-5 py-2.5">
27+
{/* Has negative margin to stretch grey bg to previous div */}
28+
<DetailRow>
29+
<Link
30+
to={routeDetails[Path.terminalDetails].getLink(stop.stop_place?.id)}
31+
data-testid={testIds.terminalLink}
32+
title={t('accessibility:terminals.showTerminalDetails', {
33+
terminalLabel: stop.stop_place?.name,
34+
})}
35+
>
36+
<div className="flex flex-col">
37+
<div className="text-sm">{t('stopDetails.location.terminal')}</div>
38+
<div
39+
className="text-sm font-bold"
40+
data-testid={testIds.terminalPrivateCode}
41+
>
42+
<span>{stop.stop_place?.privateCode?.value}</span>
43+
<i className="icon-open-in-new ml-1" aria-hidden="true" />
44+
</div>
45+
</div>
46+
</Link>
47+
<LabeledDetail
48+
title={t('stopDetails.location.terminalName')}
49+
detail={null /* TODO */}
50+
testId={testIds.terminalName}
51+
/>
52+
<LabeledDetail
53+
title={t('stopDetails.location.terminalStops')}
54+
detail={null /* TODO */}
55+
testId={testIds.terminalStops}
56+
/>
57+
</DetailRow>
58+
</div>
59+
);
60+
};

ui/src/locales/en-US/common.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,8 @@
259259
"longitude": "Longitude",
260260
"altitude": "Altitude",
261261
"functionalArea": "Functional area",
262-
"stopArea": "Stop area",
263-
"stopAreaName": "Stop area name",
264-
"stopAreaStops": "Stop area stops",
265262
"quay": "Quay",
263+
"guidanceType": "Guidance type",
266264
"stopAreaQuays": "Stop area quays",
267265
"terminal": "Terminal",
268266
"terminalName": "Terminal name",

ui/src/locales/fi-FI/common.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -258,14 +258,12 @@
258258
"longitude": "Pituusaste",
259259
"altitude": "Korkeus",
260260
"functionalArea": "Toiminnallinen alue",
261-
"stopArea": "Pysäkkialue",
262-
"stopAreaName": "Pysäkkialueen nimi",
263-
"stopAreaStops": "Jäsenpysäkit",
264-
"quay": "Laituri",
265-
"stopAreaQuays": "Jäsenlaiturit",
261+
"quay": "Laiturinumero",
262+
"guidanceType": "Opastetyyppi",
263+
"stopAreaQuays": "Jäsenlaiturit ({{total}})",
266264
"terminal": "Terminaali",
267265
"terminalName": "Terminaalin nimi",
268-
"terminalStops": "Jäsenpysäkit",
266+
"terminalStops": "Terminaalin jäsenpysäkit",
269267
"input": {
270268
"functionalArea": "Toiminnallinen alue (m)"
271269
}

0 commit comments

Comments
 (0)