{"version":3,"sources":["webpack:///./assets/javascripts/modules/utils/ObserverIntersection.js","webpack:///./assets/javascripts/modules/components/ListingComponent.js","webpack:///./assets/javascripts/modules/businessLogic/InfiniteScrollLogic.js"],"names":["Observer","selector","margin","conf","cb","_classCallCheck","this","observablesSelector","observables","document","querySelectorAll","window","IntersectionObserver","console","debug","rootMargin","Math","floor","outerHeight","observer","root","threshold","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","undefined","_step2","_iterator2","Symbol","iterator","next","done","observable","value","observe","err","return","warn","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","ListingComponent","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","Component","main","$on","filterBar","SELECTORS","e","$","length","ctx","event","data","matchMedia","matches","FiltersLogic","forceClose","SortByComponent","log","InfiniteScrollLogic","render","bindEvents","_this","searchObj","queryString","parse","location","search","preload","page","parseInt","wasPreloaded","startPage","footerOffset","getFooterOffset","resultContainer","footer","scrollElement","querySelector","footerElement","scrollRect","getBoundingClientRect","footerRect","pixel","abs","top","bottom","isNaN","internalObserveScroll","_this2","scroolObserver","entries","forEach","entry","intersectionRatio","lastPage","dataset","infiniteScrollLastpage","query","infiniteScrollQuery","parsedQueryPage","parseFloat","getPaginatedResult","unobserve","target","_this3","ajax","type","url","then","res","newURL","replace","replacePageInHistory","response","DOMParser","parseFromString","container","rows","child","appendChild","$emit","$customEvents","INFINITE_SCROLL_EVENTS","animation","enhancePage","fail","button","hide","_this4","Promise","resolve","reject","mainParent","parentElement","innerHTML","setAttribute","style","display","parsedQuery","stringify","_this5","_this6","FILTERS_EVENTS","updated","_ref","payload","setBaseQueryValue","skipScroll","observeScroll","replaceButton","updatedButton","hideButton","bindClickOnce","_this7","$one","_ref2","currentTarget","classList","add"],"mappings":"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","file":"components-ListingComponent.chunks.js","sourcesContent":["export default class Observer {\n constructor(selector, margin, conf, cb) {\n let observablesSelector = selector || '.observe';\n const observables = document.querySelectorAll(observablesSelector);\n\n if (!window.IntersectionObserver) {\n console.warn('IntersectionObserver not supported');\n for (let el of observables) {\n cb(el);\n }\n } else {\n console.debug('IntersectionObserver supported');\n const rootMargin = margin || Math.floor(window.outerHeight / 3);\n const observer = new IntersectionObserver(cb, conf || {\n root: null,\n rootMargin: `${rootMargin}px 0px`,\n threshold: 0.0\n });\n\n for (let observable of observables) {\n observer.observe(observable);\n }\n }\n }\n}","import Component from '../abstracts/Component';\nimport InfiniteScrollLogic from '../businessLogic/InfiniteScrollLogic';\nimport FiltersLogic from '../businessLogic/FiltersLogic';\nimport SortByComponent from '../components/SortByComponent';\n\nexport default class ListingComponent extends Component {\n\t\n get SELECTORS() {\n return {\n main: '.js-filter-bar'\n }\n }\n\t \n constructor() {\n\t super();\n }\n \n bindEvents() {\n this.$on('click.filterBar', this.filterBar, 'body', this.SELECTORS.main, this);\t \n }\n \n filterBar(e) {\n \tif($('#filters-box.show').length > 0 || $('#sortby-box.show').length > 0) {\n let ctx = e.event.data;\n if (window.matchMedia('(min-width:767px)').matches) {\n ctx.FiltersLogic = new FiltersLogic(this);\n ctx.FiltersLogic.forceClose();\n ctx.SortByComponent = new SortByComponent(this);\n ctx.SortByComponent.forceClose();\n }\n \t}\n }\n \n render() {\n\t this.log('Rendering...');\n\t this.InfiniteScrollLogic = new InfiniteScrollLogic(this);\n\t this.InfiniteScrollLogic.render();\n\t this.FiltersLogic = new FiltersLogic(this);\n\t this.FiltersLogic.render();\n\t this.bindEvents();\n }\n \n}\n","import Component from '../abstracts/Component';\nimport queryString from 'query-string';\nimport Observer from '../utils/ObserverIntersection';\nimport { replacePageInHistory } from '../utils/BrowserHistoryUtils';\n\nexport default class InfiniteScrollLogic extends Component {\n get SELECTORS() {\n return {\n main: '[data-infinite-scroll]',\n resultContainer: '.js-filters-result',\n footer: '.footer-main',\n };\n }\n\n constructor() {\n super();\n const searchObj = queryString.parse(location.search);\n const preload = searchObj.preload;\n const page = parseInt(searchObj.page);\n this.wasPreloaded = preload || page>0 || false;\n this.startPage = this.wasPreloaded ? page + 1 : 1;\n this.footerOffset = this.getFooterOffset();\n }\n\n getFooterOffset() {\n const scrollElement = document.querySelector(this.SELECTORS.main);\n const footerElement = document.querySelector(this.SELECTORS.footer);\n if ( scrollElement == null || footerElement == null) return false; // remember the check...\n const scrollRect = scrollElement.getBoundingClientRect();\n const footerRect = footerElement.getBoundingClientRect();\n\n const pixel = Math.abs(footerRect.top - scrollRect.bottom);\n\n if (isNaN(pixel) || !pixel || pixel == 0) {\n return 400;\n } else {\n return pixel;\n }\n }\n\n observeScroll() {\n this.internalObserveScroll();\n }\n\n internalObserveScroll() {\n this.scroolObserver = new Observer('.footer-main', this.footerOffset, null, (entries, observer) => {\n entries.forEach(entry => {\n if (entry.intersectionRatio > 0) {\n let lastPage = document.querySelector(this.SELECTORS.main).dataset.infiniteScrollLastpage;\n let query = document.querySelector(this.SELECTORS.main).dataset.infiniteScrollQuery;\n let parsedQueryPage = queryString.parse(query).page;\n if (parseFloat(parsedQueryPage) <= parseFloat(lastPage)) {\n this.getPaginatedResult(query);\n } else {\n observer.unobserve(entry.target);\n }\n }\n });\n });\n }\n\n getPaginatedResult(query) {\n $.ajax({\n type: 'GET',\n url: query\n }).then(res => {\n let newURL = query.replace(\"isRefineSearch=true\", \"isRefineSearch=false\");\n replacePageInHistory(newURL.replace(/\\s.*/, \"\"),{},\"\", true);\n\n let response = new DOMParser().parseFromString(res, 'text/html').querySelector(this.SELECTORS.resultContainer);\n let container = document.querySelector(this.SELECTORS.resultContainer);\n let rows = response.querySelectorAll('.js-products-row');\n console.debug('loaded', rows.length, 'rows');\n\n for(let child of rows) {\n container.appendChild(child);\n }\n this.$emit(this.$customEvents.INFINITE_SCROLL_EVENTS.animation);\n this.enhancePage();\n }).fail(() => {\n console.log('getPaginatedResult() fail');\n });\n }\n\n replaceButton(button, hide) {\n return new Promise((resolve, reject) => {\n try {\n let mainParent = document.querySelector(this.SELECTORS.main).parentElement;\n let query = document.querySelector(this.SELECTORS.main).dataset.infiniteScrollQuery;\n let newButton = null;\n if (button) {\n mainParent.innerHTML = button;\n newButton = document.querySelector(this.SELECTORS.main);\n newButton.setAttribute('data-infinite-scroll-query', query);\n mainParent.style.display = hide ? 'none' : '';\n }\n resolve(true)\n } catch (e) {\n reject(e)\n }\n });\n }\n\n enhancePage() {\n const main = document.querySelector(this.SELECTORS.main);\n let parsedQuery = queryString.parse(document.querySelector(this.SELECTORS.main).dataset.infiniteScrollQuery);\n parsedQuery.page = parseFloat(parsedQuery.page) + 1;\n main.setAttribute('data-infinite-scroll-query', `?${queryString.stringify(parsedQuery)}`);\n }\n\n setBaseQueryValue(query) {\n return new Promise((resolve, reject) => {\n try {\n const main = document.querySelector(this.SELECTORS.main);\n main.setAttribute('data-infinite-scroll-query', query);\n resolve(true)\n } catch (e) {\n console.debug(e);\n reject(false);\n }\n });\n }\n\n bindEvents() {\n this.$on(this.$customEvents.FILTERS_EVENTS.updated, ({\n event,\n payload\n }) => {\n if (payload.query) this.setBaseQueryValue(payload.query).then(res => {\n if(!payload.skipScroll) {\n this.observeScroll();\n }\n });\n this.replaceButton(payload.updatedButton, payload.hideButton).then(res => {\n this.bindClickOnce();\n });\n });\n this.bindClickOnce();\n }\n\n bindClickOnce() {\n this.$one('click.is', ({\n event\n }) => {\n event.currentTarget.classList.add('d-none');\n\n this.$emit(this.$customEvents.INFINITE_SCROLL_EVENTS.next, {\n page: this.startPage\n });\n }, this.SELECTORS.main);\n }\n\n render() {\n this.log('Load logics...');\n if (document.querySelector(this.SELECTORS.main)) this.bindEvents();\n }\n}\n"],"sourceRoot":""}