{"version":3,"sources":["crossingsearbox.js"],"names":["CrossingSearchBox","_createClass","t","lineItemIds","discountCode","_classCallCheck","this","target","form","querySelector","routeElement","routeLargeSelect","value","bookAgainDetails","submit","bind","key","passengerTypes","querySelectorAll","searchBoxes","dateTimes","getDateTimeContainer","inboundDateValues","getValues","Promise","resolve","createPayload","outboundDateValues","route","outboundDate","date","affiliate","minutes","searchType","outboundHour","outboundMinute","inboundDate","dataset","id","element","infantId","_document$querySelect","adultIds","_document$querySelect2","document","infantAmount","passengers","getSelectedForTypeId","adultAmount","getSelectedForTypeArrayId","split","map","passengerType","reduce","ValidateInfant","errors","parseInt","b","message","infantValidationMessage","push","outbound","parsedDate","isBefore","moment","inbound","isSame","search","area","innerHTML","forEach","error","ShowErrors","createElement","appendChild","innerText","_this","then","payload","ValidatePayload","CheckValidation","_this2","event","preventDefault","searchPayload","JSON","stringify","localStorage","currentSearch","currentSearchType","Utilities","Modal","length","close","uri","window","fetch","response","json","defaultRoute","affiliateDefaultRoute","getAffiliateDefaultRoute","undefined","get","array","item","data","filter","location","DeparturePoint","findById","find","method","body","headers","Content-Type","getDepartureLocations","_this3","routes","locations","DepartureId","DestinationId","getLineItemIdDetails","concat","Destination","Value","Selected","selectedRoute","cb","context","arguments","text","getRoutes","Name","Departure","Option","option","_this4","addRouteOption","x","direction","_this5","year","month","hour","minute","routeParts","mapRoutes","closestMatch","crossing","ClosestMatch","RobotDateTime","setDateTime","elClone","el","select","parentElement","disabled","parentNode","mapCrossing","_this6","object","Route","removeEvents","_","loadCrossings","routeSelect","LargeSelectList","replaceChild","remove","style","display","Array","from","elm","renderDateTimePicker","setTicketType","type","addEventListener","Update","paxSelect","LargeSelectPax","Type","SearchBoxValidationCallback","parse","Pax","PaxTypes","removeDownAngle","removeTicketType","paxJson","paxTypes","selectList","pax","PassengerTypeId","PassengerCount","Id","slice","setPassengers","join","isAfter","_this7","reverse","ticketType","returnDirectionContainer","classList","add","checked","model","_this8","formWrappers","setSelectedValue","buildUnixString","inboundHour","inboundMinute","d","Date","datePicker","container","timePicker","LargeSelectDate","closest","LargeSelectTime","prototype","forEachAsync","promiseChain","asyncFunction"],"mappings":"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","file":"crossingsearbox.js","sourcesContent":["CrossingSearchBox = class {\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 {\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(\"/api/data/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(\"/api/data/DeparturePoints\").then(data => data.filter(location => location.DeparturePoint));\n }\n\n \n \n getLineItemIdDetails(lineItemIds) {\n return window.fetch(`/api/data/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(\"/api/data/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} ${\n 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 let url = `/api/data/crossings/${type}/${date.year()}/${date.month() +\n 1}/${date.date()}/${date.hour()}/${date.minute()}/${routeParts[0]}/${\n routeParts[1]\n }`;\n\n return this.get(url).then(data => {\n let closestMatch = new moment(data.find(crossing => crossing.ClosestMatch).RobotDateTime);\n this.setDateTime(closestMatch, 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};"]}