Source: components/filter/filter-result/filter-result-element/pagination/product-pagination.js

import jQ from 'jquery';
import BaseComponent from "../../../../base-component";
import Selector from "../../../../../helpers/selector";
import Settings from "../../../../../helpers/settings";
import SearchResultPanels from '../search-result-panels';
import SearchResultPanelItem from '../search-result-panel-item';

/**
 * Product pagination
 * @extends BaseComponent
 */
class ProductPagination extends BaseComponent {
	/**
	 * @constructs
	 */
	constructor() {
		super();
		this.data = null;
		this.totalProduct = null;
		this.paginationType = '';
		this.$loadMore = jQ(Selector.loadMore);
		this.settings = {
			limit: Settings.getSettingValue('general.limit'),
			showLoading: Settings.getSettingValue('general.showLoading'),
			showLoadMoreLoading: Settings.getSettingValue('general.showLoadMoreLoading')
		}
	}

	/**
	 * Get the pagination types enum
	 */
	static get Type() {
		return {
			DEFAULT: 'default',
			LOAD_MORE: 'load_more',
			INFINITE: 'infinite'
		}
	}

	/**
	 * Returns whether or not this component is rendered
	 */
	isRender() {
		return this.data !== null;
	}

	/**
	 * Set data for pagination
	 * @param {Object} data - Filter result data
	 */
	setData(data) {
		if (data) {
			this.data = data;
		}
		this.totalProduct = this.parent.totalProduct;
		this.paginationType = Settings.getSettingValue('general.paginationType');
	}

	/**
	 * Show load more loading
	 */
	showLoading() {
		if (this.settings.showLoadMoreLoading && this.settings.showLoading === false) {
			this.$loadMore.find(Selector.loadMoreLoading).show();
		}
	}

	/**
	 * Hide load more loading
	 */
	hideLoading() {
		if (this.settings.showLoadMoreLoading) {
			this.$loadMore.find(Selector.loadMoreLoading).hide();
		}
	}
}

export default ProductPagination;