Filter: Add equalFilters function

This commit is contained in:
Rob Garrison 2017-04-11 14:55:27 -05:00
parent 0827fa20d3
commit 39a1772b25
2 changed files with 36 additions and 3 deletions

View File

@ -885,6 +885,19 @@
tsf.checkFilters( table, filter, skipFirst );
}
},
equalFilters: function (c, filter1, filter2) {
var indx,
f1 = [],
f2 = [],
len = c.columns + 1; // add one to include anyMatch filter
filter1 = $.isArray(filter1) ? filter1 : [];
filter2 = $.isArray(filter2) ? filter2 : [];
for (indx = 0; indx < len; indx++) {
f1[indx] = filter1[indx] || '';
f2[indx] = filter2[indx] || '';
}
return f1.join(',') === f2.join(',');
},
checkFilters: function( table, filter, skipFirst ) {
var c = table.config,
wo = c.widgetOptions,
@ -917,7 +930,7 @@
}
// return if the last search is the same; but filter === false when updating the search
// see example-widget-filter.html filter toggle buttons
if ( c.lastSearch.join(',') === currentFilters.join(',') && filter !== false ) {
if ( tsf.equalFilters(c, c.lastSearch, currentFilters) && filter !== false ) {
return;
} else if ( filter === false ) {
// force filter refresh
@ -1266,7 +1279,7 @@
},
findRows: function( table, filters, currentFilters ) {
if (
table.config.lastSearch.join(',') === ( currentFilters || [] ).join(',') ||
tsf.equalFilters(table.config, table.config.lastSearch, currentFilters) ||
!table.config.widgetOptions.filter_initialized
) {
return;
@ -1811,7 +1824,8 @@
if ( ( getRaw !== true && wo && !wo.filter_columnFilters ) ||
// setFilters called, but last search is exactly the same as the current
// fixes issue #733 & #903 where calling update causes the input values to reset
( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
( $.isArray(setFilters) && tsf.equalFilters(c, setFilters, c.lastSearch) )
) {
return $( table ).data( 'lastSearch' ) || [];
}
if ( c ) {

View File

@ -192,6 +192,25 @@ jQuery(function($){
assert.deepEqual( processFilters( filters, false ), results );
});
QUnit.test( 'Filter comparison', function(assert) {
assert.expect(10);
var undef,
c = { columns: 10 }, // psuedo table.config
compare = this.ts.filter.equalFilters;
assert.equal( compare( c, [], [] ), true, 'two empty arrays' );
assert.equal( compare( c, [], '' ), true, 'empty array + empty string' );
assert.equal( compare( c, '', [] ), true, 'empty string + empty array' );
assert.equal( compare( c, ['', '', ''], [] ), true, 'empty array len 3 vs len 0' );
assert.equal( compare( c, ['1', undef, ''], ['1'] ), true, 'equal but diff len' );
assert.equal( compare( c, [undef, '1', ''], [undef, '1'] ), true, 'equal but diff len' );
assert.equal( compare( c, [] ), true, 'undefined second filter' );
assert.equal( compare( c, ['', undef] ), true, 'undefined second filter' );
assert.equal( compare( c, ['1', '', ''], ['', '1', ''] ), false, 'same value diff position' );
assert.equal( compare( c, [undef, '1', ''], ['', undef, '1'] ), false, 'same value diff position' );
});
QUnit.test( 'Filter searches', function(assert) {
var ts = this.ts,
c = this.c,