{"version":3,"sources":["webpack:///./app/components/render/Navigation/SiteSearch.js","webpack:///./app/constants/keys.js","webpack:///./app/util/fetch-json.js","webpack:///./app/components/react/Navigation/SiteSearch/index.js"],"names":["__webpack_require__","_class","context","_classCallCheck","this","init","initReact","_context$dataset","dataset","contactLink","contactText","searchInactivityTimeout","ReactDOM","render","_react2","default","createElement","_SiteSearch2","inactivityTimeout","KEYS","ENTER","ESC","Sentry","FetchJSON","url","method","arguments","length","undefined","data","Promise","resolve","reject","postData","indexOf","QueryString","stringify","JSON","xhr","XMLHttpRequest","destroy","onload","onerror","open","setRequestHeader","send","parse","response","error","captureException","_react","_emptyHelpers","_breakpoints","_keys","SiteSearch","props","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","handleCloseSearch","toggleNav","setState","searchValue","setRef","ref","inputRef","inactivityTimer","timeout","parseInt","isMobile","window","innerWidth","desktopBreakpoint","state","results","searchOpen","Component","e","index","preventDefault","location","href","Url","event","_this2","target","value","isLoading","fetch","then","valueLowerCase","toLowerCase","valueUpper","capitalizeFirstLetter","regex","RegExp","regexUpper","i","replaceName","Title","replace","type","hasSearched","clearTimeout","blur","focus","setTimeout","keyCode","_this3","_props","className","name","placeholder","onChange","handleChange","autoComplete","onClick","aria-hidden","role","onKeyDown","handleKeyDown","map","result","typeClass","getTypeClass","Template","key","dangerouslySetInnerHTML","__html","selectOption"],"mappings":"yYAAAA,EAAA,UACAA,EAAA,UAEAA,EAAA,0EAIC,SAAAC,EAAYC,gGAASC,CAAAC,KAAAH,GACpBG,KAAKF,QAAUA,EACfE,KAAKC,gDAILD,KAAKE,gDAGM,IAAAC,EAKPH,KAAKF,QAAQM,QAHhBC,EAFUF,EAEVE,YACAC,EAHUH,EAGVG,YACAC,EAJUJ,EAIVI,wBAGDC,UAASC,OACRC,EAAAC,QAAAC,cAACC,EAAAF,SACAN,YAAaA,EACbC,YAAaA,EACbQ,kBAAmBP,IAEpBP,KAAKF,iHC7BKiB,QACTC,MAAO,GACPC,IAAK,oYCFTrB,EAAA,KACYsB,0JAAZtB,EAAA,SAEqBuB,6KAENC,GAAgC,IAA3BC,EAA2BC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAlB,MAAOG,EAAWH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,MAC3C,OAAO,IAAII,QAAQ,SAASC,EAASC,GACnC,IAAIC,EAAW,KAEA,QAAXR,GACwB,IAAtBD,EAAIU,QAAQ,OACdV,GAAO,IAAMW,UAAYC,UAAUP,IAGrCI,EAAWI,KAAKD,UAAUP,GAG5B,IAAIS,EAAM,IAAIC,eAgBd,SAASC,IACPF,EAAIG,OAAS,KACbH,EAAII,QAAU,KACdJ,EAAM,KAlBRA,EAAIK,KAAKlB,EAAQD,GAAK,GACtBc,EAAIM,iBAAiB,eAAgB,kCACrCN,EAAIO,KAAKZ,GAETK,EAAIG,OAAS,WACXV,EAAQM,KAAKS,MAAMR,EAAIS,WACvBP,KAGFF,EAAII,QAAU,SAASM,GACrB1B,EAAO2B,iBAAiBD,GACxBhB,EAAOgB,GACPR,0BA3BajB,8UCHrB2B,EAAAlD,EAAA,YAEAmD,EAAAnD,EAAA,QACAA,EAAA,MACAoD,EAAApD,EAAA,IACAqD,EAAArD,EAAA,4DAEqBsD,cACnB,SAAAA,EAAYC,gGAAOpD,CAAAC,KAAAkD,GAAA,IAAAE,mKAAAC,CAAArD,MAAAkD,EAAAI,WAAAC,OAAAC,eAAAN,IAAAO,KAAAzD,KACXmD,IADWC,EAmFnBM,kBAAoB,WAClBN,EAAKO,UAAU,MAAM,GACrBP,EAAKQ,UACHC,YAAa,MAtFET,EAkInBU,OAAS,SAACC,GACJX,EAAKY,WACTZ,EAAKY,SAAWD,IAjIhBX,EAAKY,SAAW,KAChBZ,EAAKa,gBAAkB,KACvBb,EAAKc,QAAUd,EAAKD,MAAMrC,kBACuB,IAA7CqD,SAASf,EAAKD,MAAMrC,kBAAmB,IACvC,IAEJ,IAAMsD,EAAWC,OAAOC,YAAcC,oBATrB,OAUjBnB,EAAKoB,OACHX,YAAa,GACbY,WACAC,YAAY,EACZN,YAdehB,qUADmBuB,qDAmBzBC,EAAGC,GACdD,EAAEE,iBACED,GAAS,IACXR,OAAOU,SAASC,KAAOhF,KAAKwE,MAAMC,QAAQI,GAAOI,0CAKxCC,GAAO,IAAAC,EAAAnF,KACZ6D,EAAcqB,EAAME,OAAOC,MAC3BjE,EAAM,gCAAkCyC,EAE1B,KAAhBA,EACF7D,KAAK4D,UAAWa,WAAaZ,iBAE7B7D,KAAK4D,UAAW0B,WAAW,EAAMzB,gBAEjC1C,UAAUoE,MAAMnE,EAAK,OAAOoE,KAAK,SAACf,GAChC,GAAIA,EAAS,CAUX,IARA,IAAIgB,EAAiB5B,EAAY6B,cAC7BC,GAAa,EAAA5C,EAAA6C,uBAAsBH,GAGnCI,EAAQ,IAAIC,OAAOL,EAAgB,KACnCM,EAAa,IAAID,OAAOH,EAAY,KAG/BK,EAAI,EAAGA,EAAIvB,EAAQlD,OAAQyE,IAAK,CACvC,IAAIC,EAAcxB,EAAQuB,GAAGE,MAK7BD,GAJAA,EAAcA,EAAYE,QACxBN,EACA,2BAA6BJ,EAAiB,YAEtBU,QACxBJ,EACA,2BAA6BJ,EAAa,WAE5ClB,EAAQuB,GAAGE,MAAQD,EAEjBpC,IAAgBsB,EAAKX,MAAMX,aAC7BsB,EAAKvB,UAAWa,qDAOb2B,GACX,OAAQA,GACN,IAAK,QACH,MAAO,wBAET,IAAK,kBACH,MAAO,wBAET,IAAK,oBACH,MAAO,4BAET,QACE,MAAO,8DAYHxB,EAAGyB,GACPrG,KAAKwE,MAAME,aAAe1E,KAAKwE,MAAMX,aAAewC,IACpDzB,GAAGA,EAAEE,kBACJ9E,KAAKwE,MAAMJ,UAAYpE,KAAKwE,MAAME,aAAe2B,EACpDhC,OAAOU,SAASC,KAAhB,iBAAwChF,KAAKwE,MAAMX,aAGjD7D,KAAKgE,WACFhE,KAAKwE,MAAME,YAIdL,OAAOiC,aAAatG,KAAKiE,iBACzBjE,KAAKgE,SAASuC,SAJdvG,KAAKgE,SAASwC,QACdxG,KAAKiE,gBAAkBI,OAAOoC,WAAWzG,KAAK0D,kBAAmB1D,KAAKkE,WAM1ElE,KAAK4D,UACHc,YAAa1E,KAAKwE,MAAME,qDAIdQ,GAKZ,OAHAb,OAAOiC,aAAatG,KAAKiE,iBACzBjE,KAAKiE,gBAAkBI,OAAOoC,WAAWzG,KAAK0D,kBAAmB1D,KAAKkE,SAE9DgB,EAAMwB,SACZ,KAAK3F,OAAKC,MACRhB,KAAK2D,UAAU,MAAM,GACrB,MAEF,KAAK5C,OAAKE,IACRjB,KAAK2D,UAAU,MAAM,GAEvB,QACE,yCAUG,IAAAgD,EAAA3G,KAAA4G,EAC8B5G,KAAKmD,MAAlC9C,EADDuG,EACCvG,YAAaC,EADdsG,EACctG,YACrB,OACEI,EAAAC,QAAAC,cAAA,OACEiG,UAAA,0BACE7G,KAAKwE,MAAME,WAAa,kBAAoB,KAG9ChE,EAAAC,QAAAC,cAAA,OAAKiG,UAAU,2BACbnG,EAAAC,QAAAC,cAAA,OAAKiG,UAAU,6BACbnG,EAAAC,QAAAC,cAAA,SACEiG,UAAU,mBACVT,KAAK,OACLU,KAAK,QACLC,YAAY,sBACZC,SAAU,SAAC9B,GAAD,OAAWyB,EAAKM,aAAa/B,IACvCgC,aAAa,SAGjBxG,EAAAC,QAAAC,cAAA,UACEwF,KAAK,SACLS,UAAU,0BACVM,QAAS,SAACvC,GAAD,OAAO+B,EAAKhD,UAAUiB,GAAG,KAElClE,EAAAC,QAAAC,cAAA,KAAGiG,UAAU,+BAA+BO,cAAY,WAG5D1G,EAAAC,QAAAC,cAAA,OAAKiG,UAAU,kBAAkBQ,KAAK,UACpC3G,EAAAC,QAAAC,cAAA,UACEwF,KAAK,SACLS,UAAU,oBACVM,QAAS,SAACvC,GAAD,OAAO+B,EAAKhD,UAAUiB,GAAG,KAElClE,EAAAC,QAAAC,cAAA,KAAGiG,UAAU,+BAA+BO,cAAY,WAG3D/G,GAAeC,GACdI,EAAAC,QAAAC,cAAA,KAAGoE,KAAM3E,EAAawG,UAAU,sBAC7BvG,GAGLI,EAAAC,QAAAC,cAAA,OAAKiG,UAAU,wBACbnG,EAAAC,QAAAC,cAAA,OACEiG,UAAU,mBACVM,QAAS,SAACvC,GAAD,OAAO+B,EAAKhD,UAAUiB,GAAG,KAElClE,EAAAC,QAAAC,cAAA,KAAGiG,UAAU,8BAA8BO,cAAY,UAEzD1G,EAAAC,QAAAC,cAAA,OAAKiG,UAAU,6BACbnG,EAAAC,QAAAC,cAAA,SACEmD,IAAK,SAACA,GAAD,OAAS4C,EAAK7C,OAAOC,IAC1B8C,UAAU,mBACVT,KAAK,OACLU,KAAK,QACLC,YAAY,sBACZC,SAAU,SAAC9B,GAAD,OAAWyB,EAAKM,aAAa/B,IACvCoC,UAAW,SAACpC,GAAD,OAAWyB,EAAKY,cAAcrC,IACzCgC,aAAa,WAIjBlH,KAAKwE,MAAMJ,UAAYpE,KAAKwE,MAAME,aAClC1E,KAAKwE,MAAMC,QAAQlD,OAAS,GAC1Bb,EAAAC,QAAAC,cAAA,OAAKiG,UAAU,sBACZ7G,KAAKwE,MAAMC,QAAQ+C,IAAI,SAACC,EAAQ5C,GAC/B,IAAI6C,EAAYf,EAAKgB,aAAaF,EAAOG,UACzC,OACElH,EAAAC,QAAAC,cAAA,OACEiH,IAAKhD,EACLgC,UAAW,mBAAqBa,EAChCI,yBAA2BC,OAAQN,EAAOvB,OAC1CiB,QAAS,SAACvC,GAAD,OAAO+B,EAAKqB,aAAapD,EAAGC,6BA/MpC3B","file":"SiteSearchRender-f8f256e651ae08681398.js","sourcesContent":["import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport SiteSearch from '../../react/Navigation/SiteSearch';\r\n\r\nexport default class {\r\n\r\n\tconstructor(context) {\r\n\t\tthis.context = context;\r\n\t\tthis.init();\r\n\t}\r\n\r\n\tinit() {\r\n\t\tthis.initReact();\r\n\t}\r\n\r\n\tinitReact() {\r\n\t\tconst {\r\n\t\t\tcontactLink,\r\n\t\t\tcontactText,\r\n\t\t\tsearchInactivityTimeout,\r\n\t\t} = this.context.dataset;\r\n\r\n\t\tReactDOM.render(\r\n\t\t\t,\r\n\t\t\tthis.context\r\n\t\t);\r\n\t}\r\n}\r\n","export const KEYS = {\r\n ENTER: 13,\r\n ESC: 27,\r\n}\r\n","import QueryString from 'query-string';\r\nimport * as Sentry from '@sentry/browser';\r\n\r\nexport default class FetchJSON {\r\n\r\n static fetch(url, method = 'GET', data = {}) {\r\n return new Promise(function(resolve, reject) {\r\n let postData = null;\r\n\r\n if (method === 'GET') {\r\n if (url.indexOf('?') === -1) {\r\n url += '?' + QueryString.stringify(data);\r\n }\r\n } else {\r\n postData = JSON.stringify(data);\r\n }\r\n\r\n let xhr = new XMLHttpRequest();\r\n xhr.open(method, url, true);\r\n xhr.setRequestHeader(\"Content-type\", \"application/json;charset=UTF-8\");\r\n xhr.send(postData);\r\n\r\n xhr.onload = function() {\r\n resolve(JSON.parse(xhr.response));\r\n destroy();\r\n }\r\n\r\n xhr.onerror = function(error) {\r\n Sentry.captureException(error);\r\n reject(error);\r\n destroy();\r\n }\r\n\r\n function destroy() {\r\n xhr.onload = null;\r\n xhr.onerror = null;\r\n xhr = null;\r\n }\r\n });\r\n }\r\n}\r\n","import React, { Component, PropTypes } from 'react';\r\n\r\nimport { capitalizeFirstLetter } from '../../../../util/empty-helpers.js';\r\nimport FetchJSON from '../../../../util/fetch-json';\r\nimport { desktopBreakpoint } from '../../../../constants/breakpoints.js';\r\nimport { KEYS } from '../../../../constants/keys.js';\r\n\r\nexport default class SiteSearch extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.inputRef = null;\r\n this.inactivityTimer = null;\r\n this.timeout = this.props.inactivityTimeout\r\n ? parseInt(this.props.inactivityTimeout, 10) * 1000\r\n : 10000;\r\n \r\n const isMobile = window.innerWidth <= desktopBreakpoint;\r\n this.state = {\r\n searchValue: \"\",\r\n results: [],\r\n searchOpen: false,\r\n isMobile,\r\n };\r\n }\r\n\r\n selectOption(e, index) {\r\n e.preventDefault();\r\n if (index >= 0) {\r\n window.location.href = this.state.results[index].Url;\r\n return;\r\n }\r\n }\r\n\r\n handleChange(event) {\r\n const searchValue = event.target.value;\r\n const url = \"/api/SiteSearch/Search?query=\" + searchValue;\r\n\r\n if (searchValue === \"\") {\r\n this.setState({ results: [], searchValue });\r\n } else {\r\n this.setState({ isLoading: true, searchValue });\r\n\r\n FetchJSON.fetch(url, \"GET\").then((results) => {\r\n if (results) {\r\n // Set values to search\r\n let valueLowerCase = searchValue.toLowerCase();\r\n let valueUpper = capitalizeFirstLetter(valueLowerCase);\r\n\r\n // Set up regex for global search\r\n let regex = new RegExp(valueLowerCase, \"g\");\r\n let regexUpper = new RegExp(valueUpper, \"g\");\r\n\r\n // Loop through and replace instances\r\n for (let i = 0; i < results.length; i++) {\r\n let replaceName = results[i].Title;\r\n replaceName = replaceName.replace(\r\n regex,\r\n '' + valueLowerCase + \"\"\r\n );\r\n replaceName = replaceName.replace(\r\n regexUpper,\r\n '' + valueUpper + \"\"\r\n );\r\n results[i].Title = replaceName;\r\n }\r\n if (searchValue === this.state.searchValue) {\r\n this.setState({ results });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n getTypeClass(type) {\r\n switch (type) {\r\n case \"Hotel\": {\r\n return \"SiteSearch_item-hotel\";\r\n }\r\n case \"MultiCenterPage\": {\r\n return \"SiteSearch_item-multi\";\r\n }\r\n case \"Point of Interest\": {\r\n return \"SiteSearch_item-excursion\";\r\n }\r\n default: {\r\n return \"SiteSearch_item-location\";\r\n }\r\n }\r\n }\r\n\r\n handleCloseSearch = () => {\r\n this.toggleNav(null, false);\r\n this.setState({\r\n searchValue: \"\",\r\n });\r\n };\r\n\r\n toggleNav(e, hasSearched) {\r\n if (this.state.searchOpen && !this.state.searchValue && hasSearched) return;\r\n if (e) e.preventDefault();\r\n if ((this.state.isMobile || this.state.searchOpen) && hasSearched) {\r\n window.location.href = `/search?query=${this.state.searchValue}`;\r\n return;\r\n }\r\n if (this.inputRef) {\r\n if (!this.state.searchOpen) {\r\n this.inputRef.focus();\r\n this.inactivityTimer = window.setTimeout(this.handleCloseSearch, this.timeout);\r\n } else {\r\n window.clearTimeout(this.inactivityTimer);\r\n this.inputRef.blur();\r\n }\r\n }\r\n this.setState({\r\n searchOpen: !this.state.searchOpen,\r\n });\r\n }\r\n\r\n handleKeyDown(event) {\r\n // Reset inactivity timer\r\n window.clearTimeout(this.inactivityTimer);\r\n this.inactivityTimer = window.setTimeout(this.handleCloseSearch, this.timeout);\r\n // Handle specific keypresses\r\n switch (event.keyCode) {\r\n case KEYS.ENTER: {\r\n this.toggleNav(null, true);\r\n break;\r\n }\r\n case KEYS.ESC: {\r\n this.toggleNav(null, false);\r\n }\r\n default: {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n setRef = (ref) => {\r\n if (this.inputRef) return;\r\n this.inputRef = ref;\r\n };\r\n\r\n render() {\r\n const { contactLink, contactText } = this.props;\r\n return (\r\n \r\n
\r\n
\r\n this.handleChange(event)}\r\n autoComplete=\"off\"\r\n />\r\n
\r\n this.toggleNav(e, true)}\r\n >\r\n \r\n \r\n
\r\n
\r\n this.toggleNav(e, true)}\r\n >\r\n \r\n \r\n
\r\n {contactLink && contactText && (\r\n \r\n {contactText}\r\n \r\n )}\r\n
\r\n this.toggleNav(e, false)}\r\n >\r\n \r\n
\r\n
\r\n this.setRef(ref)}\r\n className=\"SiteSearch_input\"\r\n type=\"text\"\r\n name=\"query\"\r\n placeholder=\"Search this site...\"\r\n onChange={(event) => this.handleChange(event)}\r\n onKeyDown={(event) => this.handleKeyDown(event)}\r\n autoComplete=\"off\"\r\n />\r\n
\r\n \r\n {(this.state.isMobile || this.state.searchOpen) &&\r\n this.state.results.length > 0 && (\r\n
\r\n {this.state.results.map((result, index) => {\r\n let typeClass = this.getTypeClass(result.Template);\r\n return (\r\n this.selectOption(e, index)}\r\n >
\r\n );\r\n })}\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n"],"sourceRoot":""}