Skip to content

Commit 02b585a

Browse files
committed
[#131] introduce filter handler
1 parent c19916b commit 02b585a

File tree

5 files changed

+71
-6
lines changed

5 files changed

+71
-6
lines changed

dc.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,6 +1413,10 @@ dc.colorChart = function(_chart) {
14131413
};
14141414
dc.singleSelectionChart = function(_chart) {
14151415
var _filter;
1416+
var _filterHandler = function(dimension, filter){
1417+
dimension.filter(filter);
1418+
return filter;
1419+
};
14161420

14171421
_chart.hasFilter = function() {
14181422
return _filter != null;
@@ -1423,8 +1427,10 @@ dc.singleSelectionChart = function(_chart) {
14231427

14241428
_filter = _;
14251429

1426-
if (_chart.dataSet() && _chart.dimension().filter != undefined)
1427-
_chart.dimension().filter(_filter);
1430+
if (_chart.dataSet() && _chart.dimension().filter != undefined){
1431+
var f = _filterHandler(_chart.dimension(), _filter);
1432+
_filter = f?f:_filter;
1433+
}
14281434

14291435
if (_) {
14301436
_chart.turnOnControls();
@@ -1464,6 +1470,12 @@ dc.singleSelectionChart = function(_chart) {
14641470
dc.redrawAll(_chart.chartGroup());
14651471
};
14661472

1473+
_chart.filterHandler = function(_){
1474+
if(!arguments.length) return _filterHandler;
1475+
_filterHandler = _;
1476+
return _chart;
1477+
};
1478+
14671479
return _chart;
14681480
};
14691481
dc.stackableChart = function (_chart) {

dc.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/single-selection-chart.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
dc.singleSelectionChart = function(_chart) {
22
var _filter;
3+
var _filterHandler = function(dimension, filter){
4+
dimension.filter(filter);
5+
return filter;
6+
};
37

48
_chart.hasFilter = function() {
59
return _filter != null;
@@ -10,8 +14,10 @@ dc.singleSelectionChart = function(_chart) {
1014

1115
_filter = _;
1216

13-
if (_chart.dataSet() && _chart.dimension().filter != undefined)
14-
_chart.dimension().filter(_filter);
17+
if (_chart.dataSet() && _chart.dimension().filter != undefined){
18+
var f = _filterHandler(_chart.dimension(), _filter);
19+
_filter = f?f:_filter;
20+
}
1521

1622
if (_) {
1723
_chart.turnOnControls();
@@ -51,5 +57,11 @@ dc.singleSelectionChart = function(_chart) {
5157
dc.redrawAll(_chart.chartGroup());
5258
};
5359

60+
_chart.filterHandler = function(_){
61+
if(!arguments.length) return _filterHandler;
62+
_filterHandler = _;
63+
return _chart;
64+
};
65+
5466
return _chart;
5567
};

test/pie-chart-test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,28 @@ suite.addBatch({
377377
}
378378
});
379379

380+
suite.addBatch({
381+
'custom filter handler': {
382+
topic: function () {
383+
var chart = buildChart("pie-chart-filter-handler");
384+
chart.filterHandler(function(dimension, filter){
385+
var newFilter = filter + 6;
386+
dimension.filter(newFilter);
387+
return newFilter;
388+
});
389+
return chart;
390+
},
391+
'default function should be used to dynamically generate label': function (chart) {
392+
chart.filter(60);
393+
assert.equal(chart.filter(), 66);
394+
},
395+
teardown: function (chart) {
396+
resetAllFilters();
397+
resetBody();
398+
}
399+
}
400+
});
401+
380402

381403
suite.export(module);
382404

wiki/api.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,25 @@ chart.filter(18);
235235
#### .hasFilter()
236236
Check whether is an active filter associated with particular chart instance. This function is **not chainable**.
237237

238+
#### .filterHandler([function])
239+
Set or get filter handler. Filter handler is a function that performs the filter action on a specific dimension. Using
240+
custom filter handler give you the flexibility to perform additional logic before or after filtering.
241+
242+
```js
243+
// default filter handler
244+
function(dimension, filter){
245+
dimension.filter(filter); // perform filtering
246+
return filter; // return the actual filter value
247+
}
248+
249+
// custom filter handler
250+
chart.filterHandler(function(dimension, filter){
251+
var newFilter = filter + 10;
252+
dimension.filter(newFilter);
253+
return newFilter; // set the actual filter value to the new value
254+
});
255+
```
256+
238257
## <a name="stackable-chart" href="#stackable-chart">#</a> Stackable Chart [Abstract]
239258
Stackable chart is an abstract chart introduced to provide cross-chart support of stackability. Concrete implementation of
240259
charts can then selectively mix-in this capability.

0 commit comments

Comments
 (0)