@kiwicom/smart-faq
Version:
56 lines (43 loc) • 1.73 kB
JavaScript
// @flow
import differenceInHours from 'date-fns/difference_in_hours';
import bookingTypes from './bookingTypes';
import { URGENCY_THRESHOLD } from '../../helpers/dateUtils';
import type { BookingDetail_booking as BookingDetailType } from '../../SingleBookingPage/__generated__/BookingDetail_booking.graphql';
import type { MobileBookingDetail_booking as MobileBookingDetailType } from '../../MobileBookingHeader/__generated__/MobileBookingDetail_booking.graphql';
type BookingType = MobileBookingDetailType | BookingDetailType;
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 = booking.trip?.departure?.time;
}
if (booking.type === bookingTypes.RETURN) {
date = booking.outbound?.departure?.time;
}
if (booking.type === bookingTypes.MULTICITY) {
date = 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);
}
};