@kiwicom/smart-faq
Version:
Smart FAQ
57 lines (44 loc) • 1.75 kB
JavaScript
// @flow
import idx from 'idx';
import differenceInHours from 'date-fns/difference_in_hours';
import bookingTypes from './bookingTypes';
import { URGENCY_THRESHOLD } from '../../helpers/dateUtils';
import type { BookingDetail_booking } from '../../SingleBookingPage/__generated__/BookingDetail_booking.graphql';
import type { MobileBookingDetail_booking } from '../../MobileBookingHeader/__generated__/MobileBookingDetail_booking.graphql';
type BookingType = MobileBookingDetail_booking | BookingDetail_booking;
type Props = {
+booking: BookingType,
onSetFAQSection: (isUrgent: boolean, isPastBooking: boolean) => void,
};
export const isUrgentBooking = (
isPastBooking: boolean,
departureTime: ?Date,
) => {
const timeDelta = departureTime
? differenceInHours(departureTime, new Date())
: null;
const isUrgent = timeDelta !== null && URGENCY_THRESHOLD > timeDelta;
return isPastBooking === false && isUrgent;
};
export const getDepartureTimeByType = (booking: BookingType) => {
let date = null;
if (booking.type === bookingTypes.ONE_WAY) {
date = idx(booking, _ => _.trip.departure.time);
}
if (booking.type === bookingTypes.RETURN) {
date = idx(booking, _ => _.outbound.departure.time);
}
if (booking.type === bookingTypes.MULTICITY) {
date = idx(booking, _ => _.start.time);
}
return date ? new Date(date) : null;
};
export const updateFAQSection = (props: Props) => {
const { booking } = props;
const { isPastBooking } = booking;
const departureTime = getDepartureTimeByType(booking);
if (isPastBooking !== null && isPastBooking !== undefined) {
const isUrgent = isUrgentBooking(isPastBooking, departureTime);
props.onSetFAQSection(isUrgent, isPastBooking);
}
};