{"version":3,"file":"js/1868.e341ee54.js","mappings":"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","sources":["webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-bundle/data-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-bundle/booking-bundle.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-bundle/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/w-booking-car-rental-add-extra-cars.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/w-booking-car-rental-checkout-advice.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/w-booking-car-rental-cars-list.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/w-booking-car-rental.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/w-booking-car-rental-edit-details.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/w-booking-car-rental-credit-card.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/config.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/data-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/credit-card/credit-card.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-car-rental/w-booking-car-rental-conditions.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-choice-list/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-choice-list/enums.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-choice-list/data-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-choice-list/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-choice-list/w-booking-choice-list.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-choice-list/w-booking-applies-to-all-participants.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-choice-list/w-booking-conditions.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-comparison-table/w-booking-comparison-table.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-comparison-table/data-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-comparison-table/main.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/event-types.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__number-stepper-filter.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__button-group-filter.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__choice-list-filter.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__tab-filter.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__dropdown-filter.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/calendar-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/time-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__quantity-number-stepper.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/constants.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__date-time-filter.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__participants-choice-list.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__time-dropdown.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__options.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/w-booking-filterable-services__warning-message.template.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/service-helper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/enums.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/data-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/operationType-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/participantIds-mapper.js","webpack://@sunwebgroup/design-system/./shared/modules/widgets/booking-filterable-services/main.js"],"sourcesContent":["import PriceFormatter, { roundOff } from '../../../js/helpers/price-formatter'\nimport { isEmptyObject } from '../../../js/helpers/object'\n\nexport default class BookingBundleDataMapper {\n /**\n * Maps API response data to widget data\n *\n * @typedef {Object} BookingBundleData\n *\n * @property {Object} [apiResponseData] - Api response data\n */\n mapWidgetData (apiResponseData, configurations) {\n const widgetData = (!isEmptyObject(apiResponseData) && !isEmptyObject(configurations))\n ? {\n title: (configurations.bundleTexts && configurations.bundleTexts?.bundleTitle) || '',\n titleSelected: (configurations.bundleTexts && configurations.bundleTexts?.bundleSelectedTitle) || '',\n selectButtonText: (configurations.bundleTexts && configurations.bundleTexts?.selectBundleButtonText) || '',\n removeButtonText: (configurations.bundleTexts && configurations.bundleTexts?.removeBundleButtonText) || '',\n bundle: this._mapBundle(apiResponseData, configurations),\n image: configurations.bundleImage ? this._mapBundleImage(configurations.bundleImage) : {}\n }\n : null\n return widgetData\n }\n\n _mapBundle (data, configurations) {\n const option = (data.options && data.options[0]) || null\n const pricePerParticipant = data.isPricePerPerson || false\n\n if (!option) { return null }\n\n return {\n selected: option.isSelected,\n code: option.code,\n price: this._mapPriceComponentData(option, pricePerParticipant, configurations.priceConfiguration),\n usps: this._mapUspInfo(configurations.bundleUsps)\n }\n }\n\n _mapPriceComponentData (option, pricePerParticipant, priceConfiguration) {\n if (!option) { return }\n\n const { finalPriceFormatted, oldPriceFormatted, discountFormatted } = this._mapBundlePrices(option, option.appliesToParticipants, pricePerParticipant, priceConfiguration)\n\n return {\n value: finalPriceFormatted,\n priceConfig: {\n size: '',\n legend: '',\n saleText: discountFormatted || undefined,\n oldPrice: oldPriceFormatted || undefined,\n publicPrice: undefined,\n currency: (priceConfiguration && priceConfiguration.currencySymbol) || '',\n currencyPosition: (priceConfiguration && priceConfiguration.isCurrencyAtStart) ? 'before' : 'after'\n }\n }\n }\n\n _mapBundleImage (bundleImage) {\n return {\n sync: false,\n resolve: 'intersect',\n placeholderSrc: `${bundleImage.placeholderImageUrl}`,\n resolvedSrc: `${bundleImage.imageUrl}`,\n ratio: '16:9',\n dynamicRatios: [\n {\n ratio: '1:1',\n bp: 'sml'\n }\n ]\n }\n }\n\n _mapUspInfo (usps) {\n const widgetUspInfo = {\n variant: '',\n items: usps ? usps.map(usp => this._mapUsp(usp)) : []\n }\n return widgetUspInfo\n }\n\n _mapUsp (apiUsp) {\n const widgetUsp = {\n text: apiUsp.text,\n icon: apiUsp.icon\n }\n\n return widgetUsp\n }\n\n _mapBundlePrices (option, participantIds, isPricePerPerson, priceConfiguration = null) {\n if (!option) { return {} }\n let priceToBeShown = 0\n let oldPrice = 0\n let discount = 0\n\n if (isPricePerPerson && option.priceDetails && option.priceDetails.length > 0) {\n option.priceDetails.forEach(optionPrice => {\n const includedIds = participantIds.filter(id => optionPrice.participantIds.includes(id))\n if (includedIds.length > 0) {\n priceToBeShown += includedIds.length * optionPrice.price\n oldPrice += optionPrice.oldPrice ? includedIds.length * optionPrice.oldPrice : 0\n discount += optionPrice.discount ? includedIds.length * optionPrice.discount : 0\n }\n })\n } else if (isPricePerPerson && (!option.priceDetails || option.priceDetails.length === 0)) {\n priceToBeShown = participantIds.length >= 1 ? (participantIds.length * option.price) : option.price\n oldPrice = participantIds.length >= 1 ? (participantIds.length * option.oldPrice) : option.oldPrice\n discount = participantIds.length >= 1 ? (participantIds.length * option.discount) : option.discount\n } else {\n priceToBeShown = option.price || 0\n oldPrice = option.oldPrice || 0\n discount = option.discount || 0\n }\n\n const finalPriceFormatted = priceConfiguration ? this._formatPrice(priceToBeShown, priceConfiguration) : priceToBeShown\n const oldPriceFormatted = oldPrice > 0 ? (priceConfiguration ? this._formatPrice(oldPrice, priceConfiguration) : oldPrice) : undefined\n const discountFormatted = discount < 0 ? (priceConfiguration ? PriceFormatter.toFormattedText(discount, priceConfiguration) : discount) : undefined\n\n return { finalPriceFormatted, oldPriceFormatted, discountFormatted }\n }\n\n _formatPrice (price, priceConfig) {\n let priceFormatted = price\n\n if (priceConfig) {\n priceFormatted = priceConfig.numberOfDecimals || priceConfig.numberOfDecimals === 0 ? roundOff(priceFormatted, priceConfig.numberOfDecimals) : price.toString()\n priceFormatted = priceConfig.decimalSeparator ? priceFormatted.replace('.', priceConfig.decimalSeparator) : priceFormatted\n priceFormatted = price || price === 0\n ? priceFormatted\n : ''\n }\n\n return priceFormatted\n }\n}\n","import { TitleTemplate, defaultTitleData } from '../../components/title/c-title.template'\nimport { BtnTemplate, defaultButtonData } from '../../components/btn/c-btn.template'\nimport { ImgTemplate, defaultImgData } from '../../components/img/c-img.template'\nimport { BulletListTemplate } from '../../components/bullet-list/c-bullet-list.template'\nimport { PriceTemplate, defaultPriceData } from '../../components/price/c-price.template'\n/**\n * The BookingBasketData contains all data needed to hydrate a BookingBasket view\n *\n * @typedef {Object} BookingBundleData\n *\n */\n\nexport const defaultBookingBundleData = {\n\n}\n\nexport const BookingBundleTemplate = (d) => {\n d = { ...defaultBookingBundleData, ...d }\n return `
\n ${d.image\n ? ImgTemplate({ ...defaultImgData, ...d.image, extraClasses: 'w-booking-bundle__img' })\n : ''\n }\n
\n ${d.bundle.selected && d.titleSelected\n ? `
\n \n ${TitleTemplate({\n ...defaultTitleData,\n ...{\n text: d.titleSelected,\n tag: 'h3',\n size: 'medium',\n extraClasses: 'w-booking-bundle__title'\n }\n })\n }\n\n
`\n\n : ''}\n\n ${!d.bundle.selected && d.title\n ? TitleTemplate({\n ...defaultTitleData,\n ...{\n text: d.title,\n tag: 'h3',\n size: 'medium',\n extraClasses: 'w-booking-bundle__title'\n }\n })\n : ''}\n \n
\n
\n `\n}\n","import BookingItem from '../booking-item/main'\nimport { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { elementFromString, flush } from '../../../js/document/html-helper'\nimport Component from '../../../js/core/component/component'\nimport BookingBundleDataMapper from './data-mapper'\nimport { BookingBundleTemplate } from './booking-bundle.template'\nimport Img from '../../components/img/main'\nimport { bookingItemEvents } from '../../../js/document/event-types'\nimport { cleanUpSpecialCharacters, toCamelCase } from '../../../js/helpers/string'\nimport registeredEvents from '../../../js/helpers/registered-events'\n\nconst widgetApi = 'w-booking-bundle'\n\nconst widgetQueries = {\n configurationElement: `[data-${widgetApi}__configuration]`,\n buttonItem: '[data-w-booking-bundle__btn]'\n}\n\nconst attr = {\n trackAttr: 'data-track',\n bundleButton: 'data-w-booking-bundle__btn',\n optionCode: 'data-w-booking-bundle__code'\n}\n\nconst apis = {\n buttonApi: 'c-btn'\n}\n\nconst mapPatchOptions = {\n remove: 'Remove',\n add: 'Add'\n}\n\nexport const configOptions = {\n bundleTexts: 'bundleTexts',\n bundleImage: 'bundleImage',\n bundleUsps: 'bundleUsps'\n}\n\nexport default class BookingBundle extends BookingItem {\n /**\n *\n * @param {HTMLElement} element - The HTML content\n */\n constructor (element) {\n super(element)\n this.element = element\n this.dataMapper = new BookingBundleDataMapper()\n const filterConfigurationElement = this.element.querySelector(widgetQueries.configurationElement)\n this.configurations = this._readOptionsFromConfigurations(filterConfigurationElement)\n this.serviceName = null\n\n registeredEvents.registerWidgetEvents(widgetApi, this.events, {\n ...this.element.hasAttribute(attr.trackAttr) && { track: this.element.attributes[attr.trackAttr].value }\n })\n }\n\n /**\n *\n * @param {Object} data - Contains the data needed to render the widget body\n */\n async handleFetched (data) {\n this.data = data.response\n this._updateWidgetData()\n return super.handleFetched(data.response)\n }\n\n _updateWidgetData () {\n let widgetData\n\n this.apiData = this.data.services && this.data.services.find(service => service.componentId === this.componentId)\n\n if (this.apiData) {\n this.serviceName = cleanUpSpecialCharacters(this.apiData.aName) || ''\n this.apiData = { ...this.apiData, ...{ participants: this.data.participants, rooms: this.data.rooms } }\n widgetData = this.dataMapper.mapWidgetData(this.apiData, this.configurations)\n }\n\n if (widgetData) {\n super.showComponent()\n this._init(widgetData)\n } else {\n super.hideComponent()\n }\n }\n\n getServiceName () {\n return this.serviceName || toCamelCase(widgetApi) || ''\n }\n\n _init (data) {\n const renderedHtml = BookingBundleTemplate(data)\n const newContent = elementFromString(renderedHtml)\n Img.createInstancesOnDocument(newContent)\n Component.initDocumentComponentsFromAPI(newContent)\n\n this._render(newContent)\n this._attachEvents()\n }\n\n _render (el) {\n flush(this.bodyElement)\n this.bodyElement.appendChild(el)\n }\n\n _attachEvents () {\n const buttonElements = [...this.element.querySelectorAll(widgetQueries.buttonItem)]\n this.buttonApis = buttonElements.map(buttonElement => buttonElement[apis.buttonApi])\n .filter(api => api)\n\n this.buttonApis.forEach(buttonApi => {\n buttonApi.events.on('clickButton', (element) => this._clickedBundle(element))\n })\n }\n\n _clickedBundle (btn) {\n const bundleCode = btn.getAttribute(attr.optionCode)\n const eventArgs = {\n method: this._method,\n url: this._url,\n body: this._mapBody(bundleCode),\n componentId: this.componentId\n }\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _mapBody (bundleCode) {\n const bundleClicked = this.apiData && this.apiData.options.find(option => option.code === bundleCode)\n\n return {\n operationType: bundleClicked.isSelected ? mapPatchOptions.remove : mapPatchOptions.add,\n newService: {\n code: bundleClicked.code,\n participants: bundleClicked.appliesToParticipants,\n startDate: bundleClicked.startDate || '',\n endDate: bundleClicked.endDate || ''\n },\n oldService: null\n }\n }\n\n _readOptionsFromConfigurations (el) {\n if (el) {\n const innerHtml = el.innerHTML\n const configuration = JSON.parse(innerHtml)\n const priceConfigurations = super.readPriceConfigFromConfigurations(configuration)\n\n return {\n ...priceConfigurations,\n bundleTexts: configuration[configOptions.bundleTexts],\n bundleImage: configuration[configOptions.bundleImage],\n bundleUsps: configuration[configOptions.bundleUsps]\n }\n }\n }\n}\n\nregisterWidget(BookingBundle, widgetApi)\n","/**\n * List of events used by booking car rental v2 widget\n *\n */\nexport const bookingCarRental = {\n RENDER_EDIT_DETAILS_TEMPLATE: 'BookingCarRental.RenderEditDetailsTemplate',\n EQUIPMENTS_CHANGED: 'BookingCarRental.EquipmentsChanged',\n CREDIT_CARD_CHANGED: 'BookingCarRental.CreditCardChanged',\n SLIDER_BUTTON_CLICKED: 'BookingCarRental.SliderButtonClicked'\n}\n","import { TitleTemplate } from '../../components/title/c-title.template'\nimport { BtnTemplate } from '../../components/btn/c-btn.template'\nimport { getTokenClass } from '../../../js/helpers/tokens'\n\n// Import tokens\nconst tokensShared = require('./data/w-booking-car-rental__tokens.json')['w-booking-car-rental']\n\nconst tokensBrand = (() => {\n try {\n return require(`../../../../brands/${WEBPACK_BRAND}/modules/widgets/booking-car-rental/data/w-booking-car-rental__tokens.json`)['w-booking-car-rental'] // eslint-disable-line\n } catch (error) {\n return {}\n }\n})()\nconst tokens = { ...tokensShared, ...tokensBrand }\n\nexport const BookingCarRentalAddExtraCarsTemplate = (d) => {\n return `${d\n ? `
\n
\n
\n ${TitleTemplate({\n tag: 'h4',\n text: d.addExtraCarTitle,\n size: getTokenClass('add-extra-car-title-size', 'default', tokens) || 'small',\n extraClasses: 'w-booking-car-rental__add-extra-cars-title'\n })} \n ${d.addExtraCarDescription\n ? `
\n ${d.addExtraCarDescription}
`\n : ''}\n ${d.showAddExtraCarsBlock && d.addExtraCarEnabled && d.addExtraCarButtonText\n ? `
\n ${BtnTemplate({\n text: d.addExtraCarButtonText,\n variant: 'secondary',\n icon: d.addExtraCarButtonIcon,\n jsApi: true,\n attributes: { 'data-w-booking-car-rental__add-extra-car-button': '' }\n })}\n
`\n : ''}\n
\n
`\n : ''}`\n}\n","export const CarRentalCheckoutAdviceTemplate = (d) => {\n return `${d && d !== ''\n ? `
\n
\n \n
\n
\n ${d}\n
\n
`\n : ''}`\n}\n","import { CollapseTemplate } from '../../components/collapse/c-collapse.template'\nimport { BtnTemplate } from '../../components/btn/c-btn.template'\nimport { ChoiceListTemplate, defaultChoiceListData } from '../../components/choice-list/c-choice-list.template'\nimport { CarItemTemplate } from '../../components/car-item/c-car-item.template'\nimport { PriceTemplate } from '../../components/price/c-price.template'\nimport { CarRentalCheckoutAdviceTemplate } from './w-booking-car-rental-checkout-advice.template'\nimport { TitleTemplate } from '../../components/title/c-title.template'\n\nexport const BookingCarRentalCarsListTemplate = (d, indexItem) => {\n const result = `\n
1 ? 'w-booking-car-rental__separator ' : ''}\"\n data-w-booking-car-rental__container-list-id='${d.carListInformation.listId}'\n data-w-booking-car-rental__car-list-id='${indexItem}'>\n
\n ${d.collapseListInformation.title\n ? TitleTemplate({\n tag: 'h4',\n text: `${d.collapseListInformation.title} ${indexItem || ''}`,\n size: 'small'\n })\n : ''}\n ${\n CollapseTemplate({\n id: d.collapseListInformation.collapseId,\n maxItems: d.isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow ? d.collapseListInformation.maxItems + 1 : d.collapseListInformation.maxItems,\n childrenWrapper: d.showCarsInOneRow ? '.w-booking-car-rental__cars-list' : '.c-choice-list__options',\n extraClasses: 'w-booking-car-rental__items',\n attributes: { 'data-w-booking-car-rental__collapse': '', 'data-w-booking-car-rental__collapse-id': d.collapseListInformation.collapseId },\n track: `${d.carRentalTrack}.ShowCars`,\n html: `${bookingCarRentalTemplate(d)}`\n })\n }\n
\n ${(d.choiceListInformation.items.length > d.collapseListInformation.maxItems && d.collapseListInformation.showCollapseTriggersSection && !d.showCarsInOneRow)\n ? `
\n ${BtnTemplate({\n text: d.collapseButtonTexts.viewMoreButton,\n variant: 'default',\n icon: 'chevron-down',\n iconPosition: 'left',\n extraClasses: 'w-booking-car-rental__trigger',\n attributes: {\n 'data-c-collapse__id': d.collapseListInformation.collapseId,\n 'data-c-collapse__action': 'open'\n }\n })}\n ${BtnTemplate({\n text: d.collapseButtonTexts.viewLessButton,\n variant: 'default',\n icon: 'chevron-up',\n iconPosition: 'left',\n extraClasses: 'w-booking-car-rental__trigger',\n attributes: {\n 'data-c-collapse__id': d.collapseListInformation.collapseId,\n 'data-c-collapse__action': 'close'\n }\n })}\n
\n
`\n : ''}\n `\n return result\n}\n\nconst bookingCarRentalTemplate = (d) => {\n return d.showCarsInOneRow\n ? ShowCarsInOneRowTemplate(d)\n : bookingCarRentalCarsTemplate(d)\n}\n\nconst bookingCarRentalCarsTemplate = (d) => {\n const newChoiceListData = {\n ...d.choiceListInformation,\n items: d.choiceListInformation.items.map(option => ({ ...option, ...{ extraRichContent: extraRichContentForCarTemplate(option, d) } }))\n }\n return `${ChoiceListTemplate({ ...defaultChoiceListData, ...newChoiceListData })}`\n}\n\nconst extraRichContentForCarTemplate = (option, d) => {\n if (!option) return ''\n return `\n
\n
\n ${CarItemTemplate({\n name: option.car.name,\n image: option.car.image,\n type: option.car.type,\n labelText: option.car.label,\n labelExtraClasses: 'w-booking-car-rental__item--label-on-request',\n features: option.car.features,\n extraClasses: `w-booking-car-rental__car-information-item ${(d.showCarsInOneRow && !d.showSelectedCarsWithoutSlider) ? 'w-booking-car-rental__car-information-item--vertical-card' : ''}`,\n extraDetailsContent: OptionalEquipmentsTemplate(option, d.optionalEquipmentText)\n })}\n
\n ${PriceTemplate({\n ...option.car.price,\n ...{\n size: 'medium',\n oldPrice: '',\n salePrice: '',\n extraClasses: 'w-booking-car-rental__item-price'\n }\n })}\n
\n\n ${option.checked\n ? `
\n
\n ${CarRentalDriverTemplate(option, d.driverLabel)}\n ${SelectedEquipmentsTemplate(option, d.selectedEquipmentText)}\n
\n ${option.isCarEditable ? CarRentalCheckoutAdviceTemplate(d.checkoutAdvice) : ''}\n
\n ${\n (!option.isIncluded && option.isCancellable)\n ? BtnTemplate({\n text: d.collapseButtonTexts.removeCarButton || '',\n variant: 'flat-neutral',\n icon: 'bin',\n jsApi: true,\n track: `${d.carRentalTrack}.Remove`,\n extraClasses: 'w-booking-car-rental__selected-button',\n attributes: { 'data-w-booking-car-rental__selected-remove': '', 'data-w-booking-car-rental__car-code': option.value }\n })\n : ''\n }\n ${\n option.isCarEditable\n ? BtnTemplate({\n text: d.collapseButtonTexts.editCarButton || '',\n variant: 'flat-neutral',\n icon: 'pencil',\n jsApi: true,\n track: `${d.carRentalTrack}.Edit`,\n extraClasses: 'w-booking-car-rental__selected-button',\n attributes: { 'data-w-booking-car-rental__selected-edit': '', 'data-w-booking-car-rental__car-code': option.value }\n })\n : ''\n }\n ${\n option.canBeUpgraded && !d.isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow\n ? BtnTemplate({\n text: d.collapseButtonTexts.upgradeCarButton || '',\n variant: 'flat-neutral',\n icon: 'upgrade',\n jsApi: true,\n extraClasses: 'w-booking-car-rental__selected-button',\n track: `${d.carRentalTrack}.Upgrade`,\n attributes: {\n 'data-w-booking-car-rental__selected-upgrade': '',\n 'data-w-booking-car-rental__car-code': option.value,\n 'data-w-booking-car-rental__car-driver': (option.driver && option.driver.participantId) || '',\n 'data-c-collapse__id': d.collapseListInformation.collapseId,\n 'data-c-collapse__action': 'open'\n }\n })\n : ''\n }\n
\n
`\n : ''\n }\n\n `\n}\n\nconst CarRentalDriverTemplate = (item, label) => {\n return `
\n ${label}:\n ${item.driver.name}\n ${item.driver.formattedBirthdate\n ? `(${item.driver.formattedBirthdate})`\n : ''}\n
`\n}\n\nconst OptionalEquipmentsTemplate = (item, optionalEquipmentText = '') => {\n return item.car.hasEquipments && item.car.equipments.length > 0 && !item.selectedEquipments\n ? `
\n ${optionalEquipmentText ? `${optionalEquipmentText}:` : ''}\n ${item.car.equipments.map(equipment => equipment.text).join(', ')}\n
`\n : ''\n}\n\nconst SelectedEquipmentsTemplate = (item, selectedEquipmentText = '') => {\n return item.checked && item.selectedEquipments && item.selectedEquipments.length > 0\n ? `
\n ${selectedEquipmentText ? `${selectedEquipmentText}:` : ''} ${item.selectedEquipments.map(equipment => equipment.text).join(', ')}
`\n : ''\n}\n\nconst ShowCarsInOneRowTemplate = (d) => {\n return `\n
\n ${d.choiceListSelectedCarInformation.items && d.choiceListSelectedCarInformation.items.length > 0 ? bookingCarRentalCarsTemplate({ ...d, showSelectedCarsWithoutSlider: true, choiceListInformation: d.choiceListSelectedCarInformation }) : ''}\n ${bookingCarRentalCarsTemplate(d)}\n
\n
\n `\n}\n","import { BulletListTemplate } from '../../components/bullet-list/c-bullet-list.template'\nimport { BookingMessageTemplate } from '../booking-message/w-booking-message.template'\nimport { BookingCarRentalAddExtraCarsTemplate } from './w-booking-car-rental-add-extra-cars.template'\nimport { BookingCarRentalCarsListTemplate } from './w-booking-car-rental-cars-list.template'\nimport { BookingCarRentalConditionsTemplate } from './w-booking-car-rental-conditions.template'\n\n/**\n * The BookingCarRentalData contains all data needed to hydrate a BookingCarRental view\n *\n * @typedef {Object} BookingCarRentalData\n *\n * @property {String} collapseId - the identifier for the collapsible\n * @property {PriceData} price - The price data to configure the general style of the prices (see c-price component for more info)\n * @property {String} onRequestLabel - The label for the available on request text\n * @property {String} viewMoreButton - The text for the \"see more\" button\n * @property {String} viewLessButton - The text for the \"see less\" button\n * @property {UspData[]} usps - The usps to be shown in the header of the component\n * @property {String} CarData.code - Code of the car\n * @property {String} CarData.name - Name of the car\n * @property {String} CarData.type - Type of the car, typically the class name (examples: small, economy, compact, suv, ...)\n * @property {String} CarData.image - The image url of the car rental\n * @property {String} CarData.participants - The participants of the car\n * @property {String} CarData.onRequestLabel - The text to show when the car is \"on request\"\n * @property {PriceData} CarData.price - The price of the car\n * @property {CharacteristicData[]} CarData.characteristics - The list of characteristics of the car rental (like number of doors, number of suitcases, air conditioned, gear transmission, ... )\n * @property {String} CharacteristicData.icon - The icon of the characteristic\n * @property {String} CharacteristicData.text - The text to show for that characteristic\n * @property {CarAvailableData[]} items - The items of the available cars (CarAvailableData inherits/contains CarData)\n * @property {isCarEditable} boolean - Indicates if the car that we have is the unique car and also selected\n * @property {AddExtraCarsInformationData[]} CarData.addExtraCarsInformation - The list of characteristics of the car rental (like number of doors, number of suitcases, air conditioned, gear transmission, ... )\n */\n\nexport const BookingCarRentalTemplate = (d) => {\n return `
\n ${d.usps\n ? `
\n ${BulletListTemplate(d.usps)}\n
`\n : ''}\n ${MessagesTemplate(d)}\n ${d.carsLists && d.carsLists.length > 0\n ? `${\n d.carsLists.map((list, index) => {\n const data = {\n ...list,\n collapseButtonTexts: d.collapseButtonTexts,\n driverLabel: d.driverLabel,\n optionalEquipmentText: d.optionalEquipmentText,\n selectedEquipmentText: d.selectedEquipmentText,\n checkoutAdvice: d.checkoutAdvice,\n carRentalTrack: d.carRentalTrack\n }\n return BookingCarRentalCarsListTemplate(data, index + 1)\n }).join('')\n }\n ${\n d.conditions\n ? `
\n ${d.conditions ? BookingCarRentalConditionsTemplate(d) : ''}\n
`\n : ''\n }`\n : ''\n }\n \n ${d.addExtraCarsInformation && d.addExtraCarsInformation.showAddExtraCarsBlock && d.addExtraCarsInformation.addExtraCarEnabled\n ? BookingCarRentalAddExtraCarsTemplate(d.addExtraCarsInformation)\n : ''} \n
\n `\n}\n\nconst MessagesTemplate = (d) => {\n return d.messages\n ? `
\n ${BookingMessageTemplate(d.messages)}\n
`\n : ''\n}\n","import { CollapseTemplate } from '../../components/collapse/c-collapse.template'\nimport { BtnTemplate } from '../../components/btn/c-btn.template'\nimport { BoxTemplate } from '../../components/box/c-box.template'\nimport { ChoiceListTemplate, defaultChoiceListData } from '../../components/choice-list/c-choice-list.template'\nimport { DropdownTemplate } from '../../components/dropdown/c-dropdown.template'\nimport { DateSelectorTemplate } from '../../components/date-selector/c-date-selector.template'\nimport { CarRentalCheckoutAdviceTemplate } from './w-booking-car-rental-checkout-advice.template'\nimport { RequiredCreditCardTemplate } from './w-booking-car-rental-credit-card.template'\n\n/**\n * The BookingCarRentalData contains all data needed to hydrate a BookingCarRental view\n *\n * @typedef {Object} BookingCarRentalData\n * @property {String} collapseId - the identifier for the collapsible\n * @property {Object} DriverDropdownData - The data for the dropdown selector\n * @property {String} DriverDropdownData.label - The label for the driver dropdown\n * @property {String} DriverDropdownData.placeholder - The placeholder for the driver dropdown\n * @property {String} DriverDropdownData.messageRequired - The required message for the driver dropdown\n * @property {Object} DriverDropdownBirthdateData - The data for the birthdate selector\n * @property {String} DriverDropdownBirthdateData.label - The label for the birthday selector\n * @property {Bool} DriverDropdownBirthdateData.disabled - The disabled state for the birthday selector\n * @property {String} DriverDropdownBirthdateData.departureDate - The departure date for the birthday selector\n * @property {String} DriverDropdownBirthdateData.minDateVisible - The min date visible for the birthday selector\n * @property {String/String/String} DriverDropdownBirthdateData.dateSelectorPlaceholders - The placeholders for the birthday selector\n * @property {String} DriverDropdownBirthdateData.messageRequired - The required message for the birthday selector\n * @property {String} DriverDropdownBirthdateData.messageInvalid - The invalid message for the birthday selector\n * @property {String} DriverDropdownBirthdateData.messageOutOfRange - The out of range message for the birthday selector\n * @property {Object} ageWarning - The age warning when date is out of range\n * @property {Bool} ageWarning.enabled - The age warning boolean when date is out of range\n * @property {Object} conditions - The conditions to be shown\n * @property {String} cancelButton - The cancel button text\n * @property {String} saveButton - The save button text\n * @property {String} addButton - The add button text\n * @property {Bool} optionChecked - Boolean to know if the option is checked\n * @property {String} equipmentsLabel - The label text for the equipments field\n * @property {String} equipmentsIntroText - The label text for the equipments intro text\n * @property {String} checkoutAdvice - The warning text to be shown in the selector box when selecting a car rental\n *\n */\n\nexport const BookingCarRentalEditDetailsTemplate = (d) => {\n return `${CollapseTemplate({\n id: d.collapseId,\n extraClasses: 'w-booking-car-rental__edit-details',\n attributes: { 'data-w-booking-car-rental-edit-details__collapse': '' },\n html: `${BookingCarRentalEditTemplate(d)}`\n })}`\n}\n\nconst BookingCarRentalEditTemplate = (d) => {\n return `\n
\n ${BoxTemplate({\n variant: 'default',\n extraClasses: 'w-booking-car-rental__edit-details__box',\n html: `${CarRentalCheckoutTemplate(d)}`\n })}\n `\n}\n\nconst CarRentalCheckoutTemplate = (d) => {\n return `\n
\n
\n
\n ${DropdownTemplate({\n id: 'w-booking-car-rental__rent-driver',\n label: d.driver.label,\n placeholder: d.driver.placeholder,\n hasClearButton: false,\n required: true,\n messageRequired: d.driver.messageRequired ? d.driver.messageRequired : '',\n extraClasses: 'o-layout__item u-1/2@sm',\n attributes: { 'data-w-booking-car-rental__item-field-driver': '' }\n })}\n ${DateSelectorTemplate({\n required: true,\n disabled: d.birthdate.disabled,\n mainLabel: d.birthdate.label,\n id: 'w-booking-car-rental__rent-birthdate',\n extraClasses: 'w-booking-car-rental__checkout-field--date-selector o-layout__item u-1/2@sm',\n attributes: { 'data-w-booking-car-rental__item-field-birthdate': '', 'data-departure-date': d.birthdate.departureDate },\n maxDate: d.birthdate.minDateVisible,\n blockModifier: true,\n dayPlaceholder: d.birthdate.dateSelectorPlaceholders.day,\n monthPlaceholder: d.birthdate.dateSelectorPlaceholders.month,\n yearPlaceholder: d.birthdate.dateSelectorPlaceholders.year,\n messageRequired: d.birthdate.messageRequired ? d.birthdate.messageRequired : '',\n messageInvalid: d.birthdate.messageInvalid ? d.birthdate.messageInvalid : '',\n messageOutOfBounds: d.birthdate.messageOutOfRange ? d.birthdate.messageOutOfRange : ''\n })}\n
\n ${d.creditCard.checkboxEnabled ? RequiredCreditCardTemplate(d) : ''}\n ${d.ageWarning && d.ageWarning.enabled\n ? BoxTemplate({\n variant: 'flat',\n html: '',\n extraClasses: 'w-booking-car-rental__item-ageWarning cs-state-error cs-state-error--light',\n attributes: { 'data-w-booking-car-rental__item-ageWarning': '', hidden: '' }\n })\n : ''}\n ${CarRentalCheckoutAdviceTemplate(d.checkoutAdvice)}\n ${EquipmentsTemplate(d)}\n
\n\n
\n ${d.conditions\n ? BtnTemplate({\n variant: 'flat-neutral',\n extraClasses: 'm-link w-booking-car-rental-edit__conditions-btn',\n track: `${d.carRentalTrack}.Conditions`,\n attributes: {\n 'data-w-booking-car-rental__car-code': d.carSelectedCode\n },\n ...d.conditions\n })\n : ''\n }\n
\n ${BtnTemplate({\n text: d.cancelButton,\n variant: 'flat-neutral',\n jsApi: true,\n track: `${d.carRentalTrack}.Cancel`,\n extraClasses: 'w-booking-car-rental-edit__cancel-btn',\n attributes: {\n 'data-w-booking-car-rental-edit-details__cancel-button': '',\n 'data-w-booking-car-rental__car-code': d.carSelectedCode\n }\n })}\n ${BtnTemplate({\n text: d.optionChecked ? d.saveButton : d.addButton,\n variant: 'trust',\n jsApi: true,\n disabled: true,\n extraClasses: 'w-booking-car-rental__save-btn',\n attributes: {\n 'data-w-booking-car-rental-edit-details__confirm-button': '',\n 'data-w-booking-car-rental__car-code': d.carSelectedCode\n}\n })}\n
\n
\n \n
\n `\n}\n\nconst EquipmentsTemplate = (d) => {\n return `\n
\n ${d.equipmentsLabel\n ? `
\n
${d.equipmentsLabel}
\n ${d.equipmentsIntroText ? `
${d.equipmentsIntroText}
` : ''}\n
`\n : ''}\n ${ChoiceListTemplate({\n ...defaultChoiceListData,\n ...{\n id: 'w-booking-car-rental__equipments',\n label: '',\n variant: 'boxed',\n method: 'multiple',\n extraClasses: 'w-booking-car-rental__checkout-field w-booking-car-rental__equipments',\n attributes: { 'data-w-booking-car-rental__item-field-equipments': '' }\n }\n })}\n
\n `\n}\n","import { ChoiceListTemplate, defaultChoiceListData } from '../../components/choice-list/c-choice-list.template'\n\nexport const RequiredCreditCardTemplate = (d) => {\n return `\n ${ChoiceListTemplate({\n ...defaultChoiceListData,\n ...{\n id: 'w-booking-car-rental__required-credit-card',\n method: 'multiple',\n required: true,\n minlength: '1',\n items: [{ text: d.creditCard.checkboxTexts.checkboxLabel, name: 'creditCard', value: 'creditCard', required: true, size: 'small', checked: d.creditCard.checkboxChecked }],\n extraClasses: 'w-booking-car-rental__checkout-field w-booking-car-rental__required-credit-card is-hidden',\n attributes: { 'data-w-booking-car-rental__item-field-credit-card': '', 'data-message-required': d.creditCard.checkboxTexts.checkboxRequiredMessage }\n }\n })}\n `\n}\n","export const widgetApi = 'w-booking-car-rental'\n\nexport const widgetQueries = {\n configurationElement: `[data-${widgetApi}__configuration]`,\n choiceLists: `[data-${widgetApi}__choice-list]`,\n collapseElement: `[data-${widgetApi}__collapse]`,\n editCollapseElement: `[data-${widgetApi}-edit-details__collapse]`,\n editCarButton: `[data-${widgetApi}__selected-edit]`,\n removeCarButton: `[data-${widgetApi}__selected-remove]`,\n upgradeCarButton: `[data-${widgetApi}__selected-upgrade]`,\n itemEditConfirmButton: `[data-${widgetApi}-edit-details__confirm-button]`,\n itemEditCancelButton: `[data-${widgetApi}-edit-details__cancel-button]`,\n formItem: `[data-${widgetApi}__checkout-form]`,\n formDriverDropdown: `[data-${widgetApi}__item-field-driver]`,\n formBirthdateDateSelector: `[data-${widgetApi}__item-field-birthdate]`,\n formEquipmentsSelector: `[data-${widgetApi}__item-field-equipments]`,\n formEquipmentsContainer: `[data-${widgetApi}__container-equipments]`,\n ageWarningSelector: `[data-${widgetApi}__item-ageWarning]`,\n selectedInfoSection: `[data-${widgetApi}__selected-info-section]`,\n optionItem: `[data-${widgetApi}__option]`,\n formItemErrorSelector: '.has-error',\n conditionsElement: `[data-${widgetApi}__conditions-container]`,\n conditionsElementChoiceList: `[data-${widgetApi}__choice-list--conditions]`,\n addExtraCarButton: `[data-${widgetApi}__add-extra-car-button]`,\n extraCarListContainer: `[data-${widgetApi}__extra-car-list]`,\n arrowEditFormLeftPosition: `[data-${widgetApi}__arrow-edit-details__box]`,\n sliderButtonsDirection: '[data-js-component=\"c-slider\"] [data-c-slider__buttons--direction]'\n}\n\nexport const componentsApis = {\n buttonApi: 'c-btn',\n collapseApi: 'c-collapse',\n dropdownApi: 'c-dropdown',\n dateSelectorApi: 'c-date-selector',\n choiceListApi: 'c-choice-list'\n}\n\nexport const attr = {\n departureDate: 'departureDate',\n location: 'wBookingCarRental__location',\n ageWarning: {\n age: 'ageWarningAge',\n text: 'ageWarningText'\n },\n itemCode: `data-${widgetApi}__item-code`,\n itemParticipants: `data-${widgetApi}__item-participants`,\n conditionsUrl: 'conditionsUrl',\n carCode: `data-${widgetApi}__car-code`,\n carDriver: `data-${widgetApi}__car-driver`,\n containerListId: `data-${widgetApi}__container-list-id`,\n trackAttr: 'data-track',\n sliderButtonDirectionAttr: 'data-c-slider__buttons--direction',\n containerCarListId: ' data-w-booking-car-rental__container-list-id'\n}\n\nexport const defaults = {\n maxNumberOfCarsToBeShown: 3,\n minimumAge: 18,\n showEditTemplateForIncludedCars: true,\n maxNumberOfEquipmentsToBeSelected: undefined,\n arrowEditFormLeftPosition: 0\n}\n\nexport const configOptions = {\n buttonTexts: 'buttonTexts',\n carTexts: 'carTexts',\n checkoutTexts: 'checkoutTexts',\n ageWarningConfiguration: 'ageWarningConfiguration',\n conditionGroup: 'conditionGroup',\n editDriverBirthdateEditable: 'editDriverBirthdateEditable',\n addExtraCarsConfiguration: 'addExtraCarsConfiguration',\n creditCardConfiguration: 'creditCardConfiguration',\n upgradeCarFeatureEnabled: 'upgradeCarFeatureEnabled',\n showCarsInOneRow: 'showCarsInOneRow',\n isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow: 'isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow'\n}\n\nexport const carRentalOperations = {\n add: 'Add',\n patch: 'Patch',\n swap: 'Swap',\n remove: 'Remove'\n}\n\nexport const carRentalMessageTypes = {\n info: 'info',\n warning: 'warning'\n}\n\nexport const config = {\n scroll: { block: 'start', behavior: 'smooth' }\n}\n","import { isValidDateString, formatDate } from '../../../js/helpers/dates'\nimport { isEmptyObject } from '../../../js/helpers/object'\nimport { carRentalMessageTypes } from './config'\nimport PriceFormatter from '../../../js/helpers/price-formatter'\n\nexport default class BookingCarRentalDataMapper {\n mapService (apiService, configurations, options) {\n const widgetService = (!isEmptyObject(apiService) && !isEmptyObject(configurations))\n ? {\n ...this._mapDefaultTexts(apiService, configurations),\n carsLists: this._mapCarsLists(apiService, configurations, options),\n editDetailsInformation: this._mapEditDetailsInformation(apiService, configurations, options),\n isCarSelectedRequired: apiService.includedCarOutOfStock || false,\n messages: this._mapCarRentalMessages(apiService, configurations),\n participants: apiService.participants ? apiService.participants.map(participant => this._mapParticipant(participant)) : [],\n usps: apiService.usps ? this._mapUspInfo(apiService.usps) : null\n }\n : null\n const selectedOptionsLength = (apiService.options && apiService.options.filter(o => o.isSelected).length) || 0\n const addExtraCarsConfiguration = this._mapAddExtraCarsConfiguration(configurations, selectedOptionsLength, apiService.serviceBookingLimit)\n\n return widgetService ? { ...widgetService, ...addExtraCarsConfiguration } : null\n }\n\n _mapDefaultTexts (apiService, configurations) {\n return {\n collapseButtonTexts: {\n viewMoreButton: (configurations.buttonTexts && configurations.buttonTexts.showMoreItemsButtonText) || '',\n viewLessButton: (configurations.buttonTexts && configurations.buttonTexts.showLessItemsButtonText) || '',\n editCarButton: (configurations.buttonTexts && configurations.buttonTexts.editButtonText) || '',\n removeCarButton: (configurations.buttonTexts && configurations.buttonTexts.removeButtonText) || '',\n upgradeCarButton: (configurations.buttonTexts && configurations.buttonTexts.upgradeButtonText) || ''\n },\n driverLabel: (configurations.checkoutTexts && configurations.checkoutTexts.driverLabelText) || '',\n optionalEquipmentText: (configurations.carTexts && configurations.carTexts.optionalEquipmentText) || '',\n checkoutAdvice: (configurations.checkoutTexts && configurations.checkoutTexts.checkoutAdviceText) || '',\n selectedEquipmentText: (configurations.carTexts && configurations.carTexts.selectedEquipmentText) || '',\n conditions: configurations && configurations.conditionGroup ? this._mapConditions(configurations.conditionGroup, apiService) : null\n }\n }\n\n mapDefaultChoiceListCar (apiService, configurations, options) {\n const bookingParticipantIds = apiService.participants && apiService.participants.map(participant => participant.id)\n const availableCars = this._availableCars(apiService.options)\n const filteredCars = this._filterCarsBasedOnDisabledParticipants(bookingParticipantIds, availableCars)\n const notSelectedCars = filteredCars.filter(car => !car.isSelected)\n\n const defaultChoiceListCar = (!isEmptyObject(apiService) && !isEmptyObject(configurations))\n ? {\n ...this._mapChoiceListCars({ apiService, bookingParticipantIds, notSelectedCars, configurations, options }),\n ...this._mapDefaultTexts(apiService, configurations)\n }\n : null\n return defaultChoiceListCar\n }\n\n _mapAddExtraCarsConfiguration (configurations, selectedOptionsLength, serviceBookingLimit = 1) {\n if (!configurations.addExtraCarsConfiguration) { return }\n return {\n addExtraCarsInformation: {\n ...configurations.addExtraCarsConfiguration,\n addExtraCarDescription: configurations.addExtraCarsConfiguration.addExtraCarDescription && configurations.addExtraCarsConfiguration.addExtraCarDescription.replace('{book_cars_limit}', (serviceBookingLimit >= 1 ? serviceBookingLimit : '')),\n showAddExtraCarsBlock: configurations.addExtraCarsConfiguration.addExtraCarEnabled && selectedOptionsLength > 0 && serviceBookingLimit > 0 && serviceBookingLimit > selectedOptionsLength\n }\n }\n }\n\n _mapNumberOfOptionsToBeShown (serviceOptions = [], maxNumberOfCarsToBeShown) {\n const serviceOptionsSelectedLength = serviceOptions ? serviceOptions.length : 0\n return serviceOptionsSelectedLength > 0 ? serviceOptionsSelectedLength : maxNumberOfCarsToBeShown\n }\n\n _mapCarsLists (apiService, configurations, options) {\n const bookingParticipantIds = apiService.participants && apiService.participants.map(participant => participant.id)\n const availableCars = this._availableCars(apiService.options)\n const filteredCars = this._filterCarsBasedOnDisabledParticipants(bookingParticipantIds, availableCars)\n const selectedCars = filteredCars.filter(car => car.isSelected)\n const notSelectedCars = filteredCars.filter(car => !car.isSelected)\n\n const carsLists = [...Array(selectedCars.length || 1).fill().map((x, index) => {\n const currentSelectedCars = selectedCars && selectedCars.length > 0 ? [...Array(selectedCars.shift())] : []\n const selectedCarPrice = currentSelectedCars.length > 0 && currentSelectedCars[0] ? currentSelectedCars[0].price : 0\n return this._mapChoiceListCars({ apiService, bookingParticipantIds, currentSelectedCars, notSelectedCars, configurations, index, options, selectedCarPrice })\n })]\n\n return carsLists\n }\n\n _getCarListId (componentId, index) {\n return `${componentId}-list-id-${this._generatePartialId(index)}`\n }\n\n _generatePartialId (num) {\n return (num !== '') ? Number(num + 1) : 'new'\n }\n\n _mapChoiceListCars (data) {\n const { apiService, currentSelectedCars = [], configurations, index = '', options } = data\n return {\n carListInformation: {\n listId: this._getCarListId(apiService.componentId, index)\n },\n ...configurations.showCarsInOneRow && { showCarsInOneRow: configurations.showCarsInOneRow },\n ...configurations.isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow && { isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow: configurations.isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow },\n collapseListInformation: {\n collapseId: `${apiService.componentId}-collapse-list-${this._generatePartialId(index)}`,\n ...configurations.checkoutTexts && configurations.checkoutTexts.collapseListInformationTitle && { title: (configurations?.checkoutTexts?.collapseListInformationTitle) || '' },\n maxItems: this._mapNumberOfOptionsToBeShown(currentSelectedCars, options.maxNumberOfCarsToBeShown),\n showCollapseTriggersSection: (currentSelectedCars.length === 0) || (currentSelectedCars.length > 0 && !configurations.upgradeCarFeatureEnabled)\n },\n choiceListSelectedCarInformation: {\n method: 'single',\n variant: 'boxed',\n showInSlider: false, // important this one to be false for visualization\n hasRichOptions: true,\n id: apiService.componentId + `_choice-list-selected-cars-${this._generatePartialId(index)}`,\n attributes: {\n 'data-message-required': configurations.checkoutTexts ? configurations.checkoutTexts.requiredMessageWhenIncludedCarsAreNotAvailable : '',\n 'data-w-booking-car-rental__choice-list': ''\n },\n items: currentSelectedCars.length > 0 ? this._mapAvailableSelectedCars(data) : [],\n required: apiService.includedCarOutOfStock\n },\n choiceListInformation: {\n method: 'single',\n variant: 'boxed',\n showInSlider: configurations.showCarsInOneRow,\n hasRichOptions: true,\n id: apiService.componentId + `_choice-list-cars-${this._generatePartialId(index)}`,\n attributes: {\n 'data-message-required': configurations.checkoutTexts ? configurations.checkoutTexts.requiredMessageWhenIncludedCarsAreNotAvailable : '',\n 'data-w-booking-car-rental__choice-list': ''\n },\n items: apiService.options.length > 0 ? this._mapAvailableCars(data) : [],\n required: apiService.includedCarOutOfStock\n }\n }\n }\n\n _mapAvailableSelectedCars (data) {\n const { apiService, bookingParticipantIds, currentSelectedCars = [], configurations, selectedCarPrice = 0 } = data\n const anyCarSelected = (currentSelectedCars.length > 0)\n if (!currentSelectedCars.length > 0) return\n\n return [...currentSelectedCars].map(availableCar => this._mapAvailableCar(availableCar, apiService, configurations, bookingParticipantIds, selectedCarPrice, anyCarSelected))\n }\n\n _mapAvailableCars (data) {\n const { apiService, bookingParticipantIds, currentSelectedCars = [], notSelectedCars, configurations, selectedCarPrice = 0 } = data\n const anyCarSelected = (currentSelectedCars.length > 0)\n let filteredNotSelectedCars = notSelectedCars\n let carsToBeMapped = []\n if (configurations && !configurations.showCarsInOneRow) {\n if (currentSelectedCars && currentSelectedCars.length > 0) {\n currentSelectedCars.forEach(selectedCar => {\n const notSelectedCar = notSelectedCars.find(car => car.carClass === selectedCar?.carClass)\n if (notSelectedCar) {\n filteredNotSelectedCars = notSelectedCars.filter(car => car.id !== notSelectedCar.id)\n }\n })\n }\n carsToBeMapped = [...currentSelectedCars, ...filteredNotSelectedCars]\n } else {\n carsToBeMapped = [...filteredNotSelectedCars]\n }\n\n return carsToBeMapped.map(availableCar => this._mapAvailableCar(availableCar, apiService, configurations, bookingParticipantIds, selectedCarPrice, anyCarSelected))\n }\n\n _filterCarsBasedOnDisabledParticipants (bookingParticipantIds, cars) {\n return cars.filter(car => this._checkIfCarIsBookable(car, bookingParticipantIds))\n }\n\n _checkIfCarIsEditable (car, participantIds = []) {\n let carsIsEditable = true\n if (car.disabledParticipants && car.disabledParticipants.length > 0) {\n carsIsEditable = car.isSelected && !this._checkIfDisabledParticipantsMatch(car.disabledParticipants, participantIds)\n }\n const isSelfEditable = Object.prototype.hasOwnProperty.call(car, 'isSelfEditable') ? car.isSelfEditable : true\n if (!isSelfEditable) carsIsEditable = false\n return carsIsEditable\n }\n\n _checkIfCarCanBeUpgraded (apiAvailableCar, configurations) {\n if (!configurations.upgradeCarFeatureEnabled) { return false }\n return Object.prototype.hasOwnProperty.call(apiAvailableCar, 'canBeUpgraded') ? apiAvailableCar.canBeUpgraded : true\n }\n\n _checkIfCarIsBookable (car, participantIds) {\n let isBookable = true\n\n if (!car.isSelected && car.disabledParticipants && car.disabledParticipants.length > 0) {\n isBookable = !this._checkIfDisabledParticipantsMatch(car.disabledParticipants, participantIds)\n }\n\n return isBookable\n }\n\n _checkIfDisabledParticipantsMatch (participantsFromOption, participantIds) {\n return Array.isArray(participantsFromOption) &&\n Array.isArray(participantIds) &&\n participantsFromOption.length === participantIds.length &&\n participantsFromOption.every((val, index) => val === participantIds[index])\n }\n\n _availableCars (options) {\n const uniqueAvailableCars = options.reduce((acc, current) => {\n const x = acc.find(item => item.id === current.id)\n if (!x) {\n return acc.concat([current])\n } else {\n return acc\n }\n }, [])\n return uniqueAvailableCars\n }\n\n _mapCar (apiCar, configurations, selectedCarPrice, anyCarSelected) {\n const widgetCar = {\n code: apiCar.code,\n name: apiCar.carModel || apiCar.displayText,\n type: apiCar.carClass,\n image: apiCar.imagePath ? apiCar.imagePath.large : '',\n participants: apiCar.participants,\n label: apiCar.availableOnRequest ? configurations.carTexts.onRequestLabelText : '',\n price: this._mapCarPrice(apiCar, configurations, selectedCarPrice, anyCarSelected),\n features: this._mapCarFeatures(apiCar, configurations),\n locationCode: apiCar.locationCode,\n conditions: apiCar.conditionsUrl ? this._mapCarConditions(apiCar.conditionsUrl, configurations) : null\n }\n return widgetCar\n }\n\n _mapCarConditions (conditionsUrl, configurations) {\n if (!conditionsUrl) { return }\n\n return {\n icon: 'file',\n text: configurations.carTexts.carConditionsLabelText || '',\n link: {\n href: conditionsUrl,\n target: '_blank',\n title: configurations.carTexts.carConditionsLabelText || ''\n }\n }\n }\n\n _mapCarPrice (apiCar, configurations, selectedCarPrice, anyCarSelected) {\n const priceSettings = this._mapPriceSettings(configurations)\n const carPrice = (apiCar.isSelected && !apiCar.isIncluded) ? apiCar.price : this._getPrice(apiCar, configurations, selectedCarPrice)\n const carPriceFormatted = PriceFormatter.toFormattedText(Math.abs(carPrice), {\n numberOfDecimals: configurations?.priceConfiguration?.numberOfDecimals,\n decimalSeparator: configurations?.priceConfiguration?.decimalSeparator\n })\n\n return {\n ...priceSettings,\n ...{\n value: carPriceFormatted,\n legend: apiCar.location,\n icon: 'airplane',\n publicPrice: apiCar.pricePerDay,\n pricePrefix: anyCarSelected && !apiCar.isSelected ? this._getPricePrefix(apiCar, carPrice) : ''\n }\n }\n }\n\n _getPrice (apiCar, configurations, selectedCarPrice) {\n if (!configurations.priceConfiguration) {\n return (apiCar.isIncluded && apiCar.price > 0) ? `+${apiCar.priceAmountValue}` : apiCar.priceAmountValue\n }\n\n return this._getOptionAdditionalPrice(apiCar, selectedCarPrice)\n }\n\n _getOptionAdditionalPrice (apiOption, selectedOptionPrice) {\n const optionPrice = apiOption.price || 0\n const optionCalculatedPrice = selectedOptionPrice ? optionPrice - selectedOptionPrice : optionPrice\n return optionCalculatedPrice\n }\n\n _getPricePrefix (apiCar, carPrice) {\n const optionPriceSymbol = carPrice > 0 ? '+' : carPrice < 0 ? '-' : ''\n return this._checkIfOptionServiceTypeIsPerParticipant(apiCar) ? optionPriceSymbol : '-'\n }\n\n _checkIfOptionServiceTypeIsPerParticipant (apiOption = null) {\n return apiOption && !apiOption.occupancy\n }\n\n _mapCarFeatures (apiCar, configurations) {\n return {\n passengers: `${apiCar.passengers}`,\n luggage: `${apiCar.luggage}`,\n doors: `${apiCar.doors}`,\n airConditioner: apiCar.hasAirconditioned\n ? configurations.carTexts.characteristicAirYesText\n : configurations.carTexts.characteristicAirNoText,\n gearShift: apiCar.hasAutomaticGear\n ? configurations.carTexts.characteristicGearAutomaticText\n : configurations.carTexts.characteristicGearManualText\n }\n }\n\n _mapCarAsOption (apiOption, isRequired = false) {\n const option = {\n id: apiOption.code,\n name: apiOption.code,\n value: apiOption.code,\n checked: apiOption.isSelected,\n isSelected: apiOption.isSelected,\n required: isRequired,\n extraClassesForRichOption: 'w-booking-car-rental__option',\n extraClasses: `${apiOption.isSelected ? 'w-booking-car-rental__option_radio_hide' : ''}`,\n attributes: {\n 'data-w-booking-car-rental__option': '',\n 'data-w-booking-car-rental__location': apiOption.location,\n 'data-w-booking-car-rental__location-code': apiOption.locationCode,\n 'data-w-booking-car-rental__item-code': apiOption.code,\n 'data-w-booking-car-rental__item-type': apiOption.carClass,\n 'data-w-booking-car-rental__item-participants': apiOption.participants\n }\n }\n return option\n }\n\n _mapAvailableCar (apiAvailableCar, apiService, configurations, bookingParticipantIds, selectedCarPrice, anyCarSelected) {\n const widgetOption = this._mapCarAsOption(apiAvailableCar, apiService.includedCarOutOfStock)\n const widgetBaseCar = this._mapCar(apiAvailableCar, configurations, selectedCarPrice, anyCarSelected)\n const widgetAvailableCar = {\n hasEquipments: !!(apiAvailableCar.equipments && apiAvailableCar.equipments.length > 0),\n equipments: this._mapEquipments(apiAvailableCar)\n }\n const carIsEditable = this._checkIfCarIsEditable(apiAvailableCar, bookingParticipantIds)\n const extraAvailableCarsToBeUpgraded = apiService.options.filter(option => !option.isSelected && option.code !== apiAvailableCar.code)\n const carCanBeUpgraded = extraAvailableCarsToBeUpgraded.length > 1 ? this._checkIfCarCanBeUpgraded(apiAvailableCar, configurations) : false\n const widgetSelectedCar = apiAvailableCar.isSelected ? this._mapSelectedCar(apiAvailableCar, apiService.participants, carIsEditable, carCanBeUpgraded) : {}\n\n return { ...widgetOption, ...widgetSelectedCar, car: { ...widgetAvailableCar, ...widgetBaseCar } }\n }\n\n _mapSelectedCar (apiAvailableCar, participants, carIsEditable, carCanBeUpgraded) {\n const driver = apiAvailableCar.driverId ? participants.find(participant => participant.id === apiAvailableCar.driverId) : participants[0]\n\n return {\n isIncluded: apiAvailableCar.isIncluded,\n driver: {\n participantId: driver.id,\n name: driver.name || driver.alternativeName,\n birthdate: driver.birthdate,\n formattedBirthdate: driver.birthdate,\n hasCheckedCreditCard: !!((driver.id && driver.birthdate))\n },\n selectedEquipments: apiAvailableCar.selectedEquipments || null,\n isCarEditable: carIsEditable,\n canBeUpgraded: carCanBeUpgraded,\n isCancellable: Object.prototype.hasOwnProperty.call(apiAvailableCar, 'isCancellable') ? apiAvailableCar.isCancellable : true\n }\n }\n\n _mapParticipant (apiParticipant) {\n const widgetParticipant = {\n id: apiParticipant.id.toString(),\n name: apiParticipant.name || apiParticipant.alternativeName,\n birthdate: isValidDateString(apiParticipant.birthdate) ? apiParticipant.birthdate : '',\n ageCategory: apiParticipant.ageCategory\n }\n return widgetParticipant\n }\n\n _mapEditDetailsInformation (apiService, configurations, options) {\n return {\n collapseId: `${apiService.componentId}-edit-details`,\n cancelButton: configurations.buttonTexts ? configurations.buttonTexts.cancelButtonText : '',\n saveButton: configurations.buttonTexts ? configurations.buttonTexts.saveButtonText : '',\n addButton: configurations.buttonTexts ? (configurations.buttonTexts.addButtonText || configurations.buttonTexts.saveButtonText) : '',\n origin: {\n label: configurations.checkoutTexts ? configurations.checkoutTexts.originLabelText : ''\n },\n driver: {\n label: configurations.checkoutTexts ? configurations.checkoutTexts.driverLabelText : '',\n placeholder: configurations.checkoutTexts ? configurations.checkoutTexts.driverPlaceholderText : '',\n messageRequired: configurations.checkoutTexts ? configurations.checkoutTexts.driverMessageRequiredText : ''\n },\n birthdate: {\n label: configurations.checkoutTexts ? configurations.checkoutTexts.driverBirthdateLabelText : '',\n disabled: !configurations.editDriverBirthdateEditable,\n departureDate: apiService.departureDate,\n minDateVisible: this._calculateMinDate(apiService.departureDate, options.minimumAge),\n dateSelectorPlaceholders: {\n day: configurations.checkoutTexts ? configurations.checkoutTexts.driverBirthdateSelectorPlaceholderDay : '',\n month: configurations.checkoutTexts ? configurations.checkoutTexts.driverBirthdateSelectorPlaceholderMonth : '',\n year: configurations.checkoutTexts ? configurations.checkoutTexts.driverBirthdateSelectorPlaceholderYear : ''\n },\n messageRequired: configurations.checkoutTexts ? configurations.checkoutTexts.driverBirthdateSelectorMessageRequired : '',\n messageInvalid: configurations.checkoutTexts ? configurations.checkoutTexts.driverBirthdateSelectorMessageInvalid : '',\n messageOutOfRange: configurations.checkoutTexts ? configurations.checkoutTexts.driverBirthdateSelectorMessageOutOfRange : ''\n },\n checkoutAdvice: configurations.checkoutTexts ? configurations.checkoutTexts.checkoutAdviceText : '',\n equipmentsLabel: configurations.checkoutTexts ? configurations.checkoutTexts.equipmentsLabelText : '',\n equipmentsIntroText: configurations.checkoutTexts && configurations.checkoutTexts.equipmentsIntroText ? this._mapEquipmentsIntroText(configurations.checkoutTexts.equipmentsIntroText, options.maxNumberOfEquipmentsToBeSelected) : '',\n ageWarning: this._mapAgeWarningFromConfig(configurations)\n }\n }\n\n _mapEquipmentsIntroText (equipmentsIntroText, maxNumberOfEquipments = undefined) {\n let equipmentsIntroTextReplaced = ''\n if (maxNumberOfEquipments !== undefined && equipmentsIntroText) {\n const maxNumberOfEquipmentsToBeReplaced = maxNumberOfEquipments >= 0 ? maxNumberOfEquipments : ''\n equipmentsIntroTextReplaced = equipmentsIntroText && equipmentsIntroText.replace('{max_equipments}', maxNumberOfEquipmentsToBeReplaced).replace('{MAX_EQUIPMENTS}', maxNumberOfEquipmentsToBeReplaced)\n }\n\n return equipmentsIntroTextReplaced\n }\n\n _mapEquipments (apiAvailableCar) {\n let widgetEquipments = []\n if (apiAvailableCar.equipments) {\n const selectedEquipmentIds = apiAvailableCar.selectedEquipments && apiAvailableCar.selectedEquipments.map(selectedEquipment => selectedEquipment.id)\n widgetEquipments = apiAvailableCar.equipments.map(equipment => this._mapEquipment(equipment, selectedEquipmentIds))\n }\n return widgetEquipments\n }\n\n _mapEquipment (apiEquipment, selectedEquipmentIds) {\n const equipmentSelected = selectedEquipmentIds ? selectedEquipmentIds.includes(apiEquipment.id) : false\n const widgetEquipment = {\n id: apiEquipment.id,\n text: apiEquipment.text,\n selected: equipmentSelected\n }\n return widgetEquipment\n }\n\n _mapPriceSettings (configurations) {\n const currencyPosition = configurations.priceConfiguration && configurations.priceConfiguration.isCurrencyAtStart ? 'before' : 'after'\n const currencySymbol = configurations.priceConfiguration && configurations.priceConfiguration.currencySymbol ? configurations.priceConfiguration.currencySymbol : ''\n\n return {\n size: '',\n currencyPosition,\n currency: currencySymbol\n }\n }\n\n _mapAgeWarningFromConfig (configurations) {\n if (!configurations.ageWarningConfiguration) { return }\n return {\n age: Number(configurations.ageWarningConfiguration.ageWarningAge),\n text: configurations.ageWarningConfiguration.ageWarningText,\n enabled: configurations.ageWarningConfiguration.ageWarningAge && configurations.ageWarningConfiguration.ageWarningText\n }\n }\n\n _calculateMinDate (departureDate, minimumAgeToDrive) {\n const minDate = departureDate === '' ? new Date() : new Date(departureDate)\n minimumAgeToDrive ? minDate.setFullYear(minDate.getFullYear() - minimumAgeToDrive) : minDate.getFullYear()\n return formatDate(minDate)\n }\n\n _mapUspInfo (apiUsps) {\n return { items: apiUsps.map(usp => this._mapUsp(usp)) }\n }\n\n _mapUsp (apiUsp) {\n const hasLink = apiUsp.link && apiUsp.link !== null && apiUsp.link !== ''\n let widgetUsp = {\n text: apiUsp.text\n }\n\n widgetUsp = hasLink ? { ...widgetUsp, isIconHidden: true, link: { href: apiUsp.link, target: '_blank', title: apiUsp.linkAlternateText } } : widgetUsp\n\n return widgetUsp\n }\n\n _mapCarRentalMessages (apiService, configurations) {\n let widgetMessage = {}\n\n if (configurations.checkoutTexts && (apiService.isOpenJawPackage || apiService.includedCarOutOfStock || apiService.includedCarPriceChanged)) {\n const openJawPackageMessage = this._mapOpenJawPackageMessage(apiService, configurations)\n const includedCarsNoAvailabilityMessage = this._mapCarRentalMessage(apiService.includedCarOutOfStock, configurations.checkoutTexts.includedCarsNoAvailabilityMessageText, configurations.checkoutTexts.includedCarsNoAvailabilityMessageTitle) || null\n const priceIncreaseWarningMessage = this._mapCarRentalMessage(apiService.includedCarPriceChanged, configurations.checkoutTexts.includedCarPriceChangedMessageText, configurations.checkoutTexts.includedCarPriceChangedMessageTitle) || null\n const messagesToBeShown = []\n\n if (openJawPackageMessage) { messagesToBeShown.push(...openJawPackageMessage) }\n if (includedCarsNoAvailabilityMessage) { messagesToBeShown.push(includedCarsNoAvailabilityMessage) }\n if (priceIncreaseWarningMessage) { messagesToBeShown.push(priceIncreaseWarningMessage) }\n\n widgetMessage = { messages: messagesToBeShown }\n }\n return (!isEmptyObject(widgetMessage)) ? widgetMessage : null\n }\n\n _mapOpenJawPackageMessage (apiService, configurations) {\n if (!apiService.isOpenJawPackage) { return null }\n const priceConfig = configurations && configurations.priceConfiguration ? configurations.priceConfiguration : apiService.priceConfiguration\n\n const selectedCars = apiService.options.filter(o => o.isSelected)\n let openJawMessages = []\n selectedCars.forEach(car => {\n const openJawAmountFormatted = Object.prototype.hasOwnProperty.call(car, 'openJawFeeAmount') ? PriceFormatter.toFormattedText(car.openJawFeeAmount, priceConfig) : ''\n if (Object.prototype.hasOwnProperty.call(car, 'openJawFeeAmount') && car.openJawFeeAmount === 0) { return }\n let textReplaced = (configurations.checkoutTexts.openJawFeeMessageText && Object.prototype.hasOwnProperty.call(car, 'openJawFeeAmount')) ? configurations.checkoutTexts.openJawFeeMessageText.replace('{open_jaw_fee_amount}', openJawAmountFormatted) : (configurations.checkoutTexts.openJawFeeMessageText || '')\n if (selectedCars.length > 1) { textReplaced = `${car.carModel}: ${textReplaced}` }\n const message = this._mapCarRentalMessage(apiService.isOpenJawPackage, textReplaced, configurations.checkoutTexts.openJawFeeMessageTitle, carRentalMessageTypes.info) || null\n openJawMessages = [...openJawMessages, message].filter(m => m !== null)\n })\n\n return openJawMessages\n }\n\n _mapCarRentalMessage (isMessageNeededToBeShown, text = '', title = '', type = carRentalMessageTypes.warning) {\n let message = {}\n if (isMessageNeededToBeShown && text) {\n message = {\n title,\n texts: [text],\n type\n }\n }\n if (!isEmptyObject(message)) {\n return message\n }\n }\n\n _mapConditions (conditionGroup, apiService) {\n const isRequired = conditionGroup.isRequired && apiService.options.some(option => option.isSelected)\n const conditions = {\n choiceListInfo: {\n method: conditionGroup.method.toLowerCase(),\n id: apiService.componentId + '_conditions',\n name: apiService.componentId + '_conditions',\n items: conditionGroup.options.map(option => ({ ...option, required: (isRequired && option.isRequired), checked: apiService.areConditionsAccepted })),\n required: isRequired,\n disabled: false,\n attributes: {\n 'data-message-required': conditionGroup.messages.map(message => message).join(','),\n 'data-w-booking-car-rental__choice-list--conditions': ''\n }\n }\n }\n return conditions\n }\n}\n","\nimport { widgetApi, componentsApis } from '../config'\nimport webStorage from '../../../../js/document/web-storage'\n\nconst widgetQueries = {\n creditCardChoiceList: `[data-${widgetApi}__item-field-credit-card]`,\n identifierSearchName: 'sid'\n}\n\nconst defaultTexts = {\n checkboxLabel: 'The main driver is in possession of a credit card',\n checkboxRequiredMessage: 'The main driver need to be in possession of a credit card'\n}\n\nexport default class CreditCard {\n constructor (element) {\n this.element = element\n this.checkboxRequired = false\n this.texts = defaultTexts\n\n this.showAndValidateCreditCardCheckbox = this._showAndValidateCreditCardCheckbox.bind(this)\n this.setCreditCardCheckboxTexts = this._setCreditCardCheckboxTexts.bind(this)\n }\n\n _showAndValidateCreditCardCheckbox () {\n this.checkboxRequired = true\n this.showCreditCardCheckBox()\n }\n\n _setCreditCardCheckboxTexts (label = null, requiredMessage = null) {\n if (!label || !requiredMessage) { return }\n this.texts = { ...this.texts, checkboxLabel: label, checkboxRequiredMessage: requiredMessage }\n }\n\n attachCreditCardEvents (api) {\n api.events.on('changeOptions', () => {\n api.enableErrors()\n api.validate()\n })\n }\n\n creditCardCheckboxValidation (api) {\n let validation = true\n if (api) {\n api.enableErrors()\n validation = api.validate().isValid\n\n if (!validation) {\n api.enableErrors()\n api.validate()\n }\n }\n\n return validation\n }\n\n toggleCreditCardCheckbox (api, creditCardChecked, driverId) {\n if (!this.checkboxRequired) { return }\n if (api) {\n const sessionStorageInfo = this._getCreditCardCheckboxInfoFromSessionStorage(driverId)\n const newOptions = api.getProp('options').map((option) => {\n const isCreditCardChecked = (sessionStorageInfo && sessionStorageInfo.includes(option.value)) || creditCardChecked\n return { ...option, checked: isCreditCardChecked }\n })\n api.setProp('options', newOptions)\n }\n }\n\n showCreditCardCheckBox () {\n const creditCardChoiceListElements = this.element.querySelectorAll(widgetQueries.creditCardChoiceList)\n creditCardChoiceListElements.forEach(element => element.classList.remove('is-hidden'))\n }\n\n getFormControls (elForm) {\n const creditCardElement = elForm.querySelector(widgetQueries.creditCardChoiceList)\n const creditCardApi = creditCardElement ? creditCardElement[componentsApis.choiceListApi] : undefined\n\n return {\n apiCreditCard: creditCardApi\n }\n }\n\n _getIdentifier () {\n let identifier = 'car-rental-credit-card'\n const urlParams = new window.URLSearchParams(window.location.search)\n if (urlParams) {\n const draftId = urlParams.get(widgetQueries.identifierSearchName)\n if (draftId) {\n identifier = `${identifier}-${draftId}`\n }\n }\n return identifier\n }\n\n setCreditCardSessionStorage (creditCardSelectedValues, driverId) {\n const identifier = this._getIdentifier()\n const currentInformationSaved = webStorage.session.get(identifier)\n const info = { ...currentInformationSaved, ...{ [driverId]: creditCardSelectedValues } }\n\n webStorage.session.set(identifier, info)\n }\n\n _getCreditCardCheckboxInfoFromSessionStorage (driverId) {\n let creditCardDriverInfo = []\n const identifier = this._getIdentifier()\n const sessionStorageInfo = webStorage.session.get(identifier)\n creditCardDriverInfo = sessionStorageInfo ? sessionStorageInfo[driverId] : []\n\n return creditCardDriverInfo\n }\n}\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { elementFromString, flush } from '../../../js/document/html-helper'\nimport { BookingBox } from '../booking-box/main'\nimport { BookingCarRentalTemplate } from './w-booking-car-rental.template'\nimport { BookingCarRentalEditDetailsTemplate } from './w-booking-car-rental-edit-details.template'\nimport { BookingCarRentalCarsListTemplate } from './w-booking-car-rental-cars-list.template'\nimport BookingCarRentalDataMapper from './data-mapper'\nimport Component from '../../../js/core/component/component'\nimport { getAge, isValidDateString } from '../../../js/helpers/dates'\nimport { widgetApi, widgetQueries, componentsApis, attr, defaults, configOptions, carRentalOperations, config } from './config'\nimport { bookingItemEvents, bookingCarRentalEvents } from '../../../js/document/event-types'\nimport { cleanUpSpecialCharacters } from '../../../js/helpers/string'\nimport CreditCard from './credit-card/credit-card'\nimport registeredEvents from '../../../js/helpers/registered-events'\n\nexport default class BookingCarRental extends BookingBox {\n /**\n * Creates a new my widget.\n *\n * @constructor\n * @param {HTMLElement} element - The HTML element.\n * @param {BookingCarRentalOptions} [options={}] - Options object\n */\n constructor (element, options = {}) {\n super(element)\n if (!element) { return }\n this.element = element\n this.options = { ...defaults, ...options }\n this.dataMapper = new BookingCarRentalDataMapper()\n const filterConfigurationElement = this.element.querySelector(widgetQueries.configurationElement)\n this.configurations = this._readOptionsFromConfigurations(filterConfigurationElement)\n this.collapseEditContainerApis = []\n this.collapseListContainerApis = []\n this.conditionsUrl = this.element.dataset[attr.conditionsUrl]\n this.serviceName = null\n this.previousCarSelected = null\n this.isUpgradingCar = null\n\n this.carRentalTrack = this.element.hasAttribute(attr.trackAttr) && this.element.attributes[attr.trackAttr].value\n this.creditCard = new CreditCard(this.element)\n\n if (this.configurations && this.configurations.creditCardConfiguration && this.configurations.creditCardConfiguration.creditCardEnabled) {\n this.creditCard.setCreditCardCheckboxTexts(this.configurations.creditCardConfiguration.creditCardCheckboxLabel, this.configurations.creditCardConfiguration.creditCardCheckboxRequiredMessage)\n this.creditCard.showAndValidateCreditCardCheckbox()\n }\n\n registeredEvents.registerWidgetEvents(widgetApi, this.events, {\n ...this.element.hasAttribute(attr.trackAttr) && { track: this.carRentalTrack }\n })\n\n this.element[widgetApi] = {\n setShowCarsInOneRow: (this.setShowCarsInOneRow).bind(this),\n isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow: (this.setisCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow).bind(this)\n }\n }\n\n /**\n *\n * @param {Object} data - Contains the data needed to render the widget body\n */\n async handleFetched (data) {\n this.data = data.response\n this._updateWidgetData()\n return super.handleFetched(data.response)\n }\n\n _updateWidgetData () {\n this.widgetData = null\n this.apiData = null\n this.apiData = this.data.services && this.data.services.find(service => service.componentId === this.componentId)\n\n if (this.apiData) {\n this.serviceName = cleanUpSpecialCharacters(this.apiData.aName) || ''\n this.options.maxNumberOfEquipmentsToBeSelected = this.apiData.maxNumberOfEquipments >= 0 ? this.apiData.maxNumberOfEquipments : defaults.maxNumberOfEquipmentsToBeSelected\n this.apiData = { ...this.apiData, ...{ participants: this.data.participants, rooms: this.data.rooms } }\n this.widgetData = this.dataMapper.mapService(this.apiData, this.configurations, this.options)\n this.widgetData = { ...this.widgetData, carRentalTrack: this.carRentalTrack }\n const selectedOptions = this.apiData.options.filter(option => option.isSelected)\n if (selectedOptions.length > 0) {\n super.setSuccessStateAndUpdateTitle()\n } else {\n super.noOptionSelectedAndUpdateTitle()\n }\n }\n\n if (this.widgetData) {\n this.showComponent()\n this._init(this.widgetData)\n } else {\n this.hideComponent()\n }\n }\n\n _init (data) {\n const renderedHtml = BookingCarRentalTemplate(data)\n const newContent = elementFromString(renderedHtml)\n this._render(newContent)\n Component.initDocumentComponentsFromAPI(newContent)\n\n this._initHtmlElements()\n this._initApis()\n this._attachEvents()\n this._setCollapseListContainerApis()\n this._renderEditDetailsTemplateForIncludedCarsSelected()\n }\n\n _initHtmlElements () {\n this.conditionsElement = this.element.querySelector(widgetQueries.conditionsElement)\n this.conditionsChoiceList = this.conditionsElement ? this.conditionsElement.querySelector(widgetQueries.conditionsElementChoiceList) : null\n }\n\n _render (el) {\n flush(this.bodyElement)\n this.bodyElement.appendChild(el)\n }\n\n async handleValidationClient () {\n let validation = true\n const apiWithError = []\n if (this.choiceListApis) {\n this.choiceListApis.forEach(api => {\n if (api.getProp('method') === 'single' && this._checkIfCarSelectedIsRequired() && !this._checkIfAnyCarIsSelected(api.element)) {\n api.enableErrors()\n validation = (api.validate().isValid && this._checkIfAnyCarIsSelected(api.element)) || false\n if (!validation) { apiWithError.push(api) }\n }\n if (this.creditCard.checkboxRequired) {\n const formItems = api.element.querySelectorAll(widgetQueries.formItem)\n formItems.forEach(formItem => {\n const formValidation = this._validateFormCarSelected(formItem)\n validation = formValidation && formValidation.isValid\n })\n }\n })\n }\n\n if (!validation) {\n super.openCollapseElement()\n apiWithError.forEach(api => { this._showApiErrors(validation, api) })\n }\n return validation\n }\n\n async handleConditionsValidation () {\n let validation = true\n let extraInformation = {}\n if (this.conditionsChoiceListApi) {\n const performValidation = this.conditionsChoiceListApi.validate()\n validation = performValidation.isValid\n if (!validation) {\n extraInformation = { serviceName: this.serviceName, fieldType: performValidation.fieldType || '' }\n this.conditionsChoiceListApi.enableErrors()\n this.conditionsChoiceListApi.validate()\n }\n }\n\n return { isValid: validation, ...extraInformation }\n }\n\n getServiceName () {\n return this.serviceName || ''\n }\n\n _checkIfCarSelectedIsRequired () {\n return this.widgetData.isCarSelectedRequired\n }\n\n _checkIfAnyCarIsSelected (element) {\n const listContainerId = this._getContainerIdFromElement(element, `[${attr.containerListId}]`, attr.containerListId)\n const currentList = this.widgetData.carsLists.find(list => list.carListInformation.listId === listContainerId)\n\n const selectedCars = [...(currentList?.choiceListInformation?.items || []), ...(currentList?.choiceListSelectedCarInformation?.items || [])].filter(option => option.checked)\n return selectedCars && selectedCars.length > 0\n }\n\n _showApiErrors (isValid, api) {\n const messages = api.getValidationMessages()\n api.styleValidity(isValid, messages)\n }\n\n _initApis () {\n const choiceListElements = [...this.element.querySelectorAll(widgetQueries.choiceLists)]\n this.choiceListApis = choiceListElements.map(choiceListElement => choiceListElement[componentsApis.choiceListApi])\n\n const editCarButtons = [...this.element.querySelectorAll(widgetQueries.editCarButton)]\n this.editCarButtonApis = editCarButtons.map(editCarButton => editCarButton[componentsApis.buttonApi])\n\n const removeCarButtons = [...this.element.querySelectorAll(widgetQueries.removeCarButton)]\n this.removeCarButtonApis = removeCarButtons.map(removeCarButton => removeCarButton[componentsApis.buttonApi])\n\n const upgradeCarButtons = [...this.element.querySelectorAll(widgetQueries.upgradeCarButton)]\n this.upgradeCarButtonsApis = upgradeCarButtons.map(upgradeCarButton => upgradeCarButton[componentsApis.buttonApi])\n }\n\n _removeEvents () {\n if (this.choiceListApis) {\n this.choiceListApis.forEach(choiceListApi => {\n choiceListApi && choiceListApi.events.removeListener('changeOptions')\n })\n }\n\n this.conditionsChoiceListApi && this.conditionsChoiceListApi.events.removeListener('changeOptions')\n\n if (this.editCarButtonApis) {\n this.editCarButtonApis.forEach(buttonApi => {\n buttonApi && buttonApi.events.removeListener('clickButton')\n })\n }\n\n if (this.removeCarButtonApis) {\n this.removeCarButtonApis.forEach(buttonApi => {\n buttonApi && buttonApi.events.removeListener('clickButton')\n })\n }\n\n if (this.upgradeCarButtonsApis) {\n this.upgradeCarButtonsApis.forEach(buttonApi => {\n buttonApi && buttonApi.events.removeListener('clickButton')\n })\n }\n }\n\n _attachEvents () {\n this.choiceListApis.forEach(choiceListApi => {\n choiceListApi.events.on('changeOptions', (options) => { this._clickedOption(options, choiceListApi) })\n })\n\n this.editCarButtonApis.forEach(buttonApi => {\n buttonApi.events.on('clickButton', (element) => {\n this._enableOtherActionButtons(element)\n buttonApi.setProp('disabled', true)\n this._editCarButtonClicked(element)\n })\n })\n\n this.removeCarButtonApis.forEach(buttonApi => {\n buttonApi.events.on('clickButton', (element) => this._removeCarButtonClicked(element))\n })\n\n this.upgradeCarButtonsApis.forEach(buttonApi => {\n buttonApi.events.on('clickButton', (element) => {\n this._enableOtherActionButtons(element)\n buttonApi.setProp('disabled', true)\n this._upgradeCarButtonClicked(element)\n })\n })\n\n this._attachConditionsEvents()\n this._attachAddExtraCarEvents()\n this._attachSliderButtonEvents()\n }\n\n _enableOtherActionButtons (element) {\n const allButtonApis = [...this.editCarButtonApis, ...this.upgradeCarButtonsApis]\n allButtonApis.forEach(api => {\n if (api.element.getAttribute(attr.carCode) === element.getAttribute(attr.carCode)) {\n api.setProp('disabled', false)\n }\n })\n }\n\n _attachSliderButtonEvents () {\n if (this.configurations && !this.configurations.showCarsInOneRow) return\n\n const sliderButtonNavigationElements = [...this.element.querySelectorAll(widgetQueries.sliderButtonsDirection)]\n this.sliderButtonNavigationApis = sliderButtonNavigationElements.map(sliderButtonNavigation => sliderButtonNavigation[componentsApis.buttonApi])\n\n this.sliderButtonNavigationApis.forEach(buttonApi => {\n buttonApi.events.on('clickButton', (element) => {\n const carListElement = element && element.closest(`[${attr.containerCarListId}]`)\n this.events.emit(bookingCarRentalEvents.SLIDER_BUTTON_CLICKED, {\n buttonDirection: element.getAttribute(attr.sliderButtonDirectionAttr),\n carListId: carListElement && carListElement.getAttribute(attr.containerCarListId)\n })\n })\n })\n }\n\n _attachConditionsEvents () {\n this.conditionsChoiceListApi = this.conditionsChoiceList ? this.conditionsChoiceList[componentsApis.choiceListApi] : null\n if (this.conditionsChoiceListApi) {\n this.conditionsChoiceListApi.events.on('changeOptions', (eventArgs) => { this._conditionsClicked(eventArgs) })\n }\n }\n\n _attachAddExtraCarEvents () {\n const addExtraCarButtons = [...this.element.querySelectorAll(widgetQueries.addExtraCarButton)]\n this.addExtraCarButtonApis = addExtraCarButtons.map(addExtraCarButton => addExtraCarButton[componentsApis.buttonApi])\n\n this.addExtraCarButtonApis.forEach(buttonApi => {\n this.isUpgradingCar = false\n buttonApi.events.on('clickButton', () => {\n buttonApi.setProp('disabled', true)\n this._addExtraCarButtonClicked()\n }\n )\n })\n }\n\n _addExtraCarButtonClicked () {\n const extraCarListContainer = this.element.querySelector(widgetQueries.extraCarListContainer)\n const dataDefaultListTemplate = this.dataMapper.mapDefaultChoiceListCar(this.apiData, this.configurations, this.options)\n\n this.widgetData.carsLists = [...this.widgetData.carsLists, { ...dataDefaultListTemplate }]\n\n const extraCarListTemplate = BookingCarRentalCarsListTemplate(dataDefaultListTemplate, this.widgetData.carsLists.length)\n const newContent = elementFromString(extraCarListTemplate)\n flush(extraCarListContainer)\n extraCarListContainer.appendChild(newContent)\n Component.initDocumentComponentsFromAPI(newContent)\n\n this._initApis()\n this._removeEvents()\n this._attachEvents()\n this._setCollapseListContainerApis()\n }\n\n _removeCarButtonClicked (btn) {\n const choiceListParent = btn.closest(widgetQueries.choiceLists)\n const selectedCarItem = choiceListParent.querySelector(widgetQueries.optionItem)\n\n this._removeCar(selectedCarItem)\n }\n\n _removeCar (selectedCarItem) {\n const eventArgs = {\n method: this._method,\n url: this._url,\n body: this._mapPatchRemoveCar(selectedCarItem),\n componentId: this.componentId\n }\n this.previousCarSelected = null\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _editCarButtonClicked (btn) {\n const carCode = btn.getAttribute(attr.carCode)\n const listCollapseContainerId = this._getContainerIdFromElement(btn, widgetQueries.collapseElement)\n const listContainerId = this._getContainerIdFromElement(btn, `[${attr.containerListId}]`, attr.containerListId)\n const selectedOptions = []\n this.widgetData.carsLists.forEach(list => {\n if (list?.choiceListInformation?.items || list?.choiceListSelectedCarInformation?.items) {\n const optionClicked = [...(list?.choiceListSelectedCarInformation?.items || []), ...(list?.choiceListInformation?.items || [])].find(option => (option.value === carCode) && option.checked)\n if (optionClicked) { selectedOptions.push(optionClicked) }\n }\n })\n const selectedOption = selectedOptions.filter(Boolean)[0]\n\n // Close container/ hide other options before showing the edit template\n this.collapseListContainerApis[listCollapseContainerId].api.close()\n\n this._renderEditDetailsTemplate(selectedOption, null, listContainerId, true)\n this._showCollapseEditContainers(true)\n\n const extraItemsToBeShown = this.configurations.showCarsInOneRow ? 0 : 1\n this._updateCollapseCarItemsVisibility(listCollapseContainerId, listContainerId, extraItemsToBeShown)\n }\n\n _upgradeCarButtonClicked (btn) {\n const carCode = btn.getAttribute(attr.carCode)\n const carDriver = btn.getAttribute(attr.carDriver)\n const carOption = btn.closest('.w-booking-car-rental__option')\n const collapseFormCarItemId = carOption && carOption.parentElement.querySelector(widgetQueries.editCollapseElement) && carOption.parentElement.querySelector(widgetQueries.editCollapseElement).getAttribute('id')\n const listCollapseContainerId = this._getContainerIdFromElement(btn, widgetQueries.collapseElement)\n const listContainerId = this._getContainerIdFromElement(btn, `[${attr.containerListId}]`, attr.containerListId)\n\n this.previousCarSelected = { carCode, driverId: carDriver }\n\n this._hideCollapseEditContainer(collapseFormCarItemId)\n this._updateCollapseCarItemsVisibility(listCollapseContainerId, listContainerId, 1)\n\n this.addExtraCarButtonApis.forEach(buttonApi => {\n buttonApi.setProp('disabled', true)\n })\n\n this.isUpgradingCar = true\n }\n\n _getContainerIdFromElement (el, querySelector, attribute = 'id') {\n if (!el) { return }\n const containerElement = el.closest(querySelector)\n return containerElement && containerElement.getAttribute(attribute)\n }\n\n _clickedOption (options, api) {\n const currentSelectedOption = options.find(option => option.checked)\n const listCollapseContainerId = this._getContainerIdFromElement(api.element, widgetQueries.collapseElement)\n const listContainerId = this._getContainerIdFromElement(api.element, `[${attr.containerListId}]`, attr.containerListId)\n\n const currentList = this.widgetData.carsLists.find(list => list.carListInformation.listId === listContainerId)\n if (currentList) {\n const selectedOption = [...(currentList?.choiceListInformation?.items || []), ...(currentList?.choiceListSelectedCarInformation?.items || [])].find(option => option.value === currentSelectedOption.value)\n const oldServiceValue = this._getOldServiceValueFromData([...(currentList?.choiceListInformation?.items || []), ...(currentList?.choiceListSelectedCarInformation?.items || [])]) || null\n\n this._hideSelectedInfoSectionFromAllOptions(listContainerId)\n if (this.isUpgradingCar || (this.configurations.isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow && oldServiceValue != null)) {\n const carItemSelectedData = {\n car: selectedOption.car\n }\n const validationResult = this._getValueFromSelectedCar(currentList)\n\n this._upgradeSelectedCar(validationResult, carItemSelectedData, oldServiceValue, null)\n this.isUpgradingCar = false\n this.previousCarSelected = null\n } else {\n this._renderEditDetailsTemplate(selectedOption, oldServiceValue, listContainerId)\n this._showCollapseEditContainers()\n this._updateCollapseCarItemsVisibility(listCollapseContainerId, listContainerId, 1)\n }\n }\n }\n\n _getValueFromSelectedCar (currentList) {\n const driverValue = (currentList.choiceListSelectedCarInformation != null && currentList.choiceListSelectedCarInformation?.items) ? currentList.choiceListSelectedCarInformation?.items[0].driver : null\n const equipmentsSelected = (currentList.choiceListSelectedCarInformation != null && currentList.choiceListSelectedCarInformation?.items) ? currentList.choiceListSelectedCarInformation?.items[0].selectedEquipments : null\n const equipments = (equipmentsSelected && equipmentsSelected.map(equipment => equipment.id)) || null\n\n return {\n isValid: driverValue !== null,\n driver: (driverValue && driverValue.participantId) || null,\n birthdate: (driverValue && driverValue.birthdate) || null,\n equipments\n }\n }\n\n _conditionsClicked (options) {\n const eventArgs = {\n method: carRentalOperations.patch,\n url: this.conditionsUrl,\n body: {\n conditions: this._mapConditionOptions(options)\n }\n }\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _mapConditionOptions (options) {\n const body = options.reduce(\n (obj, option) => Object.assign(obj, { [option.value]: option.checked }), {})\n return body\n }\n\n _getOldServiceValueFromData (oldOptions) {\n let oldServiceValue = ''\n if (oldOptions) {\n const oldOption = oldOptions.find(opt => opt.checked)\n if (oldOption) {\n oldServiceValue = oldOption.value\n }\n }\n return oldServiceValue\n }\n\n _renderEditDetailsTemplateForIncludedCarsSelected () {\n const includedCarLists = []\n this.widgetData.carsLists.forEach(list => {\n const carItems = [...(list?.choiceListInformation?.items || []), ...(list?.choiceListSelectedCarInformation?.items || [])]\n const includedCars = carItems && carItems.filter(option => option.isSelected && option.isIncluded && option.isCarEditable)\n if (includedCars && includedCars.length > 0) {\n includedCarLists.push(\n {\n listId: list.carListInformation.listId,\n collapseContainerId: list.collapseListInformation.collapseId,\n includedCars\n }\n )\n }\n })\n\n if (includedCarLists && includedCarLists.length > 0 && this.options.showEditTemplateForIncludedCars) {\n includedCarLists.forEach(list => {\n list.includedCars.forEach(car => {\n this._renderEditDetailsTemplate(car, null, list.listId, true)\n })\n })\n\n this._showCollapseEditContainers()\n\n includedCarLists.forEach(list => {\n const extraItemsToBeShown = this.configurations.showCarsInOneRow ? 0 : includedCarLists.length\n this._updateCollapseCarItemsVisibility(list.collapseContainerId, list.listId, extraItemsToBeShown)\n })\n }\n }\n\n _hideCancelButton (formElement, car) {\n const editCollapseIdElement = this._getEditCollapseId(car.value)\n const cancelButton = formElement.querySelector(widgetQueries.itemEditCancelButton)\n\n if (car.isIncluded && this.options.showEditTemplateForIncludedCars && this._collapseEditContainerShouldBeShown(editCollapseIdElement)) {\n cancelButton && cancelButton.classList.add('u-hidden')\n } else {\n cancelButton && cancelButton.classList.remove('u-hidden')\n }\n }\n\n _renderEditDetailsTemplate (selectedOption, oldServiceValue = null, listContainerId, isCarEntireRow = false) {\n if (!selectedOption) { return }\n const editCollapseIdElement = this._getEditCollapseId(selectedOption.value)\n const dataEditTemplate = {\n ...this.widgetData.editDetailsInformation,\n ...{ collapseId: editCollapseIdElement, optionChecked: selectedOption.checked },\n ...{ location: (selectedOption.dataset && selectedOption.dataset[attr.location]) || selectedOption.attributes['data-w-booking-car-rental__location'] || selectedOption.attributes['data-w-booking-car-rental__location-code'] },\n ...{ conditions: selectedOption.car.conditions || null },\n ...{\n creditCard: {\n checkboxEnabled: (this.configurations.creditCardConfiguration && this.configurations.creditCardConfiguration.creditCardEnabled) || false,\n checkboxTexts: this.creditCard.texts,\n checkboxChecked: selectedOption?.driver?.hasCheckedCreditCard || false\n },\n carRentalTrack: this.carRentalTrack,\n carSelectedCode: (selectedOption && selectedOption.value) || ''\n }\n }\n\n if (this.configurations && this.configurations.showCarsInOneRow && !isCarEntireRow) {\n const editTemplateContainerElement = this.element.querySelector(`[${attr.containerListId}=\"${listContainerId}\"]`).parentElement.querySelector('[data-w-booking-car-rental--edit-template]')\n flush(editTemplateContainerElement)\n this._renderEditDetailsTemplateContent({ targetElement: editTemplateContainerElement, dataEditTemplate, selectedOption, oldServiceValue, listContainerId, showCarsInOneRow: this.configurations.showCarsInOneRow })\n } else {\n const parentRichOptionElement = selectedOption ? this.element.querySelector(`[${attr.containerListId}=\"${listContainerId}\"] input[value=\"${selectedOption.value}\"]`).closest('.w-booking-car-rental__option') : null\n if (!parentRichOptionElement.nextElementSibling || parentRichOptionElement.nextElementSibling.getAttribute('id') !== editCollapseIdElement) {\n this._renderEditDetailsTemplateContent({ targetElement: parentRichOptionElement, dataEditTemplate, selectedOption, oldServiceValue, listContainerId, editCollapseIdElement })\n }\n }\n\n this.events.emit(bookingCarRentalEvents.RENDER_EDIT_DETAILS_TEMPLATE, editCollapseIdElement)\n }\n\n _renderEditDetailsTemplateContent (data) {\n const { targetElement, dataEditTemplate, selectedOption, oldServiceValue, listContainerId, editCollapseIdElement, showCarsInOneRow = false } = data\n\n const editHtmlTemplate = BookingCarRentalEditDetailsTemplate(dataEditTemplate)\n const newContent = elementFromString(editHtmlTemplate)\n targetElement.insertAdjacentElement(showCarsInOneRow ? 'beforeend' : 'afterend', newContent)\n Component.initDocumentComponentsFromAPI(newContent)\n\n this._placeArrowEditFormProperly(showCarsInOneRow, selectedOption, listContainerId)\n\n const collapseCheckoutElement = showCarsInOneRow ? targetElement.children[0] : targetElement.nextElementSibling\n const currentCheckoutCarForm = collapseCheckoutElement && collapseCheckoutElement.querySelector(widgetQueries.formItem)\n\n const currentList = this.widgetData.carsLists.find(list => list.carListInformation.listId === listContainerId)\n const carItemSelectedData = [...(currentList?.choiceListInformation?.items || []), ...(currentList?.choiceListSelectedCarInformation?.items || [])].find(car => car.id === selectedOption.value)\n\n if (this.creditCard.checkboxRequired) { this.creditCard.showCreditCardCheckBox(collapseCheckoutElement) }\n\n this._setCollapseEditContainerApis()\n if (selectedOption.isIncluded && this.options.showEditTemplateForIncludedCars && this._collapseEditContainerShouldBeShown(editCollapseIdElement)) {\n this._hideSelectedInfoSectionFromAllOptions(listContainerId)\n }\n this._hideCancelButton(currentCheckoutCarForm, selectedOption)\n this._attachCarFormEvents(currentCheckoutCarForm, carItemSelectedData, oldServiceValue)\n this._fillCheckoutFormControlsWithData(currentCheckoutCarForm, this.widgetData, carItemSelectedData, listContainerId)\n this._setFormControlsCurrentValues(currentCheckoutCarForm, selectedOption)\n }\n\n _placeArrowEditFormProperly (showCarsInOneRow, selectedOption, listContainerId) {\n if (!showCarsInOneRow) return\n const optionElementSelected = this.element.querySelector(`[${attr.containerListId}=\"${listContainerId}\"] ${widgetQueries.optionItem}[data-w-booking-car-rental__item-code=\"${selectedOption.value}\"]`).closest('.w-booking-car-rental__option')\n const optionElementSelectedRect = optionElementSelected.getBoundingClientRect()\n const bookingItemRect = this.element.getBoundingClientRect()\n const arrowPosition = (optionElementSelectedRect.left - bookingItemRect.left) + this.options.arrowEditFormLeftPosition\n\n const arrowItem = this.element.querySelector(widgetQueries.arrowEditFormLeftPosition)\n if (arrowItem) { arrowItem.style.left = `${arrowPosition}px` }\n }\n\n _getEditCollapseId (selectedOptionValue) {\n return `${this.widgetData.editDetailsInformation.collapseId}-${selectedOptionValue}`\n }\n\n _collapseEditContainerShouldBeShown (editCollapseIdElement) {\n let shouldBeShown = true\n if (this.collapseEditContainerApis && this.collapseEditContainerApis[editCollapseIdElement]) {\n shouldBeShown = !this.collapseEditContainerApis[editCollapseIdElement].isCollapsed\n }\n return shouldBeShown\n }\n\n _hideSelectedInfoSectionFromAllOptions (listContainerId = null) {\n this.choiceListApis.forEach(choiceList => {\n let selectedInfoSections = choiceList.element.querySelectorAll(widgetQueries.selectedInfoSection)\n if (listContainerId) {\n selectedInfoSections = choiceList.element.closest(`[${attr.containerListId}=\"${listContainerId}\"] ${widgetQueries.selectedInfoSection}`)\n }\n\n selectedInfoSections && selectedInfoSections.forEach(selectedInfoSection => {\n selectedInfoSection.classList.add('u-hidden')\n })\n })\n }\n\n _getDriversIdAlreadySelectedFromExistingLists (widgetData) {\n return widgetData.carsLists.reduce((acc, list) => {\n const carsSelected = [...(list?.choiceListInformation?.items || []), ...(list?.choiceListSelectedCarInformation?.items || [])].filter(item => item.isSelected && item.driver.participantId).flat()\n return [...acc, { listId: list.carListInformation.listId, driverIds: carsSelected.map(item => item.driver.participantId) }]\n }, [])\n }\n\n _fillCheckoutFormControlsWithData (currentCheckoutCarForm, widgetData, carItemSelectedData, listContainerId) {\n const { apiDriver, apiEquipments } = this._getFormControls(currentCheckoutCarForm)\n\n const driverIdsAlreadySelected = this._getDriversIdAlreadySelectedFromExistingLists(widgetData)\n const disabledDriversForCurrentList = driverIdsAlreadySelected.filter(list => list.listId !== listContainerId).map(list => list.driverIds).flat()\n\n const driverItems = widgetData.participants\n ? widgetData.participants.filter(participant => participant.ageCategory === 'Adult').map(\n (participant) => {\n const isDisabled = disabledDriversForCurrentList.includes(Number(participant.id))\n return {\n value: participant.id,\n text: isDisabled ? this._mapDriverDropdownText(participant.name) : participant.name,\n birthdate: participant.birthdate,\n disabled: isDisabled\n }\n })\n : null\n\n if (driverItems) {\n apiDriver.setProp('options', driverItems, { silent: true })\n }\n\n if (carItemSelectedData && carItemSelectedData.car && carItemSelectedData.car.hasEquipments) {\n const selectedEquipmentsLength = carItemSelectedData.car.equipments ? carItemSelectedData.car.equipments.filter(option => option.selected).length : null\n const equipments = carItemSelectedData.car.equipments.map(\n (equipment) => ({\n value: equipment.id,\n name: equipment.id,\n text: equipment.text,\n checked: equipment.selected,\n disabled: this._mapDisabledEquipmentState(equipment.selected, selectedEquipmentsLength, this.options.maxNumberOfEquipmentsToBeSelected)\n }))\n apiEquipments.setProp('options', equipments, { silent: true })\n } else {\n const formEquipmentsContainerElement = currentCheckoutCarForm.querySelector(widgetQueries.formEquipmentsContainer)\n formEquipmentsContainerElement && formEquipmentsContainerElement.classList.add('u-hidden')\n }\n }\n\n _mapDriverDropdownText (participantName) {\n let textReplaced = participantName\n if (this.configurations.addExtraCarsConfiguration && this.configurations.addExtraCarsConfiguration.driverAlreadyAssignedToCarText) {\n textReplaced = this.configurations.addExtraCarsConfiguration.driverAlreadyAssignedToCarText.replace('{driver}', participantName)\n }\n return textReplaced\n }\n\n _setFormControlsCurrentValues (form, carItem) {\n const { apiDriver, apiBirthdate } = this._getFormControls(form)\n if ((!carItem.driver && !this.previousCarSelected)) { return }\n const driverId = (carItem.driver && carItem.driver.participantId) || (this.previousCarSelected && this.previousCarSelected.driverId) || ''\n\n let driverBirthdate = carItem.driver && carItem.driver.birthdate\n if (!driverBirthdate) {\n const proposedDriverInfo = this.widgetData.participants.find(participant => participant.id === (this.previousCarSelected && this.previousCarSelected.driverId))\n driverBirthdate = (proposedDriverInfo && proposedDriverInfo.birthdate) || ''\n }\n\n apiDriver.setProp('value', String(driverId))\n apiBirthdate.setProp('date', driverBirthdate)\n }\n\n _attachCarFormEvents (currentCheckoutCarForm, carItemSelectedData, oldServiceValue = null) {\n const { apiDriver, apiBirthdate, apiEquipments } = this._getFormControls(currentCheckoutCarForm)\n const { apiCreditCard } = this.creditCard.getFormControls(currentCheckoutCarForm)\n\n const elWarning = currentCheckoutCarForm && currentCheckoutCarForm.querySelector(widgetQueries.ageWarningSelector)\n\n const btnConfirmSelection = currentCheckoutCarForm && currentCheckoutCarForm.querySelector(widgetQueries.itemEditConfirmButton)\n if (btnConfirmSelection) { btnConfirmSelection[componentsApis.buttonApi].events.on('clickButton', (ev) => this._onConfirmCarSelectionForm(ev, carItemSelectedData, oldServiceValue)) }\n\n const btnCancelSelection = currentCheckoutCarForm && currentCheckoutCarForm.querySelector(widgetQueries.itemEditCancelButton)\n if (btnCancelSelection) { btnCancelSelection[componentsApis.buttonApi].events.on('clickButton', (ev) => this._onCancelCarSelectionForm(ev)) }\n\n apiBirthdate.events.on('propChanged', (ev) => {\n if (ev.name === 'date') {\n const departureDate = apiBirthdate.element.dataset[attr.departureDate]\n this._onBirthdateChanged(ev.value, elWarning, departureDate)\n if (btnConfirmSelection) { btnConfirmSelection[componentsApis.buttonApi].setProp('disabled', false) }\n }\n })\n\n apiDriver.events.on('change', (value) => {\n this._onDriverChanged(value, apiDriver, apiBirthdate, apiCreditCard)\n if (btnConfirmSelection) { btnConfirmSelection[componentsApis.buttonApi].setProp('disabled', !value) }\n })\n\n if (apiEquipments) {\n this.previousSelectedEquipmentIds = []\n apiEquipments.events.on('changeOptions', (options) => {\n this._onEquipmentsChanged(options, this.previousSelectedEquipmentIds, carItemSelectedData, apiEquipments, this.options.maxNumberOfEquipmentsToBeSelected)\n })\n }\n\n if (apiCreditCard) {\n if (carItemSelectedData?.driver?.hasCheckedCreditCard) {\n const creditCardSelectedValues = apiCreditCard.getSelectedValues()\n this.creditCard.setCreditCardSessionStorage(creditCardSelectedValues, carItemSelectedData?.driver?.participantId)\n }\n\n apiCreditCard.events.on('changeOptions', () => {\n const driver = apiDriver.getProp('value')\n const creditCardSelectedValues = apiCreditCard.getSelectedValues()\n const eventArgs = { creditCardSelectedValues, driver, carItemSelectedData }\n\n this.creditCard.setCreditCardSessionStorage(creditCardSelectedValues, driver)\n this.events.emit(bookingCarRentalEvents.CREDIT_CARD_CHANGED, eventArgs)\n })\n this.creditCard.attachCreditCardEvents(apiCreditCard)\n }\n }\n\n _getFormControls (elForm) {\n const elements = {\n driver: elForm.querySelector(widgetQueries.formDriverDropdown),\n birthdate: elForm.querySelector(widgetQueries.formBirthdateDateSelector),\n equipments: elForm.querySelector(widgetQueries.formEquipmentsSelector)\n }\n\n const apis = {\n driver: elements.driver[componentsApis.dropdownApi],\n birthdate: elements.birthdate[componentsApis.dateSelectorApi],\n equipments: elements.equipments ? elements.equipments[componentsApis.choiceListApi] : undefined\n }\n\n return {\n apiDriver: apis.driver,\n apiBirthdate: apis.birthdate,\n apiEquipments: apis.equipments\n }\n }\n\n _onBirthdateChanged (birthdate, elWarning, departureDate) {\n let mustShow = false\n\n if (this.widgetData.editDetailsInformation.ageWarning.enabled && isValidDateString(birthdate) && isValidDateString(departureDate)) {\n const age = getAge(birthdate, departureDate)\n if (age < this.widgetData.editDetailsInformation.ageWarning.age) {\n mustShow = true\n }\n }\n\n if (elWarning) {\n elWarning.innerText = mustShow ? this.widgetData.editDetailsInformation.ageWarning.text : ''\n elWarning.hidden = !mustShow\n }\n }\n\n _onDriverChanged (value, apiDriver, apiBirthdate, apiCreditCard) {\n const options = apiDriver.getProp('options')\n if (options) {\n const selectedOption = options.find(option => option.value === value)\n if (selectedOption) {\n const birthdate = selectedOption.birthdate\n apiBirthdate.setProp('date', birthdate)\n apiBirthdate.setProp('disabled', (!this.configurations.editDriverBirthdateEditable && !!birthdate))\n if (apiCreditCard) {\n this.creditCard.toggleCreditCardCheckbox(apiCreditCard, false, value)\n }\n }\n }\n }\n\n _onEquipmentsChanged (options, previousSelectedEquipmentIds, carItemSelectedData, apiEquipments, maxNumberOfEquipmentsToBeSelected) {\n const selectedOptionsLength = options ? options.filter(option => option.checked).length : null\n let eventArgs = {}\n\n if (options) {\n this.previousSelectedEquipmentIds = options.filter(option => option.checked).map(option => option.value)\n\n apiEquipments.setProp('options',\n options.map((option) => (\n {\n ...option,\n disabled: this._mapDisabledEquipmentState(option.checked, selectedOptionsLength, maxNumberOfEquipmentsToBeSelected)\n }\n ))\n , { silent: true }\n )\n eventArgs = {\n options,\n previousSelectedEquipmentIds,\n carItemSelectedData\n }\n }\n this.events.emit(bookingCarRentalEvents.EQUIPMENTS_CHANGED, eventArgs)\n }\n\n _mapDisabledEquipmentState (equipmentIsChecked, selectedOptionsLength, maxNumberOfEquipmentsToBeSelected) {\n let isDisabled = false\n if (equipmentIsChecked || maxNumberOfEquipmentsToBeSelected === undefined) { return isDisabled }\n if (selectedOptionsLength >= maxNumberOfEquipmentsToBeSelected) {\n isDisabled = true\n }\n return isDisabled\n }\n\n _onConfirmCarSelectionForm (btn, carItemSelectedData, oldServiceValue) {\n const carItem = btn.closest(widgetQueries.formItem)\n const collapseFormCarItemId = btn.closest(widgetQueries.editCollapseElement) && btn.closest(widgetQueries.editCollapseElement).getAttribute('id')\n const validationResult = this._validateFormCarSelected(carItem)\n\n if (validationResult.isValid) {\n this.previousCarSelected = null\n\n this._setIsCollapsedFromCollapseEditContainerApis()\n if (oldServiceValue) {\n this._upgradeSelectedCar(validationResult, carItemSelectedData, oldServiceValue, collapseFormCarItemId)\n } else {\n if (carItemSelectedData.checked) {\n this._saveEditSelectedCar(validationResult, carItemSelectedData, collapseFormCarItemId)\n } else {\n this._addCar(validationResult, carItemSelectedData, collapseFormCarItemId)\n }\n }\n this.options.showEditTemplateForIncludedCars = false\n } else {\n const firstFormItemWithError = carItem.querySelector(widgetQueries.formItemErrorSelector)\n if (firstFormItemWithError != null) {\n firstFormItemWithError.scrollIntoView(config.scroll)\n }\n }\n }\n\n _onCancelCarSelectionForm (ev) {\n const carsLists = (this.widgetData && this.widgetData.carsLists.filter(list => (list.choiceListSelectedCarInformation && list.choiceListSelectedCarInformation.items && list.choiceListSelectedCarInformation.items.length))) || null\n if (carsLists && carsLists.length > 0) {\n this.widgetData = {\n ...this.widgetData,\n carsLists\n }\n }\n this._init(this.widgetData)\n }\n\n _validateFormCarSelected (elForm) {\n let isValidForm = true\n const { apiDriver, apiBirthdate, apiEquipments } = this._getFormControls(elForm)\n const { apiCreditCard } = this.creditCard.getFormControls(elForm)\n\n apiDriver.enableErrors()\n apiBirthdate.enableErrors()\n\n this.creditCard.checkboxRequired && apiCreditCard && apiCreditCard.enableErrors()\n const isCreditCardRequiredValid = this.creditCard.checkboxRequired ? this.creditCard.creditCardCheckboxValidation(apiCreditCard) : true\n\n isValidForm = apiDriver.validate().isValid && apiBirthdate.validate().isValid && isCreditCardRequiredValid\n const driverValue = apiDriver.validate().isValid ? apiDriver.getProp('value') : null\n const birthdateValue = apiBirthdate.validate().isValid ? apiBirthdate.getProp('date') : null\n\n const equipments = apiEquipments.getSelectedValues()\n\n const result = {\n isValid: isValidForm,\n driver: driverValue,\n birthdate: birthdateValue,\n equipments\n }\n\n return result\n }\n\n _addCar (validationResult, carItemSelectedData, collapseFormCarItemId) {\n const eventArgs = {\n method: this._method,\n url: this._url,\n body: this._mapPatchAddCar(validationResult, carItemSelectedData),\n componentId: this.componentId\n }\n this._hideCollapseEditContainer(collapseFormCarItemId, false)\n this._scrollComponentToView()\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _saveEditSelectedCar (validationResult, carItemSelectedData, collapseFormCarItemId) {\n const eventArgs = {\n method: this._method,\n url: this._url,\n body: this._mapPatchEditCar(validationResult, carItemSelectedData),\n componentId: this.componentId\n }\n this._hideCollapseEditContainer(collapseFormCarItemId)\n this._scrollComponentToView()\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _upgradeSelectedCar (validationResult, carItemSelectedData, oldServiceValue, collapseFormCarItemId) {\n const eventArgs = {\n method: this._method,\n url: this._url,\n body: this._mapPatchUpgradeCar(carItemSelectedData, oldServiceValue, validationResult),\n componentId: this.componentId\n }\n if (collapseFormCarItemId != null) {\n this._hideCollapseEditContainer(collapseFormCarItemId)\n }\n this._scrollComponentToView()\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _mapPatchAddCar (validationResult, carItemSelectedData) {\n return this._mapCarForPatch(carRentalOperations.add, carItemSelectedData, null, validationResult)\n }\n\n _mapPatchEditCar (validationResult, carItemSelectedData) {\n return this._mapCarForPatch(carRentalOperations.patch, carItemSelectedData, carItemSelectedData, validationResult)\n }\n\n _mapPatchUpgradeCar (carItemSelectedData, oldCarItemSelectedValue, validationResult) {\n return this._mapCarForPatch(carRentalOperations.swap, carItemSelectedData, oldCarItemSelectedValue, validationResult)\n }\n\n _mapPatchRemoveCar (selectedCarItem) {\n const selectedCarItemValue = selectedCarItem.getAttribute(attr.itemCode)\n const selectedCarItemParticipants = selectedCarItem.getAttribute(attr.itemParticipants) ? selectedCarItem.getAttribute(attr.itemParticipants).split(',') : []\n\n const selectedCarItemInfo = { car: { code: selectedCarItemValue, participants: selectedCarItemParticipants } }\n\n return this._mapCarForPatch(carRentalOperations.remove, selectedCarItemInfo)\n }\n\n _mapCarForPatch (operationType, carItemSelectedData, oldCarItemSelectedValue = null, validationResult = null) {\n if (this._method === 'GET') {\n return undefined\n }\n\n const data = validationResult\n ? {\n pickUpType: carItemSelectedData.car.locationCode,\n driverParticipantId: validationResult.driver,\n driverBirthdate: validationResult.birthdate,\n equipments: validationResult.equipments\n }\n : {}\n\n // Map services\n const newService = {\n code: carItemSelectedData.car.code,\n participants: carItemSelectedData.car.participants\n }\n\n const oldService = oldCarItemSelectedValue\n ? {\n code: oldCarItemSelectedValue,\n participants: carItemSelectedData.car.participants\n }\n : null\n\n const body = {\n operationType,\n newService,\n oldService,\n datatype: 'carrental',\n data: JSON.stringify(data)\n }\n\n return body\n }\n\n _setIsCollapsedFromCollapseEditContainerApis (collapse = false) {\n if (this.collapseEditContainerApis) {\n Object.values(this.collapseEditContainerApis).forEach(item => { item.isCollapsed = collapse })\n }\n }\n\n _setCollapseEditContainerApis () {\n const editCollapseContainerElements = [...this.element.querySelectorAll(widgetQueries.editCollapseElement)]\n editCollapseContainerElements.forEach(collapseElement => {\n const editCollapseId = collapseElement.getAttribute('id')\n this.collapseEditContainerApis[editCollapseId] = { ...this.collapseEditContainerApis[editCollapseId], ...{ api: collapseElement[componentsApis.collapseApi] } }\n }, this)\n }\n\n _showCollapseEditContainers (editButtonClicked = false) {\n if (this.collapseEditContainerApis) {\n Object.values(this.collapseEditContainerApis).forEach(item => {\n if (item.isCollapsed && editButtonClicked) { item.api.open() }\n if (!item.isCollapsed) { item.api.open() }\n })\n }\n }\n\n _hideCollapseEditContainer (editCollapseId, isCollapsed = true) {\n if (this.collapseEditContainerApis && this.collapseEditContainerApis[editCollapseId]) {\n this.collapseEditContainerApis[editCollapseId].isCollapsed = isCollapsed\n this.collapseEditContainerApis[editCollapseId].api.close()\n }\n }\n\n _scrollComponentToView () {\n this.element && this.element.scrollIntoView(config.scroll)\n }\n\n _setCollapseListContainerApis () {\n const collapseElements = [...this.element.querySelectorAll(widgetQueries.collapseElement)]\n collapseElements.forEach(collapseElement => {\n const collapseListId = collapseElement.getAttribute('id')\n this.collapseListContainerApis[collapseListId] = { ...this.collapseListContainerApis[collapseListId], ...{ api: collapseElement[componentsApis.collapseApi] } }\n }, this)\n }\n\n _updateCollapseCarItemsVisibility (listCollapseContainerId, listContainerId, extraItemsToBeShown = 0) {\n extraItemsToBeShown = this.configurations.isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow ? 1 : extraItemsToBeShown\n if (this.collapseListContainerApis && this.collapseListContainerApis[listCollapseContainerId]) {\n this.collapseListContainerApis[listCollapseContainerId].api.setProp('maxItems', this._collapseMaxItemsToBeShown(listContainerId, extraItemsToBeShown))\n this.collapseListContainerApis[listCollapseContainerId].api.update()\n }\n }\n\n _collapseMaxItemsToBeShown (listContainerId, extraItemsToBeShown = 0) {\n let collapseItemsToBeShown = this.options.maxNumberOfCarsToBeShown\n const currentList = this.widgetData.carsLists.find(list => list.carListInformation.listId === listContainerId)\n\n const checkedCarItems = [...(currentList?.choiceListSelectedCarInformation?.items || [])].filter(option => option.checked)\n\n if (checkedCarItems.length > 0) {\n collapseItemsToBeShown = checkedCarItems.length\n }\n return Number(collapseItemsToBeShown + extraItemsToBeShown)\n }\n\n _mapNumberOfOptionsToBeShown (serviceOptions, maxNumberOfCarsToBeShown) {\n const serviceOptionsSelectedLength = serviceOptions ? serviceOptions.filter(option => option.isSelected).length : 0\n return serviceOptionsSelectedLength > 0 ? serviceOptionsSelectedLength : maxNumberOfCarsToBeShown\n }\n\n _readOptionsFromConfigurations (el) {\n if (el) {\n const innerHtml = el.innerHTML\n const configuration = JSON.parse(innerHtml)\n const priceConfigurations = super.readPriceConfigFromConfigurations(configuration)\n\n return {\n ...priceConfigurations,\n buttonTexts: configuration[configOptions.buttonTexts],\n carTexts: configuration[configOptions.carTexts],\n checkoutTexts: configuration[configOptions.checkoutTexts],\n ageWarningConfiguration: configuration[configOptions.ageWarningConfiguration],\n conditionGroup: configuration[configOptions.conditionGroup],\n editDriverBirthdateEditable: configuration[configOptions.editDriverBirthdateEditable],\n addExtraCarsConfiguration: configuration[configOptions.addExtraCarsConfiguration],\n creditCardConfiguration: configuration[configOptions.creditCardConfiguration],\n upgradeCarFeatureEnabled: configuration[configOptions.upgradeCarFeatureEnabled],\n showCarsInOneRow: configuration[configOptions.showCarsInOneRow],\n isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow: configuration[configOptions.isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow]\n }\n }\n }\n\n setShowCarsInOneRow (showCarsInOneRow = false) {\n if (this.configurations) {\n this.configurations = { ...this.configurations, showCarsInOneRow }\n }\n }\n\n setisCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow (isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow = false) {\n if (this.configurations) {\n this.configurations = { ...this.configurations, isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow }\n }\n }\n}\n\nregisterWidget(BookingCarRental, widgetApi)\n","import { ChoiceListTemplate, defaultChoiceListData } from '../../components/choice-list/c-choice-list.template'\n\nexport const BookingCarRentalConditionsTemplate = (d) => {\n const result = `${d.conditions\n ? ChoiceListTemplate(Object.assign({},\n defaultChoiceListData,\n d.conditions.choiceListInfo))\n : ''}\n `\n return result\n}\n","/**\n * List of events used by booking-choice-list widget\n */\nexport const bookingChoiceList = {\n CHOOSE_PER_PERSON_SWITCH: 'bookingChoiceList.ChoosePerPersonSwitch'\n}\n","\nexport const renderTypeEnum = {\n PerParticipant: 'PerParticipant',\n PerRoom: 'PerRoom',\n PerBooking: 'PerBooking'\n}\n\nexport const operationTypeEnum = {\n addOperation: 'Add',\n removeOperation: 'Remove',\n swapOperation: 'Swap',\n patchOperation: 'Patch'\n}\n","import { renderTypeEnum } from './enums'\nimport PriceFormatter from '../../../js/helpers/price-formatter'\nexport default class BookingChoiceListDataMapper {\n mapService (apiService, configurations) {\n let rooms = [{ participantIds: [], name: '', id: null }]\n if (apiService.rooms && apiService.rooms.length) {\n rooms = this._checkRenderTypePerBooking(apiService.renderType) ? apiService.rooms.slice(0, 1) : apiService.rooms\n }\n const isAppliesToAllParticipantsVisible = this._checkIfAppliesToAllParticipantsMustBeVisible(configurations, apiService)\n const widgetService = {\n rooms: rooms ? rooms.map(room => this._mapRoom(room, apiService, configurations)) : [],\n messages: apiService.warnings && apiService.warnings.length ? this._mapMessages(apiService) : null,\n showMessagesOnTop: configurations && configurations.showMessagesOnTop ? configurations.showMessagesOnTop : false,\n conditions: configurations && configurations.conditionGroup ? this._mapConditions(configurations.conditionGroup, apiService) : null,\n choosePerPersonSelected: (isAppliesToAllParticipantsVisible && configurations.choosePerPersonSelected) || (isAppliesToAllParticipantsVisible && this._checkIfAppliesToAllParticipantsMustBeDisabled(apiService)) || false,\n choosePerPerson: isAppliesToAllParticipantsVisible ? this._mapAppliesToAllParticipants(configurations, apiService) : null\n }\n return widgetService\n }\n\n _mapRoom (apiRoom, apiService, configurations) {\n let participants = []\n\n if (this._checkRenderTypePerBooking(apiService.renderType)) {\n participants = apiService.participants.slice(0, 1)\n } else if (this._checkRenderTypePerRoom(apiService.renderType)) {\n participants = this._filterParticipants(apiService, apiRoom).slice(0, 1)\n } else {\n participants = this._filterParticipants(apiService, apiRoom)\n }\n\n const widgetRoom = {\n roomName: this._checkRenderTypePerBooking(apiService.renderType) ? '' : apiRoom.name,\n participants: participants.map(apiParticipant => this._mapParticipant(apiParticipant, apiService, apiRoom, configurations))\n }\n\n return widgetRoom\n }\n\n _filterParticipants (apiService, apiRoom) {\n if (!apiRoom.participantIds || apiRoom.participantIds.length === 0) return apiService.participants\n return apiService.participants.filter(\n participant => apiRoom.participantIds.includes(participant.id) &&\n apiService.options.some(option => option.appliesToParticipants.includes(participant.id))\n )\n }\n\n _mapParticipant (apiParticipant, apiService, apiRoom, configurations) {\n const participantIds = apiParticipant.id\n const isRequired = (!apiService.ignoreValidation && apiService.requiredMessage && apiService.requiredMessage !== '')\n const widgetParticipant = {\n choiceListInfo: {\n method: 'single',\n highlighted: false,\n id: apiService.componentId + '_' + participantIds,\n name: apiService.componentId + '_' + participantIds,\n label: this._checkRenderTypePerParticipant(apiService.renderType) ? (apiParticipant.firstName || apiParticipant.alternativeName) : '',\n extraClasses: '',\n disabled: false,\n unresolved: false,\n items: apiService.options.filter(option => option.appliesToParticipants.includes(apiParticipant.id)).map(option => this._mapOption(option, apiParticipant, apiService, apiRoom, configurations)),\n required: isRequired,\n requiredMessage: apiService.requiredMessage\n }\n }\n return widgetParticipant\n }\n\n _mapOption (apiOption, apiParticipant, apiService, apiRoom, configurations) {\n const isRequired = (!apiService.ignoreValidation && apiService.requiredMessage && apiService.requiredMessage !== '')\n let participantIds = []\n if (apiOption.participantIds) {\n participantIds = [...apiOption.participantIds]\n } else if (this._checkRenderTypePerBooking(apiService.renderType)) {\n participantIds = [...apiService.participants.map(participant => participant.id)]\n } else if (this._checkRenderTypePerRoom(apiService.renderType)) {\n participantIds = [...apiRoom.participantIds]\n } else {\n participantIds = [apiParticipant.id]\n }\n\n const priceConfig = configurations && configurations.priceConfiguration ? configurations.priceConfiguration : apiService.priceConfiguration\n let optionPriceFormatted\n // apiService.isPricePerPerson means that the apiOption.price is for each participant,\n // else the option price is for whole service no matter the number of participants\n if (apiService.isPricePerPerson && apiOption.prices) {\n let calculatedOptionPrice = 0\n apiOption.prices.forEach(optionPrice => {\n const includedIds = participantIds.filter(id => optionPrice.participantIds.includes(id))\n if (includedIds.length > 0) {\n calculatedOptionPrice += includedIds.length * optionPrice.price\n }\n })\n const filterEmptyParticipantIdsFromPrices = apiOption.prices.filter(price => price.participantIds.length)\n\n if (!configurations.choosePerPersonSelected && this._checkIfAppliesToAllParticipantsMustBeVisible(configurations, apiService) && filterEmptyParticipantIdsFromPrices.length > 1) {\n optionPriceFormatted = this._priceSplittedPerAgeCategory(filterEmptyParticipantIdsFromPrices, apiService.participants, configurations, priceConfig, apiOption, apiService)\n } else {\n optionPriceFormatted = PriceFormatter.toFormattedText(calculatedOptionPrice, priceConfig)\n }\n } else {\n optionPriceFormatted = this._priceFormatted(apiOption.price, participantIds, priceConfig, apiService.isPricePerPerson)\n }\n\n const isDisabled = (apiOption.disabledParticipants ? apiOption.disabledParticipants.includes(apiParticipant.id) : false)\n\n const uniqueId = apiOption.code + '-' + participantIds.join('-')\n const widgetItem = {\n id: uniqueId,\n name: uniqueId,\n value: apiOption.code,\n text: apiOption.displayText,\n additionalText: apiOption.percentage || optionPriceFormatted,\n disabled: isDisabled,\n checked: apiOption.isSelected && apiOption.assignedParticipants ? apiOption.assignedParticipants.includes(apiParticipant.id) : false,\n participantIds,\n appliesToParticipants: apiOption.appliesToParticipants ? apiOption.appliesToParticipants : null,\n assignedParticipants: apiOption.assignedParticipants ? apiOption.assignedParticipants : null,\n price: apiOption.price || null,\n prices: apiOption.prices || null,\n required: isRequired,\n requiredMessage: apiService.requiredMessage,\n highlightText: apiOption.bestValueText,\n startDate: apiOption.startDate,\n endDate: apiOption.endDate\n }\n return widgetItem\n }\n\n _priceSplittedPerAgeCategory (filterEmptyParticipantIdsFromPrices, participants, configurations, priceConfig, apiOption, apiService) {\n const participantsGroupedByAgeCategory = this._getParticipantsGroupedByKey(participants, 'ageCategory')\n\n return participantsGroupedByAgeCategory\n ? this._showAgeCategoryWithPrice(participantsGroupedByAgeCategory, filterEmptyParticipantIdsFromPrices, configurations, priceConfig, apiOption, apiService)\n : this._showRangePrice(filterEmptyParticipantIdsFromPrices, priceConfig)\n }\n\n _showAgeCategoryWithPrice (participantsGroupedByAgeCategory, filterEmptyParticipantIdsFromPrices, configurations, priceConfig, apiOption, apiService) {\n if (!participantsGroupedByAgeCategory) { return }\n const ageCategoriesTexts = configurations && configurations.ageCategoriesTexts ? configurations.ageCategoriesTexts : null\n const pricePerAgeCategory = Object.keys(participantsGroupedByAgeCategory).map(ageCategory => {\n const priceItem = filterEmptyParticipantIdsFromPrices.find(item => item.participantIds.includes(participantsGroupedByAgeCategory[ageCategory][0].id))\n const optionPrice = (priceItem !== undefined) ? priceItem.price : null\n const ageCategoryTranslated = `${ageCategoriesTexts ? ageCategoriesTexts[ageCategory.toLowerCase()] : ageCategory}`\n priceConfig = { ...priceConfig, suffix: '' }\n return `${configurations && configurations.isLabelPricePerAgeCategoryAtStart ? ageCategoryTranslated : ''} ${PriceFormatter.toFormattedText(optionPrice, priceConfig)} ${configurations && !configurations.isLabelPricePerAgeCategoryAtStart ? ageCategoryTranslated : ''}`\n }).join('')\n\n const calculatedOptionPrice = this._calculateTotalPricePerOption(apiOption, apiService)\n return `${PriceFormatter.toFormattedText(calculatedOptionPrice, priceConfig)} \n
${pricePerAgeCategory}`\n }\n\n _calculateTotalPricePerOption (apiOption, apiService) {\n let calculatedOptionPrice = 0\n\n if (apiService.isPricePerPerson && apiOption.prices) {\n apiOption.prices.forEach(optionPrice => {\n const includedIds = apiOption.appliesToParticipants.filter(id => optionPrice.participantIds.includes(id))\n if (includedIds.length > 0) {\n calculatedOptionPrice += includedIds.length * optionPrice.price\n }\n })\n } else {\n calculatedOptionPrice = apiOption.price\n }\n\n return calculatedOptionPrice\n }\n\n _showRangePrice (filterEmptyParticipantIdsFromPrices, priceConfig) {\n const pricesOrdered = filterEmptyParticipantIdsFromPrices.sort((firstItem, secondItem) => firstItem.price - secondItem.price)\n const firstItem = pricesOrdered.shift()\n const lastItem = pricesOrdered.pop()\n return `${PriceFormatter.toFormattedText(firstItem.price, priceConfig)} - ${PriceFormatter.toFormattedText(lastItem.price, priceConfig)}`\n }\n\n _getParticipantsGroupedByKey (participants, key) {\n if (!participants.filter(participant => Object.prototype.hasOwnProperty.call(participant, key)).length > 0) { return }\n return participants.reduce((result, item) => ({\n ...result,\n [item[key]]: [\n ...(result[item[key]] || []),\n item\n ]\n }), {})\n }\n\n _mapMessages (apiService) {\n let messages = []\n if (apiService.warnings) {\n messages = apiService.warnings.map(warning => this._mapMessage(warning))\n }\n return messages\n }\n\n _priceFormatted (price, participantIds, priceConfiguration, isPricePerPerson) {\n const totalPrice = isPricePerPerson && participantIds.length >= 1\n ? (participantIds.length * price)\n : price\n\n return PriceFormatter.toFormattedText(totalPrice, priceConfiguration)\n }\n\n _mapMessage (warning) {\n const type = warning.type ? warning.type.toLowerCase() : 'info'\n const message = {\n title: warning.title,\n type,\n texts: [warning.message]\n }\n return message\n }\n\n _mapConditions (conditionGroup, apiService) {\n const isRequired = conditionGroup.isRequired && apiService.options.some(option => option.isSelected)\n const isDisabled = this._checkIfAllServiceOptionsAreDisabledForAllParticipants(apiService)\n const conditions = {\n choiceListInfo: {\n method: conditionGroup.method.toLowerCase(),\n id: apiService.componentId + '_conditions',\n name: apiService.componentId + '_conditions',\n items: conditionGroup.options.map(option => ({ ...option, disabled: isDisabled, required: (isRequired && option.isRequired), checked: apiService.areConditionsAccepted })),\n required: isRequired,\n disabled: isDisabled,\n attributes: {\n 'data-message-required': conditionGroup.messages.map(message => message).join(','),\n 'data-w-booking-choice-list__choice-list--conditions': ''\n }\n }\n }\n return conditions\n }\n\n _mapAppliesToAllParticipants (configurations, apiService) {\n const appliesToAllParticipants = {\n switchInfo: {\n id: apiService.componentId + '_applies-to-all-participants',\n text: configurations.appliesToAllParticipantsLabel,\n checked: configurations.choosePerPersonSelected || this._checkIfAppliesToAllParticipantsMustBeDisabled(apiService),\n disabled: this._checkIfAppliesToAllParticipantsMustBeDisabled(apiService),\n extraClasses: 'w-booking-choice-list__switch--applies-to-all-participants',\n attributes: {\n 'data-w-booking-choice-list__switch--applies-to-all-participants': ''\n }\n }\n }\n return appliesToAllParticipants\n }\n\n _checkIfAppliesToAllParticipantsMustBeDisabled (apiService) {\n const participantIds = apiService.participants.map(participant => participant.id)\n let isDisabled = false\n\n const anyOptionHasDisabledParticipants = apiService.options.some((option) => {\n return option.disabledParticipants && option.disabledParticipants.length > 0\n })\n\n const anyOptionHasAllParticipantsAssigned = apiService.options.some((option) => {\n return option.assignedParticipants && option.assignedParticipants.length > 0 ? this.checkIfParticipantsMatch(option.assignedParticipants, participantIds) : false\n })\n\n if (anyOptionHasDisabledParticipants && anyOptionHasAllParticipantsAssigned) {\n isDisabled = false\n } else if (anyOptionHasDisabledParticipants && !anyOptionHasAllParticipantsAssigned) {\n isDisabled = true\n } else {\n isDisabled = false\n }\n\n return isDisabled\n }\n\n _checkIfOneServiceOptionAppliesToAllParticipantsOrNone (apiService) {\n let checked = false\n checked = apiService.options.every((option) => {\n return option.assignedParticipants && option.assignedParticipants.length > 0 ? this.checkIfParticipantsMatch(option.assignedParticipants, option.appliesToParticipants) : true\n })\n return checked\n }\n\n _checkIfAllServiceOptionsAreDisabledForAllParticipants (apiService) {\n const participantIds = apiService.participants.map(participant => participant.id)\n let disabled = false\n disabled = apiService.options.every((option) => {\n return option.disabledParticipants ? this.checkIfParticipantsMatch(option.disabledParticipants, participantIds) : false\n })\n return disabled\n }\n\n checkIfParticipantsMatch (participantsFromOption, participantIds) {\n return Array.isArray(participantsFromOption) &&\n Array.isArray(participantIds) &&\n participantsFromOption.length === participantIds.length &&\n participantsFromOption.every((val, index) => val === participantIds[index])\n }\n\n _checkIfAppliesToAllParticipantsMustBeVisible (configurations, apiService) {\n return configurations && configurations.showAppliesToAllParticipants && this._checkRenderTypePerParticipant(apiService.renderType) && apiService.participants.length > 1\n }\n\n _checkRenderTypePerParticipant (renderType) {\n if (renderType !== renderTypeEnum.PerParticipant) return false\n return true\n }\n\n _checkRenderTypePerRoom (renderType) {\n if (renderType !== renderTypeEnum.PerRoom) return false\n return true\n }\n\n _checkRenderTypePerBooking (renderType) {\n if (renderType !== renderTypeEnum.PerBooking) return false\n return true\n }\n}\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { BookingBox } from '../booking-box/main'\nimport { BookingChoiceListTemplate } from './w-booking-choice-list.template'\nimport { BookingConditionsTemplate } from './w-booking-conditions.template'\nimport { BookingMessageTemplate } from '../booking-message/w-booking-message.template'\nimport { elementFromString, flush } from '../../../js/document/html-helper'\nimport { bookingStepsEvents, bookingItemEvents, bookingChoiceListEvents } from '../../../js/document/event-types'\nimport webStorage from '../../../js/document/web-storage'\nimport Component from '../../../js/core/component/component'\nimport BookingChoiceListDataMapper from './data-mapper'\nimport registeredEvents from '../../../js/helpers/registered-events'\nimport { operationTypeEnum } from './enums'\nimport { cleanUpSpecialCharacters } from '../../../js/helpers/string'\n\nconst widgetApi = 'w-booking-choice-list'\n\nconst widgetQueries = {\n configurationElement: `[data-${widgetApi}__configuration]`,\n choiceLists: `[data-${widgetApi}__choice-list]`,\n choiceListApi: 'c-choice-list',\n trackingEventAttr: `data-${widgetApi}__tracking-event-name`,\n bookingMessagesElement: `[data-${widgetApi}__messages]`,\n trackAttr: `data-${widgetApi}__track`,\n conditionsElement: `[data-${widgetApi}__conditions-container]`,\n conditionsElementChoiceList: `[data-${widgetApi}__choice-list--conditions]`,\n appliesToAllParticipantsElement: `[data-${widgetApi}__applies-to-all-participants-container]`,\n appliesToAllParticipantsElementSwitch: `[data-${widgetApi}__switch--applies-to-all-participants]`,\n bookingChoiceListItem: `[data-${widgetApi}__item]`,\n bookingChoiceListHeadingRoomTitle: `[data-${widgetApi}__heading-room-title]`\n}\n\nconst attr = {\n conditionsUrl: 'conditionsUrl',\n appliesToAllParticipantsUrl: 'appliesToAllParticipantsUrl'\n}\n\nconst configOptions = {\n conditionGroup: 'conditionGroup',\n showMessagesOnTop: 'showMessagesOnTop',\n showAppliesToAllParticipants: 'showAppliesToAllParticipants',\n appliesToAllParticipantEnabledByDefault: 'appliesToAllParticipantEnabledByDefault',\n appliesToAllParticipantsLabel: 'appliesToAllParticipantsLabel',\n ageCategoriesTexts: 'ageCategoriesTexts',\n isLabelPricePerAgeCategoryAtStart: 'isLabelPricePerAgeCategoryAtStart'\n}\n\nconst classNames = {\n hidden: 'is-hidden',\n hideLabel: 'label-is-hidden'\n}\n/**\n * BookingChoiceList widget\n */\nexport default class BookingChoiceList extends BookingBox {\n /**\n *\n * @param {HTMLElement} element - The HTML content\n * @param {Object} [options={}] - Options\n */\n constructor (element, options = {}) {\n super(element)\n this.element = element\n this.dataMapper = new BookingChoiceListDataMapper()\n this.choiceListApis = null\n this.firstLoad = true\n this.trackingEvent = this.element.getAttribute(widgetQueries.trackingEventAttr)\n this.track = this.element.getAttribute(widgetQueries.trackAttr)\n const filterConfigurationElement = this.element.querySelector(widgetQueries.configurationElement)\n this.configurations = this._readOptionsFromConfigurations(filterConfigurationElement)\n this.conditionsUrl = this.element.dataset[attr.conditionsUrl]\n this.appliesToAllParticipantsUrl = this.element.dataset[attr.appliesToAllParticipantsUrl]\n this.choosePerPersonIsChecked = false\n this.choosePerPersonIsAvailable = false\n this.draftId = null\n this.serviceName = null\n this.disabledValues = {}\n\n registeredEvents.registerWidgetEvents(widgetApi, this.events, {\n ...this.element.hasAttribute(widgetQueries.trackAttr) && { track: this.element.attributes[widgetQueries.trackAttr].value }\n })\n\n // Attach events to the choice list elements in the widget\n this._attachEvents()\n }\n\n /**\n *\n * @param {Object} data - Contains the data needed to render the widget body\n */\n async handleFetched (data) {\n this.data = data.response\n this.draftId = this.data.draftId\n this._updateWidgetData()\n this.firstLoad = false\n return super.handleFetched(data.response)\n }\n\n getServiceName () {\n return this.trackingEvent || this.serviceName || ''\n }\n\n _conditionsClicked (options) {\n const eventArgs = {\n method: operationTypeEnum.patchOperation,\n url: this.conditionsUrl,\n body: {\n conditions: this._mapConditionOptions(options)\n }\n }\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _appliesToAllParticipantsClicked (event) {\n const inputAllParticipants = event.currentTarget.querySelector('input')\n this.choosePerPersonIsChecked = !inputAllParticipants.checked\n const serviceId = this._getServiceIdSelectedAppliesToAllParticipants()\n this._saveChoosePerPersonToSessionStorage(this.choosePerPersonIsChecked)\n this._emitChoosePerPersonEvent(this.choosePerPersonIsChecked)\n inputAllParticipants.checked = this.choosePerPersonIsChecked\n if (!this.choosePerPersonIsChecked && serviceId) {\n const eventArgs = {\n method: operationTypeEnum.patchOperation,\n url: this.appliesToAllParticipantsUrl,\n body: {\n appliesToAllParticipants: !this.choosePerPersonIsChecked,\n serviceId,\n componentId: this.componentId\n },\n componentId: this.componentId\n }\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n } else {\n this._updateWidgetData()\n }\n }\n\n _emitChoosePerPersonEvent (choosePerPersonIsChecked) {\n const switchEventArgs = {\n choosePerPersonIsChecked,\n serviceName: (this.trackingEvent || this.serviceName || '')\n }\n\n this.events.emit(bookingChoiceListEvents.CHOOSE_PER_PERSON_SWITCH, switchEventArgs)\n }\n\n _mapConditionOptions (options) {\n const body = options.reduce(\n (obj, option) => Object.assign(obj, { [option.value]: option.checked }), {})\n return body\n }\n\n _getServiceIdSelectedAppliesToAllParticipants () {\n const firstParticipantChoiceListApi = this.choiceListApis[0]\n const optionsFirstParticipantChoiceList = firstParticipantChoiceListApi.getProp('options')\n const optionToApplyAllParticipants = optionsFirstParticipantChoiceList.find(opt => opt.checked)\n const serviceId = optionToApplyAllParticipants ? optionToApplyAllParticipants.value : null\n\n return serviceId\n }\n\n _clickedOption (options, oldOptions) {\n const selectedOption = options.find(option => option.checked)\n\n const eventArgs = {\n method: this._method,\n url: this._url,\n body: this._mapSelectedOptionForPatch(selectedOption, oldOptions),\n componentId: this.componentId\n }\n if (this.trackingEvent && selectedOption) {\n eventArgs.rawData = {\n label: this.trackingEvent,\n text: selectedOption.text,\n price: selectedOption.price,\n prices: selectedOption.prices,\n participantIds: selectedOption.participantIds\n }\n }\n\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _mapSelectedOptionForPatch (selectedOption, oldOptions) {\n let participantIds = []\n const newServiceValue = selectedOption ? selectedOption.value : ''\n const oldServiceValue = this._getOldServiceValue(oldOptions)\n const oldOption = oldOptions.find(opt => opt.checked)\n const operationType = this._mapOperationType(newServiceValue, oldServiceValue)\n\n switch (operationType) {\n case operationTypeEnum.addOperation:\n case operationTypeEnum.swapOperation:\n if (!this.choosePerPersonIsAvailable || (this.choosePerPersonIsAvailable && this.choosePerPersonIsChecked)) {\n participantIds = selectedOption.appliesToParticipants.filter(appPart => selectedOption.participantIds.includes(appPart))\n } else {\n participantIds = selectedOption.appliesToParticipants\n }\n break\n case operationTypeEnum.removeOperation:\n participantIds = oldOptions && oldOptions.length > 0 ? oldOptions[0].participantIds : []\n break\n default:\n break\n }\n\n // Map services\n const newService = {\n code: (selectedOption) ? selectedOption.value : '',\n participants: participantIds,\n startDate: (selectedOption) ? selectedOption.startDate : null,\n endDate: (selectedOption) ? selectedOption.endDate : null\n }\n\n const oldService = oldOption\n ? {\n code: oldOption.value,\n participants: (!this.choosePerPersonIsChecked) ? participantIds : oldOption.participantIds,\n startDate: oldOption.startDate,\n endDate: oldOption.endDate\n }\n : null\n\n const body = {\n operationType,\n newService,\n oldService\n }\n\n return body\n }\n\n _getOldServiceValue (oldOptions) {\n let oldServiceValue = ''\n if (oldOptions) {\n const oldOption = oldOptions.find(opt => opt.checked)\n if (oldOption) {\n oldServiceValue = oldOption.value\n }\n }\n return oldServiceValue\n }\n\n _mapOperationType (serviceValue, oldServiceValue) {\n let operationType = operationTypeEnum.addOperation\n\n if (serviceValue && oldServiceValue) {\n operationType = operationTypeEnum.swapOperation\n } else if (oldServiceValue) {\n operationType = operationTypeEnum.removeOperation\n }\n\n return operationType\n }\n\n _attachEvents () {\n const choiceListElements = [...this.element.querySelectorAll(widgetQueries.choiceLists)]\n this.choiceListApis = choiceListElements.map(choiceListElement => choiceListElement[widgetQueries.choiceListApi])\n .filter(api => api)\n\n this.choiceListApis.forEach(choiceList => {\n choiceList.events.on('changeOptions', this._clickedOption.bind(this))\n })\n\n this._attachConditionsEvents()\n this._attachAppliesToAllParticipantsEvents()\n }\n\n _attachConditionsEvents () {\n this.conditionsChoiceListApi = this.conditionsChoiceList ? this.conditionsChoiceList[widgetQueries.choiceListApi] : null\n if (this.conditionsChoiceListApi) {\n this.conditionsChoiceListApi.events.on('changeOptions', (eventArgs) => { this._conditionsClicked(eventArgs) })\n }\n }\n\n _attachAppliesToAllParticipantsEvents () {\n if (this.appliesToAllParticipantsSwitch) {\n this.appliesToAllParticipantsSwitch.addEventListener('click', (event) => {\n event.preventDefault()\n this._appliesToAllParticipantsClicked(event)\n })\n }\n }\n\n _init (data) {\n const renderedHtml = BookingChoiceListTemplate(data)\n const newContent = elementFromString(renderedHtml)\n Component.initDocumentComponentsFromAPI(newContent)\n\n this._render(newContent)\n this._initHtmlElements()\n this._attachEvents()\n }\n\n _initHtmlElements () {\n this.conditionsElement = this.element.querySelector(widgetQueries.conditionsElement)\n this.conditionsChoiceList = this.conditionsElement ? this.conditionsElement.querySelector(widgetQueries.conditionsElementChoiceList) : null\n\n this.appliesToAllParticipantsElement = this.element.querySelector(widgetQueries.appliesToAllParticipantsElement)\n this.appliesToAllParticipantsSwitch = this.appliesToAllParticipantsElement ? this.appliesToAllParticipantsElement.querySelector(widgetQueries.appliesToAllParticipantsElementSwitch) : null\n }\n\n _updateWidgetData () {\n let widgetData\n\n let apiData = this.data.services && this.data.services.find(service => service.componentId === this.componentId)\n let configurationsSavedSessionStorage = null\n if (this.configurations && this.configurations.showAppliesToAllParticipants) {\n configurationsSavedSessionStorage = this._retrieveChoosePerPersonDataFromStorage()\n if (!configurationsSavedSessionStorage) {\n this._saveChoosePerPersonToSessionStorage(this.configurations.appliesToAllParticipantEnabledByDefault)\n }\n }\n\n if (apiData) {\n this._updateBookingBoxCollapse(apiData)\n\n this.serviceName = this._getServiceName(apiData)\n apiData = { ...apiData, ...{ participants: this.data.participants, rooms: this.data.rooms } }\n\n const appliesToAllParticipantsConfig = configurationsSavedSessionStorage || this._retrieveChoosePerPersonDataFromStorage()\n this.configurations = { ...this.configurations, ...appliesToAllParticipantsConfig }\n\n widgetData = this.dataMapper.mapService(apiData, this.configurations)\n\n if (widgetData?.rooms?.length > 0 && widgetData.rooms[0].participants?.length > 0 && widgetData.rooms[0].participants[0].choiceListInfo?.id) {\n const disabledId = widgetData.rooms[0].participants[0].choiceListInfo.id\n this.disabledValues[disabledId] = []\n\n widgetData.rooms.forEach((room) => {\n room.participants.slice(1).forEach((participant) => {\n const firstParticipant = room.participants[0].choiceListInfo?.items\n if (participant.choiceListInfo?.items?.length > 0) {\n participant.choiceListInfo?.items.forEach((item, index) => {\n if (item.disabled && !this.disabledValues[disabledId].includes(item.value) && !firstParticipant[index].disabled) {\n this.disabledValues[disabledId].push(item.value)\n }\n })\n }\n })\n })\n }\n\n if (this.track) {\n widgetData = { ...widgetData, track: this.track }\n }\n }\n\n if (widgetData) {\n super.showComponent()\n if (this.choiceListApis == null || this.choiceListApis.length === 0) {\n this._init(widgetData)\n }\n\n const switchInfo = widgetData.choosePerPerson?.switchInfo\n if (widgetData.choosePerPersonSelected && switchInfo && switchInfo.disabled) {\n this._saveChoosePerPersonToSessionStorage(widgetData.choosePerPersonSelected)\n }\n\n this.choosePerPersonIsChecked = widgetData.choosePerPersonSelected\n this.choosePerPersonIsAvailable = !!widgetData.choosePerPerson\n if (this.appliesToAllParticipantsSwitch) {\n const inputSwitch = this.appliesToAllParticipantsSwitch.querySelector('input')\n if (switchInfo && !switchInfo.disabled && inputSwitch && inputSwitch.disabled) {\n inputSwitch.disabled = false\n this.appliesToAllParticipantsSwitch.classList.remove('is-disabled')\n } else if (switchInfo && switchInfo.disabled && inputSwitch && !inputSwitch.disabled) {\n inputSwitch.disabled = true\n this.appliesToAllParticipantsSwitch.classList.add('is-disabled')\n }\n this._toggleChoiceListElementsVisibility()\n }\n\n const choiceListInfos = []\n widgetData.rooms.forEach(function (room) {\n room.participants.forEach(function (participant) {\n choiceListInfos.push(participant.choiceListInfo)\n })\n })\n\n let index = 0\n this.choiceListApis.forEach(choicelistApi => {\n if (!choiceListInfos[index]) {\n choicelistApi.setProp('options', [], { silent: true })\n choicelistApi.setProp('label', '', { silent: true })\n } else {\n choicelistApi.setProp('options', choiceListInfos[index].items, { silent: true })\n if (choiceListInfos[index].label) {\n choicelistApi.setProp('label', choiceListInfos[index].label, { silent: true })\n }\n }\n index++\n })\n if (this.choiceListApis || this.choiceListApis.length !== 0) {\n this._updateConditionsElement(widgetData)\n }\n this._updateMessagesElement(widgetData)\n this._trackInitialValues(apiData)\n } else {\n super.hideComponent()\n this._cleanUpComponentApi()\n }\n }\n\n _updateBookingBoxCollapse (apiData) {\n const selectedOptions = apiData.options.filter(option => option.isSelected)\n if (selectedOptions.length > 0) {\n const noneOptions = selectedOptions.filter(option => option.isNoneOption)\n if ((noneOptions.length > 0) && (selectedOptions.length === noneOptions.length)) {\n super.noOptionSelectedAndUpdateTitle()\n } else {\n super.setSuccessStateAndUpdateTitle()\n }\n }\n }\n\n _cleanUpComponentApi () {\n flush(this.bodyElement)\n this.choiceListApis = []\n }\n\n _getServiceName (data) {\n let serviceName = data.aName\n if (data.options) {\n const groupCodeArrays = data.options.filter(option => option.groupCode || '').map(option => option.groupCode || '')\n const uniqueGroupCodes = [...new Set(groupCodeArrays)]\n serviceName = uniqueGroupCodes.length === 1 ? uniqueGroupCodes[0] : data.aName\n }\n\n return cleanUpSpecialCharacters(serviceName) || ''\n }\n\n _toggleChoiceListElementsVisibility () {\n const bookingChoiceListElements = this.element.querySelectorAll(widgetQueries.bookingChoiceListItem)\n const bookingChoiceListHeadingRoomTitles = this.element.querySelectorAll(widgetQueries.bookingChoiceListHeadingRoomTitle)\n if (this.choosePerPersonIsChecked) {\n const appliesToAllParticipantSelected = this.appliesToAllParticipantsSwitch.querySelector('input:checked')\n if (appliesToAllParticipantSelected) {\n this._showAllBookingChoiceListElements(bookingChoiceListElements, bookingChoiceListHeadingRoomTitles)\n }\n } else {\n this._hideBookingChoiceListElements(bookingChoiceListElements, bookingChoiceListHeadingRoomTitles)\n }\n }\n\n _showAllBookingChoiceListElements (bookingChoiceListElements, bookingChoiceListHeadingRoomTitles) {\n bookingChoiceListElements.forEach((element, index) => {\n element.classList.remove(classNames.hidden)\n element.classList.remove(classNames.hideLabel)\n if (index === 0) {\n if (this.disabledValues[element.children[0].id]) {\n this.disabledValues[element.children[0].id].forEach(value => {\n const option = element.querySelector(`input[value=\"${value}\"]`)\n if (option) {\n option.disabled = false\n option.parentElement.classList.remove('is-disabled')\n }\n })\n }\n }\n })\n bookingChoiceListHeadingRoomTitles.forEach(element => element.classList.remove(classNames.hidden))\n }\n\n _hideBookingChoiceListElements (bookingChoiceListElements, bookingChoiceListHeadingRoomTitles) {\n bookingChoiceListElements.forEach((element, index) => {\n element.classList.add(classNames.hidden)\n if (index === 0) {\n element.classList.remove(classNames.hidden)\n element.classList.add(classNames.hideLabel)\n if (this.disabledValues[element.children[0].id]) {\n this.disabledValues[element.children[0].id].forEach(value => {\n const option = element.querySelector(`input[value=\"${value}\"]`)\n if (option) {\n option.disabled = true\n option.parentElement.classList.add('is-disabled')\n }\n })\n }\n }\n })\n bookingChoiceListHeadingRoomTitles.forEach(element => element.classList.add(classNames.hidden))\n }\n\n _updateConditionsElement (widgetData) {\n if (this.conditionsElement && widgetData.conditions) {\n const newContent = elementFromString(BookingConditionsTemplate(widgetData))\n Component.initDocumentComponentsFromAPI(newContent)\n flush(this.conditionsElement)\n this.conditionsElement.appendChild(newContent)\n this._initHtmlElements()\n this._attachConditionsEvents()\n }\n }\n\n _updateMessagesElement (widgetData) {\n const messagesElement = this.element.querySelector(widgetQueries.bookingMessagesElement)\n if (messagesElement) {\n messagesElement.innerHTML = widgetData.messages ? BookingMessageTemplate(widgetData) : ''\n }\n }\n\n /**\n * Track the initial values if tracking event is defined\n * (only in the first load)\n */\n _trackInitialValues (apiData) {\n if (!this.firstLoad && !this.trackingEvent) {\n return\n }\n if (apiData.rooms && apiData.rooms.length > 0) {\n this._trackInitialValuesForRooms(apiData)\n } else {\n this._trackInitialValuesForParticipants(apiData)\n }\n }\n\n _trackInitialValuesForRooms (apiData) {\n if (!apiData.rooms || apiData.rooms.length === 0) { return }\n apiData.rooms.forEach((room) => {\n const filteredParticipants = apiData.participants.filter((participant) => room.participantIds.includes(participant.id))\n this._mapOptionsForParticipants(filteredParticipants, apiData.options)\n })\n }\n\n _trackInitialValuesForParticipants (apiData) {\n if (!apiData.participants || apiData.participants.length === 0) { return }\n this._mapOptionsForParticipants(apiData.participants, apiData.options)\n }\n\n _mapOptionsForParticipants (participants, options) {\n if (!participants || participants.length === 0) { return }\n if (!options || options.length === 0) { return }\n\n participants.forEach((participant) => {\n options.forEach((option) => {\n if (option.isSelected && option.assignedParticipants && option.assignedParticipants.includes(participant.id)) {\n const rawData = {\n label: this.trackingEvent,\n text: option.displayText,\n price: option.price,\n prices: option.prices,\n participantIds: option.assignedParticipants\n }\n this.events.emit(bookingStepsEvents.BOOKING_ITEM_INITIAL_VALUES, rawData)\n }\n })\n })\n }\n\n _render (el) {\n flush(this.bodyElement)\n this.bodyElement.appendChild(el)\n }\n\n async handleValidationClient () {\n let validation = true\n const apiWithError = []\n this.choiceListApis && this.choiceListApis.forEach(api => {\n if (api.getProp('method') === 'single' && api.getSelectedValues().length === 0) {\n validation = api.validate().isValid || false\n if (!validation) { apiWithError.push(api) }\n }\n })\n\n if (!validation) {\n super.openCollapseElement()\n apiWithError.forEach(api => { this._showApiErrors(api) })\n }\n\n return validation\n }\n\n async handleConditionsValidation () {\n let validation = true\n let extraInformation = {}\n if (this.conditionsChoiceList) {\n const conditionsChoiceListApi = this.conditionsChoiceList[widgetQueries.choiceListApi]\n if (conditionsChoiceListApi) {\n const performValidation = conditionsChoiceListApi.validate()\n validation = performValidation.isValid\n if (!validation) {\n extraInformation = { serviceName: this.serviceName, fieldType: performValidation.fieldType || '' }\n conditionsChoiceListApi.enableErrors()\n conditionsChoiceListApi.validate()\n }\n }\n }\n\n return { isValid: validation, ...extraInformation }\n }\n\n _showApiErrors (api) {\n const options = api.getProp('options')\n const newOptions = []\n options.forEach(option => newOptions.push({ ...option, ...{ state: 'error' } }))\n api.setProp('options', newOptions, { silent: true })\n api.enableErrors()\n api.validate()\n }\n\n _readOptionsFromConfigurations (el) {\n if (el) {\n const innerHtml = el.innerHTML\n const configuration = JSON.parse(innerHtml)\n const priceConfigurations = super.readPriceConfigFromConfigurations(configuration)\n\n return {\n ...priceConfigurations,\n conditionGroup: configuration[configOptions.conditionGroup],\n showMessagesOnTop: configuration[configOptions.showMessagesOnTop],\n showAppliesToAllParticipants: configuration[configOptions.showAppliesToAllParticipants],\n appliesToAllParticipantEnabledByDefault: configuration[configOptions.appliesToAllParticipantEnabledByDefault],\n appliesToAllParticipantsLabel: configuration[configOptions.appliesToAllParticipantsLabel],\n ageCategoriesTexts: configuration[configOptions.ageCategoriesTexts],\n isLabelPricePerAgeCategoryAtStart: configuration[configOptions.isLabelPricePerAgeCategoryAtStart]\n }\n }\n }\n\n _saveChoosePerPersonToSessionStorage (isChecked = false) {\n const identifier = this._getComponentIdentifier()\n if (identifier) {\n const setChoosePerPersonSelectedData = { choosePerPersonSelected: isChecked }\n webStorage.session.set(identifier, setChoosePerPersonSelectedData)\n }\n }\n\n _getComponentIdentifier () {\n const identifier = `${this.draftId}-${this.componentId}`\n return identifier !== null ? identifier : undefined\n }\n\n _retrieveChoosePerPersonDataFromStorage () {\n let choosePerPersonSelectedData\n const identifier = this._getComponentIdentifier()\n if (identifier) {\n choosePerPersonSelectedData = webStorage.session.get(identifier)\n }\n return choosePerPersonSelectedData\n }\n}\n\nregisterWidget(BookingChoiceList, widgetApi)\n","import { ChoiceListTemplate } from '../../components/choice-list/c-choice-list.template'\nimport { BookingMessageTemplate } from '../booking-message/w-booking-message.template'\nimport { TitleTemplate, defaultTitleData } from '../../components/title/c-title.template'\nimport { BookingConditionsTemplate } from './w-booking-conditions.template'\nimport { BookingAppliesToAllParticipantsTemplate } from './w-booking-applies-to-all-participants.template'\n\n/**\n * The BookingChoiceListData contains all data needed to hydrate a BookingChoiceList view\n *\n * @typedef {Object} BookingChoiceListData\n *\n * @property {RoomData[]} rooms - The list of rooms to be shown\n * @property {String} RoomData.roomName - The name of the room\n * @property {ParticipantsData[]} RoomData.participants - Contains the list of participants in the room\n * @property {ChoiceListData} ParticipantsData.choiceListInfo - Contains all the options to be shown within the choice list component\n *\n */\n\nexport const defaultBookingChoiceListData = {\n title: {\n size: 'tiny',\n tag: 'h2'\n },\n choiceList: {\n variant: 'boxed'\n },\n attributes: {\n 'data-w-booking-choice-list__choice-list': ''\n },\n showMessagesOnTop: false,\n showAppliesToAllParticipants: false\n}\n\nexport const BookingChoiceListTemplate = (d) => {\n d = { ...defaultBookingChoiceListData, ...d }\n\n return `
\n ${d.messages && d.showMessagesOnTop\n ? `
\n ${d.messages ? BookingMessageTemplate(d) : ''}\n
`\n : ''}\n\n ${d.choosePerPerson\n ? `
\n ${d.choosePerPerson ? BookingAppliesToAllParticipantsTemplate(d) : ''}\n
`\n : ''}\n ${d.rooms.map(room => `\n ${room.participants && room.participants.length > 0\n ? `\n ${room.roomName\n ? `
\n ${TitleTemplate(Object.assign({}, defaultTitleData, { size: d.title.size, tag: d.title.tag, text: room.roomName }))}\n
`\n : ''}\n ${room.participants.map(participant => `\n
\n ${ChoiceListTemplate(Object.assign({}, defaultBookingChoiceListData, participant.choiceListInfo, { required: participant.choiceListInfo.required }, { requiredMessage: participant.choiceListInfo.requiredMessage }, { variant: d.choiceList.variant }, { track: d.track }, { attributes: { ...defaultBookingChoiceListData.attributes, ...participant.choiceListInfo.attributes } }))}\n
\n `).join('')}\n `\n : ''}\n `).join('')}\n ${d.conditions\n ? `
\n ${d.conditions ? BookingConditionsTemplate(d) : ''}\n
`\n : ''}\n ${d.messages && !d.showMessagesOnTop\n ? `
\n ${d.messages ? BookingMessageTemplate(d) : ''}\n
`\n : ''}\n
\n `\n}\n","import { SwitchTemplate } from '../../components/switch/c-switch.template'\n\nexport const BookingAppliesToAllParticipantsTemplate = (d) => {\n const result = `${d.choosePerPerson\n ? SwitchTemplate(Object.assign({}, d.choosePerPerson.switchInfo))\n : ''}\n `\n return result\n}\n","import { ChoiceListTemplate, defaultChoiceListData } from '../../components/choice-list/c-choice-list.template'\n\nexport const BookingConditionsTemplate = (d) => {\n const result = `${d.conditions\n ? ChoiceListTemplate(Object.assign({},\n defaultChoiceListData,\n d.conditions.choiceListInfo))\n : ''}\n `\n return result\n}\n","import { BookingMessageTemplate } from '../booking-message/w-booking-message.template'\nimport { ModalV2Template } from '../../components/modal-v2/c-modal-v2.template'\nimport { BtnTemplate, defaultButtonData } from '../../components/btn/c-btn.template'\n/**\n * The BookingComparisonTableData contains all data needed to hydrate a BookingChoiceList view\n *\n * @typedef {Object} defaultBookingComparisonTableData\n *\n */\n\nexport const defaultBookingComparisonTableData = {}\n\nexport const BookingComparisonTableTemplate = d => {\n d = { ...defaultBookingComparisonTableData, ...d }\n\n return `
\n ${d.messages && d.showMessagesOnTop\n ? `
\n ${d.messages ? BookingMessageTemplate(d) : ''}\n
`\n : ''\n }\n\n ${d.features && d.options ? cancellationInsuranceTableTemplate(d) : ''}\n\n ${d.messages && !d.showMessagesOnTop\n ? `
\n ${d.messages ? BookingMessageTemplate(d) : ''}\n
`\n : ''\n }\n
\n `\n}\n\nconst cancellationInsuranceTableTemplate = d => {\n const { features, options, texts } = d\n return `
\n
\n
${texts.topInformationText}
\n \n
\n
\n \n
\n ${features.map(feature => {\n if (feature.extraContent) {\n return `\n ${ModalV2Template({\n size: 'medium',\n id: `modal-${feature.code}`,\n async: false,\n closable: true,\n title: feature.extraContent.title,\n bodyContent: feature.extraContent.body\n })}\n `\n } else {\n return ''\n }\n }).join('')}\n
`\n}\n\nconst productTableTemplate = (serviceOption, texts) => {\n return `
  • \n ${serviceOption.bestValueText\n ? `
    \n ${serviceOption.bestValueText}\n
    `\n : ''\n }\n
    \n \n ${serviceOption.text}\n \n \n ${serviceOption.price}\n ${serviceOption.priceText}\n \n
    \n\n \n ${buttonGroupTemplate(serviceOption, texts)}\n
  • \n `\n}\n\nfunction selectButtonTemplate (serviceOption, texts) {\n const buttonHTMLClass = serviceOption.checked ? 'c-btn--flat-neutral u-color--state-success' : 'c-btn--neutral'\n return ``\n}\n\nfunction moreInfoButtonTemplate (serviceOption, texts) {\n if (!serviceOption || !serviceOption.extraInformation) {\n return ''\n }\n return `\n ${ModalV2Template({\n size: 'medium',\n id: `modal-${serviceOption.value}`,\n async: false,\n closable: true,\n title: serviceOption.extraInformation.title,\n bodyContent: serviceOption.extraInformation.body\n })}\n ${BtnTemplate({\n ...defaultButtonData,\n ...{\n text: texts.moreInfoTextButton,\n variant: 'flat-neutral',\n extraClasses: 'w-booking-comparison-table__more-info-button',\n jsApi: true,\n attributes: {\n 'data-modal-button-info': '',\n 'data-c-modal-v2__id': `modal-${serviceOption.value}`,\n 'data-c-modal-v2__action': 'open'\n }\n }\n })}`\n}\n\nfunction buttonGroupTemplate (serviceOption, texts) {\n return `\n
    \n ${selectButtonTemplate(serviceOption, texts)}\n ${moreInfoButtonTemplate(serviceOption, texts)}\n
    \n `\n}\n","export default class BookingComparisonTableDataMapper {\n map (apiService, configurations) {\n const widgetService = {\n features: apiService.features,\n options: apiService.options.map(option => this._mapOption(option)),\n texts: configurations ? this._mapTexts(configurations) : null,\n messages: apiService.warnings && apiService.warnings.length ? this._mapMessages(apiService) : null,\n showMessagesOnTop: configurations && configurations.showMessagesOnTop ? configurations.showMessagesOnTop : false\n }\n return widgetService\n }\n\n _mapOption (option) {\n return {\n value: option.code,\n text: option.text,\n price: option.percentage,\n priceText: option.percentageText,\n features: option.features,\n checked: option.isSelected,\n appliesToParticipants: option.appliesToParticipants,\n startDate: option.startDate,\n endDate: option.endDate,\n assignedParticipants: option.assignedParticipants,\n bestValueText: option.bestValueText,\n extraInformation: option.modalInformation\n ? {\n title: option.modalInformation.title,\n body: option.modalInformation.body\n }\n : null\n }\n }\n\n _mapTexts (configurations) {\n return {\n selectTextButton: configurations.selectTextButton || '',\n unselectTextButton: configurations.unselectTextButton || '',\n moreInfoTextButton: configurations.moreInfoTextButton || '',\n topInformationText: configurations.topInformationText || ''\n }\n }\n\n _mapMessages (apiService) {\n let messages = []\n if (apiService.warnings) {\n messages = apiService.warnings.map(warning => this._mapMessage(warning))\n }\n return messages\n }\n\n _mapMessage (warning) {\n const type = warning.type ? warning.type.toLowerCase() : 'info'\n const message = {\n title: warning.title,\n type,\n texts: [warning.message]\n }\n return message\n }\n}\n","import { BookingBox } from '../booking-box/main'\nimport { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { elementFromString, flush } from '../../../js/document/html-helper'\nimport Component from '../../../js/core/component/component'\nimport { BookingComparisonTableTemplate } from '../booking-comparison-table/w-booking-comparison-table.template'\nimport BookingComparisonTableDataMapper from '../booking-comparison-table/data-mapper'\nimport { bookingItemEvents } from '../../../js/document/event-types'\nimport registeredEvents from '../../../js/helpers/registered-events'\n\nconst widgetApi = 'w-booking-comparison-table'\nconst widgetQueries = {\n configurationElement: `[data-${widgetApi}__configuration]`,\n selectButton: `[data-${widgetApi}__select-button]`,\n buttonApi: 'c-btn',\n trackAttr: `data-${widgetApi}__track`\n}\n\nconst configOptions = {\n showMessagesOnTop: 'showMessagesOnTop',\n selectTextButton: 'selectTextButton',\n unselectTextButton: 'unselectTextButton',\n moreInfoTextButton: 'moreInfoTextButton',\n topInformationText: 'topInformationText'\n}\n\nconst attr = {\n optionCode: `data-${widgetApi}__option-code`\n}\n\nconst operationTypeEnum = {\n addOperation: 'Add',\n removeOperation: 'Remove',\n swapOperation: 'Swap',\n patchOperation: 'Patch'\n}\n\nexport default class BookingComparisonTable extends BookingBox {\n /**\n *\n * @param {HTMLElement} element - The HTML content\n */\n constructor (element) {\n super(element)\n this.element = element\n this.dataMapper = new BookingComparisonTableDataMapper()\n const filterConfigurationElement = this.element.querySelector(widgetQueries.configurationElement)\n this.configurations = this._readOptionsFromConfigurations(filterConfigurationElement)\n this.widgetData = null\n this.track = this.element.getAttribute(widgetQueries.trackAttr)\n\n registeredEvents.registerWidgetEvents(widgetApi, this.events, {\n ...this.element.hasAttribute(widgetQueries.trackAttr) && { track: this.track }\n })\n }\n\n _attachEvents () {\n const selectButtons = [...this.element.querySelectorAll(widgetQueries.selectButton)]\n this.selectButtonApis = selectButtons.map(selectButton => selectButton[widgetQueries.buttonApi])\n this.selectButtonApis.forEach(selectButton => {\n selectButton.events.on('clickButton', (element) => {\n const optionCode = element.getAttribute(attr.optionCode)\n this._optionSelected(optionCode, this.widgetData.options)\n })\n })\n }\n\n async handleFetched (data) {\n this.data = data.response\n this._updateWidgetData()\n return super.handleFetched(data.response)\n }\n\n _updateWidgetData () {\n const apiData = this.data.services && this.data.services.find(service => service.componentId === this.componentId)\n if (apiData) {\n this.widgetData = this.dataMapper.map(apiData, this.configurations)\n }\n\n if (this.widgetData) {\n super.showComponent()\n this._init(this.widgetData)\n } else {\n super.hideComponent()\n }\n }\n\n _init (data) {\n const renderedHtml = BookingComparisonTableTemplate(data)\n const newContent = elementFromString(renderedHtml)\n this._render(newContent)\n Component.initDocumentComponentsFromAPI(newContent)\n this._attachEvents()\n }\n\n _render (el) {\n flush(this.bodyElement)\n this.bodyElement.appendChild(el)\n }\n\n _optionSelected (optionCode, options) {\n const selectedOption = options.find(option => option.value === optionCode)\n\n const eventArgs = {\n method: this._method,\n url: this._url,\n body: this._mapSelectedOptionForPatch(selectedOption, options),\n componentId: this.componentId\n }\n eventArgs.rawData = {\n text: selectedOption.text,\n price: selectedOption.price\n }\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, eventArgs)\n }\n\n _mapSelectedOptionForPatch (selectedOption, oldOptions) {\n const newServiceValue = selectedOption ? selectedOption.value : ''\n const oldServiceValue = this._getOldServiceValue(oldOptions)\n const oldOption = oldOptions.find(opt => opt.checked)\n const operationType = this._mapOperationType(newServiceValue, oldServiceValue)\n\n // Map services\n const newService = {\n code: (selectedOption) ? selectedOption.value : '',\n participants: (selectedOption) ? selectedOption.appliesToParticipants : null,\n startDate: (selectedOption) ? selectedOption.startDate : null,\n endDate: (selectedOption) ? selectedOption.endDate : null\n }\n\n const oldService = oldOption\n ? {\n code: oldOption.value,\n participants: oldOption.appliesToParticipants,\n startDate: oldOption.startDate,\n endDate: oldOption.endDate\n }\n : null\n\n const body = {\n operationType,\n newService,\n oldService\n }\n return body\n }\n\n _getOldServiceValue (oldOptions) {\n let oldServiceValue = ''\n if (oldOptions) {\n const oldOption = oldOptions.find(opt => opt.checked)\n if (oldOption) {\n oldServiceValue = oldOption.value\n }\n }\n return oldServiceValue\n }\n\n _mapOperationType (serviceValue, oldServiceValue) {\n let operationType = operationTypeEnum.addOperation\n\n if (serviceValue && oldServiceValue) {\n operationType = operationTypeEnum.swapOperation\n } else if (oldServiceValue) {\n operationType = operationTypeEnum.removeOperation\n }\n\n return operationType\n }\n\n _readOptionsFromConfigurations (el) {\n if (el) {\n const innerHtml = el.innerHTML\n const configuration = JSON.parse(innerHtml)\n\n return {\n showMessagesOnTop: configuration[configOptions.showMessagesOnTop],\n selectTextButton: configuration[configOptions.selectTextButton],\n unselectTextButton: configuration[configOptions.unselectTextButton],\n moreInfoTextButton: configuration[configOptions.moreInfoTextButton],\n topInformationText: configuration[configOptions.topInformationText]\n }\n }\n }\n}\n\nregisterWidget(BookingComparisonTable, widgetApi)\n","export const bookingFilterableServices = {\n BOOKING_FILTERABLE_SERVICES_CONTAINER_TOGGLE: 'BookingFilterableServices.ContainerToggle',\n BOOKING_FILTERABLE_SERVICES_SWITCH_TOGGLE: 'BookingFilterableServices.SwitchToggle',\n BOOKING_FILTERABLE_SERVICES_CANCEL_BUTTON: 'BookingFilterableServices.CancelButton',\n BOOKING_FILTERABLE_SERVICES_FILTER_SPORT: 'BookingFilterableServices.FilterSport',\n BOOKING_FILTERABLE_SERVICES_FILTER_DURATION: 'BookingFilterableServices.FilterDuration',\n BOOKING_FILTERABLE_SERVICES_FILTER_MATERIAL_CATEGORY: 'BookingFilterableServices.MaterialCategory',\n BOOKING_FILTERABLE_SERVICES_FILTER_SPORT_LEVEL: 'BookingFilterableServices.SportLevel',\n BOOKING_FILTERABLE_SERVICES_CHOICE_LIST: 'BookingFilterableServices.ChoiceList',\n BOOKING_FILTERABLE_SERVICES_SAVE_BUTTON: 'BookingFilterableServices.SaveButton'\n}\n","import { defaultNumberStepperData, NumberStepperTemplate } from '../../components/number-stepper/c-number-stepper.template'\nimport { BookingFilterableServicesFilterTemplateRenderer } from './w-booking-filterable-services.template'\n\nexport const BookingFilterableServicesNumberStepperFilterTemplate = (filter, filters, service, configurations) => {\n return `\n
    \n ${NumberStepperTemplate({\n ...defaultNumberStepperData,\n id: `${filter.uid}`,\n value: filter.selectedValue,\n minValue: filter.values[0],\n maxValue: filter.values[filter.values.length - 1],\n label: filter.filterLabel,\n attributes: {\n 'data-w-booking-filterable-services__filters-number-stepper': '',\n 'data-w-booking-filterable-services__service-id': service.uid,\n 'data-w-booking-filterable-services__filter-type': filter.columnName\n }\n })}\n
    \n ${BookingFilterableServicesFilterTemplateRenderer(filters, service, configurations)}`\n}\n","import { LabelTemplate } from '../../components/label/c-label.template'\nimport { ButtonGroupTemplate } from '../../components/button-group/c-button-group.template'\nimport { BtnTemplate, defaultButtonData } from '../../components/btn/c-btn.template'\nimport { BookingFilterableServicesFilterTemplateRenderer } from './w-booking-filterable-services.template'\n\nexport const BookingFilterableServicesButtonGroupFilterTemplate = (filter, filters, service, configurations) => {\n return `\n
    \n ${LabelTemplate({\n text: filter.filterLabel,\n size: 'micro',\n extraClasses: 'w-booking-filterable-services-label e-form-label'\n })}\n ${ButtonGroupTemplate({\n id: `${filter.uid}`,\n extraClasses: '',\n variant: CheckButtonGroupChipsType(filter.filterType) ? 'chips' : '',\n html: `${filter.values.map(value => `\n ${BtnTemplate({\n ...defaultButtonData,\n ...{\n text: CheckButtonGroupChipsType(filter.filterType) ? `${value} ${service.durationFilterSuffixText}` : MapFilterItemText(value, filter.texts),\n type: 'submit',\n variant: '',\n block: false,\n extraClasses: `w-booking-filterable-services-btn${CheckButtonGroupChipsType(filter.filterType) ? '-chip' : ''}`,\n attributes: {\n 'data-w-booking-filterable-services__button-group-value': value\n }\n }\n })}\n `).join('')\n }`,\n attributes: {\n 'data-w-booking-filterable-services__filters-button-group': '',\n 'data-w-booking-filterable-services__service-id': service.uid,\n 'data-w-booking-filterable-services__filter-type': filter.columnName\n }\n })}\n
    \n ${BookingFilterableServicesFilterTemplateRenderer(filters, service, configurations)}`\n}\n\nconst CheckButtonGroupChipsType = (filterType) => {\n return filterType === 'buttonGroupChips'\n}\n\nconst MapFilterItemText = (filterValue, texts = null) => {\n if (!texts) { return filterValue }\n const textToBeReplaced = texts.find(text => text.key === filterValue)\n return (textToBeReplaced && textToBeReplaced.value) || filterValue\n}\n","import { ChoiceListTemplate } from '../../components/choice-list/c-choice-list.template'\nimport { BookingFilterableServicesFilterTemplateRenderer } from './w-booking-filterable-services.template'\n\nexport const BookingFilterableServicesChoiceListFilterTemplate = (filter, filters, service, configurations) => {\n return `\n
    \n ${ChoiceListTemplate({\n method: 'single',\n variant: 'boxed',\n highlighted: false,\n name: `${filter.uid}`,\n id: `${filter.uid}`,\n label: filter.filterLabel,\n extraClasses: '',\n disabled: false,\n unresolved: false,\n items: filter.values.map(value => { return mapFilterItem(value, filter.selectedValue, filter.texts) }),\n attributes: {\n 'data-w-booking-filterable-services__filters-choice-list': '',\n 'data-w-booking-filterable-services__service-id': service.uid,\n 'data-w-booking-filterable-services__filter-type': filter.columnName\n }\n })}\n
    \n ${BookingFilterableServicesFilterTemplateRenderer(filters, service, configurations)}`\n}\n\nconst mapFilterItem = (filterValue, selectedValue, texts = null) => {\n return {\n text: MapFilterItemText(filterValue, texts),\n id: filterValue,\n checked: selectedValue === filterValue,\n value: filterValue\n }\n}\n\nconst MapFilterItemText = (filterValue, texts = null) => {\n if (!texts) { return filterValue }\n const textToBeReplaced = texts.find(text => text.key === filterValue)\n return (textToBeReplaced && textToBeReplaced.value) || filterValue\n}\n","import { BookingFilterableServicesFilterTemplateRenderer } from './w-booking-filterable-services.template'\nimport { TabsNavTemplate } from '../../components/tabs/c-tabs__nav.template'\nimport { TabsContentWrapperTemplate } from '../../components/tabs/c-tabs__content-wrapper.template'\n\nexport const BookingFilterableServicesTabFilterTemplate = (filter, filters, service, configurations) => {\n return `\n
    \n ${TabsNavTemplate({\n id: filter.uid,\n extraClasses: 'w-booking-filterable-services__tabs__nav',\n swipeable: true,\n items: filter.values.map(value => ({\n text: MapFilterItemText(value, filter.texts),\n isOpen: value === filter.selectedValue,\n id: value,\n attributes: {\n 'data-value': value\n }\n })),\n attributes: {\n 'data-w-booking-filterable-services__service-id': service.uid,\n 'data-w-booking-filterable-services__filter-id': filter.uid,\n 'data-w-booking-filterable-services__filter-type': filter.columnName\n }\n })}\n ${TabsContentWrapperTemplate(\n {\n id: filter.uid,\n componentId: service.uid,\n html: CreateItemsDivs(filter),\n attributes: {\n 'data-w-booking-filterable-services__filters-tab-nav': '',\n 'data-w-booking-filterable-services__filter-type': filter.columnName\n }\n })}\n ${BookingFilterableServicesFilterTemplateRenderer(filters, service, configurations)}\n
    `\n}\n\nconst CreateItemsDivs = (filter) => {\n return filter.values.map(value => {\n return `
    `\n }).join('')\n}\n\nconst MapFilterItemText = (filterValue, texts = null) => {\n if (!texts) { return filterValue }\n const textToBeReplaced = texts.find(text => text.key === filterValue)\n return (textToBeReplaced && textToBeReplaced.value) || filterValue\n}\n","import { defaultDropdownData, DropdownTemplate } from '../../components/dropdown/c-dropdown.template'\nimport { BookingFilterableServicesFilterTemplateRenderer } from './w-booking-filterable-services.template'\n\nexport const BookingFilterableServicesDropdownFilterTemplate = (filter, filters, service, configurations) => {\n return `\n
    \n ${DropdownTemplate({\n ...defaultDropdownData,\n label: filter.filterLabel,\n icon: filter.filterIcon,\n id: `${filter.uid}`,\n options: [...filter.values.map(value => { return { default: false, text: value, selected: filter.selectedValue === value, value } })],\n attributes: {\n 'data-w-booking-filterable-services__filters-dropdown': '',\n 'data-w-booking-filterable-services__service-id': service.uid,\n 'data-w-booking-filterable-services__filter-type': filter.columnName\n }\n })} \n
    \n ${BookingFilterableServicesFilterTemplateRenderer(filters, service, configurations)}`\n}\n","\nexport const ReturnMissingDates = (dates) => {\n const result = dates.sort(function (a, b) {\n return Date.parse(a) - Date.parse(b)\n }).reduce((function (hash) {\n return function (p, c) {\n const missingDaysNo = (Date.parse(c) - hash.prev) / (1000 * 3600 * 24)\n if (hash.prev && missingDaysNo > 1) {\n let missingDate\n for (let i = 1; i < missingDaysNo; i++) { missingDate = new Date(hash.prev + i * (1000 * 3600 * 24)) }\n p.push(missingDate.toISOString().slice(0, 10))\n }\n hash.prev = Date.parse(c)\n return p\n }\n }(Object.create(null))), [])\n\n return result\n}\n","export const MapAvailableHoursToOptions = (timeConfig) => {\n const items = []\n for (let hour = timeConfig.minTime; hour < timeConfig.maxTime; hour++) {\n items.push([hour, 0])\n items.push([hour, timeConfig.interval])\n }\n\n const date = new Date()\n const formatter = new Intl.DateTimeFormat('en', { hour: 'numeric', minute: 'numeric', hour12: false })\n\n const options = items.map(time => {\n const [hour, minute] = time\n date.setHours(hour)\n date.setMinutes(minute)\n\n const formattedTime = formatter.format(date)\n return {\n default: false,\n text: formattedTime,\n value: formattedTime,\n selected: false\n }\n })\n\n return options\n}\n","import { defaultNumberStepperData, NumberStepperTemplate } from '../../components/number-stepper/c-number-stepper.template'\n\nexport const BookingFilterableServicesQuantityNumberStepperTemplate = (service, configurations) => {\n return service.useQuantity\n ? `
    \n ${NumberStepperTemplate({\n ...defaultNumberStepperData,\n id: 'quantitty-component-id',\n value: service.quantity,\n minValue: 1,\n maxValue: service.maxQuantity,\n label: service.quantityLabel,\n attributes: {\n 'data-w-booking-filterable-services__quantity-number-stepper': '',\n 'data-w-booking-filterable-services__service-id': service.uid\n }\n })}\n
    `\n : ''\n}\n","export const widgetApi = 'w-booking-filterable-services'\n\nexport const widgetQueries = {\n filterConfigurationElement: `[data-${widgetApi}__filters-configuration]`,\n // apis\n numberStepperApi: 'c-number-stepper',\n buttonGroupApi: 'c-button-group',\n choiceListApi: 'c-choice-list',\n tabNavApi: 'c-tabs',\n buttonApi: 'c-btn',\n collapseApi: 'c-collapse',\n sideDrawerApi: 'c-side-drawer',\n dropdownApi: 'c-dropdown',\n calendarFieldApi: 'c-calendar-field',\n // filters:\n numberStepperFilters: `[data-${widgetApi}__filters-number-stepper]`,\n buttonGroupFilters: `[data-${widgetApi}__filters-button-group]`,\n choiceListFilters: `[data-${widgetApi}__filters-choice-list]`,\n tabNavFilters: '[data-js-component=\"c-tabs\"]',\n dropdownFilters: `[data-${widgetApi}__filters-dropdown]`,\n dateFilters: `[data-${widgetApi}__filters-calendar-field]`,\n calendarField: '[data-c-calendar-field__filters-calendar]',\n dateCalendarDataModel: '[data-c-calendar-field__calendar-data-model]',\n timeSelector: `[data-${widgetApi}__time-dropdown]`,\n // Quantity component:\n quantityComponent: `[data-${widgetApi}__quantity-number-stepper]`,\n // Participants as Options:\n choiceListParticipantsAsOptions: `[data-${widgetApi}__service-participants-choice-list]`,\n participantAsOptionAdditionalText: `[data-${widgetApi}__service-participants-choice-list] .c-checkbox__additional-text`,\n // Options:\n choiceListServiceOptions: `[data-${widgetApi}__service-options-choice-list]`,\n // Buttons\n acceptButtons: `[data-${widgetApi}__service-accept-button]`,\n cancelButtons: `[data-${widgetApi}__service-cancel-button]`,\n // containers\n collapse: `[data-${widgetApi}__service-collapsible]`,\n sideDrawer: `[data-${widgetApi}__service-side-drawer]`,\n scrollable: '[data-c-collapse__scrollable]',\n // switch\n switch: `[data-${widgetApi}__service-switch]`,\n // container\n container: `[data-${widgetApi}__container]`,\n // Information items\n filterInfo: `[data-${widgetApi}__filter-info]`,\n filterInfoPrice: `[data-${widgetApi}__filter-info__price]`,\n filterInfoDescription: `[data-${widgetApi}__filter-info__price-description]`,\n emptyMessage: `[data-${widgetApi}__empty-message]`,\n validationMessages: `[data-${widgetApi}__validation-messages]`,\n timeMessages: `[data-${widgetApi}__time-messages]`\n}\n\nexport const attr = {\n serviceId: `data-${widgetApi}__service-id`,\n filterId: `data-${widgetApi}__filter-id`,\n tabsId: 'data-c-tabs__tab-id',\n datasetServiceId: 'wBookingFilterableServices__serviceId',\n buttonGroupValue: 'wBookingFilterableServices__buttonGroupValue',\n trackAttr: 'data-track',\n filterType: `data-${widgetApi}__filter-type`\n}\n\nexport const classNames = {\n hidden: 'is-hidden',\n isEmpty: 'is-empty',\n switchCheckbox: 'c-switch__checkbox',\n switchCircle: 'c-switch__circle'\n}\n\nexport const texts = {\n saveButton: 'saveButton',\n cancelButton: 'cancelButton',\n emptyOptions: 'emptyOptions',\n noServiceSelected: 'noServiceSelected',\n selectServiceForFree: 'selectServiceForFree',\n serviceSelectedInfoText: 'serviceSelectedInfoText',\n occupancyValidationMessage: 'occupancyValidationMessage',\n timeChangedMessage: 'timeChangedMessage'\n}\n\nexport const ageCategories = {\n adult: 'Adult',\n child: 'Child',\n baby: 'Baby'\n}\n","import { BookingFilterableServicesNumberStepperFilterTemplate } from './w-booking-filterable-services__number-stepper-filter.template'\nimport { BookingFilterableServicesButtonGroupFilterTemplate } from './w-booking-filterable-services__button-group-filter.template'\nimport { BookingFilterableServicesChoiceListFilterTemplate } from './w-booking-filterable-services__choice-list-filter.template'\nimport { BookingFilterableServicesTabFilterTemplate } from './w-booking-filterable-services__tab-filter.template'\nimport { BookingFilterableServicesDropdownFilterTemplate } from './w-booking-filterable-services__dropdown-filter.template'\nimport { BookingFilterableServicesDateTimeFilterTemplate } from './w-booking-filterable-services__date-time-filter.template'\nimport { BookingFilterableServicesOptionsTemplate } from './w-booking-filterable-services__options.template'\nimport { BookingFilterableServicesTimeDropdownTemplate } from './w-booking-filterable-services__time-dropdown.template'\nimport { BookingFilterableServicesQuantityNumberStepperTemplate } from './w-booking-filterable-services__quantity-number-stepper.template'\nimport { BookingFilterableServicesParticipantsChoiceListTemplate } from './w-booking-filterable-services__participants-choice-list.template'\nimport { BtnTemplate } from '../../components/btn/c-btn.template'\nimport { SwitchTemplate } from '../../components/switch/c-switch.template'\nimport { CollapseTemplate, defaultCollapseData } from '../../components/collapse/c-collapse.template'\nimport { CollapseTriggerTemplate, defaultCollapseTriggerData } from '../../components/collapse/c-collapse__trigger.template'\nimport { TitleTemplate } from '../../components/title/c-title.template'\nimport { SideDrawerTemplate, defaultSideDrawerData } from '../../components/side-drawer/c-side-drawer.template'\nimport { SideDrawerHeaderTemplate } from '../../components/side-drawer/c-side-drawer__header.template'\nimport { SideDrawerBodyTemplate } from '../../components/side-drawer/c-side-drawer__body.template'\nimport { BookingMessageTemplate } from '../booking-message/w-booking-message.template'\nimport { defaultPriceData, PriceTemplate } from '../../components/price/c-price.template'\nimport PriceFormatter from '../../../js/helpers/price-formatter'\nimport { ageCategories } from './constants'\n\nconst suffixIdentifiers = {\n collapse: '__collapse',\n sideDrawer: '__side-drawer'\n}\n\nexport const BookingFilterableServicesTemplate = (d) => {\n return `
    \n ${d.rooms.map(room => `\n
    \n ${room.roomName\n ? `
    \n ${TitleTemplate({ text: room.roomName })}\n
    `\n : ''}\n ${room.participants.map(participant => `\n
    \n ${participant.label\n ? `
    \n ${TitleTemplate({ text: participant.label })}\n
    `\n : ''\n }\n ${participant.services.map(service => `\n
    \n ${service.canBeUnselected\n ? `${ServiceTemplate({ service, texts: { ...d.texts, ...{ participantName: participant.label } }, configurations: d.configurations, participant })}`\n : `\n ${ServiceHeaderTemplate({ service, extraClasses: 'w-booking-filterable-services--collapse__header u-hidden--until@md', containerAttributes: null, configurations: d.configurations, texts: d.texts, participant })}\n ${ServiceHeaderTemplate({ service, extraClasses: 'w-booking-filterable-services--side__drawer__header u-hidden--from@md', containerAttributes: null, configurations: d.configurations, texts: d.texts, participant })}\n `\n }\n
    `).join('')}\n
    `).join('')}\n
    `).join('')}\n
    `\n}\n\nconst ServiceTemplate = (d) => {\n const { service, texts, configurations, participant } = d\n // Collapse\n const dataAttributesCollapse = `data-c-collapse__id=\"${service.uid}${suffixIdentifiers.collapse}\" data-w-booking-filterable-services__container`\n // SideDrawer\n const dataAttributesSideDrawer = `data-c-side-drawer__id=\"${service.uid}${suffixIdentifiers.sideDrawer}\" data-w-booking-filterable-services__container`\n const bodyTemplate = `
    ${texts.participantName ? TitleTemplate({ text: texts.participantName }) : ''}
    \n ${ServiceBodyTemplate(service, texts, configurations)}\n ${ServiceBodyButtons(service, texts)}`\n const data = {\n ...defaultSideDrawerData,\n ...{\n id: service.uid + suffixIdentifiers.sideDrawer,\n extraClasses: 'w-booking-filterable-services-side-drawer__service__content',\n until: 'md',\n attributes: {\n 'data-w-booking-filterable-services__service-side-drawer': ''\n },\n html: `${SideDrawerHeaderTemplate({ title: service.title, id: service.uid + suffixIdentifiers.sideDrawer, closable: true, extraClasses: 'w-booking-filterable-services__service-title--side-drawer' })}\n ${SideDrawerBodyTemplate({ html: bodyTemplate })}`\n }\n }\n\n return `\n ${ServiceHeaderTemplate({ service, extraClasses: 'w-booking-filterable-services--collapse__header u-hidden--until@md', containerAttributes: dataAttributesCollapse, configurations, texts, participant })}\n ${ServiceHeaderTemplate({ service, extraClasses: 'w-booking-filterable-services--side__drawer__header u-hidden--from@md', containerAttributes: dataAttributesSideDrawer, configurations, texts, participant })}\n ${CollapseTemplate({\n ...defaultCollapseData,\n ...{\n id: service.uid + suffixIdentifiers.collapse,\n extraClasses: 'w-booking-filterable-services-collapse__service__content',\n collapseFrom: 'md',\n html: `
    \n ${SideDrawerTemplate(data)}\n
    `,\n attributes:\n {\n 'data-c-collapse__scrollable': '',\n 'data-c-collapse__scrollable--safe-margin': '60',\n 'data-w-booking-filterable-services__service-collapsible': '',\n 'data-w-booking-filterable-services__service-id': service.uid\n }\n }\n })\n }\n `\n}\n\nconst GetTextForServiceHeader = (service, texts, participant) => {\n let text = ''\n if (service.selectedOption) {\n if (service.useQuantity && service.quantity > 0 && texts.serviceSelectedInfoText) {\n text = `(${service.quantity} ${texts.serviceSelectedInfoText})`\n } else if (service.showParticipantsAsOptions && texts.serviceSelectedInfoText) {\n const optionsSelected = service.participants.filter(option => option.checked).length\n if (optionsSelected > 0) {\n text = `(${optionsSelected} ${texts.serviceSelectedInfoText})`\n }\n } else {\n text = service.selectedOption.displayText\n }\n } else if (service.noneOption) {\n text = service.noneOption.displayText || texts.noServiceSelected || ''\n } else if (participant.ageCategory && participant.ageCategory === ageCategories.child && areSomeServiceOptionsFreeForParticipant(service, participant.id)) {\n text = texts.selectServiceForFree || ''\n } else {\n text = texts.noServiceSelected || ''\n }\n return text\n}\n\nconst areSomeServiceOptionsFreeForParticipant = (service, participantId) => {\n return service.options.filter(option => option.appliesToParticipants.includes(participantId)).some(option => option.price === 0)\n}\n\nconst ServiceHeaderTemplate = (d) => {\n const { service, extraClasses, containerAttributes, configurations, texts, participant } = d\n const text = GetTextForServiceHeader(service, texts, participant)\n const price = (service.selectedOption)\n ? service.totalPrice\n : service.noneOption ? (service.noneOption.price !== 0 ? service.noneOption.price : '') : ''\n\n const isSwitchChecked = service.selectedOption && !service.selectedOption.isNoneOption\n\n const htmlHeader = `\n
    \n ${SwitchTemplate({\n id: `${service.uid}-switch`,\n text: SwitchText(service.title, text),\n checked: isSwitchChecked,\n disabled: !service.canBeUnselected,\n dataset: {\n 'w-booking-filterable-services__service-switch': '',\n 'w-booking-filterable-services__service-id': service.uid\n }\n })}\n
    \n ${ServicePriceTemplate(price, configurations.price)}\n ${service.canBeUnselected\n ? `${CollapseTriggerTemplate({ ...defaultCollapseTriggerData, ...{ id: service.uid + suffixIdentifiers.collapse, smooth: true, arrow: true, extraClasses: 'w-booking-filterable-services__header-trigger' } })}`\n : ''\n }\n
    \n
    `\n\n return htmlHeader\n}\n\nconst SwitchText = (serviceTitle, serviceText) => {\n return `\n ${serviceTitle}\n \n \n ${serviceText}\n `\n}\n\nconst ServiceBodyTemplate = (service, texts, configurations) => {\n return `\n
    \n ${BookingFilterableServicesFilterTemplateRenderer([...service.filters], service, configurations)}\n
    \n
    \n ${service.totalPrice\n ? ServicePriceTemplate(service.totalPrice, configurations.price)\n : service.selectedOption && service.selectedOption.price ? ServicePriceTemplate(service.selectedOption.price, configurations.price) : ''}\n
    \n
    \n
    \n
    \n ${FilterableServicesOptionsEmpty(service, texts)}\n `\n}\n\nexport const ServicePriceTemplate = (value, priceConfig) => {\n return typeof (value) === 'number'\n ? PriceTemplate({\n ...defaultPriceData,\n size: 'small',\n value: PriceFormatter.toFormattedText(value, {\n numberOfDecimals: priceConfig.numberOfDecimals,\n decimalSeparator: priceConfig.decimalSeparator\n }),\n currency: priceConfig.currencySymbol,\n currencyPosition: priceConfig.isCurrencyAtStart ? 'before' : 'after'\n })\n : ''\n}\n\nconst FilterableServicesOptionsEmpty = (service, texts) => {\n let html = ''\n if (texts.emptyOptions) {\n const messageData = {\n extraClasses: '',\n messages: [\n {\n type: 'error',\n texts: [texts.emptyOptions]\n }\n ]\n }\n html = `
    ${BookingMessageTemplate(messageData)}
    `\n }\n return html\n}\n\nconst ServiceBodyButtons = (service, texts) => {\n return `\n
    \n ${BtnTemplate({\n jsApi: true,\n text: texts.cancelButton,\n variant: 'flat-neutral',\n extraClasses: 'w-booking-filterable-services__cancel-btn',\n attributes:\n {\n 'data-w-booking-filterable-services__service-cancel-button': '',\n 'data-w-booking-filterable-services__service-id': service.uid\n }\n })}\n ${BtnTemplate({\n jsApi: true,\n text: texts.saveButton,\n variant: 'trust',\n extraClasses: 'w-booking-filterable-services__accept-btn',\n attributes:\n {\n 'data-w-booking-filterable-services__service-accept-button': '',\n 'data-w-booking-filterable-services__service-id': service.uid\n }\n })}\n
    \n `\n}\n\n/**\n * This is the recurrency logic, where everything happens ;)\n * 1 - Gets a list of filters (and options)\n * 2.1 - If list if empty renders the options and stops processing\n * 2.2 - If list contains filters\n * - Get the first filter of the list and remove it from the list\n * - Passes the new list and the filter to the specific template renderer\n * that will call BookingFilterableServicesFilterTemplateRenderer (back to step 1)\n */\nexport const BookingFilterableServicesFilterTemplateRenderer = (filters, service, configurations) => {\n const filter = filters ? filters.shift() : null\n return !filter\n ? GetBottomSectionHtml(service, configurations)\n : filter.filterType === 'numberStepper'\n ? BookingFilterableServicesNumberStepperFilterTemplate(filter, filters, service, configurations)\n : filter.filterType === 'dropdown'\n ? BookingFilterableServicesDropdownFilterTemplate(filter, filters, service, configurations)\n : filter.filterType === 'dateTime'\n ? BookingFilterableServicesDateTimeFilterTemplate(filter, filters, service, configurations)\n : filter.filterType === 'buttonGroup' || filter.filterType === 'buttonGroupChips'\n ? BookingFilterableServicesButtonGroupFilterTemplate(filter, filters, service, configurations)\n : filter.filterType === 'choiceList'\n ? BookingFilterableServicesChoiceListFilterTemplate(filter, filters, service, configurations)\n : filter.filterType === 'tabSelector'\n ? BookingFilterableServicesTabFilterTemplate(filter, filters, service, configurations)\n : ''\n}\n\nconst GetBottomSectionHtml = (service, configurations) => {\n const quantityHtml = service.useQuantity ? BookingFilterableServicesQuantityNumberStepperTemplate(service, configurations) : ''\n const participantsHtml = service.showParticipantsAsOptions ? BookingFilterableServicesParticipantsChoiceListTemplate(service) : ''\n const timeHtml = service.addTime ? BookingFilterableServicesTimeDropdownTemplate(service, configurations) : ''\n const optionsHtml = BookingFilterableServicesOptionsTemplate(service, configurations)\n const validationMessagesHTML = '
    '\n const timeMessagesHTML = '
    '\n return timeHtml + quantityHtml + participantsHtml + optionsHtml + validationMessagesHTML + timeMessagesHTML\n}\n","import { BookingFilterableServicesFilterTemplateRenderer } from './w-booking-filterable-services.template'\nimport { CalendarFieldTemplate } from '../../components/calendar-field/c-calendar-field.template'\nimport { ReturnMissingDates } from './calendar-helper'\n\nexport const BookingFilterableServicesDateTimeFilterTemplate = (filter, filters, service, configurations) => {\n return `\n
    \n \n ${CalendarFieldTemplate({\n uid: filter.uid,\n date: {\n label: filter.filterLabel,\n icon: filter.filterIcon\n },\n acceptButtonText: service.dateAcceptButton,\n cancelButtonText: service.dateCancelButton,\n attributes: {\n 'data-c-calendar-field__filters-calendar': ''\n }\n })\n }\n
    \n ${BookingFilterableServicesFilterTemplateRenderer(filters, service, configurations)}`\n}\n","import { BookingChoiceListTemplate } from '../booking-choice-list/w-booking-choice-list.template'\n\nexport const BookingFilterableServicesParticipantsChoiceListTemplate = (service) => {\n const data = {\n rooms: [\n {\n participants: [\n {\n choiceListInfo: {\n id: service.uid,\n name: service.uid,\n method: 'multiple',\n variant: 'boxed',\n highlighted: false,\n label: service.optionsLabel,\n extraClasses: 'w-booking-filterable-services__service-participants-choice-list',\n disabled: false,\n unresolved: false,\n attributes: {\n 'data-w-booking-filterable-services__service-participants-choice-list': '',\n 'data-w-booking-filterable-services__service-id': service.uid\n },\n items: service.participants\n }\n }\n ]\n }\n ]\n }\n return `
    \n ${BookingChoiceListTemplate(data)}\n
    `\n}\n","import { defaultDropdownData, DropdownTemplate } from '../../components/dropdown/c-dropdown.template'\nimport { MapAvailableHoursToOptions } from './time-helper'\n\nexport const BookingFilterableServicesTimeDropdownTemplate = (service, configurations) => {\n return `
    \n ${DropdownTemplate({\n ...defaultDropdownData,\n label: '',\n icon: 'clock',\n id: `${service.uid}-time`,\n options: MapAvailableHoursToOptions(configurations.timeConfiguration),\n extraClasses: 'w-booking-filterable-services__time-dropdown',\n attributes: {\n 'data-w-booking-filterable-services__time-dropdown': '',\n 'data-w-booking-filterable-services__service-id': service.uid\n }\n })}\n
    `\n}\n","import { BookingChoiceListTemplate } from '../booking-choice-list/w-booking-choice-list.template'\n\nexport const BookingFilterableServicesOptionsTemplate = (service, configurations) => {\n const data = {\n rooms: [\n {\n participants: [\n {\n choiceListInfo: {\n id: service.uid,\n name: service.uid,\n method: 'single',\n variant: 'boxed',\n highlighted: false,\n label: service.optionsLabel,\n extraClasses: 'w-booking-filterable-services__service-options-choice-list',\n disabled: false,\n unresolved: false,\n attributes: {\n 'data-w-booking-filterable-services__service-options-choice-list': '',\n 'data-w-booking-filterable-services__service-id': service.uid\n },\n items: service.filteredOptions\n }\n }\n ]\n }\n ]\n }\n return `
    \n ${BookingChoiceListTemplate(data)}\n
    `\n}\n","import { BookingMessageTemplate } from '../booking-message/w-booking-message.template'\n\nexport const FilterableServicesWarningMessage = (text) => {\n let html = ''\n if (text) {\n const messageData = {\n extraClasses: '',\n messages: [\n {\n type: 'warning',\n texts: [text]\n }\n ]\n }\n html = BookingMessageTemplate(messageData)\n }\n return html\n}\n","export const CalculateServicePrice = (quantity, optionPrice) => {\n const totalPrice = quantity > 0 ? quantity * optionPrice : 0\n\n return totalPrice\n}\n","/**\n * List of types for the booking-filtrable-services widget\n *\n * perQuantity ==> DINNERVOUCHER\n * perParticipant ==> SKI ANCILLARIES\n * participantsAsOptions ==> BRIDGE/EXCURSIONS\n * participantsAsOptionsDynamic ==> GOLF\n */\nexport const componentTypeEnum = {\n PerParticipant: 'PerParticipant',\n PerQuantity: 'PerQuantity',\n ParticipantsAsOptions: 'ParticipantsAsOptions',\n ParticipantsAsOptionsDynamic: 'ParticipantsAsOptionsDynamic'\n}\n\n/**\n *\n */\nexport const operationTypeEnum = {\n Add: 'Add',\n Remove: 'Remove',\n Patch: 'Patch',\n Swap: 'Swap'\n}\n\nexport const renderTypeEnum = {\n PerParticipant: 'PerParticipant',\n PerBooking: 'PerBooking'\n}\n","import { componentTypeEnum, renderTypeEnum } from './enums'\nimport { CalculateServicePrice } from './service-helper'\nimport PriceFormatter from '../../../js/helpers/price-formatter'\n\nexport default class BookingFilterableServicesDataMapper {\n /**\n * Maps API response data to widget data\n *\n * @typedef {Object} BookingFilterableServicesData\n *\n * @property {Object} [apiResponseData] - Api response data\n * @property {Object} [servicesData] - Configured services (in cshtml view)\n * @property {Object} [texts] - Translations\n * @property {Object} [configurations] - Configurations from cshtml\n */\n mapWidgetData (apiResponseData, servicesData, texts, configurations) {\n const componentType = configurations.componentType\n const apiRooms = this._checkRenderTypePerParticipant(componentType) ? apiResponseData.rooms : apiResponseData.rooms.slice(0, 1)\n const componentId = apiResponseData.componentId\n const widgetData = {\n texts,\n configurations,\n rooms: apiRooms\n ? apiRooms.map(apiRoom => {\n return this._mapRoom(apiRoom, apiResponseData, componentId, servicesData, componentType, configurations)\n })\n : ''\n }\n\n const rows = []\n const emptyRows = []\n const filterDefaultValuesPerParticipant = []\n if (widgetData.rooms) {\n widgetData.rooms.forEach(room => {\n room.participants.forEach(participant => {\n participant.services.forEach(service => {\n if (service.options.length > 0) {\n const filters = []\n service.filters.forEach(filter => {\n filters[filter.uid] = {\n columnName: filter.columnName,\n values: filter.values,\n texts: filter.texts\n }\n }, this)\n\n const row = {\n uid: service.uid,\n filters,\n options: service.options,\n selectedOption: service.selectedOption,\n noneOption: service.noneOption,\n participantId: participant.id\n }\n rows[row.uid] = row\n } else {\n emptyRows.push(service.uid)\n }\n }, this)\n\n const participantFilters = participant.services.reduce(function (accumulator, currentValue) {\n return [...accumulator, ...currentValue.filters]\n }, [])\n const filterSelectedDefaultValue = participantFilters.find(filter => filter.definesDefaultValue)\n if (filterSelectedDefaultValue) {\n filterDefaultValuesPerParticipant.push({\n participantId: participant.id,\n columnName: filterSelectedDefaultValue.columnName,\n defaultValue: filterSelectedDefaultValue.selectedValue,\n startDateDefaultValue: filterSelectedDefaultValue.selectedStartDateValue\n })\n }\n }, this)\n }, this)\n widgetData.rows = rows\n widgetData.emptyRows = emptyRows\n widgetData.filterDefaultValuesPerParticipant = filterDefaultValuesPerParticipant\n }\n\n return widgetData\n }\n\n /**\n * Maps API response options to ChoiceListTemplate items model\n */\n mapOptions (apiOptions, selectedOption, noneOption, participantId, configurations, previousSelection) {\n const selectedOptionPrice = selectedOption ? selectedOption.price : noneOption ? noneOption.price : 0\n const shouldFilterByPreviousData = previousSelection && previousSelection.startDate\n const options = apiOptions.map(apiOption => {\n const text = apiOption.displayText\n const checked = !shouldFilterByPreviousData && apiOption.isSelected && apiOption.assignedParticipants && apiOption.assignedParticipants.includes(participantId)\n return this._mapOption(apiOption, selectedOptionPrice, apiOption.code, text, checked, null, configurations, participantId)\n })\n\n if (shouldFilterByPreviousData && options && options.length > 0) {\n let index = selectedOption\n ? options.findIndex(option => option.value === selectedOption.value)\n : options.findIndex(option => option.startDate === previousSelection.startDate)\n\n index = index === -1 ? 0 : index\n options[index].checked = true\n options[index].assignedParticipants = this._addParticipantToAssignedParticipants(options[index], participantId)\n }\n return options\n }\n\n mapParticipantsAsOptions (apiOptions, participants, configurations) {\n const options = []\n\n participants.forEach(participant => {\n apiOptions.forEach(apiOption => {\n if (apiOption.appliesToParticipants.includes(participant.id)) {\n const text = participant.firstName || participant.alternativeName\n const checked = apiOption.assignedParticipants ? apiOption.assignedParticipants.includes(participant.id) : false\n const value = participant.id\n const code = `${apiOption.code}-${Math.floor(Math.random() * 10000)}`\n const option = this._mapOption(apiOption, null, code, text, checked, value, configurations, participant.id)\n options.push(option)\n }\n }, this)\n }, this)\n return options\n }\n\n _addParticipantToAssignedParticipants (option, participantId) {\n const assignedParticipants = option.assignedParticipants ? option.assignedParticipants : [participantId]\n if (assignedParticipants.indexOf(participantId) < 0) {\n assignedParticipants.push(participantId)\n }\n return assignedParticipants\n }\n\n /**\n * Maps to ChoiceListTemplate item model\n */\n _mapOption (apiOption, selectedOptionPrice, code, text, checked, value, configurations, participantId = null) {\n const uniqueId = `${apiOption.code}-${apiOption.startDate}-${apiOption.endDate}-${participantId}`\n const isDisabled = (apiOption.disabledParticipants ? apiOption.disabledParticipants.includes(participantId) : false)\n\n return {\n id: uniqueId,\n name: uniqueId,\n code,\n text,\n checked,\n disabled: isDisabled,\n price: apiOption.price,\n value: value || uniqueId,\n appliesToParticipants: apiOption.appliesToParticipants || null,\n assignedParticipants: apiOption.assignedParticipants || null,\n disabledParticipants: apiOption.disabledParticipants || null,\n additionalText: this._getOptionAdditionalText(apiOption, selectedOptionPrice, configurations.price),\n startDate: apiOption.startDate,\n endDate: apiOption.endDate,\n time: apiOption.time ? apiOption.time : null,\n quantity: apiOption.quantity,\n occupancy: apiOption.occupancy ? apiOption.occupancy : null\n }\n }\n\n _getOptionAdditionalText (apiOption, selectedOptionPrice, priceConfiguration) {\n const optionPrice = apiOption.price || 0\n const optionCalculatedPrice = selectedOptionPrice ? optionPrice - selectedOptionPrice : optionPrice\n const optionPriceSymbol = optionCalculatedPrice >= 0 ? '+' : '-'\n const additionalText = this._checkIfOptionServiceTypeIsPerParticipant(apiOption)\n ? `${optionPriceSymbol} ${PriceFormatter.toFormattedText(Math.abs(optionCalculatedPrice), priceConfiguration)}`\n : '-'\n return additionalText\n }\n\n _mapRoom (apiRoom, apiResponseData, componentId, servicesData, componentType, configurations) {\n const participants = this._checkRenderTypePerParticipant(componentType) ? apiResponseData.participants : apiResponseData.participants.slice(0, 1)\n const widgetRoom = {\n id: apiRoom.id,\n uid: this._generateUniqueId(componentId, apiRoom),\n roomName: this._checkRenderTypePerParticipant(componentType) ? apiRoom.name : '',\n participants: participants.filter(participant => apiRoom.participantIds.includes(participant.id) &&\n apiResponseData.options.some(option => option.appliesToParticipants.includes(participant.id))\n ).map(apiParticipant => this._mapParticipant(apiParticipant, apiRoom, apiResponseData, componentId, servicesData, componentType, configurations))\n }\n return widgetRoom\n }\n\n _mapParticipant (apiParticipant, apiRoom, apiResponseData, componentId, servicesData, componentType, configurations) {\n const apiOptions = apiResponseData.options.filter(apiOption => apiOption.appliesToParticipants.includes(apiParticipant.id)).map(apiOption => ({ ...apiOption, ...{ value: `${apiOption.code}-${apiOption.startDate}-${apiOption.endDate}-${apiParticipant.id}` } }))\n const widgetParticipant = {\n label: this._checkRenderTypePerParticipant(componentType) ? apiParticipant.firstName || apiParticipant.alternativeName : '',\n id: apiParticipant.id,\n ageCategory: apiParticipant.ageCategory,\n uid: this._generateUniqueId(componentId, apiRoom, apiParticipant),\n services: this._mapServices(componentId, apiOptions, apiParticipant, apiRoom, apiResponseData.participants, servicesData, componentType, configurations)\n }\n return widgetParticipant\n }\n\n _checkRenderTypePerParticipant (componentType) {\n if (this._mapRenderType(componentType) !== renderTypeEnum.PerParticipant) return false\n return true\n }\n\n _mapServices (componentId, apiOptions, apiParticipant, apiRoom, participants, servicesData, componentType, configurations) {\n const services = []\n servicesData.forEach(serviceData => {\n const options = this._filterOptions(apiOptions, serviceData.baseFilterColumn, serviceData.baseFilterValue)\n let optionsWithoutNoneOption = options.filter(option => !option.isNoneOption)\n let uid = this._generateUniqueId(componentId, apiRoom, apiParticipant, serviceData)\n const serviceTitle = serviceData.serviceTitle\n let selectedOption = options.filter(option => option.isSelected && option.assignedParticipants.includes(apiParticipant.id))[0]\n let noneOption = options.filter(option => option.isNoneOption)[0]\n\n // If componentType is ParticipantsAsOptions, we need to generate a new service\n // for each option in order to be able to select diferent options\n if (componentType === componentTypeEnum.ParticipantsAsOptions) {\n optionsWithoutNoneOption.forEach(option => {\n uid = `${this._generateUniqueId(componentId, apiRoom, apiParticipant, serviceData)}-${option.id}`\n selectedOption = option.isSelected ? option : null\n noneOption = option.isNoneOption ? option : null\n const newOptions = [option]\n const filters = this._mapFilters(componentId, apiRoom, apiParticipant, serviceData, newOptions, selectedOption, uid)\n const service = this._generateServiceObject({ uid, selectedOption, noneOption, optionsWithoutNoneOption: newOptions, filters, participants, serviceData, serviceTitle: option.displayText, apiParticipant, configurations, componentType })\n\n services.push(service)\n }, this)\n } else if (componentType === componentTypeEnum.ParticipantsAsOptionsDynamic) {\n // If componentType is ParticipantsAsOptionsDynamic, we need to generate a new service\n // for each selected option and one blank service in order to be able to select more options\n const selectedOptions = optionsWithoutNoneOption.filter(option => option.isSelected)\n\n // Service for each selected option\n selectedOptions.forEach(option => {\n const uid = `${this._generateUniqueId(componentId, apiRoom, apiParticipant, serviceData)}-${option.id}`\n const selectedOption = option.isSelected ? option : null\n const noneOption = option.isNoneOption ? option : null\n const filters = this._mapFilters(componentId, apiRoom, apiParticipant, serviceData, optionsWithoutNoneOption, selectedOption, uid)\n const service = this._generateServiceObject({ uid, selectedOption, noneOption, optionsWithoutNoneOption, filters, participants, serviceData, serviceTitle: option.displayText, apiParticipant, configurations, componentType })\n services.push(service)\n }, this)\n\n // Blank Service with all options\n selectedOption = null\n // Unset assignedParticipants in order to start with blank assignation\n optionsWithoutNoneOption = optionsWithoutNoneOption.map(option => ({ ...option, assignedParticipants: [] }))\n const filters = this._mapFilters(componentId, apiRoom, apiParticipant, serviceData, optionsWithoutNoneOption, selectedOption, uid)\n const service = this._generateServiceObject({ uid, selectedOption, noneOption, optionsWithoutNoneOption, filters, participants, serviceData, serviceTitle, apiParticipant, configurations, componentType })\n services.push(service)\n } else {\n selectedOption = selectedOption || null\n const filters = this._mapFilters(componentId, apiRoom, apiParticipant, serviceData, optionsWithoutNoneOption, selectedOption, uid)\n const service = this._generateServiceObject({ uid, selectedOption, noneOption, optionsWithoutNoneOption, filters, participants, serviceData, serviceTitle, apiParticipant, configurations, componentType })\n services.push(service)\n }\n }, this)\n\n return services\n }\n\n _generateServiceObject (data) {\n const { uid, selectedOption, noneOption, optionsWithoutNoneOption, filters, participants, serviceData, serviceTitle, apiParticipant, configurations, componentType } = data\n const totalPrice = this._calculateServiceTotalPrice(selectedOption, serviceData.useQuantity, serviceData.showParticipantsAsOptions, apiParticipant)\n const filteredOptions = this.mapOptions(this._getFilteredOptions(optionsWithoutNoneOption, filters), selectedOption, noneOption, apiParticipant.id, configurations)\n\n const service = {\n uid,\n options: optionsWithoutNoneOption,\n selectedOption,\n noneOption,\n filters,\n filteredOptions,\n canBeUnselected: this._mapCanUnselect({ noneOption, options: optionsWithoutNoneOption, participantId: apiParticipant.id, componentType }),\n title: serviceTitle,\n optionsLabel: serviceData.optionsLabel,\n quantityLabel: serviceData.quantityLabel,\n useQuantity: serviceData.useQuantity,\n maxQuantity: serviceData.maxQuantity,\n addTime: serviceData.addTime,\n dateAcceptButton: serviceData.dateAcceptButton,\n dateCancelButton: serviceData.dateCancelButton,\n durationFilterSuffixText: serviceData.durationFilterSuffixText,\n quantity: selectedOption && selectedOption.quantity ? selectedOption.quantity : 1,\n totalPrice,\n showParticipantsAsOptions: serviceData.showParticipantsAsOptions ? serviceData.showParticipantsAsOptions : false,\n participants: serviceData.showParticipantsAsOptions ? this.mapParticipantsAsOptions(this._getFilteredOptions(optionsWithoutNoneOption, filters), participants, configurations) : []\n }\n return service\n }\n\n /**\n * perQuantity ==> DINNERVOUCHER\n * perParticipant ==> SKI ANCILLARIES\n * participantsAsOptions ==> BRIDGE/EXCURSIONS\n * participantsAsOptionsDynamic ==> GOLF\n */\n _mapRenderType (componentType) {\n let renderType\n\n switch (componentType) {\n case componentTypeEnum.ParticipantsAsOptions:\n case componentTypeEnum.ParticipantsAsOptionsDynamic:\n case componentTypeEnum.PerQuantity:\n renderType = renderTypeEnum.PerBooking\n break\n case componentTypeEnum.PerParticipant:\n renderType = renderTypeEnum.PerParticipant\n break\n default:\n renderType = renderTypeEnum.PerParticipant\n break\n }\n return renderType\n }\n\n /**\n * We are calculating the total price of the service depending if\n * there are a selectedOption and if we are using quantity or participants as options\n **/\n _calculateServiceTotalPrice (selectedOption, useQuantity, showParticipantsAsOptions, apiParticipant) {\n let totalPrice, quantity\n if (selectedOption && selectedOption.totalPrice) {\n totalPrice = selectedOption.totalPrice\n } else if (selectedOption) {\n if (useQuantity) {\n quantity = selectedOption.quantity\n } else if (showParticipantsAsOptions && this._checkIfOptionServiceTypeIsPerParticipant(selectedOption)) {\n quantity = selectedOption.assignedParticipants ? selectedOption.assignedParticipants.length : 0\n } else {\n quantity = 1\n }\n const pricePerParticipant = (selectedOption.prices && selectedOption.prices.find(pricePerParticipant => pricePerParticipant.participantIds && pricePerParticipant.participantIds.includes(apiParticipant.id))) || null\n const optionPrice = pricePerParticipant?.price !== undefined ? pricePerParticipant.price : selectedOption.price || 0\n totalPrice = CalculateServicePrice(quantity, optionPrice)\n } else {\n totalPrice = 0\n }\n\n return totalPrice\n }\n\n /**\n * You can unselect if:\n * - Service renderType is PerParticipant (SkiAncillaries)\n * and the SUM of Checked and disabledOptions is less than the total length of options\n * OR\n * - Service has a no option\n */\n _mapCanUnselect (attributes) {\n const { noneOption, options, participantId, componentType } = attributes\n\n let canBeUnselected = true\n if (this._checkRenderTypePerParticipant(componentType)) {\n const disabledOptionsNotChecked = options.filter(option => {\n return option.disabledParticipants\n ? (option.disabledParticipants.includes(participantId) &&\n !(option.assignedParticipants && option.assignedParticipants.includes(participantId) && option.isSelected))\n : false\n })\n\n const checkedOptions = options.filter(option => (option.isSelected && option.assignedParticipants && option.assignedParticipants.includes(participantId)))\n canBeUnselected = checkedOptions.length + disabledOptionsNotChecked.length !== options.length\n } else {\n const isOptional = !!(canBeUnselected)\n const hasNoneOption = !!(noneOption)\n canBeUnselected = hasNoneOption || isOptional\n }\n\n return canBeUnselected\n }\n\n _mapFilters (componentId, apiRoom, apiParticipant, serviceData, serviceOptions, serviceSelectedOption, serviceUid) {\n const filters = []\n serviceData.filters.forEach((filterData, index) => {\n const filterValues = this._distinctOptions(serviceOptions, filterData.columnName)\n const sortedFilterValues = (['materialCategory', 'sportLevel', 'buggy'].includes(filterData.columnName)) ? filterValues : filterValues.sort()\n const filter = {\n columnName: filterData.columnName,\n filterLabel: filterData.filterLabel,\n filterType: filterData.filterType,\n filterIcon: filterData.filterIcon,\n definesDefaultValue: filterData.definesDefaultValue,\n values: sortedFilterValues,\n texts: filterData.texts || null,\n selectedValue: (serviceSelectedOption) ? serviceSelectedOption[filterData.columnName] : sortedFilterValues[0],\n selectedStartDateValue: (serviceSelectedOption) ? serviceSelectedOption.startDate : null,\n uid: serviceSelectedOption ? `${this._generateUniqueId(componentId, apiRoom, apiParticipant, serviceData, { id: index + 1 })}-${serviceSelectedOption.id}` : this._generateUniqueId(componentId, apiRoom, apiParticipant, serviceData, { id: index + 1 }),\n serviceUid\n }\n\n // Check all possible values of the filter if there is no service selected option\n if (!serviceSelectedOption) {\n for (let i = 0; i < filters.length; i++) {\n filter.selectedValue = sortedFilterValues[i]\n const availableOptionsWithCurrentFilters = this._getFilteredOptions(serviceOptions, [...filters, filter])\n\n if (availableOptionsWithCurrentFilters && availableOptionsWithCurrentFilters.length > 0) {\n break\n }\n }\n }\n\n filters.push(filter)\n }, this)\n\n return filters\n }\n\n _getFilteredOptions (options, filters) {\n filters.forEach(filter => {\n options = this._filterOptions(options, filter.columnName, filter.selectedValue)\n }, this)\n\n return options\n }\n\n _filterOptions (options, columnName, columnValue) {\n const filteredOptions = options.filter(function (option) {\n if (columnName && columnValue) {\n return option[columnName].toString() === columnValue.toString()\n } else {\n return option[columnName] === columnValue\n }\n })\n return filteredOptions\n }\n\n _distinctOptions (options, columnName) {\n const uniqueOptions = [...new Set(options.map(opt => opt[columnName] ? opt[columnName].toString() : null))]\n return uniqueOptions\n }\n\n _generateUniqueId (componentId, room, participant, service, filter) {\n let id = 'sa-'\n id += (componentId && componentId.length > 3) ? componentId.substring(0, 4) : 'sa-'\n\n if (room) { id = `${id}_r__${room.id}` }\n if (participant) { id = `${id}_p__${participant.id}` }\n if (service) { id = `${id}_s__${service.serviceId}` }\n if (filter) { id = `${id}_f__${filter.id}` }\n\n return id\n }\n\n // if there is min/max occupancy for the service, means that the service is configured perUnit in Davinci\n // if there isn't min/max occupancy configured, the service is configured perParticipant\n _checkIfOptionServiceTypeIsPerParticipant (apiOption = null) {\n return apiOption && !apiOption.occupancy\n }\n}\n","import { operationTypeEnum } from './enums'\n\nexport default class OperationTypeMapper {\n /** Retrives the proper operation type\n * If user is unselecting the service:\n * If service has no option, then its an SWAP\n * Else its a REMOVE\n * If user is selecting the service then its an ADD\n * If user is editing the service:\n * If is changing at least the 'key' field (code+start date+end date) then is a SWAP\n * Else is changing other fields but the key then its a PATCH\n * @param {object} row -- The current row\n * @param {object} newOption -- The new options selected\n * @param {boolean} isUnselecting -- True is the user is unselecting the service\n *\n * @returns {operationTypeEnum} The operation type\n */\n static getOperationType (row, newOption, isUnselecting) {\n const previousOption = row.selectedOption\n let opType\n\n if (isUnselecting) {\n if (row.noneOption) {\n opType = operationTypeEnum.Swap\n } else {\n opType = operationTypeEnum.Remove\n }\n } else if (!previousOption) {\n opType = operationTypeEnum.Add\n } else if (previousOption.code === newOption.code && previousOption.startDate === newOption.startDate && previousOption.endDate === newOption.endDate) {\n opType = operationTypeEnum.Patch\n } else {\n opType = operationTypeEnum.Swap\n }\n\n return opType\n }\n}\n","import { operationTypeEnum } from './enums'\nexport default class ParticipantIdsMapper {\n /** Retrives the proper participantIds\n * If row has participantsAsOptionsApi:\n * participantIds are the values checked\n * If row has quantityApi && selectedOption\n * participants are selectedOption.applies to participants\n * If row has participantId:\n * Check if other rows has the same selectedOption and return the partcipats\n * Else push to partcipantIds the current participantID\n * @param {object} row -- The current row\n * @param {object} allRows -- The total component rows\n * @param {object} selectedOption -- The new options selected\n *\n */\n static getParticipantIds (row, allRows, selectedOption, operationType) {\n let participantIds = []\n\n if (row.participantsAsOptionsApi && row.participantsAsOptionsApi.getProp('options')) {\n // Excursions, Bridge, Golf\n const participantOptions = row.participantsAsOptionsApi.getProp('options').filter(option => option.checked)\n participantIds = [...participantOptions.map(option => parseInt(option.value))]\n } else if (row.quantityApi && selectedOption) {\n // DinnerVoucher\n participantIds = [...selectedOption.appliesToParticipants]\n } else if (row.participantId) {\n // Ski\n const participantsFromOtherRowsWithSameSelectedOption = Object.values(allRows).filter(currentRow => currentRow.selectedOption && currentRow.selectedOption.code === selectedOption.code).map(row => row.participantId)\n if (participantsFromOtherRowsWithSameSelectedOption.length > 0 && operationType === operationTypeEnum.Patch) {\n participantIds = [...participantsFromOtherRowsWithSameSelectedOption]\n } else {\n participantIds.push(row.participantId)\n }\n }\n\n return participantIds\n }\n}\n","import { registerWidget } from '../../../js/core/widget/widget-directory'\nimport { BookingBox } from '../booking-box/main'\nimport { BookingFilterableServicesTemplate, ServicePriceTemplate } from './w-booking-filterable-services.template'\nimport { FilterableServicesWarningMessage } from './w-booking-filterable-services__warning-message.template'\nimport { CalculateServicePrice } from './service-helper'\nimport PriceFormatter from '../../../js/helpers/price-formatter'\nimport { elementFromString, flush } from '../../../js/document/html-helper'\nimport Component from '../../../js/core/component/component'\nimport BookingFilterableServicesDataMapper from './data-mapper'\nimport { bookingItemEvents, bookingFilterableServicesEvents } from '../../../js/document/event-types'\nimport Swipe from '../../objects/swipe/main'\nimport { componentTypeEnum } from './enums'\nimport { getStyle, cssTimeToMs } from '../../../js/document/css'\nimport CalendarField from '../../components/calendar-field/main'\nimport { ReturnMissingDates } from './calendar-helper'\nimport OperationTypeMapper from './operationType-mapper'\nimport ParticipantIdsMapper from './participantIds-mapper'\nimport webStorage from '../../../js/document/web-storage'\nimport registeredEvents from '../../../js/helpers/registered-events'\nimport { cleanUpSpecialCharacters, toCamelCase } from '../../../js/helpers/string'\nimport { texts, attr, widgetApi, widgetQueries, classNames } from './constants'\n\n/**\n * BookingFilterableServices widget\n */\nexport default class BookingFilterableServices extends BookingBox {\n constructor (element) {\n super(element)\n this.canSentEvents = false\n this.firstLoad = true\n this.element = element\n this.dataMapper = new BookingFilterableServicesDataMapper()\n this.serviceName = null\n\n const filterConfigurationElement = this.element.querySelector(widgetQueries.filterConfigurationElement)\n if (filterConfigurationElement) {\n const innerHtml = filterConfigurationElement.innerHTML\n const configuration = JSON.parse(innerHtml)\n this.filters = configuration.services\n this.texts = []\n this.texts[texts.saveButton] = configuration[texts.saveButton]\n this.texts[texts.cancelButton] = configuration[texts.cancelButton]\n this.texts[texts.emptyOptions] = configuration[texts.emptyOptions]\n this.texts[texts.serviceSelectedInfoText] = configuration[texts.serviceSelectedInfoText]\n this.texts[texts.noServiceSelected] = configuration[texts.noServiceSelected]\n this.texts[texts.selectServiceForFree] = configuration[texts.selectServiceForFree]\n this.texts[texts.occupancyValidationMessage] = configuration[texts.occupancyValidationMessage]\n this.texts[texts.timeChangedMessage] = configuration[texts.timeChangedMessage]\n this.configurations = {}\n this.configurations.price = configuration.priceConfiguration ? configuration.priceConfiguration : {}\n this.configurations.componentType = configuration.componentType ? configuration.componentType : componentTypeEnum.PerParticipant\n this.configurations.timeConfiguration = configuration.timeConfiguration ? configuration.timeConfiguration : {}\n // move this to service level!\n this.configurations.hideOptions = configuration.hideOptions ? configuration.hideOptions : false\n }\n\n registeredEvents.registerWidgetEvents(widgetApi, this.events, {\n ...this.element.hasAttribute(attr.trackAttr) && { track: this.element.attributes[attr.trackAttr].value }\n })\n }\n\n /**\n *\n * @param {Object} data - Contains the data needed to render the widget body\n */\n async handleFetched (data) {\n this.canSentEvents = false\n this.data = data.response\n this._updateWidgetData()\n this.firstLoad = false\n return super.handleFetched(data.response)\n }\n\n getServiceName () {\n return this.serviceName || toCamelCase(widgetApi) || ''\n }\n\n _updateWidgetData () {\n let apiData\n let widgetData\n apiData = this.data.services && this.data.services.find(service => service.componentId === this.componentId)\n if (apiData) {\n this.serviceName = cleanUpSpecialCharacters(apiData.aName) || ''\n apiData = { ...apiData, ...{ participants: this.data.participants, rooms: this.data.rooms } }\n widgetData = this.dataMapper.mapWidgetData(apiData, this.filters, this.texts, this.configurations)\n this.rows = widgetData.rows\n this.filterDefaultValuesPerParticipant = widgetData.filterDefaultValuesPerParticipant\n const selectedOptions = apiData.options.filter(option => option.isSelected)\n if (selectedOptions.length > 0) {\n super.setSuccessStateAndUpdateTitle()\n }\n }\n\n if (widgetData) {\n this._showComponent()\n const renderedHtml = BookingFilterableServicesTemplate(widgetData)\n const newContent = elementFromString(renderedHtml)\n this._render(newContent)\n // IMPORTANT: Put always the 'initDocumentComponentsFromAPI' after the '_render', otherwise the events are not binded correctly.\n Component.initDocumentComponentsFromAPI(newContent)\n this._cleanEmptyRows(widgetData.emptyRows)\n this._applyCustomSafeMarginToFirstCollapseElement()\n this._initCalendarFields()\n this._attachEvents()\n this._mapApisToRows()\n } else {\n super.hideComponent()\n }\n setTimeout(() => {\n this.canSentEvents = true\n }, 500)\n }\n\n _applyCustomSafeMarginToFirstCollapseElement () {\n const scrollable = this.element.querySelector(widgetQueries.scrollable)\n if (scrollable) {\n const scrollableElementClientRect = scrollable.getBoundingClientRect()\n const elementClientRect = this.element.getBoundingClientRect()\n const safeMargin = scrollableElementClientRect.top - elementClientRect.top\n const scrollableApi = scrollable && scrollable[widgetQueries.collapseApi]\n scrollableApi && scrollableApi.setProp('scrollableSafeMargin', safeMargin)\n }\n }\n\n _initCalendarFields () {\n const dateElements = [...this.element.querySelectorAll(widgetQueries.dateFilters)]\n dateElements.forEach(element => {\n const calendarDataModelElement = element.querySelector(widgetQueries.dateCalendarDataModel)\n const innerHtml = calendarDataModelElement.innerHTML\n const calendarObject = JSON.parse(innerHtml)\n const widgetElement = element.querySelector(widgetQueries.calendarField)\n\n return new CalendarField(widgetElement, { calendarDataModelObject: { attributes: calendarObject } })\n })\n }\n\n /**\n * Attach events:\n * - to each filter, so when a filter changed a function is called\n * - to Accept button, when clicked an event is raised so mediator can execute a call to the backend\n * - to Cancel button, when clicked collapse is closed\n */\n _attachEvents () {\n Swipe.CreateInstancesOnDocument()\n this._attachEvent(widgetQueries.numberStepperFilters, widgetQueries.numberStepperApi, 'propChanged')\n this._attachEvent(widgetQueries.buttonGroupFilters, widgetQueries.buttonGroupApi, 'changeActiveElement')\n this._attachEvent(widgetQueries.choiceListFilters, widgetQueries.choiceListApi, 'changeOptions')\n this._attachEvent(widgetQueries.tabNavFilters, widgetQueries.tabNavApi, 'propChanged')\n this._attachEvent(widgetQueries.dropdownFilters, widgetQueries.dropdownApi, 'changedOptions')\n this._attachEvent(widgetQueries.calendarField, widgetQueries.calendarFieldApi, 'selectedDatesChanged')\n\n // Quantity component\n const quantityElements = [...this.element.querySelectorAll(widgetQueries.quantityComponent)]\n this.quantityElementApis = quantityElements.map(quantityElement => quantityElement[widgetQueries.numberStepperApi])\n this.quantityElementApis.forEach(quantityElementApi => {\n quantityElementApi.events.on('propChanged', (eventArgs) => { this._quantityChanged(eventArgs, quantityElementApi) })\n })\n\n // ParticipantsAsOptions\n const participantsAsOptionschoiceListElements = [...this.element.querySelectorAll(widgetQueries.choiceListParticipantsAsOptions)]\n this.participantAsOptionElementApis = participantsAsOptionschoiceListElements.map(participantAsOptionElement => participantAsOptionElement[widgetQueries.choiceListApi])\n this.participantAsOptionElementApis.forEach(participantAsOptionElementApi => {\n participantAsOptionElementApi.events.on('changeOptions', (eventArgs) => { this._participantAsOptionChanged(eventArgs, participantAsOptionElementApi) })\n })\n\n const acceptButtons = [...this.element.querySelectorAll(widgetQueries.acceptButtons)]\n this.acceptButtonApis = acceptButtons.map(acceptButton => acceptButton[widgetQueries.buttonApi])\n this.acceptButtonApis.forEach(acceptButton => {\n acceptButton.events.on('clickButton', (eventArgs) => {\n const row = this._getCurrentRowByElement(acceptButton.element)\n this._eventCustomerInteractionEmitter(bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_SAVE_BUTTON, this._extractServiceType(row), 'button', 'save')\n this._optionChanged(eventArgs, acceptButton.element)\n })\n })\n\n const cancelButtons = [...this.element.querySelectorAll(widgetQueries.cancelButtons)]\n this.cancelButtonApis = cancelButtons.map(cancelButton => cancelButton[widgetQueries.buttonApi])\n this.cancelButtonApis.forEach(cancelButton => {\n cancelButton.events.on('clickButton', (eventArgs) => { this._optionCancelled(eventArgs, cancelButton.element) })\n })\n\n // Switchs\n const switches = [...this.element.querySelectorAll(widgetQueries.switch)]\n switches.forEach(currentSwitch => {\n currentSwitch.addEventListener('click', (eventArgs) => { this._switchClicked(eventArgs, eventArgs.target) })\n })\n\n const containers = [...this.element.querySelectorAll(widgetQueries.container)]\n containers.forEach(container => {\n container.addEventListener('click', (eventArgs) => { this._containerClicked(eventArgs, eventArgs.target) })\n })\n }\n\n _containerClicked (eventArgs, element) {\n if (!this._elementIsSwitchRelated(element)) {\n const row = this._getCurrentRowByElement(element)\n this._openContainers(row)\n }\n }\n\n _elementIsSwitchRelated (element) {\n return element.classList.contains(classNames.switchCheckbox) || element.classList.contains(classNames.switchCircle)\n }\n\n _closeContainers (row) {\n this._emitEventOnceToggled(row)\n if (row.collapseApi) {\n row.collapseApi.close()\n }\n if (row.sideDrawerApi) {\n row.sideDrawerApi.close()\n }\n }\n\n _openContainers (row) {\n if (row.collapseApi) {\n row.collapseApi.toggle()\n }\n if (row.sideDrawerApi) {\n row.sideDrawerApi.toggle()\n }\n\n this._emitEventOnceToggled(row)\n }\n\n _emitEventOnceToggled (row) {\n const isOpen = row.collapseApi.isOpened() || row.sideDrawerApi.getProp('open')\n if (row.collapseApi || row.sideDrawerApi) {\n this._eventCustomerInteractionEmitter(bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_CONTAINER_TOGGLE, this._extractServiceType(row), 'accordion', isOpen)\n }\n }\n\n _extractServiceType (row) {\n return row.options[0].serviceType\n }\n\n _attachEvent (querySelector, apiSelector, eventName) {\n const filterElements = [...this.element.querySelectorAll(querySelector)]\n const filterApis = filterElements.map(element => element[apiSelector])\n filterApis.forEach(filterApi => {\n filterApi && filterApi.events.on(eventName, () => {\n this._raiseCustomerEvent(filterApi)\n this._filterChanged(filterApi.element)\n })\n })\n }\n\n _updateButtonGroupFilter (row, filter, lastSelectedValue) {\n filter.values.forEach(filterValue => {\n const filterValueElement = filter.api.element.querySelector(`[data-w-booking-filterable-services__button-group-value=\"${filterValue}\"]`)\n filterValueElement.disabled = !filter.availableValues.includes(filterValue)\n })\n\n let indexOfValueToShow = 0\n if (lastSelectedValue) {\n indexOfValueToShow = filter.availableValues.indexOf(lastSelectedValue.toString())\n }\n const selectedOption = filter.availableValues[indexOfValueToShow > 0 ? indexOfValueToShow : 0]\n const disabledMissingOptions = filter.values.filter(x => !filter.availableValues.includes(x))\n const buttonsInGroup = [...filter.api.element.querySelectorAll('[data-w-booking-filterable-services__button-group-value]')]\n const selectedButtonIndex = buttonsInGroup.findIndex(button => button.dataset.wBookingFilterableServices__buttonGroupValue === selectedOption)\n const activeElement = buttonsInGroup.find(button => button.dataset.wBookingFilterableServices__buttonGroupValue === selectedOption)\n\n buttonsInGroup.forEach(button => {\n button.disabled = !!((disabledMissingOptions.length > 0 && disabledMissingOptions.includes(button.dataset.wBookingFilterableServices__buttonGroupValue)))\n })\n\n if (selectedButtonIndex > -1) {\n filter.api.setProp('activeIndex', selectedButtonIndex)\n filter.api.setProp('activeElement', activeElement, { forceUpdate: true })\n }\n return selectedOption\n }\n\n _updateTabsFilterValues (row, filter, lastSelectedValue) {\n filter.values.forEach(filterValue => {\n const filterValueElement = this.element.querySelector(`[${attr.filterId}=\"${filter.filterId}\"`).querySelector(`[${attr.tabsId}=\"${filterValue}\"]`).parentElement\n filterValueElement.style.display = filter.availableValues.includes(filterValue) ? '' : 'none'\n })\n\n // Update filter with first available value. To be improved with last selected value if available\n let indexOfValueToShow = 0\n if (lastSelectedValue) {\n indexOfValueToShow = filter.availableValues.indexOf(lastSelectedValue)\n }\n const selectedOption = filter.availableValues[indexOfValueToShow > 0 ? indexOfValueToShow : 0]\n filter.api.setProp('currentTab', selectedOption || lastSelectedValue)\n return selectedOption\n }\n\n _updateNumberStepperFilterValues (row, filter, lastSelectedValue) {\n if (filter.availableValues && filter.availableValues.length > 0) {\n const minValue = Math.min(...filter.availableValues)\n const maxValue = Math.max(...filter.availableValues)\n if (lastSelectedValue > maxValue) {\n filter.api.setProp('value', maxValue, { silent: this.firstLoad })\n } else {\n filter.api.setProp('value', parseInt(lastSelectedValue), { silent: this.firstLoad })\n }\n filter.api.setProp('minValue', minValue)\n filter.api.setProp('maxValue', maxValue)\n }\n\n return filter.api.getProp('value')\n }\n\n _updateChoiceListFilterValues (row, filter, lastSelectedValue) {\n const availableOptions = filter.values.map(value => {\n return {\n text: this._mapFilterTextItem(value, filter.texts),\n checked: false,\n value,\n disabled: (filter.availableValues.findIndex(availableValue => availableValue === value) < 0)\n }\n })\n\n if (lastSelectedValue && filter.availableValues.findIndex(value => value === lastSelectedValue) >= 0) {\n availableOptions.find(availableOption => availableOption.value === lastSelectedValue).checked = true\n } else {\n const firstAvailableOptionNotDisabled = availableOptions.find(availableOption => filter.availableValues.findIndex(availableValue => availableValue === availableOption.value) >= 0)\n if (firstAvailableOptionNotDisabled) {\n firstAvailableOptionNotDisabled.checked = true\n }\n }\n const optionsToBeUpdated = availableOptions.map(availableOption => {\n const option = filter.api.getProp('options').find(option => option.value === availableOption.value)\n if (option) {\n return { ...option, ...availableOption }\n }\n return availableOption\n })\n\n filter.api.setProp('options', optionsToBeUpdated)\n const selectedOption = filter.api.getProp('options').find(option => option.checked)\n\n return selectedOption && selectedOption.value\n }\n\n _mapFilterTextItem = (filterValue, texts = null) => {\n if (!texts) { return filterValue }\n const textToBeReplaced = texts.find(text => text.key === filterValue)\n return (textToBeReplaced && textToBeReplaced.value) || filterValue\n }\n\n _updateDropdownFilterValues (row, filter, lastSelectedValue) {\n const availableOptions = filter.values.map(value => { return { text: value, id: value, value, disabled: !filter.availableValues.includes(value) } })\n\n filter.api.setProp('options', availableOptions)\n\n let indexOfValueToShow = 0\n if (lastSelectedValue) {\n filter.api.setProp('value', lastSelectedValue)\n indexOfValueToShow = filter.availableValues.indexOf(lastSelectedValue)\n }\n const selectedOption = filter.availableValues[indexOfValueToShow > 0 ? indexOfValueToShow : 0]\n return selectedOption\n }\n\n _updateDateFilterValues (row, filter, lastSelectedValue) {\n const { cid, ...newAttributes } = filter.api.selection.attributes\n const missingDatesFromOption = ReturnMissingDates(filter.values)\n const notAvailableDatesForCurrentSelection = filter.values.filter(x => !filter.availableValues.includes(x))\n let attributes\n let selectedDate\n if (lastSelectedValue && filter.availableValues.includes(lastSelectedValue)) {\n selectedDate = lastSelectedValue\n attributes = { ...newAttributes, selectedDate: lastSelectedValue, selectedDates: [lastSelectedValue], disabledDates: [...missingDatesFromOption, ...notAvailableDatesForCurrentSelection] }\n } else {\n selectedDate = filter.values[0]\n attributes = { ...newAttributes, selectedDate, selectedDates: [selectedDate], disabledDates: [...newAttributes.disabledDates, lastSelectedValue] }\n }\n\n filter.api.selection.setAttributes(attributes)\n return selectedDate\n }\n\n _setButtonGroupValue (filter, value) {\n const buttonsInGroup = [...filter.api.element.querySelectorAll('[data-w-booking-filterable-services__button-group-value]')]\n const selectedButtonIndex = buttonsInGroup.findIndex(button => button.dataset.wBookingFilterableServices__buttonGroupValue === value)\n if (selectedButtonIndex > -1) {\n filter.api.setProp('activeIndex', selectedButtonIndex)\n filter.api.setProp('activeElement', buttonsInGroup.find(button => button.dataset.wBookingFilterableServices__buttonGroupValue === value), { forceUpdate: true })\n }\n }\n\n _setTabsFilterValues (filter, value) {\n if (filter.values && filter.values.length > 0 && filter.values.includes(value)) {\n filter.api.setProp('currentTab', value)\n }\n }\n\n _setNumberStepperValue (filter, value) {\n if (filter.values && filter.values.length > 0 && filter.values.includes(value)) {\n filter.api.setProp('value', parseInt(value))\n }\n }\n\n /**\n * Collects the APIs of the components and maps them into its specific row\n */\n _mapApisToRows () {\n // Filters\n this._mapFilterApi(widgetQueries.numberStepperFilters, widgetQueries.numberStepperApi, this._getNumberStepperValue, this._setNumberStepperValue.bind(this), this._updateNumberStepperFilterValues.bind(this))\n this._mapFilterApi(widgetQueries.buttonGroupFilters, widgetQueries.buttonGroupApi, this._getButtonGroupValue, this._setButtonGroupValue.bind(this), this._updateButtonGroupFilter.bind(this))\n this._mapFilterApi(widgetQueries.choiceListFilters, widgetQueries.choiceListApi, this._getChoiceListValue, null, this._updateChoiceListFilterValues.bind(this))\n this._mapFilterApi(widgetQueries.tabNavFilters, widgetQueries.tabNavApi, this._getTabsValue, this._setTabsFilterValues.bind(this), this._updateTabsFilterValues.bind(this))\n this._mapFilterApi(widgetQueries.dropdownFilters, widgetQueries.dropdownApi, this._getDropdownValue, null, this._updateDropdownFilterValues.bind(this))\n this._mapFilterApi(widgetQueries.calendarField, widgetQueries.calendarFieldApi, this._getDateValue, null, this._updateDateFilterValues.bind(this))\n\n // Quantity component\n const quantityElements = [...this.element.querySelectorAll(widgetQueries.quantityComponent)]\n if (quantityElements) {\n quantityElements.forEach(element => {\n const serviceId = element.attributes[attr.serviceId].value\n this.rows[serviceId].quantityApi = element[widgetQueries.numberStepperApi]\n }, this)\n }\n\n // Time Selector\n const timeSelectorElements = [...this.element.querySelectorAll(widgetQueries.timeSelector)]\n if (timeSelectorElements) {\n timeSelectorElements.forEach(element => {\n const serviceId = element.attributes[attr.serviceId].value\n this.rows[serviceId].timeSelectorApi = element[widgetQueries.dropdownApi]\n const timeOptions = this.rows[serviceId].timeSelectorApi.getProp('options').map((option, idx) => ({ ...option, ...{ selected: this.rows[serviceId].selectedOption ? option.value === this.rows[serviceId].selectedOption.time : idx === 0 } }))\n this.rows[serviceId].timeSelectorApi.setProp('options', timeOptions)\n this.rows[serviceId].timeSelectorApi.setProp('value', timeOptions.find(timeOption => timeOption.selected).value)\n }, this)\n }\n\n // ParticipantsAsOptions\n const participantsAsOptionschoiceListElements = [...this.element.querySelectorAll(widgetQueries.choiceListParticipantsAsOptions)]\n if (participantsAsOptionschoiceListElements) {\n participantsAsOptionschoiceListElements.forEach(element => {\n const serviceId = element.attributes[attr.serviceId].value\n this.rows[serviceId].participantsAsOptionsApi = element[widgetQueries.choiceListApi]\n this.rows[serviceId].additionalTexts = element.querySelectorAll(widgetQueries.participantAsOptionAdditionalText)\n }, this)\n }\n\n // collapse\n const collapseElements = [...this.element.querySelectorAll(widgetQueries.collapse)]\n collapseElements.forEach(element => {\n const serviceId = element.attributes[attr.serviceId].value\n this.rows[serviceId].collapseApi = element[widgetQueries.collapseApi]\n }, this)\n\n const sideDrawerElements = [...this.element.querySelectorAll(widgetQueries.sideDrawer)]\n sideDrawerElements.forEach(element => {\n const serviceId = element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]\n this.rows[serviceId].sideDrawerApi = element[widgetQueries.sideDrawerApi]\n }, this)\n\n // Information labels\n const informationElements = [...this.element.querySelectorAll(widgetQueries.filterInfo)]\n informationElements.forEach(element => {\n const serviceId = element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]\n this.rows[serviceId].filterInfoSection = element\n this.rows[serviceId].filterInfoPrice = element.querySelector(widgetQueries.filterInfoPrice)\n this.rows[serviceId].filterInfoDescription = element.querySelector(widgetQueries.filterInfoDescription)\n })\n\n const acceptButtons = [...this.element.querySelectorAll(widgetQueries.acceptButtons)]\n acceptButtons.forEach(element => {\n const serviceId = element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]\n this.rows[serviceId].buttonsSection = element\n this._enableAcceptButton(this.rows[serviceId])\n })\n\n // Empty options message\n const emptyMessageElements = [...this.element.querySelectorAll(widgetQueries.emptyMessage)]\n emptyMessageElements.forEach(element => {\n const serviceId = element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]\n this.rows[serviceId].emptyMessage = element\n element.classList.add(classNames.hidden)\n })\n\n // Validation message\n const validationMessageElements = [...this.element.querySelectorAll(widgetQueries.validationMessages)]\n validationMessageElements.forEach(element => {\n const serviceId = element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]\n this.rows[serviceId].validationMessages = element\n })\n\n // Time message\n const timeMessageElements = [...this.element.querySelectorAll(widgetQueries.timeMessages)]\n timeMessageElements.forEach(element => {\n const serviceId = element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]\n this.rows[serviceId].timeMessages = element\n })\n\n // Time Selector\n this.timeSelectorElementApis = timeSelectorElements.map(timeSelectorElement => timeSelectorElement[widgetQueries.dropdownApi])\n this.timeSelectorElementApis.forEach(timeSelector => {\n timeSelector.events.on('changedOptions', (eventArgs) => { this._toggleTimeChangedMessage(this._getCurrentRowByElement(timeSelector.element), true) })\n })\n\n // results\n const choiceListOptionsElements = [...this.element.querySelectorAll(widgetQueries.choiceListServiceOptions)]\n choiceListOptionsElements.forEach(element => {\n const serviceId = element.attributes[attr.serviceId].value\n const resultsApi = element[widgetQueries.choiceListApi]\n this.rows[serviceId].resultsApi = resultsApi\n resultsApi.events.on('changeOptions', () => {\n this._selectedOptionChanged(this.rows[serviceId])\n this._selectedOptionEvent(this.rows[serviceId])\n })\n\n this._applyFiltersAndSelectedOption(element, this.rows[serviceId])\n }, this)\n }\n\n _selectedOptionEvent (row) {\n if (this.canSentEvents && !this.firstLoad) {\n const selectedOption = row.resultsApi.getProp('options').find(option => option.checked)\n this._eventCustomerInteractionEmitter(bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_CHOICE_LIST, this._extractServiceType(row), 'radio button', selectedOption.text)\n }\n }\n\n _applyFiltersAndSelectedOption (element, row) {\n const filterKeys = Object.keys(row.filters)\n let selectedOption = row.resultsApi.getProp('options').find(option => option.checked)\n\n // If not selectedOption Check if exists in SessionStorage\n if (!selectedOption) {\n const savedData = this._retrieveDataFromStorage()\n if (savedData) {\n const currentRowSelectedOptionCode = savedData[row.uid]\n selectedOption = row.options.find(option => option.code === currentRowSelectedOptionCode)\n }\n }\n\n if (selectedOption) {\n const optionFilterValues = this._getOptionSelectedValues(selectedOption, row)\n this._updateFilterShownValues(row, optionFilterValues)\n }\n if (filterKeys.length > 0) {\n const firstFilterKey = filterKeys[0]\n const firstFilterElement = row.filters[firstFilterKey].api.element\n this._filterChanged(firstFilterElement)\n } else {\n this._applyFilters(element, this._getCurrentRowByElement(element))\n }\n }\n\n _updateFilterShownValues (row, filtersValues) {\n const filtersArray = this._getRowFiltersAsArray(row)\n filtersArray.forEach(currentFilter => {\n const currentValue = filtersValues[currentFilter.columnName]\n if (currentValue && currentFilter.setValue && currentFilter.setValue !== null) {\n currentFilter.setValue(currentFilter, currentValue)\n }\n })\n }\n\n _selectedOptionChanged (row) {\n const selectedOption = row.resultsApi.getProp('options').find(option => option.checked)\n let quantity\n if (row.quantityApi && row.quantityApi.getProp('value')) {\n quantity = row.quantityApi.getProp('value')\n } else if (row.participantsAsOptionsApi && this._checkIfCurrentSelectedOptionServiceTypeIsPerParticipant(selectedOption)) {\n quantity = row.participantsAsOptionsApi.getProp('options').filter(option => option.checked).length\n } else {\n quantity = 1\n }\n const price = CalculateServicePrice(quantity, selectedOption.price)\n const renderedHtml = ServicePriceTemplate(price, this.configurations.price)\n\n if (row.additionalTexts && row.additionalTexts.length > 0) {\n row.additionalTexts.forEach(additionalText => {\n if (row.participantsAsOptionsApi && this._checkIfCurrentSelectedOptionServiceTypeIsPerUnit(selectedOption)) {\n additionalText.innerHTML = '-'\n additionalText.classList.add(classNames.hidden)\n } else {\n additionalText.innerHTML = `+ ${PriceFormatter.toFormattedText(selectedOption.price, this.configurations.price)}`\n additionalText.classList.remove(classNames.hidden)\n }\n })\n }\n\n let hideMessage = false\n if (this._checkIfCurrentSelectedOptionServiceTypeIsPerUnit(selectedOption)) {\n const participantsChecked = row.participantsAsOptionsApi ? row.participantsAsOptionsApi.getProp('options').filter(option => option.checked).length : 0\n hideMessage = participantsChecked >= selectedOption.occupancy.min && participantsChecked <= selectedOption.occupancy.max\n }\n this._toggleOccupancyValidationMessage(row, selectedOption, hideMessage)\n\n this._enableAcceptButton(row)\n\n row.filterInfoPrice.innerHTML = renderedHtml\n row.filterInfoDescription.innerHTML = selectedOption.text\n }\n\n _mapFilterApi (querySelector, apiSelector, getValueFunction, setValueFunction, updateFilterValuesFunction) {\n const filterElements = [...this.element.querySelectorAll(querySelector)]\n\n filterElements.forEach(element => {\n const rowId = element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]\n const elementId = this._findElementId(element)\n this.rows[rowId].filters[elementId].api = element[apiSelector]\n this.rows[rowId].filters[elementId].getValue = getValueFunction\n this.rows[rowId].filters[elementId].setValue = setValueFunction\n this.rows[rowId].filters[elementId].updateFilter = updateFilterValuesFunction\n }, this)\n }\n\n _findElementId (element) {\n return element.id || element.querySelector('input, select').id\n }\n\n _getNumberStepperValue (filter) {\n return filter && filter.api && filter.api.props.value ? parseInt(filter.api.getProp('value')) : null\n }\n\n _getButtonGroupValue (filter) {\n let filterValue\n if (filter && filter.api && filter.api.props && filter.api.getProp('activeElement')) {\n const activeElement = filter.api.getProp('activeElement')\n filterValue = activeElement.dataset[attr.buttonGroupValue]\n }\n return filterValue\n }\n\n _getChoiceListValue (filter) {\n let filterValue\n if (filter && filter.api && filter.api.getProp('options')) {\n const selectedOption = filter.api.getProp('options').find(option => option.checked)\n if (selectedOption) filterValue = selectedOption.value\n }\n return filterValue\n }\n\n _getTabsValue (filter) {\n return filter && filter.api ? filter.api.getProp('currentTab') : null\n }\n\n _getDropdownValue (filter) {\n return filter && filter.api ? filter.api.getProp('value') : null\n }\n\n _getDateValue (filter) {\n return filter && filter.api && filter.api.selection.attributes ? filter.api.selection.attributes.selectedDate : null\n }\n\n _raiseCustomerEvent (filterApi) {\n const row = this._getCurrentRowByElement(filterApi.element)\n const elementId = this._findElementId(filterApi.element)\n\n this._eventFilterEmitter(filterApi, 'sportType', bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_SPORT, 'button group', row, elementId)\n this._eventFilterEmitter(filterApi, 'duration', bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_DURATION, 'button group', row, elementId)\n this._eventFilterEmitter(filterApi, 'materialCategory', bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_MATERIAL_CATEGORY, 'tab', row, elementId)\n this._eventFilterEmitter(filterApi, 'sportLevel', bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_FILTER_SPORT_LEVEL, 'radio button', row, elementId)\n }\n\n _eventFilterEmitter (filterApi, filterTypeExpected, eventName, element, row, elementId) {\n const filterType = filterApi.element.attributes[attr.filterType].value\n const filter = row.filters[elementId]\n const result = filter.getValue(filter)\n if (result && filterType === filterTypeExpected) {\n this._eventCustomerInteractionEmitter(eventName, this._extractServiceType(row), element, result)\n }\n }\n\n _eventCustomerInteractionEmitter (eventName, serviceType, element, result) {\n if (this.canSentEvents && !this.firstLoad) {\n this.canSentEvents = false\n setTimeout(() => {\n this.events.emit(eventName, {\n serviceType,\n element,\n result\n })\n this.canSentEvents = true\n }, 500)\n }\n }\n\n _filterChanged (element) {\n if (element) {\n const row = this._getCurrentRowByElement(element)\n const elementId = this._findElementId(element)\n // refresh available filters\n this._refreshFilters(row, elementId)\n const startDate = this._getDefaultStartDate(row, this.filterDefaultValuesPerParticipant) || null\n this._applyFilters(element, row, startDate)\n this._refreshTimeOptions(row)\n this._enableAcceptButton(row)\n }\n }\n\n _refreshTimeOptions (row, participantIds = []) {\n this._toggleTimeChangedMessage(row, true)\n if (!row.selectedOption && row.timeSelectorApi) {\n // 1- Read the selected filters in the current row\n const currentRowSelectedValues = this._getFilterSelectedValues(row)\n // 2- Read the values of the selected options from all rows\n const selectedOptions = Object.values(this.rows).map(row => row.selectedOption).filter(option => option !== null)\n // 3- If the filters in the current row match all the values in the previous rows take the time.\n const filteredSelectedOptions = this._checkIfAnySelectedOptionExists(selectedOptions, { ...currentRowSelectedValues })\n const selectedTimes = filteredSelectedOptions.filter(option => option.assignedParticipants.some(assigned => participantIds.includes(assigned))).map(option => option.time)\n\n // 4- Disable the specific time.\n const updatedTimeOptions = row.timeSelectorApi.getProp('options').map(option => ({ ...option, ...{ disabled: selectedTimes.includes(option.value) } }))\n row.timeSelectorApi.setProp('options', updatedTimeOptions)\n\n // 5- If time disabled time is selected, select the first one not disabled\n if (selectedTimes.includes(row.timeSelectorApi.getProp('value'))) {\n row.timeSelectorApi.setProp('value', updatedTimeOptions.find(timeOption => !timeOption.disabled).value)\n this._toggleTimeChangedMessage(row, selectedTimes.includes(row.timeSelectorApi.getProp('value')))\n }\n }\n }\n\n _toggleTimeChangedMessage (row, hideMessage = false) {\n if (!hideMessage) {\n const text = this.texts[texts.timeChangedMessage] ? this.texts[texts.timeChangedMessage] : ''\n row.timeMessages.innerHTML = FilterableServicesWarningMessage(text)\n } else {\n row.timeMessages.innerHTML = ''\n }\n }\n\n _checkIfAnySelectedOptionExists (selectedOptions, filtersObject) {\n const matchedFilteredOptions = selectedOptions.filter(item => {\n for (const key in filtersObject) {\n if (item[key] === undefined || item[key] !== filtersObject[key]) { return false }\n }\n return true\n })\n return matchedFilteredOptions\n }\n\n // if there is min/max occupancy for the service, means that the service is configured perUnit in Davinci\n // if there isn't min/max occupancy configured, the service is configured perParticipant\n _checkIfCurrentSelectedOptionServiceTypeIsPerParticipant (selectedOption) {\n return selectedOption && !selectedOption.occupancy\n }\n\n // if there is min/max occupancy for the service, means that the service is configured perUnit in Davinci\n // if there isn't min/max occupancy configured, the service is configured perParticipant\n _checkIfCurrentSelectedOptionServiceTypeIsPerUnit (selectedOption) {\n return selectedOption && selectedOption.occupancy\n }\n\n _participantAsOptionChanged (eventArgs, api) {\n const element = api.element\n if (element) {\n const row = this._getCurrentRowByElement(element)\n if (row) {\n this._enableAcceptButton(row)\n const selectedOption = row.resultsApi.getProp('options').find(option => option.checked)\n const participantIds = row.participantsAsOptionsApi && row.participantsAsOptionsApi.getProp('options') ? row.participantsAsOptionsApi.getProp('options').filter(option => option.checked) : []\n this._refreshTimeOptions(row, participantIds.map(participant => parseInt(participant.value)))\n const quantity = this._checkIfCurrentSelectedOptionServiceTypeIsPerParticipant(selectedOption) ? participantIds.length : 1\n const price = CalculateServicePrice(quantity, selectedOption.price)\n const renderedHtml = ServicePriceTemplate(price, this.configurations.price)\n row.filterInfoPrice.innerHTML = renderedHtml\n }\n }\n }\n\n _enableAcceptButton (row) {\n const optionSelected = row.resultsApi ? row.resultsApi.getProp('options').find(option => option.checked) : null\n let enableAcceptButton = true\n if (row.participantsAsOptionsApi) {\n const participantOptions = row.participantsAsOptionsApi.getProp('options')\n const participantsChecked = participantOptions ? participantOptions.filter(option => option.checked).length : 0\n\n enableAcceptButton = participantsChecked > 0\n if (this._checkIfCurrentSelectedOptionServiceTypeIsPerUnit(optionSelected)) {\n enableAcceptButton = participantsChecked >= optionSelected.occupancy.min && participantsChecked <= optionSelected.occupancy.max\n this._toggleOccupancyValidationMessage(row, optionSelected, enableAcceptButton)\n }\n } else if (row.quantityApi) {\n if (row.selectedOption) {\n enableAcceptButton = (row.quantityApi.getProp('value')) !== (optionSelected && optionSelected.quantity ? optionSelected.quantity : null)\n }\n } else {\n enableAcceptButton = (row.selectedOption && row.selectedOption.value ? row.selectedOption.value : null) !== (optionSelected && optionSelected.value ? optionSelected.value : null)\n }\n row.buttonsSection.disabled = !enableAcceptButton\n }\n\n _toggleOccupancyValidationMessage (row, optionSelected, hideMessage = false) {\n if (this._checkIfCurrentSelectedOptionServiceTypeIsPerUnit(optionSelected) && !hideMessage) {\n const text = this.texts[texts.occupancyValidationMessage]\n ? this.texts[texts.occupancyValidationMessage]\n .replace(/{MIN}/ig, optionSelected.occupancy.min)\n .replace(/{MAX}/ig, optionSelected.occupancy.max)\n : ''\n\n row.validationMessages.innerHTML = FilterableServicesWarningMessage(text)\n } else {\n row.validationMessages.innerHTML = ''\n }\n }\n\n _quantityChanged (eventArgs, api) {\n const element = api.element\n if (element) {\n const row = this._getCurrentRowByElement(element)\n if (row) {\n const selectedOption = row.resultsApi.getProp('options').find(option => option.checked)\n const quantity = row.quantityApi && row.quantityApi.getProp('value') ? row.quantityApi.getProp('value') : 0\n const price = CalculateServicePrice(quantity, selectedOption.price)\n const renderedHtml = ServicePriceTemplate(price, this.configurations.price)\n row.filterInfoPrice.innerHTML = renderedHtml\n this._enableAcceptButton(row)\n }\n }\n }\n\n _applyFilters (element, row, startDate) {\n if (element && row) {\n // 1 for each filter in the ROW, get filter value and filter column name\n const selectedValues = this._getFilterSelectedValues(row)\n\n // 2 filter options with all filter values\n const sourceOptions = this._getFilteredOptions(row.options, selectedValues)\n const options = this.dataMapper.mapOptions(sourceOptions, row.selectedOption, row.noneOption, row.participantId, this.configurations, { startDate })\n // 3 select an option (ensure at least 1 option is selected)\n let selectedValue = options.find(option => option.checked && (!option.assignedParticipants || option.assignedParticipants.includes(row.participantId)))\n if (!selectedValue && options.length > 0) {\n // if not option is selected, check if its saved in sessionStorage\n let optionIndex = 0\n const savedData = this._retrieveDataFromStorage()\n const currentRowSelectedOptionCode = savedData ? savedData[row.uid] : null\n if (savedData && currentRowSelectedOptionCode) {\n const previousSelectedOptionIndex = options.findIndex(option => option.code === currentRowSelectedOptionCode)\n optionIndex = previousSelectedOptionIndex >= 0 ? previousSelectedOptionIndex : optionIndex\n }\n options[optionIndex].checked = true\n selectedValue = options[optionIndex]\n }\n\n if (options.length > 0) {\n this._handleEmptySelection(row, false)\n // 4 Update choicelist with filtered options and information labels\n row.resultsApi.setProp('options', options)\n this._selectedOptionChanged(row)\n } else {\n this._handleEmptySelection(row, true)\n }\n }\n }\n\n _getDefaultStartDate (row, filterDefaultValuesPerParticipant) {\n const defaultDurationValuesParticipant = filterDefaultValuesPerParticipant.find(defaultValue => (defaultValue.columnName === 'duration' && defaultValue.participantId === row.participantId))\n const filteredOptions = row.options && row.options.filter(option => option.duration === (defaultDurationValuesParticipant && defaultDurationValuesParticipant.defaultValue))\n const startDate = (!row.selectedOption && filteredOptions.length > 0) ? (defaultDurationValuesParticipant && defaultDurationValuesParticipant.startDateDefaultValue) : this._getPreviousStartDate(row)\n return startDate\n }\n\n _getPreviousStartDate (row) {\n const previousOptions = (row && row.resultsApi) ? row.resultsApi.getProp('options') : null\n const previousSelectedOption = previousOptions ? previousOptions.filter(option => option.checked === true)[0] : null\n return previousSelectedOption ? previousSelectedOption.startDate : null\n }\n\n _handleEmptySelection (row, isEmpty) {\n if (isEmpty) {\n if (row.emptyMessage) row.emptyMessage.classList.remove(classNames.hidden)\n\n row.resultsApi.element.classList.add(classNames.hidden)\n row.filterInfoSection.classList.add(classNames.hidden)\n row.buttonsSection.classList.add(classNames.isEmpty)\n } else {\n if (row.emptyMessage) row.emptyMessage.classList.add(classNames.hidden)\n\n row.resultsApi.element.classList.remove(classNames.hidden)\n row.filterInfoSection.classList.remove(classNames.hidden)\n row.buttonsSection.classList.remove(classNames.isEmpty)\n }\n }\n\n _getFilterSelectedValues (row) {\n const values = []\n\n Object.keys(row.filters).forEach(key => {\n const filter = row.filters[key]\n if (filter.getValue !== undefined) {\n const filterValue = filter.getValue(filter)\n if (filterValue) {\n values[filter.columnName] = filterValue.toString()\n }\n }\n }, this)\n\n return values\n }\n\n _getOptionSelectedValues (option, row) {\n const values = []\n Object.keys(row.filters).forEach(key => {\n const filter = row.filters[key]\n const columnName = filter.columnName\n const currentOption = row.options.find(currentOption => (option.value === currentOption.value))\n values[columnName] = currentOption[columnName].toString()\n })\n\n return values\n }\n\n _getFilteredOptions (options, selectedValues) {\n Object.keys(selectedValues).forEach(columnName => {\n const selectedValue = selectedValues[columnName]\n options = this._filterOptions(options, columnName, selectedValue)\n }, this)\n\n return options\n }\n\n _filterOptions (options, columnName, columnValue) {\n const filteredOptions = options.filter(function (option) {\n if (columnName && columnValue) {\n return option[columnName].toString() === columnValue.toString()\n } else {\n return option[columnName] === columnValue\n }\n })\n return filteredOptions\n }\n\n _refreshFilters (row, filterId) {\n const selectedValues = this._getFilterSelectedValues(row)\n const filterArray = this._getRowFiltersAsArray(row)\n let afterChangedFilter = false\n const currentFilterSelection = {}\n\n filterArray.forEach(filter => {\n // Update the selected values so far in the filters hierarchy\n currentFilterSelection[filter.columnName] = selectedValues[filter.columnName]\n // By default, the available values are all the values of the filter\n filter.availableValues = [...filter.values]\n\n if (afterChangedFilter) {\n const filterSelectedValues = { ...currentFilterSelection }\n let useSavedFilterValue = false\n // If we are in a lower level than the changed filter, check if all the values of the next filters are available\n filter.values.forEach(filterValue => {\n const tempFilterSelectedValues = { ...filterSelectedValues, [filter.columnName]: filterValue }\n const filteredOptions = this._getFilteredOptions(row.options, tempFilterSelectedValues)\n\n if (filteredOptions.length === 0) {\n const valuePosition = filter.availableValues.indexOf(filterValue)\n if (valuePosition > -1) {\n filter.availableValues.splice(valuePosition, 1)\n filterSelectedValues[filter.columnName] = useSavedFilterValue ? filterSelectedValues[filter.columnName] : (filter.availableValues[valuePosition > 0 ? valuePosition - 1 : 0])\n useSavedFilterValue = true\n }\n } else if (currentFilterSelection[filter.columnName] === filterValue) {\n filterSelectedValues[filter.columnName] = filterValue // Here we should consider checking all the available options for all the previous filters?\n }\n })\n // Update filter available options to be shown\n if (filter.updateFilter) {\n let selectedValue = useSavedFilterValue ? filterSelectedValues[filter.columnName] : selectedValues[filter.columnName]\n if (!row.selectedOption || row.selectedOption.isNoneOption) {\n const currentDefaultFilterValuePerParticipant = this.filterDefaultValuesPerParticipant.find(defaultFilter => defaultFilter.participantId === row.participantId)\n if (currentDefaultFilterValuePerParticipant && filter.columnName === currentDefaultFilterValuePerParticipant.columnName && filter.values.indexOf((currentDefaultFilterValuePerParticipant.defaultValue && currentDefaultFilterValuePerParticipant.defaultValue.toString()) || selectedValue) >= 0) {\n selectedValue = currentDefaultFilterValuePerParticipant.defaultValue || selectedValue\n }\n }\n row.filters[filter.filterId].lastSelectedOption = filter.updateFilter(row, filter, selectedValue)\n currentFilterSelection[filter.columnName] = selectedValue && selectedValue.toString()\n }\n } else {\n afterChangedFilter = filter.filterId === filterId\n }\n })\n }\n\n _optionChanged (eventArgs, element, isUnselecting) {\n if (element) {\n const row = this._getCurrentRowByElement(element)\n this._closeContainers(row)\n\n const patchBody = this._mapSelectedOptionForPatch(row, isUnselecting)\n const patchEventArgs = {\n method: this._method,\n url: this._url,\n body: patchBody,\n componentId: this.componentId\n }\n\n // Save current selected option\n const previousSelectedOptionCode = patchBody && patchBody.oldService ? patchBody.oldService.code : ''\n this._setSessionStorage(row.uid, previousSelectedOptionCode, isUnselecting)\n // tracking should be placed here. Do we needed it???\n this.events.emit(bookingItemEvents.BOOKING_ITEM_DATA_CHANGED, patchEventArgs)\n }\n }\n\n _mapSelectedOptionForPatch (row, isUnselecting) {\n const options = row.resultsApi.getProp('options')\n let selectedOption = (options) ? options.filter(option => option.checked)[0] : null\n const oldOption = row.selectedOption\n const quantity = row.quantityApi ? row.quantityApi.getProp('value') : 1\n const time = row.timeSelectorApi ? row.timeSelectorApi.getProp('value') : null\n\n // Map operation\n const operationType = OperationTypeMapper.getOperationType(row, selectedOption, isUnselecting)\n\n // Map participants\n const participantIds = ParticipantIdsMapper.getParticipantIds(row, this.rows, selectedOption, operationType)\n\n if (isUnselecting) {\n selectedOption = row.noneOption ? row.noneOption : oldOption\n }\n\n // Map services\n const newService = {\n code: (selectedOption) ? selectedOption.code : '',\n participants: participantIds,\n quantity,\n time,\n startDate: (selectedOption) ? selectedOption.startDate : null,\n endDate: (selectedOption) ? selectedOption.endDate : null\n }\n\n const oldService = (oldOption)\n ? {\n code: oldOption.code,\n participants: row.participantsAsOptionsApi ? oldOption.assignedParticipants : participantIds,\n startDate: oldOption.startDate,\n endDate: oldOption.endDate\n }\n : null\n\n // Build payload\n const body = {\n operationType,\n newService,\n oldService\n }\n\n return body\n }\n\n _getCurrentRowByElement (element) {\n return element ? this.rows[element.closest(`[${attr.serviceId}]`).dataset[attr.datasetServiceId]] : null\n }\n\n _optionCancelled (eventargs, element) {\n const row = this._getCurrentRowByElement(element)\n if (row.collapseApi) {\n row.collapseApi.close()\n }\n if (row.sideDrawerApi) {\n row.sideDrawerApi.close()\n }\n\n // We do a timeOut to prevent see that options are reset before closing the sidedrawer and collapse components\n const transitionTime = cssTimeToMs(getStyle(element, 'transition-duration'))\n setTimeout(() => {\n this._resetQuantityNumberStepper(row)\n this._resetSelectedParticipantsAsOptions(row)\n this._eventCustomerInteractionEmitter(bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_CANCEL_BUTTON, this._extractServiceType(row), 'button', 'cancel')\n }, transitionTime)\n }\n\n _resetQuantityNumberStepper (row) {\n if (row.quantityApi && row.quantityApi.getProp('value')) {\n const value = row.selectedOption ? row.selectedOption.quantity : row.quantityApi.getProp('value')\n row.quantityApi.setProp('value', value)\n }\n }\n\n _resetSelectedParticipantsAsOptions (row) {\n if (row.participantsAsOptionsApi && row.participantsAsOptionsApi.getProp('options')) {\n const participantOptions = row.participantsAsOptionsApi.getProp('options')\n if (row.selectedOption && row.selectedOption.assignedParticipants) {\n row.participantsAsOptionsApi.setProp('options',\n participantOptions.map((option) => ({ ...option, checked: row.selectedOption.assignedParticipants.includes(parseInt(option.value)) })),\n { silent: true }\n )\n } else {\n row.participantsAsOptionsApi.setProp('options', participantOptions.map((option) => ({ ...option, checked: false })), { silent: true })\n }\n this._enableAcceptButton(row)\n }\n }\n\n _switchClicked (eventArgs, element) {\n if (element.classList.contains(classNames.switchCheckbox)) {\n const row = this._getCurrentRowByElement(element)\n const transitionTime = cssTimeToMs(getStyle(element, 'transition-duration'))\n this._eventCustomerInteractionEmitter(bookingFilterableServicesEvents.BOOKING_FILTERABLE_SERVICES_SWITCH_TOGGLE, this._extractServiceType(row), 'toggle', false)\n setTimeout(() => {\n this._resetSelectedParticipantsAsOptions(row)\n this._optionChanged(eventArgs, element, true)\n }, transitionTime)\n }\n }\n\n _setSessionStorage (rowUid, selectedOptionCode, isUnselecting) {\n if (isUnselecting) {\n const identifier = this._getComponentId()\n if (identifier) {\n const data = this._retrieveDataFromStorage() || {}\n data[rowUid] = selectedOptionCode\n webStorage.session.set(identifier, data)\n }\n }\n }\n\n _getComponentId () {\n const identifier = this.componentId\n return identifier !== null ? identifier : undefined\n }\n\n _retrieveDataFromStorage () {\n let data\n const identifier = this._getComponentId()\n if (identifier) {\n data = webStorage.session.get(identifier)\n }\n return data\n }\n\n _showComponent () {\n this.element.classList.remove(classNames.hidden)\n }\n\n _hideComponent () {\n this.element.classList.add(classNames.hidden)\n }\n\n _render (el) {\n flush(this.bodyElement)\n this.bodyElement.appendChild(el)\n }\n\n _cleanEmptyRows (emptyRows) {\n emptyRows.forEach(emptyRow => {\n const emptyRowElement = this.element.querySelector(`[${attr.serviceId}=\"${emptyRow}\"]`)\n if (emptyRowElement) {\n emptyRowElement.remove()\n }\n })\n }\n\n /**\n * Returns the row filters as an array, adding as an extra field the filterId property, that identifies uniquely the filter in the widget\n *\n * @param {row} row The row object containing all the information needed for the current service\n */\n _getRowFiltersAsArray (row) {\n const filterArray = Object.keys(row.filters).map(filterKey => {\n const newFilterObject = { filterId: filterKey }\n return { ...newFilterObject, ...row.filters[filterKey] }\n })\n return filterArray\n }\n}\n\nregisterWidget(BookingFilterableServices, widgetApi)\n"],"names":["BookingBundleDataMapper","_classCallCheck","key","value","apiResponseData","configurations","_configurations$bundl","_configurations$bundl2","_configurations$bundl3","_configurations$bundl4","isEmptyObject","title","bundleTexts","bundleTitle","titleSelected","bundleSelectedTitle","selectButtonText","selectBundleButtonText","removeButtonText","removeBundleButtonText","bundle","this","_mapBundle","image","bundleImage","_mapBundleImage","data","option","options","pricePerParticipant","isPricePerPerson","selected","isSelected","code","price","_mapPriceComponentData","priceConfiguration","usps","_mapUspInfo","bundleUsps","_this$_mapBundlePrice","_mapBundlePrices","appliesToParticipants","finalPriceFormatted","oldPriceFormatted","priceConfig","size","legend","saleText","discountFormatted","undefined","oldPrice","publicPrice","currency","currencySymbol","currencyPosition","isCurrencyAtStart","sync","resolve","placeholderSrc","concat","placeholderImageUrl","resolvedSrc","imageUrl","ratio","dynamicRatios","bp","_this","variant","items","map","usp","_mapUsp","apiUsp","text","icon","participantIds","arguments","length","priceToBeShown","discount","priceDetails","forEach","optionPrice","includedIds","filter","id","includes","_formatPrice","PriceFormatter","toFormattedText","priceFormatted","numberOfDecimals","roundOff","toString","decimalSeparator","replace","defaultBookingBundleData","_regeneratorRuntime","e","t","r","Object","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","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","__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","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","info","error","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","apply","_objectSpread","obj","_toPropertyKey","getOwnPropertyDescriptors","defineProperties","_defineProperties","target","props","descriptor","input","hint","prim","toPrimitive","res","String","_toPrimitive","_get","Reflect","get","bind","property","receiver","base","object","_getPrototypeOf","_superPropBase","desc","_setPrototypeOf","widgetApi","widgetQueries","configurationElement","buttonItem","attr","configOptions","BookingBundle","_BookingItem","_handleFetched","subClass","superClass","_inherits","Constructor","protoProps","Derived","hasNativeReflectConstruct","_super","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","NewTarget","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","element","instance","dataMapper","filterConfigurationElement","querySelector","_readOptionsFromConfigurations","serviceName","registeredEvents","registerWidgetEvents","events","hasAttribute","track","attributes","_x","fn","_callee","_context","response","_updateWidgetData","args","err","widgetData","_this2","apiData","services","find","service","componentId","cleanUpSpecialCharacters","aName","participants","rooms","mapWidgetData","_init","toCamelCase","renderedHtml","ImgTemplate","defaultImgData","extraClasses","TitleTemplate","defaultTitleData","tag","BulletListTemplate","PriceTemplate","defaultPriceData","BtnTemplate","defaultButtonData","newContent","elementFromString","Img","createInstancesOnDocument","Component","initDocumentComponentsFromAPI","_render","_attachEvents","el","flush","bodyElement","appendChild","_this3","buttonElements","querySelectorAll","buttonApis","buttonElement","api","buttonApi","on","_clickedBundle","btn","bundleCode","getAttribute","eventArgs","_method","url","_url","body","_mapBody","emit","bookingItemEvents","BOOKING_ITEM_DATA_CHANGED","bundleClicked","operationType","newService","startDate","endDate","oldService","innerHtml","innerHTML","configuration","JSON","parse","BookingItem","registerWidget","bookingCarRental","RENDER_EDIT_DETAILS_TEMPLATE","EQUIPMENTS_CHANGED","CREDIT_CARD_CHANGED","SLIDER_BUTTON_CLICKED","tokensShared","require","tokensBrand","tokens","CarRentalCheckoutAdviceTemplate","BookingCarRentalCarsListTemplate","indexItem","carListInformation","listId","showCarsInOneRow","collapseListInformation","CollapseTemplate","collapseId","maxItems","isCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow","childrenWrapper","carRentalTrack","html","bookingCarRentalTemplate","choiceListInformation","showCollapseTriggersSection","collapseButtonTexts","viewMoreButton","iconPosition","viewLessButton","ShowCarsInOneRowTemplate","bookingCarRentalCarsTemplate","newChoiceListData","extraRichContent","extraRichContentForCarTemplate","ChoiceListTemplate","defaultChoiceListData","showSelectedCarsWithoutSlider","CarItemTemplate","car","labelText","label","labelExtraClasses","features","extraDetailsContent","OptionalEquipmentsTemplate","optionalEquipmentText","salePrice","checked","CarRentalDriverTemplate","driverLabel","SelectedEquipmentsTemplate","selectedEquipmentText","isCarEditable","checkoutAdvice","isIncluded","isCancellable","removeCarButton","jsApi","editCarButton","canBeUpgraded","upgradeCarButton","driver","participantId","item","formattedBirthdate","hasEquipments","equipments","selectedEquipments","equipment","join","choiceListSelectedCarInformation","MessagesTemplate","messages","BookingMessageTemplate","BookingCarRentalEditTemplate","BoxTemplate","CarRentalCheckoutTemplate","DropdownTemplate","placeholder","hasClearButton","required","messageRequired","DateSelectorTemplate","disabled","birthdate","mainLabel","departureDate","maxDate","minDateVisible","blockModifier","dayPlaceholder","dateSelectorPlaceholders","day","monthPlaceholder","month","yearPlaceholder","year","messageInvalid","messageOutOfBounds","messageOutOfRange","creditCard","checkboxEnabled","minlength","checkboxTexts","checkboxLabel","checkboxChecked","checkboxRequiredMessage","RequiredCreditCardTemplate","ageWarning","enabled","hidden","EquipmentsTemplate","conditions","carSelectedCode","cancelButton","optionChecked","saveButton","addButton","equipmentsLabel","equipmentsIntroText","choiceLists","collapseElement","editCollapseElement","itemEditConfirmButton","itemEditCancelButton","formItem","formDriverDropdown","formBirthdateDateSelector","formEquipmentsSelector","formEquipmentsContainer","ageWarningSelector","selectedInfoSection","optionItem","formItemErrorSelector","conditionsElement","conditionsElementChoiceList","addExtraCarButton","extraCarListContainer","arrowEditFormLeftPosition","sliderButtonsDirection","componentsApis","location","age","itemCode","itemParticipants","conditionsUrl","carCode","carDriver","containerListId","trackAttr","sliderButtonDirectionAttr","containerCarListId","defaults","maxNumberOfCarsToBeShown","minimumAge","showEditTemplateForIncludedCars","maxNumberOfEquipmentsToBeSelected","carRentalOperations","config","block","behavior","BookingCarRentalDataMapper","apiService","widgetService","_mapDefaultTexts","carsLists","_mapCarsLists","editDetailsInformation","_mapEditDetailsInformation","isCarSelectedRequired","includedCarOutOfStock","_mapCarRentalMessages","participant","_mapParticipant","selectedOptionsLength","addExtraCarsConfiguration","_mapAddExtraCarsConfiguration","serviceBookingLimit","buttonTexts","showMoreItemsButtonText","showLessItemsButtonText","editButtonText","upgradeButtonText","checkoutTexts","driverLabelText","carTexts","checkoutAdviceText","conditionGroup","_mapConditions","bookingParticipantIds","availableCars","_availableCars","notSelectedCars","_filterCarsBasedOnDisabledParticipants","_mapChoiceListCars","addExtraCarsInformation","addExtraCarDescription","showAddExtraCarsBlock","addExtraCarEnabled","serviceOptions","serviceOptionsSelectedLength","filteredCars","selectedCars","_toConsumableArray","Array","fill","x","index","currentSelectedCars","shift","selectedCarPrice","_generatePartialId","num","Number","_configurations$check","_data$currentSelected","_data$index","_getCarListId","collapseListInformationTitle","_mapNumberOfOptionsToBeShown","upgradeCarFeatureEnabled","showInSlider","hasRichOptions","requiredMessageWhenIncludedCarsAreNotAvailable","_mapAvailableSelectedCars","_mapAvailableCars","_data$currentSelected2","_data$selectedCarPric","anyCarSelected","availableCar","_mapAvailableCar","_this4","_data$currentSelected3","_data$selectedCarPric2","filteredNotSelectedCars","carsToBeMapped","selectedCar","notSelectedCar","carClass","cars","_this5","_checkIfCarIsBookable","carsIsEditable","disabledParticipants","_checkIfDisabledParticipantsMatch","isSelfEditable","apiAvailableCar","isBookable","participantsFromOption","isArray","every","val","reduce","acc","current","apiCar","carModel","displayText","imagePath","large","availableOnRequest","onRequestLabelText","_mapCarPrice","_mapCarFeatures","locationCode","_mapCarConditions","carConditionsLabelText","link","href","_configurations$price","_configurations$price2","priceSettings","_mapPriceSettings","carPrice","_getPrice","carPriceFormatted","Math","abs","pricePerDay","pricePrefix","_getPricePrefix","_getOptionAdditionalPrice","priceAmountValue","apiOption","selectedOptionPrice","optionPriceSymbol","_checkIfOptionServiceTypeIsPerParticipant","occupancy","passengers","luggage","doors","airConditioner","hasAirconditioned","characteristicAirYesText","characteristicAirNoText","gearShift","hasAutomaticGear","characteristicGearAutomaticText","characteristicGearManualText","isRequired","extraClassesForRichOption","widgetOption","_mapCarAsOption","widgetBaseCar","_mapCar","widgetAvailableCar","_mapEquipments","carIsEditable","_checkIfCarIsEditable","carCanBeUpgraded","_checkIfCarCanBeUpgraded","widgetSelectedCar","_mapSelectedCar","driverId","alternativeName","hasCheckedCreditCard","apiParticipant","isValidDateString","ageCategory","cancelButtonText","saveButtonText","addButtonText","origin","originLabelText","driverPlaceholderText","driverMessageRequiredText","driverBirthdateLabelText","editDriverBirthdateEditable","_calculateMinDate","driverBirthdateSelectorPlaceholderDay","driverBirthdateSelectorPlaceholderMonth","driverBirthdateSelectorPlaceholderYear","driverBirthdateSelectorMessageRequired","driverBirthdateSelectorMessageInvalid","driverBirthdateSelectorMessageOutOfRange","equipmentsLabelText","_mapEquipmentsIntroText","_mapAgeWarningFromConfig","maxNumberOfEquipments","equipmentsIntroTextReplaced","maxNumberOfEquipmentsToBeReplaced","_this6","widgetEquipments","selectedEquipmentIds","selectedEquipment","_mapEquipment","apiEquipment","equipmentSelected","ageWarningConfiguration","ageWarningAge","ageWarningText","minimumAgeToDrive","minDate","Date","setFullYear","getFullYear","formatDate","apiUsps","_this7","hasLink","widgetUsp","isIconHidden","linkAlternateText","widgetMessage","isOpenJawPackage","includedCarPriceChanged","openJawPackageMessage","_mapOpenJawPackageMessage","includedCarsNoAvailabilityMessage","_mapCarRentalMessage","includedCarsNoAvailabilityMessageText","includedCarsNoAvailabilityMessageTitle","priceIncreaseWarningMessage","includedCarPriceChangedMessageText","includedCarPriceChangedMessageTitle","messagesToBeShown","_this8","openJawMessages","openJawAmountFormatted","openJawFeeAmount","textReplaced","openJawFeeMessageText","message","openJawFeeMessageTitle","m","isMessageNeededToBeShown","texts","some","choiceListInfo","toLowerCase","areConditionsAccepted","creditCardChoiceList","identifierSearchName","defaultTexts","CreditCard","checkboxRequired","showAndValidateCreditCardCheckbox","_showAndValidateCreditCardCheckbox","setCreditCardCheckboxTexts","_setCreditCardCheckboxTexts","showCreditCardCheckBox","requiredMessage","enableErrors","validate","validation","isValid","creditCardChecked","sessionStorageInfo","_getCreditCardCheckboxInfoFromSessionStorage","newOptions","getProp","isCreditCardChecked","setProp","classList","remove","elForm","creditCardElement","apiCreditCard","identifier","urlParams","window","URLSearchParams","search","draftId","creditCardSelectedValues","_getIdentifier","webStorage","session","_defineProperty","set","_asyncToGenerator","BookingCarRental","_BookingBox","_handleValidationClient","_handleConditionsValidation","collapseEditContainerApis","collapseListContainerApis","dataset","previousCarSelected","isUpgradingCar","creditCardConfiguration","creditCardEnabled","creditCardCheckboxLabel","creditCardCheckboxRequiredMessage","setShowCarsInOneRow","setisCarIncludedAndIsAlwaysShowingUpgradingCarsInOneRow","mapService","showComponent","hideComponent","list","assign","BookingCarRentalConditionsTemplate","addExtraCarTitle","getTokenClass","addExtraCarButtonText","addExtraCarButtonIcon","BookingCarRentalAddExtraCarsTemplate","_initHtmlElements","_initApis","_setCollapseListContainerApis","_renderEditDetailsTemplateForIncludedCarsSelected","conditionsChoiceList","_callee2","apiWithError","_context2","choiceListApis","_checkIfCarSelectedIsRequired","_checkIfAnyCarIsSelected","formValidation","_validateFormCarSelected","_showApiErrors","_callee3","extraInformation","performValidation","_context3","conditionsChoiceListApi","fieldType","_currentList$choiceLi","_currentList$choiceLi2","listContainerId","_getContainerIdFromElement","currentList","getValidationMessages","styleValidity","choiceListElements","choiceListElement","editCarButtons","editCarButtonApis","removeCarButtons","removeCarButtonApis","upgradeCarButtons","upgradeCarButtonsApis","choiceListApi","removeListener","_clickedOption","_enableOtherActionButtons","_editCarButtonClicked","_removeCarButtonClicked","_upgradeCarButtonClicked","_attachConditionsEvents","_attachAddExtraCarEvents","_attachSliderButtonEvents","sliderButtonNavigationElements","sliderButtonNavigationApis","sliderButtonNavigation","carListElement","closest","bookingCarRentalEvents","buttonDirection","carListId","_conditionsClicked","addExtraCarButtons","addExtraCarButtonApis","_addExtraCarButtonClicked","dataDefaultListTemplate","mapDefaultChoiceListCar","extraCarListTemplate","_removeEvents","selectedCarItem","_removeCar","_mapPatchRemoveCar","listCollapseContainerId","selectedOptions","_list$choiceListInfor","_list$choiceListSelec","_list$choiceListSelec2","_list$choiceListInfor2","optionClicked","selectedOption","close","_renderEditDetailsTemplate","_showCollapseEditContainers","extraItemsToBeShown","_updateCollapseCarItemsVisibility","carOption","collapseFormCarItemId","parentElement","_hideCollapseEditContainer","attribute","containerElement","currentSelectedOption","_currentList$choiceLi3","_currentList$choiceLi4","_currentList$choiceLi5","_currentList$choiceLi6","oldServiceValue","_getOldServiceValueFromData","_hideSelectedInfoSectionFromAllOptions","carItemSelectedData","validationResult","_getValueFromSelectedCar","_upgradeSelectedCar","_currentList$choiceLi7","_currentList$choiceLi8","_currentList$choiceLi9","_currentList$choiceLi10","driverValue","equipmentsSelected","_mapConditionOptions","oldOptions","oldOption","opt","includedCarLists","_list$choiceListInfor3","_list$choiceListSelec3","carItems","includedCars","collapseContainerId","formElement","editCollapseIdElement","_getEditCollapseId","_collapseEditContainerShouldBeShown","add","_selectedOption$drive","isCarEntireRow","dataEditTemplate","editTemplateContainerElement","_renderEditDetailsTemplateContent","targetElement","parentRichOptionElement","nextElementSibling","_currentList$choiceLi11","_currentList$choiceLi12","_data$showCarsInOneRo","editHtmlTemplate","insertAdjacentElement","_placeArrowEditFormProperly","collapseCheckoutElement","children","currentCheckoutCarForm","_setCollapseEditContainerApis","_hideCancelButton","_attachCarFormEvents","_fillCheckoutFormControlsWithData","_setFormControlsCurrentValues","optionElementSelectedRect","getBoundingClientRect","bookingItemRect","arrowPosition","left","arrowItem","style","selectedOptionValue","shouldBeShown","isCollapsed","choiceList","selectedInfoSections","_list$choiceListInfor4","_list$choiceListSelec4","carsSelected","flat","driverIds","_this9","_this$_getFormControl","_getFormControls","apiDriver","apiEquipments","disabledDriversForCurrentList","_getDriversIdAlreadySelectedFromExistingLists","driverItems","isDisabled","_mapDriverDropdownText","silent","selectedEquipmentsLength","_mapDisabledEquipmentState","formEquipmentsContainerElement","participantName","driverAlreadyAssignedToCarText","form","carItem","_this10","_this$_getFormControl2","apiBirthdate","driverBirthdate","proposedDriverInfo","_this11","_this$_getFormControl3","getFormControls","elWarning","btnConfirmSelection","ev","_onConfirmCarSelectionForm","btnCancelSelection","_onCancelCarSelectionForm","_onBirthdateChanged","_onDriverChanged","previousSelectedEquipmentIds","_onEquipmentsChanged","_carItemSelectedData$","_carItemSelectedData$2","getSelectedValues","setCreditCardSessionStorage","attachCreditCardEvents","elements","apis","mustShow","getAge","innerText","toggleCreditCardCheckbox","_this12","equipmentIsChecked","_setIsCollapsedFromCollapseEditContainerApis","_saveEditSelectedCar","_addCar","firstFormItemWithError","scrollIntoView","_this$_getFormControl4","isCreditCardRequiredValid","creditCardCheckboxValidation","_mapPatchAddCar","_scrollComponentToView","_mapPatchEditCar","_mapPatchUpgradeCar","_mapCarForPatch","oldCarItemSelectedValue","selectedCarItemInfo","split","pickUpType","driverParticipantId","datatype","stringify","collapse","_this13","editCollapseId","editButtonClicked","open","_this14","collapseListId","_collapseMaxItemsToBeShown","update","_currentList$choiceLi13","collapseItemsToBeShown","checkedCarItems","BookingBox","bookingChoiceList","CHOOSE_PER_PERSON_SWITCH","renderTypeEnum","operationTypeEnum","BookingChoiceListDataMapper","_checkRenderTypePerBooking","renderType","isAppliesToAllParticipantsVisible","_checkIfAppliesToAllParticipantsMustBeVisible","room","_mapRoom","warnings","_mapMessages","showMessagesOnTop","choosePerPersonSelected","_checkIfAppliesToAllParticipantsMustBeDisabled","choosePerPerson","_mapAppliesToAllParticipants","apiRoom","_checkRenderTypePerRoom","_filterParticipants","roomName","ignoreValidation","highlighted","_checkRenderTypePerParticipant","firstName","unresolved","_mapOption","optionPriceFormatted","prices","calculatedOptionPrice","filterEmptyParticipantIdsFromPrices","_priceSplittedPerAgeCategory","_priceFormatted","uniqueId","additionalText","percentage","assignedParticipants","highlightText","bestValueText","participantsGroupedByAgeCategory","_getParticipantsGroupedByKey","_showAgeCategoryWithPrice","_showRangePrice","ageCategoriesTexts","pricePerAgeCategory","priceItem","ageCategoryTranslated","suffix","isLabelPricePerAgeCategoryAtStart","_calculateTotalPricePerOption","pricesOrdered","sort","firstItem","secondItem","lastItem","warning","_mapMessage","totalPrice","_checkIfAllServiceOptionsAreDisabledForAllParticipants","switchInfo","appliesToAllParticipantsLabel","anyOptionHasDisabledParticipants","anyOptionHasAllParticipantsAssigned","checkIfParticipantsMatch","showAppliesToAllParticipants","trackingEventAttr","bookingMessagesElement","appliesToAllParticipantsElement","appliesToAllParticipantsElementSwitch","bookingChoiceListItem","bookingChoiceListHeadingRoomTitle","classNames","BookingChoiceList","firstLoad","trackingEvent","appliesToAllParticipantsUrl","choosePerPersonIsChecked","choosePerPersonIsAvailable","disabledValues","event","inputAllParticipants","currentTarget","serviceId","_getServiceIdSelectedAppliesToAllParticipants","_saveChoosePerPersonToSessionStorage","_emitChoosePerPersonEvent","appliesToAllParticipants","switchEventArgs","bookingChoiceListEvents","optionToApplyAllParticipants","_mapSelectedOptionForPatch","rawData","newServiceValue","_getOldServiceValue","_mapOperationType","appPart","serviceValue","_attachAppliesToAllParticipantsEvents","appliesToAllParticipantsSwitch","addEventListener","preventDefault","_appliesToAllParticipantsClicked","BookingChoiceListTemplate","configurationsSavedSessionStorage","_retrieveChoosePerPersonDataFromStorage","appliesToAllParticipantEnabledByDefault","_widgetData","_widgetData$rooms$0$p","_widgetData$rooms$0$p2","_updateBookingBoxCollapse","_getServiceName","appliesToAllParticipantsConfig","disabledId","_room$participants$0$","_participant$choiceLi","_participant$choiceLi2","firstParticipant","_widgetData$choosePer","inputSwitch","_toggleChoiceListElementsVisibility","choiceListInfos","choicelistApi","_updateConditionsElement","_updateMessagesElement","_trackInitialValues","_cleanUpComponentApi","noneOptions","isNoneOption","groupCodeArrays","groupCode","uniqueGroupCodes","Set","bookingChoiceListElements","bookingChoiceListHeadingRoomTitles","_showAllBookingChoiceListElements","_hideBookingChoiceListElements","BookingConditionsTemplate","messagesElement","_trackInitialValuesForRooms","_trackInitialValuesForParticipants","filteredParticipants","_mapOptionsForParticipants","bookingStepsEvents","BOOKING_ITEM_INITIAL_VALUES","state","isChecked","_getComponentIdentifier","setChoosePerPersonSelectedData","choosePerPersonSelectedData","defaultBookingChoiceListData","SwitchTemplate","BookingAppliesToAllParticipantsTemplate","appliesToAllParticipantsSelected","defaultBookingComparisonTableData","productTableTemplate","serviceOption","priceText","feature","buttonHTMLClass","unselectTextButton","selectTextButton","selectButtonTemplate","ModalV2Template","closable","bodyContent","moreInfoTextButton","moreInfoButtonTemplate","buttonGroupTemplate","BookingComparisonTableDataMapper","_mapTexts","percentageText","modalInformation","topInformationText","_arrayLikeToArray","arr","len","arr2","selectButton","optionCode","BookingComparisonTable","selectButtons","_arrayWithoutHoles","iter","from","_iterableToArray","minLen","test","_unsupportedIterableToArray","_nonIterableSpread","selectButtonApis","_optionSelected","description","extraContent","linkText","cancellationInsuranceTableTemplate","bookingFilterableServices","BOOKING_FILTERABLE_SERVICES_CONTAINER_TOGGLE","BOOKING_FILTERABLE_SERVICES_SWITCH_TOGGLE","BOOKING_FILTERABLE_SERVICES_CANCEL_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_FILTERABLE_SERVICES_SAVE_BUTTON","CheckButtonGroupChipsType","filterType","MapFilterItemText","filterValue","textToBeReplaced","mapFilterItem","selectedValue","CreateItemsDivs","ReturnMissingDates","dates","hash","b","missingDaysNo","missingDate","toISOString","MapAvailableHoursToOptions","timeConfig","hour","minTime","maxTime","interval","date","formatter","Intl","DateTimeFormat","minute","hour12","time","_time","setHours","setMinutes","formattedTime","format","default","numberStepperApi","buttonGroupApi","tabNavApi","collapseApi","sideDrawerApi","dropdownApi","calendarFieldApi","numberStepperFilters","buttonGroupFilters","choiceListFilters","tabNavFilters","dropdownFilters","dateFilters","calendarField","dateCalendarDataModel","timeSelector","quantityComponent","choiceListParticipantsAsOptions","participantAsOptionAdditionalText","choiceListServiceOptions","acceptButtons","cancelButtons","sideDrawer","scrollable","switch","container","filterInfo","filterInfoPrice","filterInfoDescription","emptyMessage","validationMessages","timeMessages","filterId","tabsId","datasetServiceId","buttonGroupValue","suffixIdentifiers","ServiceHeaderTemplate","containerAttributes","useQuantity","quantity","serviceSelectedInfoText","showParticipantsAsOptions","optionsSelected","noneOption","noServiceSelected","areSomeServiceOptionsFreeForParticipant","selectServiceForFree","GetTextForServiceHeader","isSwitchChecked","uid","SwitchText","canBeUnselected","ServicePriceTemplate","CollapseTriggerTemplate","defaultCollapseTriggerData","smooth","arrow","serviceTitle","serviceText","ServiceBodyTemplate","BookingFilterableServicesFilterTemplateRenderer","filters","FilterableServicesOptionsEmpty","emptyOptions","messageData","ServiceBodyButtons","columnName","NumberStepperTemplate","defaultNumberStepperData","minValue","maxValue","filterLabel","BookingFilterableServicesNumberStepperFilterTemplate","defaultDropdownData","filterIcon","BookingFilterableServicesDropdownFilterTemplate","selectedDates","selectedDate","disabledDates","CalendarFieldTemplate","acceptButtonText","dateAcceptButton","dateCancelButton","BookingFilterableServicesDateTimeFilterTemplate","LabelTemplate","ButtonGroupTemplate","durationFilterSuffixText","BookingFilterableServicesButtonGroupFilterTemplate","BookingFilterableServicesChoiceListFilterTemplate","TabsNavTemplate","swipeable","isOpen","TabsContentWrapperTemplate","BookingFilterableServicesTabFilterTemplate","GetBottomSectionHtml","quantityHtml","maxQuantity","quantityLabel","BookingFilterableServicesQuantityNumberStepperTemplate","participantsHtml","optionsLabel","BookingFilterableServicesParticipantsChoiceListTemplate","timeHtml","addTime","timeConfiguration","BookingFilterableServicesTimeDropdownTemplate","optionsHtml","filteredOptions","hideOptions","BookingFilterableServicesOptionsTemplate","FilterableServicesWarningMessage","CalculateServicePrice","componentTypeEnum","BookingFilterableServicesDataMapper","servicesData","componentType","apiRooms","rows","emptyRows","filterDefaultValuesPerParticipant","row","filterSelectedDefaultValue","accumulator","currentValue","definesDefaultValue","defaultValue","startDateDefaultValue","selectedStartDateValue","apiOptions","previousSelection","shouldFilterByPreviousData","findIndex","_addParticipantToAssignedParticipants","floor","random","indexOf","_getOptionAdditionalText","optionCalculatedPrice","_generateUniqueId","_mapServices","_mapRenderType","serviceData","_filterOptions","baseFilterColumn","baseFilterValue","optionsWithoutNoneOption","_mapFilters","_generateServiceObject","_calculateServiceTotalPrice","mapOptions","_getFilteredOptions","_mapCanUnselect","mapParticipantsAsOptions","disabledOptionsNotChecked","serviceSelectedOption","serviceUid","filterData","filterValues","_distinctOptions","sortedFilterValues","availableOptionsWithCurrentFilters","columnValue","substring","OperationTypeMapper","newOption","isUnselecting","previousOption","ParticipantIdsMapper","allRows","participantsAsOptionsApi","parseInt","quantityApi","participantsFromOtherRowsWithSameSelectedOption","currentRow","BookingFilterableServices","canSentEvents","_showComponent","dataAttributesCollapse","dataAttributesSideDrawer","bodyTemplate","defaultSideDrawerData","until","SideDrawerHeaderTemplate","SideDrawerBodyTemplate","defaultCollapseData","collapseFrom","SideDrawerTemplate","ServiceTemplate","_cleanEmptyRows","_applyCustomSafeMarginToFirstCollapseElement","_initCalendarFields","_mapApisToRows","setTimeout","scrollableElementClientRect","elementClientRect","safeMargin","top","scrollableApi","calendarObject","widgetElement","CalendarField","calendarDataModelObject","Swipe","CreateInstancesOnDocument","_attachEvent","quantityElements","quantityElementApis","quantityElement","quantityElementApi","_quantityChanged","participantsAsOptionschoiceListElements","participantAsOptionElementApis","participantAsOptionElement","participantAsOptionElementApi","_participantAsOptionChanged","acceptButtonApis","acceptButton","_getCurrentRowByElement","_eventCustomerInteractionEmitter","bookingFilterableServicesEvents","_extractServiceType","_optionChanged","cancelButtonApis","_optionCancelled","currentSwitch","_switchClicked","_containerClicked","_elementIsSwitchRelated","_openContainers","contains","_emitEventOnceToggled","toggle","isOpened","serviceType","apiSelector","eventName","filterApi","_raiseCustomerEvent","_filterChanged","lastSelectedValue","availableValues","indexOfValueToShow","disabledMissingOptions","buttonsInGroup","selectedButtonIndex","button","wBookingFilterableServices__buttonGroupValue","activeElement","forceUpdate","display","min","max","availableOptions","_mapFilterTextItem","availableValue","availableOption","firstAvailableOptionNotDisabled","optionsToBeUpdated","_filter$api$selection","selection","newAttributes","cid","_objectWithoutProperties","_excluded","missingDatesFromOption","notAvailableDatesForCurrentSelection","setAttributes","_mapFilterApi","_getNumberStepperValue","_setNumberStepperValue","_updateNumberStepperFilterValues","_getButtonGroupValue","_setButtonGroupValue","_updateButtonGroupFilter","_getChoiceListValue","_updateChoiceListFilterValues","_getTabsValue","_setTabsFilterValues","_updateTabsFilterValues","_getDropdownValue","_updateDropdownFilterValues","_getDateValue","_updateDateFilterValues","timeSelectorElements","timeSelectorApi","timeOptions","idx","timeOption","additionalTexts","filterInfoSection","buttonsSection","_enableAcceptButton","timeSelectorElementApis","timeSelectorElement","_toggleTimeChangedMessage","resultsApi","_selectedOptionChanged","_selectedOptionEvent","_applyFiltersAndSelectedOption","filterKeys","savedData","_retrieveDataFromStorage","currentRowSelectedOptionCode","optionFilterValues","_getOptionSelectedValues","_updateFilterShownValues","firstFilterKey","firstFilterElement","_applyFilters","filtersValues","_getRowFiltersAsArray","currentFilter","setValue","_checkIfCurrentSelectedOptionServiceTypeIsPerParticipant","_checkIfCurrentSelectedOptionServiceTypeIsPerUnit","hideMessage","participantsChecked","_toggleOccupancyValidationMessage","getValueFunction","setValueFunction","updateFilterValuesFunction","rowId","elementId","_findElementId","getValue","updateFilter","_eventFilterEmitter","filterTypeExpected","_refreshFilters","_getDefaultStartDate","_refreshTimeOptions","currentRowSelectedValues","_getFilterSelectedValues","selectedTimes","_checkIfAnySelectedOptionExists","assigned","updatedTimeOptions","filtersObject","optionSelected","enableAcceptButton","participantOptions","selectedValues","sourceOptions","optionIndex","previousSelectedOptionIndex","_handleEmptySelection","defaultDurationValuesParticipant","duration","_getPreviousStartDate","previousOptions","previousSelectedOption","isEmpty","currentOption","filterArray","afterChangedFilter","currentFilterSelection","filterSelectedValues","useSavedFilterValue","tempFilterSelectedValues","valuePosition","splice","currentDefaultFilterValuePerParticipant","defaultFilter","lastSelectedOption","_closeContainers","patchBody","patchEventArgs","previousSelectedOptionCode","_setSessionStorage","getOperationType","getParticipantIds","eventargs","transitionTime","cssTimeToMs","getStyle","_resetQuantityNumberStepper","_resetSelectedParticipantsAsOptions","rowUid","selectedOptionCode","_getComponentId","_this15","emptyRow","emptyRowElement","filterKey"],"sourceRoot":""}