@kiwicom/smart-faq
Version:
114 lines (99 loc) • 3.16 kB
JavaScript
// @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
}
}
}
}
`,
);