/* ======================================= SEARCH BY COLUMN FOR LIST TABLES ======================================= */ import Settings from '../../config/_settings'; import Globals from './_globals'; import { Utils } from '../../utils/_utils'; export default class SearchByColumn { constructor( private settings: Settings, private globals: Globals ) { if ($('.atum-post-search-with-dropdown').length) { this.setup(); $('#adv-settings input:checkbox').change( () => { setTimeout( () => this.setup(), 500 ); // Performance. } ); } } /** * Fill the search by column dropdown with the active screen options checkboxes */ setup() { let $dropdownItem: JQuery = $(''); this.globals.$searchColumnDropdown.empty(); // Append the no column and the title items. this.globals.$searchColumnDropdown.append( $dropdownItem.clone().data('value', '').text( this.globals.$searchColumnDropdown.data('no-option') ) ); this.globals.$searchColumnDropdown.append( $dropdownItem.clone().data('value', 'title').text( this.globals.$searchColumnDropdown.data('product-title') ) ); $('#adv-settings input:checked').each( (index: number, elem: Element) => { let $elem: JQuery = $(elem), optionVal: string = $elem.val(), columnLabel: string = $elem.parent().text(); // Calc values are not searchable, also we can't search on thumb. if (optionVal.search('calc_') < 0 && optionVal !== 'thumb') { this.globals.$searchColumnDropdown.append( $dropdownItem.clone().data('value', optionVal).text(columnLabel) ); // Most probably, we are on init and ?search_column has a value. Or maybe not, but, if this happens, force change. if ($.address.parameter('search_column') !== this.globals.$searchColumnBtn.data('value') && this.globals.$searchColumnBtn.data('value') === optionVal) { this.globals.$searchColumnBtn.trigger('atum-search-column-set-data', [optionVal, columnLabel + ' ']); } } }); this.globals.$searchColumnBtn // Bind clicks on search by column button. .click( (evt: JQueryEventObject) => { $(evt.currentTarget).parent().find('.dropdown-menu').toggle(); evt.stopPropagation(); }) // Set $searchColumnBtn data-value and html content. .on('atum-search-column-set-data', (evt: JQueryEventObject, value: string, html: string) => { let $searchColBtn: JQuery = $(evt.currentTarget), $dropDownLinks: JQuery = this.globals.$searchColumnDropdown.children('a'); $searchColBtn.html(html); $searchColBtn.data('value', value); $dropDownLinks.filter('.active').removeClass('active'); Utils.filterByData($dropDownLinks, 'value', value); $dropDownLinks.addClass('active'); }); // Bind clicks on dropdown menu items. this.globals.$searchColumnDropdown.find('a').click( (evt: JQueryEventObject) => { evt.preventDefault(); let $item: JQuery = $(evt.currentTarget); this.globals.$searchColumnBtn.trigger('atum-search-column-set-data', [$item.data('value'), $item.text() + ' ']); $item.parents().find('.dropdown-menu').hide(); this.globals.$searchColumnDropdown.children('a.active').removeClass('active'); $item.addClass('active'); const fieldType = $.inArray($item.data('value'), this.settings.get('searchableColumns').numeric) > -1 ? 'number' : 'search'; this.globals.$searchInput.attr('type', fieldType); if (this.settings.get('ajaxFilter') === 'yes') { this.globals.$searchColumnBtn.trigger('atum-search-column-data-changed'); } $('.dropdown-toggle').attr('data-original-title', $item.html()); }); $(document).click( () => { this.globals.$searchColumnDropdown.hide(); }); } }