{"version":3,"sources":["excursionsSearchbox.js"],"names":["ExcursionsSearchBox","_createClass","t","options","arguments","length","undefined","_classCallCheck","this","specificProductId","specificDateId","form","target","selectedProduct","submit","bind","key","value","passengerTypes","querySelectorAll","Promise","resolve","productId","parseInt","dates","createPayload","selectedIndex","text","passengers","call","element","map","dataset","id","filter","infantId","querySelector","_document$querySelect","adultIds","_document$querySelect2","document","infantAmount","searchBoxes","getSelectedForTypeId","adultAmount","getSelectedForTypeArrayId","split","passengerType","reduce","a","b","errors","message","search","_this","then","ValidatePayload","payload","ValidateInfant","area","innerHTML","forEach","error","CheckValidation","style","ShowErrors","_this2","event","innerText","JSON","stringify","appendChild","display","preventDefault","Utilities","localStorage","uri","fetch","response","_this3","ShowLoader","selectedId","products","x","Id","keyValues","get","window","LocationName","data","bindProducts","bindList","select","children","childNodes","formWrappers","excursionsSearchProductSelects","_this4","_this5","filtered","productOptions","_","disabled","productLargeSelect","loadProducts","LargeSelectList","_this6","concat","moment","date","Value","datesOptions","bindDates","datesLargeSelect","_this7","LargeSelectPax","loader","addEventListener","getDateTimeContainer","loadDates","addListener","excursionProductSelects","model","toggleLoader","bookNowExcursionSearch","Initialise"],"mappings":"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","file":"excursionsSearchbox.js","sourcesContent":["class ExcursionsSearchBox {\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 const excursionsSearchProductSelects = document.querySelectorAll(\"[data-excursionssearchbox] [name=productId]\");\n \n excursionsSearchProductSelects.forEach(select => {\n const children = select.childNodes;\n\n if (children.length > 0) {\n children.forEach((element) => {\n let split = element.innerText.split(\"/SPLIT\\\"\");\n element.dataset[\"textvalue\"] = split[1] + \"\" + split[0];\n });\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(\"/Umbraco/Api/DataApi/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(`/Umbraco/Api/DataApi/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 const loader = this.target.querySelector('[data-loader]')\n const form = this.target.querySelector('form')\n\n loader.style.display = 'none';\n form.style.display = 'block';\n\n const excursionProductSelects = document.querySelectorAll(\"[data-excursionssearchbox] [name=productId]\")\n \n excursionProductSelects.forEach(select => {\n select.addEventListener(\"change\", () => {\n this.selectedProduct = select.value;\n\n loader.style.display = 'block';\n form.style.display = 'none';\n \n this.loadDates().then(() => {\n loader.style.display = 'none';\n form.style.display = 'block';\n });\n });\n })\n\n SearchBoxValidationCallback.addListener(\"Product\",\n () => {\n this.CheckValidation();\n });\n });\n }\n\n bind(model) {\n\n }\n};\n\nfunction toggleLoader(target) {\n \n}\n\nfunction bookNowExcursionSearch(target, productId) {\n let searchBox = new ExcursionsSearchBox(target,\n {\n specificProductId: productId\n });\n return searchBox.Initialise();\n}\n"]}