Skip to content

Commit

Permalink
feat: show destination display via information
Browse files Browse the repository at this point in the history
  • Loading branch information
mortennordseth committed Aug 23, 2024
1 parent 9080d01 commit d92a1ad
Show file tree
Hide file tree
Showing 12 changed files with 94 additions and 20 deletions.
25 changes: 20 additions & 5 deletions src/page-modules/departures/__tests__/departure-data.fixture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ export const departureDataFixture: DepartureData = {
departures: [
{
id: 'ATB:ServiceJourney:71_230306097870252_7024',
name: 'Dora',
destinationDisplay: {
frontText: 'Dora',
via: [],
},
date: '2023-10-08',
expectedDepartureTime: '2023-10-08T20:53:15+02:00',
aimedDepartureTime: '2023-10-08T20:50:00+02:00',
Expand All @@ -32,7 +35,10 @@ export const departureDataFixture: DepartureData = {
},
{
id: 'ATB:ServiceJourney:25_230306097862768_7070',
name: 'Hurtigbåtterminalen',
destinationDisplay: {
frontText: 'Hurtigbåtterminalen',
via: [],
},
date: '2023-10-08',
expectedDepartureTime: '2023-10-08T20:53:19+02:00',
aimedDepartureTime: '2023-10-08T20:47:00+02:00',
Expand All @@ -54,7 +60,10 @@ export const departureDataFixture: DepartureData = {
departures: [
{
id: 'ATB:ServiceJourney:10_230905147222030_7096',
name: 'Sjetnmarka via Klæbuveien',
destinationDisplay: {
frontText: 'Sjetnemarka',
via: ['Klæbuveien'],
},
date: '2023-10-08',
expectedDepartureTime: '2023-10-08T20:55:28+02:00',
aimedDepartureTime: '2023-10-08T20:54:00+02:00',
Expand All @@ -67,7 +76,10 @@ export const departureDataFixture: DepartureData = {
},
{
id: 'ATB:ServiceJourney:20_230306097869036_7048',
name: 'Romolslia via St. Olavs hospital',
destinationDisplay: {
frontText: 'Romolslia',
via: ['St. Olavs hospital'],
},
date: '2023-10-08',
expectedDepartureTime: '2023-10-08T20:55:32+02:00',
aimedDepartureTime: '2023-10-08T20:54:00+02:00',
Expand All @@ -80,7 +92,10 @@ export const departureDataFixture: DepartureData = {
},
{
id: 'ATB:ServiceJourney:12_230306097866716_7048',
name: 'Marienborg',
destinationDisplay: {
frontText: 'Marienborg',
via: [],
},
date: '2023-10-08',
expectedDepartureTime: '2023-10-08T20:57:11+02:00',
aimedDepartureTime: '2023-10-08T20:56:00+02:00',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { cleanup, render, screen } from '@testing-library/react';
import { afterEach, describe, expect, it } from 'vitest';
import userEvent from '@testing-library/user-event';
import { DeparturesDetails } from '../details';
import { formatDestinationDisplay } from '../utils';

afterEach(function () {
cleanup();
Expand All @@ -22,7 +23,7 @@ describe('departure details page', function () {
);
expect(
output.getByText(
`${serviceJourneyFixture.line.publicCode} ${serviceJourneyFixture.estimatedCalls[0].destinationDisplay.frontText}`,
`${serviceJourneyFixture.line.publicCode} Vestlia via sentrum`,
),
).toBeInTheDocument();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export const serviceJourneyFixture: ServiceJourneyData = {
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
via: [],
},
expectedDepartureTime: '2023-11-10T14:59:24+01:00',
expectedArrivalTime: '2023-11-10T14:59:24+01:00',
Expand Down Expand Up @@ -48,7 +49,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: ['sentrum-Othilienborg'],
},
expectedDepartureTime: '2023-11-10T15:01:40+01:00',
expectedArrivalTime: '2023-11-10T15:01:22+01:00',
Expand Down Expand Up @@ -76,7 +78,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: [],
},
expectedDepartureTime: '2023-11-10T15:02:50+01:00',
expectedArrivalTime: '2023-11-10T15:02:11+01:00',
Expand Down Expand Up @@ -104,7 +107,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: [],
},
expectedDepartureTime: '2023-11-10T15:03:43+01:00',
expectedArrivalTime: '2023-11-10T15:03:04+01:00',
Expand Down Expand Up @@ -132,7 +136,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: [],
},
expectedDepartureTime: '2023-11-10T15:04:09+01:00',
expectedArrivalTime: '2023-11-10T15:03:54+01:00',
Expand Down Expand Up @@ -160,7 +165,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: [],
},
expectedDepartureTime: '2023-11-10T15:05:07+01:00',
expectedArrivalTime: '2023-11-10T15:04:42+01:00',
Expand Down Expand Up @@ -188,7 +194,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: [],
},
expectedDepartureTime: '2023-11-10T15:05:56+01:00',
expectedArrivalTime: '2023-11-10T15:05:19+01:00',
Expand Down Expand Up @@ -216,7 +223,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: ['sentrum'],
},
expectedDepartureTime: '2023-11-10T15:07:14+01:00',
expectedArrivalTime: '2023-11-10T15:06:34+01:00',
Expand Down Expand Up @@ -244,7 +252,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: [],
},
expectedDepartureTime: '2023-11-10T15:08:22+01:00',
expectedArrivalTime: '2023-11-10T15:07:52+01:00',
Expand Down Expand Up @@ -272,7 +281,8 @@ export const serviceJourneyFixture: ServiceJourneyData = {
cancellation: false,
date: '2023-11-10',
destinationDisplay: {
frontText: 'Vestlia via sentrum-Othilienborg',
frontText: 'Vestlia',
via: [],
},
expectedDepartureTime: '2023-11-10T15:10:33+01:00',
expectedArrivalTime: '2023-11-10T15:09:56+01:00',
Expand Down
3 changes: 2 additions & 1 deletion src/page-modules/departures/details/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { ServiceJourneyData } from '../server/journey-planner/validators';
import style from './details.module.css';
import { EstimatedCallRows } from './estimated-call-rows';
import { addMetadataToEstimatedCalls } from './utils';
import { formatDestinationDisplay } from '../utils';

export type DeparturesDetailsProps = {
fromQuayId?: string;
Expand All @@ -27,7 +28,7 @@ export function DeparturesDetails({
const focusedCall =
serviceJourney.estimatedCalls.find((call) => call.quay.id === fromQuayId) ||
serviceJourney.estimatedCalls[0];
const title = `${serviceJourney.line.publicCode} ${focusedCall.destinationDisplay.frontText}`;
const title = `${serviceJourney.line.publicCode} ${formatDestinationDisplay(t, focusedCall.destinationDisplay)}`;
const realtimeText = useRealtimeText(
serviceJourney.estimatedCalls.map((c) => ({
actualDepartureTime: c.actualDepartureTime ?? undefined,
Expand Down
10 changes: 9 additions & 1 deletion src/page-modules/departures/server/journey-planner/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@ export function createJourneyApi(
) ?? [],
departures: q.estimatedCalls.map((e) => ({
id: e.serviceJourney.id,
destinationDisplay: {
frontText: e.destinationDisplay?.frontText,
via: e.destinationDisplay?.via ?? [],
},
name: e.destinationDisplay?.frontText,
date: e.date,
expectedDepartureTime: e.expectedDepartureTime,
Expand Down Expand Up @@ -284,7 +288,10 @@ export function createJourneyApi(
},
departures: result.data.quay?.estimatedCalls?.map((e) => ({
id: e.serviceJourney.id,
name: e.destinationDisplay?.frontText,
destinationDisplay: {
frontText: e.destinationDisplay?.frontText,
via: e.destinationDisplay?.via ?? [],
},
publicCode: e.serviceJourney.line.publicCode,
date: e.date,
aimedDepartureTime: e.aimedDepartureTime,
Expand Down Expand Up @@ -376,6 +383,7 @@ export function createJourneyApi(
date: estimatedCall.date,
destinationDisplay: {
frontText: estimatedCall.destinationDisplay?.frontText,
via: estimatedCall.destinationDisplay?.via ?? [],
},
expectedDepartureTime: estimatedCall.expectedDepartureTime,
expectedArrivalTime: estimatedCall.expectedArrivalTime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ query stopPlaceQuayDepartures(
}
destinationDisplay {
frontText
via
}
serviceJourney {
id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ query quayEstimatedCalls(
}
destinationDisplay {
frontText
via
}
serviceJourney {
id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ query serviceJourneyWithEstimatedCalls($id: String!, $date: Date) {
date
destinationDisplay {
frontText
via
}
expectedDepartureTime
expectedArrivalTime
Expand Down
10 changes: 8 additions & 2 deletions src/page-modules/departures/server/journey-planner/validators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ export const stopPlaceSchema = z.object({

export const departureSchema = z.object({
id: z.string(),
name: z.string(),
destinationDisplay: z.object({
frontText: z.string(),
via: z.array(z.string()),
}),
publicCode: z.string().nullable(),
date: z.string(),
aimedDepartureTime: z.string(),
Expand Down Expand Up @@ -79,7 +82,10 @@ export const serviceJourneySchema = z.object({
aimedDepartureTime: z.string(),
cancellation: z.boolean(),
date: z.string(),
destinationDisplay: z.object({ frontText: z.string() }),
destinationDisplay: z.object({
frontText: z.string(),
via: z.array(z.string()),
}),
expectedDepartureTime: z.string(),
expectedArrivalTime: z.string(),
forAlighting: z.boolean(),
Expand Down
5 changes: 4 additions & 1 deletion src/page-modules/departures/stop-place/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { useRouter } from 'next/router';
import { useState } from 'react';
import { nextDepartures } from '../client';
import style from './stop-place.module.css';
import { formatDestinationDisplay } from '../utils';

export type StopPlaceProps = {
departures: DepartureData;
Expand Down Expand Up @@ -204,6 +205,8 @@ export function EstimatedCallItem({
quayId,
departure,
}: EstimatedCallItemProps) {
const { t } = useTranslation();
const lineName = formatDestinationDisplay(t, departure.destinationDisplay);
return (
<li>
<Link
Expand Down Expand Up @@ -240,7 +243,7 @@ export function EstimatedCallItem({
departure.cancelled ? 'body__primary--strike' : 'body__primary'
}
>
{departure.name}
{lineName}
</Typo.p>
</div>

Expand Down
25 changes: 25 additions & 0 deletions src/page-modules/departures/utils.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { FromDepartureQuery } from './types';
import { searchTimeToQueryString } from '@atb/modules/search-time';
import { TranslateFunction } from '@atb/translations';
import { ParsedUrlQueryInput } from 'querystring';
import { Departure } from './server/journey-planner';
import dictionary from '@atb/translations/dictionary';

export function createFromQuery(tripQuery: FromDepartureQuery): {
pathname: string;
Expand Down Expand Up @@ -35,3 +38,25 @@ export function createFromQuery(tripQuery: FromDepartureQuery): {
query: searchTimeQuery,
};
}

export function formatDestinationDisplay(
t: TranslateFunction,
destinationDisplay: Departure['destinationDisplay'],
): string | undefined {
const frontText = destinationDisplay.frontText;
const via = destinationDisplay.via;

if (via.length < 1) {
return frontText;
}

let viaNames = via[0];
if (via.length > 1) {
viaNames =
via.slice(0, -1).join(', ') +
` ${t(dictionary.listConcatWord)} ` +
via[via.length - 1];
}

return frontText + ` ${t(dictionary.via)} ` + viaNames;
}
2 changes: 2 additions & 0 deletions src/translations/dictionary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ const dictionary = {
missingRealTimePrefix: _('ca. ', 'ca. ', `ca. `),
readMore: _('Les mer', 'Read more', `Les meir`),
close: _('Lukk', 'Close', 'Lukk'),
listConcatWord: _('og', 'and', 'og'),
via: _('via', 'via', 'via'),
};

export default orgSpecificTranslations(dictionary, {
Expand Down

0 comments on commit d92a1ad

Please sign in to comment.