return Object.keys(scales).filter(key => scales[key].axis === axis).shift();
}
-function createDatasetContext(parent, index, dataset) {
+function createDatasetContext(parent, index) {
return Object.assign(Object.create(parent),
{
active: false,
- dataset,
+ dataset: undefined,
datasetIndex: index,
index,
mode: 'default',
);
}
-function createDataContext(parent, index, point, raw, element) {
+function createDataContext(parent, index, element) {
return Object.assign(Object.create(parent), {
active: false,
dataIndex: index,
- parsed: point,
- raw,
+ parsed: undefined,
+ raw: undefined,
element,
index,
mode: 'default',
if (index >= 0 && index < me._cachedMeta.data.length) {
const element = me._cachedMeta.data[index];
context = element.$context ||
- (element.$context = createDataContext(me.getContext(), index, me.getParsed(index), dataset.data[index], element));
+ (element.$context = createDataContext(me.getContext(), index, element));
+ context.parsed = me.getParsed(index);
+ context.raw = dataset.data[index];
} else {
- context = me.$context || (me.$context = createDatasetContext(me.chart.getContext(), me.index, dataset));
+ context = me.$context ||
+ (me.$context = createDatasetContext(me.chart.getContext(), me.index));
+ context.dataset = dataset;
}
context.active = !!active;
});
});
});
+
+ describe('getContext', function() {
+ it('should reflect updated data', function() {
+ var chart = acquireChart({
+ type: 'scatter',
+ data: {
+ datasets: [{
+ data: [{x: 1, y: 0}, {x: 2, y: '1'}]
+ }]
+ },
+ });
+ let meta = chart.getDatasetMeta(0);
+
+ expect(meta.controller.getContext(undefined, true, 'test')).toEqual(jasmine.objectContaining({
+ active: true,
+ datasetIndex: 0,
+ dataset: chart.data.datasets[0],
+ index: 0,
+ mode: 'test'
+ }));
+ expect(meta.controller.getContext(1, false, 'datatest')).toEqual(jasmine.objectContaining({
+ active: false,
+ datasetIndex: 0,
+ dataset: chart.data.datasets[0],
+ dataIndex: 1,
+ element: meta.data[1],
+ index: 1,
+ parsed: {x: 2, y: 1},
+ raw: {x: 2, y: '1'},
+ mode: 'datatest'
+ }));
+
+ chart.data.datasets[0].data[1].y = 5;
+ chart.update();
+
+ expect(meta.controller.getContext(1, false, 'datatest')).toEqual(jasmine.objectContaining({
+ active: false,
+ datasetIndex: 0,
+ dataset: chart.data.datasets[0],
+ dataIndex: 1,
+ element: meta.data[1],
+ index: 1,
+ parsed: {x: 2, y: 5},
+ raw: {x: 2, y: 5},
+ mode: 'datatest'
+ }));
+
+ chart.data.datasets = [{
+ data: [{x: 0, y: 0}, {x: 1, y: 1}]
+ }];
+ chart.update();
+ // meta is re-created when dataset is replaced
+ meta = chart.getDatasetMeta(0);
+
+ expect(meta.controller.getContext(undefined, false, 'test2')).toEqual(jasmine.objectContaining({
+ active: false,
+ datasetIndex: 0,
+ dataset: chart.data.datasets[0],
+ index: 0,
+ mode: 'test2'
+ }));
+ expect(meta.controller.getContext(1, true, 'datatest2')).toEqual(jasmine.objectContaining({
+ active: true,
+ datasetIndex: 0,
+ dataset: chart.data.datasets[0],
+ dataIndex: 1,
+ element: meta.data[1],
+ index: 1,
+ parsed: {x: 1, y: 1},
+ raw: {x: 1, y: 1},
+ mode: 'datatest2'
+ }));
+ });
+ });
});