{"version":3,"sources":["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","webpack:///./app/util/objects.js","webpack:///./app/components/react/Navigation/Searchbar/components/DestinationGroup.js"],"names":["FetchJSON","url","method","arguments","length","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","__webpack_require__","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","key","setExtra","captureException","setState","update","event","document","getElementById","inputId","contains","target","_this2","isNotNullOrWhitespace","body","addEventListener","evt","detectClickEvents","_this3","values","_react2","default","createElement","className","id","disabled","selectedValue","inputName","onChange","enableDefault","placeholder","map","index","Value","data-display-name","onClick","./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","location","HotelCode","foundLocation","geoData","find","geoDatum","GeoLocationName","Resort","Region","_extends","getAirports","_foundLocation","DepartureAirports","ArrivalAirports","closeAll","preventDefault","handleOverlayToggle","closeMainModal","shouldShowSubRegionArrow","locationName","_this$state","listCountry","listRegion","slideIndex","regions","filterRegions","filteredRegions","filter","geo","Country","isNotFilteredRegion","region","isNotFilteredResort","isRegion","isCountryARegion","isResortARegion","push","groupSearchResults","locations","mappedLocations","type","getLocationType","groupBy","clearInput","showList","selectedRegion","selectedResort","selectedCountry","geoLocationName","arrivalAirport","inputValue","activeItem","countries","resorts","filteredResorts","listResort","viewportOffsetTop","isMobile","mobileActive","displayAllRegion","hasSelected","hasInteracted","typeaheadSelected","displayTypeaheadError","destinationInputRef","handleSelectLocation","handleHover","detectKeyEvents","handleListItemClick","handleListBack","isLocationValid","handleViewUpdate","valueLowerCase","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","searchedLocation","resort","country","x","_this4","navigator","userAgent","match","_this5","selectedRegionObject","departureAirports","locationSeasonDates","selectedGeoLocationNameObject","isBelow","on","EVENT_UPDATE","_this6","removeEventListener","off","tier","forceOpenOverlay","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","title","shouldShowList","data-element","htmlFor","autoComplete","ref","_DestinationGroup2","icon","style","errorMsg","arr","reduce","current","acc","_ref","aria-hidden","onMouseEnter","dangerouslySetInnerHTML","__html"],"mappings":"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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,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","file":"SearchBarRender~SearchBarTest1Render~SearchBarTest2Render-f8f256e651ae08681398.js","sourcesContent":["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\": 337,\n\t\"./af.js\": 337,\n\t\"./ar\": 336,\n\t\"./ar-dz\": 335,\n\t\"./ar-dz.js\": 335,\n\t\"./ar-kw\": 334,\n\t\"./ar-kw.js\": 334,\n\t\"./ar-ly\": 333,\n\t\"./ar-ly.js\": 333,\n\t\"./ar-ma\": 332,\n\t\"./ar-ma.js\": 332,\n\t\"./ar-sa\": 331,\n\t\"./ar-sa.js\": 331,\n\t\"./ar-tn\": 330,\n\t\"./ar-tn.js\": 330,\n\t\"./ar.js\": 336,\n\t\"./az\": 329,\n\t\"./az.js\": 329,\n\t\"./be\": 328,\n\t\"./be.js\": 328,\n\t\"./bg\": 327,\n\t\"./bg.js\": 327,\n\t\"./bn\": 326,\n\t\"./bn.js\": 326,\n\t\"./bo\": 325,\n\t\"./bo.js\": 325,\n\t\"./br\": 324,\n\t\"./br.js\": 324,\n\t\"./bs\": 323,\n\t\"./bs.js\": 323,\n\t\"./ca\": 322,\n\t\"./ca.js\": 322,\n\t\"./cs\": 321,\n\t\"./cs.js\": 321,\n\t\"./cv\": 320,\n\t\"./cv.js\": 320,\n\t\"./cy\": 319,\n\t\"./cy.js\": 319,\n\t\"./da\": 318,\n\t\"./da.js\": 318,\n\t\"./de\": 317,\n\t\"./de-at\": 316,\n\t\"./de-at.js\": 316,\n\t\"./de-ch\": 315,\n\t\"./de-ch.js\": 315,\n\t\"./de.js\": 317,\n\t\"./dv\": 314,\n\t\"./dv.js\": 314,\n\t\"./el\": 313,\n\t\"./el.js\": 313,\n\t\"./en-au\": 312,\n\t\"./en-au.js\": 312,\n\t\"./en-ca\": 311,\n\t\"./en-ca.js\": 311,\n\t\"./en-gb\": 310,\n\t\"./en-gb.js\": 310,\n\t\"./en-ie\": 309,\n\t\"./en-ie.js\": 309,\n\t\"./en-nz\": 308,\n\t\"./en-nz.js\": 308,\n\t\"./eo\": 307,\n\t\"./eo.js\": 307,\n\t\"./es\": 306,\n\t\"./es-do\": 305,\n\t\"./es-do.js\": 305,\n\t\"./es.js\": 306,\n\t\"./et\": 304,\n\t\"./et.js\": 304,\n\t\"./eu\": 303,\n\t\"./eu.js\": 303,\n\t\"./fa\": 302,\n\t\"./fa.js\": 302,\n\t\"./fi\": 301,\n\t\"./fi.js\": 301,\n\t\"./fo\": 300,\n\t\"./fo.js\": 300,\n\t\"./fr\": 299,\n\t\"./fr-ca\": 298,\n\t\"./fr-ca.js\": 298,\n\t\"./fr-ch\": 297,\n\t\"./fr-ch.js\": 297,\n\t\"./fr.js\": 299,\n\t\"./fy\": 296,\n\t\"./fy.js\": 296,\n\t\"./gd\": 295,\n\t\"./gd.js\": 295,\n\t\"./gl\": 294,\n\t\"./gl.js\": 294,\n\t\"./gom-latn\": 293,\n\t\"./gom-latn.js\": 293,\n\t\"./he\": 292,\n\t\"./he.js\": 292,\n\t\"./hi\": 291,\n\t\"./hi.js\": 291,\n\t\"./hr\": 290,\n\t\"./hr.js\": 290,\n\t\"./hu\": 289,\n\t\"./hu.js\": 289,\n\t\"./hy-am\": 288,\n\t\"./hy-am.js\": 288,\n\t\"./id\": 287,\n\t\"./id.js\": 287,\n\t\"./is\": 286,\n\t\"./is.js\": 286,\n\t\"./it\": 285,\n\t\"./it.js\": 285,\n\t\"./ja\": 284,\n\t\"./ja.js\": 284,\n\t\"./jv\": 283,\n\t\"./jv.js\": 283,\n\t\"./ka\": 282,\n\t\"./ka.js\": 282,\n\t\"./kk\": 281,\n\t\"./kk.js\": 281,\n\t\"./km\": 280,\n\t\"./km.js\": 280,\n\t\"./kn\": 279,\n\t\"./kn.js\": 279,\n\t\"./ko\": 278,\n\t\"./ko.js\": 278,\n\t\"./ky\": 277,\n\t\"./ky.js\": 277,\n\t\"./lb\": 276,\n\t\"./lb.js\": 276,\n\t\"./lo\": 275,\n\t\"./lo.js\": 275,\n\t\"./lt\": 274,\n\t\"./lt.js\": 274,\n\t\"./lv\": 273,\n\t\"./lv.js\": 273,\n\t\"./me\": 272,\n\t\"./me.js\": 272,\n\t\"./mi\": 271,\n\t\"./mi.js\": 271,\n\t\"./mk\": 270,\n\t\"./mk.js\": 270,\n\t\"./ml\": 269,\n\t\"./ml.js\": 269,\n\t\"./mr\": 268,\n\t\"./mr.js\": 268,\n\t\"./ms\": 267,\n\t\"./ms-my\": 266,\n\t\"./ms-my.js\": 266,\n\t\"./ms.js\": 267,\n\t\"./my\": 265,\n\t\"./my.js\": 265,\n\t\"./nb\": 264,\n\t\"./nb.js\": 264,\n\t\"./ne\": 263,\n\t\"./ne.js\": 263,\n\t\"./nl\": 262,\n\t\"./nl-be\": 261,\n\t\"./nl-be.js\": 261,\n\t\"./nl.js\": 262,\n\t\"./nn\": 260,\n\t\"./nn.js\": 260,\n\t\"./pa-in\": 259,\n\t\"./pa-in.js\": 259,\n\t\"./pl\": 258,\n\t\"./pl.js\": 258,\n\t\"./pt\": 257,\n\t\"./pt-br\": 256,\n\t\"./pt-br.js\": 256,\n\t\"./pt.js\": 257,\n\t\"./ro\": 255,\n\t\"./ro.js\": 255,\n\t\"./ru\": 254,\n\t\"./ru.js\": 254,\n\t\"./sd\": 253,\n\t\"./sd.js\": 253,\n\t\"./se\": 252,\n\t\"./se.js\": 252,\n\t\"./si\": 251,\n\t\"./si.js\": 251,\n\t\"./sk\": 250,\n\t\"./sk.js\": 250,\n\t\"./sl\": 249,\n\t\"./sl.js\": 249,\n\t\"./sq\": 248,\n\t\"./sq.js\": 248,\n\t\"./sr\": 247,\n\t\"./sr-cyrl\": 246,\n\t\"./sr-cyrl.js\": 246,\n\t\"./sr.js\": 247,\n\t\"./ss\": 245,\n\t\"./ss.js\": 245,\n\t\"./sv\": 244,\n\t\"./sv.js\": 244,\n\t\"./sw\": 243,\n\t\"./sw.js\": 243,\n\t\"./ta\": 242,\n\t\"./ta.js\": 242,\n\t\"./te\": 241,\n\t\"./te.js\": 241,\n\t\"./tet\": 240,\n\t\"./tet.js\": 240,\n\t\"./th\": 239,\n\t\"./th.js\": 239,\n\t\"./tl-ph\": 238,\n\t\"./tl-ph.js\": 238,\n\t\"./tlh\": 237,\n\t\"./tlh.js\": 237,\n\t\"./tr\": 236,\n\t\"./tr.js\": 236,\n\t\"./tzl\": 235,\n\t\"./tzl.js\": 235,\n\t\"./tzm\": 234,\n\t\"./tzm-latn\": 233,\n\t\"./tzm-latn.js\": 233,\n\t\"./tzm.js\": 234,\n\t\"./uk\": 232,\n\t\"./uk.js\": 232,\n\t\"./ur\": 231,\n\t\"./ur.js\": 231,\n\t\"./uz\": 230,\n\t\"./uz-latn\": 229,\n\t\"./uz-latn.js\": 229,\n\t\"./uz.js\": 230,\n\t\"./vi\": 228,\n\t\"./vi.js\": 228,\n\t\"./x-pseudo\": 227,\n\t\"./x-pseudo.js\": 227,\n\t\"./yo\": 226,\n\t\"./yo.js\": 226,\n\t\"./zh-cn\": 225,\n\t\"./zh-cn.js\": 225,\n\t\"./zh-hk\": 224,\n\t\"./zh-hk.js\": 224,\n\t\"./zh-tw\": 223,\n\t\"./zh-tw.js\": 223\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 = 406;","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 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 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 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});\r\n }\r\n }\r\n\r\n /**\r\n * Determines if we should show an arrow to indicate a user\r\n * can click into a destination for sub-regions\r\n */\r\n shouldShowSubRegionArrow = (locationName) => {\r\n const { listCountry, listRegion, slideIndex } = this.state;\r\n const regions = this.filterRegions(locationName);\r\n switch (slideIndex) {\r\n case 0:\r\n return regions.length > 1;\r\n case 1:\r\n // The second conditional stops us showing an arrow on searchable locations\r\n // which have children when we've clicked into their menu\r\n return regions.length > 1 && locationName !== listCountry;\r\n default:\r\n return regions.length > 1 && locationName !== listRegion;\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 /**\r\n * Gets all regions which are a child of the given location\r\n */\r\n filterRegions = (location) => {\r\n const filteredRegions = [];\r\n const availableRegions = this.state.geoData.filter(geo => geo.Country === location);\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 return filteredRegions;\r\n }\r\n\r\n handleListItemClick(value, tier, forceOpenOverlay) {\r\n if (tier === 0) {\r\n const filteredRegions = this.filterRegions(value);\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.shouldShowSubRegionArrow(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.shouldShowSubRegionArrow(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","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"],"sourceRoot":""}