/** * @author: aperez * @version: v2.0.0 * * @update Dennis Hernández * @update zhixin wen */ ($ => { const Utils = $.fn.bootstrapTable.utils const bootstrap = { 3: { icons: { advancedSearchIcon: 'glyphicon-chevron-down' }, html: { modalHeader: ` ` } }, 4: { icons: { advancedSearchIcon: 'fa-chevron-down' }, html: { modalHeader: ` ` } } }[Utils.bootstrapVersion] $.extend($.fn.bootstrapTable.defaults, { advancedSearch: false, idForm: 'advancedSearch', actionForm: '', idTable: undefined, onColumnAdvancedSearch (field, text) { return false } }) $.extend($.fn.bootstrapTable.defaults.icons, { advancedSearchIcon: bootstrap.icons.advancedSearchIcon }) $.extend($.fn.bootstrapTable.Constructor.EVENTS, { 'column-advanced-search.bs.table': 'onColumnAdvancedSearch' }) $.extend($.fn.bootstrapTable.locales, { formatAdvancedSearch () { return 'Advanced search' }, formatAdvancedCloseButton () { return 'Close' } }) $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales) $.BootstrapTable = class extends $.BootstrapTable { initToolbar () { const o = this.options this.showToolbar = this.showToolbar || o.search && o.advancedSearch && o.idTable super.initToolbar() if (!o.search || !o.advancedSearch || !o.idTable) { return } this.$toolbar.find('>.btn-group').append(` `) this.$toolbar.find('button[name="advancedSearch"]').off('click').on('click', () => this.showAvdSearch()) } showAvdSearch () { const o = this.options if (!$(`#avdSearchModal_${o.idTable}`).hasClass('modal')) { $('body').append(` `) let timeoutId = 0 $(`#avdSearchModalContent_${o.idTable}`).append(this.createFormAvd().join('')) $(`#${o.idForm}`).off('keyup blur', 'input').on('keyup blur', 'input', e => { if (o.sidePagination === 'server') { this.onColumnAdvancedSearch(e) } else { clearTimeout(timeoutId) timeoutId = setTimeout(() => { this.onColumnAdvancedSearch(e) }, o.searchTimeOut) } }) $(`#btnCloseAvd_${o.idTable}`).click(() => { $(`#avdSearchModal_${o.idTable}`).modal('hide') if (o.sidePagination === 'server') { this.options.pageNumber = 1 this.updatePagination() this.trigger('column-advanced-search', this.filterColumnsPartial) } }) $(`#avdSearchModal_${o.idTable}`).modal() } else { $(`#avdSearchModal_${o.idTable}`).modal() } } createFormAvd () { const o = this.options const html = [`
`] for (let column of this.columns) { if (!column.checkbox && column.visible && column.searchable) { html.push(`
`) } } html.push('
') return html } initSearch () { super.initSearch() if (!this.options.advancedSearch || this.options.sidePagination === 'server') { return } const fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial this.data = fp ? $.grep(this.data, function (item, i) { for (const key in fp) { const fval = fp[key].toLowerCase() let value = item[key] const index = this.header.fields.indexOf(key) value = Utils.calculateObjectValue(this.header, this.header.formatters[index], [value, item, i], value) if ( !(index !== -1 && (typeof value === 'string' || typeof value === 'number') && (`${value}`).toLowerCase().includes(fval)) ) { return false } } return true }) : this.data } onColumnAdvancedSearch (e) { const text = $.trim($(e.currentTarget).val()) const $field = $(e.currentTarget)[0].id if ($.isEmptyObject(this.filterColumnsPartial)) { this.filterColumnsPartial = {} } if (text) { this.filterColumnsPartial[$field] = text } else { delete this.filterColumnsPartial[$field] } if (this.options.sidePagination !== 'server') { this.options.pageNumber = 1 this.onSearch(e) this.updatePagination() this.trigger('column-advanced-search', $field, text) } } } })(jQuery)