{"version":3,"sources":["webpack:///./app/constants/keys.js","webpack:///./app/util/fetch-json.js","webpack:///./app/components/react/Navigation/SiteSearch/index.js","webpack:///./app/components/render/Navigation/SiteSearch.js"],"names":["KEYS","ENTER","ESC","__webpack_require__","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","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","handleCloseSearch","toggleNav","setState","searchValue","setRef","ref","inputRef","inactivityTimer","timeout","inactivityTimeout","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","contactLink","contactText","_react2","default","createElement","className","name","placeholder","onChange","handleChange","autoComplete","onClick","aria-hidden","role","onKeyDown","handleKeyDown","map","result","typeClass","getTypeClass","Template","key","dangerouslySetInnerHTML","__html","selectOption","_class","context","init","initReact","_context$dataset","dataset","searchInactivityTimeout","ReactDOM","render","_SiteSearch2"],"mappings":"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","file":"SiteSearchRender-a0e23a2e4e6d9916b8f5.js","sourcesContent":["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","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"],"sourceRoot":""}