spend $20.96 More And Enjoy Free Shipping!
$(document).ready(function() {
// Initialize Bootstrap collapse functionality
$('[data-toggle="collapse"]').on('click', function(e) {
e.preventDefault();
var target = $(this).data('target');
var $target = $(target);
// Toggle the collapse
$target.collapse('toggle');
// Update the button state
var $button = $(this);
var $icon = $button.find('.fa');
if ($target.hasClass('show')) {
$button.removeClass('collapsed');
$icon.removeClass('fa-plus').addClass('fa-minus');
} else {
$button.addClass('collapsed');
$icon.removeClass('fa-minus').addClass('fa-plus');
}
});
// Handle collapse events
$('.collapse').on('show.bs.collapse', function() {
var $button = $('[data-target="#' + $(this).attr('id') + '"]');
var $icon = $button.find('.fa');
$button.removeClass('collapsed');
$icon.removeClass('fa-plus').addClass('fa-minus');
});
$('.collapse').on('hide.bs.collapse', function() {
var $button = $('[data-target="#' + $(this).attr('id') + '"]');
var $icon = $button.find('.fa');
$button.addClass('collapsed');
$icon.removeClass('fa-minus').addClass('fa-plus');
});
// Initialize filter UI state on page load
updateFilterUI();
// Infinite Scroll Implementation
var currentPage = 1;
var isLoading = false;
var hasMoreProducts = true;
var loadMoreThreshold = 200; // pixels from bottom to trigger load
var scrollTimeout;
var infiniteScrollEnabled = true;
// Function to load more products
function loadMoreProducts() {
if (isLoading || !hasMoreProducts || !infiniteScrollEnabled) return;
isLoading = true;
$('#infinite-scroll-loader').show();
$('.product-wrapper-grid').addClass('loading');
// Build the AJAX URL with current parameters
var url = 'index.php?route=product/category|loadMoreProducts';
var urlParams = new URLSearchParams(window.location.search);
var category_id = $('#category_id').val();
urlParams.set('category_id', category_id);
var filter_param = $('#filter_param').val();
urlParams.set('filter_param', filter_param);
var filter = $('#filter').val();
urlParams.set('filter', filter);
var sort = $('#sort').val();
urlParams.set('sort', sort);
var order = $('#order').val();
urlParams.set('order', order);
// Add current URL parameters
urlParams.set('page', currentPage + 1);
// Add the parameters to the URL
url += '&' + urlParams.toString();
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
success: function(response) {
if (response.products && response.products.length > 0) {
// Append new products to the grid
var $productGrid = $('.product-wrapper-grid-row');
response.products.forEach(function(product) {
var productHtml = generateProductHtml(product);
$productGrid.append(productHtml);
});
currentPage++;
hasMoreProducts = response.has_more;
// If no more products, show end message
if (!hasMoreProducts) {
$('#end-of-products').show();
}
} else {
hasMoreProducts = false;
$('#end-of-products').show();
}
},
error: function(xhr, status, error) {
console.error('Error loading more products:', error);
// Fallback to regular pagination on error
$('#fallback-pagination').show();
},
complete: function() {
isLoading = false;
$('#infinite-scroll-loader').hide();
$('.product-wrapper-grid').removeClass('loading');
}
});
}
if ('IntersectionObserver' in window) {
const loadTrigger = document.getElementById('load-more-trigger');
const observer = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting) {
loadMoreProducts();
}
}, {
root: null,
rootMargin: '200px', // preload before reaching end
threshold: 0
});
if (loadTrigger) {
observer.observe(loadTrigger);
}
}
// Function to generate product HTML
function generateProductHtml(product) {
var style_view = $('#style-view-toggle').find('.active').data('style-view');
var grid_size = 'col-xl-4';
if(style_view == 2){
grid_size = 'col-xl-6';
} else if(style_view == 3){
grid_size = 'col-xl-4';
} else if(style_view == 4){
grid_size = 'col-xl-3';
} else {
grid_size = 'col-xl-4';
}
var html = '
';
html += '