UNPKG

@kiwicom/smart-faq

Version:

Smart FAQ

303 lines (240 loc) 11.7 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.RawBookingDetail = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _idx = _interopRequireDefault(require("idx")); var React = _interopRequireWildcard(require("react")); var _reactRouterDom = require("react-router-dom"); var _reactRelay = require("react-relay"); var _difference_in_hours = _interopRequireDefault(require("date-fns/difference_in_hours")); var _TextLink = _interopRequireDefault(require("@kiwicom/orbit-components/lib/TextLink")); var _ButtonLink = _interopRequireDefault(require("@kiwicom/orbit-components/lib/ButtonLink")); var _Button = _interopRequireDefault(require("@kiwicom/orbit-components/lib/Button")); var _Stack = _interopRequireDefault(require("@kiwicom/orbit-components/lib/Stack")); var _Insurance = _interopRequireDefault(require("@kiwicom/orbit-components/lib/icons/Insurance")); var _Ticket = _interopRequireDefault(require("@kiwicom/orbit-components/lib/icons/Ticket")); var _BaggageChecked = _interopRequireDefault(require("@kiwicom/orbit-components/lib/icons/BaggageChecked")); var _Translate = _interopRequireDefault(require("@kiwicom/nitro/lib/components/Translate")); var _utils = require("../common/booking/utils"); var _OneWayTrip = _interopRequireDefault(require("./bookingTypes/OneWayTrip")); var _ReturnTrip = _interopRequireDefault(require("./bookingTypes/ReturnTrip")); var _MulticityOverlayTrip = _interopRequireDefault(require("./bookingTypes/MulticityOverlayTrip")); var _Contact = _interopRequireDefault(require("./bookingItem/Contact")); var _Notification = _interopRequireDefault(require("./bookingItem/Notification")); var _Header = _interopRequireDefault(require("./bookingItem/Header")); var _trackers = require("../../shared/helpers/analytics/trackers"); var _ScrollableContent = _interopRequireDefault(require("../common/ScrollableContent")); var _bookingTypes = _interopRequireDefault(require("../common/booking/bookingTypes")); var _dateUtils = require("../helpers/dateUtils"); var _UrlHelpers = require("../helpers/UrlHelpers"); var _FAQExtraInfoButton = _interopRequireDefault(require("../../shared/StaticFAQ/FAQExtraInfo/FAQExtraInfoButton")); var _BookingState = require("../context/BookingState"); var _featureToggles = _interopRequireDefault(require("../../feature-toggles.json")); var _tracker = require("../../shared/cuckoo/tracker"); // @flow var goToMMB = function goToMMB() { (0, _trackers.simpleTracker)('smartFAQBookingOverview', { action: 'goToMMB' }); (0, _tracker.track)('BookingOverview', 'goToMMB'); }; var clickEticket = function clickEticket() { (0, _trackers.simpleTracker)('smartFAQBookingOverview', { action: 'clickOnEticket' }); (0, _tracker.track)('BookingOverview', 'clickOnEticket'); }; var addInsurance = function addInsurance() { (0, _trackers.simpleTracker)('smartFAQBookingOverview', { action: 'addInsurance' }); (0, _tracker.track)('BookingOverview', 'addInsurance'); }; var BookingDetail = /*#__PURE__*/ function (_React$Component) { (0, _inherits2.default)(BookingDetail, _React$Component); function BookingDetail() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, BookingDetail); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(BookingDetail)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "renderByType", function (booking /*: NearestBooking_booking*/ ) { if (booking.type === _bookingTypes.default.ONE_WAY) { return React.createElement(_OneWayTrip.default, { booking: booking }); } if (booking.type === _bookingTypes.default.RETURN) { return React.createElement(_ReturnTrip.default, { booking: booking }); } if (booking.type === _bookingTypes.default.MULTICITY) { return React.createElement(_MulticityOverlayTrip.default, { booking: booking }); } return null; }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "getArrivalByType", function (booking /*: NearestBooking_booking*/ ) { var date = null; if (booking.type === _bookingTypes.default.ONE_WAY) { date = (0, _idx.default)(booking, function (_) { return _.trip.arrival.time; }); } if (booking.type === _bookingTypes.default.RETURN) { date = (0, _idx.default)(booking, function (_) { return _.inbound.arrival.time; }); } if (booking.type === _bookingTypes.default.MULTICITY) { date = (0, _idx.default)(booking, function (_) { return _.end.time; }); } return date ? new Date(date) : null; }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "decideIfIsFutureAndUrgent", function (time /*: ?Date*/ ) { var timeDelta = time ? (0, _difference_in_hours.default)(time, new Date()) : null; var isUrgent = timeDelta !== null && _dateUtils.URGENCY_THRESHOLD > timeDelta && timeDelta >= 0; return { timeDelta: timeDelta, isFuture: timeDelta !== null && timeDelta > 0, isUrgent: isUrgent }; }); return _this; } (0, _createClass2.default)(BookingDetail, [{ key: "componentDidMount", value: function componentDidMount() { (0, _utils.updateFAQSection)(this.props); } }, { key: "componentDidUpdate", value: function componentDidUpdate() { (0, _utils.updateFAQSection)(this.props); } }, { key: "render", value: function render() { var booking = this.props.booking; var eTicketLink = (0, _idx.default)(booking, function (_) { return _.assets.ticketUrl; }); var departureTime = (0, _utils.getDepartureTimeByType)(booking); var arrivalTime = this.getArrivalByType(booking); var departureInfo = this.decideIfIsFutureAndUrgent(departureTime); var arrivalInfo = this.decideIfIsFutureAndUrgent(arrivalTime); var timeDelta = departureInfo.timeDelta, isFuture = departureInfo.isFuture; var isUrgent = (0, _utils.isUrgentBooking)(booking.isPastBooking, departureTime); var isInsuranceAvailable = Boolean(((0, _idx.default)(booking, function (_) { return _.availableServices.insurance.passengers; }) || []).length); return React.createElement(_ScrollableContent.default, { dataCy: "nearestBooking", styles: "width: 100%; padding:40px; background-color: #ffffff; box-shadow: inset -1px 0 0 0 #e8edf1;" }, React.createElement("div", { "data-test": arrivalInfo.isFuture ? 'upcoming' : 'past' }, React.createElement(_Header.default, { booking: booking, isFuture: arrivalInfo.isFuture })), _featureToggles.default.notification && isFuture && booking.status === 'CONFIRMED' && timeDelta && React.createElement(_Notification.default, { hoursLeft: timeDelta, isUrgent: isUrgent }), React.createElement(_Stack.default, { direction: "row", wrap: true, spaceAfter: "normal", dataTest: "booking-sfaq-buttons" }, _featureToggles.default.baggage_info && React.createElement(_FAQExtraInfoButton.default, { category: "baggage", icon: React.createElement(_BaggageChecked.default, null) }, React.createElement(_Translate.default, { t: "smartfaq.single_booking_page.booking_detail.baggage" })), React.createElement(_FAQExtraInfoButton.default, { category: "boarding-passes", icon: React.createElement(_Ticket.default, null), dataTest: "btn-boarding-passes" }, React.createElement(_Translate.default, { t: "smartfaq.single_booking_page.booking_detail.boarding_passes" })), isInsuranceAvailable && React.createElement(_ButtonLink.default, { onClick: addInsurance, external: true, iconLeft: React.createElement(_Insurance.default, null), href: (0, _UrlHelpers.replaceWithCurrentDomain)((0, _UrlHelpers.addDeepLink)(booking.directAccessURL, 'insurance')) }, React.createElement(_Translate.default, { t: "smartfaq.single_booking_page.booking_detail.insurance" }))), React.createElement("div", { "data-test": "booking-sfaq-itinerary" }, this.renderByType(booking)), React.createElement(_Stack.default, { direction: "column" }, React.createElement(_Button.default, { type: "secondary", external: true, onClick: goToMMB, href: (0, _UrlHelpers.replaceWithCurrentDomain)(booking.directAccessURL), dataTest: "btn-manage-booking" }, React.createElement(_Translate.default, { t: "smartfaq.single_booking_page.booking_detail.manage_my_booking" })), eTicketLink && React.createElement(_TextLink.default, { href: eTicketLink, type: "secondary", external: true, onClick: clickEticket, size: "normal" }, React.createElement(_Translate.default, { t: "smartfaq.single_booking_page.booking_detail.download_e_ticket" }))), isUrgent && React.createElement(_Contact.default, { booking: booking, dataTest: "contact" })); } }]); return BookingDetail; }(React.Component); var RawBookingDetail = BookingDetail; exports.RawBookingDetail = RawBookingDetail; var BookingDetailWithFAQHandler = function BookingDetailWithFAQHandler(props /*: ComponentProps*/ ) { return React.createElement(_BookingState.BookingState.Consumer, null, function (_ref) { var onSetFAQSection = _ref.onSetFAQSection; return React.createElement(BookingDetail, (0, _extends2.default)({}, props, { onSetFAQSection: onSetFAQSection })); }); }; var _default = (0, _reactRelay.createFragmentContainer)((0, _reactRouterDom.withRouter)(BookingDetailWithFAQHandler), { booking: function booking() { var node = require("./__generated__/BookingDetail_booking.graphql"); if (node.hash && node.hash !== "16c3c81ed135c8ae6ceea029fc3b0ca0") { console.error("The definition of 'BookingDetail_booking' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."); } return require("./__generated__/BookingDetail_booking.graphql"); } }); exports.default = _default;