{"version":3,"file":"infiniteScroll.js","mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://build/../laviesports/assets/javascripts/infiniteScroll.js"],"sourcesContent":["window.infiniteScroll = {\r\n\r\n // variável criada no arquivo _infinity_scroll.liquid\r\n pagination: window._pagination,\r\n\r\n // wrapper que contém/recebe os produtos\r\n productsWrapper: document.querySelector('[data-products-wrapper]'),\r\n\r\n // elemento que ativa a busca por mais produtos\r\n loadEl: document.querySelector('[data-load-more]'),\r\n\r\n stopLoading: function () {\r\n const loadEl = this.loadEl;\r\n if (loadEl != null) loadEl.parentElement.removeChild(loadEl);\r\n },\r\n\r\n setCurrentPage: function (_number) {\r\n const _this = this;\r\n const totalPages = _this.pagination.total_pages;\r\n\r\n // Verifica se a página atual não é maior que o total de páginas\r\n if (_number <= totalPages) {\r\n\r\n // Atualiza a página atual\r\n _this.pagination.current_page = _number;\r\n\r\n // Desabilita prosseguimento caso tenha chegado na última página, removendo o elemento que dá trigger\r\n if (_this.pagination.current_page >= totalPages) _this.stopLoading();\r\n\r\n // Atualiza a URL da próxima página\r\n if (_number < totalPages)\r\n return _this.pagination.next_url = _this.pagination.pages[_number].url\r\n }\r\n },\r\n\r\n loadProducts: async function () {\r\n const nextUrl = this.pagination.next_url;\r\n\r\n // Busca próxima leva de produtos\r\n const response = await fetch(nextUrl);\r\n const data = await response.text();\r\n\r\n // Parse e retorno da resposta\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(data, \"text/html\");\r\n return doc.querySelectorAll('.product-block');\r\n },\r\n\r\n getNextPage: async function () {\r\n const _this = this;\r\n const currentPage = _this.pagination.current_page;\r\n const wrapper = _this.productsWrapper;\r\n\r\n if (!wrapper.classList.contains('searching')) {\r\n\r\n // Busca e adiciona novos produtos\r\n _this.productsWrapper.classList.add('searching');\r\n const newProducts = await _this.loadProducts();\r\n newProducts.forEach(product => { wrapper.appendChild(product) });\r\n\r\n // Atualiza página atual carregada e próxima etapa se tiver\r\n _this.setCurrentPage(currentPage + 1);\r\n\r\n // Atualiza o lazy load\r\n lazyLoadInstance.update();\r\n\r\n // libera o processo de busca de novas páginas\r\n wrapper.classList.remove('searching');\r\n }\r\n },\r\n\r\n init: function () {\r\n const _this = this;\r\n const loadEl = _this.loadEl;\r\n\r\n // Verifica se há paginação definida antes de iniciar\r\n if (typeof _this.pagination != undefined) {\r\n\r\n window.scrollTo({\r\n top: 0,\r\n left: 0,\r\n behavior: 'smooth'\r\n })\r\n\r\n if (loadEl != null) {\r\n const observer = new IntersectionObserver((entries) => {\r\n // isIntersecting retorna True quando o elemento entra em página\r\n if (entries[0].isIntersecting) _this.getNextPage();\r\n\r\n // threshold 1 só chama o callback acima quando o elemento observado estiver full na tela\r\n }, { threshold: 1 });\r\n\r\n observer.observe(loadEl);\r\n }\r\n }\r\n }\r\n}\r\n\r\nwindow.infiniteScroll.init();\r\n"],"names":[],"sourceRoot":""}