Entrar ou cadastrar
ClubeB2B
Categorias
Categorias

$(document).ready(function() { $('[data-toggle="tooltip"]').tooltip(); // Detectar suporte ao object-fit e aplicar fallback se necessário function supportsObjectFit() { return 'objectFit' in document.documentElement.style; } if (!supportsObjectFit()) { document.body.classList.add('no-object-fit'); // Aplicar background-image como fallback para imagens de produtos $('.product-image-container').each(function() { const $img = $(this).find('img'); const imgSrc = $img.attr('data-src') || $img.attr('src'); if (imgSrc && imgSrc !== 'imgs/loading.webp') { $(this).css('background-image', `url(${imgSrc})`); } }); } // Altera o modo de exibição quando trocar o raidio const changeLayout = (mode = '', init = false) => { localStorage.setItem("produtos-exibicao", mode) $(".products-container").fadeOut(init ? 0 : 300, function() { if (mode === 'lista') { $(".products-container .product-col").each(function() { $(this).removeClass("col-sm-6 col-md-4 col-lg-3").find(".new-single-product").addClass("line") }) } else { $(".products-container .product-col").each(function() { $(this).addClass("col-sm-6 col-md-4 col-lg-3").find(".new-single-product").removeClass("line") }) } }).fadeIn(init ? 0 : 300) } const initialMode = localStorage.getItem("produtos-exibicao") || "grade" $(`input[name='exibicao'][value="${initialMode}"]`).prop("checked", true) changeLayout(initialMode, true) $("input[name='exibicao']").on("change", function() { const mode = $(this).val() changeLayout(mode) }) // Filtra os produtos que estiverem estoque (sem chegada) let estoqueState = localStorage.getItem("produtos-estoque") ? localStorage.getItem("produtos-estoque") === "true" : false $("#estoque_checkbox").change(function(event, isInitial) { if (!isInitial) { estoqueState = !estoqueState localStorage.setItem("produtos-estoque", estoqueState) } $(".products-container").fadeOut(isInitial ? 0 : 300, function() { $(this).find(".product-col").each(function() { if ($(this).data("estoque") == 0) { if (estoqueState) $(this).show() else $(this).hide() } }) $(this).fadeIn(isInitial ? 0 : 300) }) }).prop("checked", estoqueState).trigger("change", [true]); // Dispara o submit quando o select muda o valor const initialOrder = localStorage.getItem("produtos-order") $("#order-select").on("change", function(event, isInit) { const selectedValue = $(this).val() localStorage.setItem("produtos-order", selectedValue) // Para o filtro de distribuidor, não fazer submit - será tratado no switch abaixo let productCols = $(".products-container").find(".product-col").toArray(); $(".products-container").fadeOut(isInit ? 0 : 300, function() { switch (selectedValue) { case "codigo_produto ASC": productCols.sort((a, b) => { return $(a).data("codigo") - $(b).data("codigo"); }); break; case "informacoes_tecnicas ASC": if (typeof searchKeywords !== 'undefined' && searchKeywords.length > 0) { var stripAccents = (s) => s.normalize('NFD').replace(/[̀-ͯ]/g, ''); var getScore = (nome) => { for (var kw of searchKeywords) { if (nome.indexOf(kw.toLowerCase()) === 0) return 1; } return 2; }; productCols.sort((a, b) => { var nA = stripAccents(($(a).data("nome") || '').toLowerCase()); var nB = stripAccents(($(b).data("nome") || '').toLowerCase()); var diff = getScore(nA) - getScore(nB); return diff !== 0 ? diff : nA.localeCompare(nB); }); } else { productCols.sort((a, b) => $(a).data("nome").localeCompare($(b).data("nome"))); } break; case "marca ASC, estoque DESC, preco ASC": productCols.sort((a, b) => { return $(a).data("preco") - $(b).data("preco"); }); productCols.sort((a, b) => { return $(b).data("estoque") - $(a).data("estoque"); }); productCols.sort((a, b) => { return $(a).data("marca").localeCompare($(b).data("marca")); }); break; case "preco ASC": productCols.sort((a, b) => { return $(a).data("preco") - $(b).data("preco"); }); break; case "preco DESC": productCols.sort((a, b) => { return $(b).data("preco") - $(a).data("preco"); }); break; case "DISTRIBUIDOR_FILTER": // Filtro por fornecedor - apenas produtos de distribuidores ativos (s.ativo = 1) productCols = productCols.filter(function(element) { const produtoElement = $(element); const sellerId = produtoElement.data("seller-id"); const sellerAtivo = produtoElement.data("seller-ativo"); // Filtrar produtos de sellers ativos (incluindo Clube B2B - ID 1) return sellerId && sellerAtivo == 1; }); // Ordenar primeiro por seller_id (ID 1 primeiro) e depois por nome productCols.sort((a, b) => { const sellerIdA = $(a).data("seller-id"); const sellerIdB = $(b).data("seller-id"); // Se os seller_id são diferentes, ordenar por ID (1 primeiro, depois crescente) if (sellerIdA !== sellerIdB) { return sellerIdA - sellerIdB; } // Se mesmo seller_id, ordenar por nome return $(a).data("nome").localeCompare($(b).data("nome")); }); break; default: $("#filter-form").submit() break; } // Limpar container e adicionar apenas os produtos filtrados $(".products-container").empty().append(productCols).fadeIn(isInit ? 0 : 300); }); }).find(`option[value="${initialOrder || "informacoes_tecnicas ASC"}"]`).prop("selected", true).trigger("change", [true]); $(window).on("resize", function() { $(".new-single-product").each(function() { const textHeight = $(".product-name h4 a", this).outerHeight() const containerHeight = $(".product-name h4", this).outerHeight() if (textHeight <= containerHeight) { $(".product-name", this).removeClass("use-tooltip") } else { $(".product-name", this).addClass("use-tooltip") const width = $(this).outerWidth() $(this).css("--tooltip-max-width", `${width}px`) } }) }).trigger("resize") // Adicionando classe para padding da label $(".new-single-product").each(function() { const hasLabel = $(this).find(".pro-badge:not(.marca)").length > 0 if (hasLabel) { $(this).addClass("with-label") } }) }) document.addEventListener("DOMContentLoaded", function() { const lazyImages = document.querySelectorAll("img[data-src]"); const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { let img = entry.target; const newSrc = img.dataset.src; img.src = newSrc; img.removeAttribute("data-src"); observer.unobserve(img); // Aplicar fallback object-fit se necessário if (document.body.classList.contains('no-object-fit')) { const container = img.closest('.product-image-container'); if (container) { container.style.backgroundImage = `url(${newSrc})`; } } } }); }); lazyImages.forEach(img => observer.observe(img)); }); setTimeout(() => { $(window).trigger("resize") }, 1000);