{"version":3,"sources":["webpack:///./app/util/objects.js","webpack:///./app/components/react/Navigation/Searchbar/components/DestinationGroup.js","webpack:///./app/util/fetch.js","webpack:///./app/util/dictionary.js","webpack:///./app/components/react/Atoms/SelectBox/index.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./app/constants/search.js","webpack:///./app/components/react/Atoms/CustomSelect/index.js","webpack:///./app/components/react/Atoms/Typeahead/index.js"],"names":["groupBy","arr","key","reduce","current","acc","push","__webpack_require__","_ref","handleSelectLocation","handleHover","locations","title","icon","length","_react2","default","createElement","className","aria-hidden","map","location","index","onClick","onMouseEnter","dangerouslySetInnerHTML","__html","GeoLocationName","Region","Country","FetchJSON","url","method","arguments","undefined","data","Promise","resolve","reject","postData","JSON","stringify","xhr","XMLHttpRequest","destroy","onload","onerror","open","withCredentials","setRequestHeader","send","parse","response","error","getDictionary","route","callback","fetch","then","responseJson","Message","getText","dictionary","item","name","split","splice","forEach","value","findValue","SubFolders","Entries","join","Phrase","folderName","folders","selectedItem","Name","toLowerCase","_react","Sentry","_emptyHelpers","SelectBox","props","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","state","showPicker","handleChange","bind","Component","errorInfo","withScope","scope","keys","setExtra","captureException","setState","update","event","document","getElementById","inputId","contains","target","_this2","isNotNullOrWhitespace","body","addEventListener","evt","detectClickEvents","_this3","values","id","disabled","selectedValue","inputName","onChange","enableDefault","placeholder","Value","data-display-name","./af","./af.js","./ar","./ar-dz","./ar-dz.js","./ar-kw","./ar-kw.js","./ar-ly","./ar-ly.js","./ar-ma","./ar-ma.js","./ar-sa","./ar-sa.js","./ar-tn","./ar-tn.js","./ar.js","./az","./az.js","./be","./be.js","./bg","./bg.js","./bn","./bn.js","./bo","./bo.js","./br","./br.js","./bs","./bs.js","./ca","./ca.js","./cs","./cs.js","./cv","./cv.js","./cy","./cy.js","./da","./da.js","./de","./de-at","./de-at.js","./de-ch","./de-ch.js","./de.js","./dv","./dv.js","./el","./el.js","./en-au","./en-au.js","./en-ca","./en-ca.js","./en-gb","./en-gb.js","./en-ie","./en-ie.js","./en-nz","./en-nz.js","./eo","./eo.js","./es","./es-do","./es-do.js","./es.js","./et","./et.js","./eu","./eu.js","./fa","./fa.js","./fi","./fi.js","./fo","./fo.js","./fr","./fr-ca","./fr-ca.js","./fr-ch","./fr-ch.js","./fr.js","./fy","./fy.js","./gd","./gd.js","./gl","./gl.js","./gom-latn","./gom-latn.js","./he","./he.js","./hi","./hi.js","./hr","./hr.js","./hu","./hu.js","./hy-am","./hy-am.js","./id","./id.js","./is","./is.js","./it","./it.js","./ja","./ja.js","./jv","./jv.js","./ka","./ka.js","./kk","./kk.js","./km","./km.js","./kn","./kn.js","./ko","./ko.js","./ky","./ky.js","./lb","./lb.js","./lo","./lo.js","./lt","./lt.js","./lv","./lv.js","./me","./me.js","./mi","./mi.js","./mk","./mk.js","./ml","./ml.js","./mr","./mr.js","./ms","./ms-my","./ms-my.js","./ms.js","./my","./my.js","./nb","./nb.js","./ne","./ne.js","./nl","./nl-be","./nl-be.js","./nl.js","./nn","./nn.js","./pa-in","./pa-in.js","./pl","./pl.js","./pt","./pt-br","./pt-br.js","./pt.js","./ro","./ro.js","./ru","./ru.js","./sd","./sd.js","./se","./se.js","./si","./si.js","./sk","./sk.js","./sl","./sl.js","./sq","./sq.js","./sr","./sr-cyrl","./sr-cyrl.js","./sr.js","./ss","./ss.js","./sv","./sv.js","./sw","./sw.js","./ta","./ta.js","./te","./te.js","./tet","./tet.js","./th","./th.js","./tl-ph","./tl-ph.js","./tlh","./tlh.js","./tr","./tr.js","./tzl","./tzl.js","./tzm","./tzm-latn","./tzm-latn.js","./tzm.js","./uk","./uk.js","./ur","./ur.js","./uz","./uz-latn","./uz-latn.js","./uz.js","./vi","./vi.js","./x-pseudo","./x-pseudo.js","./yo","./yo.js","./zh-cn","./zh-cn.js","./zh-hk","./zh-hk.js","./zh-tw","./zh-tw.js","webpackContext","req","webpackContextResolve","e","Error","code","module","exports","SEARCH_TABS","MULTICENTRE","SEARCH","SEARCH_SUB_TABS","HOLIDAY","HOTEL_ONLY","DESTINATION_TYPES","HOTEL","RESORT","REGION","COUNTRY","CustomSelect","airports","airport","airportIndex","AirportCode","AirportName","_breakpoints","_locationHelpers","_domHelpers","_search","_objects","TypeaheadSearch","getHotelLocation","HotelCode","foundLocation","geoData","find","geoDatum","Resort","_extends","getAirports","_foundLocation","DepartureAirports","ArrivalAirports","closeAll","preventDefault","handleOverlayToggle","closeMainModal","groupSearchResults","mappedLocations","type","getLocationType","clearInput","slideIndex","showList","searchableLocations","selectedRegion","selectedResort","selectedCountry","geoLocationName","arrivalAirport","inputValue","activeItem","countries","regions","resorts","filteredRegions","filteredResorts","listCountry","listRegion","listResort","viewportOffsetTop","isMobile","mobileActive","displayAllRegion","hasSelected","hasInteracted","typeaheadSelected","displayTypeaheadError","destinationInputRef","detectKeyEvents","handleListItemClick","handleListBack","isLocationValid","handleViewUpdate","valueLowerCase","filter","indexOf","IsSearchable","displayLocations","regex","RegExp","valueUpper","capitalizeFirstLetter","regexUpper","i","replaceGeoLocationName","replace","replaceCountry","replaceRegion","replaceResort","getTagContent","_getAirports","hotelLocation","setGeoStart","LocationSeasonDates","show","overideError","ScrollLockManager","lock","getBoundingClientRect","top","release","setTimeout","focus","blur","scrollToPickers","ViewManager","hasTransitionedAboveAndWithin","tabletBreakpoint","hasTransitionedBelow","sort","query","queryString","geoLocation","activeRegion","which","keyCode","selected","querySelector","parentNode","scrollTop","offsetTop","popover","specifiedElement","geo","searchedLocation","resort","region","country","x","_this4","navigator","userAgent","match","_this5","selectedRegionObject","departureAirports","locationSeasonDates","selectedGeoLocationNameObject","isBelow","on","EVENT_UPDATE","_this6","removeEventListener","off","tier","forceOpenOverlay","isNotFilteredRegion","isNotFilteredResort","isRegion","isCountryARegion","isResortARegion","foundSelectableRegion","regionIsResort","object","getListGeoData","querySelectorAll","el","classList","remove","_getAirports2","concat","_toConsumableArray","regionName","stringWithTags","tagRegex","replaceAll","_this7","tierOneClass","tierTwoClass","tierThreeClass","translate3d","transform","typeaheadListClass","typeaheadListTestClass1","isAppleSafari","typeaheadListTestClass2","_groupSearchResults","hotels","Hotel","searchBarTest1","searchBarTest2","_state","_props","noResultsLabel","ourLocationsLabel","countriesLabel","resortsLabel","regionsLabel","shouldShowList","data-element","htmlFor","autoComplete","ref","_DestinationGroup2","style","includes","errorMsg"],"mappings":"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ACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,IACAC,eAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,QAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,QAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,QAAA,IACAC,WAAA,IACAC,QAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,IACAC,eAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,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","file":"SearchBarRender~SearchBarTest1Render~SearchBarTest2Render-a0e23a2e4e6d9916b8f5.js","sourcesContent":["export const groupBy = (arr, key) => {\r\n return arr.reduce(function(current, acc) {\r\n (current[acc[key]] = current[acc[key]] || []).push(acc);\r\n return current;\r\n }, {});\r\n}","import React from 'react'\r\n\r\nconst DestinationGroup = ({\r\n handleSelectLocation,\r\n handleHover,\r\n locations,\r\n title,\r\n icon\r\n}) => {\r\n if (!locations || !locations.length > 0) return null;\r\n return (\r\n
\r\n
\r\n \r\n {title}\r\n
\r\n {locations.map((location, index) =>\r\n handleSelectLocation(location)}\r\n onMouseEnter={() => handleHover(index)}\r\n >\r\n
\r\n
\r\n
\r\n , \r\n
\r\n
\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default DestinationGroup","export default class FetchJSON {\r\n\t\r\n\tstatic fetch(url, method = 'POST', data = {}) {\r\n\t\treturn new Promise(function(resolve, reject) {\r\n\t\t\tlet postData = JSON.stringify(data);\r\n\t\t\tlet xhr = new XMLHttpRequest();\r\n xhr.open(method, url, true);\r\n xhr.withCredentials = true;\r\n\t\t\txhr.setRequestHeader(\"Content-type\", \"application/json;charset=UTF-8\");\r\n\t\t\txhr.send(postData);\r\n\r\n\t\t\txhr.onload = function() {\r\n\t\t\t\tresolve(JSON.parse(xhr.response));\r\n\t\t\t\tdestroy();\r\n\t\t\t}\r\n\r\n\t\t\txhr.onerror = function(error) {\r\n\t\t\t\treject(error);\r\n\t\t\t\tdestroy();\r\n\t\t\t}\r\n\r\n\t\t\tfunction destroy() {\r\n\t\t\t\txhr.onload = null;\r\n\t\t\t\txhr.onerror = null;\r\n\t\t\t\txhr = null;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import FetchJSON from './fetch';\r\n\r\nexport function getDictionary(route, callback) {\r\n let url = `/api/dictionary/item?path=${route}`;\r\n\r\n FetchJSON.fetch(url, 'GET').then((responseJson) => {\r\n if (responseJson.Message) callback({ error: true, response: responseJson });\r\n callback(responseJson);\r\n });\r\n}\r\n\r\nexport function getText(route, dictionary) {\r\n let item = null;\r\n\r\n // Split the route into array to loop through.\r\n route = route.split('/');\r\n\r\n // Get the last route item as that is the actual dictionary name.\r\n const name = route[route.length - 1];\r\n // Remove that from the route array as route would just be sub folders.\r\n route.splice(-1, 1);\r\n\r\n if (dictionary) {\r\n // Go through sub folders and set dictionary to the relavent folder.\r\n if (route.length > 0) {\r\n route.forEach((value) => {\r\n dictionary = findValue(value, dictionary.SubFolders);\r\n });\r\n }\r\n // Get the actual value of the dictionary item.\r\n if (dictionary) item = findValue(name, dictionary.Entries);\r\n }\r\n\r\n // Return the phrase. If not found then return a readable route path as placeholder.\r\n return item === null ? `${route.join(' ')} ${name}` : item.Phrase;\r\n}\r\n\r\n// Loops through array and returns the item that matches the given name.\r\nfunction findValue(folderName, folders) {\r\n let selectedItem = null;\r\n folders.forEach(item => {\r\n if (item.Name.toLowerCase() === folderName.toLowerCase()) selectedItem = item;\r\n });\r\n return selectedItem;\r\n}\r\n","import React, { Component } from 'react';\r\nimport * as Sentry from '@sentry/browser';\r\nimport { isNotNullOrWhitespace } from '../../../../util/empty-helpers.js';\r\n\r\nexport default class SelectBox extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n showPicker: false,\r\n }\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n Sentry.withScope(scope => {\r\n Object.keys(errorInfo).forEach(key => {\r\n scope.setExtra(key, errorInfo[key]);\r\n });\r\n Sentry.captureException(error);\r\n });\r\n }\r\n\r\n handleChange(item) {\r\n this.setState({showPicker: false});\r\n this.props.update(item);\r\n }\r\n\r\n detectClickEvents(event) {\r\n if (this.state.showPicker) {\r\n let specifiedElement = document.getElementById(this.props.inputId);\r\n let isClickInside = specifiedElement.contains(event.target);\r\n if (!isClickInside) {\r\n this.setState({showPicker: false});\r\n }\r\n }\r\n }\r\n\r\n componentWillMount() {\r\n if (isNotNullOrWhitespace(this.props.inputId)) {\r\n document.body.addEventListener('click', evt => this.detectClickEvents(evt));\r\n }\r\n }\r\n\r\n render() {\r\n let values = this.props.values || [];\r\n return (\r\n
\r\n \r\n\r\n {!this.props.disabled &&
this.setState({showPicker: !this.state.showPicker})}>
}\r\n {!this.props.disabled && this.state.showPicker &&\r\n
\r\n
\r\n {values.map((item, index) => {\r\n let itemClass = \"typeahead__scroll__container__item no-space\";\r\n return (\r\n
this.handleChange(item)}>\r\n
{item.Name}
\r\n
\r\n )})}\r\n {values.length === 0 &&\r\n
No results to select
\r\n }\r\n
\r\n
\r\n }\r\n\r\n
\r\n )\r\n }\r\n\r\n}\r\n","var map = {\n\t\"./af\": 675,\n\t\"./af.js\": 675,\n\t\"./ar\": 674,\n\t\"./ar-dz\": 673,\n\t\"./ar-dz.js\": 673,\n\t\"./ar-kw\": 672,\n\t\"./ar-kw.js\": 672,\n\t\"./ar-ly\": 671,\n\t\"./ar-ly.js\": 671,\n\t\"./ar-ma\": 670,\n\t\"./ar-ma.js\": 670,\n\t\"./ar-sa\": 669,\n\t\"./ar-sa.js\": 669,\n\t\"./ar-tn\": 668,\n\t\"./ar-tn.js\": 668,\n\t\"./ar.js\": 674,\n\t\"./az\": 667,\n\t\"./az.js\": 667,\n\t\"./be\": 666,\n\t\"./be.js\": 666,\n\t\"./bg\": 665,\n\t\"./bg.js\": 665,\n\t\"./bn\": 664,\n\t\"./bn.js\": 664,\n\t\"./bo\": 663,\n\t\"./bo.js\": 663,\n\t\"./br\": 662,\n\t\"./br.js\": 662,\n\t\"./bs\": 661,\n\t\"./bs.js\": 661,\n\t\"./ca\": 660,\n\t\"./ca.js\": 660,\n\t\"./cs\": 659,\n\t\"./cs.js\": 659,\n\t\"./cv\": 658,\n\t\"./cv.js\": 658,\n\t\"./cy\": 657,\n\t\"./cy.js\": 657,\n\t\"./da\": 656,\n\t\"./da.js\": 656,\n\t\"./de\": 655,\n\t\"./de-at\": 654,\n\t\"./de-at.js\": 654,\n\t\"./de-ch\": 653,\n\t\"./de-ch.js\": 653,\n\t\"./de.js\": 655,\n\t\"./dv\": 652,\n\t\"./dv.js\": 652,\n\t\"./el\": 651,\n\t\"./el.js\": 651,\n\t\"./en-au\": 650,\n\t\"./en-au.js\": 650,\n\t\"./en-ca\": 649,\n\t\"./en-ca.js\": 649,\n\t\"./en-gb\": 648,\n\t\"./en-gb.js\": 648,\n\t\"./en-ie\": 647,\n\t\"./en-ie.js\": 647,\n\t\"./en-nz\": 646,\n\t\"./en-nz.js\": 646,\n\t\"./eo\": 645,\n\t\"./eo.js\": 645,\n\t\"./es\": 644,\n\t\"./es-do\": 643,\n\t\"./es-do.js\": 643,\n\t\"./es.js\": 644,\n\t\"./et\": 642,\n\t\"./et.js\": 642,\n\t\"./eu\": 641,\n\t\"./eu.js\": 641,\n\t\"./fa\": 640,\n\t\"./fa.js\": 640,\n\t\"./fi\": 639,\n\t\"./fi.js\": 639,\n\t\"./fo\": 638,\n\t\"./fo.js\": 638,\n\t\"./fr\": 637,\n\t\"./fr-ca\": 636,\n\t\"./fr-ca.js\": 636,\n\t\"./fr-ch\": 635,\n\t\"./fr-ch.js\": 635,\n\t\"./fr.js\": 637,\n\t\"./fy\": 634,\n\t\"./fy.js\": 634,\n\t\"./gd\": 633,\n\t\"./gd.js\": 633,\n\t\"./gl\": 632,\n\t\"./gl.js\": 632,\n\t\"./gom-latn\": 631,\n\t\"./gom-latn.js\": 631,\n\t\"./he\": 630,\n\t\"./he.js\": 630,\n\t\"./hi\": 629,\n\t\"./hi.js\": 629,\n\t\"./hr\": 628,\n\t\"./hr.js\": 628,\n\t\"./hu\": 627,\n\t\"./hu.js\": 627,\n\t\"./hy-am\": 626,\n\t\"./hy-am.js\": 626,\n\t\"./id\": 625,\n\t\"./id.js\": 625,\n\t\"./is\": 624,\n\t\"./is.js\": 624,\n\t\"./it\": 623,\n\t\"./it.js\": 623,\n\t\"./ja\": 622,\n\t\"./ja.js\": 622,\n\t\"./jv\": 621,\n\t\"./jv.js\": 621,\n\t\"./ka\": 620,\n\t\"./ka.js\": 620,\n\t\"./kk\": 619,\n\t\"./kk.js\": 619,\n\t\"./km\": 618,\n\t\"./km.js\": 618,\n\t\"./kn\": 617,\n\t\"./kn.js\": 617,\n\t\"./ko\": 616,\n\t\"./ko.js\": 616,\n\t\"./ky\": 615,\n\t\"./ky.js\": 615,\n\t\"./lb\": 614,\n\t\"./lb.js\": 614,\n\t\"./lo\": 613,\n\t\"./lo.js\": 613,\n\t\"./lt\": 612,\n\t\"./lt.js\": 612,\n\t\"./lv\": 611,\n\t\"./lv.js\": 611,\n\t\"./me\": 610,\n\t\"./me.js\": 610,\n\t\"./mi\": 609,\n\t\"./mi.js\": 609,\n\t\"./mk\": 608,\n\t\"./mk.js\": 608,\n\t\"./ml\": 607,\n\t\"./ml.js\": 607,\n\t\"./mr\": 606,\n\t\"./mr.js\": 606,\n\t\"./ms\": 605,\n\t\"./ms-my\": 604,\n\t\"./ms-my.js\": 604,\n\t\"./ms.js\": 605,\n\t\"./my\": 603,\n\t\"./my.js\": 603,\n\t\"./nb\": 602,\n\t\"./nb.js\": 602,\n\t\"./ne\": 601,\n\t\"./ne.js\": 601,\n\t\"./nl\": 600,\n\t\"./nl-be\": 599,\n\t\"./nl-be.js\": 599,\n\t\"./nl.js\": 600,\n\t\"./nn\": 598,\n\t\"./nn.js\": 598,\n\t\"./pa-in\": 597,\n\t\"./pa-in.js\": 597,\n\t\"./pl\": 596,\n\t\"./pl.js\": 596,\n\t\"./pt\": 595,\n\t\"./pt-br\": 594,\n\t\"./pt-br.js\": 594,\n\t\"./pt.js\": 595,\n\t\"./ro\": 593,\n\t\"./ro.js\": 593,\n\t\"./ru\": 592,\n\t\"./ru.js\": 592,\n\t\"./sd\": 591,\n\t\"./sd.js\": 591,\n\t\"./se\": 590,\n\t\"./se.js\": 590,\n\t\"./si\": 589,\n\t\"./si.js\": 589,\n\t\"./sk\": 588,\n\t\"./sk.js\": 588,\n\t\"./sl\": 587,\n\t\"./sl.js\": 587,\n\t\"./sq\": 586,\n\t\"./sq.js\": 586,\n\t\"./sr\": 585,\n\t\"./sr-cyrl\": 584,\n\t\"./sr-cyrl.js\": 584,\n\t\"./sr.js\": 585,\n\t\"./ss\": 583,\n\t\"./ss.js\": 583,\n\t\"./sv\": 582,\n\t\"./sv.js\": 582,\n\t\"./sw\": 581,\n\t\"./sw.js\": 581,\n\t\"./ta\": 580,\n\t\"./ta.js\": 580,\n\t\"./te\": 579,\n\t\"./te.js\": 579,\n\t\"./tet\": 578,\n\t\"./tet.js\": 578,\n\t\"./th\": 577,\n\t\"./th.js\": 577,\n\t\"./tl-ph\": 576,\n\t\"./tl-ph.js\": 576,\n\t\"./tlh\": 575,\n\t\"./tlh.js\": 575,\n\t\"./tr\": 574,\n\t\"./tr.js\": 574,\n\t\"./tzl\": 573,\n\t\"./tzl.js\": 573,\n\t\"./tzm\": 572,\n\t\"./tzm-latn\": 571,\n\t\"./tzm-latn.js\": 571,\n\t\"./tzm.js\": 572,\n\t\"./uk\": 570,\n\t\"./uk.js\": 570,\n\t\"./ur\": 569,\n\t\"./ur.js\": 569,\n\t\"./uz\": 568,\n\t\"./uz-latn\": 567,\n\t\"./uz-latn.js\": 567,\n\t\"./uz.js\": 568,\n\t\"./vi\": 566,\n\t\"./vi.js\": 566,\n\t\"./x-pseudo\": 565,\n\t\"./x-pseudo.js\": 565,\n\t\"./yo\": 564,\n\t\"./yo.js\": 564,\n\t\"./zh-cn\": 563,\n\t\"./zh-cn.js\": 563,\n\t\"./zh-hk\": 562,\n\t\"./zh-hk.js\": 562,\n\t\"./zh-tw\": 561,\n\t\"./zh-tw.js\": 561\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 708;","export const SEARCH_TABS = {\r\n MULTICENTRE: 'multicentre',\r\n SEARCH: 'search'\r\n}\r\n\r\nexport const SEARCH_SUB_TABS = {\r\n HOLIDAY: 'Holiday',\r\n HOTEL_ONLY: 'Hotel Only'\r\n};\r\n\r\nexport const DESTINATION_TYPES = {\r\n HOTEL: 'Hotel',\r\n RESORT: 'Resort',\r\n REGION: 'Region',\r\n COUNTRY: 'Country',\r\n};\r\n","import React, { Component } from 'react';\r\nimport * as Sentry from '@sentry/browser';\r\nimport { isNotNullOrWhitespace } from '../../../../util/empty-helpers.js';\r\n\r\nexport default class CustomSelect extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n showPicker: false,\r\n }\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange(item) {\r\n this.setState({showPicker: false});\r\n this.props.update(item);\r\n }\r\n\r\n detectClickEvents(event) {\r\n if (this.state.showPicker) {\r\n let specifiedElement = document.getElementById(this.props.inputId);\r\n let isClickInside = specifiedElement.contains(event.target);\r\n if (!isClickInside) {\r\n this.setState({showPicker: false});\r\n }\r\n }\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n this.setState({ error });\r\n Sentry.withScope(scope => {\r\n Object.keys(errorInfo).forEach(key => {\r\n scope.setExtra(key, errorInfo[key]);\r\n });\r\n Sentry.captureException(error);\r\n });\r\n }\r\n\r\n componentWillMount() {\r\n if (isNotNullOrWhitespace(this.props.inputId)) {\r\n document.body.addEventListener('click', evt => this.detectClickEvents(evt));\r\n }\r\n }\r\n\r\n render() {\r\n let airports = this.props.airports || [];\r\n return (\r\n
\r\n \r\n\r\n {!this.props.disabled &&
this.setState({showPicker: !this.state.showPicker})}>
}\r\n {!this.props.disabled && this.state.showPicker &&\r\n
\r\n
\r\n {airports.map((item, index) => {\r\n let itemClass = \"typeahead__scroll__container__item no-space\";\r\n return (\r\n
this.handleChange(item)}>\r\n
{item.AirportName}
\r\n
\r\n )})}\r\n {airports.length === 0 &&\r\n
No results to select
\r\n }\r\n
\r\n
\r\n }\r\n\r\n
\r\n )\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react';\r\nimport * as Sentry from '@sentry/browser';\r\n\r\nimport ScrollLockManager from '../../../../managers/scroll-lock';\r\nimport ViewManager from '../../../../managers/view';\r\nimport { isNotNullOrWhitespace, capitalizeFirstLetter } from '../../../../util/empty-helpers.js';\r\nimport { tabletBreakpoint } from '../../../../constants/breakpoints';\r\nimport { queryString } from '../../../../util/location-helpers.js';\r\nimport { isAppleSafari } from '../../../../util/dom-helpers.js';\r\nimport DestinationGroup from '../../Navigation/Searchbar/components/DestinationGroup.js';\r\nimport { DESTINATION_TYPES } from '../../../../constants/search.js';\r\nimport { groupBy } from '../../../../util/objects.js';\r\n\r\nexport default class TypeaheadSearch extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n showPicker: false,\r\n showList: false,\r\n locations: [],\r\n searchableLocations: [],\r\n geoData: [],\r\n selectedRegion: \"\",\r\n selectedResort: \"\",\r\n selectedCountry: \"\",\r\n geoLocationName: \"\",\r\n arrivalAirport: \"\",\r\n inputValue: \"\",\r\n activeItem: null,\r\n countries: [],\r\n regions: [],\r\n resorts: [],\r\n filteredRegions: [],\r\n filteredResorts: [],\r\n listCountry: \"\",\r\n listRegion: \"\",\r\n listResort: \"\",\r\n slideIndex: 0,\r\n viewportOffsetTop: 0,\r\n isMobile: false,\r\n mobileActive: false,\r\n displayAllRegion: false,\r\n hasSelected: false,\r\n hasInteracted: false,\r\n typeaheadSelected: \"\",\r\n displayTypeaheadError: false,\r\n }\r\n\r\n this.destinationInputRef = null;\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSelectLocation = this.handleSelectLocation.bind(this);\r\n this.handleHover = this.handleHover.bind(this);\r\n this.detectKeyEvents = this.detectKeyEvents.bind(this);\r\n this.detectClickEvents = this.detectClickEvents.bind(this);\r\n this.handleListItemClick = this.handleListItemClick.bind(this);\r\n this.handleListBack = this.handleListBack.bind(this);\r\n this.isLocationValid = this.isLocationValid.bind(this);\r\n this.handleViewUpdate = this.handleViewUpdate.bind(this);\r\n this.groupSearchResults = this.groupSearchResults.bind(this);\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n Sentry.withScope(scope => {\r\n Object.keys(errorInfo).forEach(key => {\r\n scope.setExtra(key, errorInfo[key]);\r\n });\r\n Sentry.captureException(error);\r\n });\r\n }\r\n\r\n handleChange(event) {\r\n let value = event.target.value,\r\n valueLowerCase = value.toLowerCase(),\r\n locations = [...this.state.geoData],\r\n showPicker = false,\r\n hasSelected = false;\r\n\r\n if (isNotNullOrWhitespace(value)) {\r\n this.setState({displayTypeaheadError: false});\r\n }\r\n\r\n this.setState({hasInteracted: true});\r\n\r\n if (valueLowerCase.length === 0) return this.setState({ inputValue: value, showList: true, showPicker: false });\r\n\r\n if (valueLowerCase.length < 2) return this.setState({ inputValue: value });\r\n\r\n showPicker = true;\r\n locations = locations.filter((location) =>{\r\n\r\n // if result found\r\n if (location.GeoLocationName.toLowerCase().indexOf(valueLowerCase) != -1 ||\r\n location.Region.toLowerCase().indexOf(valueLowerCase) != -1 ||\r\n location.Country.toLowerCase().indexOf(valueLowerCase) != -1) {\r\n\r\n if (location.GeoLocationName === location.Region && !location.IsSearchable) {\r\n // if location is a region that isn't searchable eg \"Italian Lakes\"\r\n return false;\r\n }\r\n // if a full country name & not \"italy\"\r\n if (location.Country.toLowerCase() == valueLowerCase || location.Region.toLowerCase() == location.GeoLocationName.toLowerCase()) {\r\n return true\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n // no result returned\r\n return false;\r\n });\r\n\r\n let displayLocations = JSON.parse(JSON.stringify(locations));\r\n let regex = new RegExp(valueLowerCase, \"g\");\r\n let valueUpper = capitalizeFirstLetter(valueLowerCase);\r\n let regexUpper = new RegExp(valueUpper, \"g\");\r\n for (let i = 0; i < displayLocations.length; i++) {\r\n if (isNotNullOrWhitespace(displayLocations[i].GeoLocationName)) {\r\n let replaceGeoLocationName = displayLocations[i].GeoLocationName;\r\n replaceGeoLocationName = replaceGeoLocationName.replace(regex,''+valueLowerCase+'');\r\n replaceGeoLocationName = replaceGeoLocationName.replace(regexUpper,''+valueUpper+'');\r\n displayLocations[i].GeoLocationName = replaceGeoLocationName;\r\n }\r\n if (isNotNullOrWhitespace(displayLocations[i].Country)) {\r\n let replaceCountry = displayLocations[i].Country;\r\n replaceCountry = replaceCountry.replace(regex,''+valueLowerCase+'');\r\n replaceCountry = replaceCountry.replace(regexUpper,''+valueUpper+'');\r\n displayLocations[i].Country = replaceCountry;\r\n }\r\n if (isNotNullOrWhitespace(displayLocations[i].Region)) {\r\n let replaceRegion = displayLocations[i].Region;\r\n replaceRegion = replaceRegion.replace(regex,''+valueLowerCase+'');\r\n replaceRegion = replaceRegion.replace(regexUpper,''+valueUpper+'');\r\n displayLocations[i].Region = replaceRegion;\r\n }\r\n if (isNotNullOrWhitespace(displayLocations[i].Resort)) {\r\n let replaceResort = displayLocations[i].Resort;\r\n replaceResort = replaceResort.replace(regex,''+valueLowerCase+'');\r\n replaceResort = replaceResort.replace(regexUpper,''+valueUpper+'');\r\n displayLocations[i].Resort = replaceResort;\r\n }\r\n }\r\n\r\n this.setState({showPicker, locations, inputValue: value, displayLocations, hasSelected, hasInteracted: true, showList: false});\r\n }\r\n\r\n getHotelLocation = (location) => {\r\n if (!location.HotelCode) return;\r\n const foundLocation = this.state.geoData.find((geoDatum) => !geoDatum.HotelCode && (geoDatum.GeoLocationName === location.Resort || geoDatum.GeoLocationName === location.Region));\r\n return {\r\n ...foundLocation,\r\n HotelCode: location.HotelCode\r\n };\r\n }\r\n\r\n getAirports = (location) => {\r\n let foundLocation = location;\r\n if (location.HotelCode) {\r\n foundLocation = this.getHotelLocation(location);\r\n };\r\n const { DepartureAirports, ArrivalAirports } = foundLocation;\r\n return {\r\n DepartureAirports,\r\n ArrivalAirports,\r\n };\r\n }\r\n\r\n handleSelectLocation(location) {\r\n location.GeoLocationName = this.getTagContent(location.GeoLocationName);\r\n // check to close mobile popup upon typeahead selection\r\n let selectedResort = \"\";\r\n let selectedRegion = \"\";\r\n let selectedCountry = \"\";\r\n if (isNotNullOrWhitespace(location.Resort)) {\r\n selectedResort = location.Resort;\r\n }\r\n if (isNotNullOrWhitespace(location.Region)) {\r\n selectedRegion = location.Region;\r\n }\r\n if (isNotNullOrWhitespace(location.Country)) {\r\n selectedCountry = location.Country;\r\n }\r\n\r\n const { DepartureAirports, ArrivalAirports } = this.getAirports(location);\r\n\r\n const arrivalAirport = ArrivalAirports.length > 0 ? ArrivalAirports[0].AirportCode : '';\r\n\r\n const hotelLocation = this.getHotelLocation(location);\r\n\r\n const { GeoLocationName: geoLocationName } = hotelLocation ? hotelLocation : location;\r\n\r\n this.setGeoStart(this.state.geoData, geoLocationName);\r\n this.props.update(\r\n selectedRegion,\r\n DepartureAirports,\r\n location.LocationSeasonDates,\r\n hotelLocation,\r\n );\r\n this.setState({\r\n selectedResort,\r\n selectedRegion,\r\n inputValue: location.GeoLocationName,\r\n arrivalAirport,\r\n geoLocationName,\r\n selectedCountry,\r\n showPicker: false,\r\n showList: false,\r\n hasSelected: true,\r\n typeaheadSelected: location.GeoLocationName,\r\n slideIndex: 0,\r\n });\r\n }\r\n\r\n handleHover(index) {\r\n this.setState({activeItem: index});\r\n }\r\n\r\n closeAll = (e) => {\r\n if (e) e.preventDefault();\r\n this.handleOverlayToggle(false);\r\n this.props.closeMainModal();\r\n }\r\n\r\n handleOverlayToggle(show, overideError) {\r\n if (this.state.countries.length === 1) {\r\n this.handleListItemClick(this.state.countries[0], 0, false)\r\n }\r\n\r\n if (this.state.isMobile) {\r\n if (show) {\r\n ScrollLockManager.lock();\r\n let viewportOffset = document.body.getBoundingClientRect();\r\n let viewportOffsetTop =- viewportOffset.top;\r\n this.setState({\r\n mobileActive: true,\r\n showList: true,\r\n viewportOffsetTop,\r\n });\r\n } else {\r\n ScrollLockManager.release();\r\n if (isNotNullOrWhitespace(this.state.inputValue) || overideError) {\r\n this.setState({displayTypeaheadError: false});\r\n } else {\r\n this.setState({displayTypeaheadError: true});\r\n }\r\n this.setState({mobileActive: false, showList: false});\r\n }\r\n } else {\r\n if (show) {\r\n this.setState({ showList: true });\r\n } else {\r\n if (isNotNullOrWhitespace(this.state.inputValue) || overideError) {\r\n this.setState({displayTypeaheadError: false});\r\n } else {\r\n this.setState({displayTypeaheadError: true});\r\n }\r\n this.setState({showList: false, slideIndex: 0 });\r\n }\r\n }\r\n\r\n if (this.destinationInputRef) {\r\n setTimeout(() => {\r\n if (show) {\r\n this.destinationInputRef.focus();\r\n } else {\r\n this.destinationInputRef.blur();\r\n }\r\n }, this.state.isMobile ? 200 : 0)\r\n }\r\n\r\n this.props.scrollToPickers();\r\n }\r\n\r\n handleViewUpdate(event) {\r\n if (ViewManager.hasTransitionedAboveAndWithin(tabletBreakpoint)) {\r\n\r\n if (this.state.mobileActive) {\r\n this.setState({\r\n mobileActive: false,\r\n isMobile: false,\r\n showList: true,\r\n });\r\n } else {\r\n this.setState({\r\n mobileActive: false,\r\n isMobile: false,\r\n showList: false,\r\n });\r\n }\r\n } else if (ViewManager.hasTransitionedBelow(tabletBreakpoint)) {\r\n if (this.state.showList) {\r\n this.setState({\r\n mobileActive: false,\r\n showList: false,\r\n isMobile: true,\r\n });\r\n } else {\r\n this.setState({\r\n mobileActive: false,\r\n isMobile: true,\r\n showList: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n let geoData = [...this.state.geoData];\r\n let data = [...this.props.geoData];\r\n if (geoData.length !== data.length) {\r\n let countries = [];\r\n let searchableLocations = [];\r\n for (let i = 0; i < this.props.geoData.length; i++) {\r\n const geoData = this.props.geoData[i];\r\n\r\n if (countries.indexOf(geoData.Country) === -1) {\r\n countries.push(geoData.Country);\r\n }\r\n\r\n if (geoData.IsSearchable) {\r\n searchableLocations.push(geoData.GeoLocationName);\r\n }\r\n }\r\n countries.sort();\r\n\r\n let query = queryString();\r\n let geoLocation = \"\";\r\n if (isNotNullOrWhitespace(query.geoLocationName)) {\r\n geoLocation = query.geoLocationName;\r\n }\r\n\r\n if (this.props.activeRegion !== 'default') {\r\n geoLocation = this.props.activeRegion;\r\n }\r\n this.setGeoStart(data, geoLocation);\r\n this.setState({locations: data, geoData: data, countries, searchableLocations});\r\n }\r\n }\r\n\r\n detectKeyEvents(e) {\r\n if (this.state.showPicker) {\r\n var key = e.which || e.keyCode;\r\n if (key === 13) { // 13 is ENTER\r\n e.preventDefault();\r\n let locations = [...this.state.locations];\r\n let selectedResort = locations[this.state.activeItem].Resort;\r\n let selectedRegion = locations[this.state.activeItem].Region;\r\n let inputValue = locations[this.state.activeItem].GeoLocationName;\r\n let arrivalAirport = locations[this.state.activeItem].ArrivalAirports[0].AirportCode;\r\n let geoLocationName = locations[this.state.activeItem].GeoLocationName;\r\n this.props.update(selectedRegion, locations[this.state.activeItem].DepartureAirports);\r\n this.setState({showPicker: false, selectedResort, selectedRegion, inputValue, arrivalAirport, geoLocationName});\r\n } else if (key === 38) { // 38 is UP\r\n let value = this.state.activeItem;\r\n if (value !== 0) {\r\n e.preventDefault();\r\n value--;\r\n this.setState({activeItem: value});\r\n let selected = document.querySelector('#typeahead .active');\r\n selected.parentNode.scrollTop = selected.offsetTop;\r\n }\r\n } else if (key === 40) { // 40 is DOWN\r\n let value = this.state.activeItem;\r\n if (value !== this.state.locations.length - 1) {\r\n e.preventDefault();\r\n value++;\r\n this.setState({activeItem: value});\r\n let selected = document.querySelector('#typeahead .active');\r\n selected.parentNode.scrollTop = selected.offsetTop;\r\n }\r\n } else if (key === 9) {\r\n this.setState({showPicker: false});\r\n } else {\r\n this.props.update(\"default\", []);\r\n }\r\n }\r\n if (key = 9 && this.state.hasInteracted) {\r\n this.isLocationValid();\r\n }\r\n }\r\n\r\n detectClickEvents(event) {\r\n if (this.state.showPicker || this.state.showList) {\r\n const popover = document.getElementById('typeahead-list');\r\n if(popover) {\r\n const isClickInsidePopoverInput = popover.contains(event.target);\r\n if (!isClickInsidePopoverInput) {\r\n this.isLocationValid();\r\n this.setState({ showPicker: false, showList: false });\r\n if (this.destinationInputRef) {\r\n setTimeout(() => {\r\n this.destinationInputRef.blur();\r\n }, 0)\r\n }\r\n }\r\n } \r\n } else if (this.state.hasInteracted) {\r\n const specifiedElement = document.getElementById('typeaheadInput');\r\n if (!specifiedElement) return;\r\n const isClickInside = specifiedElement.contains(event.target);\r\n if (!isClickInside) {\r\n this.isLocationValid();\r\n }\r\n }\r\n\r\n if (this.state.showList && !this.state.isMobile) {\r\n const specifiedElement = document.getElementById('typeahead-list');\r\n if (specifiedElement) {\r\n const isClickInside = specifiedElement.contains(event.target);\r\n if (!isClickInside) {\r\n if (!isNotNullOrWhitespace(this.state.inputValue)) {\r\n this.setState({displayTypeaheadError: true});\r\n } else {\r\n this.setState({displayTypeaheadError: false});\r\n }\r\n this.setState({showList: false});\r\n }\r\n }\r\n }\r\n }\r\n\r\n isLocationValid() {\r\n if ((!this.state.hasSelected && this.state.inputValue !== this.state.typeaheadSelected) || this.state.inputValue === \"\") {\r\n this.setState({displayTypeaheadError: true});\r\n } else {\r\n this.setState({displayTypeaheadError: false});\r\n }\r\n }\r\n\r\n setGeoStart(geo, geoLocation) {\r\n // Filter out what should already be shown upon opening on a search results page.\r\n if (isNotNullOrWhitespace(geoLocation)) {\r\n let searchedLocation = geoLocation.replace(/\\+/g, ' ');\r\n for (let i = 0; i < geo.length; i++) {\r\n if (geo[i].GeoLocationName === searchedLocation) {\r\n let geoLocationName = geo[i].GeoLocationName;\r\n let resort = geo[i].Resort;\r\n let region = geo[i].Region;\r\n let country = geo[i].Country;\r\n let filteredRegions = [];\r\n let filteredResorts = [];\r\n let regions = [];\r\n let resorts = [];\r\n let displayAllRegion = false;\r\n\r\n if (geoLocationName === resort || geoLocationName === region) {\r\n\r\n for (let x = 0; x < geo.length; x++) {\r\n if (geo[x].Region === region && geo[x].Country === country && geo[x].Resort !== null) {\r\n filteredResorts.push(geo[x]);\r\n resorts.push(geo[x].GeoLocationName);\r\n }\r\n\r\n if (geo[x].GeoLocationName === region) {\r\n displayAllRegion = true;\r\n }\r\n\r\n if ((geo[x].Country === country && geo[x].Resort === null || geo[x].Country === country && geo[x].Country === geo[x].Region) && !geo[x].IsSearchable) {\r\n filteredRegions.push(geo[x]);\r\n regions.push(geo[x].GeoLocationName);\r\n }\r\n }\r\n resorts.sort();\r\n regions.sort();\r\n\r\n this.setState({\r\n listCountry: country,\r\n listRegion: region,\r\n listResort: resort,\r\n filteredRegions,\r\n filteredResorts,\r\n regions,\r\n resorts,\r\n displayAllRegion,\r\n slideIndex: 0\r\n });\r\n break;\r\n } else if (geoLocationName === country) {\r\n this.setState({\r\n listCountry: country,\r\n slideIndex: 0\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentWillMount() {\r\n if (!this.state.hasInteracted) {\r\n const ua = navigator.userAgent,\r\n event = (ua.match(/iPad/i)) ? \"touchstart\" : \"click\";\r\n document.body.addEventListener('keydown', evt => this.detectKeyEvents(evt));\r\n document.body.addEventListener(event, evt => this.detectClickEvents(evt));\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n let query = queryString();\r\n let geoLocationName = \"\";\r\n let selectedRegion = \"\";\r\n let selectedResort = \"\";\r\n let selectedCountry = \"\";\r\n let arrivalAirport = \"\";\r\n let selectedRegionObject = null;\r\n\r\n if (isNotNullOrWhitespace(query.geoLocationName)) {\r\n geoLocationName = query.geoLocationName.replace(/\\+/g, ' ');\r\n }\r\n if (isNotNullOrWhitespace(query.region)) {\r\n selectedRegion = query.region.replace(/\\+/g, ' ');\r\n }\r\n if (this.props.activeRegion !== 'default') {\r\n let departureAirports = null;\r\n let locationSeasonDates = null\r\n // if we have more precise data with the geoLocationName, use this.\r\n const selectedGeoLocationNameObject = this.props.geoData.find(resort => resort.GeoLocationName === geoLocationName);\r\n if (selectedGeoLocationNameObject) {\r\n departureAirports = selectedGeoLocationNameObject.DepartureAirports;\r\n arrivalAirport = selectedGeoLocationNameObject.ArrivalAirports[0].AirportCode;\r\n locationSeasonDates = selectedGeoLocationNameObject.LocationSeasonDates;\r\n this.props.update(selectedRegion, departureAirports, locationSeasonDates);\r\n } else {\r\n // if issue with geoLocationName, fallback to using region.\r\n selectedRegion = this.props.activeRegion;\r\n selectedRegionObject = this.props.geoData.find(country => country.GeoLocationName === this.props.activeRegion);\r\n \r\n if (selectedRegionObject) {\r\n departureAirports = selectedRegionObject.DepartureAirports;\r\n arrivalAirport = selectedRegionObject.ArrivalAirports[0].AirportCode;\r\n locationSeasonDates = selectedRegionObject.LocationSeasonDates;\r\n geoLocationName = this.props.activeRegion;\r\n } \r\n }\r\n\r\n }\r\n if (isNotNullOrWhitespace(query.resort)) {\r\n selectedResort = query.resort.replace(/\\+/g, ' ');\r\n }\r\n if (isNotNullOrWhitespace(query.arrivalAirport)) {\r\n arrivalAirport = query.arrivalAirport.replace(/\\+/g, ' ');\r\n }\r\n if (isNotNullOrWhitespace(query.country)) {\r\n selectedCountry = query.country.replace(/\\+/g, ' ');\r\n }\r\n\r\n const isMobile = ViewManager.isBelow(tabletBreakpoint);\r\n\r\n let inputValue = '';\r\n if (geoLocationName) {\r\n inputValue = geoLocationName;\r\n }\r\n else {\r\n inputValue = '';\r\n }\r\n\r\n this.setState({geoLocationName, selectedResort, selectedRegion, inputValue, arrivalAirport, selectedCountry, isMobile });\r\n\r\n ViewManager.on(ViewManager.EVENT_UPDATE, this.handleViewUpdate);\r\n }\r\n\r\n\r\n componentWillUnmount() {\r\n const ua = navigator.userAgent;\r\n const event = (ua.match(/iPad/i)) ? \"touchstart\" : \"click\";\r\n document.body.removeEventListener('keydown', evt => this.detectKeyEvents(evt));\r\n document.body.removeEventListener(event, evt => this.detectClickEvents(evt));\r\n ViewManager.off(ViewManager.EVENT_UPDATE, this.handleViewUpdate);\r\n }\r\n\r\n handleListItemClick(value, tier, forceOpenOverlay) {\r\n if (tier === 0) {\r\n const availableRegions = this.state.geoData.filter(geo => geo.Country === value);\r\n const filteredRegions = [];\r\n\r\n availableRegions.forEach(item => {\r\n // check that the item hasn't already been pushed to filteredRegions to stop duplicates displaying\r\n const isNotFilteredRegion = !filteredRegions.find(region => region.Region === item.GeoLocationName);\r\n // it is possible for resorts to display as regions where the country is the region, eg Morocco\r\n const isNotFilteredResort = !filteredRegions.find(region => region.Resort === item.GeoLocationName);\r\n\r\n // check if item is a standard region object\r\n const isRegion = item.GeoLocationName === item.Region && isNotFilteredRegion;\r\n // check if item is a country & country is also a region\r\n const isCountryARegion = item.Country === item.Region && isRegion && isNotFilteredRegion;\r\n const isResort = item.Resort !== null;\r\n // check if the item is a resort & the item.Country is also the region\r\n const isResortARegion = (isResort && item.Resort !== item.Region) && (item.Country === item.Region || item.Region === \"\") && isNotFilteredResort;\r\n\r\n const isHotel = !!item.HotelCode;\r\n\r\n if (!isHotel && (isRegion || isCountryARegion || isResortARegion)) {\r\n filteredRegions.push(item);\r\n }\r\n });\r\n\r\n if (filteredRegions.length === 1 && filteredRegions[0].GeoLocationName === value) {\r\n this.handleListItemClick(value, 2);\r\n } else {\r\n this.setState({\r\n filteredRegions,\r\n listCountry: value,\r\n slideIndex: 1,\r\n });\r\n }\r\n } else if (tier === 1) {\r\n const filteredResorts = this.state.geoData.filter(geo => geo.Resort && geo.Region === value && !geo.HotelCode);\r\n const foundSelectableRegion = this.state.filteredRegions.find(country => country.GeoLocationName === value);\r\n let regionIsResort;\r\n\r\n if (foundSelectableRegion) {\r\n regionIsResort = foundSelectableRegion.GeoLocationName === foundSelectableRegion.Resort;\r\n }\r\n\r\n if (foundSelectableRegion && foundSelectableRegion.IsSearchable || foundSelectableRegion && regionIsResort) {\r\n // if region is searchable then populate destination input\r\n this.handleListItemClick(value, 2);\r\n } else if (filteredResorts.length > 0 && foundSelectableRegion && !foundSelectableRegion.IsSearchable) {\r\n // if region is not searchable open tier 2\r\n this.setState({\r\n filteredResorts,\r\n listRegion: value,\r\n slideIndex: 2,\r\n displayAllRegion: false,\r\n });\r\n }\r\n } else if (tier === 2) {\r\n let object = this.state.filteredResorts.find(resort => resort.GeoLocationName === value && !resort.HotelCode);\r\n\r\n if (!object) {\r\n object = this.state.filteredRegions.find(region => region.GeoLocationName === value);\r\n }\r\n\r\n if (!object) {\r\n object = this.state.geoData.find(country => country.GeoLocationName === value);\r\n }\r\n\r\n object = this.getListGeoData(object);\r\n\r\n if (isNotNullOrWhitespace(object.geoLocationName)) {\r\n let selectedResort = object.selectedResort;\r\n let selectedRegion = object.selectedRegion;\r\n let selectedCountry = object.selectedCountry;\r\n let geoLocationName = object.geoLocationName;\r\n let arrivalAirport = object.arrivalAirport;\r\n let departureAirports = object.departureAirports;\r\n\r\n this.props.update(selectedRegion, departureAirports, object.LocationSeasonDates);\r\n this.setState({\r\n selectedResort,\r\n selectedRegion,\r\n inputValue: geoLocationName,\r\n typeaheadSelected: geoLocationName,\r\n arrivalAirport,\r\n geoLocationName,\r\n selectedCountry\r\n });\r\n if (!forceOpenOverlay) this.handleOverlayToggle(false, true);\r\n // Remove active class from all relevant typeahead elements\r\n let typeaheads = document.querySelectorAll(\".typeahead-list, .typeahead-mobile\");\r\n typeaheads.forEach((el) => el.classList.remove('active'));\r\n // Close all pickers\r\n this.setState({\r\n showPicker: false,\r\n showList: false,\r\n })\r\n }\r\n }\r\n }\r\n\r\n getListGeoData(item) {\r\n let object = {\r\n selectedResort: \"\",\r\n selectedRegion: \"\",\r\n selectedCountry: \"\",\r\n arrivalAirport: \"\",\r\n geoLocationName: \"\",\r\n departureAirports: [],\r\n LocationSeasonDates: item.LocationSeasonDates\r\n }\r\n if (isNotNullOrWhitespace(item.Resort)) {\r\n object.selectedResort = item.Resort;\r\n }\r\n if (isNotNullOrWhitespace(item.Region)) {\r\n object.selectedRegion = item.Region;\r\n }\r\n if (isNotNullOrWhitespace(item.Country)) {\r\n object.selectedCountry = item.Country;\r\n }\r\n const { DepartureAirports, ArrivalAirports } = this.getAirports(item);\r\n if (ArrivalAirports.length > 0) {\r\n object.arrivalAirport = ArrivalAirports[0].AirportCode;\r\n }\r\n object.geoLocationName = item.GeoLocationName;\r\n object.departureAirports = [...DepartureAirports];\r\n return object;\r\n }\r\n\r\n /**\r\n * pluck the current region geoDatum from the list of regions and resorts within the filtedRegion,\r\n * this is to overide filteredResorts when clicking on an 'All' region link and therefore\r\n * ensure the region data is matched and not any unintended resort of the same name as the region.\r\n */\r\n getSelectedRegionGeoData(regionName) {\r\n return this.state.filteredRegions.filter(geoDatum => (geoDatum.GeoLocationName === regionName && geoDatum.Resort === null));\r\n }\r\n\r\n handleListBack(tier) {\r\n if (tier === 1 || this.state.filteredRegions.length === 0) {\r\n this.setState({\r\n slideIndex: 0,\r\n filteredRegions: [],\r\n filteredResorts: [],\r\n displayAllRegion: false\r\n });\r\n } else {\r\n this.setState({\r\n slideIndex: 1,\r\n filteredResorts: [],\r\n displayAllRegion: false\r\n });\r\n }\r\n }\r\n\r\n getTagContent(stringWithTags) {\r\n const tagRegex = new RegExp('<[^>]*>', 'g');\r\n return stringWithTags.replaceAll(tagRegex, \"\");\r\n }\r\n\r\n getLocationType(location, name) {\r\n if (location.Country === name) {\r\n return DESTINATION_TYPES.COUNTRY;\r\n }\r\n if (location.Region === name) {\r\n return DESTINATION_TYPES.REGION;\r\n }\r\n if (location.HotelCode) {\r\n return DESTINATION_TYPES.HOTEL\r\n }\r\n return DESTINATION_TYPES.RESORT;\r\n }\r\n\r\n groupSearchResults = (locations) => {\r\n if (!locations) return {};\r\n const mappedLocations = locations.map((location) => ({\r\n ...location,\r\n type: this.getLocationType(location, location.GeoLocationName)\r\n }))\r\n return groupBy(mappedLocations, 'type');\r\n }\r\n\r\n clearInput = () => {\r\n this.handleChange({ target: { value: '' } });\r\n this.setState({\r\n slideIndex: 0,\r\n });\r\n }\r\n\r\n render() {\r\n let tierOneClass = this.state.slideIndex === 0 ? \"typeahead-list_slide tier-1\" : \"typeahead-list_slide tier-1 out\"\r\n let tierTwoClass = this.state.slideIndex === 1 ? \"typeahead-list_slide tier-2\" : \"typeahead-list_slide tier-2 out\"\r\n let tierThreeClass = this.state.slideIndex === 2 ? \"typeahead-list_slide tier-3\" : \"typeahead-list_slide tier-3 out\"\r\n let translate3d = {'transform': 'translate3d(-' + 33.333333333333336 * this.state.slideIndex + '%, 0px, 0px)'}\r\n let typeaheadListClass = this.state.showList && this.state.mobileActive ? \"typeahead-list active\" : \"typeahead-list\";\r\n typeaheadListClass = isAppleSafari(navigator.userAgent) ? typeaheadListClass + ' ios' : typeaheadListClass;\r\n const typeaheadListTestClass1 = typeaheadListClass + ' typeahead-list-test1';\r\n const typeaheadListTestClass2 = typeaheadListClass + ' typeahead-list-test2';\r\n\r\n const {\r\n Country: countries,\r\n Region: regions,\r\n Resort: resorts,\r\n Hotel: hotels,\r\n } = this.groupSearchResults(this.state.displayLocations);\r\n\r\n if (this.props.searchBarTest1) {\r\n typeaheadListClass = typeaheadListTestClass1;\r\n\r\n } else if (this.props.searchBarTest2) {\r\n typeaheadListClass = typeaheadListTestClass2;\r\n }\r\n\r\n const { showList, locations, inputValue } = this.state;\r\n\r\n const {\r\n noResultsLabel,\r\n ourLocationsLabel,\r\n countriesLabel,\r\n resortsLabel,\r\n regionsLabel,\r\n title,\r\n } = this.props;\r\n\r\n // Show list either when we specifically want to or when we've searched\r\n // and returned no results\r\n const shouldShowList = showList || (locations.length === 0 && inputValue);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n this.handleOverlayToggle(true)}\r\n autoComplete={\"off\"}\r\n />\r\n
\r\n \r\n {this.state.isMobile &&\r\n
\r\n
this.handleOverlayToggle(false)}>\r\n \r\n
\r\n
this.closeAll()}>\r\n \r\n
\r\n
\r\n }\r\n
\r\n this.destinationInputRef = el}\r\n />\r\n
\r\n \r\n
\r\n
\r\n {this.state.showPicker &&\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {this.state.locations.length === 0 &&\r\n
\r\n {noResultsLabel}\r\n
\r\n }\r\n
\r\n
\r\n }\r\n {shouldShowList &&\r\n
\r\n
\r\n
\r\n
{ourLocationsLabel}
\r\n
    \r\n {this.state.countries.map((country, index) => (\r\n
  • this.handleListItemClick(country, 0)}>\r\n {country} {!this.state.searchableLocations.includes(country) && }\r\n
  • \r\n ))}\r\n
\r\n
\r\n\r\n
\r\n
Destinations in {this.state.listCountry}
\r\n
    \r\n {this.state.filteredRegions.map((item, index) => (\r\n
  • this.handleListItemClick(item.GeoLocationName, 1)}>\r\n {item.GeoLocationName} {!this.state.searchableLocations.includes(item.GeoLocationName) && }\r\n
  • \r\n ))}\r\n
\r\n
this.handleListBack(1)}> Back
\r\n
\r\n\r\n
\r\n
Destinations in {this.state.listRegion}
\r\n {this.state.displayAllRegion &&\r\n
    \r\n
  • this.handleListItemClick(this.state.listRegion, 2)}>\r\n All {this.state.listRegion}\r\n
  • \r\n
\r\n }\r\n
    \r\n {this.state.filteredResorts.map((item, index) => (\r\n
  • this.handleListItemClick(item.GeoLocationName, 2)}>{item.GeoLocationName}
  • \r\n ))}\r\n
\r\n
this.handleListBack(2)}> Back
\r\n
\r\n\r\n
\r\n
\r\n }\r\n
\r\n {(this.state.displayTypeaheadError && this.props.searchBarTest2) &&// conditional render below to show different variations of the error message, white with background or\r\n \r\n \r\n {this.props.errorMsg}\r\n \r\n \r\n }\r\n {(!this.props.searchBarTest2) &&\r\n \r\n \r\n {this.props.errorMsg}\r\n \r\n \r\n }\r\n \r\n )\r\n }\r\n\r\n}\r\n"],"sourceRoot":""}