const bindOrderButton = () => { $('.order_btn').on('click', function(e){ e.preventDefault(); $('#fld_product_id').val($(this).data('id')); $('#fld_quantity').val(1); $('#frm_order_product_form').trigger('submit'); }); }; bindOrderButton(); $('.categories_filter').on('click', function () { $(this).closest('form').trigger('submit'); }); let query_id = 0; let lastRequest = null; const oFilterProductsField = $('#filter_products'); class Handler { constructor(id) { this.element = $('#' + id); } show() { this.element.css('display', 'block'); } hide() { this.element.css('display', 'none'); } html(data) { this.element.html(data); } } /* blocks */ const blocks = { 'disclaimer' : new Handler('wrong_product_disclaimer'), 'searching' : new Handler('searching'), 'no_results' : new Handler('no_results'), 'product_list' : new Handler('product_list'), 'category_list' : new Handler('category_list'), }; class Helper { constructor(blocks) { this.blocks = blocks; } showSearching() { this.blocks.searching.show(); this.blocks.no_results.hide(); this.blocks.disclaimer.hide(); this.blocks.product_list.hide(); this.blocks.category_list.hide(); } noResults() { this.blocks.searching.hide(); this.blocks.no_results.show(); this.blocks.product_list.hide(); this.blocks.disclaimer.hide(); this.blocks.category_list.hide(); } showProducts(html) { this.blocks.searching.hide(); this.blocks.no_results.hide(); this.blocks.product_list.html( html); this.blocks.product_list.show(); this.blocks.disclaimer.show(); this.blocks.category_list.hide(); } showCategories() { this.blocks.searching.hide(); this.blocks.no_results.hide(); this.blocks.product_list.hide(); this.blocks.disclaimer.show(); this.blocks.category_list.show(); } } const helper = new Helper(blocks); oFilterProductsField.on('keydown', function(e){ if(e.keyCode === 13) { e.preventDefault(); return false; } }); oFilterProductsField.on('keyup', function(){ const searchQuery = $(this).val(); helper.showSearching(); if(lastRequest) { lastRequest.abort(); } if($.trim(searchQuery) === '') { helper.showCategories(); } query_id++; console.log('query'); const data = { '_do' : 'FindProducts', 'query_id' : query_id, 'query' : searchQuery, 'return' : 'json' }; lastRequest = $.post(window.location, data, function(data){ if(parseInt(data.query_id) !== query_id) { return ; } if(!data.result_count) { helper.noResults(); return; } helper.showProducts(data.content); bindOrderButton(); }, 'json'); }).focus(); /* fld_quantity frm_order_product_form */