Skip to content

Commit

Permalink
refactor(NgTableParams): group filter related setting values into fil…
Browse files Browse the repository at this point in the history
…terOptions

BREAKING CHANGE:

Move `settings().filterDelay` to `settings().filterOptions.filterDelay`
  • Loading branch information
ccrowhurstram committed Aug 28, 2015
1 parent e7d18a8 commit 449ab62
Show file tree
Hide file tree
Showing 13 changed files with 62 additions and 49 deletions.
2 changes: 1 addition & 1 deletion examples/demo14.html
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ <h2>Dataset: <select ng-model="dataset" ng-options="ds for ds in datasets"></sel
}
}, {
data: self["data" + $scope.dataset],
filterLayout: 'horizontal'
filterOptions: { filterLayout: 'horizontal' }
});
})
</script>
Expand Down
2 changes: 1 addition & 1 deletion examples/demo20.html
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ <h1>Dynamic columns</h1>
page: 1, // show first page
count: 10 // count per page
}, {
filterDelay: 0,
filterOptions: { filterDelay: 0 },
total: data.length, // length of data
getData: function ($defer, params) {
// use built-in angular filter
Expand Down
2 changes: 1 addition & 1 deletion examples/demo201.html
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ <h1>Dynamic columns</h1>
page: 1, // show first page
count: 10 // count per page
}, {
filterDelay: 0,
filterOptions: { filterDelay: 0 },
total: data.length, // length of data
getData: function ($defer, params) {
// use build-in angular filter
Expand Down
2 changes: 1 addition & 1 deletion examples/demo32.html
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ <h1>Responsive table</h1>
//name: 'asc' // initial sorting
}
}, {
filterDelay: 0,
filterOptions: { filterDelay: 0 },
total: data.length, // length of data
getData: function ($defer, params) {
// use built-in angular filter
Expand Down
2 changes: 1 addition & 1 deletion examples/demo33.html
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ <h1>Dynamic columns (Hybrid)</h1>
page: 1, // show first page
count: 10 // count per page
}, {
filterDelay: 0,
filterOptions: { filterDelay: 0 },
total: data.length, // length of data
getData: function ($defer, params) {
// use built-in angular filter
Expand Down
2 changes: 1 addition & 1 deletion examples/demo34.html
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ <h1 class="page-header"><code>ngTableDynamic</code> Performance playground</h1>
page: 1, // show first page
count: 100 // count per page
}, {
filterDelay: 0,
filterOptions: { filterDelay: 0 },
counts: [50, 100, 500],
total: data.length, // length of data
getData: function ($defer, params) {
Expand Down
4 changes: 2 additions & 2 deletions src/ng-table/filterRow.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<tr ng-show="show_filter" class="ng-table-filters">
<th data-title-text="{{$column.titleAlt(this) || $column.title(this)}}" ng-repeat="$column in $columns" ng-if="$column.show(this)" class="filter"
ng-class="params.settings().filterLayout === 'horizontal' ? 'filter-horizontal' : ''">
ng-class="params.settings().filterOptions.filterLayout === 'horizontal' ? 'filter-horizontal' : ''">
<div ng-repeat="(name, filter) in $column.filter(this)" ng-include="config.getTemplateUrl(filter)" class="filter-cell"
ng-class="[getFilterCellCss($column.filter(this), params.settings().filterLayout), $last ? 'last' : '']">
ng-class="[getFilterCellCss($column.filter(this), params.settings().filterOptions.filterLayout), $last ? 'last' : '']">
</div>
</th>
</tr>
5 changes: 3 additions & 2 deletions src/scripts/ngTableController.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,15 @@
$scope.params.settings().$scope = $scope;

var currentParams = $scope.params;
var filterOptions = currentParams.settings().filterOptions;

if (currentParams.hasFilterChanges()) {
var applyFilter = function () {
currentParams.page(1);
currentParams.reload();
};
if (currentParams.settings().filterDelay) {
delayFilter(applyFilter, currentParams.settings().filterDelay);
if (filterOptions.filterDelay) {
delayFilter(applyFilter, filterOptions.filterDelay);
} else {
applyFilter();
}
Expand Down
10 changes: 5 additions & 5 deletions src/scripts/ngTableDefaultGetData.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@
return getData;

function getFilterFn(params) {
var settings = params.settings();
if (angular.isFunction(settings.filterFn)){
return settings.filterFn;
var filterOptions = params.settings().filterOptions;
if (angular.isFunction(filterOptions.filterFn)){
return filterOptions.filterFn;
} else {
return $filter(settings.filterFilterName || provider.filterFilterName);
return $filter(filterOptions.filterFilterName || provider.filterFilterName);
}
}

Expand All @@ -83,7 +83,7 @@
return result;
}, {});
var filterFn = getFilterFn(params);
return filterFn.call(params, data, parsedFilter, params.settings().filterComparator);
return filterFn.call(params, data, parsedFilter, params.settings().filterOptions.filterComparator);
}

function applyPaging(data, params) {
Expand Down
19 changes: 12 additions & 7 deletions src/scripts/ngTableParams.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@
$log.debug.apply(this, arguments);
}
},
defaultFilterOptions = {
filterComparator: undefined, // look for a substring match in case insensitive way
filterDelay: 750,
filterFilterName: undefined, // when defined overrides ngTableDefaultGetDataProvider.filterFilterName
filterFn: undefined, // when defined overrides the filter function that ngTableDefaultGetData uses
filterLayout: 'stack' // alternative: 'horizontal'
},
defaultGroupOptions = {
defaultSort: 'asc', // set to 'asc' or 'desc' to apply sorting to groups
isExpanded: true
Expand Down Expand Up @@ -122,6 +129,9 @@
// todo: don't modify newSettings object: this introduces unexpected side effects;
// instead take a copy of newSettings

if (newSettings.filterOptions){
newSettings.filterOptions = angular.extend({}, settings.filterOptions, newSettings.filterOptions);
}
if (newSettings.groupOptions){
newSettings.groupOptions = angular.extend({}, settings.groupOptions, newSettings.groupOptions);
}
Expand Down Expand Up @@ -667,12 +677,11 @@
var gotData = $q.when(adaptedFn.call(settings, params));
return gotData.then(function(data) {
var groups = {};
var groupOptions = settings.groupOptions || defaultGroupOptions;
angular.forEach(data, function(item) {
var groupName = groupFn(item);
groups[groupName] = groups[groupName] || {
data: [],
$hideRows: !groupOptions.isExpanded,
$hideRows: !settings.groupOptions.isExpanded,
value: groupName
};
groups[groupName].data.push(item);
Expand Down Expand Up @@ -719,11 +728,7 @@
data: null, //allows data to be set when table is initialized
total: 0,
defaultSort: 'desc',
filterComparator: undefined, // look for a substring match in case insensitive way
filterDelay: 750,
filterFilterName: undefined, // when defined overrides ngTableDefaultGetDataProvider.filterFilterName
filterFn: undefined, // when defined overrides the filter function that ngTableDefaultGetData uses
filterLayout: 'stack', // alternative: 'horizontal'
filterOptions: angular.copy(defaultFilterOptions),
groupOptions: angular.copy(defaultGroupOptions),
counts: [10, 25, 50, 100],
interceptors: [],
Expand Down
22 changes: 12 additions & 10 deletions test/ngTableDefaultGetDataSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,10 @@ describe('ngTableDefaultGetData', function () {

it('function', function () {
// given
tableParams.settings({filterComparator: function(actual, expected){
var comparer = function (actual, expected) {
return angular.equals(actual, expected);
}});
};
tableParams.settings({ filterOptions: { filterComparator: comparer }});
tableParams.filter({age: 1});
// when
var actualResults = ngTableDefaultGetData([{age: 10}, {age: 1}, {age: 101}, {age: 2}], tableParams);
Expand All @@ -206,7 +207,7 @@ describe('ngTableDefaultGetData', function () {

it('"true"', function () {
// given
tableParams.settings({filterComparator: true});
tableParams.settings({ filterOptions: { filterComparator: true }});
tableParams.filter({age: 1});
// when
var actualResults = ngTableDefaultGetData([{age: 10}, {age: 1}, {age: 101}, {age: 2}], tableParams);
Expand All @@ -216,7 +217,7 @@ describe('ngTableDefaultGetData', function () {

it('"false"', function () {
// given
tableParams.settings({filterComparator: false});
tableParams.settings({ filterOptions: { filterComparator: false }});
tableParams.filter({age: 1});
// when
var actualResults = ngTableDefaultGetData([{age: 10}, {age: 1}, {age: 101}, {age: 2}], tableParams);
Expand All @@ -226,7 +227,7 @@ describe('ngTableDefaultGetData', function () {

it('"undefined" (the default)', function () {
// given
tableParams.settings({filterComparator: undefined});
tableParams.settings({ filterOptions: { filterComparator: undefined }});
tableParams.filter({age: 1});
// when
var actualResults = ngTableDefaultGetData([{age: 10}, {age: 1}, {age: 101}, {age: 2}], tableParams);
Expand Down Expand Up @@ -266,7 +267,7 @@ describe('ngTableDefaultGetData', function () {

it('filterFilterName override', function () {
// given
tableParams.settings({filterFilterName: 'myCustomFilter'});
tableParams.settings({ filterOptions: {filterFilterName: 'myCustomFilter'}});
tableParams.filter({ages: [1, 2]});
// when
var actualResults = ngTableDefaultGetData([{age: 1}, {age: 2}, {age: 3}], tableParams);
Expand All @@ -276,7 +277,7 @@ describe('ngTableDefaultGetData', function () {

it('`this` context of custom filter should be set to the NgTableParams instance', inject(function (myCustomFilterFilter) {
// given
tableParams.settings({filterFilterName: 'myCustomFilter'});
tableParams.settings({ filterOptions: {filterFilterName: 'myCustomFilter'}});
tableParams.filter({ages: [1, 2]});
// when
ngTableDefaultGetData([{age: 1}, {age: 2}, {age: 3}], tableParams);
Expand All @@ -286,11 +287,12 @@ describe('ngTableDefaultGetData', function () {

it('custom filter function', function () {
// given
tableParams.settings({filterFn: function(data, criteriaObj/*, comparator*/){
var filterFn = function (data, criteriaObj/*, comparator*/) {
return data.filter(function (p) {
return criteriaObj.ages.indexOf(p.age) !== -1;
});
}});
};
tableParams.settings({ filterOptions: { filterFn: filterFn }});
tableParams.filter({ages: [1, 2]});
// when
var actualResults = ngTableDefaultGetData([{age: 1}, {age: 2}, {age: 3}], tableParams);
Expand All @@ -301,7 +303,7 @@ describe('ngTableDefaultGetData', function () {
it('`this` context of custom filter function should be set to the NgTableParams instance', function () {
// given
var filterFnSpy = jasmine.createSpy('filterFn', angular.identity).and.callThrough();
tableParams.settings({ filterFn: filterFnSpy});
tableParams.settings({ filterOptions: { filterFn: filterFnSpy }});
tableParams.filter({age: 1});
// when
var actualResults = ngTableDefaultGetData([{age: 1}], tableParams);
Expand Down
18 changes: 11 additions & 7 deletions test/tableParamsSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ describe('NgTableParams', function () {
settings = arguments[1];
}

settings = angular.extend({}, {
settings = angular.extend({}, settings);
settings.filterOptions = angular.extend({}, {
filterDelay: 0
}, settings);
}, settings.filterOptions);
var tableParams = new NgTableParams(initialParams, settings);
spyOn(tableParams.settings(), 'getData').and.callThrough();
return tableParams;
Expand Down Expand Up @@ -280,10 +281,13 @@ describe('NgTableParams', function () {
paginationMaxBlocks: 11,
paginationMinBlocks: 5,
sortingIndicator: 'span',
filterComparator: undefined,
filterDelay: 750,
filterFilterName: undefined,
filterFn: undefined,
filterOptions: {
filterComparator: undefined,
filterDelay: 750,
filterFilterName: undefined,
filterFn: undefined,
filterLayout: 'stack'
},
groupOptions: { defaultSort: 'asc', isExpanded: true }
};
expect(params.settings()).toEqual(jasmine.objectContaining(expectedSettings));
Expand Down Expand Up @@ -629,7 +633,7 @@ describe('NgTableParams', function () {
var settings = tp.settings();
expect(settings.counts.length).toEqual(0);
expect(settings.interceptors.length).toEqual(0);
expect(settings.filterDelay).toEqual(750);
expect(settings.filterOptions.filterDelay).toEqual(750);

ngTableDefaults.settings.interceptors = [ { response: angular.identity }];
tp = new NgTableParams();
Expand Down
21 changes: 11 additions & 10 deletions test/tableSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ describe('ng-table', function() {
settings = arguments[1];
}

settings = angular.extend({}, {
settings = angular.extend({}, settings);
settings.filterOptions = angular.extend({}, {
filterDelay: 0
}, settings);
}, settings.filterOptions);
var tableParams = new NgTableParams(initialParams, settings);
spyOn(tableParams.settings(), 'getData').and.callThrough();
return tableParams;
Expand Down Expand Up @@ -455,7 +456,7 @@ describe('ng-table', function() {

// 'text' is a shortcut alias for the template ng-table/filters/text
scope.usernameFilter = {username: 'text'};
tp = scope.tableParams = createNgTableParams({ filterDelay: 10 });
tp = scope.tableParams = createNgTableParams({ filterOptions: { filterDelay: 10 } });
scope.$digest();
}));

Expand Down Expand Up @@ -979,7 +980,7 @@ describe('ng-table', function() {

it('should reload 1 time when binding a new settings data value and changing the filter', function(){
// given
var tp = createNgTableParams({filterDelay: 100, data: [{age: 1}, {age: 2}]});
var tp = createNgTableParams({filterOptions: { filterDelay: 100 }, data: [{age: 1}, {age: 2}]});
scope.tableParams = tp;
scope.$digest();
tp.settings().getData.calls.reset();
Expand All @@ -995,7 +996,7 @@ describe('ng-table', function() {

it('should reload 1 time when multiple filter changes are debounced', function(){
// given
var tp = createNgTableParams({filterDelay: 100, data: [{age: 1}, {age: 2}]});
var tp = createNgTableParams({filterOptions: { filterDelay: 100 }, data: [{age: 1}, {age: 2}]});
scope.tableParams = tp;
scope.$digest();
tp.settings().getData.calls.reset();
Expand All @@ -1012,7 +1013,7 @@ describe('ng-table', function() {

it('should reload 1 time when initial load fails', inject(function($q){
// given
var tp = createNgTableParams({filterDelay: 0, getData: function(){
var tp = createNgTableParams({ getData: function(){
return $q.reject('BANG!');
}});

Expand All @@ -1028,7 +1029,7 @@ describe('ng-table', function() {
var settings = {
counts: [1],
data: [{age: 1}, {age: 2}],
filterDelay: 100
filterOptions: { filterDelay: 100 }
};
var tp = createNgTableParams({ count: 1, page: 2 }, settings);
scope.tableParams = tp;
Expand Down Expand Up @@ -1062,7 +1063,7 @@ describe('ng-table', function() {
});

it('change to filter that fails to load should not cause infinite reload loop', inject(function($q){
var tp = createNgTableParams({ filterDelay: 0, getData: function(){
var tp = createNgTableParams({ getData: function(){
if (tp.settings().getData.calls.count() > 1){
return $q.reject('BANG!');
}
Expand Down Expand Up @@ -1127,7 +1128,7 @@ describe('ng-table', function() {

it('should not reload when filter value is assigned the same value', function(){
// given
var tp = createNgTableParams({ filter: {age: 10} }, { filterDelay: 0 });
var tp = createNgTableParams({ filter: {age: 10} }, { });
scope.tableParams = tp;
scope.$digest();
tp.settings().getData.calls.reset();
Expand All @@ -1141,7 +1142,7 @@ describe('ng-table', function() {

it('should reload when filter value changes', function(){
// given
var tp = createNgTableParams({ filter: {age: 10} }, { filterDelay: 0 });
var tp = createNgTableParams({ filter: {age: 10} }, {});
scope.tableParams = tp;
scope.$digest();
tp.settings().getData.calls.reset();
Expand Down

0 comments on commit 449ab62

Please sign in to comment.