{"version":3,"sources":["webpack:///./src/feature/search-navigation/search-navigation.js","webpack:///./src/feature/search-navigation/search-typeahead-api-test.js","webpack:///./src/feature/search-navigation/search-typeahead-api.js"],"names":["classes","open","defaultSettings","endpoint","searchPage","dev","minChars","fetchDelay","maxItems","SearchNavigation","element","el","body","window","features","dom","initDomCache","settings","Object","assign","parseSettings","fetchResults","query","searchTypeaheadTest","awesomplete","Awesomplete","searchInput","parentNode","insertBefore","updateResults","bind","addEventListeners","addEventListener","toggle","e","preventDefault","contains","target","close","form","submitForm","handleKeyup","handleSelect","getAttribute","JSON","parse","ignoredKeyCodes","indexOf","keyCode","value","text","length","then","json","list","toAwesompleteList","trim","encodeURIComponent","location","href","classList","publish","add","content","style","maxHeight","inner","offsetHeight","setTimeout","overflow","focusInput","removeProperty","remove","focus","jsonResult","map","label","result","name","BaseFeature","suggestions","emulatedNetworkDelay","Promise","resolve","s","searchTypeahead","searchString","path","fetch","response"],"mappings":"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","file":"42-b133ef01.pkg.js","sourcesContent":["import Awesomplete from 'awesomplete';\r\nimport BaseFeature from '../../foundation/base/base';\r\nimport { debounce } from '../../foundation/utilities/debounce';\r\nimport { searchTypeaheadTest } from './search-typeahead-api-test';\r\nimport { searchTypeahead } from './search-typeahead-api';\r\n\r\nconst classes = {\r\n\topen: 'o-search-navigation--open'\r\n};\r\n\r\nconst defaultSettings = {\r\n\tendpoint: 'perstorp.website.local/sitecore/api/searchapi/typeahead',\r\n\tsearchPage: '/search?q=',\r\n\tdev: false,\r\n\tminChars: 1,\r\n\tfetchDelay: 250,\r\n\tmaxItems: 4\r\n};\r\n\r\nexport default class SearchNavigation extends BaseFeature {\r\n\tconstructor(element) {\r\n\t\tsuper(element);\r\n\t\tthis.el = element;\r\n\t\tthis.body = window.features.dom.body;\r\n\t\tthis.initDomCache();\r\n\t\tthis.settings = Object.assign({}, defaultSettings, this.parseSettings());\r\n\r\n\t\t// Fetch results from API depending on dev\r\n\t\tthis.fetchResults = !this.settings.dev ?\r\n\t\t\tquery => searchTypeahead(this.settings.endpoint, query) :\r\n\t\t\tsearchTypeaheadTest;\r\n\r\n\t\tthis.awesomplete = new Awesomplete(this.dom.searchInput, {\r\n\t\t\tminChars: this.settings.minChars,\r\n\t\t\tmaxItems: this.settings.maxItems\r\n\t\t});\r\n\r\n\t\t// Move input field outside\r\n\t\tthis.dom.searchInput.parentNode.parentNode.insertBefore(\r\n\t\t\tthis.dom.searchInput,\r\n\t\t\tthis.dom.searchInput.parentNode\r\n\t\t);\r\n\r\n\t\tthis.updateResults = debounce(this.updateResults.bind(this), this.settings.fetchDelay);\r\n\r\n\t\tthis.addEventListeners();\r\n\t}\r\n\r\n\taddEventListeners() {\r\n\t\tthis.addEventListener(this.dom.toggle, 'click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.toggle();\r\n\t\t});\r\n\t\tthis.addEventListener(this.body, 'click', (e) => {\r\n\t\t\tif (!this.el.contains(e.target)) this.close();\r\n\t\t});\r\n\t\tthis.addEventListener(this.dom.form, 'submit', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.submitForm(e);\r\n\t\t});\r\n\t\tthis.addEventListener(this.dom.searchInput, 'keyup', (e) => {\r\n\t\t\tthis.handleKeyup(e);\r\n\t\t});\r\n\t\tthis.addEventListener(this.dom.searchInput, 'awesomplete-select', (e) => {\r\n\t\t\tthis.handleSelect(e);\r\n\t\t});\r\n\t}\r\n\r\n\t// Get settings from data-attributes\r\n\tparseSettings() {\r\n\t\tconst settings = this.el.getAttribute('data-settings') || '{}';\r\n\t\treturn JSON.parse(settings);\r\n\t}\r\n\r\n\t/*\r\n\t*\tSearch logic\r\n\t*/\r\n\r\n\thandleKeyup(e) {\r\n\t\tconst ignoredKeyCodes = [\r\n\t\t\t13, // return\r\n\t\t\t27, // esc\r\n\t\t\t37, // left arrow\r\n\t\t\t38, // up arrow\r\n\t\t\t39, // right arrow\r\n\t\t\t40 // down arrow\r\n\t\t];\r\n\r\n\t\tif (ignoredKeyCodes.indexOf(e.keyCode) > -1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.updateResults();\r\n\t}\r\n\r\n\t// On click on awesomplete list-item\r\n\thandleSelect(e) {\r\n\t\tthis.dom.searchInput.value = e.text;\r\n\t\tthis.submitForm();\r\n\t}\r\n\r\n\tupdateResults() {\r\n\t\tconst query = this.dom.searchInput.value;\r\n\r\n\t\tif (query.length < this.settings.minChars) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.fetchResults(query).then((json) => {\r\n\t\t\tthis.awesomplete.list = SearchNavigation.toAwesompleteList(json);\r\n\t\t});\r\n\t}\r\n\r\n\t// Get the input value and search\r\n\tsubmitForm() {\r\n\t\tconst query = this.dom.searchInput.value.trim();\r\n\t\tif (!query) return;\r\n\t\tconst target = this.settings.searchPage + encodeURIComponent(query);\r\n\t\twindow.location.href = target;\r\n\t}\r\n\r\n\tstatic toAwesompleteList(json) {\r\n\t\tconst jsonResult = JSON.parse(json)\r\n\t\treturn jsonResult.map(result => ({\r\n\t\t\tlabel: `${result.name}`,\r\n\t\t\tvalue: result.name\r\n\t\t}));\r\n\t}\r\n\r\n\t/*\r\n\t*\tNavigation logic\r\n\t*/\r\n\r\n\ttoggle() {\r\n\t\tif (this.el.classList.contains(classes.open)) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tthis.publish('/header/action/switch');\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t}\r\n\r\n\topen() {\r\n\t\tthis.el.classList.add(classes.open);\r\n\t\tthis.dom.content.style.maxHeight = this.dom.inner.offsetHeight + 'px';\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.dom.content.style.overflow = 'visible';\r\n\t\t}, 50);\r\n\t\tthis.focusInput();\r\n\t}\r\n\r\n\tclose() {\r\n\t\tthis.dom.content.style.removeProperty('overflow');\r\n\t\tthis.dom.content.style.maxHeight = '0px';\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.el.classList.remove(classes.open);\r\n\t\t}, 50);\r\n\t}\r\n\r\n\tfocusInput() {\r\n\t\tthis.dom.searchInput.focus();\r\n\t}\r\n}\r\n","const suggestions = [\r\n\t{ name: '2-Ethylhexanol' },\r\n\t{ name: '2-Ethylhexanoic Acid' },\r\n\t{ name: '5 ways to upgrade feed' },\r\n\t{ name: 'Adhesives' },\r\n\t{ name: 'BioPlastics' },\r\n\t{ name: 'Biodegradable plastic with Capa' },\r\n\t{ name: 'Albin, SPPO Plant' },\r\n\t{ name: 'Benchmark for non-phthalate plasticizers' },\r\n\t{ name: 'BioPlastics: The Re-Invention of Plastics via Renewable Chemicals 2015' },\r\n\t{ name: 'Glycerine tech' },\r\n\t{ name: 'Neopentyl Glycol molten' },\r\n\t{ name: 'Molds and mycotoxins' },\r\n\t{ name: 'New ProMyr website launched' },\r\n\t{ name: 'Metalworking fluids' },\r\n\t{ name: 'Perstorp acquires TallOil' },\r\n\t{ name: 'Chaitali Danave' },\r\n\t{ name: 'Natalia Sapranova' },\r\n];\r\n\r\nconst emulatedNetworkDelay = 1500;\r\n\r\nexport function searchTypeaheadTest() {\r\n\treturn new Promise((resolve) => {\r\n\t\tsetTimeout(() => {\r\n\t\t\tresolve(\r\n\t\t\t\tsuggestions.map(s => ({\r\n\t\t\t\t\tname: s.name\r\n\t\t\t\t}))\r\n\t\t\t);\r\n\t\t}, emulatedNetworkDelay);\r\n\t});\r\n}\r\n","export function searchTypeahead(endpoint, searchString) {\r\n\tconst path = `${endpoint}?query=${searchString}`;\r\n\r\n\treturn new Promise((resolve) => {\r\n\t\tfetch(path).then((response) => {\r\n\t\t\tresponse.json().then((json) => {\r\n\t\t\t\tresolve(json);\r\n\t\t\t});\r\n\t\t});\r\n\t});\r\n}\r\n"],"sourceRoot":""}