UNPKG

@kiwicom/smart-faq

Version:

114 lines (99 loc) 3.16 kB
// @flow import * as React from 'react'; import { createFragmentContainer, graphql } from 'react-relay'; import TripDate from '@kiwicom/orbit-components/lib/TripSector/TripDate'; import TripSegment from '@kiwicom/orbit-components/lib/TripSegment'; import { Consumer as IntlConsumer } from '@kiwicom/nitro/lib/services/intl/context'; import { FormatDate, formatHour, timeDurationTranslationData, } from '../../helpers/dateUtils'; import AccordionLegCitiesInfo from './AccordionLegCitiesInfo'; import type { AccordionBodyLastLeg_leg as AccordionLastLegType } from './__generated__/AccordionBodyLastLeg_leg.graphql'; import bookingLegTypes from '../../common/booking/bookingLegTypes'; type LastLegProps = {| leg: AccordionLastLegType, |}; const AccordionLastLeg = (props: LastLegProps) => { const { leg } = props; const { departure, arrival, type } = leg; const initialDeparture = departure?.localTime ?? ''; const departureTime = (departure && departure.localTime) ?? ''; const arrivalTime = (arrival && arrival.localTime) ?? ''; const departureCityName = departure?.airport?.city?.name ?? ''; const departureCityCode = departure?.airport?.locationId ?? ''; const arrivalCityName = arrival?.airport?.city?.name ?? ''; const arrivalCityCode = arrival?.airport?.locationId ?? ''; const carrier = { code: leg.airline?.code ?? '', name: leg.airline?.name ?? '', }; const carrierTypes = type => { if (type === bookingLegTypes.AIRCRAFT) return 'airline'; if (type === bookingLegTypes.BUS) return 'bus'; if (type === bookingLegTypes.TRAIN) return 'train'; throw new Error(`Unknown carrier type`); }; const { translationKey, translationVariables } = timeDurationTranslationData({ mins: leg.duration ?? 0, isLayover: false, }); return ( <IntlConsumer> {intl => ( <> <TripDate>{FormatDate({ dateString: initialDeparture })}</TripDate> <TripSegment carrier={{ code: carrier.code, type: carrierTypes(type), name: carrier.name, }} duration={intl.translate(translationKey, translationVariables)} departure={`${departureCityName} ${departureCityCode}`} departureTime={formatHour(departureTime)} arrival={`${arrivalCityName} ${arrivalCityCode}`} arrivalTime={formatHour(arrivalTime)} > <AccordionLegCitiesInfo leg={leg} /> </TripSegment> </> )} </IntlConsumer> ); }; export const RawAccordionLastLeg = AccordionLastLeg; export default createFragmentContainer( AccordionLastLeg, graphql` fragment AccordionBodyLastLeg_leg on Leg { ...AccordionLegCities_leg ...AccordionLegCitiesInfo_leg type duration airline { code name } arrival { localTime airport { locationId city { name } } } departure { localTime airport { locationId city { name } } } } `, );