{"version":3,"sources":["excursionsSearchbox.js"],"names":["ExcursionsSearchBox","_createClass","t","options","arguments","length","undefined","_classCallCheck","this","specificProductId","specificDateId","querySelector","selectedProduct","target","productSelect","submit","bind","key","value","querySelectorAll","Promise","resolve","productId","dateId","parseInt","form","dates","selectedDate","createPayload","selectedIndex","text","passengerTypes","filter","element","id","dataset","errors","infantId","_document$querySelect","adultIds","_document$querySelect2","infantAmount","searchBoxes","passengers","getSelectedForTypeId","adultAmount","getSelectedForTypeArrayId","split","map","passengerType","reduce","a","b","message","document","push","search","_this","payload","ValidatePayload","ValidateInfant","ShowErrors","area","innerHTML","forEach","error","CheckValidation","innerText","then","style","_this2","event","preventDefault","JSON","stringify","appendChild","display","searchPayload","currentSearch","uri","window","fetch","json","Utilities","_this3","ShowLoader","selectedId","products","x","Id","keyValues","Name","locationName","data","bindProducts","bindList","_","childNodes","_this4","formWrappers","Value","_this5","bindDates","filtered","disabled","productLargeSelect","LargeSelectList","_this6","productOptions","moment","diff","date","datesOptions","datesLargeSelect","datesSelect","_this7","loadProducts","paxSelect","LargeSelectPax","remove","addEventListener","loadDates","SearchBoxValidationCallback","addListener","model"],"mappings":"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","file":"excursionsSearchbox.js","sourcesContent":["const ExcursionsSearchBox = class {\n constructor(t, options = {}) {\n options = options || {};\n this.specificProductId = options.specificProductId;\n this.specificDateId = options.specificDateId;\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.selectedProduct = \"\";\n this.datesLargeSelect = this.target.querySelector(\"[data-attraction-filter=dates] [data-select-type=list]\");\n this.productOptions = [];\n this.datesOptions = [];\n this.productSelect = {};\n\n this.form.addEventListener('submit', this.submit.bind(this));\n }\n\n createPayload() {\n let passengerTypes = this.target.querySelectorAll('[name=passengerType]');\n \n return Promise.resolve({\n productId: parseInt(this.form.productId.value),\n dateId: parseInt(this.form.dates.value),\n selectedDate: this.form.dates.options[this.form.dates.selectedIndex].text,\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 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 = \"excursionresults\";\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 + \"/SPLIT\\\"\" + x.locationName\n };\n }),\n selectedId: id\n };\n })\n .then(data => searchBoxes.formWrappers.bindList(this.form.productId, data.keyValues, data.selectedId))\n .then(_ => {\n let products = document.querySelectorAll(\"[data-excursionssearchbox] [name=productId]\")[1].childNodes;\n if (products.length > 0) {\n products.forEach((element) => {\n let split = element.innerText.split(\"/SPLIT\\\"\");\n element.dataset[\"textvalue\"] = split[1] + \"\" + split[0];\n });\n }\n \n });\n }\n\n bindDates(dates, selectedId = 0) {\n return Promise.resolve(typeof selectedId === \"undefined\" ? parseInt(this.form.dates.value) : selectedId)\n .then(id => dates.filter(x => x.id == id).length ? id : dates.length ? dates[0].Id : 0)\n .then(id => {\n return {\n keyValues: dates.map(x => {\n return {\n key: x.Id,\n value: x.Value\n };\n }),\n selectedId: id\n };\n })\n .then(data => searchBoxes.formWrappers.bindList(this.form.dates, data.keyValues, data.selectedId));\n }\n\n loadProducts() {\n return this.get(\"/api/data/Excursions\")\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 return products;\n })\n .then(products => {\n this.productOptions = products;\n\n return this.bindProducts(products)\n .then(_ => {\n this.selectedProduct = products[0].Id;\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 \n } else {\n this.productSelect = new LargeSelectList(this.productLargeSelect);\n }\n });\n });\n }\n\n loadDates() {\n return this.get(`/api/data/ExcursionsDates?id=${this.selectedProduct}`)\n .then(dates => {\n if (this.specificDateId) {\n var filtered = dates.filter(x => x.Id == this.specificDateId);\n\n if (filtered.length == 1) {\n return filtered;\n }\n }\n return dates.filter(date => 0 > moment().diff(moment(date.Value, \"DD/MM/YYYY hh:mm\")));\n })\n .then(dates => {\n this.datesOptions = dates;\n\n return this.bindDates(dates)\n .then(_ => {\n if (dates.length == 1) {\n this.form.dates.disabled = true;\n this.datesLargeSelect.querySelector(\".large-select__icon\").style.display = \"none\";\n this.datesLargeSelect.querySelector(\".large-select__value\").innerHTML =\n dates[0].Value;\n } else {\n this.datesSelect = new LargeSelectList(this.datesLargeSelect);\n }\n });\n });\n }\n\n getDateTimeContainer() {\n return this.form.querySelector(\"[data-attraction-filter=travelDate]\");\n }\n\n Initialise() {\n return this.loadProducts()\n .then(_ => this.loadDates())\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 = 'block';\n\n document.querySelectorAll(\"[data-excursionssearchbox] [name=productId]\")[1].addEventListener(\"change\", () => {\n this.selectedProduct = document.querySelectorAll(\"[data-excursionssearchbox] [name=productId]\")[1].value;\n this.loadDates();\n });\n\n SearchBoxValidationCallback.addListener(\"Product\",\n () => {\n this.CheckValidation();\n });\n });\n }\n\n bind(model) {\n \n }\n};\n\nfunction bookNowExcursionSearch(target, productId) {\n let searchBox = new ExcursionsSearchBox(target,\n {\n specificProductId: productId\n });\n return searchBox.Initialise();\n}\n"]}