{"version":3,"sources":["attractionSearchbox.js"],"names":["AttractionSearchBox","_createClass","t","options","arguments","length","undefined","_classCallCheck","this","specificProductId","target","querySelector","form","productOptions","submit","bind","key","value","passengerTypes","addEventListener","querySelectorAll","dateValues","searchBoxes","dateTimes","getValues","getDateTimeContainer","Promise","resolve","parseInt","createPayload","productId","departureId","outboundDate","outboundHour","hours","outboundMinute","passengers","element","dataset","id","infantId","_document$querySelect","document","adultIds","_document$querySelect2","infantAmount","getSelectedForTypeId","adultAmount","getSelectedForTypeArrayId","split","map","passengerType","a","b","ValidateInfant","errors","outbound","parsedDate","isBefore","moment","push","search","_this","then","ValidatePayload","payload","ShowErrors","area","innerHTML","message","innerText","appendChild","style","display","event","preventDefault","stringify","localStorage","currentSearchType","_this2","searchPayload","JSON","uri","window","Utilities","ShowLoader","json","products","_this3","selectedId","filter","x","Id","keyValues","fetch","response","Name","bindProducts","data","formWrappers","_this4","locations","bindList","bindDepartureLocations","destinationId","_this5","departurePoints","selectedDepartureId","_this6","get","filtered","refreshDepartureOptions","_","LocationId","productLargeSelect","_this7","loadProducts","LargeSelectList","departurePointLargeSelect","departurePointId","date","concat","toISOString","preferredDateTime","_this8","setDateTime","_this9","all","departurePointSelect","renderDateTimePicker","loadPreferredDate","paxSelect","remove","SearchBoxValidationCallback","addListener","model","_this10","buildUnixString","setSelected","d","CheckValidation","datePicker","container","timePicker","LargeSelectDate","closest","LargeSelectTime","bookNowProductSearch","Initialise"],"mappings":"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","file":"attractionSearchbox.js","sourcesContent":["class AttractionSearchBox {\n constructor(t, options = {}) {\n options = options || {};\n this.specificProductId = options.specificProductId;\n\n this.target = t;\n this.form = this.target.querySelector(\"form\");\n\n this.productLargeSelect = this.target.querySelector(\"[data-attraction-filter=products] [data-select-type=list]\");\n this.productOptions = [];\n this.productSelect = {};\n\n this.departurePointLargeSelect = this.target.querySelector(\"[data-attraction-filter=departurePoints] [data-select-type=list]\");\n this.departureOptions = [];\n\n this.form.addEventListener('submit', this.submit.bind(this));\n }\n\n createPayload() {\n let passengerTypes = this.target.querySelectorAll('[name=passengerType]');\n let dateValues = searchBoxes.dateTimes.getValues(this.getDateTimeContainer());\n\n return Promise.resolve({\n productId: parseInt(this.form.productId.value),\n departureId: parseInt(this.form.departureId.value),\n outboundDate: dateValues.date,\n outboundHour: dateValues.hours,\n outboundMinute: dateValues.minutes,\n passengers: [].filter.call(passengerTypes, (element) => element.value !== \"0\")\n .map(element => ({ id: element.dataset.id, value: element.value }))\n });\n }\n\n ValidateInfant(errors) {\n const infantId = document.querySelector(\"[data-infant-id]\")?.dataset.infantId;\n const adultIds = document.querySelector(\"[data-adult-ids]\")?.dataset.adultIds;\n\n if (!infantId || !adultIds) {\n return;\n }\n\n const infantAmount = searchBoxes.passengers.getSelectedForTypeId(this.form, infantId).value;\n const adultAmount = searchBoxes.passengers.getSelectedForTypeArrayId(this.form, adultIds.split(','))\n .map(passengerType => passengerType.value)\n .reduce((a, b) => parseInt(a) + parseInt(b), 0);\n\n if (infantAmount > 0 && adultAmount <= 0) {\n const message = this.form.dataset.infantValidationMessage;\n errors.push(message);\n }\n }\n\n ValidatePayload(search) {\n let errors = [];\n\n this.ValidateInfant(errors);\n\n let outbound = searchBoxes.dateTimes.getValues(this.getDateTimeContainer()).parsedDate();\n\n if (!outbound) {\n errors.push(\"The departure date is invalid\");\n } else if (outbound.isBefore(new moment())) {\n errors.push(\"The outbound date cannot be before today's date.\");\n }\n\n if (!search.passengers.length) {\n errors.push(\"Please select at least 1 passenger.\");\n }\n\n return errors;\n }\n\n CheckValidation() {\n this.createPayload()\n .then(payload => this.ValidatePayload(payload))\n .then(errors => this.ShowErrors(errors));\n }\n\n ShowErrors(errors) {\n let area = this.target.querySelector(\".search-form__validation-area\");\n\n area.innerHTML = \"\";\n errors.forEach(error => {\n let message = document.createElement(\"p\");\n message.innerText = error;\n area.appendChild(message);\n });\n\n area.style.display = area.innerHTML === \"\" ? \"none\" : \"block\";\n\n return errors;\n }\n\n submit() {\n event.preventDefault();\n\n this.createPayload()\n .then(payload => {\n localStorage.currentSearch = JSON.stringify(payload);\n localStorage.currentSearchType = \"attractionresults\";\n\n this.form.searchPayload.value = JSON.stringify(payload);\n\n return payload;\n })\n .then(payload => this.ValidatePayload(payload))\n .then(errors => this.ShowErrors(errors))\n .then(errors => {\n if (!errors.length) {\n Utilities.ShowLoader();\n this.form.submit();\n }\n });\n }\n\n get(uri) {\n return window.fetch(uri)\n .then(response => response.json());\n }\n\n bindProducts(products, selectedId = 0) {\n return Promise.resolve(typeof selectedId === \"undefined\" ? parseInt(this.form.productId.value) : selectedId)\n .then(id => products.filter(x => x.Id == id).length ? id : products.length ? products[0].Id : 0)\n .then(id => {\n return {\n keyValues: products.map(x => {\n return {\n key: x.Id,\n value: x.Name\n };\n }),\n selectedId: id\n };\n })\n .then(data => searchBoxes.formWrappers.bindList(this.form.productId, data.keyValues, data.selectedId));\n }\n\n bindDepartureLocations(locations, selectedId = 0) {\n return Promise.resolve(typeof selectedId === \"undefined\" ? parseInt(this.form.departureId.value) : selectedId)\n .then(id => locations.filter(x => x.Id == id).length ? id : locations.length ? locations[0].Id : 0)\n .then(id => {\n return {\n keyValues: locations.map(x => {\n return {\n key: x.Id,\n value: x.Name\n };\n }),\n selectedId: id\n };\n })\n .then(data => searchBoxes.formWrappers.bindList(this.form.departureId, data.keyValues, data.selectedId));\n }\n\n refreshDepartureOptions(selectedDepartureId = 0) {\n return Promise.resolve(parseInt(this.form.productId.value))\n .then(productId => this.productOptions.filter(x => x.Id == productId)[0].LocationId)\n .then(destinationId => this.departurePoints.filter(x => x.Id != destinationId))\n .then(locations => this.bindDepartureLocations(locations, selectedDepartureId));\n }\n\n loadProducts() {\n return this.get(\"/Umbraco/Api/DataApi/Products\")\n .then(products => {\n if (this.specificProductId) {\n var filtered = products.filter(x => x.Id == this.specificProductId);\n\n if (filtered.length == 1) {\n return filtered;\n }\n }\n\n return products;\n })\n .then(products => {\n this.productOptions = products;\n\n return this.bindProducts(products)\n .then(_ => {\n if (products.length == 1) {\n this.form.productId.disabled = true;\n this.productLargeSelect.querySelector(\".large-select__icon\").style.display = \"none\";\n this.productLargeSelect.querySelector(\".large-select__value\").innerHTML =\n products[0].Name;\n } else {\n this.productSelect = new LargeSelectList(this.productLargeSelect);\n }\n });\n });\n }\n\n loadDeparturePoints() {\n return this.get(\"/Umbraco/Api/DataApi/departurepoints\")\n .then(data => {\n this.departurePoints = data;\n\n return this.bindDepartureLocations(data)\n .then(_ => {\n this.departurePointSelect = new LargeSelectList(this.departurePointLargeSelect);\n });\n });\n }\n\n getDateTimeContainer() {\n return this.form.querySelector(\"[data-attraction-filter=travelDate]\");\n }\n\n loadPreferredDate() {\n var productId = parseInt(this.form.productId.value);\n var departurePointId = parseInt(this.form.departureId.value);\n\n var date = searchBoxes.dateTimes.getValues(this.getDateTimeContainer()).parsedDate() || new moment();\n\n return this.get(`/Umbraco/Api/DataApi/ProductDefaultDate?productId=${productId}&departurePointId=${departurePointId}&selectedDateTime=${date.toISOString()}`)\n .then(preferredDateTime => {\n if (preferredDateTime) {\n this.setDateTime(preferredDateTime);\n }\n });\n }\n\n Initialise() {\n return Promise.all([\n this.loadProducts(),\n this.loadDeparturePoints()\n ])\n .then(_ => this.refreshDepartureOptions())\n .then(_ => {\n this.renderDateTimePicker(this.getDateTimeContainer());\n\n return this.loadPreferredDate();\n })\n .then(_ => {\n this.paxSelect = new LargeSelectPax(this.target.querySelector(\"[data-attraction-filter=pax] [data-select-type=pax]\"));\n\n this.target.querySelector('[data-loader]').remove();\n this.target.querySelector('form').style.display = '';\n\n this.form.productId.addEventListener('change',\n () => {\n this.refreshDepartureOptions()\n .then(_ => this.loadPreferredDate());\n });\n this.form.departureId.addEventListener('change',\n () => {\n this.loadPreferredDate();\n });\n this.form.outboundDate.addEventListener('change', () => {\n this.loadPreferredDate();\n });\n\n SearchBoxValidationCallback.addListener(\"Product\",\n () => {\n this.CheckValidation();\n });\n });\n }\n\n bind(model) {\n return this.bindProducts(this.productOptions, model.productId)\n .then(_ => this.refreshDepartureOptions(model.departureId))\n .then(_ => this.setDateTime(searchBoxes.dateTimes.buildUnixString(model.outboundDate, model.outboundHour, model.outboundMinute)))\n .then(_ => searchBoxes.passengers.setSelected(this.form, model.passengers));\n }\n\n setDateTime(d) {\n if (typeof d === 'undefined') {\n d = new Date();\n }\n\n searchBoxes.dateTimes.setDateTime(this.getDateTimeContainer(), new moment(d));\n }\n\n renderDateTimePicker(container) {\n let datePicker = container.querySelector(\"[data-select-type='datetime-date']\");\n let timePicker = container.querySelector(\"[data-select-type='datetime-time']\");\n\n return [\n new LargeSelectDate(datePicker, datePicker.closest('.date-time-picker')),\n new LargeSelectTime(timePicker, timePicker.closest('.date-time-picker'))\n ];\n }\n};\n\nfunction bookNowProductSearch(target, productId) {\n let searchBox = new AttractionSearchBox(target,\n {\n specificProductId: productId\n });\n return searchBox.Initialise();\n}\n"]}