{"version":3,"sources":["webpack:///./assets/javascripts/modules/components/SearchLayerComponent.js"],"names":["SearchLayerComponent","compEl","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","closeBtn","$component","querySelector","SELECTORS","searchForm","searchJsSubmit","searchFormUrlJs","getAttribute","input","scrollY","appID","apiKey","analyticsApiKey","topSearchesWrapper","document","Component","searchJsSubmitInput","open","baseUrl","baseUri","indexName","classList","add","CSS_CLASSNAMES","window","matchMedia","matches","benefitBar","barHeight","offsetHeight","body","style","position","top","width","focus","suggestionInput","remove","scrollTo","_this2","addEventListener","$emit","$customEvents","SEARCH_LAYER_EVENTS","close","index","arguments","length","undefined","ctx","appId","searchClient","algoliasearch","autocomplete","debug","container","panelContainer","placeholder","dataset","searchPlaceholder","detachedMediaQuery","getSources","_ref","query","sourceId","getItems","getAlgoliaResults","queries","getItemUrl","_ref2","item","url","getItemInputValue","_ref3","templates","header","_ref4","itemHtml","options","currency","maximumFractionDigits","name","html","_templateObject","link","image_index","title","isSaleMode","specialPrice","sale_price","inSale","originalPrice","price","toLocaleString","currentLocale","salePrice","_templateObject2","_templateObject3","footer","searchEnv","searchBrand","toLowerCase","searchCountry","searchLanguage","getSuggestion","self","value","autocompleteInput","location","href","$on","openLayer","closeLayer","e","preventDefault","jsSearchPage","keyCode","doAjax","type","success","searches","log","i","appendChild","topSearchTemplate","console","warn","error","xhr","search","searchEl","createElement","searchLink","innerText","_get","prototype","listenClose","bindEvents","attributes","nodeValue","getTopSearches","bindSearch","inputEvent"],"mappings":"4xIAUqBA,cA0BnB,SAAAA,EAAYC,gGAAQC,CAAAC,KAAAH,GAAA,IAAAI,mKAAAC,CAAAF,MAAAH,EAAAM,WAAAC,OAAAC,eAAAR,IAAAS,KAAAN,KACZF,IADY,OAElBG,EAAKM,SAAWN,EAAKO,WAAWC,cAAcR,EAAKS,UAAUH,UAC7DN,EAAKU,WAAaV,EAAKO,WAAWC,cAAcR,EAAKS,UAAUC,YAC/DV,EAAKW,eAAiBX,EAAKO,WAAWC,cAAcR,EAAKS,UAAUE,gBACnEX,EAAKY,gBAAkBZ,EAAKU,WAAWG,aAAa,sBACpDb,EAAKc,MAAQd,EAAKO,WAAWC,cAAc,SAC3CR,EAAKe,QAAU,EACff,EAAKgB,MAAQhB,EAAKO,WAAWM,aAAa,qBAC1Cb,EAAKiB,OAASjB,EAAKO,WAAWM,aAAa,sBAC3Cb,EAAKkB,gBAAkBlB,EAAKO,WAAWM,aAAa,+BACpDb,EAAKmB,mBAAqBC,SAASZ,cAAcR,EAAKS,UAAUU,oBAX9CnB,qUA1B4BqB,6CAG9C,OACEf,SAAU,sBACVI,WAAY,qBACZC,eAAgB,oBAChBW,oBAAqB,0BACrBH,mBAAoB,yDAKtB,OACEI,KAAM,6CAKR,OACEC,QAAS,2CACTC,QAAS,aACTC,UAAW,gDAoBb,GADA3B,KAAKQ,WAAWoB,UAAUC,IAAI7B,KAAK8B,eAAeN,MAC/CO,OAAOC,WAAW,sBAAsBC,QAAS,CAClD,IAAIC,EAAab,SAASZ,cAAc,sBACpC0B,EAAYD,EAAaA,EAAWE,aAAe,EACvDpC,KAAKgB,QAAUe,OAAOf,QAAUmB,EAAYJ,OAAOf,QAAUmB,EAC7Dd,SAASgB,KAAKC,MAAMC,SAAW,QAC/BlB,SAASgB,KAAKC,MAAME,IAApB,IAA8BL,EAA9B,KACAd,SAASgB,KAAKC,MAAMG,MAAQ,OAE9B,GAAiB,MAAdzC,KAAKe,MACNf,KAAKe,MAAM2B,YACN,CACL,IAAIC,EAAkBtB,SAASZ,cAAc,aACvB,MAAnBkC,GACDA,EAAgBD,8CAMpB1C,KAAKQ,WAAWoB,UAAUgB,OAAO5C,KAAK8B,eAAeN,MAClDO,OAAOC,WAAW,sBAAsBC,UACzCZ,SAASgB,KAAKC,MAAMC,SAAW,GAC/BlB,SAASgB,KAAKC,MAAME,IAAM,GAC1BT,OAAOc,SAAS,EAAG7C,KAAKgB,gDAId,IAAA8B,EAAA9C,KACRA,KAAKO,UAGTP,KAAKO,SAASwC,iBAAiB,QAAS,WACtCD,EAAKE,MAAMF,EAAKG,cAAcC,oBAAoBC,+CAIxCC,GAAuBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,OAC/BG,EAAMxD,KAGJyD,EAAQzD,KAAKiB,MACbC,EAASlB,KAAKkB,OACdwC,EAAeC,IAAcF,EAAOvC,GAE1C0C,aACEC,OAAO,EACPC,UAAW,eACXC,eAAgB,oBAChBC,YAAaR,EAAIhD,WAAWyD,QAAQC,kBACpCC,mBAAoB,OACpBC,WANW,SAAAC,GAMW,IAATC,EAASD,EAATC,MACX,QAEIC,SAAU,mBACVC,SAFF,WAGI,OAAOC,aACLf,eACAgB,UAEI/C,UAAWyB,EACXkB,aAKRK,WAbF,SAAAC,GAcI,OADmBA,EAARC,KACCC,KAEdC,kBAhBF,SAAAC,GAiBI,OAD0BA,EAARH,KACNP,OAEdW,WACEC,OADS,WAEP,MAAO,IAETL,KAJS,SAAAM,GAIM,IAARN,EAAQM,EAARN,KACDO,SACEC,GAAW/C,MAAM,WAAYgD,SAAST,EAAKS,SAAWC,sBAAuB,GACnF,GAAiB,gBAAdV,EAAKW,KACNJ,EAAWK,YAAXC,EACeb,EAAKc,KAE+Bd,EAAKe,YAGVf,EAAKgB,YAI9C,IAAIrC,EAAIsC,YAAcjB,EAAKkB,eAAoC,IAAnBlB,EAAKmB,YAAmC,GAAfnB,EAAKoB,OAAgB,CAC/F,IAAIC,EAAgBrB,EAAKsB,MAAMC,eAAe5C,EAAI6C,cAAehB,GAC7DiB,EAAYzB,EAAKmB,WAAWI,eAAe5C,EAAI6C,cAAehB,GAClED,EAAWK,YAAXc,EACe1B,EAAKc,KAE+Bd,EAAKe,YAGVf,EAAKgB,MAEEK,EACII,OAKpD,CACDJ,EAAgBrB,EAAKsB,MAAMC,eAAe5C,EAAI6C,cAAehB,GACjED,EAAWK,YAAXe,EACe3B,EAAKc,KAE+Bd,EAAKe,YAGVf,EAAKgB,MAEEK,GAMvD,OAAOd,GAETqB,OArDS,WAsDP,MAAO,+CAWnB,IACIrD,EADOpD,KACMQ,WAAWyD,QAAQyC,UAAY,IADrC1G,KACgDQ,WAAWyD,QAAQ0C,YAAYC,cAAgB,IAD/F5G,KAC0GQ,WAAWyD,QAAQ4C,cAAgB,IAD7I7G,KACwJQ,WAAWyD,QAAQ6C,eAD3K9G,KAEN+G,cAAc3D,wCAInB,IAAI4D,EAAOhH,KACPuB,EAAsBF,SAASZ,cAAcT,KAAKU,UAAUa,qBAEtC,MAAvBA,GACDA,EAAoBwB,iBAAiB,QAAS,WACX,KAA9BxB,EAAoB0F,MACrBD,EAAKpG,eAAegB,UAAUgB,OAAO,iBAErCoE,EAAKpG,eAAegB,UAAUC,IAAI,0DAQxC,IAAIqF,EAAoBlH,KAAKQ,WAAWC,cAAcT,KAAKU,UAAUa,qBAEjEuD,EAAM9E,KAAKa,gBAAkB,SAAWqG,EAAkBD,MAE9DlF,OAAOoF,SAASC,KAAOtC,uCAIvB,IAAIkC,EAAOhH,KAEXA,KAAKqH,IAAIrH,KAAKiD,cAAcC,oBAAoB1B,KAAM,WACpDwF,EAAKM,cAGPtH,KAAKqH,IAAIrH,KAAKiD,cAAcC,oBAAoBC,MAAO,WACrD6D,EAAKO,eAImB,MAAvBvH,KAAKY,iBACNZ,KAAKY,eAAemC,iBAAiB,QAAS,SAACyE,GAC7CA,EAAEC,iBAEFT,EAAKU,iBAGP1H,KAAKW,WAAWoC,iBAAiB,WAAY,SAACyE,GAC3B,KAAdA,EAAEG,UACHH,EAAEC,iBAEFT,EAAKU,4DAOX,IAAIlE,EAAMxD,KAEN8E,EAAM,gDADEtB,EAAIhD,WAAWyD,QAAQyC,UAAY,IAAMlD,EAAIhD,WAAWyD,QAAQ0C,YAAYC,cAAe,IAAMpD,EAAIhD,WAAWyD,QAAQ4C,cAAgB,IAAMrD,EAAIhD,WAAWyD,QAAQ6C,gBAEjL,OAAOc,aACL9C,IAAKA,EACL+C,KAAM,MACNC,QAAS,SAASC,GAChBvE,EAAIwE,IAAI,mBACR,IACE,IAAI,IAAIC,EAAE,EAAGA,EAAIF,EAASzE,UACpB2E,EAAI,GADwBA,IAAK,CAIf5G,SAASZ,cAAc,6BAC7ByH,YAAY1E,EAAI2E,kBAAkBJ,EAASE,KAEhC,MAA1BzE,EAAIpC,oBAA4BoC,EAAIpC,mBAAmBQ,UAAUgB,OAAO,UAC3E,MAAM4E,GACNY,QAAQC,KAAK,4CAA6Cb,KAG9Dc,MAAO,SAASC,GACdH,QAAQJ,IAAIO,gDAKAC,GACdJ,QAAQJ,IAAI,wBAAwBQ,GACtC,IAAIC,EAAWpH,SAASqH,cAAc,OACtCD,EAAS7G,UAAUC,IAAI,kCACvB,IAAI8G,EAAatH,SAASqH,cAAc,KAIxC,OAHAC,EAAWvB,KAAO,gBAAkBoB,EACpCG,EAAWC,UAAYJ,EACvBC,EAASP,YAAYS,GACdF,8RAIPI,CAAAhJ,EAAAiJ,UAAA3I,WAAAC,OAAAC,eAAAR,EAAAiJ,WAAA,SAAA9I,MAAAM,KAAAN,MACAA,KAAK+I,cACL/I,KAAKgJ,aAE8D,QAAhEhJ,KAAKQ,WAAWyI,WAAW,wBAAwBC,WACpDlJ,KAAKmJ,iBAE4D,QAAhEnJ,KAAKQ,WAAWyI,WAAW,wBAAwBC,WACe,QAAnElJ,KAAKQ,WAAWyI,WAAW,2BAA2BC,YACtDlJ,KAAKoJ,aACLpJ,KAAKqJ,uBA9RUxJ","file":"component-SearchLayerComponent.chunks.js","sourcesContent":["import Component from '../abstracts/Component';\nimport { doAjax } from '../utils/ajaxUtil';\nimport { html } from 'htm/preact';\nimport algoliasearch from 'algoliasearch';\n// import { createQuerySuggestionsPlugin } from '@algolia/autocomplete-plugin-query-suggestions';\nimport { getAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\nimport { autocomplete } from '@algolia/autocomplete-js';\nimport '@algolia/autocomplete-theme-classic';\n\n\nexport default class SearchLayerComponent extends Component {\n\n get SELECTORS() {\n return {\n closeBtn: '[data-search-close]',\n searchForm: '[data-search-form]',\n searchJsSubmit: '.js-search-submit',\n searchJsSubmitInput: '#search_field_box input',\n topSearchesWrapper: '.l-s__searches'\n };\n }\n\n get CSS_CLASSNAMES() {\n return {\n open: 'search-open'\n };\n }\n\n get CONST() {\n return {\n baseUrl: 'https://query-suggestions.eu.algolia.com',\n baseUri: '/1/configs',\n indexName: '/'\n }\n }\n\n constructor(compEl) {\n super(compEl);\n this.closeBtn = this.$component.querySelector(this.SELECTORS.closeBtn);\n this.searchForm = this.$component.querySelector(this.SELECTORS.searchForm);\n this.searchJsSubmit = this.$component.querySelector(this.SELECTORS.searchJsSubmit);\n this.searchFormUrlJs = this.searchForm.getAttribute('data-js-search-url');\n this.input = this.$component.querySelector('input');\n this.scrollY = 0;\n this.appID = this.$component.getAttribute('data-search-appID');\n this.apiKey = this.$component.getAttribute('data-search-apiKey');\n this.analyticsApiKey = this.$component.getAttribute('data-search-analyticsApiKey');\n this.topSearchesWrapper = document.querySelector(this.SELECTORS.topSearchesWrapper);\n }\n\n openLayer() {\n this.$component.classList.add(this.CSS_CLASSNAMES.open);\n if(window.matchMedia('(max-width: 991px)').matches) {\n let benefitBar = document.querySelector('[data-benefit-bar]');\n let barHeight = benefitBar ? benefitBar.offsetHeight : 0;\n this.scrollY = window.scrollY > barHeight ? window.scrollY : barHeight;\n document.body.style.position = 'fixed';\n document.body.style.top = `-${barHeight}px`;\n document.body.style.width = '100%';\n }\n if(this.input != null) {\n this.input.focus();\n } else {\n let suggestionInput = document.querySelector('.aa-Input');\n if(suggestionInput != null) {\n suggestionInput.focus();\n }\n }\n }\n\n closeLayer() {\n this.$component.classList.remove(this.CSS_CLASSNAMES.open);\n if(window.matchMedia('(max-width: 991px)').matches) {\n document.body.style.position = '';\n document.body.style.top = '';\n window.scrollTo(0, this.scrollY);\n }\n }\n\n listenClose() {\n if(!this.closeBtn) {\n return;\n }\n this.closeBtn.addEventListener('click', () => {\n this.$emit(this.$customEvents.SEARCH_LAYER_EVENTS.close);\n });\n }\n\n getSuggestion(index, search = false) {\n let ctx = this;\n // X-Algolia-Application-Id: the application ID.\n // X-Algolia-API-Key: the admin API key for given application ID.\n const appId = this.appID;\n const apiKey = this.apiKey;\n const searchClient = algoliasearch(appId, apiKey);\n //\n autocomplete({\n debug: true,\n container: '#l-s__search',\n panelContainer: '#l-s__suggestions',\n placeholder: ctx.$component.dataset.searchPlaceholder ,\n detachedMediaQuery: 'none',\n getSources({ query }) {\n return [\n {\n sourceId: 'querySuggestions',\n getItems() {\n return getAlgoliaResults({\n searchClient,\n queries: [\n {\n indexName: index,\n query\n }\n ]\n });\n },\n getItemUrl({ item }) {\n return item.url;\n },\n getItemInputValue({ item }) {\n return item.query;\n },\n templates: {\n header() {\n return '';\n },\n item({ item }) {\n let itemHtml;\n const options = {style:\"currency\", currency:item.currency , maximumFractionDigits: 2};\n if(item.name === 'CARTAREGALO') {\n itemHtml = html`
`;\n } else if((ctx.isSaleMode || item.specialPrice) && item.sale_price != '' && item.inSale == true) {\n var originalPrice = item.price.toLocaleString(ctx.currentLocale, options);\n var salePrice = item.sale_price.toLocaleString(ctx.currentLocale, options);\n itemHtml = html``;\n } else {\n var originalPrice = item.price.toLocaleString(ctx.currentLocale, options);\n itemHtml = html``;\n }\n return itemHtml;\n },\n footer() {\n return '';\n }\n }\n }\n ];\n }\n });\n }\n\n // bind keyup\n bindSearch() {\n let self = this;\n let index = self.$component.dataset.searchEnv + '_' + self.$component.dataset.searchBrand.toLowerCase() + '_' + self.$component.dataset.searchCountry + '_' + self.$component.dataset.searchLanguage;\n self.getSuggestion(index);\n }\n\n inputEvent() {\n let self = this;\n let searchJsSubmitInput = document.querySelector(this.SELECTORS.searchJsSubmitInput);\n\n if(searchJsSubmitInput != null) {\n searchJsSubmitInput.addEventListener('input', () => {\n if(searchJsSubmitInput.value !== '') {\n self.searchJsSubmit.classList.remove('--darker-grey');\n } else {\n self.searchJsSubmit.classList.add('--darker-grey');\n }\n });\n }\n }\n\n jsSearchPage() {\n // get autocomplete value\n let autocompleteInput = this.$component.querySelector(this.SELECTORS.searchJsSubmitInput);\n // build url\n let url = this.searchFormUrlJs + '?text=' + autocompleteInput.value;\n // go to url\n window.location.href = url;\n }\n\n bindEvents() {\n let self = this;\n\n this.$on(this.$customEvents.SEARCH_LAYER_EVENTS.open, () => {\n self.openLayer();\n });\n\n this.$on(this.$customEvents.SEARCH_LAYER_EVENTS.close, () => {\n self.closeLayer();\n });\n\n // if suggestions are enabled, i want to keep the standard search working\n if(this.searchJsSubmit != null) {\n this.searchJsSubmit.addEventListener('click', (e) => {\n e.preventDefault();\n // go\n self.jsSearchPage();\n });\n // enables Enter key to submit search\n this.searchForm.addEventListener('keypress', (e) => {\n if(e.keyCode === 13) {\n e.preventDefault();\n // go\n self.jsSearchPage();\n }\n });\n }\n }\n\n getTopSearches() {\n let ctx = this;\n let index = ctx.$component.dataset.searchEnv + '_' + ctx.$component.dataset.searchBrand.toLowerCase()+ '_' + ctx.$component.dataset.searchCountry + '_' + ctx.$component.dataset.searchLanguage;\n let url = '/action/ajax/algolia-top-searches?indexName=' + index;\n return doAjax({\n url: url,\n type: 'GET',\n success: function(searches) {\n ctx.log('Call Successful');\n try {\n for(let i=0; i < searches.length; i++) {\n if (i > 5) {\n break;\n }\n let searchContainer = document.querySelector('[data-searches-container]');\n searchContainer.appendChild(ctx.topSearchTemplate(searches[i]));\n }\n if(ctx.topSearchesWrapper != null) ctx.topSearchesWrapper.classList.remove('hidden');\n } catch(e) {\n console.warn(\"Algolia Top Searches response has failed.\", e);\n }\n },\n error: function(xhr) {\n console.log(xhr);\n }\n });\n }\n\n topSearchTemplate(search) {\n console.log('SEARCHLAYER COMPONENT',search);\n let searchEl = document.createElement(\"div\");\n searchEl.classList.add(\"l-s__searches-content-subtitle\");\n let searchLink = document.createElement(\"a\");\n searchLink.href = \"/search?text=\" + search;\n searchLink.innerText = search;\n searchEl.appendChild(searchLink);\n return searchEl;\n }\n\n render() {\n super.render();\n this.listenClose();\n this.bindEvents();\n // if is enabled\n if(this.$component.attributes['data-algolia-enabled'].nodeValue == 'true') {\n this.getTopSearches();\n }\n if(this.$component.attributes['data-algolia-enabled'].nodeValue == 'true' &&\n this.$component.attributes['data-search-suggestions'].nodeValue == 'true') {\n this.bindSearch();\n this.inputEvent();\n }\n }\n}\n"],"sourceRoot":""}