{"version":3,"sources":["crossingSearchbox.js"],"names":["CrossingSearchBox","_createClass","t","lineItemIds","discountCode","_classCallCheck","this","target","form","querySelector","routeElement","routeLargeSelect","bookAgainDetails","value","routeSelect","submit","bind","key","passengerTypes","getLineItemIdDetails","outboundDateValues","searchBoxes","dateTimes","getValues","getDateTimeContainer","inboundDateValues","addEventListener","createPayload","route","searchType","outboundDate","outboundHour","hours","outboundMinute","inboundDate","Affiliate","inboundHour","inboundMinute","passengers","filter","minutes","element","infantId","_document$querySelect","dataset","adultIds","_document$querySelect2","document","infantAmount","getSelectedForTypeId","adultAmount","getSelectedForTypeArrayId","split","map","passengerType","reduce","a","b","parseInt","errors","message","outbound","parsedDate","ValidateInfant","isBefore","moment","push","ValidatePayload","search","inbound","length","area","innerHTML","forEach","error","createElement","innerText","ShowErrors","style","_this","then","payload","event","preventDefault","_this2","searchPayload","JSON","stringify","localStorage","currentSearch","currentSearchType","Utilities","Modal","close","uri","window","current","response","json","affiliate","defaultRoute","affiliateDefaultRoute","getAffiliateDefaultRoute","undefined","array","id","find","Id","get","data","location","DeparturePoint","fetch","findById","method","item","body","headers","Content-Type","locations","routes","_this3","DepartureId","DestinationId","concat","Destination","Selected","selectedRoute","cb","context","arguments","text","Departure","Name","getRoutes","option","Option","dataValue","_this4","getDepartureLocations","forEachAsync","addRouteOption","_","x","Value","type","routeParts","date","direction","toISOString","closestMatch","crossing","ClosestMatch","closestMatchTime","RobotDateTime","_this5","setDateTime","el","elClone","select","parentElement","disabled","parentNode","replaceChild","_this6","Promise","resolve","mapCrossing","mapRoutes","loadCrossings","LargeSelectList","paxSelect","removeEvents","remove","display","Array","from","querySelectorAll","elm","setTicketType","renderDateTimePicker","Update","object","SearchBoxValidationCallback","addListener","LargeSelectPax","Type","setPassengers","Pax","PaxTypes","removeDownAngle","paxJson","paxTypes","selectList","removeTicketType","pax","PassengerTypeId","PassengerCount","slice","join","_this7","isAfter","all","ticketType","returnDirectionContainer","classList","add","model","_this8","checked","buildUnixString","setSelected","d","Date","container","datePicker","timePicker","LargeSelectDate","closest","LargeSelectTime","prototype","asyncFunction","promiseChain"],"mappings":"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","file":"crossingSearchbox.js","sourcesContent":["class CrossingSearchBox {\n constructor(t, lineItemIds, discountCode) {\n this.target = t;\n this.form = this.target.querySelector(\"form\");\n this.routeElement = this.target.querySelector(\"[name=route]\");\n this.routeLargeSelect = this.target.querySelector(\"[data-select-type=list]\");\n this.routeSelect = {};\n this.bookAgainDetails;\n this.target.querySelector(\"[name=discountCode]\").value = discountCode;\n if (lineItemIds != null) {\n this.bookAgainDetails = this.getLineItemIdDetails(lineItemIds);\n }\n\n this.form.addEventListener(\"submit\", this.submit.bind(this));\n }\n\n createPayload() {\n let passengerTypes = this.target.querySelectorAll(\"[name=passengerType]\");\n let outboundDateValues = searchBoxes.dateTimes.getValues(this.getDateTimeContainer(\"Outbound\"));\n let inboundDateValues = searchBoxes.dateTimes.getValues(this.getDateTimeContainer(\"Inbound\"));\n\n return Promise.resolve({\n discountCode: this.form.discountCode.value,\n affiliate: this.form.Affiliate.value,\n route: this.form.route.value,\n searchType: this.target.querySelector(\"[name=searchType]:checked\").value,\n outboundDate: outboundDateValues.date,\n outboundHour: outboundDateValues.hours,\n outboundMinute: outboundDateValues.minutes,\n inboundDate: inboundDateValues.date,\n inboundHour: inboundDateValues.hours,\n inboundMinute: inboundDateValues.minutes,\n passengers: [].filter\n .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 let outbound = searchBoxes.dateTimes.getValues(this.getDateTimeContainer(\"Outbound\")).parsedDate();\n\n this.ValidateInfant(errors);\n\n if (!outbound) {\n errors.push(\"The departure date is invalid\");\n } else if (outbound.isBefore(new moment())) {\n errors.push(\"The departure date cannot be before today's date.\");\n }\n\n if (search.searchType === \"return\") {\n let inbound = searchBoxes.dateTimes.getValues(this.getDateTimeContainer(\"Inbound\")).parsedDate();\n\n if (!inbound) {\n errors.push(\"The return date is invalid\");\n }\n\n if (outbound && inbound) {\n if (inbound.isBefore(outbound)) {\n errors.push(\"The return date must be greater than the outbound date\");\n } else if (inbound.isSame(outbound)) {\n errors.push(\"Outbound and inbound date and time must be different\");\n } else if (inbound.isBefore(new moment())) {\n errors.push(\"The return date cannot be before today's date.\");\n }\n }\n }\n\n if (search.passengers.length === 0) {\n errors.push(\"Please select at least 1 passenger.\");\n }\n\n return 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 CheckValidation() {\n this.createPayload()\n .then(payload => this.ValidatePayload(payload))\n .then(errors => this.ShowErrors(errors));\n }\n\n submit() {\n event.preventDefault();\n\n this.createPayload()\n .then(payload => {\n this.form.searchPayload.value = JSON.stringify(payload);\n localStorage.currentSearch = JSON.stringify(payload);\n localStorage.currentSearchType = \"results\";\n return payload;\n })\n .then(payload => this.ValidatePayload(payload))\n .then(errors => this.ShowErrors(errors))\n .then(errors => {\n if (!errors.length) {\n this.form.submit();\n Utilities.ShowLoader();\n }\n })\n .then(_ => {\n if (Modal.current !== null) {\n Modal.close();\n }\n });\n }\n\n get(uri) {\n return window.fetch(uri).then(response => response.json());\n }\n\n getAffiliateId() {\n const affiliate = this.target.querySelector(\"#Affiliate\");\n if (affiliate) {\n return affiliate.value;\n }\n return null;\n }\n\n getAffiliateDefaultRoute() {\n var defaultRoute = document.querySelector(\"[data-default-route]\");\n\n if (defaultRoute) {\n return defaultRoute.dataset[\"defaultRoute\"]\n }\n\n return \"\";\n }\n\n defaultRoute() {\n const affiliateDefaultRoute = this.getAffiliateDefaultRoute();\n if (affiliateDefaultRoute !== \"\" && affiliateDefaultRoute !== undefined) {\n return affiliateDefaultRoute;\n } else {\n return this.get(\"/Umbraco/Api/DataApi/variables/B2CDefaultRoute\");\n }\n\n }\n\n findById(array, id) {\n return array.find(item => item.Id === id);\n }\n\n getDepartureLocations() {\n return this.get(\"/Umbraco/Api/DataApi/DeparturePoints\").then(data => data.filter(location => location.DeparturePoint));\n }\n\n\n\n getLineItemIdDetails(lineItemIds) {\n return window.fetch(`/Umbraco/Api/DataApi/GetBookAgainDetails`,\n {\n method: \"POST\",\n body: JSON.stringify(lineItemIds),\n headers: { \"Content-Type\": \"application/json\" }\n })\n .then(response => response.json());\n }\n\n getRoutes(locations, selectedRoute) {\n return this.get(\"/Umbraco/Api/DataApi/routes\").then(routes => {\n return routes\n .filter(route => this.findById(locations, route.DepartureId))\n .filter(route => this.findById(locations, route.DestinationId))\n .map(route => {\n let value = `${route.DepartureId},${route.DestinationId}`;\n\n return {\n Departure: this.findById(locations, route.DepartureId),\n Destination: this.findById(locations, route.DestinationId),\n Value: value,\n Selected: value === selectedRoute\n };\n });\n });\n }\n\n addRouteOption(route, cb, context = this) {\n let text = `${route.Departure.Name} to ${route.Destination.Name}`;\n let dataValue = `${route.Departure.Name} ${route.Destination.Name\n }`;\n\n let option = new Option(text, route.Value, route.Selected);\n\n if (route.Selected) {\n context.routeElement.value = route.Value;\n }\n\n option.dataset[\"textvalue\"] = dataValue;\n\n context.routeElement.appendChild(option);\n cb();\n }\n\n mapRoutes(selectedRoute) {\n return this.getDepartureLocations()\n .then(locations => this.getRoutes(locations, selectedRoute))\n .then(routes => routes.forEachAsync(this.addRouteOption, this)\n .then(_ => (this.routeElement.value = routes.find(x => x.Selected).Value))\n );\n }\n\n mapCrossing(route, type, direction) {\n let routeParts = route.split(\",\");\n let date = searchBoxes.dateTimes.getValues(this.getDateTimeContainer(direction)).parsedDate() || new moment();\n\n return fetch(`/Umbraco/Api/DataApi/crossings?Date=${date.toISOString()}&Type=${type}&Departure=${routeParts[0]}&Destination=${routeParts[1]}`)\n .then(response => response.json())\n .then(data => {\n var closestMatch = data.find(crossing => crossing.ClosestMatch);\n let closestMatchTime = new moment(closestMatch?.RobotDateTime);\n this.setDateTime(closestMatchTime, direction);\n });\n }\n\n removeEvents(el) {\n elClone = el.cloneNode(true);\n select = el.parentElement.querySelector(\"select\");\n\n if (select) {\n select.disabled = true;\n }\n\n el.parentNode.replaceChild(elClone, el);\n }\n\n Initialise() {\n return Promise.resolve({})\n .then(_ => {\n this.renderDateTimePicker(this.getDateTimeContainer(\"Outbound\"));\n this.renderDateTimePicker(this.getDateTimeContainer(\"Inbound\"));\n })\n .then(_ => {\n if (this.bookAgainDetails != null) {\n return this.bookAgainDetails\n .then(object => object.Route);\n }\n return this.defaultRoute();\n })\n .then(route => this.mapRoutes(route)\n .then(_ => this.loadCrossings(route)))\n .then(_ => {\n this.routeSelect = new LargeSelectList(this.routeLargeSelect);\n this.paxSelect = new LargeSelectPax(this.target.querySelector(\"[data-select-type=pax]\"));\n\n this.target.querySelector(\"[data-loader]\").remove();\n this.target.querySelector(\"form\").style.display = \"\";\n\n Array.from(this.form.querySelectorAll(\".type-select [data-type]\"))\n .forEach(elm => {\n elm.addEventListener(\"click\",\n () => {\n this.setTicketType(elm.dataset.type);\n });\n });\n this.form.outboundDate.addEventListener(\"change\",\n () =>\n this.Update(this)\n );\n this.form.inboundDate.addEventListener(\"change\",\n () =>\n this.Update(this)\n );\n this.form.route.addEventListener(\"change\", () => this.Update(this));\n\n SearchBoxValidationCallback.addListener(\"Crossing\",\n () => {\n this.CheckValidation();\n });\n })\n .then(_ => {\n if (this.bookAgainDetails != null) {\n this.bookAgainDetails\n .then(bookAgainDetails => {\n if (bookAgainDetails.Type != 20) {\n setTicketType(\"oneway\");\n }\n\n let target = document.querySelectorAll(\".search-form\")[1];\n\n this.removeTicketType(bookAgainDetails.Type, target);\n\n this.setPassengers(JSON.parse(bookAgainDetails.Pax), target, bookAgainDetails.PaxTypes);\n\n this.removeEvents(target.querySelector(\"#routeSelect\"));\n this.removeEvents(target.querySelector(\"[data-select-type='pax']\"));\n\n this.removeDownAngle(target.querySelector(\"#routeSelect\"));\n this.removeDownAngle(target.querySelector(\"[data-select-type='pax']\"));\n\n });\n }\n });\n }\n\n removeTicketType(type, target) {\n if (type == \"oneway\") {\n target.querySelector(\"[data-type='return']\").remove();\n } else {\n target.querySelector(\"[data-type='oneway']\").remove();\n }\n }\n\n removeDownAngle(el) {\n el.querySelector(\".la-angle-down\").remove();\n }\n\n setPassengers(paxJson, target, paxTypes) {\n var selectList = target.querySelector(\"[data-select-type='pax'] .large-select__value\");\n selectList.innerText = \"\";\n paxJson.forEach(pax => {\n target.querySelector(`.pax-select [data-id='${pax.PassengerTypeId}']`).value = pax.PassengerCount;\n if (pax.PassengerCount > 0) {\n selectList.innerText = selectList.innerText.concat(`${pax.PassengerCount} ${paxTypes.find(x => x.Id == pax.PassengerTypeId).Name},`);\n }\n });\n selectList.innerText = selectList.innerText.slice(0, selectList.innerText.length - 1);\n\n selectList.innerText = selectList.innerText.split(',').join(', ');\n }\n\n Update(context) {\n let outboundDate = searchBoxes.dateTimes.getValues(context.getDateTimeContainer(\"Outbound\")).parsedDate();\n let inboundDate = searchBoxes.dateTimes.getValues(context.getDateTimeContainer(\"Inbound\")).parsedDate();\n\n if (outboundDate.isAfter(inboundDate)) {\n searchBoxes.dateTimes.setDateTime(context.getDateTimeContainer(\"Inbound\"), outboundDate);\n }\n\n return context.loadCrossings(context.form.route.value)\n .then(_ => this.CheckValidation());\n }\n\n loadCrossings(route) {\n return Promise.all([\n this.mapCrossing(\n route,\n \"forDay\",\n \"Outbound\"\n ),\n this.mapCrossing(\n route\n .split(\",\")\n .reverse()\n .join(\",\"),\n \"endOfDay\",\n \"Inbound\"\n )\n ]);\n }\n\n getDateTimeContainer(direction) {\n switch (direction) {\n case \"Outbound\":\n return this.form.querySelector(\".direction-oneway\");\n case \"Inbound\":\n return this.form.querySelector(\".direction-return\");\n default:\n throw \"Unknown direction\";\n }\n }\n\n setTicketType(ticketType) {\n let returnDirectionContainer = this.target.querySelector(\".direction-return\");\n\n if (ticketType == \"return\") {\n returnDirectionContainer.classList.remove(\"disabled\");\n } else {\n returnDirectionContainer.classList.add(\"disabled\");\n }\n\n this.target.querySelectorAll(\"[name=searchType]\").forEach(elm => {\n elm.checked = elm.value == ticketType;\n });\n }\n\n bind(model) {\n return Promise.resolve({})\n .then(_ => searchBoxes.formWrappers.setSelectedValue(this.form.route, model.route))\n .then(_ => this.setTicketType(model.searchType))\n .then(_ => this.setDateTime(searchBoxes.dateTimes.buildUnixString(model.outboundDate, model.outboundHour, model.outboundMinute), \"Outbound\"))\n .then(_ => this.setDateTime(searchBoxes.dateTimes.buildUnixString(model.inboundDate, model.inboundHour, model.inboundMinute), \"Inbound\"))\n .then(_ => searchBoxes.passengers.setSelected(this.form, model.passengers));\n }\n\n setDateTime(d, direction) {\n if (typeof d === 'undefined') {\n d = new Date();\n }\n\n searchBoxes.dateTimes.setDateTime(this.getDateTimeContainer(direction), 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\nArray.prototype.forEachAsync = function (asyncFunction, context) {\n return this.reduce((promiseChain, item) => {\n return promiseChain.then(\n () =>\n new Promise(resolve => {\n asyncFunction(item, resolve, context);\n })\n );\n }, Promise.resolve());\n};"]}