Add API to change data visibility (#6907)

This commit is contained in:
Evert Timberg 2020-01-06 17:16:00 -05:00 committed by GitHub
parent eb116fa331
commit 9cb65d2c97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 66 additions and 0 deletions

View File

@ -147,3 +147,21 @@ Extensive examples of usage are available in the [Chart.js tests](https://github
var meta = myChart.getDatasetMeta(0);
var x = meta.data[0].x;
```
## setDatasetVisibility(datasetIndex, visibility)
Sets the visibility for a given dataset. This can be used to build a chart legend in HTML. During click on one of the HTML items, you can call `setDatasetVisibility` to change the appropriate dataset.
```javascript
chart.setDatasetVisibility(1, false); // hides dataset at index 1
chart.update(); // chart now renders with dataset hidden
```
## setDataVisibility(datasetIndex, index, visibility)
Like [setDatasetVisibility](#setdatasetvisibility) except that it hides only a single item in the dataset. **Note** this only applies to polar area and doughnut charts at the moment. It will have no affect on line, bar, radar, or scatter charts.
```javascript
chart.setDataVisibility(0, 2, false); // hides the item in dataset 0, at index 2
chart.update(); // chart now renders with item hidden
```

View File

@ -810,6 +810,19 @@ class Chart {
return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;
}
setDatasetVisibility(datasetIndex, visible) {
const meta = this.getDatasetMeta(datasetIndex);
meta.hidden = !visible;
}
setDataVisibility(datasetIndex, index, visible) {
const meta = this.getDatasetMeta(datasetIndex);
if (meta.data[index]) {
meta.data[index].hidden = !visible;
}
}
/**
* @private
*/

View File

@ -1347,4 +1347,39 @@ describe('Chart', function() {
expect(metasets[3].order).toEqual(3);
});
});
describe('data visibility', function() {
it('should hide a dataset', function() {
var chart = acquireChart({
type: 'line',
data: {
datasets: [{
data: [0, 1, 2]
}],
labels: ['a', 'b', 'c']
}
});
chart.setDatasetVisibility(0, false);
var meta = chart.getDatasetMeta(0);
expect(meta.hidden).toBe(true);
});
it('should hide a single data item', function() {
var chart = acquireChart({
type: 'polarArea',
data: {
datasets: [{
data: [1, 2, 3]
}]
}
});
chart.setDataVisibility(0, 1, false);
var meta = chart.getDatasetMeta(0);
expect(meta.data[1].hidden).toBe(true);
});
});
});