{"version":3,"file":"js/9497.e6b5ab71.js","mappings":"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","sources":["webpack://@sunwebgroup/design-system/./shared/modules/layouts/site/shared.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/acco-lister/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/acco-lister/w-acco-lister__content.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/account-data/account-data.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/account-menu/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-box/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-cancellation-flow/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-gate/locales.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-optional-ancillaries-popup/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-participants-form/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/car-rental/locales.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/ce-login/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/ce-modal/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/ce-profile/ce-profile.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/ce-profile/get-discount.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/ce-welcome-msg/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/cookie-consent/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/cookie-emergency-dialog/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/cookie-modal/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/helpers/basic-components-tranformation-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/helpers/filters-config-convention-transform.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/constants.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/ga4-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/search/search-global-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/search/search-impressions-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/search/search-result-click-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/filters-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/pusher.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/favorites-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/search.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/shared/validation-errors-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/helpers/booking-price-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-choice-list-selection-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-choice-list-switch-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-comparison-table-selection-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-luggage-switch-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-participants-badge-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-participants-form-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/helpers/booking-dimensions-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-draft-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/shared/booking-identifier-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/context.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-service-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-services-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-error-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-car-rental-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-filterable-services-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/service-available-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-optional-ancillaries-popup-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-box-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking/booking-preferences-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/booking.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/products/map-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/products.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/shared/accommodation-static-content-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/shared.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/helpers/standard-partycomposition-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/prices/promoted-price-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/booking-gate-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/booking-gate.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/quick-search.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/helpers/error-origin-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/voucher-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/vouchers.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/payment-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/payments.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/live-search/live-search-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/live-search.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-list/reviews-list-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-list/reviews-list-language-switch-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-list/reviews-list-pagination-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-list/reviews-list-party-composition-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-list/reviews-list-sorting-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/reviews-list.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-teaser/reviews-teaser-translate-button-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-teaser/reviews-teaser-close-popup-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-teaser/reviews-teaser-open-popup-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/reviews-teaser/reviews-teaser-show-more-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/reviews-teaser.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/account-booking/account-booking-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/account-booking/booking-cancellation-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/account-booking.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/account-bookings/account-bookings-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/account-bookings.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/account-booked-service-edit/account-booked-service-edit-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/account-booked-service-edit/account-booked-service-change-complete-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/service-not-available-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/account-booked-service-edit.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/refund/refund-request-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/refund/refund-request-click-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/refunds.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/faq/faq-top-questions-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/faq.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/favorites.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/nav/nav-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/nav/nav-logo-header.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/nav.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/personal-details-edit-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/personal-details-edit.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/login-form.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/rebooking-options-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/rebooking-options.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/preference-questionnaire-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/preference-questionnaire.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/profile-data-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/profile-data.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-roomtypes/accommodation-roomtypes-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-roomtypes/accommodation-roomtypes-carousel-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-roomtypes.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-tabs/accommodationn-tabs-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-tabs/accommodationn-tabs-go-back-btn-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-tabs.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-facilities/accommodation-facilities-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-facilities.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-mealplans/accommodation-mealplans-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-mealplans.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/promotion-image/accommodation-destination-button-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-destination.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-description/accommodation-description-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-description.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-gallery/accommodation-gallery-slider-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-gallery.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-practical-block/accommodation-practical-block-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-practical-block.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-ski-block/accommodation-ski-block-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-ski-block.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-nav/accommodation-nav-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-nav.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/accommodation-recommendation/accommodation-recommendation-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/accommodation-recommendation.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/flight-bus-selector-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/flight-bus-selector.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/permission-settings-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/permission-settings.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/promotion-image/promotion-image-button-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/promotion-image.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/main-menu/main-menu-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/main-menu.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/mappers/login-status-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/login-status.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners/account-menu.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/type-checker.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/listeners.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/search-filter-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/booking-steps-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/static-content-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/quick-search-filter-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/promoted-price-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/live-search-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/booking-gate-filter-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/account-booking-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/account-bookings-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/navigation-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-gallery-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-roomtypes-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-tabs-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-facilities-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-mealplans-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-destination-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-description-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-practical-block-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-ski-block-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-recommendation-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/accommodation-nav-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/booking-car-rental-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/reviews-list-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/reviews-teaser-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types/promotion-image-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/data-layer/types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/dates-filter/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/dd-grid/locales.js"],"sourcesContent":["// Import helpers, polyfills & utils\r\nrequire('../../../js/polyfills/main')\r\nrequire('../../objects/swipe/main')\r\nrequire('../../../js/locales/_all')\r\nrequire('../../../js/document/anchors')\r\n\r\n// Import components\r\nrequire('../../components/autocomplete/main')\r\nrequire('../../components/absolute-dialog/main')\r\nrequire('../../components/backdrop/main')\r\nrequire('../../components/btn/main')\r\nrequire('../../components/button-group/main')\r\nrequire('../../components/calendar/data-js-api')\r\nrequire('../../components/card/main')\r\nrequire('../../components/choice-list/main')\r\nrequire('../../components/collapse/main')\r\nrequire('../../components/date-selector/main')\r\nrequire('../../components/dropdown/main')\r\nrequire('../../components/dropdown/dropdown-multiple/main')\r\nrequire('../../components/favorite/button')\r\nrequire('../../components/favorite/cleaner')\r\nrequire('../../components/favorite/collector')\r\nrequire('../../components/floating-box/main')\r\nrequire('../../components/img/data-js-api')\r\nrequire('../../components/img-box/main')\r\nrequire('../../components/modal/main')\r\nrequire('../../components/modal-v2/main')\r\nrequire('../../components/nav/main')\r\nrequire('../../components/number-score/main')\r\nrequire('../../components/number-stepper/main')\r\nrequire('../../components/pagination/main')\r\nrequire('../../components/participants-selector/main')\r\nrequire('../../components/phone-input/main')\r\nrequire('../../components/progress-bar/main')\r\nrequire('../../components/range/main')\r\nrequire('../../components/side-drawer/main')\r\nrequire('../../components/slider/main')\r\nrequire('../../components/tabs/main')\r\nrequire('../../components/textarea/main')\r\nrequire('../../components/textbox/main')\r\nrequire('../../components/tooltip/main')\r\nrequire('../../components/video/main')\r\nrequire('../../components/form/data-js-api')\r\nrequire('../../components/form/main')\r\nrequire('../../components/actionable-list/main')\r\nrequire('../../components/video/main')\r\n\r\nrequire('../../../js/core/component/component-api')\r\n\r\n// Import widgets\r\nrequire('../../widgets/data-layer/main')\r\nrequire('../../widgets/static-content-data/main')\r\nrequire('../../widgets/acco-lister/main')\r\nrequire('../../widgets/cookie-consent/main')\r\nrequire('../../widgets/cookie-emergency-dialog/main')\r\nrequire('../../widgets/cookie-modal/main')\r\nrequire('../../widgets/dropdown-redirect-group/main')\r\nrequire('../../widgets/faq-feedback/main')\r\nrequire('../../widgets/faq-top-questions/main')\r\nrequire('../../widgets/language-modal/main')\r\nrequire('../../widgets/live-search/main')\r\nrequire('../../widgets/new-live-search/main')\r\nrequire('../../widgets/login-form/main')\r\nrequire('../../widgets/reviews-list/data-js-api')\r\nrequire('../../widgets/dropdown-redirect/main')\r\nrequire('../../widgets/dynamic-label/main')\r\nrequire('../../widgets/ski-prices/data-js-api')\r\nrequire('../../widgets/smart-app-banner/main')\r\nrequire('../../widgets/voucher/main')\r\nrequire('../../widgets/voucher-redeemer/main')\r\nrequire('../../widgets/refund/main')\r\nrequire('../../widgets/voucher-check-balance/main')\r\nrequire('../../widgets/ce-login/main')\r\nrequire('../../widgets/ce-modal/main')\r\nrequire('../../widgets/ce-welcome-msg/main')\r\nrequire('../../widgets/preference-questionnaire/main')\r\nrequire('../../widgets/permission-settings/main')\r\nrequire('../../widgets/reviews-teaser/main')\r\nrequire('../../widgets/recommended-acco-lister/main')\r\nrequire('../../widgets/main-menu/main')\r\nrequire('../../widgets/account-menu/main')\r\nrequire('../../widgets/login-status/main')\r\nrequire('../../widgets/product-ads/main')\r\n\r\n// Potentially t-simple-form bundle\r\nrequire('../../widgets/verify-account/main')\r\n\r\n// This should be last\r\nrequire('../../../js/core/widget/widget-api')\r\n\r\n// Autoload all components when the page is ready\r\nconst { autoload } = require('../../../js/document/load-queue')\r\nautoload()\r\n","/**\n * List of events used by acco lister widget\n *\n */\nexport const accoListerEvents = {\n ACCO_LISTER_PRINTED: 'AccoLister.Printed',\n ACCO_LISTER_ITEM_CLICKED: 'AccoLister.ItemClicked',\n ACCO_LISTER_CTA_CLICKED: 'AccoLister.CtaClicked'\n}\n","/**\n * The AccoListerContentData contains all data needed to hydrate inner content for AccoLister widget\n *\n * @typedef {Object} AccoListerContentData\n *\n * @property {String} id - The AccoLister id\n * @property {String} variant - The AccoLister variant (default|listed)\n * @property {String} acmModalId - The ACM modal ID\n * @property {String} priceLabelText - The price label text\n * @property {PackageItemData[]} items - The packageItems to be shown\n * @property {Object} [sliderAttributes] - The slider attributes\n */\n\nimport { PackageItemTemplate } from '../../components/package-item/c-package-item.template'\nimport { SliderTemplate } from '../../components/slider/c-slider.template'\nimport { chunk } from '../../../js/helpers/array'\nimport { getTokenClass } from '../../../js/helpers/tokens'\n\n// Import tokens\nconst tokensShared = require('./data/w-acco-lister__tokens.json')['w-acco-lister']\nconst tokensBrand = (() => {\n try {\n return require(`../../../../brands/${WEBPACK_BRAND}/modules/widgets/acco-lister/data/w-acco-lister__tokens.json`)['w-acco-lister'] // eslint-disable-line\n } catch (error) {\n return {}\n }\n})()\nconst tokens = { ...tokensShared, ...tokensBrand }\n\nconst SLIDER_ATTRIBUTES_DEFAULT = {\n 'data-loop': false,\n 'data-responsive': 'xs:1,sm:1.5,sml:2,md:3,xl:4',\n 'data-gutter': '12'\n}\n\nconst SLIDER_ATTRIBUTES_LISTED = {\n 'data-loop': false,\n 'data-responsive': 'xs:1,lg:2',\n 'data-gutter': '12'\n}\n\nconst SLIDER_ATTRIBUTES_TIPS = {\n 'data-loop': true,\n 'data-responsive': 'xs:1,lg:1.5',\n 'data-gutter': '12'\n}\n\nconst ITEMS_PER_SLIDE_LISTED = 3\n\nexport const defaultAccoListerContentData = {\n id: '',\n variant: 'default',\n acmModalId: '',\n priceLabelText: '',\n items: [],\n sliderAttributes: {},\n ctaButtonText: '',\n showCtaButton: false,\n track: ''\n}\n\nexport const AccoListerContentTemplate = (d) => {\n d = { ...defaultAccoListerContentData, ...d }\n\n const sliderAttributes = {\n ...(d.variant === 'listed')\n ? SLIDER_ATTRIBUTES_LISTED\n : (d.variant === 'tips')\n ? SLIDER_ATTRIBUTES_TIPS\n : SLIDER_ATTRIBUTES_DEFAULT,\n ...d.sliderAttributes\n }\n\n const sliderItems = (d.variant === 'listed' || d.variant === 'tips')\n ? chunk(d.items, d.packagesPerSlide || ITEMS_PER_SLIDE_LISTED).map(group => (\n group.map(item => (\n PackageItemTemplate({\n ...item,\n variant: 'listed',\n extraClasses: 'w-acco-lister__package-item--listed'\n })\n )).join(''))\n )\n : d.items.map(item => (\n PackageItemTemplate({\n ...item,\n variant: 'default',\n ctaButtonText: d.ctaButtonText,\n showCtaButton: d.showCtaButton,\n track: d.track,\n extraClasses: 'w-acco-lister__package-item'\n }))\n )\n\n return SliderTemplate({\n id: `${d.id}__slider`,\n items: sliderItems,\n attributes: sliderAttributes,\n barNavigation: false,\n outerNavigation: true,\n track: d.track ? d.track + '.slider' : '',\n withGradient: true,\n extraClasses: 'w-acco-lister__slider',\n luminosity: getTokenClass('luminosity', (d.luminosity ? d.luminosity : 'default'), tokens)\n })\n}\n","import storage from '../../../js/document/web-storage'\n\nconst cookieNames = {\n userData: 'user-data'\n}\n\nexport const getProfileData = () => {\n const userDataCookie = storage.cookie.get(cookieNames.userData)\n\n if (!isValidUserDataCookie(userDataCookie)) {\n return { isUserLoggedIn: false }\n }\n\n const profileData = base64DecodeStrToObj(userDataCookie.profileData)\n\n if (!profileData) {\n return { isUserLoggedIn: false }\n }\n\n return {\n isUserLoggedIn: true,\n profileName: profileData.profileName || '',\n profileId: profileData.userId || ''\n }\n}\n\nconst isValidUserDataCookie = (userData) => {\n return userData &&\n userData.profileData &&\n userData.expirationDateTime &&\n new Date(userData.expirationDateTime) > new Date()\n}\n\nconst base64DecodeStrToObj = (str) => {\n let decodedObj = {}\n try {\n const base64data = window.decodeURIComponent(str)\n decodedObj = JSON.parse(base64ToUtf8String(base64data))\n } catch (e) {\n if (window.newrelic) {\n window.newrelic.noticeError(e)\n }\n }\n return decodedObj\n}\n\nconst base64ToUtf8String = (base64) => {\n const binString = atob(base64)\n const bytes = window.Uint8Array.from(binString, (m) => m.codePointAt(0))\n return new window.TextDecoder().decode(bytes)\n}\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { getProfileData } from '../account-data/account-data'\nimport registeredEvents from '../../../js/helpers/registered-events'\nimport { accountMenuEvents } from '../../../js/document/event-types'\nconst EventEmitter = require('eventemitter3')\n\nconst widgetApi = 'w-account-menu'\n\nconst classNames = {\n isOpen: 'is-open',\n isHidden: 'is-hidden',\n showAvatar: `${widgetApi}__button--show-avatar`\n}\n\nconst attr = {\n track: 'data-track'\n}\n\nconst widgetQueries = {\n trigger: `[data-${widgetApi}__trigger]`,\n dropdown: `[data-${widgetApi}__dropdown]`,\n loginItem: `[data-${widgetApi}__login-item]`,\n logoutItem: `[data-${widgetApi}__logout-item]`,\n loginButton: `[data-${widgetApi}__login-btn]`,\n createAccountLink: `[data-${widgetApi}__create-account-link]`,\n bookingsOverviewLink: `[data-${widgetApi}__bookings-overview-link]`,\n favoritesButton: `[data-${widgetApi}__favorites-btn]`\n\n}\n\nexport default class AccountMenu {\n constructor (element) {\n if (!element) return\n this.element = element\n this._getHtmlElements()\n this._attachEvents()\n this._renderDropdown()\n this.events = new EventEmitter()\n registeredEvents.registerWidgetEvents(widgetApi, this.events, {\n ...this.element.hasAttribute(attr.track) && { track: this.element.attributes[attr.track].value }\n })\n }\n\n _getHtmlElements () {\n this.triggers = this.element.querySelectorAll(widgetQueries.trigger)\n this.dropdown = this.element.querySelector(widgetQueries.dropdown)\n this.loginItems = this.element.querySelectorAll(widgetQueries.loginItem)\n this.logoutItems = this.element.querySelectorAll(widgetQueries.logoutItem)\n this.loginButton = this.element.querySelector(widgetQueries.loginButton)\n this.createAccountLink = this.element.querySelector(widgetQueries.createAccountLink)\n this.bookingsOverviewLink = this.element.querySelector(widgetQueries.bookingsOverviewLink)\n this.favoritesButton = this.element.querySelector(widgetQueries.favoritesButton)\n }\n\n _attachEvents () {\n this.triggers.forEach(trigger => trigger.addEventListener('click', this._toggleDropdown.bind(this)))\n\n document.addEventListener('click', (event) => {\n const isClickInsideTrigger = Array.from(this.triggers).some(trigger => trigger.contains(event.target))\n if (!this.dropdown.contains(event.target) && !isClickInsideTrigger) {\n this._closeDropdown()\n }\n })\n\n window.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this._closeDropdown()\n }\n })\n\n const eventMappings = {\n [widgetQueries.loginButton]: accountMenuEvents.MY_ACCOUNT_CLICKED,\n [widgetQueries.createAccountLink]: accountMenuEvents.CREATE_ACCOUNT_CLICKED,\n [widgetQueries.bookingsOverviewLink]: accountMenuEvents.MY_BOOKINGS_CLICKED,\n [widgetQueries.favoritesButton]: accountMenuEvents.FAVORITES_CLICKED\n }\n\n Object.entries(eventMappings).forEach(([selector, eventType]) => {\n const element = this.element.querySelector(selector)\n if (element) {\n element.addEventListener('click', () => this.events.emit(eventType))\n }\n })\n }\n\n _toggleDropdown () {\n if (this.element.classList.contains(classNames.isOpen)) {\n this._closeDropdown()\n } else {\n this.element.classList.add(classNames.isOpen)\n this.element.ariaExpanded = true\n }\n }\n\n _closeDropdown () {\n this.element.classList.remove(classNames.isOpen)\n this.element.ariaExpanded = false\n }\n\n _renderDropdown () {\n const profileData = getProfileData()\n\n if (profileData && profileData.isUserLoggedIn) {\n this.loginItems.forEach(item => item.classList.remove(classNames.isHidden))\n this.logoutItems.forEach(item => item.classList.add(classNames.isHidden))\n this._renderAvatar(profileData)\n } else {\n this.loginItems.forEach(item => item.classList.add(classNames.isHidden))\n this.logoutItems.forEach(item => item.classList.remove(classNames.isHidden))\n }\n }\n\n _renderAvatar (profileData) {\n if (profileData.profileName) {\n const initial = profileData.profileName.charAt(0)\n this.triggers.forEach(trigger => {\n trigger.setAttribute('avatar-content', initial)\n trigger.classList.add(classNames.showAvatar)\n })\n }\n }\n}\n\nregisterWidget(AccountMenu, widgetApi)\n","/**\n * List of events used by booking box widget\n *\n */\nexport const bookingBox = {\n COLLAPSE_OPEN: 'BookingBox.Open',\n COLLAPSE_CLOSE: 'BookingBox.Close'\n}\n","/**\n * List of events used by booking steps widget\n *\n */\nexport const bookingCancellationFlow = {\n CHECK_REGULAR_CANCELLATION_CONDITIONS: 'bookingCancellationFlow.checkRegularCancellationConditions',\n CONFIRM_REGULAR_CANCELLATION: 'bookingCancellationFlow.confirmRegularCancellation',\n GET_PARTIAL_CANCELLATION_PARTICIPANTS: 'bookingCancellationFlow.getPartialCancellationParticipants',\n CONFIRM_PARTIAL_CANCELLATION: 'bookingCancellationFlow.confirmPartialCancellation'\n}\n","export const da = {\n filtersError: 'Der er desværre på nuværende tidspunkt ikke nogen værelser ledige, der matcher din søgning. Forsøg venligst at ændre antallet af personer angivet i værelsesfordelingen, ved hjælp af filteret ovenfor.',\n filtersEmpty: 'We encountered problems retrieving data for this accommodation. Retry again.',\n pricetableError: 'We encountered problems retrieving prices for this accommodation. Retry again.'\n}\n\nexport const de = {\n filtersError: 'Es sind keine Angebote oder Zimmer verfügbar, die Ihren aktuellen Filtern entsprechen, z. B. der Anzahl der Personen/Zimmer in Ihrer Reisegruppe. Ändern Sie bitte die Anzahl der Personen in jedem Zimmer, indem Sie den obigen Filter nutzen.',\n filtersEmpty: 'We encountered problems retrieving data for this accommodation. Retry again.',\n pricetableError: 'We encountered problems retrieving prices for this accommodation. Retry again.'\n}\n\nexport const en = {\n filtersError: 'There are no offers or rooms available that match your current filters such as the number of people/rooms in your travel party. Please try changing the number of people in each room via the filter above.',\n filtersEmpty: 'We encountered problems retrieving data for this accommodation. Retry again.',\n pricetableError: 'We encountered problems retrieving prices for this accommodation. Retry again.'\n}\n\nexport const nb = {\n filtersError: 'There are no offers or rooms available that match your current filters such as the number of people/rooms in your travel party. Please try changing the number of people in each room via the filter above.',\n filtersEmpty: 'We encountered problems retrieving data for this accommodation. Retry again.',\n pricetableError: 'We encountered problems retrieving prices for this accommodation. Retry again.'\n}\n\nexport const fr = {\n filtersError: \"Il n'y a pas d'offres ou de chambres disponibles qui correspondent aux filtres sélectionnés tels que le nombre de personnes/chambres. Veuillez modifier le nombre de personnes dans chaque chambre en utilisant le filtre ci-dessus.\",\n filtersEmpty: 'We encountered problems retrieving data for this accommodation. Retry again.',\n pricetableError: 'We encountered problems retrieving prices for this accommodation. Retry again.'\n}\n\nexport const nl = {\n filtersError: 'Er zijn geen aanbiedingen of kamers gevonden die overeenkomen met jouw huidige zoekopdracht. Probeer het aantal personen in elke kamer te wijzigen.',\n filtersEmpty: 'We encountered problems retrieving data for this accommodation. Retry again.',\n pricetableError: 'We encountered problems retrieving prices for this accommodation. Retry again.'\n}\n\nexport const sv = {\n filtersError: 'Tyvärr finns det för närvarande inga tillgängliga rum som matchar fördelningen av personer per rum. Vänligen ändra fördelningen med hjälp av filtret ovan.',\n filtersEmpty: 'We encountered problems retrieving data for this accommodation. Retry again.',\n pricetableError: 'We encountered problems retrieving prices for this accommodation. Retry again.'\n}\n","/**\n * List of events used by booking steps widget\n *\n */\nexport const bookingOptionalAncillariesPopup = {\n CLOSE_BUTTON_CLICKED: 'bookingOptionalAncillariesPopup.CloseButtonClicked',\n ACCEPT_BUTTON_CLICKED: 'bookingOptionalAncillariesPopup.AcceptButtonClicked'\n}\n","/**\n * List of events used by booking participants form widget\n *\n */\nexport const bookingParticipantsForm = {\n ITEM_FORM_VALIDATON_ERROR: 'bookingParticipantsForm.ItemFormValidationError'\n}\n","\nexport const da = {\n period: 'Periode',\n oneWeek: 'En uge',\n twoWeeks: 'To uger',\n noCarNotification: 'Vi har ikke fundet nogen lejebiler til dette indkvartering'\n}\n\nexport const de = {\n period: 'Zeitraum',\n oneWeek: 'Eine Woche',\n twoWeeks: 'Zwei Wochen',\n noCarNotification: 'Wir haben keine Autovermietung für diese Unterkunft gefunden'\n}\n\nexport const en = {\n period: 'Period',\n oneWeek: 'One Week',\n twoWeeks: 'Two Weeks',\n noCarNotification: 'We haven\\'t found any car rentals for this accommodation'\n}\n\nexport const nb = {\n period: 'Periode',\n oneWeek: 'En uke',\n twoWeeks: 'To uker',\n noCarNotification: 'Vi har ikke funnet noen leiebil for dette overnattingsstedet'\n}\n\nexport const fr = {\n period: 'Période',\n oneWeek: 'Une semaine',\n twoWeeks: 'Deux semaines',\n noCarNotification: 'Nous n\\'avons pas trouvé de location de voiture pour ce logement'\n}\n\nexport const nl = {\n period: 'Periode',\n oneWeek: 'Een week',\n twoWeeks: 'Twee weken',\n noCarNotification: 'We hebben geen huurauto\\'s gevonden voor deze accommodatie'\n}\n\nexport const sv = {\n period: 'Period',\n oneWeek: 'En vecka',\n twoWeeks: 'Två veckor',\n noCarNotification: 'Vi har inte hittat några hyrbilar för detta boende'\n}\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { apiCaller } from '../../../js/helpers/api-caller'\n\nconst classNames = {\n widgetApi: 'w-ce-login'\n}\n\nconst urlParamNames = {\n user: 'usr',\n pass: 'pas'\n}\n\nexport const attr = {\n ceLoginRequestUrl: `data-${classNames.widgetApi}__request-url`\n}\n\nexport default class CeLogin {\n /**\n * Creates a new CE Login widget.\n * @constructor\n * @param {HTMLElement} element The HTML element.\n */\n constructor (element) {\n this.element = element\n let requestUrl\n const loginParams = this._getCeLoginCredentialsFromUrl()\n if (loginParams) requestUrl = this._getRequestUrl()\n if (requestUrl) this._isValidCeUser(requestUrl, loginParams)\n }\n\n /**\n * Returns the user name and the pass if the url has usr and pas parameters(CE login)\n * @return {Object | null}\n */\n _getCeLoginCredentialsFromUrl () {\n const queryString = window.location.search\n const urlParams = new URLSearchParams(queryString)\n const userParam = urlParams.get(urlParamNames.user)\n const passParam = urlParams.get(urlParamNames.pass)\n if (userParam && passParam) {\n return { userParam, passParam }\n } else {\n return null\n }\n }\n\n /**\n * Returns the request url to know if the user is a valid CE Login user\n * @return {String | null}\n */\n _getRequestUrl () {\n const mainUrl = this.element.getAttribute(attr.ceLoginRequestUrl)\n return mainUrl || null\n }\n\n /**\n * Called if is a valid CE User\n * @param {String} requestUrl\n * @param {{userParam: String, passParam:String }} loginParams\n */\n async _isValidCeUser (requestUrl, loginParams) {\n const result = await apiCaller(requestUrl, { method: 'POST', body: loginParams })\n if (result.success && result.response.isValidCeUser) this._removeUrlParams()\n }\n\n /**\n * Remove the user and pass parameters from the url\n */\n _removeUrlParams () {\n const url = new URL(window.location.href)\n url.searchParams.delete(urlParamNames.user)\n url.searchParams.delete(urlParamNames.pass)\n window.location.replace(url)\n }\n}\n\nregisterWidget(CeLogin, classNames.widgetApi)\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { elementFromString } from '../../../js/document/html-helper'\nimport { ModalTemplate } from '../../components/modal/c-modal.template'\nimport { BtnTemplate } from '../../components/btn/c-btn.template'\nimport Component from '../../../js/core/component/component'\nimport storage from '../../../js/document/web-storage'\nimport { CeProfile } from '../ce-profile/ce-profile'\n\nconst widgetApi = 'w-ce-modal'\n\nconst cookieNames = {\n ceWelcomeSeen: 'cewelcomeseen'\n}\n\nconst textVar = {\n partnerName: '{PartnerName}',\n partnerDiscount: '{PartnerDiscount}'\n}\n\nexport const widgetQueries = {\n settings: `[data-${widgetApi}__settings]`,\n modalBtn: `[data-${widgetApi}__modal-btn]`\n}\n\nexport default class CeModal {\n constructor (element) {\n this.element = element\n this._getHtmlElements()\n this.cookie = storage.cookie\n this.settingsData = this._getSettingsDataFromDom()\n if (this.settingsData) this._showCeModal()\n }\n\n _getHtmlElements () {\n this.settings = this.element.querySelector(widgetQueries.settings)\n }\n\n _getSettingsDataFromDom () {\n if (!this.settings) return false\n return JSON.parse(this.settings.textContent)\n }\n\n _renderModal (partnerDiscount, partnerName) {\n if (!this.settingsData.title || !this.settingsData.body) return\n const title = this._replaceTextVars(this.settingsData.title, partnerName, partnerDiscount)\n const body = this._replaceTextVars(this.settingsData.body, partnerName, partnerDiscount)\n const modal = ModalTemplate({\n id: this.settingsData.modalId,\n bodyContent: bodyModalTemplate(title, body),\n style: 'neutral',\n closable: false,\n footerContent: `${BtnTemplate({\n variant: 'flow',\n block: true,\n text: this.settingsData.btnText,\n attributes: {\n [`data-${widgetApi}__modal-btn`]: '',\n 'data-c-modal__action': 'close',\n 'data-c-modal__id': this.settingsData.modalId\n }\n }\n )}`\n })\n const newContent = elementFromString(modal)\n this.element.appendChild(newContent)\n Component.initDocumentComponentsFromAPI(newContent)\n this._attachModalEvent(newContent)\n newContent['c-modal'].open()\n }\n\n _replaceTextVars (str, partnerName, partnerDiscount) {\n let replacedStr = str.replaceAll(textVar.partnerName, partnerName)\n replacedStr = replacedStr.replaceAll(textVar.partnerDiscount, partnerDiscount)\n return replacedStr\n }\n\n _showCeModal () {\n const ceWelcomeSeen = this.cookie.get(cookieNames.ceWelcomeSeen)\n if (ceWelcomeSeen !== 0) return false\n const partner = new CeProfile().getPartnerData(this.settingsData.publicationCode)\n if (!partner) return false\n this._renderModal(partner.partnerDiscount, partner.partnerName)\n }\n\n _attachModalEvent (modal) {\n const modalBtn = modal.querySelector(widgetQueries.modalBtn)\n modalBtn.addEventListener('click', () => {\n this.cookie.set(cookieNames.ceWelcomeSeen, '1', {\n path: '/',\n expirationDays: parseInt(1)\n })\n })\n }\n}\n\nregisterWidget(CeModal, widgetApi)\n\nconst bodyModalTemplate = (title, body) => {\n return `\n
\n
\n \n
\n
${title}
\n ${body}\n
`\n}\n","import storage from '../../../js/document/web-storage'\nimport { getDiscount } from './get-discount'\n\nconst cookieNames = {\n userData: 'user-data'\n}\n\nexport class CeProfile {\n constructor () {\n this.cookie = storage.cookie\n }\n\n /**\n * If logged in user is a Partner, gets the parnter data with:\n * - PartnerName\n * - PartnerDiscount\n *\n * Otherwise returns null\n */\n getPartnerData (publicationCode) {\n const userData = this.cookie.get(cookieNames.userData)\n if (!userData ||\n !userData.profileData ||\n !userData.expirationDateTime ||\n this._isPastDate(userData.expirationDateTime)) return null\n const profileData = this._base64DecodeStrToObj(userData.profileData)\n if (!profileData ||\n !profileData.isSunwebCE) return null\n const partnerDiscount = getDiscount(profileData.partnerDiscounts, publicationCode)\n if (!partnerDiscount ||\n !profileData.partnerName) return null\n\n const profile = {\n partnerName: profileData.partnerName,\n partnerDiscount\n }\n return profile\n }\n\n _base64DecodeStrToObj (str) {\n let decodedObj = {}\n try {\n decodedObj = JSON.parse(this._base64ToUtf8String(window.decodeURIComponent(str)))\n } catch (e) {\n if (window.newrelic) {\n window.newrelic.noticeError(e)\n }\n }\n return decodedObj\n }\n\n // Based on https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n _base64ToUtf8String (base64) {\n const binString = atob(base64)\n const bytes = window.Uint8Array.from(binString, (m) => m.codePointAt(0))\n return new window.TextDecoder().decode(bytes)\n }\n\n _isPastDate (date) {\n return new Date(date) < new Date()\n }\n}\n","export function getDiscount (discounts, publicationCode) {\n function sortDesc (a, b) {\n return b.discount - a.discount\n }\n\n function sortAsc (a, b) {\n return a.discount - b.discount\n }\n\n if (discounts && discounts.length > 0) {\n let filteredAndSorted\n if (publicationCode) {\n filteredAndSorted = discounts\n .filter(d => d?.publicationCode === publicationCode)\n .sort(sortDesc)\n } else {\n const filteredDiscounts = discounts.filter(item => item.discount !== 0)\n if (!filteredDiscounts.length) return null\n filteredAndSorted = filteredDiscounts.sort(sortAsc)\n }\n\n return filteredAndSorted.length > 0\n ? filteredAndSorted[0]?.discount\n : null\n }\n return null\n}\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { elementFromString } from '../../../js/document/html-helper'\nimport { CeProfile } from '../ce-profile/ce-profile'\n\nconst widgetApi = 'w-ce-welcome-msg'\n\nconst textVar = {\n partnerName: '{PartnerName}',\n partnerDiscount: '{PartnerDiscount}'\n}\n\nexport const widgetQueries = {\n settings: `[data-${widgetApi}__settings]`\n}\n\nexport default class CeWelcomeMsg {\n constructor (element) {\n this.element = element\n this._getHtmlElements()\n this.settingsData = this._getSettingsDataFromDom()\n if (this.settingsData) this._showCeWelcomeMsg()\n }\n\n _getHtmlElements () {\n this.settings = this.element.querySelector(widgetQueries.settings)\n }\n\n _getSettingsDataFromDom () {\n if (!this.settings) return false\n return JSON.parse(this.settings.textContent)\n }\n\n _renderWelcomeMsg (partnerDiscount, partnerName) {\n if (!this.settingsData.title || !this.settingsData.body) return\n const title = this._replaceTextVars(this.settingsData.title, partnerName, partnerDiscount)\n const body = this._replaceTextVars(this.settingsData.body, partnerName, partnerDiscount)\n const ceWelcomeMsgHtml = ceWelcomeMsgTemplate(title, body)\n const html = elementFromString(ceWelcomeMsgHtml)\n this.element.appendChild(html)\n }\n\n _replaceTextVars (str, partnerName, partnerDiscount) {\n let replacedStr = str.replaceAll(textVar.partnerName, partnerName)\n replacedStr = replacedStr.replaceAll(textVar.partnerDiscount, partnerDiscount)\n return replacedStr\n }\n\n _showCeWelcomeMsg () {\n const partner = new CeProfile().getPartnerData(this.settingsData.publicationCode)\n if (!partner) return false\n this._renderWelcomeMsg(partner.partnerDiscount, partner.partnerName)\n }\n}\n\nregisterWidget(CeWelcomeMsg, widgetApi)\n\nconst ceWelcomeMsgTemplate = (title, body) => {\n return `\n
\n
\n
\n \n
\n
${title}
\n ${body}\n
\n
`\n}\n","import storage from '../../../js/document/web-storage'\nimport { toCamelCase } from '../../../js/helpers/string'\nimport { registerWidget } from '../../../js/core/widget/widget-directory'\n\nconst widgetApi = 'w-cookie-consent'\n\nconst widgetQueries = {\n goBackButton: `data-${widgetApi}-modal-settings-go-back`,\n refuseButton: `data-${widgetApi}-modal-introduction__refuse-btn`,\n refuseButtonSettings: `data-${widgetApi}-modal-settings__refuse-btn`,\n modalIntroduction: `data-${widgetApi}-modal-introduction`,\n modalSettings: `data-${widgetApi}-modal-settings`,\n acceptButton: `data-${widgetApi}-modal-introduction__accept-btn`,\n confirmButton: `data-${widgetApi}-modal-settings__confirm-btn`\n}\n\nconst classNames = {\n cookieName: 'data-cookie-consent-name',\n cookieValue: 'cookie-values-enabled',\n masterCookieName: 'master-cookie',\n accordionCollapseClass: 'c-accordion__item-collapse',\n accordionHeadingClass: 'c-accordion__item-heading',\n switchItems: `${widgetApi}__option-item-cookies`\n}\n\nconst cookieLevels = {\n CookieValueUndefined: 'undefined',\n CookieValueStandard: 'Standard',\n CookieValueLimited: 'Limited'\n}\n\nexport default class CookieConsent {\n /**\n *\n * @constructor\n * @param {HTMLElement} element - The HTML element.\n */\n constructor (element) {\n if (!element) { return }\n this.element = element\n\n this.cookie = storage.cookie\n this.modal = this.element.querySelector(`[${widgetQueries.modalIntroduction}]`)['c-modal-v2']\n this.modalSettings = this.element.querySelector(`[${widgetQueries.modalSettings}]`)['c-modal-v2']\n this.refuseButton = this.element.querySelector(`[${widgetQueries.refuseButton}]`)\n this.refuseButtonSettings = this.element.querySelector(`[${widgetQueries.refuseButtonSettings}]`)\n this.acceptButton = this.element.querySelector(`[${widgetQueries.acceptButton}]`)\n this.confirmButton = this.element.querySelector(`[${widgetQueries.confirmButton}]`)\n this.goBackButton = this.element.querySelector(`[${widgetQueries.goBackButton}]`)\n\n this._setListeners()\n\n this._init()\n }\n\n _hideBackdropIfModalIsNotShown () {\n const styles = window.getComputedStyle(this.element)\n const modalIsHidden = styles.display === 'none' || styles.visibility === 'hidden'\n if (modalIsHidden) {\n this.modal.setProp('hiddenBackdrop', true)\n }\n }\n\n _closeModals () {\n this.modal.close()\n this.modalSettings.close()\n }\n\n _init () {\n const dataset = this._getDataset()\n\n if (!this._isCookieSet(dataset)) {\n this._confirmSelection(cookieLevels.CookieValueUndefined)\n this._hideBackdropIfModalIsNotShown()\n this.modal.open()\n }\n }\n\n _isCookieSet (data) {\n const cookieValue = this.cookie.get(data.cookieName)\n return (cookieValue !== null && cookieValue !== undefined && cookieValue !== cookieLevels.CookieValueUndefined)\n }\n\n _setCookies (data) {\n if (this._isCookieSet(data)) {\n this._cleanCookie()\n }\n this.cookie.set(data.cookieName, data[toCamelCase(classNames.cookieValue)], {\n domain: data.cookieDomain,\n path: data.cookiePath,\n expirationDays: parseInt(data.cookieExpirationDays)\n })\n this._closeModals()\n }\n\n _setListeners () {\n this.modalSettings.events.on('open', () => this.modal.close())\n this.acceptButton.addEventListener('click', () => this._confirmSelection(cookieLevels.CookieValueStandard))\n this.refuseButton.addEventListener('click', () => this._confirmSelection(cookieLevels.CookieValueLimited))\n this.refuseButtonSettings.addEventListener('click', () => this._confirmSelection(cookieLevels.CookieValueLimited))\n this.confirmButton.addEventListener('click', () => this._confirmSelection())\n this.goBackButton.addEventListener('click', () => {\n this.modalSettings.close()\n this.modal.open()\n })\n }\n\n /**\n * Confirm selection of cookies\n * - Revision pending -\n */\n _confirmSelection (cookieLevel) {\n const dataset = this._getDataset()\n const cookieSettingElements = Array.from(this.element.querySelectorAll(`.${classNames.switchItems} input[class=\"c-checkbox__input\"]`))\n if (cookieLevel) {\n dataset[toCamelCase(classNames.cookieValue)] = cookieLevel\n this._setCookies(dataset)\n } else if (cookieSettingElements) {\n let standard = false\n cookieSettingElements.forEach(element => {\n if (element.value === cookieLevels.CookieValueStandard) {\n if (element.checked) {\n standard = true\n }\n }\n })\n\n if (!standard) {\n dataset[toCamelCase(classNames.cookieValue)] = cookieLevels.CookieValueLimited\n } else {\n dataset[toCamelCase(classNames.cookieValue)] = cookieLevels.CookieValueStandard\n }\n this._setCookies(dataset)\n this._closeModals()\n }\n }\n\n /**\n * Remove cookies\n */\n _cleanCookie () {\n const dataset = this._getDataset()\n this.cookie.delete(dataset.cookieName)\n }\n\n /**\n * get dataset needed to get cookie info\n */\n _getDataset () {\n return this.element.dataset\n }\n}\n\nregisterWidget(CookieConsent, widgetApi)\n","import storage from '../../../js/document/web-storage'\nimport { toCamelCase } from '../../../js/helpers/string'\nimport { registerWidget } from '../../../js/core/widget/widget-directory'\n\nconst widgetApi = 'w-cookie-emergency-dialog'\n\nconst classNames = {\n item: 'c-absolute-dialog',\n masterCookieName: 'master-cookie',\n cookieName: 'data-cookie-name',\n cookieValue: 'cookie-values-enabled',\n modalSettings: 'cookie-settings',\n close: 'c-absolute-dialog__close',\n notFullWidth: 'w-cookie-emergency-dialog--not-full-width'\n}\n\nexport default class CookieEmergencyDialog {\n /**\n * Creates a new Emergency Dialog\n *\n * @constructor\n *\n * @param {HTMLElement} element - The element where to attach QuickSearch\n */\n constructor (element) {\n if (!element) { return }\n this.element = element\n\n this.cookie = storage.cookie\n\n this._init()\n }\n\n _init () {\n this._setMasterCookieListenerFn()\n this._cleanCookied()\n this._setEventListener()\n this._notCookiesBanner()\n this.element.classList.add('in')\n }\n\n /**\n * Remove those items whose cookies have been set already\n */\n _cleanCookied () {\n Array.from(this.element.querySelectorAll(`.${classNames.item}[${classNames.cookieName}]`))\n .filter((item) => this._isCookieSet(item.dataset.cookieName)).forEach((item) => item.remove())\n }\n\n /**\n * Get the master cookie element\n */\n _getMasterCookieElement () {\n return this.element.querySelector(`#${classNames.masterCookieName}.${classNames.item}`)\n }\n\n /**\n * Listener to set the cookie when dialog item is closed\n */\n _setEventListener () {\n this.element.addEventListener('click', (ev) => {\n const target = ev.target && ev.target.closest(`.${classNames.close}`)\n if (target) {\n const item = target.closest(`.${classNames.item}`)\n const dataset = item.dataset\n if (dataset.cookieName) { this._setCookies(dataset) }\n item.remove()\n }\n this._notCookiesBanner()\n })\n\n this._setMasterCookieListeners()\n }\n\n /**\n * Listener's function for master cookie's settings modal\n */\n _setMasterCookieListenerFn () {\n const masterCookie = this._getMasterCookieElement()\n if (masterCookie) {\n const masterCookieDataset = masterCookie.dataset\n this._masterCookieListenerFn = () => {\n const cookieSettingElements = Array.from(this.element\n .querySelectorAll(`[id*=\"-cookie-settings\"] .${classNames.modalSettings}__form input[name=\"setting-value\"]`))\n if (cookieSettingElements) {\n const selectedElement = cookieSettingElements.find((element) => element.checked)\n const dataset = masterCookieDataset\n // Sets the cookie's value and whatever settings found for master cookie\n dataset[toCamelCase(classNames.cookieValue)] = selectedElement.value\n Object.entries(selectedElement.dataset).forEach(([key, value]) => {\n dataset[key] = value\n })\n\n const masterCookie = this._getMasterCookieElement()\n if (masterCookie) {\n masterCookie.querySelector('button').click()\n } else {\n this._setCookies(dataset)\n }\n }\n }\n }\n }\n\n /**\n * Listener to submit master cookie's settings modal\n */\n _setMasterCookieListeners () {\n const masterCookieSubmitBtn = this.element.querySelector(`.${classNames.modalSettings}__submit`)\n if (masterCookieSubmitBtn) {\n masterCookieSubmitBtn.addEventListener('click', this._masterCookieListenerFn)\n }\n }\n\n _isMasterCookie (element) { return (element.id === classNames.masterCookieName) }\n\n _isCookieSet (id) { return (this.cookie.get(id) != null) }\n\n _setCookies (data) {\n this.cookie.set(data.cookieName, data[toCamelCase(classNames.cookieValue)], {\n domain: data.cookieDomain,\n path: data.cookiePath,\n expirationDays: parseInt(data.cookieExpirationDays)\n })\n }\n\n _notCookiesBanner () {\n if (!this.element.contains(document.getElementById(classNames.masterCookieName))) {\n this.element.classList.add(classNames.notFullWidth)\n }\n }\n}\n\nregisterWidget(CookieEmergencyDialog, widgetApi)\n","import storage from '../../../js/document/web-storage'\nimport { registerWidget } from '../../../js/core/widget/widget-directory'\n\nconst widgetApi = 'w-cookie-modal'\n\nexport default class CookieModal {\n /**\n * Creates a new Cookie Modal\n *\n * @constructor\n *\n * @param {HTMLElement} element -\n */\n constructor (element) {\n if (!element) { return }\n this.element = element\n\n this.cookie = storage.cookie\n this.modal = this.element.querySelector('.c-modal')['c-modal']\n\n this._init()\n }\n\n _init () {\n const data = this.element.dataset\n const oneTimeCookie = data.cookieOneTimeFlag !== undefined && data.cookieOneTimeFlag.toLowerCase() === 'true'\n\n if (!oneTimeCookie) {\n // Show modal if cookie does not have value\n // and set value in cookie\n this.modal.events.on('close', () => {\n this._setCookies(data)\n })\n\n if (!this._isCookieSet(data)) {\n this._hideBackdropIfModalIsNotShown()\n this.modal.open()\n }\n } else {\n // Show modal if cookie has value\n // and delete cookie\n this.modal.events.on('close', () => {\n this._deleteCookie(data)\n })\n if (this._isCookieSet(data)) {\n this._hideBackdropIfModalIsNotShown()\n this.modal.open()\n }\n }\n }\n\n _hideBackdropIfModalIsNotShown () {\n const styles = window.getComputedStyle(this.element)\n const modalIsHidden = styles.display === 'none' || styles.visibility === 'hidden'\n if (modalIsHidden) {\n this.modal.setProp('hiddenBackdrop', true)\n }\n }\n\n _isCookieSet (data) {\n const cookieValue = this.cookie.get(data.cookieName)\n return (cookieValue !== null && cookieValue !== undefined && cookieValue.toString() === data.cookieValueEnabled)\n }\n\n _setCookies (data) {\n const hasExpirationDays = (data.cookieExpirationDays !== null && data.cookieExpirationDays !== undefined)\n this.cookie.set(data.cookieName, data.cookieValueEnabled, {\n domain: data.cookieDomain,\n path: data.cookiePath,\n expirationDays: hasExpirationDays ? parseInt(data.cookieExpirationDays) : undefined\n })\n }\n\n _deleteCookie (data) {\n this.cookie.delete(data.cookieName)\n }\n}\n\nregisterWidget(CookieModal, widgetApi)\n","export const filterSelectedData = (data, useValue = false) => {\n const listOfSelected = []\n data.filter(c => c.checked === true && c.disabled === false)\n .map(c => listOfSelected.push(useValue ? c.value : c.text))\n data\n .forEach(c => {\n if (c.items) {\n c.items.filter(i => i.checked === true && i.disabled === false)\n .map(it => listOfSelected.push(useValue ? it.value : it.text))\n }\n })\n return listOfSelected\n}\n\nexport const autocompleteSelectedData = (data) => {\n if (data && data.model && data.model.attributes) {\n return [data.model.attributes.caption]\n }\n return []\n}\n\nexport const dropdownSimpleSelectedData = (data, useValue = false) => {\n return data.filter(c => c.selected === true && c.disabled === false)\n .map(c => useValue ? c.value : c.text)\n}\n","import { searchFilterType, quickSearchFilterType, bookingGateFilterType } from '../types'\nimport { filterSelectedData, dropdownSimpleSelectedData } from '../helpers/basic-components-tranformation-helper'\nimport { FILTER_TYPES } from '../../../../js/data/filters/config'\n\nexport const filtersSections = {\n SEARCH: 'search',\n QUICK_SEARCH: 'quicksearch',\n BOOKING_GATE: 'bookingGate'\n}\n\nconst dataLayersToIncludeInFilter = [\n { datalayer: 'partyComposition', element: 'participants selector', filterTypes: [FILTER_TYPES.PARTICIPANTS, searchFilterType.PARTICIPANTS] },\n { datalayer: 'country', element: 'checkbox', filterTypes: [FILTER_TYPES.COUNTRY, searchFilterType.COUNTRY] },\n { datalayer: 'region', element: 'checkbox', filterTypes: [FILTER_TYPES.REGION, searchFilterType.REGION] },\n { datalayer: 'city', element: 'checkbox', filterTypes: [FILTER_TYPES.CITY, searchFilterType.CITY] },\n { datalayer: 'departureDate', element: 'calendar', eventType: 'departure date', filterTypes: [FILTER_TYPES.DEPARTURE_DATE, searchFilterType.DEPARTURE_DATE], isRangeAccepted: true },\n { datalayer: 'duration', element: 'checkbox', filterTypes: [FILTER_TYPES.DURATION, searchFilterType.DURATION], useValue: true },\n { datalayer: 'price', element: 'slider', filterTypes: [FILTER_TYPES.PRICE_PER_PERSON, searchFilterType.PRICE_PER_PERSON], isRangeAccepted: true },\n { datalayer: 'airports', element: 'checkbox', filterTypes: [FILTER_TYPES.DEPARTURE_AIRPORT, searchFilterType.AIRPORTS], useValue: true },\n { datalayer: 'arrivalAirports', element: 'checkbox', filterTypes: [FILTER_TYPES.ARRIVAL_AIRPORT, searchFilterType.ARRIVAL_AIRPORTS], useValue: true },\n { datalayer: 'boardType', element: 'checkbox', filterTypes: [FILTER_TYPES.MEALPLAN, searchFilterType.MEALPLAN], useValue: true },\n { datalayer: 'number of rooms', element: 'radio button', filterTypes: [FILTER_TYPES.ROOM_COUNT, searchFilterType.ROOM_COUNT], useValue: true },\n { datalayer: 'ski area minimum altitude meters', element: 'checkbox', filterTypes: [FILTER_TYPES.SKI_AREA_MINIMUM_ALTITUDE_METERS, searchFilterType.SKI_MIN_ALTITUDE], useValue: true },\n { datalayer: 'bathroom count', element: 'checkbox', filterTypes: [FILTER_TYPES.BATHROOM_COUNT, searchFilterType.BATHROOM_COUNT], useValue: true },\n { datalayer: 'general facility', element: 'checkbox', filterTypes: [FILTER_TYPES.FACILITIES, searchFilterType.GENERAL_FACILITIES], useValue: true },\n { datalayer: 'internet facility', element: 'checkbox', filterTypes: [FILTER_TYPES.INTERNET_FACILITIES, searchFilterType.INTERNET_FACILITIES], useValue: true },\n { datalayer: 'children facility', element: 'checkbox', filterTypes: [FILTER_TYPES.CHILDREN_FACILITIES, searchFilterType.CHILDREN_FACILITIES], useValue: true },\n { datalayer: 'wifi facility', element: 'checkbox', filterTypes: [FILTER_TYPES.IS_WIFI_FREE, searchFilterType.WIFI_FACILITY], useValue: true },\n { datalayer: 'recommended', element: 'checkbox', filterTypes: [FILTER_TYPES.RECOMMENDED, searchFilterType.RECOMMENDED], useValue: true },\n { datalayer: 'campaigns', element: 'checkbox', filterTypes: [FILTER_TYPES.CAMPAIGNS, searchFilterType.CAMPAIGNS], useValue: true },\n { datalayer: 'themes', element: 'checkbox', filterTypes: [FILTER_TYPES.THEMES, searchFilterType.THEMES], useValue: true },\n { datalayer: 'departureWeeks', element: 'checkbox', eventType: 'departure weeks', filterTypes: [FILTER_TYPES.LAST_MINUTE, searchFilterType.LASTMINUTE], useValue: true },\n { datalayer: 'accoType', element: 'checkbox', eventType: 'accomodation type', filterTypes: [FILTER_TYPES.ACCOMMODATION_TYPE, searchFilterType.ACCOMMODATION_TYPE], useValue: true },\n { datalayer: 'ratings', element: 'checkbox', filterTypes: [FILTER_TYPES.CUSTOMERS_RATING, searchFilterType.CUSTOMER_RATING], useValue: true },\n { datalayer: 'distance from city center', element: 'checkbox', filterTypes: [FILTER_TYPES.METERS_TO_CENTER, searchFilterType.CENTER_DISTANCE], useValue: true },\n { datalayer: 'distance from slope', element: 'checkbox', filterTypes: [FILTER_TYPES.METERS_TO_SLOPE, searchFilterType.SLOPE_DISTANCE], useValue: true },\n { datalayer: 'distance from ski lift', element: 'checkbox', filterTypes: [FILTER_TYPES.METERS_TO_SKILIFT, searchFilterType.SKI_LIFT_DISTANCE], useValue: true },\n { datalayer: 'distance from sea', element: 'checkbox', filterTypes: [FILTER_TYPES.METERS_TO_BEACH, searchFilterType.BEACH_DISTANCE], useValue: true },\n { datalayer: 'discount', element: 'checkbox', filterTypes: [FILTER_TYPES.DISCOUNT, searchFilterType.DISCOUNT], useValue: true },\n { datalayer: 'beds in livingroom', element: 'checkbox', filterTypes: [FILTER_TYPES.BEDS_IN_LIVING_ROOM, searchFilterType.BEDS_LIVINGROOM], useValue: true },\n { datalayer: 'ski pass included', element: 'checkbox', filterTypes: [FILTER_TYPES.SKI_PASS_INCLUDED, searchFilterType.SKI__PASS_INCLUDED], useValue: true },\n { datalayer: 'ski area slopes kms', element: 'checkbox', filterTypes: [FILTER_TYPES.SKI_AREA_SLOPE_KMS, searchFilterType.SKI_AREA_KMS], useValue: true },\n { datalayer: 'has availability', element: 'checkbox', filterTypes: [FILTER_TYPES.HAS_AVAILABILITY, searchFilterType.HAS_AVAILABILITY], useValue: true },\n { datalayer: 'flight only', element: 'radio button', filterTypes: [FILTER_TYPES.FLIGHT_ONLY, searchFilterType.FLIGHT_ONLY], useValue: true },\n { datalayer: 'stars', element: 'radio button', filterTypes: [FILTER_TYPES.STARS, searchFilterType.STARS], useValue: true },\n { datalayer: 'labels', element: 'checkbox', filterTypes: [FILTER_TYPES.COLLECTION, searchFilterType.COLLECTION], useValue: true },\n { datalayer: 'transport', element: 'radio button', filterTypes: [FILTER_TYPES.TRANSPORT_TYPE, searchFilterType.TRANSPORT], useValue: true },\n { datalayer: 'airline', element: 'checkbox', filterTypes: [FILTER_TYPES.AIRLINE, searchFilterType.AIRLINE], useValue: true },\n { datalayer: 'destination', element: 'dropdown', filterTypes: [FILTER_TYPES.DESTINATION, searchFilterType.DESTINATION] }\n]\n\nconst dataLayersToIncludeInQuickFilter = [\n { datalayer: 'destination', element: 'dropdown', filterTypes: [FILTER_TYPES.DESTINATION, quickSearchFilterType.DESTINATION] },\n { datalayer: 'departureDate', element: 'calendar', eventType: 'departure date', filterTypes: [FILTER_TYPES.DEPARTURE_DATE, quickSearchFilterType.DEPARTURE_DATE], isRangeAccepted: true },\n { datalayer: 'duration', element: 'checkbox', filterTypes: [FILTER_TYPES.DURATION, quickSearchFilterType.DURATION], useValue: true },\n { datalayer: 'airports', element: 'checkbox', filterTypes: [FILTER_TYPES.DEPARTURE_AIRPORT, quickSearchFilterType.AIRPORTS] },\n { datalayer: 'arrivalAirports', element: 'checkbox', filterTypes: [FILTER_TYPES.ARRIVAL_AIRPORT, quickSearchFilterType.ARRIVAL_AIRPORTS] },\n { datalayer: 'partyComposition', element: 'participants selector', filterTypes: [FILTER_TYPES.PARTICIPANTS, quickSearchFilterType.PARTICIPANTS] },\n { datalayer: 'transport', element: 'dropdown', filterTypes: [FILTER_TYPES.TRANSPORT_TYPE, quickSearchFilterType.TRANSPORT], useValue: true }\n]\n\nconst dataLayersToIncludeInBookingGateFilter = [\n { datalayer: 'partyComposition', element: 'participants selector', filterTypes: [FILTER_TYPES.PARTICIPANTS, bookingGateFilterType.PARTICIPANTS] },\n { datalayer: 'month', element: 'tab', filterTypes: [FILTER_TYPES.MONTH, bookingGateFilterType.MONTH], useValue: true },\n { datalayer: 'durations', element: 'checkbox', filterTypes: [FILTER_TYPES.DURATIONS, bookingGateFilterType.DURATIONS], useValue: true },\n { datalayer: 'airports', element: 'checkbox', filterTypes: ['Airports', bookingGateFilterType.AIRPORTS], useValue: true },\n { datalayer: 'boardType', element: 'checkbox', filterTypes: [FILTER_TYPES.MEALPLAN, bookingGateFilterType.MEALPLAN], useValue: true },\n { datalayer: 'roomType', element: 'checkbox', filterTypes: [FILTER_TYPES.ROOM_TYPE, bookingGateFilterType.ROOM_TYPES], useValue: false },\n { datalayer: 'transport', element: 'dropdown', filterTypes: [FILTER_TYPES.TRANSPORT_TYPE, bookingGateFilterType.TRANSPORT], useValue: true }\n]\n\nexport const getDatalayerName = (filterType, filtersSection) => {\n const filterConfiguration = getFiltersConfiguration(filtersSection)\n const record = filterConfiguration.find(records => records.filterTypes.includes(filterType)) || null\n return record ? record.datalayer : null\n}\n\nexport const formatRange = (filterType, value, filtersSection) => {\n const filterConfiguration = getFiltersConfiguration(filtersSection)\n let result = value\n if (value) {\n value = value.map(v => v.toLowerCase())\n const record = filterConfiguration.find(records => records.filterTypes.includes(filterType)) || null\n if (record && record.isRangeAccepted && value.length > 1) {\n result = `${value[0].replace(/\\s+/g, '')} ${value[value.length - 1].replace(/\\s+/g, '')}`\n } else {\n result = value.join(',')\n }\n }\n return result\n}\n\nexport const getEventData = (filterType, filtersSection) => {\n const filterConfiguration = getFiltersConfiguration(filtersSection)\n let result = null\n const record = filterConfiguration.find(records => records.filterTypes.includes(filterType)) || null\n if (record) {\n result = {\n eventType: record.eventType || record.datalayer,\n element: record.element\n }\n }\n return result ?? {}\n}\n\nexport const formatParticipantsData = (data) => {\n return Object.entries(data).map(([key, val]) => {\n return key.charAt(0) + val.length\n })\n}\n\nexport const formatDataFromChipFilters = (data) => {\n if (data && data.models) {\n return data.models\n .filter(m => m.attributes.isSelected)\n .map(m => m.attributes.caption)\n }\n\n return []\n}\n\nexport const filterAndMapSelectedData = (data, track, filtersSection) => {\n return filterSelectedData(data, useValue(track, filtersSection))\n}\n\nexport const filterAndMapSelectedDropdownData = (data, track, filtersSection) => {\n return dropdownSimpleSelectedData(data, useValue(track, filtersSection))\n}\n\nexport const useValue = (filterType, filtersSection) => {\n const filterConfiguration = getFiltersConfiguration(filtersSection)\n const record = filterConfiguration.find(records => records.filterTypes.includes(filterType)) || null\n if (record) {\n return record.useValue ? record.useValue : false\n } else {\n return false\n }\n}\n\nconst getFiltersConfiguration = (filtersSection) => {\n switch (filtersSection) {\n case filtersSections.SEARCH:\n return dataLayersToIncludeInFilter\n\n case filtersSections.QUICK_SEARCH:\n return dataLayersToIncludeInQuickFilter\n\n case filtersSections.BOOKING_GATE:\n return dataLayersToIncludeInBookingGateFilter\n\n default:\n return []\n }\n}\n","export const PRODUCT_DIMENSIONS = {\n id: 'id',\n name: 'name',\n brand: 'brand',\n category: 'category',\n quantity: 'quantity',\n price: 'price',\n accoStars: 'dimension2',\n locationId: 'dimension3',\n transport: 'dimension4',\n composition: 'dimension5',\n badges: 'dimension6',\n rating: 'dimension7',\n duration: 'dimension8',\n tripComposition: 'dimension9',\n daysForDeparture: 'dimension10',\n totalGuests: 'dimension11',\n departureDate: 'dimension13',\n roomType: 'dimension28',\n boardType: 'dimension38',\n originalDepartureDate: 'dimension47',\n davinciServiceGroup: 'dimension75',\n equipments: 'equipments',\n countryId: 'countryId',\n cityId: 'citiId',\n regionId: 'regionId'\n}\n\nexport const CUSTOM_DIMENSIONS = {\n accoId: 'accoId',\n accoName: 'accoName',\n accoBrand: 'accoBrand',\n accoCategory: 'accoCategory',\n accoStars: 'accoStars',\n transport: 'transport',\n boardType: 'boardType',\n duration: 'duration',\n rating: 'rating',\n partyComposition: 'partyComposition',\n totalGuests: 'totalGuests',\n departureDate: 'departureDate',\n originalDate: 'originalDate',\n entryPrice: 'entryPrice',\n promotedPrice: 'promotedPrice',\n mandatoryPayment: 'mandatoryPayment',\n totalStepPrice: 'totalStepPrice',\n countryId: 'countryId',\n cityId: 'citiId',\n regionId: 'regionId',\n campaignId: 'campaignId'\n}\n\nexport const SET_SERVICE_OPERATION_TYPE = {\n add: 'Add',\n swap: 'Swap',\n remove: 'Remove'\n}\n\nexport const CUSTOM_PARAMETERS = {\n parameter_1: 'validated',\n parameter_2: 'description',\n parameter_3: 'element',\n parameter_4: 'type',\n parameter_5: 'result',\n parameter_6: 'interaction'\n}\n\nexport const SERVICE_MAPPER_TYPE = {\n checkout: 'Checkout',\n selfService: 'SelfService'\n}\n","import { CUSTOM_PARAMETERS } from '../constants'\n\nexport const ga4Mapper = (data, extraParams = {}) => {\n if (!data) { return null }\n const { event, validated, description, element, type, result, interaction } = data\n if (!event) { return null }\n\n return {\n event,\n ...(validated === true || validated === false) && { [CUSTOM_PARAMETERS.parameter_1]: validated },\n ...description && { [CUSTOM_PARAMETERS.parameter_2]: description },\n ...element && { [CUSTOM_PARAMETERS.parameter_3]: element },\n ...type && { [CUSTOM_PARAMETERS.parameter_4]: type },\n ...result && { [CUSTOM_PARAMETERS.parameter_5]: result },\n ...(interaction === true || interaction === false) && { [CUSTOM_PARAMETERS.parameter_6]: interaction },\n ...extraParams\n }\n}\n","import { filtersSections, formatRange, getDatalayerName, useValue } from '../../helpers/filters-config-convention-transform'\nimport { ga4Mapper } from '../ga4-mapper'\nimport { search } from '../../../search/event-types'\n\nexport const globalSearchMapper = (filters) => {\n const dataObjects = []\n let dataObject = {}\n if (filters) {\n let dataObjectKey = null\n filters.forEach(v => {\n dataObjectKey = getDatalayerName(v.type, filtersSections.SEARCH)\n if (dataObjectKey) {\n dataObject[dataObjectKey] = formatRange(v.type, useValue(v.type, filtersSections.SEARCH) ? v.values : v.captions, filtersSections.SEARCH)\n }\n })\n\n if (dataObject && (Object.entries(dataObject).length !== 0 && dataObject.constructor === Object)) {\n dataObject = { event: 'filterCollection', ...dataObject }\n dataObjects.push(dataObject)\n }\n }\n\n return dataObjects\n}\n\nexport const searchModifiersMapper = (data) => {\n let values = {}\n if (data.event === search.SEARCH_PAGINATION_CHANGE) {\n values = {\n event: 'paginationSearch',\n description: 'pagination of product listing',\n element: 'number',\n type: 'result page'\n }\n } else if (data.event === search.SEARCH_SORT_CHANGE) {\n values = {\n event: 'sortingSearch',\n description: 'sort product listing',\n element: 'dropdown',\n type: 'sorting on'\n }\n }\n\n return ga4Mapper({\n ...values,\n result: data.value,\n interaction: true\n })\n}\nexport const searchMapMapper = (data) => {\n return ga4Mapper({\n ...data,\n description: 'engagement with map',\n element: 'button',\n interaction: true\n })\n}\n\nexport const searchErrorMapper = (data) => {\n const dataObject = {\n event: 'trackErrorMessage',\n eventAction: data.isError ? 'An error has occured' : 'No results found',\n eventLabel: data.search\n }\n return dataObject\n}\n","export const impressionsSearchMapper = (impressions) => {\n function extraMap (v) {\n return {\n list: 'search result',\n duration: v.featuredFilters && v.featuredFilters.length > 0 ? v.featuredFilters[0] : '',\n totalGuests: calculateOccupancy(v.occupancyInfo),\n departureDate: v.departureDateDetail ? v.departureDateDetail : ''\n }\n }\n return mapper(impressions, extraMap)\n}\n\nexport const impressionsAccoListerMapper = (impressions) => {\n function extraMap (v) {\n return {\n id: v.accommodationId ? v.accommodationId : v.id ? v.id : '',\n list: v.isAccoTip ? 'acco-tips' : 'acco lister'\n }\n }\n return mapper(impressions, extraMap)\n}\n\nfunction mapper (impressions, extraMap) {\n const dataObjects = []\n let impressionsObjects = null\n let dataObject = {}\n let index = 1\n if (impressions) {\n impressions.forEach(v => {\n dataObject = {\n ...{\n id: v.id ? v.id : '',\n name: v.name ? v.name : '',\n category: formatLocations(v.countryName, v.regionName, v.cityName),\n position: v.position || index,\n accoStars: v.rating ? v.rating : '',\n badges: v.collection ? v.collection : '',\n rating: v.userRating ? v.userRating : '',\n entryPrice: (v.price && v.price.averagePrice) ? v.price.averagePrice : 0,\n campaignId: (v.price && v.price.yieldCampaignId) ? v.price.yieldCampaignId : '',\n campaignName: (v.price && v.price.yieldCampaignName) ? v.price.yieldCampaignName : '',\n cityId: v.locations?.find(l => l.type === 'city')?.deskId || '',\n countryId: v.locations?.find(l => l.type === 'country')?.deskId || '',\n regionId: v.locations?.find(l => l.type === 'region')?.deskId || ''\n },\n ...extraMap(v)\n }\n dataObjects.push(dataObject)\n index++\n })\n\n if (dataObjects && (Object.entries(dataObjects).length !== 0)) {\n impressionsObjects = { event: 'eec.impressionView', ecommerce: { impressions: dataObjects } }\n }\n }\n return impressionsObjects\n}\n\nexport const formatLocations = (country, region, city) => {\n const listOfLocations = []\n if (country) listOfLocations.push(country)\n if (region) listOfLocations.push(region)\n if (city) listOfLocations.push(city)\n return listOfLocations.join(' > ')\n}\n\nexport const calculateOccupancy = (occupancyInfo) => {\n let numberGuests = 0\n if (occupancyInfo) {\n const adults = occupancyInfo.adultsCount ? occupancyInfo.adultsCount : 0\n const babies = occupancyInfo.babiesCount ? occupancyInfo.babiesCount : 0\n const children = occupancyInfo.childrenCount ? occupancyInfo.childrenCount : 0\n\n numberGuests = adults + babies + children\n }\n\n return numberGuests\n}\n","export const clickSearchResultMapper = (data) => {\n if (!data) return null\n const dataObject = data.ecommerce.impressions[0]\n return {\n event: 'eec.impressionClick',\n ecommerce: {\n click: {\n actionField: { list: dataObject.list },\n products: [dataObject]\n }\n }\n }\n}\n","import { filtersSections, formatRange, getEventData } from '../helpers/filters-config-convention-transform'\nimport { ga4Mapper } from './ga4-mapper'\n\nexport const clickFilterMapper = (type, data, filtersSection) => {\n const { eventType, element } = getEventData(type, filtersSection)\n const eventResult = formatRange(type, data, filtersSection)\n if (eventType !== null && eventResult !== null && eventResult.trim() !== '') {\n const { name, description } = getEventName(filtersSection)\n return ga4Mapper({\n event: name,\n description,\n element,\n type: eventType,\n result: eventResult,\n interaction: true\n })\n }\n return null\n}\n\nconst getEventName = (filtersSection) => {\n switch (filtersSection) {\n case filtersSections.QUICK_SEARCH:\n return {\n name: 'clickQuickSearch',\n description: 'set quick search filter'\n }\n\n case filtersSections.SEARCH:\n return {\n name: 'clickFilter',\n description: 'set filter on product listing'\n }\n\n case filtersSections.BOOKING_GATE:\n return {\n name: 'clickAccoTabsFilter',\n description: 'set filter on price and book'\n }\n\n default:\n return {}\n }\n}\n","class Pusher {\n constructor () {\n this.dataObjectsBuffer = []\n this.GTMLoadedHandler = GTMLoadedHandler.bind(this)\n\n if (!Pusher.instance) {\n Pusher.instance = this\n }\n return Pusher.instance\n }\n\n pushDataObjects (dataObjects) {\n dataObjects.forEach(dataObject => {\n this.pushDataObject(dataObject)\n })\n }\n\n pushDataObject (dataObject) {\n if (!dataObject) return\n if (window.google_tag_manager) {\n window.dataLayer.push(dataObject)\n } else {\n window.addEventListener('gtm_loaded', this.GTMLoadedHandler)\n this.dataObjectsBuffer.push(dataObject)\n }\n }\n\n registerNewrelicEvent (dataObject) {\n if (!dataObject || !dataObject.event) return\n if (window.newrelic) {\n window.newrelic.noticeError(`[${dataObject.event}] event from datalayer`)\n }\n }\n}\n\nfunction GTMLoadedHandler () {\n window.removeEventListener('gtm_loaded', this.GTMLoadedHandler, false)\n this.dataObjectsBuffer.forEach(d => {\n window.dataLayer.push(d)\n })\n}\n\nconst pusher = new Pusher()\nObject.freeze(pusher)\nexport default pusher\n","import { formatLocations, calculateOccupancy } from './search/search-impressions-mapper'\n\nexport const favoritesMapper = (data) => {\n data = { ...data, category: getLocation(data) }\n\n const dataObject = {\n event: 'favourites',\n ecommerce: {\n page: data.page,\n action: data.action,\n products: {\n id: data.id || '',\n name: data.name || '',\n position: data.position || '',\n accoStarts: data.rating || '',\n badges: data.collection || '',\n rating: data.userRating || '',\n entryPrice: data.price ? data.price.averagePrice || '' : '',\n campaignId: data.price ? data.price.yieldCampaignId || '' : '',\n campaignName: data.price ? data.price.yieldCampaignName || '' : '',\n list: '',\n duration: data.featuredFilters ? data.featuredFilters.duration || '' : '',\n totalGuests: calculateOccupancy(data.occupancyInfo),\n departureDate: data.departureDateDetail || '',\n country: data.countryName || '',\n countryId: data.countryId || '',\n region: data.regionName || '',\n regionId: data.regionId || '',\n city: data.cityName || '',\n cityId: data.cityId || ''\n }\n }\n }\n return dataObject\n}\n\nconst getLocation = (data) => {\n if (data.location) return data.location\n if (data.countryName && data.countryName && data.countryName) { return formatLocations(data.countryName, data.countryName, data.countryName) }\n return ''\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { globalSearchMapper, searchModifiersMapper, searchErrorMapper, searchMapMapper } from '../mappers/search/search-global-mapper'\nimport { impressionsAccoListerMapper, impressionsSearchMapper } from '../mappers/search/search-impressions-mapper'\nimport { clickSearchResultMapper } from '../mappers/search/search-result-click-mapper'\nimport { clickFilterMapper } from '../mappers/filters-mapper'\nimport pusher from '../pusher'\nimport { filtersSections, formatParticipantsData, formatDataFromChipFilters, filterAndMapSelectedData, filterAndMapSelectedDropdownData } from '../helpers/filters-config-convention-transform'\nimport { searchMap as searchMapEvents } from '../../search-map/event-types'\nimport { favorite as favoriteEvents } from '../../../components/favorite/event-types'\nimport { favoritesMapper } from '../mappers/favorites-mapper'\n\nexport function listenSearchWidgetEvents (event) {\n event.on(eventTypes.searchEvents.SEARCH_FILTERS_APPLIED, (data) => {\n const mappedData = globalSearchMapper(data)\n pusher.pushDataObjects(mappedData)\n })\n\n event.on(eventTypes.searchEvents.SEARCH_RESULTS, (data) => {\n const mappedData = impressionsSearchMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.searchEvents.SEARCH_REMOVE_SINGLE_CHIP_FILTER, (data) => {\n const formattedData = formatDataFromChipFilters(data.data)\n const mappedData = clickFilterMapper(data.type, formattedData, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.searchEvents.SEARCH_MODIFIER_CHANGE, (data) => {\n const mappedData = searchModifiersMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.searchEvents.SEARCH_MAP_OPENED, (data) => {\n const mappedData = searchMapMapper({\n event: 'mapOpenedSearch',\n type: 'show map',\n result: 'map open'\n })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.searchEvents.SEARCH_ERROR, (data) => {\n const mappedData = searchErrorMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.searchEvents.SEARCH_RESULT_CLICK, (data) => {\n const mappedData = impressionsSearchMapper([data.data])\n const clickEvent = clickSearchResultMapper(mappedData)\n pusher.pushDataObject(clickEvent)\n })\n\n event.on(favoriteEvents.FAVORITE_MODAL_CLOSE, (data) => {\n data = {\n ...data,\n action: 'Close',\n page: 'PLP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_MODAL_OPEN, (data) => {\n data = {\n ...data,\n action: 'Open',\n page: 'PLP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_LOGIN, (data) => {\n data = {\n ...data,\n action: 'Login',\n page: 'PLP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_SIGNUP, (data) => {\n data = {\n ...data,\n action: 'Signup',\n page: 'PLP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_ADD, (data) => {\n data = {\n ...data,\n action: 'Add',\n page: 'PLP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_REMOVE, (data) => {\n data = {\n ...data,\n action: 'Remove',\n page: 'PLP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDateFilterWidgetEvents (event, track) {\n event.on(eventTypes.datesFilterEvents.DATES_FILTERS_APPLIED, (data) => {\n const mappedData = clickFilterMapper(track, data, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenPriceFilterWidgetEvents (event, track) {\n event.on(eventTypes.priceFilterEvents.PRICE_FILTERS_APPLIED, (data) => {\n const mappedData = clickFilterMapper(track, data, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenParticipantsFilterWidgetEvents (event, track) {\n event.on(eventTypes.participantsFilterEvents.PARTICIPANTS_FILTER__FILTER_APPLIED, (data) => {\n data = formatParticipantsData(data)\n const mappedData = clickFilterMapper(track, data, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenAccoListerWidgetEvents (event) {\n event.on(eventTypes.accoListerEvents.ACCO_LISTER_PRINTED, (data) => {\n const mappedData = impressionsAccoListerMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.accoListerEvents.ACCO_LISTER_ITEM_CLICKED, (data) => {\n const mappedData = impressionsAccoListerMapper([data.data])\n const clickEvent = clickSearchResultMapper(mappedData, data.targetUrl)\n pusher.pushDataObject(clickEvent)\n })\n}\n\nexport function listenDropdownMultipleEvents (event, track) {\n event.on('submit', (data) => {\n data = filterAndMapSelectedData(data, track, filtersSections.SEARCH)\n const mappedData = clickFilterMapper(track, data, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenChoiceListEvents (event, track) {\n event.on('changeOptions', (data, oldItems, method) => {\n if (oldItems === undefined || method === 'single') {\n data = filterAndMapSelectedData(data, track, filtersSections.SEARCH)\n const mappedData = clickFilterMapper(track, data, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n }\n })\n}\n\nexport function listenDropdownEvents (event, track) {\n event.on('changedOptions', (data) => {\n data = filterAndMapSelectedDropdownData(data, track, filtersSections.SEARCH)\n const mappedData = clickFilterMapper(track, data, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenMapEvents (event, track) {\n event.on(searchMapEvents.SEARCH_MAP_CLOSED, (data) => {\n const mappedData = searchMapMapper({\n event: 'mapClosedSearch',\n type: 'cancel',\n result: 'map closed'\n })\n pusher.pushDataObject(mappedData)\n })\n event.on(searchMapEvents.SEARCH_MAP_REFRESH, (data) => {\n const mappedData = searchMapMapper({\n event: 'mapRefreshSearch',\n type: 'refresh',\n result: 'map refresh'\n })\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDestinationMultipleEvents (event, track) {\n event.on('submit', (data) => {\n data = formatDataFromChipFilters(data)\n const mappedData = clickFilterMapper(track, data, filtersSections.SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n","export const validationErrorsMapper = (validations, track, eventName, fieldNameSuffix) => {\n const dataObjects = []\n validations.forEach(validation => {\n const dataObject = validationErrorMapper(validation, track, eventName, fieldNameSuffix)\n if (dataObject) {\n dataObjects.push(dataObject)\n }\n })\n return dataObjects\n}\n\nexport const validationErrorMapper = (validation, track, eventName, fieldNameSuffix) => {\n if (validation && validation.errorMessages && validation.errorMessages.length > 0) {\n return {\n event: eventName || 'trackErrorMessage',\n eventAction: validation.errorMessages.join('; '),\n eventLabel: addSuffix(validation.fieldName, fieldNameSuffix),\n ...(validation.fieldElement && validation.fieldElement.hasAttribute('data-track-value')) && { eventValue: validation.fieldValue }\n }\n }\n return null\n}\n\nexport const genericErrorMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n event: data.eventName,\n eventAction: data.message,\n eventLabel: data.field\n }\n }\n return dataObject\n}\n\nconst addSuffix = (mainstring, suffix) => {\n if (suffix) {\n return `${mainstring}_${suffix}`\n }\n return mainstring\n}\n","export const mapOptionPrice = (data) => {\n const pricePerParticipant = getPricePerParticipant(data)\n return pricePerParticipant?.price !== undefined ? pricePerParticipant.price : data.price || 0\n}\n\nexport const getQuantity = (data) => {\n const pricePerParticipant = getPricePerParticipant(data)\n return pricePerParticipant?.participantIds ? pricePerParticipant.participantIds.length : 1\n}\n\nconst getPricePerParticipant = (data) => {\n let pricePerParticipant\n if (data.prices && data.participantIds) {\n pricePerParticipant = data.prices.find(pricePerParticipant => pricePerParticipant.participantIds && pricePerParticipant.participantIds.some(participantId => data.participantIds.includes(participantId))) || null\n }\n return pricePerParticipant\n}\n","import { ga4Mapper } from '../ga4-mapper'\nimport { mapOptionPrice, getQuantity } from '../../helpers/booking-price-helper'\n\nexport const bookingChoiceListSelectionMapper = (data, interaction = false) => {\n if (data !== null && data.label && data.label.trim() !== '') {\n return ga4Mapper({\n event: 'Ancillaries',\n description: data.label,\n element: 'radiobutton',\n type: data.text,\n result: mapOptionPrice(data) * getQuantity(data),\n interaction\n })\n }\n return null\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const bookingChoiceListSwitchMapper = (data) => {\n let dataObject = null\n if (data && data.serviceName) {\n const serviceName = data.serviceName || ''\n const result = data.choosePerPersonIsChecked ? 'element selected' : 'element unselected'\n\n dataObject = ga4Mapper({\n event: 'Generic Service',\n description: 'Choose per participant',\n element: 'switch',\n type: serviceName,\n result,\n interaction: true\n })\n }\n return dataObject\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const bookingComparisonTableSelectionMapper = (data, interaction = true) => {\n if (data !== null && data !== undefined && data.text && data.text !== '') {\n return ga4Mapper({\n event: 'Ancillaries',\n description: 'select ancillary with comparison table',\n element: 'button',\n type: data.text,\n result: data.price,\n interaction\n })\n }\n return null\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const bookingLuggageSwitchMapper = (data) => {\n let dataObject = null\n if (data && data.serviceName) {\n const serviceName = data.serviceName || ''\n const result = data.choosePerPersonIsChecked ? 'element selected' : 'element unselected'\n\n dataObject = ga4Mapper({\n event: 'Ancillaries',\n description: data.description,\n element: 'switch',\n type: serviceName,\n result,\n interaction: true\n })\n }\n return dataObject\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const bookingParticipantsBadgeMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = mapParticipantsBadgeSaveButton(data.body)\n }\n return dataObject\n}\n\nconst mapParticipantsBadgeSaveButton = (body) => {\n if (!body) return null\n const description = body.participants && body.participants.some(participant => !!(participant.birthdate))\n ? 'Save participants badge form with birthdate'\n : 'Save participants badge form'\n return {\n event: 'Participants Badge',\n [CUSTOM_PARAMETERS.parameter_1]: true, // validated\n [CUSTOM_PARAMETERS.parameter_2]: description, // description\n [CUSTOM_PARAMETERS.parameter_3]: 'button', // element\n [CUSTOM_PARAMETERS.parameter_5]: 'save', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const bookingParticipantsFormFieldValidationErrorMapper = (data) => {\n if (data) {\n return ga4Mapper({\n event: 'Error',\n validated: data.isValid,\n description: data.errorTypes && data.errorTypes.length > 0 ? data.errorTypes[0] : 'without error message',\n element: 'booking participants form',\n type: data.type,\n result: 'field_validation',\n interaction: true\n })\n }\n return null\n}\n","import { CUSTOM_DIMENSIONS } from '../constants'\n\nexport function mapExtraData (accoData, data) {\n let dataObject = null\n if (accoData && data) {\n dataObject = {\n [CUSTOM_DIMENSIONS.accoId]: accoData.id || '',\n [CUSTOM_DIMENSIONS.accoName]: accoData.name || '',\n [CUSTOM_DIMENSIONS.accoBrand]: data.brand || '',\n [CUSTOM_DIMENSIONS.accoCategory]: accoData.category || '',\n [CUSTOM_DIMENSIONS.accoStars]: accoData.accoStars ? parseFloat(accoData.accoStars) : 0,\n [CUSTOM_DIMENSIONS.transport]: accoData.transport || '',\n [CUSTOM_DIMENSIONS.boardType]: accoData.boardType || '',\n [CUSTOM_DIMENSIONS.duration]: accoData.duration ? accoData.duration : 0,\n [CUSTOM_DIMENSIONS.rating]: accoData.rating ? parseFloat(accoData.rating) : 0,\n [CUSTOM_DIMENSIONS.partyComposition]: data.partyComposition || '',\n [CUSTOM_DIMENSIONS.totalGuests]: data.totalGuests || 0,\n [CUSTOM_DIMENSIONS.departureDate]: data.departureDate || '',\n [CUSTOM_DIMENSIONS.entryPrice]: accoData.price || 0,\n [CUSTOM_DIMENSIONS.totalStepPrice]: data.totalPrice || 0,\n [CUSTOM_DIMENSIONS.mandatoryPayment]: data.mandatoryPayment || false,\n [CUSTOM_DIMENSIONS.campaignId]: data.campaignCode || ''\n }\n }\n return dataObject\n}\n","import { PRODUCT_DIMENSIONS, CUSTOM_DIMENSIONS } from '../../constants'\nimport { mapExtraData } from '../../helpers/booking-dimensions-helper'\n\nexport const bookingStepMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n event: 'eec.checkout',\n ecommerce: {\n checkout: {\n actionField: {\n step: data.step ? data.step : 0\n }\n }\n },\n ...mapCommonData(data)\n }\n }\n return dataObject\n}\n\nexport const bookingDraftMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = bookingStepMapper(data)\n if (data.products && data.products.length > 0) {\n const accoObject = mapAccoProduct(data.products[0], data)\n if (accoObject) {\n dataObject.ecommerce.checkout.products = []\n dataObject.ecommerce.checkout.products.push(accoObject)\n }\n dataObject = { ...dataObject, ...mapExtraData(data.products[0], data) }\n }\n }\n return dataObject\n}\n\nexport const bookingTransactionCompleteMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n event: data.eCommerceAnalytics.event || 'transactionComplete',\n ecommerce: data.eCommerceAnalytics.ecommerce,\n ...mapCommonData(data.eCommerceCheckout),\n email: data.eCommerceCheckout.email,\n name: data.eCommerceCheckout.name,\n lastName: data.eCommerceCheckout.lastName\n }\n }\n return dataObject\n}\n\nexport const bookingPurchaseMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = bookingTransactionCompleteMapper(data)\n if (data.eCommerceCheckout.products && data.eCommerceCheckout.products.length > 0) {\n let accoData = { ...data.eCommerceCheckout.products[0] }\n if (data.eCommerceAnalytics && data.eCommerceAnalytics.ecommerce && data.eCommerceAnalytics.ecommerce.purchase.products.lenght > 0) {\n accoData = { ...accoData, price: data.eCommerceAnalytics.ecommerce.purchase.products[0].price }\n }\n const accoObject = mapAccoProduct(accoData, data.eCommerceCheckout)\n if (accoObject) {\n dataObject.ecommerce.purchase.products.shift()\n dataObject.ecommerce.purchase.products.unshift(accoObject)\n }\n dataObject = { ...dataObject, ...mapExtraData(accoData, data.eCommerceCheckout) }\n }\n }\n return dataObject\n}\n\nfunction mapAccoProduct (accoData, data) {\n let accoObject = null\n if (accoData) {\n accoObject = {\n ...{\n [PRODUCT_DIMENSIONS.id]: accoData.id || '',\n [PRODUCT_DIMENSIONS.name]: accoData.name || '',\n [PRODUCT_DIMENSIONS.brand]: data.brand || '',\n [PRODUCT_DIMENSIONS.category]: accoData.category || '',\n [PRODUCT_DIMENSIONS.quantity]: accoData.quantity || 0,\n [PRODUCT_DIMENSIONS.price]: accoData.price || 0,\n [PRODUCT_DIMENSIONS.accoStars]: accoData.accoStars ? parseFloat(accoData.accoStars) : 0, // accoStars\n [PRODUCT_DIMENSIONS.locationId]: data.locationId || 0, // locationId\n [PRODUCT_DIMENSIONS.transport]: accoData.transport || '', // transport\n [PRODUCT_DIMENSIONS.composition]: data.partyComposition || '', // composition\n [PRODUCT_DIMENSIONS.badges]: accoData.badges || '', // badges\n [PRODUCT_DIMENSIONS.rating]: accoData.rating ? parseFloat(accoData.rating) : 0, // rating\n [PRODUCT_DIMENSIONS.duration]: accoData.duration ? accoData.duration : 0, // duration\n [PRODUCT_DIMENSIONS.tripComposition]: data.partyComposition || '', // composition\n [PRODUCT_DIMENSIONS.daysForDeparture]: calculateDaysBeforeDeparture(data.departureDate), // days for departure\n [PRODUCT_DIMENSIONS.totalGuests]: data.totalGuests || 0, // totalguests\n [PRODUCT_DIMENSIONS.departureDate]: data.departureDate || '', // selected departuredate\n [PRODUCT_DIMENSIONS.roomType]: accoData.roomType || '', // roomtype\n [PRODUCT_DIMENSIONS.boardType]: accoData.boardType || '' // boardtype\n }\n }\n }\n return accoObject\n}\nfunction mapCommonData (data) {\n return {\n [CUSTOM_DIMENSIONS.accoId]: data.id || '',\n [CUSTOM_DIMENSIONS.accoBrand]: data.brand || '',\n [CUSTOM_DIMENSIONS.partyComposition]: data.partyComposition || '',\n [CUSTOM_DIMENSIONS.totalGuests]: data.totalGuests || 0,\n [CUSTOM_DIMENSIONS.departureDate]: data.departureDate || '',\n [CUSTOM_DIMENSIONS.mandatoryPayment]: data.mandatoryPayment || false\n }\n}\n\nfunction calculateDaysBeforeDeparture (dateString) {\n let daysDiff = 0\n let departureDate = new Date()\n const oneDay = 24 * 60 * 60 * 1000\n const now = new Date()\n now.setHours(0, 0, 0, 0)\n if (dateString && dateString.length === 8) {\n departureDate = new Date(dateString.substr(0, 4), dateString.substr(4, 2) - 1, dateString.substr(6, 2))\n } else if (dateString && dateString.length === 10) {\n departureDate = new Date(dateString)\n }\n daysDiff = Math.round(Math.abs((now - departureDate) / oneDay))\n\n return daysDiff\n}\n","export const bookingIdentifierMapper = (draftId) => {\n let dataObject = null\n if (draftId) {\n dataObject = { userId: draftId }\n }\n return dataObject\n}\n","class Context {\n constructor () {\n this.contexts = {}\n\n if (!Context.instance) {\n Context.instance = this\n }\n return Context.instance\n }\n\n addContext (context, data) {\n if (!data) return\n this.contexts[context] = data\n }\n\n getContext (context) {\n return this.contexts[context] || {}\n }\n}\n\nconst context = new Context()\nObject.freeze(context)\nexport default context\n","import { PRODUCT_DIMENSIONS, SERVICE_MAPPER_TYPE } from '../../constants'\nimport { mapExtraData } from '../../helpers/booking-dimensions-helper'\nimport { mapOptionPrice } from '../../helpers/booking-price-helper'\n\nconst OUTBOUND_LUGGAGE = 'OUT'\nconst INBOUND_LUGGAGE = 'IN'\nconst INBOUND_LUGGAGE_DIRECTION = 'Inbound'\n\nexport const mapRemove = (serviceMapperType, data, service, bookingData, servicesData) => {\n return map(serviceMapperType, data, service, bookingData, servicesData, 'ancillary_remove', 'remove')\n}\n\nexport const mapAdd = (serviceMapperType, data, service, bookingData, servicesData) => {\n return map(serviceMapperType, data, service, bookingData, servicesData, 'ancillary_add', 'add')\n}\n\nexport const mapAddAppliesToAllParticipants = (serviceMapperType, data, service, bookingData, servicesData) => {\n const events = []\n let event = null\n\n const bookingService = servicesData.find(s => s.componentId === data.componentId)\n const bookingOption = bookingService ? bookingService.options.find(o => o.code === service.serviceId) : null\n\n if (bookingOption) {\n const participantsToSwapOrAddService = bookingOption.appliesToParticipants.filter(p => !bookingOption.assignedParticipants.includes(p))\n participantsToSwapOrAddService.forEach(p => {\n const oldOption = bookingService.options.find(o =>\n o.isSelected &&\n o.assignedParticipants.includes(p)\n )\n\n if (oldOption) {\n const oldService = {\n code: oldOption.code,\n participants: [p]\n }\n event = mapRemove(serviceMapperType, data, oldService, bookingData, servicesData)\n event && events.push(event)\n }\n\n const newService = {\n code: service.serviceId,\n participants: [p]\n }\n event = mapAdd(serviceMapperType, data, newService, bookingData, servicesData)\n event && events.push(event)\n })\n }\n\n return events\n}\n\nexport const mapAddInboundLuggage = (serviceMapperType, data, bookingData, servicesData) => {\n const events = []\n let event = null\n const service = data.body.newService\n if (data.type === 'luggage' && service.code.includes(OUTBOUND_LUGGAGE)) {\n const bookingService = servicesData.find(s => s.componentId === data.componentId)\n const bookingOption = bookingService ? bookingService.options.find(o => o.code === service.code) : null\n\n if (bookingOption) {\n let newInboundServiceOption = null\n const inboundServiceName = service.code.replace(OUTBOUND_LUGGAGE, INBOUND_LUGGAGE)\n if (bookingOption.isNoneOption) {\n newInboundServiceOption = bookingService.options.find(o =>\n (!o.isSelected || !service.participants.every(p => o.assignedParticipants.includes(p))) &&\n o.direction === INBOUND_LUGGAGE_DIRECTION &&\n o.code === inboundServiceName &&\n o.isNoneOption)\n } else {\n newInboundServiceOption = bookingService.options.find(o =>\n (!o.isSelected || !service.participants.every(p => o.assignedParticipants.includes(p))) &&\n o.direction === INBOUND_LUGGAGE_DIRECTION &&\n o.code === inboundServiceName &&\n o.unitWeight === bookingOption.unitWeight &&\n o.numberOfUnits === bookingOption.numberOfUnits)\n }\n if (newInboundServiceOption) {\n const oldInboundServiceOption = bookingService.options.find(o =>\n o.isSelected &&\n service.participants.every(p => o.assignedParticipants.includes(p)) &&\n o.direction === INBOUND_LUGGAGE_DIRECTION)\n if (oldInboundServiceOption) {\n const oldInboundService = {\n code: oldInboundServiceOption.code,\n participants: service.participants\n }\n event = mapRemove(serviceMapperType, data, oldInboundService, bookingData, servicesData)\n event && events.push(event)\n }\n\n const newInboundService = {\n code: newInboundServiceOption.code,\n participants: service.participants\n }\n event = mapAdd(serviceMapperType, data, newInboundService, bookingData, servicesData)\n event && events.push(event)\n }\n }\n }\n return events\n}\n\nconst map = (serviceMapperType, data, service, bookingData, servicesData, event, operation) => {\n const isCheckout = serviceMapperType === SERVICE_MAPPER_TYPE.checkout\n\n let dataObject = null\n\n if (!service) return null\n const codeSanitized = sanitizeCode(data, service)\n const bookingService = getBookingService(data, servicesData)\n const bookingServiceOption = getBookingServiceOption(bookingService, service.code)\n if (bookingServiceOption) {\n dataObject = {\n event,\n ecommerce: {\n [operation]: {\n actionField: {\n list: isCheckout ? `checkout${bookingData.step ? bookingData.step : 0}` : 'my account'\n },\n products: [\n {\n id: codeSanitized,\n name: bookingServiceOption.displayText,\n price: mapOptionPrice(Object.assign({}, bookingServiceOption, data.rawData)),\n [PRODUCT_DIMENSIONS.category]: getServiceOptionCategory(bookingServiceOption),\n [PRODUCT_DIMENSIONS.davinciServiceGroup]: bookingServiceOption.groupCode,\n quantity: getQuantity(service, bookingService, bookingServiceOption),\n ...mapExtraPropertiesForServices(data, bookingServiceOption)\n }\n ]\n }\n },\n ...bookingData && mapExtraData(bookingData.products[0], bookingData)\n }\n }\n return dataObject\n}\n\nconst getBookingService = (data, servicesData) => {\n return servicesData.find(s => s.componentId === data.componentId)\n}\n\nconst getBookingServiceOption = (bookingService, code) => {\n return bookingService ? bookingService.options.find(o => o.code === code) : null\n}\n\nconst sanitizeCode = (data, service) => {\n let code = service.code\n if (data.body.datatype === 'carrental') {\n code = code.split('!')[0]\n }\n return code\n}\n\nconst getQuantity = (service, bookingService, bookingServiceOption) => {\n let quantity = bookingServiceOption.quantity\n if (bookingService.isPricePerPerson) {\n quantity = bookingServiceOption.quantity * service.participants.filter(Number).length\n }\n return quantity\n}\n\nconst getServiceOptionCategory = (bookingServiceOption) => {\n if (!bookingServiceOption) { return }\n return `Ancillary > ${bookingServiceOption.bestValueText ? 'Persuasion' : 'Additional cost'} > ${bookingServiceOption.groupCode}`\n}\n\nconst mapExtraPropertiesForServices = (data, bookingServiceOption) => {\n if (!data.body && !data.body.datatype) { return }\n\n switch (data.body.datatype) {\n case 'carrental': {\n if (!data.body.data) return {}\n const parsedAttributes = JSON.parse(data.body.data)\n const equipmentSelectedIds = parsedAttributes.equipments || null\n let equipments = []\n if (equipmentSelectedIds && bookingServiceOption.equipments) {\n equipments = bookingServiceOption.equipments.filter(equipment => equipmentSelectedIds.includes(equipment.id))\n }\n return {\n [PRODUCT_DIMENSIONS.equipments]: bookingServiceOption.selectedEquipments ? bookingServiceOption.selectedEquipments : equipments\n }\n }\n\n default:\n return {}\n }\n}\n","import { SERVICE_MAPPER_TYPE, SET_SERVICE_OPERATION_TYPE } from '../../constants'\nimport { mapAdd, mapRemove, mapAddInboundLuggage, mapAddAppliesToAllParticipants } from './booking-service-mapper'\n\nexport const checkoutMapper = (data, bookingData, servicesData) => {\n let events = []\n if (bookingData && bookingData.products.length > 0) {\n events = bookingServicesMapper(SERVICE_MAPPER_TYPE.checkout, data, bookingData, servicesData)\n }\n return events\n}\n\nexport const selfServiceMapper = (data, servicesData) => {\n return bookingServicesMapper(SERVICE_MAPPER_TYPE.selfService, data, null, servicesData)\n}\n\nconst bookingServicesMapper = (serviceMapperType, data, bookingData, servicesData) => {\n let events = []\n if (data && data.body && servicesData) {\n let event = null\n if (data.body.appliesToAllParticipants) {\n const appliesToAllParticipantsEvents = mapAddAppliesToAllParticipants(serviceMapperType, data, data.body, bookingData, servicesData)\n if (Array.isArray(appliesToAllParticipantsEvents)) {\n events = events.concat(appliesToAllParticipantsEvents)\n }\n }\n\n if (data.body.operationType === SET_SERVICE_OPERATION_TYPE.swap) {\n event = mapRemove(serviceMapperType, data, data.body.oldService, bookingData, servicesData)\n event && events.push(event)\n } else if (data.body.operationType === SET_SERVICE_OPERATION_TYPE.remove) {\n event = mapRemove(serviceMapperType, data, data.body.newService, bookingData, servicesData)\n event && events.push(event)\n }\n\n if ([SET_SERVICE_OPERATION_TYPE.swap, SET_SERVICE_OPERATION_TYPE.add].includes(data.body.operationType)) {\n event = mapAdd(serviceMapperType, data, data.body.newService, bookingData, servicesData)\n event && events.push(event)\n const luggageEvents = mapAddInboundLuggage(serviceMapperType, data, bookingData, servicesData)\n if (Array.isArray(luggageEvents)) {\n events = events.concat(luggageEvents)\n }\n }\n }\n return events\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const bookingErrorMapper = (data) => {\n if (data) {\n return ga4Mapper({\n event: 'Error',\n validated: !data.hasError,\n description: data.description || 'without error message',\n element: data.element || 'page',\n type: 'error_message_booking_steps',\n result: 'action_step_open',\n ...(data.interaction === true || data.interaction === false) && { interaction: data.interaction }\n })\n }\n return null\n}\n\nexport const bookingErrorModalButtonMapper = (track) => {\n if (!track) { return null }\n return ga4Mapper({\n event: 'Error', // Not sure if this has to be the event name\n description: 'error popup',\n element: 'button',\n result: 'button clicked',\n type: track,\n interaction: true\n })\n}\n","import { ga4Mapper } from '../ga4-mapper'\nimport * as types from '../../types'\n\nexport const bookingCarRentalEquipmentsMapper = (data) => {\n let dataObject = null\n if (data && data.options) {\n const currentSelectedOptions = data.options.filter(option => option.checked)\n const currentSelectedOptionIds = currentSelectedOptions.map(option => option.value)\n const carIdSelected = (data.carItemSelectedData && data.carItemSelectedData.value) || null\n let idsToBePushed = []\n let action = ''\n if (data.previousSelectedEquipmentIds && data.previousSelectedEquipmentIds.length > currentSelectedOptionIds.length) {\n idsToBePushed = getDifferenceBetweenEquipments(data.previousSelectedEquipmentIds, currentSelectedOptionIds)\n action = 'equipment_remove'\n } else {\n idsToBePushed = getDifferenceBetweenEquipments(currentSelectedOptionIds, data.previousSelectedEquipmentIds)\n action = 'equipment_add'\n }\n dataObject = mapEquipments(data, idsToBePushed, carIdSelected, action)\n }\n return dataObject\n}\n\nexport const bookingCarRentalCreditCardMapper = (data) => {\n let dataObject = null\n if (data) {\n const carIdSelected = (data.carItemSelectedData && data.carItemSelectedData.value) || null\n const action = (data.creditCardSelectedValues && data.creditCardSelectedValues.length > 0) ? 'checked' : 'unchecked'\n dataObject = mapCreditCard(carIdSelected, action)\n }\n return dataObject\n}\n\nexport const bookingCarRentalButtonsMapper = (track, data) => {\n let dataObject = null\n if (data && track) {\n const carId = (data.attr && data.attr.wBookingCarRental__carCode) || ''\n dataObject = mapBookingCarRentalButton(carId, track)\n }\n return dataObject\n}\n\nexport const bookingCarRentalCollapseMapper = (data, eventName) => {\n let dataObject = null\n if (data && (eventName === 'open' || eventName === 'close') && data.attr && data.attr.wBookingCarRental__collapseId) {\n const result = (eventName === 'open' ? 'show more' : (eventName === 'close' ? 'show less' : null))\n dataObject = mapBookingCarRental({ description: 'Open component', element: 'Collapse', type: data.attr.wBookingCarRental__collapseId, result, interaction: true })\n }\n return dataObject\n}\n\nexport const bookingCarRentalSliderButtonMapper = (data) => {\n let dataObject = null\n if (data && data.carListId && data.buttonDirection) {\n const result = data.buttonDirection === 'prev' ? 'move to previous slide' : 'move to next slide'\n dataObject = mapBookingCarRental({ description: 'Slider Navigation', element: 'slider', type: data.carListId, result, interaction: true })\n }\n return dataObject\n}\n\nconst getDifferenceBetweenEquipments = (array1, array2) => {\n const uniqIds =\n array1.length > 0\n ? array1.filter(element => {\n return !array2.includes(element)\n })\n : array2\n return uniqIds\n}\n\nconst getEquipmentTexts = (options, idsToBePushed) => {\n if (!idsToBePushed) return\n return options.filter(option => idsToBePushed.includes(option.value)).map(option => option.text).join(',')\n}\n\nconst mapEquipments = (data, idsToBePushed, carId, action) => {\n if (!carId) return null\n return ga4Mapper({\n event: 'Equipment Selection',\n description: getEquipmentTexts(data.options, idsToBePushed),\n element: 'checkbox',\n type: carId,\n result: action,\n validated: true\n })\n}\n\nconst mapCreditCard = (carId, action) => {\n if (!carId) return null\n return {\n ...mapBookingCarRental({ description: 'CreditCard clicked', element: 'checkbox', type: carId, result: action, interaction: true, validated: true })\n }\n}\n\nconst mapBookingCarRentalButton = (carId, track) => {\n const { description, result } = getCarRentalButtonDescriptionAndResult(track)\n\n return {\n ...mapBookingCarRental({ description, element: 'button', type: carId, result, interaction: true })\n }\n}\n\nconst mapBookingCarRental = (data) => {\n const { description, element, type, result, interaction, validated } = data\n return ga4Mapper({\n event: 'Car',\n description,\n element,\n type,\n result,\n interaction,\n validated\n })\n}\n\nexport const getCarRentalButtonDescriptionAndResult = (track) => {\n switch (track) {\n case types.bookingCarRentalType.UPGRADE:\n return { description: 'upgrade button clicked', result: 'upgrade' }\n\n case types.bookingCarRentalType.REMOVE:\n return { description: 'remove button clicked', result: 'remove' }\n\n case types.bookingCarRentalType.EDIT:\n return { description: 'edit button clicked', result: 'edit' }\n\n case types.bookingCarRentalType.CANCEL:\n return { description: 'cancel button clicked', result: 'cancel modifications' }\n\n case types.bookingCarRentalType.CONDITIONS:\n return { description: 'car conditions link clicked', result: 'conditions page opened' }\n\n default:\n return { description: '', result: '' }\n }\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const bookingSkiServiceAccordionMapper = (data) => {\n return bookingSkiServiceMapper(data, 'Open Component', data.result ? 'show more' : 'show less')\n}\n\nexport const bookingSkiServiceSwitchMapper = (data) => {\n return bookingSkiServiceMapper(data, 'Open Component', data.result ? 'on' : 'off')\n}\n\nexport const bookingSkiServiceCancelAndSaveButtonMapper = (data) => {\n return bookingSkiServiceMapper(data, 'Close Component', data.result)\n}\n\nexport const bookingSkiServiceFilterSportMapper = (data) => {\n return bookingSkiServiceMapper(data, 'Select sport', data.result)\n}\n\nexport const bookingSkiServiceFilterDurationMapper = (data) => {\n return bookingSkiServiceMapper(data, 'Select duration', data.result)\n}\n\nexport const bookingSkiServiceFilterMaterialCategoryMapper = (data) => {\n return bookingSkiServiceMapper(data, 'Select class of material', data.result)\n}\n\nexport const bookingSkiServiceFilterSportLevelMapper = (data) => {\n return bookingSkiServiceMapper(data, 'Select sport level', data.result)\n}\n\nexport const bookingSkiServiceChoiceListMapper = (data) => {\n return bookingSkiServiceMapper(data, 'choice list', data.result)\n}\n\nconst bookingSkiServiceMapper = (data, description, result) => {\n return {\n event: 'SKI',\n [CUSTOM_PARAMETERS.parameter_2]: description, // description\n [CUSTOM_PARAMETERS.parameter_3]: data.element, // element\n [CUSTOM_PARAMETERS.parameter_4]: data.serviceType, // type\n [CUSTOM_PARAMETERS.parameter_5]: result, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n}\n","import { CUSTOM_PARAMETERS } from '../constants'\n\nexport const serviceAvailableMapper = (data) => {\n if (data && data.serviceName) {\n return {\n event: 'Ancillaries',\n [CUSTOM_PARAMETERS.parameter_2]: 'ancillary available', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'element available', // element\n [CUSTOM_PARAMETERS.parameter_5]: data.serviceName, // result\n [CUSTOM_PARAMETERS.parameter_6]: false // interaction\n }\n }\n return null\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const bookingOptionalAncillariesPopupShownMapper = () => {\n return bookingOptionalAncillariesPopupMapper({\n element: 'element visible',\n result: 'pop-up shown',\n interaction: false\n })\n}\n\nexport const bookingOptionalAncillariesPopupCloseMapper = () => {\n return clickedMapper({ result: 'close' })\n}\n\nexport const bookingOptionalAncillariesPopupCloseOutsideMapper = () => {\n return clickedMapper({ result: 'close outside box' })\n}\n\nexport const bookingOptionalAncillariesPopupCloseEscMapper = () => {\n return clickedMapper({ result: 'close ESC key' })\n}\n\nexport const bookingOptionalAncillariesPopupBackToAncillariesMapper = () => {\n return clickedMapper({ result: 'back to ancillaries' })\n}\n\nexport const bookingOptionalAncillariesPopupContinueBookingMapper = () => {\n return clickedMapper({ result: 'continue booking' })\n}\n\nconst clickedMapper = (data) => {\n return bookingOptionalAncillariesPopupMapper({\n ...data,\n element: 'element clicked',\n interaction: true\n })\n}\n\nconst bookingOptionalAncillariesPopupMapper = (data) => {\n if (data) {\n return ga4Mapper({\n ...{\n event: 'Ancillaries',\n description: 'optional ancillaries popup'\n },\n ...data\n })\n }\n return null\n}\n","import { ga4Mapper } from '../ga4-mapper'\nimport { bookingBoxEvents } from '../../../../../js/document/event-types'\nimport { toCamelCase } from '../../../../../js/helpers/string'\n\nexport const collapseMapper = (data, eventName) => {\n const allowedEvents = [bookingBoxEvents.COLLAPSE_OPEN, bookingBoxEvents.COLLAPSE_CLOSE]\n const allowedBoxStates = ['default', 'selected']\n\n if (data && data.boxState && data.serviceName && allowedEvents.includes(eventName) && allowedBoxStates.includes(data.boxState)) {\n const boxStateDescription = (data.boxState === 'default' ? 'unselected ancillary' : 'already selected ancillary')\n\n const description = `${(eventName === bookingBoxEvents.COLLAPSE_OPEN ? 'open' : 'close')} ${boxStateDescription}`\n const result = `${boxStateDescription} ${(eventName === bookingBoxEvents.COLLAPSE_OPEN ? 'opened' : 'closed')}`\n\n return ga4Mapper({\n event: 'ancillaryengagement',\n description,\n element: 'collapse',\n type: toCamelCase(data.serviceName),\n result,\n interaction: true\n })\n }\n return null\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const bookingPreferencesMapper = (data) => {\n if (data) {\n return ga4Mapper({\n event: 'checkout_event',\n description: 'accommodation preferences',\n element: 'checkbox',\n type: data.getAttribute('data-text'),\n result: data.checked ? 'preference selected' : 'preference deselected'\n })\n }\n return null\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { validationErrorMapper } from '../mappers/shared/validation-errors-mapper'\nimport { bookingChoiceListSelectionMapper } from '../mappers/booking/booking-choice-list-selection-mapper'\nimport { bookingChoiceListSwitchMapper } from '../mappers/booking/booking-choice-list-switch-mapper'\nimport { bookingComparisonTableSelectionMapper } from '../mappers/booking/booking-comparison-table-selection-mapper'\nimport { bookingLuggageSwitchMapper } from '../mappers/booking/booking-luggage-switch-mapper'\nimport { bookingParticipantsBadgeMapper } from '../mappers/booking/booking-participants-badge-mapper'\nimport { bookingParticipantsFormFieldValidationErrorMapper } from '../mappers/booking/booking-participants-form-mapper'\nimport { bookingDraftMapper, bookingPurchaseMapper } from '../mappers/booking/booking-draft-mapper'\nimport { bookingIdentifierMapper } from '../mappers/shared/booking-identifier-mapper'\nimport context from '../context'\nimport pusher from '../pusher'\nimport { checkoutMapper } from '../mappers/booking/booking-services-mapper'\nimport { bookingErrorMapper, bookingErrorModalButtonMapper } from '../mappers/booking/booking-error-mapper'\nimport {\n bookingCarRentalEquipmentsMapper,\n bookingCarRentalCreditCardMapper,\n bookingCarRentalButtonsMapper,\n bookingCarRentalCollapseMapper,\n bookingCarRentalSliderButtonMapper\n} from '../mappers/booking/booking-car-rental-mapper'\nimport {\n bookingSkiServiceAccordionMapper,\n bookingSkiServiceSwitchMapper,\n bookingSkiServiceCancelAndSaveButtonMapper,\n bookingSkiServiceFilterSportMapper,\n bookingSkiServiceFilterDurationMapper,\n bookingSkiServiceFilterMaterialCategoryMapper,\n bookingSkiServiceFilterSportLevelMapper,\n bookingSkiServiceChoiceListMapper\n} from '../mappers/booking/booking-filterable-services-mapper'\nimport { serviceAvailableMapper } from '../mappers/service-available-mapper'\nimport {\n bookingOptionalAncillariesPopupBackToAncillariesMapper, bookingOptionalAncillariesPopupCloseEscMapper,\n bookingOptionalAncillariesPopupCloseMapper,\n bookingOptionalAncillariesPopupCloseOutsideMapper,\n bookingOptionalAncillariesPopupContinueBookingMapper,\n bookingOptionalAncillariesPopupShownMapper\n} from '../mappers/booking/booking-optional-ancillaries-popup-mapper'\nimport { collapseMapper } from '../mappers/booking/booking-box-mapper'\nimport { bookingPreferencesMapper } from '../mappers/booking/booking-preferences-mapper'\n\nexport function listenChoiceListEvents (event) {\n event.on(eventTypes.choiceListEvents.CHOICE_LIST_VALIDATION_ERROR, (data) => {\n const mappedData = validationErrorMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBookingErrorEvents (event, track) {\n event.on(eventTypes.bookingStepsEvents.ERROR_MESSAGE, (data) => {\n const mappedData = bookingErrorMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on('clickButton', () => {\n const mappedData = bookingErrorModalButtonMapper(track)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBookingChoiceListEvents (event) {\n event.on(eventTypes.bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, (data) => {\n if (data.rawData) {\n const mappedData = bookingChoiceListSelectionMapper(data.rawData, true)\n pusher.pushDataObject(mappedData)\n }\n })\n\n event.on(eventTypes.bookingStepsEvents.BOOKING_ITEM_INITIAL_VALUES, (data) => {\n const mappedData = bookingChoiceListSelectionMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingChoiceListEvents.CHOOSE_PER_PERSON_SWITCH, (data) => {\n const mappedData = bookingChoiceListSwitchMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n listenBookingItemEvents(event)\n}\n\nexport function listenBookingComparisonTableEvents (event) {\n event.on(eventTypes.bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, (data) => {\n if (data.rawData) {\n const mappedData = bookingComparisonTableSelectionMapper(data.rawData, true)\n pusher.pushDataObject(mappedData)\n }\n })\n\n listenBookingItemEvents(event)\n}\n\nexport function listenBookingLuggageEvents (event) {\n event.on(eventTypes.bookingLuggageEvents.CHOOSE_PER_PERSON_SWITCH, (data) => {\n console.log(data)\n const mappedData = bookingLuggageSwitchMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n listenBookingItemEvents(event)\n}\n\nexport function listenBookingPreferencesEvents (event) {\n event.on('click', (input) => {\n if (input) {\n const mappedData = bookingPreferencesMapper(input)\n pusher.pushDataObject(mappedData)\n }\n })\n}\n\nexport function listenBookingParticipantsBadgeEvents (event) {\n event.on(eventTypes.bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, (data) => {\n const mappedData = bookingParticipantsBadgeMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n listenBookingItemEvents(event)\n}\n\nexport function listenBookingCarRentalEvents (event) {\n event.on(eventTypes.bookingCarRentalEvents.EQUIPMENTS_CHANGED, (data) => {\n const mappedData = bookingCarRentalEquipmentsMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingCarRentalEvents.CREDIT_CARD_CHANGED, (data) => {\n const mappedData = bookingCarRentalCreditCardMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingCarRentalEvents.SLIDER_BUTTON_CLICKED, (data) => {\n const mappedData = bookingCarRentalSliderButtonMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n listenBookingItemEvents(event)\n}\n\nexport function listenBookingFilterableServiceSkiEvents (event) {\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_CONTAINER_TOGGLE, (data) => {\n const mappedData = bookingSkiServiceAccordionMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_SWITCH_TOGGLE, (data) => {\n const mappedData = bookingSkiServiceSwitchMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_CANCEL_BUTTON, (data) => {\n const mappedData = bookingSkiServiceCancelAndSaveButtonMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_SAVE_BUTTON, (data) => {\n const mappedData = bookingSkiServiceCancelAndSaveButtonMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_SPORT, (data) => {\n const mappedData = bookingSkiServiceFilterSportMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_DURATION, (data) => {\n const mappedData = bookingSkiServiceFilterDurationMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_MATERIAL_CATEGORY, (data) => {\n const mappedData = bookingSkiServiceFilterMaterialCategoryMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_SPORT_LEVEL, (data) => {\n const mappedData = bookingSkiServiceFilterSportLevelMapper(data)\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_CHOICE_LIST, (data) => {\n const mappedData = bookingSkiServiceChoiceListMapper(data)\n pusher.pushDataObject(mappedData)\n })\n listenBookingItemEvents(event)\n}\n\nexport function listenBookingItemEvents (event) {\n event.on(eventTypes.bookingItemEvents.BOOKING_ITEM_SERVICE_AVAILABLE, (data) => {\n if (data) {\n const mappedData = serviceAvailableMapper(data)\n pusher.pushDataObject(mappedData)\n }\n })\n listenBookingBoxEvents(event)\n}\n\nexport function listenBookingBoxEvents (event) {\n event.on(eventTypes.bookingBoxEvents.COLLAPSE_OPEN, (data) => {\n const mappedData = collapseMapper(data, eventTypes.bookingBoxEvents.COLLAPSE_OPEN)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingBoxEvents.COLLAPSE_CLOSE, (data) => {\n const mappedData = collapseMapper(data, eventTypes.bookingBoxEvents.COLLAPSE_CLOSE)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBookingOptionalAncillariesPopup (event) {\n event.on('open', () => {\n const mappedData = bookingOptionalAncillariesPopupShownMapper()\n pusher.pushDataObject(mappedData)\n })\n event.on('clickButton', () => {\n const mappedData = bookingOptionalAncillariesPopupCloseMapper()\n pusher.pushDataObject(mappedData)\n })\n event.on('backdropClicked', () => {\n const mappedData = bookingOptionalAncillariesPopupCloseOutsideMapper()\n pusher.pushDataObject(mappedData)\n })\n event.on('EscClicked', () => {\n const mappedData = bookingOptionalAncillariesPopupCloseEscMapper()\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingOptionalAncillariesPopupEvents.CLOSE_BUTTON_CLICKED, () => {\n const mappedData = bookingOptionalAncillariesPopupBackToAncillariesMapper()\n pusher.pushDataObject(mappedData)\n })\n event.on(eventTypes.bookingOptionalAncillariesPopupEvents.ACCEPT_BUTTON_CLICKED, () => {\n const mappedData = bookingOptionalAncillariesPopupContinueBookingMapper()\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBookingStepsWidgetEvents (event) {\n event.on(eventTypes.bookingStepsEvents.BOOKING_ITEM_BOOKINGDRAFT_FETCHED, (data) => {\n context.addContext('booking', data.eCommerceCheckout)\n context.addContext('bookingServices', data.services)\n let mappedData = null\n const bookingIdentifier = data.draftId ? bookingIdentifierMapper(data.draftId) : null\n // step data\n if (data.eCommerceCheckout) {\n mappedData = bookingDraftMapper(data.eCommerceCheckout)\n pusher.pushDataObject({ ...bookingIdentifier, ...mappedData })\n }\n\n // transaction complete data\n if (data.eCommerceAnalytics && data.eCommerceCheckout && data.isJustConfirmed) {\n const bookingStepsData = { eCommerceAnalytics: data.eCommerceAnalytics, eCommerceCheckout: data.eCommerceCheckout }\n mappedData = bookingPurchaseMapper(bookingStepsData)\n pusher.registerNewrelicEvent(mappedData)\n pusher.pushDataObject({ ...bookingIdentifier, ...mappedData })\n }\n })\n\n event.on(eventTypes.bookingStepsEvents.BOOKINGDRAFT_FETCHED_AFTER_ITEM_CHANGED, (data) => {\n context.addContext('bookingServices', data.services)\n })\n\n event.on(eventTypes.bookingStepsEvents.DATA_CHANGED, (data) => {\n try {\n const bookingContext = context.getContext('booking')\n const servicesContext = context.getContext('bookingServices')\n const mappedDataArray = checkoutMapper(data, bookingContext, servicesContext)\n mappedDataArray.map(d => pusher.pushDataObject(d))\n } catch (error) {}\n })\n}\n\n/**\n* listener for the button events on the profile data\n* @param {Object} event\n* @param {String} track\n*/\nexport function listenCarRentalButtonEvents (event, track) {\n event.on('clickButton', (_, data) => {\n const mappedData = bookingCarRentalButtonsMapper(track, data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenCollapseEvents (event) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = bookingCarRentalCollapseMapper(data, eventTypes.collapseEvents.OPEN)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, (data) => {\n const mappedData = bookingCarRentalCollapseMapper(data, eventTypes.collapseEvents.CLOSE)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBookingParticipantsFormEvents (event) {\n event.on(eventTypes.bookingParticipantsFormEvents.ITEM_FORM_VALIDATON_ERROR, (data) => {\n const mappedData = bookingParticipantsFormFieldValidationErrorMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n listenBookingBoxEvents(event)\n}\n","import { getDatesDifference, isValidDateObject } from '../../../../../js/helpers/dates'\nimport { ga4Mapper } from '../ga4-mapper'\n\nexport const mapMarkerMapper = (data) => {\n if (data !== null && data.markerType && data.markerType.trim() !== '') {\n let dataDescription = ''\n let dataType = ''\n if (data.markerType === 'center') {\n dataDescription = 'accomodation marker click on enlarged map'\n dataType = 'orginal acco'\n } else if (data.markerType === 'nearby') {\n dataDescription = 'nearby accomodation marker click on enlarged map'\n dataType = 'alternative acco'\n }\n\n const breadcrumbs = data.breadcrumbs.map(breadcrumb => breadcrumb.text).join(' > ')\n\n return ga4Mapper({\n event: 'MAP',\n description: dataDescription,\n element: 'enlarged map',\n type: dataType,\n result: data.titleText,\n interaction: true\n }, {\n accoCategory: breadcrumbs\n })\n }\n return null\n}\n\nexport const mapOpenedMapper = (data) => {\n if (data !== null && data.productName && data.productName.trim() !== '') {\n const productBreadcrumbs = data.productBreadcrumbs.map(breadcrumb => breadcrumb.text).join(' > ')\n\n return ga4Mapper({\n event: 'MAP',\n description: 'Click on map thumpnail to view accomodation on enlarged map',\n element: 'Thumbnail',\n type: 'map',\n result: data.productName,\n interaction: true\n }, {\n accoCategory: productBreadcrumbs\n })\n }\n return null\n}\n\nexport const mapClosedMapper = (data) => {\n if (data !== null && data.mapOpenDate !== null && isValidDateObject(data.mapOpenDate) && data.mapClosedDate !== null && isValidDateObject(data.mapClosedDate)) {\n const timeSpentSeconds = getDatesDifference(data.mapOpenDate, data.mapClosedDate, 'seconds')\n\n return ga4Mapper({\n event: 'MAP',\n description: 'the total time the enlarged map was open',\n element: 'enlarged map',\n type: 'timer',\n result: timeSpentSeconds,\n interaction: false\n })\n }\n return null\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { mapMarkerMapper, mapOpenedMapper, mapClosedMapper } from '../mappers/products/map-mapper'\nimport pusher from '../pusher'\n\nexport function listenProductMapEvents (event) {\n event.on(eventTypes.productMapEvents.ACCOMMODATION_MARKER_CLICKED, (data) => {\n const mappedData = mapMarkerMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.productMapEvents.PRODUCT_MAP_OPENED, (data) => {\n const mappedData = mapOpenedMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.productMapEvents.PRODUCT_MAP_CLOSED, (data) => {\n const mappedData = mapClosedMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","\nexport const staticContentDataMapper = (data) => {\n let accoObjects = null\n let dataObject = null\n const accoData = data ? data.dataset : null\n if (accoData) {\n dataObject = {\n id: accoData.wStaticContentDataId ? accoData.wStaticContentDataId : '',\n name: accoData.wStaticContentDataName ? accoData.wStaticContentDataName : '',\n category: accoData.wStaticContentDataCategory ? accoData.wStaticContentDataCategory : '',\n brand: accoData.wStaticContentDataBrand ? accoData.wStaticContentDataBrand : '',\n accoStars: accoData.wStaticContentDataAccoStars ? accoData.wStaticContentDataAccoStars : '',\n locationId: accoData.wStaticContentDataLocationId ? accoData.wStaticContentDataLocationId : '',\n badges: accoData.wStaticContentDataBadges ? accoData.wStaticContentDataBadges : '',\n rating: accoData.wStaticContentDataRating ? accoData.wStaticContentDataRating : '',\n cityId: accoData.wStaticContentDataLocationId || '',\n regionId: accoData.wStaticContentDataAccoRegionId || '',\n countryId: accoData.wStaticContentDataAccoCountryId || ''\n }\n\n accoObjects = {\n event: 'eec.detail',\n ecommerce: { detail: { actionField: { list: data.originList }, products: [dataObject] } }\n }\n }\n return accoObjects\n}\n","import { validationErrorsMapper } from '../mappers/shared/validation-errors-mapper'\nimport pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { staticContentDataMapper } from '../mappers/shared/accommodation-static-content-mapper'\nimport context from '../context'\n\nexport function listenFormComponentEvents (event, track) {\n event.on('validated', (data) => {\n const mappedData = validationErrorsMapper(data, track)\n pusher.pushDataObjects(mappedData)\n })\n}\n\nexport function listenAccommodationStaticContentDataWidgetEvents (event) {\n event.on(eventTypes.staticContentDataEvents.STATIC_CONTENT_DATA_READY, (data) => {\n context.addContext('accommodation', data)\n\n const mappedData = staticContentDataMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","export const partyCompositionGroupFormater = (participants) => {\n let nAdults = 0\n let nChildren = 0\n let nBabies = 0\n if (participants && participants.length > 0) {\n let actual = new Date(Date.now())\n const adult = actual.setFullYear(actual.getFullYear() - 17)\n actual = new Date(Date.now())\n const child = actual.setFullYear(actual.getFullYear() - 2)\n participants.forEach(p => {\n const pDate = Date.parse(p)\n if (pDate <= adult) {\n nAdults++\n } else if (pDate <= child) {\n nChildren++\n } else {\n nBabies++\n }\n })\n }\n return `${nAdults}a ${nChildren}c ${nBabies}b`\n}\n\nexport const partyCompositionParticipantsFormater = (participants) => {\n let nParticipants = ''\n if (participants) {\n nParticipants = participants.split(' ')[0]\n }\n return nParticipants\n}\n","import { partyCompositionGroupFormater, partyCompositionParticipantsFormater } from '../../helpers/standard-partycomposition-helper'\n\nexport const promotedPriceMapper = (priceData, accoDataset) => {\n let dataObject = null\n if (priceData) {\n dataObject = {\n event: 'eec.additionalDetail',\n accoId: priceData.accommodationId ? priceData.accommodationId : '',\n transport: (priceData.includedServices && priceData.includedServices.length > 0) ? priceData.includedServices[0] : '',\n boardType: (priceData.featuredFilters && priceData.featuredFilters.length > 2) ? priceData.featuredFilters[2] : '',\n duration: priceData.duration ? priceData.duration : '',\n partyComposition: (priceData.participants && priceData.participants.length > 0) ? partyCompositionGroupFormater(priceData.participants) : '',\n totalGuests: (priceData.featuredFilters && priceData.featuredFilters.length > 2) ? partyCompositionParticipantsFormater(priceData.featuredFilters[1]) : '',\n departureDate: (priceData.departureDate && priceData.departureDate.raw) ? priceData.departureDate.raw : '',\n entryPrice: (priceData.price && priceData.price.value) ? priceData.price.value : 0,\n campaignId: priceData.yieldCampaignCode ?? '',\n promotedPrice: 'shown', // or not shown\n cityId: accoDataset?.dataset?.wStaticContentDataLocationId || '',\n regionId: accoDataset?.dataset?.wStaticContentDataAccoRegionId || '',\n countryId: accoDataset?.dataset?.wStaticContentDataAccoCountryId || ''\n }\n }\n return dataObject\n}\n","import { PRODUCT_DIMENSIONS, CUSTOM_DIMENSIONS } from '../constants'\nimport { ga4Mapper } from './ga4-mapper'\n\nexport const participantsAllocatedMapper = (data, accoData) => {\n let dataObject = null\n const accoDataset = accoData ? accoData.dataset : null\n\n if (data && accoDataset) {\n dataObject = {\n event: 'eec.add',\n ecommerce: {\n currencyCode: _getCurrencyCode(data),\n add: {\n actionField: {\n list: 'participants allocated'\n },\n products: _mapProducts(accoDataset, data)\n }\n }\n }\n }\n return dataObject\n}\n\nexport const priceCellClickedMapper = (data, accoData) => {\n let dataObject = null\n const accoDataset = accoData ? accoData.dataset : null\n\n if (data && accoDataset) {\n dataObject = {\n event: 'viewPrices',\n descriptions: 'click on price in price table',\n element: 'price cell',\n type: sanitizeString(data.priceClickedData?.isPriceHighlighted ? 'Low price' : 'High price'),\n result: sanitizeString(data.priceClickedData ? data.priceClickedData.price : ''),\n interaction: true\n }\n }\n return dataObject\n}\n\nexport const closeBasketButtonMapper = (data, accoData) => {\n let dataObject = null\n const accoDataset = accoData ? accoData.dataset : null\n\n if (data && accoDataset) {\n dataObject = {\n event: 'eec.remove',\n ecommerce: {\n currencyCode: _getCurrencyCode(data),\n remove: {\n actionField: {\n list: 'close basket button clicked'\n },\n products: _mapProducts(accoDataset, data)\n }\n }\n }\n\n dataObject.ecommerce.remove.products[0].unallocatedGuests = data.unallocatedOccupation ? data.unallocatedOccupation.total : 0\n dataObject.ecommerce.remove.products[0].unallocatedPartyComposition = data.unallocatedOccupation ? getPartyCompositionDescription(data.unallocatedOccupation) : ''\n }\n\n return dataObject\n}\n\nexport const flightChangedMapper = (data) => {\n let dataObject = null\n\n if (data && data.flightInfo) {\n dataObject = _mapFlight(data.flightInfo)\n dataObject.event = data.direction + 'Flight'\n }\n\n return dataObject\n}\n\nexport const busChangedMapper = (data) => {\n let dataObject = null\n\n if (data && data.busInfo) {\n dataObject = _mapBus(data.busInfo)\n dataObject.event = data.direction + 'Bus'\n }\n\n return dataObject\n}\n\nexport const bookingGateSubmittedMapper = (data, accoData) => {\n let dataObject = null\n const accoDataset = accoData ? accoData.dataset : null\n\n if (data && accoDataset) {\n dataObject = {\n event: 'eec.submit',\n ecommerce: {\n currencyCode: _getCurrencyCode(data),\n add: {\n actionField: { list: accoData.originList },\n products: [{\n [PRODUCT_DIMENSIONS.id]: sanitizeString(accoDataset.wStaticContentDataId),\n [PRODUCT_DIMENSIONS.name]: sanitizeString(accoDataset.wStaticContentDataName),\n [PRODUCT_DIMENSIONS.brand]: sanitizeString(accoDataset.wStaticContentDataBrand),\n [PRODUCT_DIMENSIONS.category]: sanitizeString(accoDataset.wStaticContentDataCategory),\n [PRODUCT_DIMENSIONS.quantity]: data.allocatedPackages ? data.allocatedPackages.length : 0,\n [PRODUCT_DIMENSIONS.price]: data.totalPrice,\n [PRODUCT_DIMENSIONS.accoStars]: sanitizeString(accoDataset.wStaticContentDataAccoStars), // accoStars\n [PRODUCT_DIMENSIONS.locationId]: sanitizeString(accoDataset.wStaticContentDataLocationId), // locationId\n [PRODUCT_DIMENSIONS.transport]: sanitizeString(data.selectedValues ? data.selectedValues.TransportType : ''), // transport\n [PRODUCT_DIMENSIONS.composition]: data.totalOccupation ? getPartyCompositionDescription(data.totalOccupation) : '', // composition\n [PRODUCT_DIMENSIONS.badges]: sanitizeString(accoDataset.wStaticContentDataBadges), // badges\n [PRODUCT_DIMENSIONS.rating]: sanitizeString(accoDataset.wStaticContentDataRating), // rating\n [PRODUCT_DIMENSIONS.duration]: sanitizeString(data.priceClickedData ? data.priceClickedData.duration : ''), // duration\n [PRODUCT_DIMENSIONS.tripComposition]: data.totalOccupation ? getPartyCompositionDescription(data.totalOccupation) : '', // composition\n [PRODUCT_DIMENSIONS.daysForDeparture]: getDaysBeforeDeparture(data.priceClickedData ? data.priceClickedData.departureDate : ''), // days for departure\n [PRODUCT_DIMENSIONS.totalGuests]: getTotalOfParticipants(data), // totalguests\n [PRODUCT_DIMENSIONS.departureDate]: sanitizeDate(data.priceClickedData ? data.priceClickedData.departureDate : ''), // selected departuredate\n [PRODUCT_DIMENSIONS.roomType]: getRoomTypeDescription(data), // roomtype\n [PRODUCT_DIMENSIONS.boardType]: sanitizeString(data.selectedValues ? data.selectedValues.Mealplan : ''), // boardtype\n [PRODUCT_DIMENSIONS.originalDepartureDate]: data.originalDepartureDate, // original departuredate on the accodationpage\n [PRODUCT_DIMENSIONS.cityId]: sanitizeString(accoDataset.wStaticContentDataLocationId),\n [PRODUCT_DIMENSIONS.regionId]: sanitizeString(accoDataset.wStaticContentDataAccoRegionId),\n [PRODUCT_DIMENSIONS.countryId]: sanitizeString(accoDataset.wStaticContentDataAccoCountryId)\n\n }]\n }\n },\n [CUSTOM_DIMENSIONS.accoId]: sanitizeString(accoDataset.wStaticContentDataId),\n [CUSTOM_DIMENSIONS.accoName]: sanitizeString(accoDataset.wStaticContentDataName),\n [CUSTOM_DIMENSIONS.accoBrand]: sanitizeString(accoDataset.wStaticContentDataBrand),\n [CUSTOM_DIMENSIONS.accoCategory]: sanitizeString(accoDataset.wStaticContentDataCategory),\n [CUSTOM_DIMENSIONS.accoStars]: sanitizeString(accoDataset.wStaticContentDataAccoStars),\n [CUSTOM_DIMENSIONS.transport]: sanitizeString(data.selectedValues ? data.selectedValues.TransportType : ''),\n [CUSTOM_DIMENSIONS.boardType]: sanitizeString(data.selectedValues ? data.selectedValues.Mealplan : ''),\n [CUSTOM_DIMENSIONS.duration]: sanitizeString(data.priceClickedData ? data.priceClickedData.duration : ''),\n [CUSTOM_DIMENSIONS.rating]: sanitizeString(accoDataset.wStaticContentDataRating),\n [CUSTOM_DIMENSIONS.partyComposition]: data.totalOccupation ? getPartyCompositionDescription(data.totalOccupation) : '',\n [CUSTOM_DIMENSIONS.totalGuests]: getTotalOfParticipants(data),\n [CUSTOM_DIMENSIONS.departureDate]: sanitizeDate(data.priceClickedData ? data.priceClickedData.departureDate : ''),\n [CUSTOM_DIMENSIONS.originalDate]: data.originalDepartureDate,\n [CUSTOM_DIMENSIONS.entryPrice]: sanitizeString(data.priceClickedData ? data.priceClickedData.price : ''),\n [CUSTOM_DIMENSIONS.promotedPrice]: data.isPromotedPriceOpened ? 'shown' : '',\n [CUSTOM_DIMENSIONS.cityId]: sanitizeString(accoDataset.wStaticContentDataLocationId),\n [CUSTOM_DIMENSIONS.regionId]: sanitizeString(accoDataset.wStaticContentDataAccoRegionId),\n [CUSTOM_DIMENSIONS.countryId]: sanitizeString(accoDataset.wStaticContentDataAccoCountryId)\n }\n }\n\n return dataObject\n}\n\nexport const errorsThrownMapper = (data, accoData) => {\n let errorsObject = null\n\n if (data && data.origin) {\n const accoDataset = accoData ? accoData.dataset : null\n\n errorsObject = {\n // Identify the specific acco affected.\n brand: sanitizeString(accoDataset.wStaticContentDataBrand),\n accoId: sanitizeString(accoDataset.wStaticContentDataId),\n // Identify the error (type of event that produced the error, associated human message and list of underlying errors descriptions).\n event: 'eec.ajax_error',\n origin: data.origin,\n message: data.message || null,\n errors: data.errors || null\n }\n }\n\n return errorsObject\n}\n\nexport const priceTableViewedMapper = (data, accoData) => {\n let dataObject = null\n const accoDataset = accoData ? accoData.dataset : null\n\n if (data && accoDataset) {\n dataObject = {\n event: 'viewPrices',\n ecommerce: {\n currencyCode: _getCurrencyCode(data),\n add: {\n actionField: { list: accoData.originList },\n products: [{\n [PRODUCT_DIMENSIONS.id]: sanitizeString(accoDataset.wStaticContentDataId),\n [PRODUCT_DIMENSIONS.name]: sanitizeString(accoDataset.wStaticContentDataName),\n [PRODUCT_DIMENSIONS.brand]: sanitizeString(accoDataset.wStaticContentDataBrand),\n [PRODUCT_DIMENSIONS.category]: sanitizeString(accoDataset.wStaticContentDataCategory),\n [PRODUCT_DIMENSIONS.quantity]: data.allocatedPackages ? data.allocatedPackages.length : 0,\n [PRODUCT_DIMENSIONS.price]: data.totalPrice,\n [PRODUCT_DIMENSIONS.accoStars]: sanitizeString(accoDataset.wStaticContentDataAccoStars), // accoStars\n [PRODUCT_DIMENSIONS.locationId]: sanitizeString(accoDataset.wStaticContentDataLocationId), // locationId\n [PRODUCT_DIMENSIONS.transport]: sanitizeString(data.selectedValues ? data.selectedValues.TransportType : ''), // transport\n [PRODUCT_DIMENSIONS.composition]: data.totalOccupation ? getPartyCompositionDescription(data.totalOccupation) : '', // composition\n [PRODUCT_DIMENSIONS.badges]: sanitizeString(accoDataset.wStaticContentDataBadges), // badges\n [PRODUCT_DIMENSIONS.rating]: sanitizeString(accoDataset.wStaticContentDataRating), // rating\n [PRODUCT_DIMENSIONS.duration]: sanitizeString(data.priceClickedData ? data.priceClickedData.duration : ''), // duration\n [PRODUCT_DIMENSIONS.tripComposition]: data.totalOccupation ? getPartyCompositionDescription(data.totalOccupation) : '', // composition\n [PRODUCT_DIMENSIONS.daysForDeparture]: getDaysBeforeDeparture(data.priceClickedData ? data.priceClickedData.departureDate : ''), // days for departure\n [PRODUCT_DIMENSIONS.totalGuests]: getTotalOfParticipants(data), // totalguests\n [PRODUCT_DIMENSIONS.departureDate]: sanitizeDate(data.priceClickedData ? data.priceClickedData.departureDate : ''), // selected departuredate\n [PRODUCT_DIMENSIONS.roomType]: getRoomTypeDescription(data), // roomtype\n [PRODUCT_DIMENSIONS.boardType]: sanitizeString(data.selectedValues ? data.selectedValues.Mealplan : ''), // boardtype\n [PRODUCT_DIMENSIONS.cityId]: sanitizeString(accoDataset.wStaticContentDataLocationId),\n [PRODUCT_DIMENSIONS.regionId]: sanitizeString(accoDataset.wStaticContentDataAccoRegionId),\n [PRODUCT_DIMENSIONS.countryId]: sanitizeString(accoDataset.wStaticContentDataAccoCountryId)\n }]\n }\n },\n [CUSTOM_DIMENSIONS.accoId]: sanitizeString(accoDataset.wStaticContentDataId),\n [CUSTOM_DIMENSIONS.accoName]: sanitizeString(accoDataset.wStaticContentDataName),\n [CUSTOM_DIMENSIONS.accoBrand]: sanitizeString(accoDataset.wStaticContentDataBrand),\n [CUSTOM_DIMENSIONS.accoCategory]: sanitizeString(accoDataset.wStaticContentDataCategory),\n [CUSTOM_DIMENSIONS.accoStars]: sanitizeString(accoDataset.wStaticContentDataAccoStars),\n [CUSTOM_DIMENSIONS.transport]: sanitizeString(data.selectedValues ? data.selectedValues.TransportType : ''),\n [CUSTOM_DIMENSIONS.boardType]: sanitizeString(data.selectedValues ? data.selectedValues.Mealplan : ''),\n [CUSTOM_DIMENSIONS.duration]: sanitizeString(data.selectedValues && data.selectedValues.Duration ? data.selectedValues.Duration.join() : ''),\n [CUSTOM_DIMENSIONS.rating]: sanitizeString(accoDataset.wStaticContentDataRating),\n [CUSTOM_DIMENSIONS.partyComposition]: data.totalOccupation ? getPartyCompositionDescription(data.totalOccupation) : '',\n [CUSTOM_DIMENSIONS.totalGuests]: getTotalOfParticipants(data),\n [CUSTOM_DIMENSIONS.departureDate]: sanitizeDate(data.priceClickedData ? data.priceClickedData.departureDate : ''),\n [CUSTOM_DIMENSIONS.originalDate]: sanitizeString(data.originalDepartureDate ? data.originalDepartureDate : ''),\n [CUSTOM_DIMENSIONS.entryPrice]: sanitizeString(data.priceClickedData ? data.priceClickedData.price : ''),\n [CUSTOM_DIMENSIONS.promotedPrice]: data.isPromotedPriceOpened ? 'shown' : '',\n [CUSTOM_DIMENSIONS.cityId]: sanitizeString(accoDataset.wStaticContentDataLocationId),\n [CUSTOM_DIMENSIONS.regionId]: sanitizeString(accoDataset.wStaticContentDataAccoRegionId),\n [CUSTOM_DIMENSIONS.countryId]: sanitizeString(accoDataset.wStaticContentDataAccoCountryId)\n }\n }\n\n return dataObject\n}\n\nexport const openJawModalMapper = (data, result, interaction) => {\n const dataObject = {\n event: 'Flight',\n description: 'Open Jaw pop-up',\n element: interaction ? 'element clicked' : 'element visible',\n result,\n interaction,\n type: `${data.departureAirport} - ${data.arrivalAirport}`\n }\n return dataObject\n}\n\nexport const openJawSwitchMapper = (data, interaction) => {\n const dataObject = {\n event: 'Flight',\n description: 'Open Jaw switch',\n element: 'toggle',\n result: data.value ? 'On' : 'Off',\n interaction\n }\n return dataObject\n}\n\nexport const openStartBookingErrorModalMapper = (data) => {\n const dataObject = ga4Mapper({\n event: 'error',\n description: 'error popup in basket',\n element: 'popup_shown',\n result: 'not possible to create a booking',\n interaction: false,\n // .toString() is required as the returned object will pass through JSON.stringify() and the exception\n // is the result of an error object from a catch block, therefore it is shown as a string but it is really\n // an object. Using .toString() we extract the message from the object while still allowing the exception\n // variable to be a string passed to the mapper, therfore maintaining it as generic as possible.\n type: data?.exception?.toString() || 'error'\n })\n\n // Extra properties to be sent to GA4.\n dataObject.accoId = data?.accommodationId\n\n return dataObject\n}\n\nfunction _getCurrencyCode (data) {\n return sanitizeString(data && data.priceClickedData && data.priceClickedData.currencyCode ? data.priceClickedData.currencyCode : '')\n}\n\nfunction _mapProducts (accoDataset, data) {\n return [{\n name: sanitizeString(accoDataset.wStaticContentDataName),\n id: sanitizeString(accoDataset.wStaticContentDataId),\n brand: sanitizeString(accoDataset.wStaticContentDataBrand),\n category: sanitizeString(accoDataset.wStaticContentDataCategory),\n quantity: data.allocatedPackages ? data.allocatedPackages.length : 0,\n accoStars: sanitizeString(accoDataset.wStaticContentDataAccoStars),\n locationId: sanitizeString(accoDataset.wStaticContentDataLocationId),\n badges: sanitizeString(accoDataset.wStaticContentDataBadges),\n rating: sanitizeString(accoDataset.wStaticContentDataRating),\n transport: sanitizeString(data.selectedValues ? data.selectedValues.TransportType : ''),\n boardType: sanitizeString(data.selectedValues ? data.selectedValues.Mealplan : ''),\n duration: sanitizeString(data.priceClickedData ? data.priceClickedData.duration : ''),\n departureDate: sanitizeDate(data.priceClickedData ? data.priceClickedData.departureDate : ''),\n totalGuests: getTotalOfParticipants(data),\n partyComposition: data.totalOccupation ? getPartyCompositionDescription(data.totalOccupation) : '',\n daysBeforeDeparture: getDaysBeforeDeparture(data.priceClickedData ? data.priceClickedData.departureDate : ''),\n price: data.priceClickedData ? parseFloat(data.priceClickedData.price) : '',\n roomType: getRoomTypeDescription(data),\n priceHighlighted: booleanToString(data.priceClickedData && (data.priceClickedData.isPriceHighlighted || false)),\n campaignId: data.campaignCode ?? '',\n cityId: sanitizeString(accoDataset.wStaticContentDataLocationId),\n regionId: sanitizeString(accoDataset.wStaticContentDataAccoRegionId),\n countryId: sanitizeString(accoDataset.wStaticContentDataAccoCountryId)\n }]\n}\n\nfunction _mapFlight (flightInfo) {\n if (flightInfo) {\n return {\n flightProvider: sanitizeString(flightInfo.airlineId),\n arrivalAirport: sanitizeString(flightInfo.arrivalAirportId),\n departureAirport: sanitizeString(flightInfo.departureAirportId),\n departureDate: flightInfo.departureDate ? getDateFromDateTime(flightInfo.departureDate.raw) : '',\n departureTime: flightInfo.isDepartureTimeSpecified === true ? sanitizeString(flightInfo.departureDate ? flightInfo.departureDate.formattedTime : '') : '',\n price: flightInfo.priceDiff ? flightInfo.priceDiff.raw : '',\n isDefaultOption: booleanToString(flightInfo.isDefaultOption)\n }\n } else {\n return ''\n }\n}\n\nfunction _mapBus (busInfo) {\n if (busInfo) {\n return {\n departureCity: sanitizeString(busInfo.departureCityName).trim(),\n arrivalCity: sanitizeString(busInfo.arrivalCityName).trim(),\n departureDate: busInfo.departureDate ? getDateFromDateTime(busInfo.departureDate.raw) : '',\n departureTime: sanitizeString(busInfo.departureDate ? busInfo.departureDate.formattedTime : ''),\n price: busInfo.priceDiff ? busInfo.priceDiff.raw : '',\n isDefaultOption: booleanToString(busInfo.isDefaultOption)\n }\n } else {\n return ''\n }\n}\n\nconst booleanToString = (data) => {\n return data ? 'yes' : 'no'\n}\n\nconst sanitizeString = (data) => {\n return data || ''\n}\n\nconst sanitizeDate = (date) => {\n return sanitizeString(date ? date.replace(/-/g, '') : '')\n}\n\nconst getTotalOfParticipants = (data) => {\n if (data.selectedValues) {\n return data.selectedValues.Participants ? data.selectedValues.Participants.reduce((sum, pc) => sum + pc.length, 0) : 0\n } else {\n return ''\n }\n}\n\nconst getRoomTypeDescription = (data) => {\n return data.allocatedPackages ? data.allocatedPackages.map(pkg => pkg.roomName).join(' - ') : ''\n}\n\nconst getPartyCompositionDescription = (occupation) => {\n if (occupation) {\n return `${occupation.adults || 0}a ${occupation.children || 0}c ${occupation.babies || 0}b`\n } else {\n return ''\n }\n}\n\nconst getDaysBeforeDeparture = (departureDate) => {\n const oneDay = 24 * 60 * 60 * 1000 // hours * minutes * seconds * milliseconds\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n const departureDateSplitted = departureDate.split('-')\n const departureDateAsDate = new Date(departureDateSplitted[0], departureDateSplitted[1] - 1, departureDateSplitted[2])\n\n return Math.round(Math.abs((departureDateAsDate - today) / oneDay))\n}\n\nconst getDateFromDateTime = (dateTimeAsString) => {\n const dateTime = new Date(dateTimeAsString)\n\n let month = dateTime.getMonth() + 1\n\n if (month < 10) {\n month = '0' + month\n }\n\n let day = dateTime.getDate()\n\n if (day < 10) {\n day = '0' + day\n }\n\n return `${dateTime.getFullYear()}${month}${day}`\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport pusher from '../pusher'\nimport { filtersSections, formatParticipantsData, filterAndMapSelectedData, filterAndMapSelectedDropdownData } from '../helpers/filters-config-convention-transform'\nimport context from '../context'\nimport { promotedPriceMapper } from '../mappers/prices/promoted-price-mapper'\nimport { clickFilterMapper } from '../mappers/filters-mapper'\nimport {\n participantsAllocatedMapper,\n closeBasketButtonMapper,\n flightChangedMapper,\n busChangedMapper,\n bookingGateSubmittedMapper,\n errorsThrownMapper,\n priceCellClickedMapper,\n priceTableViewedMapper,\n openJawModalMapper,\n openJawSwitchMapper,\n openStartBookingErrorModalMapper\n} from '../mappers/booking-gate-mapper'\n\nexport function listenAccommodationPromotedPriceWidgetEvents (event) {\n event.on(eventTypes.promotedPriceEvents.PROMOTED_PRICE_DATA_LOADED, (data) => {\n const accommodationDataContext = context.getContext('accommodation')\n const mappedData = promotedPriceMapper(data, accommodationDataContext)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDropdownEvents (event, track) {\n event.on('changedOptions', (data) => {\n data = filterAndMapSelectedDropdownData(data, track, filtersSections.BOOKING_GATE)\n const mappedData = clickFilterMapper(track, data, filtersSections.BOOKING_GATE)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDropdownMultipleEvents (event, track) {\n event.on('submit', (data) => {\n data = filterAndMapSelectedData(data, track, filtersSections.BOOKING_GATE)\n const mappedData = clickFilterMapper(track, data, filtersSections.BOOKING_GATE)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenParticipantsFilterWidgetEvents (event, track) {\n event.on(eventTypes.participantsFilterEvents.PARTICIPANTS_FILTER__FILTER_APPLIED, (data) => {\n data = formatParticipantsData(data)\n const mappedData = clickFilterMapper(track, data, filtersSections.BOOKING_GATE)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenTabsFilterWidgetEvents (event, track) {\n event.on('tabChanged', (data) => {\n data = [data]\n const mappedData = clickFilterMapper(track, data, filtersSections.BOOKING_GATE)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBookingGateEvents (event, track) {\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_PARTICIPANTS_ALLOCATED, (data) => {\n const accommodationDataContext = context.getContext('accommodation')\n const mappedData = participantsAllocatedMapper(data, accommodationDataContext)\n\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_CLOSE_BASKET_BUTTON_CLICKED, (data) => {\n const accommodationDataContext = context.getContext('accommodation')\n const mappedData = closeBasketButtonMapper(data, accommodationDataContext)\n\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_FLIGHT_CHANGED, (data) => {\n const mappedData = flightChangedMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_BUS_CHANGED, (data) => {\n const mappedData = busChangedMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_BOOKING_SUBMITTED, (data) => {\n const accommodationDataContext = context.getContext('accommodation')\n const mappedData = bookingGateSubmittedMapper(data, accommodationDataContext)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_ERRORS_THROWN, (data) => {\n const accommodationDataContext = context.getContext('accommodation')\n const mappedData = errorsThrownMapper(data, accommodationDataContext)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_PRICE_CELL_CLICKED, (data) => {\n const accommodationDataContext = context.getContext('accommodation')\n const mappedData = priceCellClickedMapper(data, accommodationDataContext)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_PRICE_TABLE_VIEWED, (data) => {\n const accommodationDataContext = context.getContext('accommodation')\n const mappedData = priceTableViewedMapper(data, accommodationDataContext)\n pusher.pushDataObject(mappedData)\n })\n\n /* Open Jaw Modal */\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_OPEN_JAW_MODAL_OPEN, (data) => {\n const mappedData = openJawModalMapper(data, 'Pop-up shown', false)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_OPEN_JAW_MODAL_SUBMIT, (data) => {\n const mappedData = openJawModalMapper(data, 'Ok', true)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_OPEN_JAW_MODAL_CLOSE, (data) => {\n const mappedData = openJawModalMapper(data, 'Back', true)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_OPEN_JAW_SWITCH, (data) => {\n const mappedData = openJawSwitchMapper(data, true)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_OPEN_START_BOOKING_ERROR_MODAL, (data) => {\n const mappedData = openStartBookingErrorModalMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenSubscribeFormEvents (event, track) {\n event.on(eventTypes.bookingGateEvents.BOOKING_GATE_SUBSCRIBE_FORM_SUCCESS, () => {\n const subscribeFormData = {\n event: 'Next Season Alert',\n description: 'Alert Service',\n type: 'Next Season',\n result: 'Signup',\n eventValue: 1\n }\n pusher.pushDataObject(subscribeFormData)\n })\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { autocompleteSelectedData } from '../helpers/basic-components-tranformation-helper'\nimport { filtersSections, formatParticipantsData, formatDataFromChipFilters, filterAndMapSelectedData, filterAndMapSelectedDropdownData } from '../helpers/filters-config-convention-transform'\nimport { clickFilterMapper } from '../mappers/filters-mapper'\nimport pusher from '../pusher'\n\nexport function listenDropdownMultipleEvents (event, track) {\n event.on('submit', (data) => {\n data = filterAndMapSelectedData(data, track, filtersSections.QUICK_SEARCH)\n const mappedData = clickFilterMapper(track, data, filtersSections.QUICK_SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDestinationMultipleEvents (event, track) {\n event.on('submit', (data) => {\n data = formatDataFromChipFilters(data)\n const mappedData = clickFilterMapper(track, data, filtersSections.QUICK_SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDropdownEvents (event, track) {\n event.on('changedOptions', (data) => {\n data = filterAndMapSelectedDropdownData(data, track, filtersSections.QUICK_SEARCH)\n const mappedData = clickFilterMapper(track, data, filtersSections.QUICK_SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenAutocompleteEvents (event, track) {\n event.on('submit', (data) => {\n data = autocompleteSelectedData(data)\n const mappedData = clickFilterMapper(track, data, filtersSections.QUICK_SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDateFilterWidgetEvents (event, track) {\n event.on(eventTypes.datesFilterEvents.DATES_FILTERS_APPLIED, (data) => {\n const mappedData = clickFilterMapper(track, data, filtersSections.QUICK_SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenParticipantsFilterWidgetEvents (event, track) {\n event.on(eventTypes.participantsFilterEvents.PARTICIPANTS_FILTER__FILTER_APPLIED, (data) => {\n data = formatParticipantsData(data)\n const mappedData = clickFilterMapper(track, data, filtersSections.QUICK_SEARCH)\n pusher.pushDataObject(mappedData)\n })\n}\n","/**\n * List of error origins\n *\n */\nexport const ErrorOrigins = {\n CLIENT_SIDE_VALIDATION_ERROR: 'client_validation_error',\n SERVER_SIDE_VALIDATION_ERROR: 'server_validation_error',\n SERVER_SIDE_ERROR: 'server_error'\n}\n","import { ErrorOrigins } from '../helpers/error-origin-helper'\n\nexport const redeemVoucherServerValidationErrorMapper = (data) => {\n let mappedData = null\n if (data) {\n mappedData = redeemVoucherErrorMapper({\n eventName: 'trackErrorVoucher',\n field: `voucher_invalid_${ErrorOrigins.SERVER_SIDE_VALIDATION_ERROR}`,\n message: data.message,\n voucherCode: data.voucherCode\n })\n }\n return mappedData\n}\n\nexport const redeemVoucherServerSideErrorMapper = (data) => {\n let mappedData = null\n if (data) {\n mappedData = redeemVoucherErrorMapper({\n eventName: 'trackErrorVoucher',\n field: ErrorOrigins.SERVER_SIDE_ERROR,\n message: data.message,\n voucherCode: data.voucherCode\n })\n }\n return mappedData\n}\n\nconst redeemVoucherErrorMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n event: data.eventName ? data.eventName : '',\n eventAction: data.message ? data.message : '',\n eventLabel: data.field ? data.field : '',\n eventValue: data.voucherCode ? data.voucherCode : ''\n }\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport pusher from '../pusher'\nimport { redeemVoucherServerValidationErrorMapper, redeemVoucherServerSideErrorMapper } from '../mappers/voucher-mapper'\n\nexport function listenVoucherRedeemerWidgetEvents (event, track) {\n event.on(eventTypes.voucherRedeemerEvents.VOUCHER_REDEEMER_SERVER_VALIDATION_ERROR, (data) => {\n const mappedData = redeemVoucherServerValidationErrorMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.voucherRedeemerEvents.VOUCHER_REDEEMER_SERVER_ERROR, (data) => {\n const mappedData = redeemVoucherServerSideErrorMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { ga4Mapper } from './ga4-mapper'\n\nexport const paymentMethodMapper = (data, bookingContext) => {\n let dataObject = null\n if (data) {\n dataObject = {\n event: 'eec.checkout_option',\n ecommerce: {\n checkout_option: {\n actionField: {\n ...bookingContext.step && { step: bookingContext.step },\n option: data.paymentMethod,\n status: `${data.paymentType} ${data.amountPaid}`,\n manual: data.manual,\n isOwned: data.isOwned\n }\n }\n }\n }\n }\n return dataObject\n}\n\nexport const voucherSelectedMapper = (data, bookingContext) => {\n const dataObject = {\n event: 'eec.checkout_selected',\n ecommerce: {\n checkout_selected: {\n actionField: {\n ...bookingContext.step && { step: bookingContext.step },\n option: 'voucher',\n isOwned: !!((data && data.isOwned))\n }\n }\n }\n }\n return dataObject\n}\n\nexport const downPaymentCoveredMapper = (data = {}) => {\n if (!data.element || !data.type || !data.result) {\n return null\n }\n return ga4Mapper({\n event: 'rebookingAccount',\n description: 'Down payment covered',\n ...data\n })\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport pusher from '../pusher'\nimport { genericErrorMapper, validationErrorsMapper } from '../mappers/shared/validation-errors-mapper'\nimport { paymentMethodMapper, voucherSelectedMapper, downPaymentCoveredMapper } from '../mappers/payment-mapper'\nimport context from '../context'\nimport { ErrorOrigins } from '../helpers/error-origin-helper'\n\nexport function listenPaymentWidgetEvents (event, track) {\n event.on(eventTypes.paymentEvents.VOUCHER_AMOUNT_ERROR, (data) => {\n const mappedData = genericErrorMapper(\n { eventName: 'trackErrorVoucher', field: 'redeem part of the voucher', message: data })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.paymentEvents.PAYMENT_METHOD_SELECTED, (data) => {\n const bookingContext = context.getContext('booking')\n const mappedData = paymentMethodMapper(data, bookingContext)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.paymentEvents.VOUCHER_SELECTED, (data) => {\n const bookingContext = context.getContext('booking')\n const mappedData = voucherSelectedMapper(data, bookingContext)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.paymentEvents.ADD_VOUCHER, (data) => {\n const bookingContext = context.getContext('booking')\n const mappedData = voucherSelectedMapper(data, bookingContext)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.paymentEvents.DOWN_PAYMENT_COVERED, () => {\n const mappedData = downPaymentCoveredMapper({ element: 'alert', type: 'payment', result: 'pending confirmation', interaction: false })\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenFormComponentEvents (event, track) {\n event.on('validated', (data) => {\n const mappedData = validationErrorsMapper(data, track, 'trackErrorVoucher', ErrorOrigins.CLIENT_SIDE_VALIDATION_ERROR)\n pusher.pushDataObjects(mappedData)\n })\n}\n\nexport function listenButtonEvents (event) {\n event.on('clickButton', (element) => {\n const textBtn = element['c-btn'].getText()\n const mappedData = downPaymentCoveredMapper({ element: 'button', type: textBtn, result: 'booking confirmed', interaction: true })\n pusher.pushDataObject(mappedData)\n })\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const globalLiveSearchMapper = (data) => {\n return ga4Mapper({\n event: 'clickSiteSearch',\n description: 'engagement with site search ',\n element: 'search bar',\n type: data.term,\n result: 'result found',\n interaction: true\n })\n}\n\nexport const clickLiveSearchResultMapper = (data, callback) => {\n if (!data) return null\n const mappedObj = ga4Mapper({\n event: 'clickSiteSearch',\n description: 'engagement with site search ',\n element: 'search bar',\n type: data.selection.model.attributes.name,\n result: 'click result',\n interaction: true\n })\n mappedObj.eventCallback = () => callback()\n return mappedObj\n}\n\nexport const noResultsLiveSearchMapper = (data) => {\n return ga4Mapper({\n event: 'clickSiteSearch',\n description: 'engagement with site search ',\n element: 'search bar',\n type: data.term,\n result: 'no result',\n interaction: true\n })\n}\n","import pusher from '../pusher'\nimport { isEmptyObject } from '../../../../js/helpers/object'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { globalLiveSearchMapper, clickLiveSearchResultMapper, noResultsLiveSearchMapper } from '../mappers/live-search/live-search-mapper'\n\nexport function listenLiveSearchEvents (event) {\n event.on(eventTypes.liveSearchEvents.SUBMIT, (data) => {\n if (!isEmptyObject(window.google_tag_manager)) {\n const clickEvent = clickLiveSearchResultMapper(data, data.callback)\n pusher.pushDataObject(clickEvent)\n } else {\n data.callback()\n }\n })\n\n event.on(eventTypes.autocompleteEvents.INPUT_CHANGED, (data) => {\n const mappedData = globalLiveSearchMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.autocompleteEvents.NO_RESULTS, (data) => {\n const mappedData = noResultsLiveSearchMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const reviewsListMapper = (data) => {\n return {\n event: 'reviews',\n [CUSTOM_PARAMETERS.parameter_2]: 'Show review translations', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'clickable text', // element\n [CUSTOM_PARAMETERS.parameter_4]: data.country, // type\n [CUSTOM_PARAMETERS.parameter_5]: data.status, // result\n [CUSTOM_PARAMETERS.parameter_6]: true, // interaction\n ecommerce: {\n reviewTransalted: {\n id: data.id,\n overallRating: data.overallRating,\n country: data.country,\n partyComposition: data.partyComp,\n categoryScores: data.categoryScores\n }\n }\n }\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const reviewsListLanguageSwitchMapper = (data) => {\n let dataObject = null\n if (data && data.status != null) {\n dataObject = {\n event: 'reviews',\n [CUSTOM_PARAMETERS.parameter_2]: 'show review in own language', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'toggle', // element\n [CUSTOM_PARAMETERS.parameter_4]: window.navigator.language || window.navigator.userLanguage, // type\n [CUSTOM_PARAMETERS.parameter_5]: data.status ? 'on' : 'off', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n\n return dataObject\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const reviewsListPaginationMapper = (data) => {\n let dataObject = null\n if (data && data.currentPage != null) {\n let result = data.currentPage.toString()\n if (data.previous) {\n result = 'previous'\n } else if (data.next) {\n result = 'next'\n }\n\n dataObject = {\n event: 'reviews',\n [CUSTOM_PARAMETERS.parameter_2]: 'page interaction', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'pagination', // element\n [CUSTOM_PARAMETERS.parameter_4]: window.navigator.language || window.navigator.userLanguage, // type\n [CUSTOM_PARAMETERS.parameter_5]: result, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n\n return dataObject\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const reviewsListPartyCompositionMapper = (data) => {\n let dataObject = null\n const result = []\n\n if (data) {\n data.forEach(element => {\n if (element.checked) {\n result.push(element.text)\n }\n })\n }\n\n if (data && result.length !== 0) {\n dataObject = ga4Mapper({\n event: 'reviews',\n description: 'show reviews of party composition',\n element: 'dropdown',\n type: window.navigator.language || window.navigator.userLanguage, // type,\n result: result.join(','),\n interaction: true\n })\n }\n\n return dataObject\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const reviewsListSortingMapper = (data) => {\n let dataObject = null\n\n if (data) {\n dataObject = ga4Mapper({\n event: 'reviews',\n description: 'sort reviews',\n element: 'dropdown',\n type: window.navigator.language || window.navigator.userLanguage, // type,\n result: data,\n interaction: true\n })\n }\n\n return dataObject\n}\n","import pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { reviewsListMapper } from '../mappers/reviews-list/reviews-list-mapper'\nimport { reviewsListLanguageSwitchMapper } from '../mappers/reviews-list/reviews-list-language-switch-mapper'\nimport { reviewsListPaginationMapper } from '../mappers/reviews-list/reviews-list-pagination-mapper'\nimport { reviewsListPartyCompositionMapper } from '../mappers/reviews-list/reviews-list-party-composition-mapper'\nimport { reviewsListSortingMapper } from '../mappers/reviews-list/reviews-list-sorting-mapper'\n\nexport function listenReviewsListEvents (event) {\n event.on(eventTypes.reviewsListEvents.REVIEWS_LIST_REVIEW_TRANSLATED, (data) => {\n const mappedData = reviewsListMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.reviewsListEvents.REVIEWS_LIST_LANGUAGE_SWITCH, (data) => {\n const mappedData = reviewsListLanguageSwitchMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.reviewsListEvents.REVIEWS_LIST_PAGINATION, (data) => {\n const mappedData = reviewsListPaginationMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDropdownMultipleEvents (event) {\n event.on('submit', (data) => {\n const mappedData = reviewsListPartyCompositionMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenDropdownEvents (event) {\n event.on('change', (data) => {\n const mappedData = reviewsListSortingMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\nimport { reviewsTeaserType as events } from '../../types'\n\nexport const reviewsTeaserTranslateButtonMapper = (data, track) => {\n let dataObject = null\n if (data != null) {\n dataObject = {\n event: 'reviews',\n [CUSTOM_PARAMETERS.parameter_2]:\n 'Show review translations - teaser component', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'clickable text', // element\n [CUSTOM_PARAMETERS.parameter_4]: 'original language', // type\n [CUSTOM_PARAMETERS.parameter_5]: getResult(track), // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n\n return dataObject\n}\n\nconst getResult = event => {\n switch (event) {\n case events.REVIEWS_TEASER_TRANSLATIONS:\n return 'translate'\n\n case events.REVIEWS_TEASER_ORIGINAL:\n return 'original'\n\n default:\n return ''\n }\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const reviewsTeaserClosePopupMapper = () => {\n let dataObject = null\n\n dataObject = {\n event: 'reviews',\n [CUSTOM_PARAMETERS.parameter_2]: 'Close all reviews - teaser component', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'button', // element\n [CUSTOM_PARAMETERS.parameter_4]: 'click text button', // type\n [CUSTOM_PARAMETERS.parameter_5]: 'close modal', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n\n return dataObject\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const reviewsTeaserOpenPopupMapper = data => {\n let dataObject = null\n if (data) {\n dataObject = {\n event: 'reviews',\n [CUSTOM_PARAMETERS.parameter_2]: 'Show all reviews - teaser component', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'button - ' + data, // element\n [CUSTOM_PARAMETERS.parameter_4]: 'click text button', // type\n [CUSTOM_PARAMETERS.parameter_5]: 'open modal', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n\n return dataObject\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\nimport * as eventTypes from '../../../../../js/document/event-types'\n\nexport const reviewsTeaserShowMoreMapper = track => {\n let dataObject = null\n if (\n track === eventTypes.collapseEvents.OPEN ||\n track === eventTypes.collapseEvents.CLOSE\n ) {\n dataObject = {\n event: 'reviews',\n [CUSTOM_PARAMETERS.parameter_2]:\n 'Read complete review - teaser component', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'clickable text', // element\n [CUSTOM_PARAMETERS.parameter_4]: showMore(track)\n ? 'read more'\n : 'read less', // type\n [CUSTOM_PARAMETERS.parameter_5]: showMore(track)\n ? 'show more'\n : 'show less', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n\n return dataObject\n}\n\nconst showMore = event => {\n switch (event) {\n case eventTypes.collapseEvents.OPEN:\n return true\n\n default:\n return false\n }\n}\n","import { reviewsTeaserTranslateButtonMapper } from '../mappers/reviews-teaser/reviews-teaser-translate-button-mapper'\nimport { reviewsTeaserClosePopupMapper } from '../mappers/reviews-teaser/reviews-teaser-close-popup-mapper'\nimport { reviewsTeaserOpenPopupMapper } from '../mappers/reviews-teaser/reviews-teaser-open-popup-mapper'\nimport { reviewsTeaserShowMoreMapper } from '../mappers/reviews-teaser/reviews-teaser-show-more-mapper'\nimport { reviewsTeaserType as events } from '../types'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport pusher from '../pusher'\n\nexport function listenButtonEvents (event, track) {\n event.on('clickButton', data => {\n if (\n track === events.REVIEWS_TEASER_TRANSLATIONS ||\n track === events.REVIEWS_TEASER_ORIGINAL\n ) {\n const mappedData = reviewsTeaserTranslateButtonMapper(data, track)\n pusher.pushDataObject(mappedData)\n }\n })\n}\n\nexport function listenReviewsTeaserPopup (event) {\n event.on('close', () => {\n const mappedData = reviewsTeaserClosePopupMapper()\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenCollapseEvents (event) {\n event.on(eventTypes.collapseEvents.OPEN, () => {\n const mappedData = reviewsTeaserShowMoreMapper(\n eventTypes.collapseEvents.OPEN\n )\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, () => {\n const mappedData = reviewsTeaserShowMoreMapper(\n eventTypes.collapseEvents.CLOSE\n )\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenReviewsTeaserEvents (event) {\n event.on(eventTypes.reviewsTeaserEvents.REVIEWS_TEASER_MODAL_OPENED, (data) => {\n const mappedData = reviewsTeaserOpenPopupMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { accountBookingType as events } from '../../types'\nimport { excursionsEvents, accountSpecialLuggageEvents } from '../../../../../js/document/event-types'\n\nimport { ga4Mapper } from '../ga4-mapper'\n\n/**\n* Mapper for the toggles of the account booking\n* @param {Object} data\n* @param {String} eventName\n* @param {String} track\n* @returns {Object | null}\n*/\nexport const toggleMapper = (data, eventName, track) => {\n const dataResult = eventName\n let dataObject = null\n const dataEvent = track && data ? getToggleData(track, data) : null\n\n if (dataEvent && dataResult) {\n dataObject = ga4Mapper({\n ...dataEvent,\n result: dataResult,\n element: 'button',\n interaction: true\n })\n }\n return dataObject\n}\n\n/**\n* Get the toggle data depending on the event received\n* @param {String} event\n* @returns {Object}\n*/\nexport const getToggleData = (event, data) => {\n switch (event) {\n case events.PARTICIPANT_TOGGLED:\n if (!data.attr || !data.attr.participant) return null\n return {\n event: 'participantInfo',\n description: 'open or close personal detail overview',\n type: data.attr.participant\n }\n\n case events.TRANSPORT_SUMMARY_TOGGLED:\n if (!data.attr || !data.attr.participant) return null\n return {\n event: 'transportSummaryInfo',\n description: 'open or close transport summary overview',\n type: data.attr.participant\n }\n\n case events.CONTACT_INFO_TOGGLED:\n return {\n event: 'contactInfo',\n description: 'open or close contact information'\n }\n\n default:\n return ''\n }\n}\n\nexport const paymentMapper = (data, textBtn) => {\n let dataObject = null\n if (data && data.attr && data.attr.bookingNumber && textBtn) {\n dataObject = ga4Mapper({\n event: 'paymentCTA',\n description: 'click on payment cta',\n element: 'button',\n type: textBtn,\n result: data.attr.bookingNumber,\n interaction: true\n })\n }\n return dataObject\n}\n\nexport const deleteBookingMapper = (eventName) => {\n let dataObject = null\n const eventResult = getDeleteBookingEventResult(eventName)\n if (eventResult) {\n dataObject = ga4Mapper({\n event: 'manageAccount',\n description: 'manage account',\n element: 'button',\n result: eventResult,\n interaction: true\n })\n }\n return dataObject\n}\n\nexport const getDeleteBookingEventResult = (event) => {\n switch (event) {\n case events.DELETE_BOOKING_MODAL_OPEN:\n return 'delete booking modal open'\n\n case events.BOOKING_DELETED:\n return 'booking deleted'\n\n default:\n return ''\n }\n}\n\n/**\n* Mapper for the excursions\n* @param {String} eventName\n* @param {Object} [data]\n* @returns {Object | null}\n*/\nexport const excursionsMapper = (eventName, data) => {\n let dataObject = null\n const excursionTitle = data && data.excursionTitle ? data.excursionTitle : {}\n const eventData = getExcursionsEventData(eventName, excursionTitle)\n if (eventData) {\n dataObject = ga4Mapper({\n event: 'excursionsAccount',\n description: 'excursions engagement in my account',\n element: 'clickable text',\n ...eventData,\n interaction: true\n })\n }\n return dataObject\n}\n\n/**\n* Get the excursion label depending on the event received\n* @param {String} event\n* @returns {String}\n*/\nexport const getExcursionsEventData = (event, excursionTitle) => {\n switch (event) {\n case excursionsEvents.EXCURSION_CLICKED:\n return {\n result: 'redirect to excursions page',\n type: excursionTitle\n }\n\n case excursionsEvents.SEE_MORE_EXCURSIONS_CLICKED:\n return {\n result: 'show more excursions link clicked'\n }\n\n default:\n return null\n }\n}\n\n/**\n* Mapper for the download documents\n* @param {Object} [data]\n* @returns {Object | null}\n*/\nexport const downloadDocumentsMapper = (data) => {\n let dataObject = null\n if (data && data.documentName && data.bookingNumber) {\n dataObject = ga4Mapper({\n event: 'download',\n description: 'click on download',\n element: 'button',\n type: data.documentName,\n result: data.bookingNumber,\n interaction: true\n })\n }\n return dataObject\n}\n\nexport const accountSpecialLuggageMapper = (event, type) => {\n let dataObject = null\n const eventData = getAccountSpecialLuggageEventData(event, type)\n if (eventData) {\n dataObject = ga4Mapper({\n event: 'accountSpecialLuggage',\n element: 'button',\n ...eventData,\n interaction: true\n })\n }\n return dataObject\n}\n\nexport const getAccountSpecialLuggageEventData = (event, type) => {\n switch (event) {\n case accountSpecialLuggageEvents.OPEN:\n return {\n description: 'Special luggage modal opened'\n }\n case accountSpecialLuggageEvents.SUBMITTED:\n if (!type) return null\n return {\n description: 'Special luggage submitted',\n type\n }\n\n case accountSpecialLuggageEvents.ERROR_SUBMITTING:\n return {\n description: 'Error submitting special luggage'\n }\n\n default:\n return null\n }\n}\n","export const openFullCancellationConditionsMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n ...{\n event: 'openFullCancellation'\n },\n ...mapCommonData(data, 'full', 'open')\n }\n }\n return dataObject\n}\n\nexport const confirmFullCancellationMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n ...{\n event: 'confirmFullCancellation',\n eventValue: data.amount || 0\n },\n ...mapCommonData(data, 'full', 'confirm')\n }\n }\n return dataObject\n}\n\nexport const openPartialCancellationConditionsMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n ...{\n event: 'openPartialCancellation'\n },\n ...mapCommonData(data, 'partial', 'open')\n }\n }\n return dataObject\n}\n\nexport const confirmPartialCancellationMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n ...{\n event: 'confirmPartialCancellation',\n eventValue: data.participantsNum || 0\n },\n ...mapCommonData(data, 'partial', 'confirm')\n }\n }\n return dataObject\n}\n\nfunction mapCommonData (data, type, actionPrefix) {\n return {\n eventCategory: 'cancellation',\n eventAction: `${actionPrefix} ${type} cancellation${(data.isSuccess\n ? (data.isWithCost !== undefined ? (data.isWithCost ? ' with cost' : ' without cost') : '')\n : ' failed')}`,\n eventLabel: data.bookingNumber || ''\n }\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport * as types from '../types'\nimport {\n toggleMapper,\n paymentMapper,\n deleteBookingMapper,\n excursionsMapper,\n downloadDocumentsMapper,\n accountSpecialLuggageMapper\n} from '../mappers/account-booking/account-booking-mapper'\nimport pusher from '../pusher'\nimport {\n openFullCancellationConditionsMapper,\n confirmFullCancellationMapper,\n openPartialCancellationConditionsMapper,\n confirmPartialCancellationMapper\n} from '../mappers/account-booking/booking-cancellation-mapper'\n\n/**\n* Listeners for the collapse events on the account\n* @param {Object} event\n* @param {String} track\n*/\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = toggleMapper(data, eventTypes.collapseEvents.OPEN, track)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, (data) => {\n const mappedData = toggleMapper(data, eventTypes.collapseEvents.CLOSE, track)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenButtonEvents (event, track) {\n const paymentButtonEventPressedEvent = types.accountBookingType.PAYMENT_BUTTON_PRESSED\n const deleteBookingButtonPressedEvent = types.accountBookingType.DELETE_BOOKING_MODAL_OPEN\n const bookingDeletedEvent = types.accountBookingType.BOOKING_DELETED\n\n if (track === paymentButtonEventPressedEvent) {\n event.on('clickButton', (element, data) => {\n const textBtn = element['c-btn'].getText()\n const mappedData = paymentMapper(data, textBtn)\n pusher.pushDataObject(mappedData)\n })\n }\n\n if (track === deleteBookingButtonPressedEvent) {\n event.on('clickButton', (_, data) => {\n const mappedData = deleteBookingMapper(data, deleteBookingButtonPressedEvent)\n pusher.pushDataObject(mappedData)\n })\n }\n\n if (track === bookingDeletedEvent) {\n event.on('clickButton', (_, data) => {\n const mappedData = deleteBookingMapper(data, bookingDeletedEvent)\n pusher.pushDataObject(mappedData)\n })\n }\n}\n\nexport function listenBookingCancellationFlow (event) {\n event.on(eventTypes.bookingCancellationFlowEvents.CHECK_REGULAR_CANCELLATION_CONDITIONS, (data) => {\n const mappedData = openFullCancellationConditionsMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingCancellationFlowEvents.CONFIRM_REGULAR_CANCELLATION, (data) => {\n const mappedData = confirmFullCancellationMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingCancellationFlowEvents.GET_PARTIAL_CANCELLATION_PARTICIPANTS, (data) => {\n const mappedData = openPartialCancellationConditionsMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookingCancellationFlowEvents.CONFIRM_PARTIAL_CANCELLATION, (data) => {\n const mappedData = confirmPartialCancellationMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\n/**\n* Listeners for the excursions on the account\n* @param {Object} event\n*/\nexport function listenExcursionsEvents (event) {\n const excursionClickedEvent = eventTypes.excursionsEvents.EXCURSION_CLICKED\n const seeMoreExcursionsClickedEvent = eventTypes.excursionsEvents.SEE_MORE_EXCURSIONS_CLICKED\n\n event.on(excursionClickedEvent, (data) => {\n const mappedData = excursionsMapper(excursionClickedEvent, data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(seeMoreExcursionsClickedEvent, () => {\n const mappedData = excursionsMapper(seeMoreExcursionsClickedEvent, null)\n pusher.pushDataObject(mappedData)\n })\n}\n\n/**\n* Listeners for the download documents on the account\n* @param {Object} event\n*/\nexport function listenDownloadDocumentsEvents (event) {\n event.on(eventTypes.downloadDocumentsEvents.DOWNLOADED_DOCUMENT, (data) => {\n const mappedData = downloadDocumentsMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenAccountSpecialLuggageEvents (event) {\n const openEvent = eventTypes.accountSpecialLuggageEvents.OPEN\n const submittedEvent = eventTypes.accountSpecialLuggageEvents.SUBMITTED\n const errorSubmittingEvent = eventTypes.accountSpecialLuggageEvents.ERROR_SUBMITTING\n\n event.on(openEvent, () => {\n const mappedData = accountSpecialLuggageMapper(openEvent)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(submittedEvent, type => {\n const mappedData = accountSpecialLuggageMapper(submittedEvent, type)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(errorSubmittingEvent, () => {\n const mappedData = accountSpecialLuggageMapper(errorSubmittingEvent)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { accountBookingsType as events } from '../../types'\nimport { ga4Mapper } from '../ga4-mapper'\n\nexport const deleteAccountMapper = (eventName) => {\n let dataObject = null\n const result = getDeleteAccountResult(eventName)\n if (result) {\n dataObject = ga4Mapper({\n event: 'manageAccount',\n description: 'manage account',\n element: 'button',\n result,\n interaction: true\n })\n }\n return dataObject\n}\n\nexport const getDeleteAccountResult = (event) => {\n switch (event) {\n case events.DELETE_ACCOUNT_MODAL_OPEN:\n return 'delete account modal open'\n\n case events.ACCOUNT_DELETED:\n return 'account deleted'\n\n default:\n return ''\n }\n}\n\n/**\n* Mapper for the booking card options\n* @param {String} cardTitle\n* @returns {Object | null}\n*/\nexport const bookingCardMapper = (cardTitle, track) => {\n if (!cardTitle) return null\n\n const description = getBookingCardData(track)\n if (!description) return null\n\n return ga4Mapper({\n event: 'bookingOverview',\n description,\n element: 'accommodation tile',\n type: cardTitle,\n result: 'redirect to booking overview',\n interaction: true\n })\n}\n\nexport const getBookingCardData = (event) => {\n const descriptions = {\n [events.BOOKING_CARD_CLICKED]: 'click on upcoming booking',\n [events.PAST_BOOKING_CARD_CLICKED]: 'click on past booking'\n }\n\n return descriptions[event] || null\n}\n\nexport const addBookingMapper = (event) => {\n let dataObject = null\n const eventData = getAddBookingData(event)\n if (eventData) {\n dataObject = ga4Mapper({\n event: 'manageAccount',\n ...eventData,\n element: 'modal',\n interaction: true\n })\n }\n return dataObject\n}\n\nexport const getAddBookingData = (event) => {\n switch (event) {\n case events.ADD_BOOKING_MODAL_OPEN:\n return {\n description: 'click on add booking button',\n result: 'add booking modal open'\n }\n\n case events.ADD_BOOKING_SUCCEEDED_MODAL_CLOSE:\n return {\n description: 'add booking succeeded',\n result: 'add booking succeeded modal close'\n }\n\n case events.ADD_BOOKING_FAILED_MODAL_CLOSE:\n return {\n description: 'add booking failed',\n result: 'add booking failed modal close'\n }\n\n default:\n return null\n }\n}\n","import { accountBookingsType } from '../types'\nimport {\n deleteAccountMapper,\n addBookingMapper,\n bookingCardMapper\n} from '../mappers/account-bookings/account-bookings-mapper'\nimport pusher from '../pusher'\n\nexport function listenButtonEvents (event, track) {\n const deleteAccountButtonPressedEvent = accountBookingsType.DELETE_ACCOUNT_MODAL_OPEN\n const accountDeletedEvent = accountBookingsType.ACCOUNT_DELETED\n\n if (track === deleteAccountButtonPressedEvent) {\n event.on('clickButton', () => {\n const mappedData = deleteAccountMapper(deleteAccountButtonPressedEvent)\n pusher.pushDataObject(mappedData)\n })\n }\n\n if (track === accountDeletedEvent) {\n event.on('clickButton', () => {\n const mappedData = deleteAccountMapper(accountDeletedEvent)\n pusher.pushDataObject(mappedData)\n })\n }\n}\n\nexport function listenModalEvents (event, track) {\n const addBookingModalOpen = accountBookingsType.ADD_BOOKING_MODAL_OPEN\n const addBookingSucceededModalClose = accountBookingsType.ADD_BOOKING_SUCCEEDED_MODAL_CLOSE\n const addBookingFailedModalClose = accountBookingsType.ADD_BOOKING_FAILED_MODAL_CLOSE\n\n if (track === addBookingModalOpen) {\n event.on('open', () => {\n const mappedData = addBookingMapper(track)\n pusher.pushDataObject(mappedData)\n })\n }\n\n if (track === addBookingSucceededModalClose || track === addBookingFailedModalClose) {\n event.on('close', () => {\n const mappedData = addBookingMapper(track)\n pusher.pushDataObject(mappedData)\n })\n }\n}\n\n/**\n* Listeners for the card events on bookings overview\n* @param {Object} event\n* @param {track} String\n*/\nexport function listenCardEvents (event, track) {\n const { BOOKING_CARD_CLICKED, PAST_BOOKING_CARD_CLICKED } = accountBookingsType\n\n if ([BOOKING_CARD_CLICKED, PAST_BOOKING_CARD_CLICKED].includes(track)) {\n event.on('clickCard', element => {\n const elementApi = element['c-card']\n const cardTitle = elementApi.getTitle()\n const mappedData = bookingCardMapper(cardTitle, track)\n pusher.pushDataObject(mappedData)\n })\n }\n}\n","import { bookedServiceEditEvents as events } from '../../../../../js/document/event-types'\nimport { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accountBookedServiceEditMapper = (data, event) => {\n let dataObject = null\n if (data && event) {\n const eventData = getEventData(data, event)\n\n if (eventData && eventData.type) {\n dataObject = {\n event: 'Error',\n ...eventData\n }\n }\n }\n return dataObject\n}\n\n/**\n* Get the event label, event category and event action depending on the event name\n* @param {Object} data\n* @param {String} event\n* @returns {Object}\n*/\nfunction getEventData (data, event) {\n switch (event) {\n case events.CONDITIONS_VALIDATION_FAILED:\n if (!data.serviceName) return {}\n return {\n [CUSTOM_PARAMETERS.parameter_1]: false, // validated\n [CUSTOM_PARAMETERS.parameter_2]: 'choose an option for terms and conditions', // description\n [CUSTOM_PARAMETERS.parameter_3]: data.fieldType || '', // element\n [CUSTOM_PARAMETERS.parameter_4]: data.serviceName.toLowerCase() || '' // type\n }\n\n case events.SAVE_CHANGES_TO_BOOKING_FAILED:\n if (!data.error || !data.error.message) return {}\n return {\n [CUSTOM_PARAMETERS.parameter_1]: data.success, // validated\n [CUSTOM_PARAMETERS.parameter_2]: data.error.message || '', // description\n [CUSTOM_PARAMETERS.parameter_3]: data.fieldType, // element\n [CUSTOM_PARAMETERS.parameter_4]: 'error_message_service', // type\n [CUSTOM_PARAMETERS.parameter_5]: 'action_save' // result\n }\n\n case events.API_CALL_FAILED:\n if (!data.error || !data.error.message) return {}\n return {\n [CUSTOM_PARAMETERS.parameter_1]: data.success, // validated\n [CUSTOM_PARAMETERS.parameter_2]: data.error.message || '', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'page', // element\n [CUSTOM_PARAMETERS.parameter_4]: 'error_message_service', // type\n [CUSTOM_PARAMETERS.parameter_5]: 'action_open' // result\n }\n\n default:\n return {}\n }\n}\n","import { CUSTOM_DIMENSIONS } from '../../constants'\n\nexport const accountBookedServiceChangeCompleteMapper = (data) => {\n let dataObject = null\n if (data?.eCommerceAnalytics && data?.eCommerceCheckout) {\n dataObject = {\n event: 'ancillaryChangeComplete',\n ecommerce: data.eCommerceAnalytics.ecommerce,\n ...mapCommonData(data.eCommerceCheckout)\n }\n }\n return dataObject\n}\n\nfunction mapCommonData (data) {\n return {\n [CUSTOM_DIMENSIONS.accoId]: data.accoId || '',\n [CUSTOM_DIMENSIONS.accoBrand]: data.brand || '',\n [CUSTOM_DIMENSIONS.partyComposition]: data.partyComposition || '',\n [CUSTOM_DIMENSIONS.totalGuests]: data.totalGuests || 0,\n [CUSTOM_DIMENSIONS.departureDate]: data.departureDate || '',\n [CUSTOM_DIMENSIONS.mandatoryPayment]: data.mandatoryPayment || false\n }\n}\n","import { ga4Mapper } from '../mappers/ga4-mapper'\n\nexport const serviceNotAvailableMapper = (data) => {\n let dataObject = null\n if (data && data.serviceType) {\n dataObject = ga4Mapper({\n event: 'Ancillaries',\n description: 'ancillary not available',\n element: 'element not available',\n result: data.serviceType,\n interaction: false\n })\n }\n return dataObject\n}\n","import pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { accountBookedServiceEditMapper } from '../mappers/account-booked-service-edit/account-booked-service-edit-mapper'\nimport { accountBookedServiceChangeCompleteMapper } from '../mappers/account-booked-service-edit/account-booked-service-change-complete-mapper'\nimport context from '../context'\nimport { selfServiceMapper } from '../mappers/booking/booking-services-mapper'\nimport { serviceAvailableMapper } from '../mappers/service-available-mapper'\nimport { serviceNotAvailableMapper } from '../mappers/service-not-available-mapper'\nimport { bookingIdentifierMapper } from '../mappers/shared/booking-identifier-mapper'\n\nexport function listenBookedServiceEditEvents (event) {\n event.on(eventTypes.bookedServiceEditEvents.BOOKED_SERVICE_EDIT_FETCHED, (data) => {\n context.addContext('bookingServices', data.services)\n context.addContext('selfserviceBookingDraft', data)\n })\n\n event.on(eventTypes.bookedServiceEditEvents.BOOKED_SERVICE_EDIT_FETCHED_ITEM_CHANGED, (data) => {\n context.addContext('bookingServices', data.services)\n context.addContext('selfserviceBookingDraft', data)\n })\n\n event.on(eventTypes.bookedServiceEditEvents.CONDITIONS_VALIDATION_FAILED, data => {\n const mappedData = accountBookedServiceEditMapper(data, eventTypes.bookedServiceEditEvents.CONDITIONS_VALIDATION_FAILED)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookedServiceEditEvents.SAVE_CHANGES_TO_BOOKING_FAILED, data => {\n const mappedData = accountBookedServiceEditMapper(data, eventTypes.bookedServiceEditEvents.SAVE_CHANGES_TO_BOOKING_FAILED)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookedServiceEditEvents.SAVE_CHANGES_TO_BOOKING_SUCCESS, data => {\n const bookingIdentifier = data.draftId ? bookingIdentifierMapper(data.draftId) : null\n const bookingDraft = context.getContext('selfserviceBookingDraft')\n const mappedData = accountBookedServiceChangeCompleteMapper(bookingDraft)\n pusher.pushDataObject({ ...bookingIdentifier, ...mappedData })\n })\n\n event.on(eventTypes.bookedServiceEditEvents.API_CALL_FAILED, data => {\n const mappedData = accountBookedServiceEditMapper(data, eventTypes.bookedServiceEditEvents.API_CALL_FAILED)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.bookedServiceEditEvents.ANCILLARY_DATA_CHANGED, data => {\n const servicesData = context.getContext('bookingServices')\n const mappedDataArray = selfServiceMapper(data, servicesData)\n pusher.pushDataObjects(mappedDataArray)\n })\n\n event.on(eventTypes.bookedServiceEditEvents.BOOKED_SERVICE_EDIT_SERVICE_NOT_AVAILABLE, data => {\n if (data) {\n const mappedData = serviceNotAvailableMapper(data)\n pusher.pushDataObject(mappedData)\n }\n })\n\n event.on(eventTypes.bookedServiceEditEvents.BOOKED_SERVICE_EDIT_SERVICE_AVAILABLE, (data) => {\n if (data) {\n const mappedData = serviceAvailableMapper(data)\n pusher.pushDataObject(mappedData)\n }\n })\n}\n","export const refundRequestMapper = (data) => {\n let dataObject = null\n if (data && data.voucherCode) {\n dataObject = {\n event: 'eec.refundRequestVoucher',\n ecommerce: {\n refund: {\n actionField: {\n id: data.voucherCode\n }\n }\n }\n }\n }\n return dataObject\n}\n","export const refundRequestClickMapper = (data) => {\n let dataObject = null\n if (data && data.voucherCode) {\n dataObject = {\n event: 'click.refundRequest',\n category: 'refund',\n action: 'click',\n label: data.voucherCode\n }\n }\n return dataObject\n}\n","import pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { ErrorOrigins } from '../helpers/error-origin-helper'\nimport { validationErrorsMapper } from '../mappers/shared/validation-errors-mapper'\nimport { refundRequestMapper } from '../mappers/refund/refund-request-mapper'\nimport { refundRequestClickMapper } from '../mappers/refund/refund-request-click-mapper'\n\nexport function listenFormComponentEvents (event, track) {\n event.on('validated', (data) => {\n const mappedData = validationErrorsMapper(data, track, 'trackErrorRefund', ErrorOrigins.CLIENT_SIDE_VALIDATION_ERROR)\n pusher.pushDataObjects(mappedData)\n })\n}\n\nexport function listenRefundRequestWidgetEvents (event, track) {\n event.on(eventTypes.refundEvents.REFUND_REQUESTED, (data) => {\n const mappedData = refundRequestMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.refundEvents.REFUND_REQUEST_CLICKED, (data) => {\n const mappedData = refundRequestClickMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const questionToogleMapper = (data, eventName) => {\n let dataObject = null\n if (data && eventName) {\n dataObject = ga4Mapper({\n event: 'faqQuestionInfo',\n result: eventName,\n description: data.attr.questionTitle,\n element: 'button',\n interaction: true\n })\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport {\n questionToogleMapper\n} from '../mappers/faq/faq-top-questions-mapper'\nimport pusher from '../pusher'\n\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = questionToogleMapper(data, eventTypes.collapseEvents.OPEN)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, (data) => {\n const mappedData = questionToogleMapper(data, eventTypes.collapseEvents.CLOSE)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { favorite as favoriteEvents } from '../../../components/favorite/event-types'\nimport { favoritesMapper } from '../mappers/favorites-mapper'\nimport pusher from '../pusher'\n\nexport const listenFavoriteEvents = (event) => {\n event.on(favoriteEvents.FAVORITE_MODAL_CLOSE, ({ staticData }) => {\n const data = {\n ...staticData,\n action: 'Close',\n page: 'PDP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_MODAL_OPEN, ({ staticData }) => {\n const data = {\n ...staticData,\n action: 'Open',\n page: 'PDP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_LOGIN, ({ staticData }) => {\n const data = {\n ...staticData,\n action: 'Login',\n page: 'PDP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_SIGNUP, ({ staticData }) => {\n const data = {\n ...staticData,\n action: 'Signup',\n page: 'PDP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_ADD, ({ staticData }) => {\n const data = {\n ...staticData,\n action: 'Add',\n page: 'PDP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(favoriteEvents.FAVORITE_REMOVE, ({ staticData }) => {\n const data = {\n ...staticData,\n action: 'Remove',\n page: 'PDP'\n }\n const mappedData = favoritesMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const mainHeaderNavigationMapper = (data, track) => {\n if (!data && !track) return\n\n const dataObject = ga4Mapper({\n event: 'navigation',\n description: 'header navigation',\n element: 'main navigation bar',\n result: (data.path || []).join(' > '),\n interaction: true\n })\n\n return dataObject\n}\n\nexport const headerNavigationMapper = () => {\n return ga4Mapper({\n event: 'clickHeaderMenu',\n description: 'header navigation',\n element: 'button',\n type: 'person icon',\n result: 'redirect to my account',\n interaction: true\n })\n}\n","import { ga4Mapper } from '../ga4-mapper'\n\nexport const navLogoHeaderMapper = () => {\n return ga4Mapper({\n event: 'navigation',\n description: 'header navigation',\n element: 'navigation bar',\n result: 'logo home',\n interaction: true\n })\n}\n","import pusher from '../pusher'\nimport * as types from '../types'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { headerNavigationMapper, mainHeaderNavigationMapper } from '../mappers/nav/nav-mapper'\nimport { navLogoHeaderMapper } from '../mappers/nav/nav-logo-header'\n\nexport function listenMainNavigationEvents (event, track) {\n event.on(eventTypes.navigationEvents.CLICK_NAVIGATION, (data) => {\n if (!data.isBackNavigation) {\n const navigationData = mainHeaderNavigationMapper(data, track)\n if (navigationData) {\n pusher.pushDataObject(navigationData)\n }\n }\n })\n}\n\nexport function listenHeaderButtonEvents (event, track) {\n if (track === types.headerNavigationType.ICON_MOBILE) {\n event.on('clickButton', () => {\n const mappedData = headerNavigationMapper()\n if (mappedData) {\n pusher.pushDataObject(mappedData)\n }\n })\n }\n}\n\nexport function listenHeaderLogoEvents (event, track) {\n if (track === types.headerNavigationType.LOGO) {\n event.on('click', () => {\n const mappedData = navLogoHeaderMapper()\n if (mappedData) {\n pusher.pushDataObject(mappedData)\n }\n })\n }\n}\n","import { personalDetailsEditEvents as events } from '../../../../js/document/event-types'\nimport { ga4Mapper } from './ga4-mapper'\n\nexport const personalDetailsEditMapper = (data, event) => {\n let dataObject = null\n if (data && event) {\n const type = data.labels ? { type: data.labels } : {}\n dataObject = ga4Mapper({\n event: 'manageBooking',\n description: getEventDescription(event),\n ...type,\n interaction: true,\n element: 'button'\n })\n }\n return dataObject\n}\n\nconst getEventDescription = (event) => {\n switch (event) {\n case events.PERSONAL_DETAILS_EDIT_UPDATED:\n return 'change personal details'\n\n case events.PERSONAL_DETAILS_EDIT_EXTERNAL_FLIGHTS_FORM_OPEN:\n return 'open personal details external flights form'\n\n case events.PERSONAL_DETAILS_EDIT_EXTERNAL_FLIGHTS_FORM_UPDATED:\n return 'change personal details external flights form'\n\n default:\n return ''\n }\n}\n","import pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { personalDetailsEditMapper } from '../mappers/personal-details-edit-mapper'\n\nexport function listenPersonalDetailsEditWidgetEvents (event) {\n const personaDetailsEditUpdatedEvent = eventTypes.personalDetailsEditEvents.PERSONAL_DETAILS_EDIT_UPDATED\n const personaDetailsEditExternalFlightsFormOpenEvent = eventTypes.personalDetailsEditEvents.PERSONAL_DETAILS_EDIT_EXTERNAL_FLIGHTS_FORM_OPEN\n const personaDetailsEditExternalFlightsFormUpdatedEvent = eventTypes.personalDetailsEditEvents.PERSONAL_DETAILS_EDIT_EXTERNAL_FLIGHTS_FORM_UPDATED\n\n event.on(personaDetailsEditUpdatedEvent, data => {\n const mappedData = personalDetailsEditMapper(data, personaDetailsEditUpdatedEvent)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(personaDetailsEditExternalFlightsFormOpenEvent, data => {\n const mappedData = personalDetailsEditMapper(data, personaDetailsEditExternalFlightsFormOpenEvent)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(personaDetailsEditExternalFlightsFormUpdatedEvent, data => {\n const mappedData = personalDetailsEditMapper(data, personaDetailsEditExternalFlightsFormUpdatedEvent)\n pusher.pushDataObject(mappedData)\n })\n}\n","import pusher from '../pusher'\nimport { ga4Mapper } from '../mappers/ga4-mapper'\n\nexport function listenFormComponentEvents (event) {\n event.on('submitted', () => {\n const data = ga4Mapper({\n event: 'manageAccount',\n description: 'login info',\n element: 'button',\n type: 'create',\n result: 'success',\n interaction: true\n })\n pusher.pushDataObject(data)\n })\n}\n","import { ga4Mapper } from '../mappers/ga4-mapper'\n\n/**\n* Mapper for the rebooking options\n* @param {String} textBtn\n* @returns {Object | null}\n*/\nexport const rebookingOptionsMapper = (textBtn) => {\n let dataObject = null\n if (textBtn) {\n dataObject = ga4Mapper({\n event: 'rebookingAccount',\n description: 'book a different holiday',\n element: 'button on overlay',\n type: textBtn,\n result: 'redirect to PLP',\n interaction: true\n })\n }\n return dataObject\n}\n","import { rebookingOptionsMapper } from '../mappers/rebooking-options-mapper'\nimport pusher from '../pusher'\n\n/**\n* Listeners for the rebooking options widget\n* @param {Object} event\n*/\nexport function listenButtonEvents (event) {\n event.on('clickButton', (element) => {\n const textBtn = element['c-btn'].getText()\n const mappedData = rebookingOptionsMapper(textBtn)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { preferenceQuestionnaireEvents as events } from '../../../../js/document/event-types'\n\n/**\n* Mapper for the preference questionnaire\n* @param {String} eventName\n* @param {Bool} isComingThroughMail\n* @returns {Object}\n*/\nexport const preferenceQuestionnaireMapper = (eventName, isComingThroughMail, data) => {\n let dataObject = null\n const questionValue = data && data.questionValue ? data.questionValue : ''\n\n const eventData = getEventData(eventName, isComingThroughMail, questionValue)\n if (eventData && eventData.event && eventData.eventLabel) {\n dataObject = {\n ...eventData,\n eventAction: 'click',\n eventCategory: 'preference questionnaire'\n }\n }\n return dataObject\n}\n\n/**\n* Get the event label and event depending on the event name and if is coming through mail or account\n* @param {String} eventName\n* @param {Bool} isComingThroughMail\n* @returns {Object}\n*/\nexport const getEventData = (eventName, isComingThroughMail, questionValue) => {\n const fromWhereUserComes = isComingThroughMail ? 'email' : 'account'\n switch (eventName) {\n case events.PREFERENCE_QUESTIONNAIRE_START:\n return {\n event: 'preferenceQuestionnaireStart',\n eventLabel: `Preference questionnaire start from ${fromWhereUserComes}`\n }\n\n case events.PREFERENCE_QUESTIONNAIRE_SEND:\n return {\n event: 'preferenceQuestionnaireSend',\n eventLabel: `Preference questionnaire send from ${fromWhereUserComes}`\n }\n\n case events.PREFERENCE_QUESTIONNAIRE_EDIT:\n if (!questionValue) return\n return {\n event: 'preferenceQuestionnaireEdit',\n eventLabel: `Preference questionnaire question edit: ${questionValue}`\n }\n\n default:\n return ''\n }\n}\n","import pusher from '../pusher'\nimport { preferenceQuestionnaireMapper } from '../mappers/preference-questionnaire-mapper'\nimport { widgetQueries } from '../../preference-questionnaire/main'\nimport * as eventTypes from '../../../../js/document/event-types'\n\n/**\n* Listeners for the button events on the preference questionnaire\n* @param {Object} event\n* @param {String} track\n*/\nexport function listenButtonEvents (event, track) {\n event.on('clickButton', (input) => {\n if (input.hasAttribute(widgetQueries.disableTracking)) return\n const isComingThroughMail = input.hasAttribute(widgetQueries.comesTroughEmail)\n const mappedData = preferenceQuestionnaireMapper(track, isComingThroughMail, null)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.preferenceQuestionnaireEvents.PREFERENCE_QUESTIONNAIRE_EDIT, (data) => {\n const mappedData = preferenceQuestionnaireMapper(eventTypes.preferenceQuestionnaireEvents.PREFERENCE_QUESTIONNAIRE_EDIT, false, data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { profileDataEvents as events } from '../../../../js/document/event-types'\nimport { ga4Mapper } from './ga4-mapper'\n\n/**\n* Mapper for the profile data\n* @param {String} eventName\n* @param {Object} data\n* @returns {Object}\n*/\nexport const profileDataMapper = (eventName, data) => {\n let dataObject = null\n const eventData = getEventData(eventName, data)\n if (eventData && eventData.event && eventData.type && eventData.result) {\n dataObject = ga4Mapper({\n ...eventData,\n description: 'edit profile',\n element: 'clickable text',\n interaction: true\n })\n }\n return dataObject\n}\n\n/**\n* Get the event data for the profile data mapper\n* @param {String} eventName\n* @param {Object} data\n* @returns {Object}\n*/\nexport const getEventData = (eventName, data) => {\n if (!data || !data.attr) return\n switch (eventName) {\n case events.DATA_OPENED:\n if (!data.attr.wProfileData__collapse) return\n return {\n event: 'profileDataOpened',\n type: `${data.attr.wProfileData__collapse} opened`,\n result: 'opened'\n }\n\n case events.DATA_EDITED:\n if (!data.attr.wProfileData__formEditBtn) return\n return {\n event: 'profileDataEdited',\n type: `${data.attr.wProfileData__formEditBtn} edited`,\n result: 'edited'\n }\n\n default:\n return ''\n }\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { profileDataMapper } from '../mappers/profile-data-mapper'\nimport pusher from '../pusher'\n\n/**\n* listener for the collapse events on the profile data\n* @param {Object} event\n* @param {String} track\n*/\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = profileDataMapper(track, data)\n pusher.pushDataObject(mappedData)\n })\n}\n\n/**\n* listener for the button events on the profile data\n* @param {Object} event\n* @param {String} track\n*/\nexport function listenButtonEvents (event, track) {\n event.on('clickButton', (_, data) => {\n const mappedData = profileDataMapper(track, data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { accommodationRoomtypesType as events } from '../../types'\nimport { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationRoomtypesMapper = (data, eventName, track) => {\n let dataObject = null\n const dataDescription = getRoomtypeEventDescriptionData(track)\n\n if (data && (eventName === 'open' || eventName === 'close') && data.attr && dataDescription !== '' && data.attr.roomtypeTitle) {\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: dataDescription, // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Accordion', // element\n [CUSTOM_PARAMETERS.parameter_4]: data.attr.roomtypeTitle, // type\n [CUSTOM_PARAMETERS.parameter_5]: (eventName === 'open' ? 'show more' : (eventName === 'close' ? 'show less' : null)), // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n\n/**\n* Get the roomtype event description data depending on the event received\n* @param {String} event\n* @returns {Object}\n*/\nexport const getRoomtypeEventDescriptionData = (event) => {\n switch (event) {\n case events.ROOMTYPES_DESCRIPTION_TOGGLED :\n return 'roomtype description'\n\n case events.ROOMTYPES_SELECTOR_TOGGLED :\n return 'roomtype selector'\n\n default:\n return ''\n }\n}\n","import { accommodationRoomtypesType as events } from '../../types'\nimport { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationRoomtypesCarouselMapper = (element, track) => {\n let dataObject = null\n const dataElement = getElementData(element, track)\n\n dataObject = {\n event: 'PDP',\n roomtype: dataElement.roomTitle,\n hasimage: dataElement.hasImage,\n [CUSTOM_PARAMETERS.parameter_2]: 'Interaction with roomtypes carousel', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Button', // element\n [CUSTOM_PARAMETERS.parameter_4]: dataElement.btnLabel, // type\n [CUSTOM_PARAMETERS.parameter_5]: dataElement.result, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n return dataObject\n}\n\nexport const getElementData = (element, track) => {\n const dataElement = {\n btnLabel: element['c-btn'].getText(),\n roomTitle: element.getAttribute('data-room-title'),\n hasImage: element.getAttribute('data-has-image'),\n result: null\n }\n\n switch (track) {\n case events.ROOMTYPES_MODAL_OPENED:\n dataElement.result = 'View room description in pop-up'\n break\n\n case events.ROOMTYPES_MODAL_SEE_PRICES:\n dataElement.result = 'View prices on price table from modal'\n break\n\n case events.ROOMTYPES_SEE_PRICES:\n dataElement.result = 'View prices on price table'\n break\n }\n\n return dataElement\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationRoomtypesMapper } from '../mappers/accommodation-roomtypes/accommodation-roomtypes-mapper'\nimport { accommodationRoomtypesCarouselMapper } from '../mappers/accommodation-roomtypes/accommodation-roomtypes-carousel-mapper'\nimport pusher from '../pusher'\n\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, data => {\n const mappedData = accommodationRoomtypesMapper(\n data,\n eventTypes.collapseEvents.OPEN,\n track\n )\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, data => {\n const mappedData = accommodationRoomtypesMapper(\n data,\n eventTypes.collapseEvents.CLOSE,\n track\n )\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBtnEvents (event, track) {\n event.on('clickButton', element => {\n const mappedData = accommodationRoomtypesCarouselMapper(element, track)\n pusher.pushDataObject(mappedData)\n })\n}\n","import * as eventTypes from '../../../../../js/document/event-types'\nimport { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationTabsMapper = (data, eventName) => {\n let dataObject = null\n const eventData = getEventData(data, eventName)\n\n if (eventData && eventData.result && eventData.result !== '' && eventData.interaction !== null) {\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: 'Accommodation tab', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'tab', // element\n [CUSTOM_PARAMETERS.parameter_5]: eventData.result, // result\n [CUSTOM_PARAMETERS.parameter_6]: eventData.interaction // interaction\n }\n }\n return dataObject\n}\n\n/**\n* Get the tab result data depending on the event received\n* @param {Object} data\n* @param {String} eventName\n* @returns {Object}\n*/\nexport const getEventData = (data, eventName) => {\n if (data && data.buttonData && data.buttonData.result && data.buttonData.result !== '') {\n switch (eventName) {\n case eventTypes.tabsEvents.CLICKED :\n return { result: data.buttonData.result, interaction: true }\n\n case eventTypes.tabsEvents.LOADED :\n return { result: data.buttonData.result + '_default', interaction: false }\n\n default:\n return {}\n }\n }\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationTabsGoBackBtnMapper = () => {\n const dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: 'Back from pricetable to PDP overview', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'button', // element\n [CUSTOM_PARAMETERS.parameter_4]: 'Go back to overview', // type\n [CUSTOM_PARAMETERS.parameter_5]: 'PDP overview', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationTabsMapper } from '../mappers/accommodation-tabs/accommodationn-tabs-mapper'\nimport { accommodationTabsGoBackBtnMapper } from '../mappers/accommodation-tabs/accommodationn-tabs-go-back-btn-mapper'\nimport pusher from '../pusher'\n\nexport function listenTabsEvents (event, track) {\n event.on(eventTypes.tabsEvents.CLICKED, (data) => {\n const mappedData = accommodationTabsMapper(data, eventTypes.tabsEvents.CLICKED, track)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.tabsEvents.LOADED, (data) => {\n const mappedData = accommodationTabsMapper(data, eventTypes.tabsEvents.LOADED, track)\n pusher.pushDataObject(mappedData)\n })\n}\nexport function listenBtnGoBackEvents (event) {\n event.on('clickButton', () => {\n const mappedData = accommodationTabsGoBackBtnMapper()\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationFacilitiesMapper = (data, eventName) => {\n let dataObject = null\n\n if (data && (eventName === 'open' || eventName === 'close')) {\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: (eventName === 'open' ? 'click for more information about facilities' : (eventName === 'close' ? 'click for less information about facilities' : null)), // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Button', // element\n [CUSTOM_PARAMETERS.parameter_4]: (eventName === 'open' ? 'show more' : (eventName === 'close' ? 'show less' : null)), // type\n [CUSTOM_PARAMETERS.parameter_5]: (eventName === 'open' ? 'all facilities text shown' : (eventName === 'close' ? 'all facilities text hidden' : null)), // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationFacilitiesMapper } from '../mappers/accommodation-facilities/accommodation-facilities-mapper'\nimport pusher from '../pusher'\n\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = accommodationFacilitiesMapper(data, eventTypes.collapseEvents.OPEN, track)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, (data) => {\n const mappedData = accommodationFacilitiesMapper(data, eventTypes.collapseEvents.CLOSE, track)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationMealplansMapper = (data, eventName) => {\n let dataObject = null\n\n if (data && (eventName === 'open' || eventName === 'close') && data.attr && data.attr.mealplanTitle) {\n const titleOfMealplan = data.attr.mealplanTitle\n const [shownOrHidden, moreOrLess] = (eventName === 'open' ? ['shown', 'more'] : ['hidden', 'less'])\n\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: `click accordion for ${moreOrLess} ${titleOfMealplan} info`, // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Accordion', // element\n [CUSTOM_PARAMETERS.parameter_4]: titleOfMealplan, // type\n [CUSTOM_PARAMETERS.parameter_5]: `all ${titleOfMealplan} info ${shownOrHidden}`, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationMealplansMapper } from '../mappers/accommodation-mealplans/accommodation-mealplans-mapper'\nimport pusher from '../pusher'\n\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = accommodationMealplansMapper(data, eventTypes.collapseEvents.OPEN, track)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, (data) => {\n const mappedData = accommodationMealplansMapper(data, eventTypes.collapseEvents.CLOSE, track)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationDestinationButtonMapper = (data) => {\n return {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: 'Read region info', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Button', // element\n [CUSTOM_PARAMETERS.parameter_4]: (data.href ? data.href : null), // type\n [CUSTOM_PARAMETERS.parameter_5]: 'Go to region page', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n}\n","import pusher from '../pusher'\nimport { accommodationDestinationButtonMapper } from '../mappers/promotion-image/accommodation-destination-button-mapper'\n\nexport function listenButtonEvents (event) {\n event.on('clickButton', (data) => {\n const mappedData = accommodationDestinationButtonMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationDescriptionMapper = (data, eventName) => {\n let dataObject = null\n\n if (data && (eventName === 'open' || eventName === 'close')) {\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]:\n eventName === 'open'\n ? 'Show more text about acco info'\n : eventName === 'close'\n ? 'Show less text about acco info'\n : null, // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Clickable text', // element\n [CUSTOM_PARAMETERS.parameter_4]:\n eventName === 'open'\n ? 'show more'\n : eventName === 'close'\n ? 'show less'\n : null, // type\n [CUSTOM_PARAMETERS.parameter_5]:\n eventName === 'open'\n ? 'all acco info shown'\n : eventName === 'close'\n ? 'all acco info hidden'\n : null, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationDescriptionMapper } from '../mappers/accommodation-description/accommodation-description-mapper'\nimport pusher from '../pusher'\n\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, data => {\n const mappedData = accommodationDescriptionMapper(\n data,\n eventTypes.collapseEvents.OPEN,\n track\n )\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, data => {\n const mappedData = accommodationDescriptionMapper(\n data,\n eventTypes.collapseEvents.CLOSE,\n track\n )\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\nimport { accommodationGalleryType as events } from '../../types'\n\nexport const accommodationGallerySliderMapper = eventName => {\n let dataObject = null\n\n if (\n eventName === events.ACCOMMODATION_GALLERY ||\n eventName === events.ACCOMMODATION_GALLERY_OPEN\n ) {\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]:\n eventName === events.ACCOMMODATION_GALLERY\n ? 'image gallery - interaction'\n : eventName === events.ACCOMMODATION_GALLERY_OPEN\n ? 'image gallery opened - interaction'\n : null, // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Photo gallery', // element\n [CUSTOM_PARAMETERS.parameter_4]:\n eventName === events.ACCOMMODATION_GALLERY\n ? 'modal not opened'\n : eventName === events.ACCOMMODATION_GALLERY_OPEN\n ? 'modal opened'\n : null, // type\n [CUSTOM_PARAMETERS.parameter_5]: 'Clicked on arrow or Swiped',\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import pusher from '../pusher'\nimport { accommodationGallerySliderMapper } from '../mappers/accommodation-gallery/accommodation-gallery-slider-mapper'\n\nexport function listenSliderEvents (event, track) {\n event.on('change', () => {\n const mappedData = accommodationGallerySliderMapper(track)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationPracticalBlockMapper = (data, eventName) => {\n let dataObject = null\n\n if (data && (eventName === 'open' || eventName === 'close') && data.attr && data.attr.practicalBlockTitle) {\n const titleOfPracticalBlock = data.attr.practicalBlockTitle\n const moreOrLess = (eventName === 'open' ? 'more' : 'less')\n\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: 'Practical info', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Accordion', // element\n [CUSTOM_PARAMETERS.parameter_4]: titleOfPracticalBlock, // type\n [CUSTOM_PARAMETERS.parameter_5]: `show ${moreOrLess}`, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationPracticalBlockMapper } from '../mappers/accommodation-practical-block/accommodation-practical-block-mapper'\nimport pusher from '../pusher'\n\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = accommodationPracticalBlockMapper(data, eventTypes.collapseEvents.OPEN, track)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, (data) => {\n const mappedData = accommodationPracticalBlockMapper(data, eventTypes.collapseEvents.CLOSE, track)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationSkiBlockMapper = (data, eventName) => {\n let dataObject = null\n\n if (data && (eventName === 'open' || eventName === 'close') && data.attr && data.attr.skiBlockTitle) {\n const titleOfSkiBlock = data.attr.skiBlockTitle\n const moreOrLess = (eventName === 'open' ? 'more' : 'less')\n\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: \"Ski extra's\", // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Accordion', // element\n [CUSTOM_PARAMETERS.parameter_4]: titleOfSkiBlock, // type\n [CUSTOM_PARAMETERS.parameter_5]: `show ${moreOrLess}`, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationSkiBlockMapper } from '../mappers/accommodation-ski-block/accommodation-ski-block-mapper'\nimport pusher from '../pusher'\n\nexport function listenCollapseEvents (event, track) {\n event.on(eventTypes.collapseEvents.OPEN, (data) => {\n const mappedData = accommodationSkiBlockMapper(data, eventTypes.collapseEvents.OPEN, track)\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.collapseEvents.CLOSE, (data) => {\n const mappedData = accommodationSkiBlockMapper(data, eventTypes.collapseEvents.CLOSE, track)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const accommodationNavMapper = data => {\n let dataObject = null\n\n if (data) {\n const dataresult = data.path ? data.path[0] : null\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]:\n 'Click to anchor nav menu, on ' + dataresult, // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Clickable text', // element\n [CUSTOM_PARAMETERS.parameter_4]: dataresult, // type\n [CUSTOM_PARAMETERS.parameter_5]: 'Goes to section of ' + dataresult, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { accommodationNavMapper } from '../mappers/accommodation-nav/accommodation-nav-mapper'\n\nexport function listenNavigationEvents (event) {\n event.on(eventTypes.navigationEvents.CLICK_NAVIGATION, data => {\n const navigationData = accommodationNavMapper(data)\n if (navigationData) {\n pusher.pushDataObject(navigationData)\n }\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const recommendationItemClickedMapper = (data) => {\n let dataObject = null\n\n const accoName = data.title || data.data.name || ''\n\n if (data) {\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: 'Recommendation interaction PDP', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Package Item', // element\n [CUSTOM_PARAMETERS.parameter_5]: 'Item clicked -> ' + accoName, // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n\nexport const recommendationSliderMapper = () => {\n let dataObject = null\n\n dataObject = {\n event: 'PDP',\n [CUSTOM_PARAMETERS.parameter_2]: 'Recommendation interaction PDP', // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Slider', // element\n [CUSTOM_PARAMETERS.parameter_5]: 'scroll', // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n return dataObject\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport { recommendationItemClickedMapper, recommendationSliderMapper } from '../mappers/accommodation-recommendation/accommodation-recommendation-mapper'\nimport pusher from '../pusher'\n\nexport function listenRecommendedAccoListerWidgetEvents (event) {\n event.on(eventTypes.recommendedAccoListerEvents.RECOMMENDED_ACCO_LISTER_ITEM_CLICKED, (data) => {\n const mappedData = recommendationItemClickedMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenBtnEvents (event) {\n event.on('clickButton', (data) => {\n const mappedData = recommendationItemClickedMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n\nexport function listenSliderEvents (event) {\n event.on('change', () => {\n const mappedData = recommendationSliderMapper()\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../constants'\nimport { capitalizeString } from '../../../../js/helpers/string'\n\nexport const sanitizeFlightBusSelectorData = (data) => {\n return {\n ...data,\n transportType: data.transportType ?? 'flight'\n }\n}\n\nexport const flightBusSelectorMapper = (data) => {\n if (data) {\n return {\n event: `${capitalizeString(data.transportType)}`,\n [CUSTOM_PARAMETERS.parameter_2]: `${capitalizeString(data.transportType)} component`, // description\n [CUSTOM_PARAMETERS.parameter_3]: data.element, // element\n [CUSTOM_PARAMETERS.parameter_4]: data.type, // type\n [CUSTOM_PARAMETERS.parameter_5]: data.result, // result\n [CUSTOM_PARAMETERS.parameter_6]: data.interaction // interaction\n }\n }\n return null\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport pusher from '../pusher'\nimport { sanitizeFlightBusSelectorData, flightBusSelectorMapper } from '../mappers/flight-bus-selector-mapper'\n\nconst ELEMENT_CLICKED = 'element_clicked'\nconst BUTTON_GROUP = 'button_group'\n\nexport function listenFlightBusSelectorEvents (event) {\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_SIDE_DRAWER_CLOSED, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: ELEMENT_CLICKED, result: 'Close component' })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_SIDE_DRAWER_OPENED, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: BUTTON_GROUP, result: `Change ${sanitizedData.transportType}` })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_COLLAPSE_CLOSED, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: ELEMENT_CLICKED, result: 'Show less' })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_COLLAPSE_OPENED, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: BUTTON_GROUP, result: 'Show more' })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_CANCEL, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: ELEMENT_CLICKED, result: 'Remove selection' })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_SAVE, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: ELEMENT_CLICKED, result: 'Save selection' })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_SELECT_FLIGHT, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: ELEMENT_CLICKED, result: `Select ${sanitizedData.transportType}` })\n pusher.pushDataObject(mappedData)\n })\n\n event.on(eventTypes.flightBusSelectorEvents.FLIGHT_SELECTOR_SWITCH_TAB, (data) => {\n const sanitizedData = sanitizeFlightBusSelectorData(data)\n const mappedData = flightBusSelectorMapper({ ...sanitizedData, element: ELEMENT_CLICKED, result: `Select ${sanitizedData.type}` })\n pusher.pushDataObject(mappedData)\n })\n}\n","import { ga4Mapper } from './ga4-mapper'\n\nexport const FORM_DATA_VALUES = {\n email: 'email',\n whatsapp: 'whatsapp',\n post: 'post',\n account: 'account'\n}\n\nexport const permissionSettingsMapper = (formData) => {\n let dataObject = null\n const formDataValues = []\n if (formData) {\n formData.forEach(formDataItem => {\n const formDataValueIncluded = Object.values(FORM_DATA_VALUES).filter(formDataValue => {\n return formDataItem.includes(formDataValue)\n })\n formDataValues.push(...formDataValueIncluded)\n })\n }\n\n if (formDataValues.length) {\n dataObject = dataObject = ga4Mapper({\n event: 'form_submit',\n description: 'Objection form submitted',\n element: 'checkbox',\n interaction: true,\n result: formDataValues.join()\n })\n }\n\n return dataObject\n}\n","import pusher from '../pusher'\nimport { permissionSettingsMapper } from '../mappers/permission-settings-mapper'\n\nexport function listenFormComponentEvents (event) {\n event.on('submitted', (formData) => {\n const mappedData = permissionSettingsMapper(formData)\n pusher.pushDataObject(mappedData)\n })\n}\n","export const promotionImageButtonMapper = (data) => {\n return {\n event: 'promotion_click',\n promo_url: (data.href ? data.href : null)\n }\n}\n","import pusher from '../pusher'\nimport { promotionImageButtonMapper } from '../mappers/promotion-image/promotion-image-button-mapper'\n\nexport function listenButtonEvents (event) {\n event.on('clickButton', (data) => {\n const mappedData = promotionImageButtonMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import { CUSTOM_PARAMETERS } from '../../constants'\n\nexport const mainMenuMapper = (data) => {\n let dataObject = null\n const isDataValid = data &&\n (data.text && typeof data.text === 'string') &&\n (data.isFinalLink !== null && typeof data.isFinalLink === 'boolean') &&\n (data.itemsTrace && typeof data.itemsTrace === 'string')\n\n if (isDataValid) {\n dataObject = {\n event: 'mainMenu',\n [CUSTOM_PARAMETERS.parameter_2]: 'Item in main menu is clicked: ' + (data.text ? data.text : ''), // description\n [CUSTOM_PARAMETERS.parameter_3]: 'Clickable text', // element\n [CUSTOM_PARAMETERS.parameter_4]: 'Final link: ' + (data.isFinalLink ? 'true' : 'false'), // type\n [CUSTOM_PARAMETERS.parameter_5]: (data.itemsTrace ? data.itemsTrace : ''), // result\n [CUSTOM_PARAMETERS.parameter_6]: true // interaction\n }\n }\n return dataObject\n}\n","import pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { mainMenuMapper } from '../mappers/main-menu/main-menu-mapper'\n\nexport function listenMainMenuEvents (event) {\n event.on(eventTypes.mainMenuEvents.MAIN_MENU_ITEM_CLICKED, (data) => {\n const mappedData = mainMenuMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","export const loginStatusMapper = (data) => {\n let dataObject = null\n if (data) {\n dataObject = {\n event: 'logged_in_check',\n userId: data.profileId || '',\n logged_in: data.isUserLoggedIn || false\n }\n }\n return dataObject\n}\n","import pusher from '../pusher'\nimport * as eventTypes from '../../../../js/document/event-types'\nimport { loginStatusMapper } from '../mappers/login-status-mapper'\n\nexport function listenLoginStatusEvents (event) {\n event.on(eventTypes.loginStatusEvents.LOADED, (data) => {\n const mappedData = loginStatusMapper(data)\n pusher.pushDataObject(mappedData)\n })\n}\n","import * as eventTypes from '../../../../js/document/event-types'\nimport pusher from '../pusher'\n\nexport function listenAccountMenuEvents (event) {\n const eventDetails = {\n [eventTypes.accountMenuEvents.MY_ACCOUNT_CLICKED]: {\n description: 'Click on My Sunweb',\n result: 'redirects to the login page'\n },\n [eventTypes.accountMenuEvents.CREATE_ACCOUNT_CLICKED]: {\n description: 'Click on Create Account',\n result: 'redirects to the account creation page'\n },\n [eventTypes.accountMenuEvents.MY_BOOKINGS_CLICKED]: {\n description: 'Click on My Bookings',\n result: \"redirects to 'My Sunweb' page\"\n },\n [eventTypes.accountMenuEvents.FAVORITES_CLICKED]: {\n description: 'Click on Favorites',\n result: 'redirects to the favorites page'\n }\n }\n\n Object.entries(eventDetails).forEach(([eventType, { description, result }]) => {\n event.on(eventType, () => pushEvent(description, result))\n })\n}\n\nfunction pushEvent (description, result) {\n pusher.pushDataObject({\n event: 'manageAccount',\n description,\n element: 'button',\n result,\n interaction: true\n })\n}\n","import * as types from './types'\nimport * as eventTypes from '../../../js/document/event-types'\n\nclass TypeChecker {\n isSearchFilter (type) {\n return Object.values(types.searchFilterType).includes(type)\n }\n\n isQuickSearchFilter (type) {\n return Object.values(types.quickSearchFilterType).includes(type)\n }\n\n isBookingGateFilter (type) {\n return Object.values(types.bookingGateFilterType).includes(type)\n }\n\n isBookingStepsComponent (type) {\n return Object.values(types.bookingStepsType).includes(type)\n }\n\n isBookingStepsPreferences (type) {\n return types.bookingPreferences === type\n }\n\n isAccommodationContent (type) {\n return Object.values(types.staticContentType).includes(type)\n }\n\n isAccommodationPromotedPrice (type) {\n return Object.values(types.promotedPriceType).includes(type)\n }\n\n isAccommodationDestination (type) {\n return Object.values(types.accommodationDestinationType).includes(type)\n }\n\n isAccommodationDescription (type) {\n return Object.values(types.accommodationDescriptionType).includes(type)\n }\n\n isAccommodationNav (type) {\n return Object.values(types.accommodationNavType).includes(type)\n }\n\n isAccommodationRecommendation (type) {\n return Object.values(types.accommodationRecommendationType).includes(type)\n }\n\n isAccommodationTabGoBackBtn (type) {\n return Object.values(types.accommodationTabsType).includes(type)\n }\n\n isPayment (type) {\n return types.paymentType === type\n }\n\n isLiveSearchComponent (type) {\n return Object.values(types.liveSearchType).includes(type)\n }\n\n isAccountBookingComponent (type) {\n return Object.values(types.accountBookingType).includes(type)\n }\n\n isAccountBookingsComponent (type) {\n return Object.values(types.accountBookingsType).includes(type)\n }\n\n isRefund (type) {\n return types.refundType === type\n }\n\n isFaqTopQuestionsComponent (type) {\n return Object.values(eventTypes.faqTopQuestionsEvents).includes(type)\n }\n\n isHeaderNavigation (type) {\n return Object.values(types.headerNavigationType).includes(type)\n }\n\n isBookingOptionalAncillariesPopup (type) {\n return type === types.bookingOptionalAncillariesPopup\n }\n\n isBookingErrorModal (type) {\n return type === types.bookingErrorModal\n }\n\n isMainNavigation (type) {\n return types.headerNavigationType.MAIN === type\n }\n\n isMobileNavigation (type) {\n return types.headerNavigationType.MOBILE === type\n }\n\n isLoginForm (type) {\n return Object.values(eventTypes.loginFormEvents).includes(type)\n }\n\n isRebookingOptions (type) {\n return Object.values(eventTypes.rebookingOptionsEvents).includes(type)\n }\n\n isPreferenceQuestionnaire (type) {\n return Object.values(eventTypes.preferenceQuestionnaireEvents).includes(type)\n }\n\n isProfileData (type) {\n return Object.values(eventTypes.profileDataEvents).includes(type)\n }\n\n isPromotionImage (type) {\n return Object.values(types.promotionImageType).includes(type)\n }\n\n isSkiService (type) {\n return types.bookingStepsType.SKI_SERVICE === type\n }\n\n isAccommodationRoomtypesComponent (type) {\n return Object.values(types.accommodationRoomtypesType).includes(type)\n }\n\n isAccommodationTabsComponent (type) {\n return Object.values(types.accommodationTabsType).includes(type)\n }\n\n isAccommodationFacilitiesComponent (type) {\n return Object.values(types.accommodationFacilitiesType).includes(type)\n }\n\n isAccommodationMealplansComponent (type) {\n return Object.values(types.accommodationMealplansType).includes(type)\n }\n\n isAccommodationPracticalBlockComponent (type) {\n return Object.values(types.accommodationPracticalBlockType).includes(type)\n }\n\n isAccommodationSkiBlockComponent (type) {\n return Object.values(types.accommodationSkiBlockType).includes(type)\n }\n\n isAccommodationGalleryComponent (type) {\n return Object.values(types.accommodationGalleryType).includes(type)\n }\n\n isBookingCarRental (type) {\n return Object.values(types.bookingCarRentalType).includes(type)\n }\n\n isPermissionSettings (type) {\n return Object.values(eventTypes.permissionSettingsEvents).includes(type)\n }\n\n isReviewsListComponent (type) {\n return Object.values(types.reviewsListType).includes(type)\n }\n\n isReviewsTeaserComponent (type) {\n return Object.values(types.reviewsTeaserType).includes(type)\n }\n\n isReviewsTeaserPopup (type) {\n return Object.values(types.reviewsTeaserType).includes(type)\n }\n}\n\nexport default new TypeChecker()\n","import * as searchListeners from './listeners/search'\nimport * as bookingListeners from './listeners/booking'\nimport * as productsListeners from './listeners/products'\nimport * as sharedListeners from './listeners/shared'\nimport * as bookingGateListeners from './listeners/booking-gate'\nimport * as quickSearchListeners from './listeners/quick-search'\nimport * as vouchersListeners from './listeners/vouchers'\nimport * as paymentsListeners from './listeners/payments'\nimport * as liveSearchListeners from './listeners/live-search'\nimport * as reviewsListListeners from './listeners/reviews-list'\nimport * as reviewsTeaserListeners from './listeners/reviews-teaser'\nimport * as accountBookingListeners from './listeners/account-booking'\nimport * as accountBookingsListeners from './listeners/account-bookings'\nimport * as accountBookedServiceEditListeners from './listeners/account-booked-service-edit'\nimport * as refundsListeners from './listeners/refunds'\nimport * as faqListeners from './listeners/faq'\nimport * as favoriteListeners from './listeners/favorites'\nimport * as navigationListeners from './listeners/nav'\nimport * as personalDetailsEditListeners from './listeners/personal-details-edit'\nimport * as loginFormListeners from './listeners/login-form'\nimport * as rebookingOptionsListeners from './listeners/rebooking-options'\nimport * as preferenceQuestionnaireListeners from './listeners/preference-questionnaire'\nimport * as profileDataListeners from './listeners/profile-data'\nimport * as accommodationRoomtypesListeners from './listeners/accommodation-roomtypes'\nimport * as accommodationTabsListeners from './listeners/accommodation-tabs'\nimport * as accommodationFacilitiesListeners from './listeners/accommodation-facilities'\nimport * as accommodationMealplansListeners from './listeners/accommodation-mealplans'\nimport * as accommodationDestinationListeners from './listeners/accommodation-destination'\nimport * as accommodationDescriptionListeners from './listeners/accommodation-description'\nimport * as accommodationGalleryListeners from './listeners/accommodation-gallery'\nimport * as accommodationPracticalBlockListeners from './listeners/accommodation-practical-block'\nimport * as accommodationSkiBlockListeners from './listeners/accommodation-ski-block'\nimport * as accommodationNavListeners from './listeners/accommodation-nav'\nimport * as accommodationRecommendationListeners from './listeners/accommodation-recommendation'\nimport * as flightBusSelectorListeners from './listeners/flight-bus-selector'\nimport * as permissionSettingsListeners from './listeners/permission-settings'\nimport * as promotionImageListeners from './listeners/promotion-image'\nimport * as mainMenuListeners from './listeners/main-menu'\nimport * as loginStatusListeners from './listeners/login-status'\nimport * as accountMenuListeners from './listeners/account-menu'\nimport typeChecker from './type-checker'\n\nexport function getEventFunction (name, track) {\n switch (name) {\n case 'c-form':\n if (typeChecker.isPayment(track)) return paymentsListeners.listenFormComponentEvents\n if (typeChecker.isRefund(track)) return refundsListeners.listenFormComponentEvents\n if (typeChecker.isLoginForm(track)) return loginFormListeners.listenFormComponentEvents\n if (typeChecker.isPermissionSettings(track)) return permissionSettingsListeners.listenFormComponentEvents\n return sharedListeners.listenFormComponentEvents\n\n case 'c-dropdown-multiple':\n if (typeChecker.isQuickSearchFilter(track)) return quickSearchListeners.listenDropdownMultipleEvents\n if (typeChecker.isSearchFilter(track)) return searchListeners.listenDropdownMultipleEvents\n if (typeChecker.isBookingGateFilter(track)) return bookingGateListeners.listenDropdownMultipleEvents\n if (typeChecker.isReviewsListComponent(track)) return reviewsListListeners.listenDropdownMultipleEvents\n return null\n\n case 'c-dropdown':\n if (typeChecker.isQuickSearchFilter(track)) return quickSearchListeners.listenDropdownEvents\n if (typeChecker.isSearchFilter(track)) return searchListeners.listenDropdownEvents\n if (typeChecker.isBookingGateFilter(track)) return bookingGateListeners.listenDropdownEvents\n if (typeChecker.isReviewsListComponent(track)) return reviewsListListeners.listenDropdownEvents\n return null\n\n case 'c-choice-list':\n if (typeChecker.isSearchFilter(track)) return searchListeners.listenChoiceListEvents\n if (typeChecker.isBookingStepsComponent(track)) return bookingListeners.listenChoiceListEvents\n if (typeChecker.isBookingStepsPreferences(track)) return bookingListeners.listenBookingPreferencesEvents\n return null\n\n case 'c-autocomplete':\n if (typeChecker.isQuickSearchFilter(track)) return quickSearchListeners.listenAutocompleteEvents\n if (typeChecker.isLiveSearchComponent(track)) return liveSearchListeners.listenLiveSearchEvents\n return null\n\n case 'c-collapse':\n if (typeChecker.isAccountBookingComponent(track)) return accountBookingListeners.listenCollapseEvents\n if (typeChecker.isFaqTopQuestionsComponent(track)) return faqListeners.listenCollapseEvents\n if (typeChecker.isProfileData(track)) return profileDataListeners.listenCollapseEvents\n if (typeChecker.isAccommodationRoomtypesComponent(track)) return accommodationRoomtypesListeners.listenCollapseEvents\n if (typeChecker.isAccommodationFacilitiesComponent(track)) return accommodationFacilitiesListeners.listenCollapseEvents\n if (typeChecker.isAccommodationMealplansComponent(track)) return accommodationMealplansListeners.listenCollapseEvents\n if (typeChecker.isAccommodationPracticalBlockComponent(track)) return accommodationPracticalBlockListeners.listenCollapseEvents\n if (typeChecker.isAccommodationSkiBlockComponent(track)) return accommodationSkiBlockListeners.listenCollapseEvents\n if (typeChecker.isAccommodationDescription(track)) return accommodationDescriptionListeners.listenCollapseEvents\n if (typeChecker.isBookingCarRental(track)) return bookingListeners.listenCollapseEvents\n if (typeChecker.isReviewsTeaserComponent(track)) return reviewsTeaserListeners.listenCollapseEvents\n return null\n\n case 'c-nav':\n if (typeChecker.isMainNavigation(track) || typeChecker.isMobileNavigation(track)) return navigationListeners.listenMainNavigationEvents\n if (typeChecker.isAccommodationNav(track)) return accommodationNavListeners.listenNavigationEvents\n return null\n\n case 'c-btn':\n if (typeChecker.isAccountBookingComponent(track)) return accountBookingListeners.listenButtonEvents\n if (typeChecker.isAccountBookingsComponent(track)) return accountBookingsListeners.listenButtonEvents\n if (typeChecker.isRebookingOptions(track)) return rebookingOptionsListeners.listenButtonEvents\n if (typeChecker.isPreferenceQuestionnaire(track)) return preferenceQuestionnaireListeners.listenButtonEvents\n if (typeChecker.isHeaderNavigation(track)) return navigationListeners.listenHeaderButtonEvents\n if (typeChecker.isProfileData(track)) return profileDataListeners.listenButtonEvents\n if (typeChecker.isBookingCarRental(track)) return bookingListeners.listenCarRentalButtonEvents\n if (typeChecker.isBookingOptionalAncillariesPopup(track)) return bookingListeners.listenBookingOptionalAncillariesPopup\n if (typeChecker.isBookingErrorModal(track)) return bookingListeners.listenBookingErrorEvents\n if (typeChecker.isPromotionImage(track)) return promotionImageListeners.listenButtonEvents\n if (typeChecker.isAccommodationDestination(track)) return accommodationDestinationListeners.listenButtonEvents\n if (typeChecker.isReviewsTeaserComponent(track)) return reviewsTeaserListeners.listenButtonEvents\n if (typeChecker.isAccommodationRoomtypesComponent(track)) return accommodationRoomtypesListeners.listenBtnEvents\n if (typeChecker.isAccommodationRecommendation(track)) return accommodationRecommendationListeners.listenBtnEvents\n if (typeChecker.isAccommodationTabGoBackBtn(track)) return accommodationTabsListeners.listenBtnGoBackEvents\n if (typeChecker.isPayment(track)) return paymentsListeners.listenButtonEvents\n return null\n\n case 'c-card':\n if (typeChecker.isAccountBookingsComponent(track)) return accountBookingsListeners.listenCardEvents\n return null\n case 'c-favorite-btn':\n return favoriteListeners.listenFavoriteEvents\n\n case 'c-tabs':\n if (typeChecker.isAccommodationTabsComponent(track)) return accommodationTabsListeners.listenTabsEvents\n return null\n\n case 'c-img':\n if (typeChecker.isHeaderNavigation(track)) return navigationListeners.listenHeaderLogoEvents\n return null\n\n case 'c-modal':\n if (typeChecker.isAccountBookingsComponent(track)) return accountBookingsListeners.listenModalEvents\n return null\n\n case 'c-modal-v2':\n if (typeChecker.isBookingOptionalAncillariesPopup(track)) return bookingListeners.listenBookingOptionalAncillariesPopup\n if (typeChecker.isReviewsTeaserPopup(track)) return reviewsTeaserListeners.listenReviewsTeaserPopup\n return null\n\n case 'c-slider':\n if (typeChecker.isAccommodationGalleryComponent(track)) return accommodationGalleryListeners.listenSliderEvents\n if (typeChecker.isAccommodationRecommendation(track)) return accommodationRecommendationListeners.listenSliderEvents\n return null\n\n case 'w-reviews-list':\n return reviewsListListeners.listenReviewsListEvents\n\n case 'w-reviews-teaser':\n return reviewsTeaserListeners.listenReviewsTeaserEvents\n\n case 'w-voucher-redeemer':\n return vouchersListeners.listenVoucherRedeemerWidgetEvents\n\n case 'w-payment':\n return paymentsListeners.listenPaymentWidgetEvents\n\n case 'w-search':\n return searchListeners.listenSearchWidgetEvents\n\n case 'w-search-map':\n return searchListeners.listenMapEvents\n\n case 'w-dates-filter':\n if (typeChecker.isQuickSearchFilter(track)) return quickSearchListeners.listenDateFilterWidgetEvents\n if (typeChecker.isSearchFilter(track)) return searchListeners.listenDateFilterWidgetEvents\n return null\n\n case 'w-participants-filter':\n if (typeChecker.isQuickSearchFilter(track)) return quickSearchListeners.listenParticipantsFilterWidgetEvents\n if (typeChecker.isSearchFilter(track)) return searchListeners.listenParticipantsFilterWidgetEvents\n if (typeChecker.isBookingGateFilter(track)) return bookingGateListeners.listenParticipantsFilterWidgetEvents\n return null\n\n case 'w-product-map':\n return productsListeners.listenProductMapEvents\n\n case 'w-static-content-data':\n if (typeChecker.isAccommodationContent(track)) return sharedListeners.listenAccommodationStaticContentDataWidgetEvents\n return null\n\n case 'w-booked-service-edit':\n return accountBookedServiceEditListeners.listenBookedServiceEditEvents\n\n case 'w-booking-car-rental':\n return bookingListeners.listenBookingCarRentalEvents\n\n case 'w-booking-choice-list':\n return bookingListeners.listenBookingChoiceListEvents\n\n case 'w-booking-comparison-table':\n return bookingListeners.listenBookingComparisonTableEvents\n\n case 'w-booking-luggage':\n return bookingListeners.listenBookingLuggageEvents\n\n case 'w-booking-redeemer':\n case 'w-booking-bundle':\n return bookingListeners.listenBookingItemEvents\n\n case 'w-booking-participants-form':\n return bookingListeners.listenBookingParticipantsFormEvents\n\n case 'w-booking-participants-badge':\n return bookingListeners.listenBookingParticipantsBadgeEvents\n\n case 'w-booking-error':\n return bookingListeners.listenBookingErrorEvents\n\n case 'w-booking-filterable-services':\n if (typeChecker.isSkiService(track)) return bookingListeners.listenBookingFilterableServiceSkiEvents\n if (!typeChecker.isSkiService(track)) return bookingListeners.listenBookingItemEvents\n return null\n\n case 'w-promoted-price':\n if (typeChecker.isAccommodationPromotedPrice(track)) return bookingGateListeners.listenAccommodationPromotedPriceWidgetEvents\n return null\n\n case 'w-recommended-acco-lister':\n if (typeChecker.isAccommodationRecommendation(track)) return accommodationRecommendationListeners.listenRecommendedAccoListerWidgetEvents\n return searchListeners.listenAccoListerWidgetEvents\n\n case 'w-booking-steps':\n return bookingListeners.listenBookingStepsWidgetEvents\n\n case 'w-destination-filter':\n if (typeChecker.isQuickSearchFilter(track)) return quickSearchListeners.listenDestinationMultipleEvents\n if (typeChecker.isSearchFilter(track)) return searchListeners.listenDestinationMultipleEvents\n return null\n\n case 'w-price-filter':\n return searchListeners.listenPriceFilterWidgetEvents\n\n case 'w-tabs-filter':\n if (typeChecker.isBookingGateFilter(track)) return bookingGateListeners.listenTabsFilterWidgetEvents\n return null\n\n case 'w-booking-gate':\n return bookingGateListeners.listenBookingGateEvents\n\n case 'w-refund':\n return refundsListeners.listenRefundRequestWidgetEvents\n\n case 'w-booking-cancellation-flow':\n return accountBookingListeners.listenBookingCancellationFlow\n\n case 'w-personal-details-edit':\n return personalDetailsEditListeners.listenPersonalDetailsEditWidgetEvents\n\n case 'w-excursions':\n return accountBookingListeners.listenExcursionsEvents\n\n case 'w-preference-questionnaire':\n return preferenceQuestionnaireListeners.listenButtonEvents\n\n case 'w-download-documents':\n return accountBookingListeners.listenDownloadDocumentsEvents\n\n case 'w-flight-bus-selector':\n return flightBusSelectorListeners.listenFlightBusSelectorEvents\n\n case 'w-booking-optional-ancillaries-popup':\n return bookingListeners.listenBookingOptionalAncillariesPopup\n\n case 'w-main-menu':\n return mainMenuListeners.listenMainMenuEvents\n\n case 'w-login-status':\n return loginStatusListeners.listenLoginStatusEvents\n\n case 'w-account-special-luggage':\n return accountBookingListeners.listenAccountSpecialLuggageEvents\n\n case 'w-subscribe-form':\n return bookingGateListeners.listenSubscribeFormEvents\n\n case 'w-account-menu':\n return accountMenuListeners.listenAccountMenuEvents\n\n default:\n return null\n }\n}\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport registeredEvents from '../../../../shared/js/helpers/registered-events'\nimport { getEventFunction } from './listeners'\n\nconst widgetApi = 'w-data-layer'\n\nexport default class DataLayer {\n /**\n * Creates a new Datalayer\n *\n * @constructor\n *\n * @param {HTMLElement} element - The HTML widget element.\n * @param {{}} [options={}] - Options object\n *\n */\n constructor (element, options = {}) {\n this.element = element\n\n this.options = {\n ...{},\n ...options\n }\n\n this._bind(registeredEvents.components, 'componentEventsRegistered')\n this._bind(registeredEvents.widgets, 'widgetEventsRegistered')\n }\n\n _bind (elements, eventName) {\n this._bindQueuedElements(elements)\n this._bindEvent(eventName)\n }\n\n _bindQueuedElements (elements) {\n Object.entries(elements).forEach(([name, itemsArray]) => {\n itemsArray.forEach(item => {\n if (item.options.track) {\n const listenEvents = getEventFunction(name, item.options.track)\n if (listenEvents) {\n listenEvents(item.events, item.options.track)\n }\n }\n })\n })\n }\n\n _bindEvent (eventName) {\n registeredEvents.events.on(eventName, (data) => {\n if (data.options.track) {\n const listenEvents = getEventFunction(data.name, data.options.track)\n if (listenEvents) {\n listenEvents(data.events, data.options.track)\n }\n }\n })\n }\n}\n\nregisterWidget(DataLayer, widgetApi)\n","export const searchFilter = {\n COUNTRY: 'searchFilter.country',\n REGION: 'searchFilter.region',\n CITY: 'searchFilter.city',\n DEPARTURE_DATE: 'searchFilter.departureDate',\n PARTICIPANTS: 'searchFilter.participants',\n AIRPORTS: 'searchFilter.airports',\n ARRIVAL_AIRPORTS: 'searchFilter.arrivalAirports',\n DURATION: 'searchFilter.duration',\n MEALPLAN: 'searchFilter.mealplan',\n LASTMINUTE: 'searchFilter.lastminute',\n PRICE_PER_PERSON: 'searchFilter.pricePerPerson',\n ACCOMMODATION_TYPE: 'searchFilter.accommodationType',\n ROOM_COUNT: 'searchFilter.roomCount',\n SKI_MIN_ALTITUDE: 'searchFilter.skiAreaMinimumAltitudeMeters',\n BATHROOM_COUNT: 'searchFilter.bathroomCount',\n GENERAL_FACILITIES: 'searchFilter.generalFacilities',\n INTERNET_FACILITIES: 'searchFilter.internetFacilities',\n CHILDREN_FACILITIES: 'searchFilter.childrenFacilities',\n WIFI_FACILITY: 'searchFilter.wifiFacility',\n RECOMMENDED: 'searchFilter.recommended',\n CAMPAIGNS: 'searchFilter.campaings',\n THEMES: 'searchFilter.themes',\n CUSTOMER_RATING: 'searchFilter.customerRating',\n CENTER_DISTANCE: 'searchFilter.centerDistance',\n SLOPE_DISTANCE: 'searchFilter.slopeDistance',\n SKI_LIFT_DISTANCE: 'searchFilter.skiLiftDistance',\n BEACH_DISTANCE: 'searchFilter.beachDistance',\n DISCOUNT: 'searchFilter.discount',\n BEDS_LIVINGROOM: 'searchFilter.bedsInLivingroom',\n SKI__PASS_INCLUDED: 'searchFilter.skiPassIncluded',\n HAS_AVAILABILITY: 'searchFilter.hasAvailability',\n FLIGHT_ONLY: 'searchFilter.isFlightOnly',\n STARS: 'searchFilter.stars',\n COLLECTION: 'searchFilter.collection',\n TRANSPORT: 'searchFilter.transportType',\n AIRLINE: 'searchFilter.airline',\n DESTINATION: 'searchFilter.destination',\n SKI_AREA_KMS: 'searchFilter.skiAreaSlopeKms'\n}\n","export const bookingSteps = {\n CHOICE_LIST: 'bookingSteps.choiceList',\n SKI_SERVICE: 'bookingSteps.SkiService'\n}\n","export const staticContent = {\n ACCOMMODATION: 'staticContent.accommodation'\n}\n","export const quickSearchFilter = {\n DESTINATION: 'quickSearchFilter.destination',\n DEPARTURE_DATE: 'quickSearchFilter.departureDate',\n AIRPORTS: 'quickSearchFilter.airports',\n ARRIVAL_AIRPORTS: 'searchFilter.arrivalAirports',\n DURATION: 'quickSearchFilter.duration',\n PARTICIPANTS: 'quickSearchFilter.participants',\n TRANSPORT: 'quickSearchFilter.transportType'\n}\n","export const promotedPrice = {\n ACCOMMODATION: 'PromotedPrice.Accommodation'\n}\n","export const liveSearch = {\n AUTOCOMPLETE: 'liveSearch.autocomplete'\n}\n","export const bookingGateFilter = {\n MEALPLAN: 'bookingGateFilter.mealplan',\n DURATIONS: 'bookingGateFilter.durations',\n MONTH: 'bookingGateFilter.month',\n ROOM_TYPES: 'bookingGateFilter.roomTypes',\n TRANSPORT: 'bookingGateFilter.transportType',\n PARTICIPANTS: 'bookingGateFilter.participants',\n AIRPORTS: 'bookingGateFilter.airports'\n}\n","export const accountBooking = {\n PARTICIPANT_TOGGLED: 'accountbooking.participant',\n TRANSPORT_SUMMARY_TOGGLED: 'accountbooking.transportSummary',\n CONTACT_INFO_TOGGLED: 'accountbooking.contactInfo',\n PAYMENT_BUTTON_PRESSED: 'accountbooking.paymentButton',\n DELETE_BOOKING_MODAL_OPEN: 'accountbooking.openDeleteBookingModalButton',\n BOOKING_DELETED: 'accountbooking.deleteBookingButton'\n}\n","export const accountBookings = {\n DELETE_ACCOUNT_MODAL_OPEN: 'accountbookings.openDeleteAccountModalButton',\n ACCOUNT_DELETED: 'accountbookings.deleteAccountButton',\n BOOKING_CARD_CLICKED: 'accountbookings.bookingCard',\n PAST_BOOKING_CARD_CLICKED: 'accountbookings.pastBookingCard',\n ADD_BOOKING_MODAL_OPEN: 'accountbookings.addBookingModalOpen',\n ADD_BOOKING_SUCCEEDED_MODAL_CLOSE: 'accountbookings.addBookingSucceededModalClose',\n ADD_BOOKING_FAILED_MODAL_CLOSE: 'accountbookings.addBookingFailedModalClose'\n}\n","export const headerNavigation = {\n MAIN: 'navigation.mainHeader',\n TOP: 'navigation.topHeader',\n MOBILE: 'navigation.mobileHeader',\n ICON_MOBILE: 'navigation.iconMobileHeader',\n LOGO: 'navigation.logoHeader'\n}\n","export const accommodationGallery = {\n ACCOMMODATION_GALLERY: 'accommodationGallery.slider',\n ACCOMMODATION_GALLERY_OPEN: 'accommodationGallery.sliderOpen'\n}\n","export const accommodationRoomtypes = {\n ROOMTYPES_DESCRIPTION_TOGGLED: 'accommodationroomtypes.description',\n ROOMTYPES_SELECTOR_TOGGLED: 'accommodationroomtypes.selector',\n ROOMTYPES_MODAL_OPENED: 'accommodationroomtypes.modal',\n ROOMTYPES_MODAL_SEE_PRICES: 'accommodationroomtypes.modalseeprices',\n ROOMTYPES_SEE_PRICES: 'accommodationroomtypes.seeprices'\n}\n","export const accommodationTabs = {\n ACCOMMODATION_TAB_SELECTION: 'accommodationTabs.selection',\n ACCOMMODATION_TAB_GO_BACK_DESCRIPTION: 'accommodationTabs.goBackDescription'\n}\n","export const accommodationFacilities = {\n ACCOMMODATION_FACILITIES_COLLAPSE: 'accommodationFacilities.collapse'\n}\n","export const accommodationMealplans = {\n MEALPLANS_DESCRIPTION_TOGGLED: 'accommodationMealplans.description'\n}\n","export const accommodationDestination = {\n ACCOMMODATION_DESTINATION_BUTTON: 'accommodationDestination.button'\n}\n","export const accommodationDescription = {\n ACCOMMODATION_DESCRIPTION_COLLAPSE: 'accommodationDescription.collapse'\n}\n","export const accommodationPracticalBlock = {\n PRACTICAL_BLOCK_DESCRIPTION_TOGGLED: 'accommodationPracticalBlock.description'\n}\n","export const accommodationSkiBlock = {\n SKI_BLOCK_DESCRIPTION_TOGGLED: 'accommodationSkiBlock.description'\n}\n","export const accommodationRecommendation = {\n ACCOMMODATION_RECOMMENDATION: 'accommodationRecommendation',\n ACCOMMODATION_RECOMMENDATION_CTABTN: 'accommodationRecommendation.CTABtn',\n ACCOMMODATION_RECOMMENDATION_SLIDER: 'accommodationRecommendation.slider'\n}\n","export const accommodationNav = {\n ACCOMMODATION_NAV_LINK: 'accommodationNav.link'\n}\n","export const bookingCarRental = {\n UPGRADE: 'bookingCarRental.Upgrade',\n REMOVE: 'bookingCarRental.Remove',\n EDIT: 'bookingCarRental.Edit',\n CANCEL: 'bookingCarRental.Cancel',\n CONDITIONS: 'bookingCarRental.Conditions',\n SHOW_CARS: 'bookingCarRental.ShowCars'\n}\n","export const reviewsList = {\n PARTY_COMPOSITION_FILTER: 'reviewsList.partyCompositionFilter',\n SORTING_FILTER: 'reviewsList.sortingFilter'\n}\n","export const reviewsTeaser = {\n REVIEWS_TEASER: 'reviewsTeaser',\n REVIEWS_TEASER_TRANSLATIONS: 'reviewsTeaser.translation',\n REVIEWS_TEASER_ORIGINAL: 'reviewsTeaser.original',\n REVIEWS_TEASER_POPUP: 'reviewsTeaser.modal',\n REVIEWS_TEASER_SHOW_MORE: 'reviewsTeaser.showMore'\n}\n","export const promotionImage = {\n BUTTON: 'PromotionImage.Button'\n}\n","export { searchFilter as searchFilterType } from './types/search-filter-types'\nexport { bookingSteps as bookingStepsType } from './types/booking-steps-types'\nexport { staticContent as staticContentType } from './types/static-content-types'\nexport { quickSearchFilter as quickSearchFilterType } from './types/quick-search-filter-types'\nexport { promotedPrice as promotedPriceType } from './types/promoted-price-types'\nexport { liveSearch as liveSearchType } from './types/live-search-types'\nexport { bookingGateFilter as bookingGateFilterType } from './types/booking-gate-filter-types'\nexport { accountBooking as accountBookingType } from './types/account-booking-types'\nexport { accountBookings as accountBookingsType } from './types/account-bookings-types'\nexport { headerNavigation as headerNavigationType } from './types/navigation-types'\nexport { accommodationGallery as accommodationGalleryType } from './types/accommodation-gallery-types'\nexport { accommodationRoomtypes as accommodationRoomtypesType } from './types/accommodation-roomtypes-types'\nexport { accommodationTabs as accommodationTabsType } from './types/accommodation-tabs-types'\nexport { accommodationFacilities as accommodationFacilitiesType } from './types/accommodation-facilities-types'\nexport { accommodationMealplans as accommodationMealplansType } from './types/accommodation-mealplans-types'\nexport { accommodationDestination as accommodationDestinationType } from './types/accommodation-destination-types'\nexport { accommodationDescription as accommodationDescriptionType } from './types/accommodation-description-types'\nexport { accommodationPracticalBlock as accommodationPracticalBlockType } from './types/accommodation-practical-block-types'\nexport { accommodationSkiBlock as accommodationSkiBlockType } from './types/accommodation-ski-block-types'\nexport { accommodationRecommendation as accommodationRecommendationType } from './types/accommodation-recommendation-types'\nexport { accommodationNav as accommodationNavType } from './types/accommodation-nav-types'\nexport { bookingCarRental as bookingCarRentalType } from './types/booking-car-rental-types'\nexport { reviewsList as reviewsListType } from './types/reviews-list-types'\nexport { reviewsTeaser as reviewsTeaserType } from './types/reviews-teaser-types'\nexport { promotionImage as promotionImageType } from './types/promotion-image-types'\nexport const paymentType = 'payment'\nexport const refundType = 'refund'\nexport const bookingOptionalAncillariesPopup = 'bookingOptionalAncillariesPopup'\nexport const bookingErrorModal = 'bookingErrorModal'\nexport const bookingPreferences = 'bookingSteps.preferences'\n","/**\n * List of events used by dates filter widget\n *\n */\nexport const datesFilter = {\n DATES_FILTERS_APPLIED: 'DatesFilter.FilterApplied'\n}\n","export const da = {\n navigationNavText: 'Afgang',\n durationInDaysText: 'dage',\n durationInNightsText: 'nætter'\n}\n\nexport const de = {\n navigationNavText: 'Abfahrt',\n durationInDaysText: 'tage',\n durationInNightsText: 'nächte'\n}\n\nexport const en = {\n navigationNavText: 'Departure',\n durationInDaysText: 'days',\n durationInNightsText: 'nights'\n}\n\nexport const nb = {\n navigationNavText: 'Avgang',\n durationInDaysText: 'dagger',\n durationInNightsText: 'netter'\n}\n\nexport const fr = {\n navigationNavText: 'Départ',\n durationInDaysText: 'journées',\n durationInNightsText: 'nuits'\n}\n\nexport const nl = {\n navigationNavText: 'Vertrek',\n durationInDaysText: 'dagen',\n durationInNightsText: 'nachten'\n}\n\nexport const sv = {\n navigationNavText: 'Avresa',\n durationInDaysText: 'dagar',\n durationInNightsText: 'nätter'\n}\n"],"names":["require","autoload","accoListerEvents","ACCO_LISTER_PRINTED","ACCO_LISTER_ITEM_CLICKED","ACCO_LISTER_CTA_CLICKED","tokensShared","tokensBrand","error","tokens","_objectSpread","SLIDER_ATTRIBUTES_DEFAULT","SLIDER_ATTRIBUTES_LISTED","SLIDER_ATTRIBUTES_TIPS","defaultAccoListerContentData","id","variant","acmModalId","priceLabelText","items","sliderAttributes","ctaButtonText","showCtaButton","track","AccoListerContentTemplate","d","sliderItems","chunk","packagesPerSlide","map","group","item","PackageItemTemplate","extraClasses","join","SliderTemplate","concat","attributes","barNavigation","outerNavigation","withGradient","luminosity","getTokenClass","getProfileData","userDataCookie","storage","cookie","get","isValidUserDataCookie","isUserLoggedIn","profileData","base64DecodeStrToObj","profileName","profileId","userId","userData","expirationDateTime","Date","str","decodedObj","base64data","window","decodeURIComponent","JSON","parse","base64ToUtf8String","e","newrelic","noticeError","base64","binString","atob","bytes","Uint8Array","from","m","codePointAt","TextDecoder","decode","EventEmitter","widgetApi","classNames","isOpen","isHidden","showAvatar","attr","widgetQueries","trigger","dropdown","loginItem","logoutItem","loginButton","createAccountLink","bookingsOverviewLink","favoritesButton","AccountMenu","element","_classCallCheck","this","_getHtmlElements","_attachEvents","_renderDropdown","events","registeredEvents","registerWidgetEvents","hasAttribute","value","key","triggers","querySelectorAll","querySelector","loginItems","logoutItems","_eventMappings","_this","forEach","addEventListener","_toggleDropdown","bind","document","event","isClickInsideTrigger","Array","some","contains","target","_closeDropdown","eventMappings","_defineProperty","accountMenuEvents","MY_ACCOUNT_CLICKED","CREATE_ACCOUNT_CLICKED","MY_BOOKINGS_CLICKED","FAVORITES_CLICKED","Object","entries","_ref","_ref2","selector","eventType","emit","classList","add","ariaExpanded","remove","_renderAvatar","initial","charAt","setAttribute","registerWidget","bookingBox","COLLAPSE_OPEN","COLLAPSE_CLOSE","bookingCancellationFlow","CHECK_REGULAR_CANCELLATION_CONDITIONS","CONFIRM_REGULAR_CANCELLATION","GET_PARTIAL_CANCELLATION_PARTICIPANTS","CONFIRM_PARTIAL_CANCELLATION","da","filtersError","filtersEmpty","pricetableError","bookingOptionalAncillariesPopup","CLOSE_BUTTON_CLICKED","ACCEPT_BUTTON_CLICKED","bookingParticipantsForm","ITEM_FORM_VALIDATON_ERROR","period","oneWeek","twoWeeks","noCarNotification","de","en","nb","fr","nl","sv","_regeneratorRuntime","t","r","prototype","n","hasOwnProperty","o","defineProperty","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","slice","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","info","_defineProperties","props","descriptor","input","hint","prim","toPrimitive","undefined","res","String","_toPrimitive","ceLoginRequestUrl","CeLogin","_isValidCeUser2","requestUrl","instance","Constructor","loginParams","_getCeLoginCredentialsFromUrl","_getRequestUrl","_isValidCeUser","protoProps","queryString","location","search","urlParams","URLSearchParams","userParam","passParam","getAttribute","_x","_x2","fn","_callee","result","_context","apiCaller","body","success","response","isValidCeUser","_removeUrlParams","self","args","arguments","apply","err","url","URL","href","searchParams","delete","replace","cookieNames","settings","modalBtn","CeModal","settingsData","_getSettingsDataFromDom","_showCeModal","textContent","partnerDiscount","partnerName","_attributes","title","_replaceTextVars","modal","ModalTemplate","modalId","bodyContent","bodyModalTemplate","style","closable","footerContent","BtnTemplate","block","text","btnText","newContent","elementFromString","appendChild","Component","initDocumentComponentsFromAPI","_attachModalEvent","open","replacedStr","replaceAll","partner","CeProfile","getPartnerData","publicationCode","_renderModal","set","path","expirationDays","parseInt","_isPastDate","_base64DecodeStrToObj","isSunwebCE","discounts","_filteredAndSorted$","filteredAndSorted","filter","sort","b","discount","filteredDiscounts","getDiscount","partnerDiscounts","_base64ToUtf8String","date","CeWelcomeMsg","_showCeWelcomeMsg","ceWelcomeMsgHtml","ceWelcomeMsgTemplate","html","_renderWelcomeMsg","goBackButton","refuseButton","refuseButtonSettings","modalIntroduction","modalSettings","acceptButton","confirmButton","cookieName","cookieValue","masterCookieName","accordionCollapseClass","accordionHeadingClass","switchItems","cookieLevels","CookieConsent","_setListeners","_init","styles","getComputedStyle","display","visibility","setProp","close","dataset","_getDataset","_isCookieSet","_confirmSelection","_hideBackdropIfModalIsNotShown","data","_cleanCookie","toCamelCase","domain","cookieDomain","cookiePath","cookieExpirationDays","_closeModals","on","cookieLevel","cookieSettingElements","_setCookies","standard","checked","CookieEmergencyDialog","_setMasterCookieListenerFn","_cleanCookied","_setEventListener","_notCookiesBanner","_this2","ev","closest","_setMasterCookieListeners","_this3","masterCookie","_getMasterCookieElement","masterCookieDataset","_masterCookieListenerFn","selectedElement","find","click","masterCookieSubmitBtn","getElementById","CookieModal","cookieOneTimeFlag","toLowerCase","_deleteCookie","toString","cookieValueEnabled","hasExpirationDays","autocompleteSelectedData","model","caption","filtersSections","SEARCH","QUICK_SEARCH","BOOKING_GATE","dataLayersToIncludeInFilter","datalayer","filterTypes","FILTER_TYPES","PARTICIPANTS","searchFilterType","COUNTRY","REGION","CITY","DEPARTURE_DATE","isRangeAccepted","DURATION","useValue","PRICE_PER_PERSON","DEPARTURE_AIRPORT","AIRPORTS","ARRIVAL_AIRPORT","ARRIVAL_AIRPORTS","MEALPLAN","ROOM_COUNT","SKI_AREA_MINIMUM_ALTITUDE_METERS","SKI_MIN_ALTITUDE","BATHROOM_COUNT","FACILITIES","GENERAL_FACILITIES","INTERNET_FACILITIES","CHILDREN_FACILITIES","IS_WIFI_FREE","WIFI_FACILITY","RECOMMENDED","CAMPAIGNS","THEMES","LAST_MINUTE","LASTMINUTE","ACCOMMODATION_TYPE","CUSTOMERS_RATING","CUSTOMER_RATING","METERS_TO_CENTER","CENTER_DISTANCE","METERS_TO_SLOPE","SLOPE_DISTANCE","METERS_TO_SKILIFT","SKI_LIFT_DISTANCE","METERS_TO_BEACH","BEACH_DISTANCE","DISCOUNT","BEDS_IN_LIVING_ROOM","BEDS_LIVINGROOM","SKI_PASS_INCLUDED","SKI__PASS_INCLUDED","SKI_AREA_SLOPE_KMS","SKI_AREA_KMS","HAS_AVAILABILITY","FLIGHT_ONLY","STARS","COLLECTION","TRANSPORT_TYPE","TRANSPORT","AIRLINE","DESTINATION","dataLayersToIncludeInQuickFilter","quickSearchFilterType","dataLayersToIncludeInBookingGateFilter","bookingGateFilterType","MONTH","DURATIONS","ROOM_TYPE","ROOM_TYPES","formatRange","filterType","filtersSection","filterConfiguration","getFiltersConfiguration","record","records","includes","formatParticipantsData","val","formatDataFromChipFilters","models","isSelected","filterAndMapSelectedData","listOfSelected","disabled","it","filterSelectedData","filterAndMapSelectedDropdownData","selected","dropdownSimpleSelectedData","PRODUCT_DIMENSIONS","CUSTOM_DIMENSIONS","SET_SERVICE_OPERATION_TYPE","swap","CUSTOM_PARAMETERS","SERVICE_MAPPER_TYPE","ga4Mapper","extraParams","validated","description","interaction","globalSearchMapper","filters","dataObjects","dataObject","dataObjectKey","captions","searchModifiersMapper","SEARCH_PAGINATION_CHANGE","SEARCH_SORT_CHANGE","searchMapMapper","searchErrorMapper","eventAction","isError","eventLabel","impressionsSearchMapper","impressions","mapper","list","duration","featuredFilters","totalGuests","calculateOccupancy","occupancyInfo","departureDate","departureDateDetail","impressionsAccoListerMapper","accommodationId","isAccoTip","extraMap","impressionsObjects","index","_v$locations","_v$locations2","_v$locations3","category","formatLocations","countryName","regionName","cityName","position","accoStars","rating","badges","collection","userRating","entryPrice","price","averagePrice","campaignId","yieldCampaignId","campaignName","yieldCampaignName","cityId","locations","deskId","countryId","regionId","ecommerce","country","region","city","listOfLocations","numberGuests","adultsCount","babiesCount","childrenCount","clickSearchResultMapper","actionField","products","clickFilterMapper","_getEventData","_result","getEventData","eventResult","trim","_getEventName","getEventName","GTMLoadedHandler","removeEventListener","dataObjectsBuffer","dataLayer","pusher","Pusher","pushDataObject","google_tag_manager","freeze","favoritesMapper","page","getLocation","action","accoStarts","listenSearchWidgetEvents","eventTypes","SEARCH_FILTERS_APPLIED","mappedData","pushDataObjects","SEARCH_RESULTS","SEARCH_REMOVE_SINGLE_CHIP_FILTER","formattedData","SEARCH_MODIFIER_CHANGE","SEARCH_MAP_OPENED","SEARCH_ERROR","SEARCH_RESULT_CLICK","clickEvent","favoriteEvents","FAVORITE_MODAL_CLOSE","FAVORITE_MODAL_OPEN","FAVORITE_LOGIN","FAVORITE_SIGNUP","FAVORITE_ADD","FAVORITE_REMOVE","listenDateFilterWidgetEvents","DATES_FILTERS_APPLIED","listenPriceFilterWidgetEvents","PRICE_FILTERS_APPLIED","listenParticipantsFilterWidgetEvents","PARTICIPANTS_FILTER__FILTER_APPLIED","listenAccoListerWidgetEvents","targetUrl","listenDropdownMultipleEvents","listenChoiceListEvents","oldItems","listenDropdownEvents","listenMapEvents","searchMapEvents","SEARCH_MAP_CLOSED","SEARCH_MAP_REFRESH","listenDestinationMultipleEvents","validationErrorsMapper","validations","eventName","fieldNameSuffix","validation","validationErrorMapper","errorMessages","addSuffix","fieldName","fieldElement","eventValue","fieldValue","genericErrorMapper","message","field","mainstring","suffix","mapOptionPrice","pricePerParticipant","getPricePerParticipant","getQuantity","participantIds","prices","participantId","bookingChoiceListSelectionMapper","label","bookingChoiceListSwitchMapper","serviceName","choosePerPersonIsChecked","bookingComparisonTableSelectionMapper","bookingLuggageSwitchMapper","bookingParticipantsBadgeMapper","mapParticipantsBadgeSaveButton","participants","participant","birthdate","bookingParticipantsFormFieldValidationErrorMapper","isValid","errorTypes","mapExtraData","accoData","_dataObject","brand","parseFloat","transport","boardType","partyComposition","totalPrice","mandatoryPayment","campaignCode","bookingDraftMapper","checkout","step","mapCommonData","bookingStepMapper","accoObject","mapAccoProduct","bookingPurchaseMapper","eCommerceAnalytics","eCommerceCheckout","email","lastName","bookingTransactionCompleteMapper","purchase","lenght","shift","unshift","_objectSpread2","dateString","now","quantity","locationId","setHours","substr","Math","round","abs","roomType","bookingIdentifierMapper","draftId","contexts","context","INBOUND_LUGGAGE_DIRECTION","mapRemove","serviceMapperType","service","bookingData","servicesData","mapAdd","operation","isCheckout","codeSanitized","sanitizeCode","bookingService","getBookingService","bookingServiceOption","getBookingServiceOption","code","displayText","assign","rawData","getServiceOptionCategory","groupCode","mapExtraPropertiesForServices","componentId","options","datatype","split","isPricePerPerson","Number","bestValueText","equipmentSelectedIds","equipments","equipment","selectedEquipments","checkoutMapper","bookingServicesMapper","selfServiceMapper","appliesToAllParticipants","appliesToAllParticipantsEvents","bookingOption","serviceId","appliesToParticipants","assignedParticipants","oldOption","oldService","newService","mapAddAppliesToAllParticipants","isArray","operationType","luggageEvents","newInboundServiceOption","inboundServiceName","isNoneOption","every","direction","unitWeight","numberOfUnits","oldInboundServiceOption","oldInboundService","newInboundService","mapAddInboundLuggage","bookingErrorMapper","hasError","bookingErrorModalButtonMapper","bookingCarRentalEquipmentsMapper","currentSelectedOptionIds","option","carIdSelected","carItemSelectedData","idsToBePushed","previousSelectedEquipmentIds","getDifferenceBetweenEquipments","mapEquipments","bookingCarRentalCreditCardMapper","creditCardSelectedValues","mapCreditCard","bookingCarRentalButtonsMapper","carId","wBookingCarRental__carCode","mapBookingCarRentalButton","bookingCarRentalCollapseMapper","wBookingCarRental__collapseId","mapBookingCarRental","bookingCarRentalSliderButtonMapper","carListId","buttonDirection","array1","array2","getEquipmentTexts","_getCarRentalButtonDe","getCarRentalButtonDescriptionAndResult","types","UPGRADE","REMOVE","EDIT","CANCEL","CONDITIONS","bookingSkiServiceAccordionMapper","bookingSkiServiceMapper","bookingSkiServiceSwitchMapper","bookingSkiServiceCancelAndSaveButtonMapper","bookingSkiServiceFilterSportMapper","bookingSkiServiceFilterDurationMapper","bookingSkiServiceFilterMaterialCategoryMapper","bookingSkiServiceFilterSportLevelMapper","bookingSkiServiceChoiceListMapper","serviceType","serviceAvailableMapper","bookingOptionalAncillariesPopupShownMapper","bookingOptionalAncillariesPopupMapper","bookingOptionalAncillariesPopupCloseMapper","clickedMapper","bookingOptionalAncillariesPopupCloseOutsideMapper","bookingOptionalAncillariesPopupCloseEscMapper","bookingOptionalAncillariesPopupBackToAncillariesMapper","bookingOptionalAncillariesPopupContinueBookingMapper","collapseMapper","allowedEvents","bookingBoxEvents","boxState","boxStateDescription","bookingPreferencesMapper","CHOICE_LIST_VALIDATION_ERROR","listenBookingErrorEvents","ERROR_MESSAGE","listenBookingChoiceListEvents","BOOKING_ITEM_DATA_CHANGED","BOOKING_ITEM_INITIAL_VALUES","CHOOSE_PER_PERSON_SWITCH","listenBookingItemEvents","listenBookingComparisonTableEvents","listenBookingLuggageEvents","console","log","listenBookingPreferencesEvents","listenBookingParticipantsBadgeEvents","listenBookingCarRentalEvents","EQUIPMENTS_CHANGED","CREDIT_CARD_CHANGED","SLIDER_BUTTON_CLICKED","listenBookingFilterableServiceSkiEvents","BOOKING_FILTERABLE_SERVICES_CONTAINER_TOGGLE","BOOKING_FILTERABLE_SERVICES_SWITCH_TOGGLE","BOOKING_FILTERABLE_SERVICES_CANCEL_BUTTON","BOOKING_FILTERABLE_SERVICES_SAVE_BUTTON","BOOKING_FILTERABLE_SERVICES_FILTER_SPORT","BOOKING_FILTERABLE_SERVICES_FILTER_DURATION","BOOKING_FILTERABLE_SERVICES_FILTER_MATERIAL_CATEGORY","BOOKING_FILTERABLE_SERVICES_FILTER_SPORT_LEVEL","BOOKING_FILTERABLE_SERVICES_CHOICE_LIST","BOOKING_ITEM_SERVICE_AVAILABLE","listenBookingBoxEvents","listenBookingOptionalAncillariesPopup","listenBookingStepsWidgetEvents","BOOKING_ITEM_BOOKINGDRAFT_FETCHED","addContext","services","bookingIdentifier","isJustConfirmed","bookingStepsData","registerNewrelicEvent","BOOKINGDRAFT_FETCHED_AFTER_ITEM_CHANGED","DATA_CHANGED","bookingContext","getContext","servicesContext","listenCarRentalButtonEvents","_","listenCollapseEvents","OPEN","CLOSE","listenBookingParticipantsFormEvents","mapMarkerMapper","markerType","dataDescription","dataType","breadcrumbs","breadcrumb","titleText","accoCategory","mapOpenedMapper","productName","productBreadcrumbs","mapClosedMapper","mapOpenDate","isValidDateObject","mapClosedDate","timeSpentSeconds","getDatesDifference","listenProductMapEvents","ACCOMMODATION_MARKER_CLICKED","PRODUCT_MAP_OPENED","PRODUCT_MAP_CLOSED","staticContentDataMapper","accoObjects","wStaticContentDataId","wStaticContentDataName","wStaticContentDataCategory","wStaticContentDataBrand","wStaticContentDataAccoStars","wStaticContentDataLocationId","wStaticContentDataBadges","wStaticContentDataRating","wStaticContentDataAccoRegionId","wStaticContentDataAccoCountryId","detail","originList","listenFormComponentEvents","listenAccommodationStaticContentDataWidgetEvents","STATIC_CONTENT_DATA_READY","partyCompositionGroupFormater","nAdults","nChildren","nBabies","actual","adult","setFullYear","getFullYear","child","pDate","promotedPriceMapper","priceData","accoDataset","_priceData$yieldCampa","_accoDataset$dataset","_accoDataset$dataset2","_accoDataset$dataset3","nParticipants","accoId","includedServices","raw","yieldCampaignCode","promotedPrice","participantsAllocatedMapper","currencyCode","_getCurrencyCode","_mapProducts","priceCellClickedMapper","_data$priceClickedDat","descriptions","sanitizeString","priceClickedData","isPriceHighlighted","closeBasketButtonMapper","unallocatedGuests","unallocatedOccupation","total","unallocatedPartyComposition","getPartyCompositionDescription","flightChangedMapper","flightInfo","flightProvider","airlineId","arrivalAirport","arrivalAirportId","departureAirport","departureAirportId","getDateFromDateTime","departureTime","isDepartureTimeSpecified","formattedTime","priceDiff","isDefaultOption","booleanToString","busChangedMapper","busInfo","departureCity","departureCityName","arrivalCity","arrivalCityName","bookingGateSubmittedMapper","allocatedPackages","selectedValues","TransportType","totalOccupation","getDaysBeforeDeparture","getTotalOfParticipants","sanitizeDate","getRoomTypeDescription","Mealplan","originalDepartureDate","isPromotedPriceOpened","errorsThrownMapper","errorsObject","origin","errors","priceTableViewedMapper","_dataObject2","Duration","openJawModalMapper","openJawSwitchMapper","openStartBookingErrorModalMapper","_data$exception","exception","_data$campaignCode","daysBeforeDeparture","priceHighlighted","Participants","reduce","sum","pc","pkg","roomName","occupation","adults","children","babies","today","departureDateSplitted","departureDateAsDate","dateTimeAsString","dateTime","month","getMonth","day","getDate","listenAccommodationPromotedPriceWidgetEvents","PROMOTED_PRICE_DATA_LOADED","accommodationDataContext","listenTabsFilterWidgetEvents","listenBookingGateEvents","BOOKING_GATE_PARTICIPANTS_ALLOCATED","BOOKING_GATE_CLOSE_BASKET_BUTTON_CLICKED","BOOKING_GATE_FLIGHT_CHANGED","BOOKING_GATE_BUS_CHANGED","BOOKING_GATE_BOOKING_SUBMITTED","BOOKING_GATE_ERRORS_THROWN","BOOKING_GATE_PRICE_CELL_CLICKED","BOOKING_GATE_PRICE_TABLE_VIEWED","BOOKING_GATE_OPEN_JAW_MODAL_OPEN","BOOKING_GATE_OPEN_JAW_MODAL_SUBMIT","BOOKING_GATE_OPEN_JAW_MODAL_CLOSE","BOOKING_GATE_OPEN_JAW_SWITCH","BOOKING_GATE_OPEN_START_BOOKING_ERROR_MODAL","listenSubscribeFormEvents","BOOKING_GATE_SUBSCRIBE_FORM_SUCCESS","listenAutocompleteEvents","ErrorOrigins","CLIENT_SIDE_VALIDATION_ERROR","SERVER_SIDE_VALIDATION_ERROR","SERVER_SIDE_ERROR","redeemVoucherServerValidationErrorMapper","redeemVoucherErrorMapper","voucherCode","redeemVoucherServerSideErrorMapper","listenVoucherRedeemerWidgetEvents","VOUCHER_REDEEMER_SERVER_VALIDATION_ERROR","VOUCHER_REDEEMER_SERVER_ERROR","paymentMethodMapper","checkout_option","paymentMethod","status","paymentType","amountPaid","manual","isOwned","voucherSelectedMapper","checkout_selected","downPaymentCoveredMapper","listenPaymentWidgetEvents","VOUCHER_AMOUNT_ERROR","PAYMENT_METHOD_SELECTED","VOUCHER_SELECTED","ADD_VOUCHER","DOWN_PAYMENT_COVERED","listenButtonEvents","textBtn","getText","globalLiveSearchMapper","term","clickLiveSearchResultMapper","callback","mappedObj","selection","eventCallback","noResultsLiveSearchMapper","listenLiveSearchEvents","SUBMIT","isEmptyObject","INPUT_CHANGED","NO_RESULTS","reviewsListMapper","reviewTransalted","overallRating","partyComp","categoryScores","reviewsListLanguageSwitchMapper","navigator","language","userLanguage","reviewsListPaginationMapper","currentPage","previous","reviewsListPartyCompositionMapper","reviewsListSortingMapper","listenReviewsListEvents","REVIEWS_LIST_REVIEW_TRANSLATED","REVIEWS_LIST_LANGUAGE_SWITCH","REVIEWS_LIST_PAGINATION","reviewsTeaserTranslateButtonMapper","getResult","REVIEWS_TEASER_TRANSLATIONS","REVIEWS_TEASER_ORIGINAL","reviewsTeaserClosePopupMapper","reviewsTeaserOpenPopupMapper","reviewsTeaserShowMoreMapper","showMore","listenReviewsTeaserPopup","listenReviewsTeaserEvents","REVIEWS_TEASER_MODAL_OPENED","toggleMapper","dataResult","dataEvent","getToggleData","PARTICIPANT_TOGGLED","TRANSPORT_SUMMARY_TOGGLED","CONTACT_INFO_TOGGLED","paymentMapper","bookingNumber","deleteBookingMapper","getDeleteBookingEventResult","DELETE_BOOKING_MODAL_OPEN","BOOKING_DELETED","excursionsMapper","excursionTitle","eventData","getExcursionsEventData","excursionsEvents","EXCURSION_CLICKED","SEE_MORE_EXCURSIONS_CLICKED","downloadDocumentsMapper","documentName","accountSpecialLuggageMapper","getAccountSpecialLuggageEventData","accountSpecialLuggageEvents","SUBMITTED","ERROR_SUBMITTING","openFullCancellationConditionsMapper","confirmFullCancellationMapper","amount","openPartialCancellationConditionsMapper","confirmPartialCancellationMapper","participantsNum","actionPrefix","eventCategory","isSuccess","isWithCost","paymentButtonEventPressedEvent","PAYMENT_BUTTON_PRESSED","deleteBookingButtonPressedEvent","bookingDeletedEvent","listenBookingCancellationFlow","listenExcursionsEvents","excursionClickedEvent","seeMoreExcursionsClickedEvent","listenDownloadDocumentsEvents","DOWNLOADED_DOCUMENT","listenAccountSpecialLuggageEvents","openEvent","submittedEvent","errorSubmittingEvent","deleteAccountMapper","getDeleteAccountResult","DELETE_ACCOUNT_MODAL_OPEN","ACCOUNT_DELETED","bookingCardMapper","cardTitle","getBookingCardData","_descriptions","BOOKING_CARD_CLICKED","PAST_BOOKING_CARD_CLICKED","addBookingMapper","getAddBookingData","ADD_BOOKING_MODAL_OPEN","ADD_BOOKING_SUCCEEDED_MODAL_CLOSE","ADD_BOOKING_FAILED_MODAL_CLOSE","deleteAccountButtonPressedEvent","accountBookingsType","accountDeletedEvent","listenModalEvents","addBookingModalOpen","addBookingSucceededModalClose","addBookingFailedModalClose","listenCardEvents","getTitle","accountBookedServiceEditMapper","_ref3","CONDITIONS_VALIDATION_FAILED","fieldType","SAVE_CHANGES_TO_BOOKING_FAILED","API_CALL_FAILED","accountBookedServiceChangeCompleteMapper","serviceNotAvailableMapper","listenBookedServiceEditEvents","BOOKED_SERVICE_EDIT_FETCHED","BOOKED_SERVICE_EDIT_FETCHED_ITEM_CHANGED","SAVE_CHANGES_TO_BOOKING_SUCCESS","bookingDraft","ANCILLARY_DATA_CHANGED","mappedDataArray","BOOKED_SERVICE_EDIT_SERVICE_NOT_AVAILABLE","BOOKED_SERVICE_EDIT_SERVICE_AVAILABLE","refundRequestMapper","refund","refundRequestClickMapper","listenRefundRequestWidgetEvents","REFUND_REQUESTED","REFUND_REQUEST_CLICKED","questionToogleMapper","questionTitle","listenFavoriteEvents","staticData","_ref4","_ref5","_ref6","mainHeaderNavigationMapper","headerNavigationMapper","navLogoHeaderMapper","listenMainNavigationEvents","CLICK_NAVIGATION","isBackNavigation","navigationData","listenHeaderButtonEvents","ICON_MOBILE","listenHeaderLogoEvents","LOGO","personalDetailsEditMapper","labels","getEventDescription","PERSONAL_DETAILS_EDIT_UPDATED","PERSONAL_DETAILS_EDIT_EXTERNAL_FLIGHTS_FORM_OPEN","PERSONAL_DETAILS_EDIT_EXTERNAL_FLIGHTS_FORM_UPDATED","listenPersonalDetailsEditWidgetEvents","personaDetailsEditUpdatedEvent","personaDetailsEditExternalFlightsFormOpenEvent","personaDetailsEditExternalFlightsFormUpdatedEvent","rebookingOptionsMapper","preferenceQuestionnaireMapper","isComingThroughMail","questionValue","fromWhereUserComes","PREFERENCE_QUESTIONNAIRE_START","PREFERENCE_QUESTIONNAIRE_SEND","PREFERENCE_QUESTIONNAIRE_EDIT","disableTracking","comesTroughEmail","profileDataMapper","DATA_OPENED","wProfileData__collapse","DATA_EDITED","wProfileData__formEditBtn","accommodationRoomtypesMapper","getRoomtypeEventDescriptionData","roomtypeTitle","ROOMTYPES_DESCRIPTION_TOGGLED","ROOMTYPES_SELECTOR_TOGGLED","accommodationRoomtypesCarouselMapper","dataElement","getElementData","roomtype","roomTitle","hasimage","hasImage","btnLabel","ROOMTYPES_MODAL_OPENED","ROOMTYPES_MODAL_SEE_PRICES","ROOMTYPES_SEE_PRICES","listenBtnEvents","accommodationTabsMapper","buttonData","CLICKED","LOADED","accommodationTabsGoBackBtnMapper","listenTabsEvents","listenBtnGoBackEvents","accommodationFacilitiesMapper","accommodationMealplansMapper","mealplanTitle","titleOfMealplan","shownOrHidden","moreOrLess","accommodationDestinationButtonMapper","accommodationDescriptionMapper","accommodationGallerySliderMapper","ACCOMMODATION_GALLERY","ACCOMMODATION_GALLERY_OPEN","listenSliderEvents","accommodationPracticalBlockMapper","practicalBlockTitle","titleOfPracticalBlock","accommodationSkiBlockMapper","skiBlockTitle","titleOfSkiBlock","accommodationNavMapper","dataresult","listenNavigationEvents","recommendationItemClickedMapper","accoName","recommendationSliderMapper","listenRecommendedAccoListerWidgetEvents","RECOMMENDED_ACCO_LISTER_ITEM_CLICKED","sanitizeFlightBusSelectorData","_data$transportType","transportType","flightBusSelectorMapper","capitalizeString","ELEMENT_CLICKED","BUTTON_GROUP","listenFlightBusSelectorEvents","FLIGHT_SELECTOR_SIDE_DRAWER_CLOSED","sanitizedData","FLIGHT_SELECTOR_SIDE_DRAWER_OPENED","FLIGHT_SELECTOR_COLLAPSE_CLOSED","FLIGHT_SELECTOR_COLLAPSE_OPENED","FLIGHT_SELECTOR_CANCEL","FLIGHT_SELECTOR_SAVE","FLIGHT_SELECTOR_SELECT_FLIGHT","FLIGHT_SELECTOR_SWITCH_TAB","FORM_DATA_VALUES","whatsapp","post","account","permissionSettingsMapper","formData","formDataValues","formDataItem","formDataValueIncluded","formDataValue","promotionImageButtonMapper","promo_url","mainMenuMapper","isFinalLink","itemsTrace","listenMainMenuEvents","MAIN_MENU_ITEM_CLICKED","loginStatusMapper","logged_in","listenLoginStatusEvents","listenAccountMenuEvents","_eventDetails","eventDetails","_ref2$","pushEvent","TypeChecker","MAIN","MOBILE","SKI_SERVICE","getEventFunction","typeChecker","isPayment","paymentsListeners","isRefund","refundsListeners","isLoginForm","loginFormListeners","isPermissionSettings","permissionSettingsListeners","sharedListeners","isQuickSearchFilter","quickSearchListeners","isSearchFilter","searchListeners","isBookingGateFilter","bookingGateListeners","isReviewsListComponent","reviewsListListeners","isBookingStepsComponent","bookingListeners","isBookingStepsPreferences","isLiveSearchComponent","liveSearchListeners","isAccountBookingComponent","accountBookingListeners","isFaqTopQuestionsComponent","faqListeners","isProfileData","profileDataListeners","isAccommodationRoomtypesComponent","accommodationRoomtypesListeners","isAccommodationFacilitiesComponent","accommodationFacilitiesListeners","isAccommodationMealplansComponent","accommodationMealplansListeners","isAccommodationPracticalBlockComponent","accommodationPracticalBlockListeners","isAccommodationSkiBlockComponent","accommodationSkiBlockListeners","isAccommodationDescription","accommodationDescriptionListeners","isBookingCarRental","isReviewsTeaserComponent","reviewsTeaserListeners","isMainNavigation","isMobileNavigation","navigationListeners","isAccommodationNav","accommodationNavListeners","isAccountBookingsComponent","accountBookingsListeners","isRebookingOptions","rebookingOptionsListeners","isPreferenceQuestionnaire","preferenceQuestionnaireListeners","isHeaderNavigation","isBookingOptionalAncillariesPopup","isBookingErrorModal","isPromotionImage","promotionImageListeners","isAccommodationDestination","accommodationDestinationListeners","isAccommodationRecommendation","accommodationRecommendationListeners","isAccommodationTabGoBackBtn","accommodationTabsListeners","favoriteListeners","isAccommodationTabsComponent","isReviewsTeaserPopup","isAccommodationGalleryComponent","accommodationGalleryListeners","vouchersListeners","productsListeners","isAccommodationContent","accountBookedServiceEditListeners","isSkiService","isAccommodationPromotedPrice","personalDetailsEditListeners","flightBusSelectorListeners","mainMenuListeners","loginStatusListeners","accountMenuListeners","DataLayer","_bind","components","widgets","elements","_bindQueuedElements","_bindEvent","listenEvents","searchFilter","bookingSteps","CHOICE_LIST","staticContent","ACCOMMODATION","quickSearchFilter","liveSearch","AUTOCOMPLETE","bookingGateFilter","accountBooking","accountBookings","headerNavigation","TOP","accommodationGallery","accommodationRoomtypes","accommodationTabs","ACCOMMODATION_TAB_SELECTION","ACCOMMODATION_TAB_GO_BACK_DESCRIPTION","accommodationFacilities","ACCOMMODATION_FACILITIES_COLLAPSE","accommodationMealplans","MEALPLANS_DESCRIPTION_TOGGLED","accommodationDestination","ACCOMMODATION_DESTINATION_BUTTON","accommodationDescription","ACCOMMODATION_DESCRIPTION_COLLAPSE","accommodationPracticalBlock","PRACTICAL_BLOCK_DESCRIPTION_TOGGLED","accommodationSkiBlock","SKI_BLOCK_DESCRIPTION_TOGGLED","accommodationRecommendation","ACCOMMODATION_RECOMMENDATION","ACCOMMODATION_RECOMMENDATION_CTABTN","ACCOMMODATION_RECOMMENDATION_SLIDER","accommodationNav","ACCOMMODATION_NAV_LINK","bookingCarRental","SHOW_CARS","reviewsList","PARTY_COMPOSITION_FILTER","SORTING_FILTER","reviewsTeaser","REVIEWS_TEASER","REVIEWS_TEASER_POPUP","REVIEWS_TEASER_SHOW_MORE","promotionImage","BUTTON","refundType","bookingErrorModal","bookingPreferences","datesFilter","navigationNavText","durationInDaysText","durationInNightsText"],"sourceRoot":""}