]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix updating of active elements (#9261)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Sat, 12 Jun 2021 18:19:33 +0000 (21:19 +0300)
committerGitHub <noreply@github.com>
Sat, 12 Jun 2021 18:19:33 +0000 (14:19 -0400)
src/controllers/controller.bar.js
src/controllers/controller.bubble.js
src/controllers/controller.doughnut.js
src/controllers/controller.line.js
src/controllers/controller.polarArea.js
src/controllers/controller.radar.js
test/fixtures/controller.doughnut/doughnut-set-active-elements.js [new file with mode: 0644]
test/fixtures/controller.doughnut/doughnut-set-active-elements.png [new file with mode: 0644]

index d7daa6e8430c2608668739fb573e2ff0431c62ea..43c406acaa255c9ae122e0bda9dbbaf871364f4f 100644 (file)
@@ -290,7 +290,7 @@ export default class BarController extends DatasetController {
       };
 
       if (includeOptions) {
-        properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);
+        properties.options = sharedOptions || me.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);
       }
       me.updateElement(bars[i], i, properties, mode);
     }
index 115012a142d014996956289ded272b77317f19fd..55873dafe758dd9f10c9ec1fdbb5de7763d5d3b1 100644 (file)
@@ -86,7 +86,7 @@ export default class BubbleController extends DatasetController {
       properties.skip = isNaN(iPixel) || isNaN(vPixel);
 
       if (includeOptions) {
-        properties.options = me.resolveDataElementOptions(i, mode);
+        properties.options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);
 
         if (reset) {
           properties.options.radius = 0;
index bf472317c07301db5b723ad1e0abfe0ddf3178b9..0d4d135f2481825a212c4e2c94f2186ef499873c 100644 (file)
@@ -186,7 +186,7 @@ export default class DoughnutController extends DatasetController {
         innerRadius
       };
       if (includeOptions) {
-        properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);
+        properties.options = sharedOptions || me.resolveDataElementOptions(i, arc.active ? 'active' : mode);
       }
       startAngle += circumference;
 
index 3fca6a738cc234902500baad8ad0c63057db17e9..ab3c5051556223df37df17284cc7826f923b6258 100644 (file)
@@ -71,7 +71,7 @@ export default class LineController extends DatasetController {
       properties.parsed = parsed;
 
       if (includeOptions) {
-        properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);
+        properties.options = sharedOptions || me.resolveDataElementOptions(i, point.active ? 'active' : mode);
       }
 
       if (!directUpdate) {
index 243bcc6c129adcd71e5e2c90c820c1fe46e1661e..0c6fa0c99bdbd6e709d24c254e27f6e6ad7a9087 100644 (file)
@@ -91,7 +91,7 @@ export default class PolarAreaController extends DatasetController {
         outerRadius,
         startAngle,
         endAngle,
-        options: me.resolveDataElementOptions(i, mode)
+        options: me.resolveDataElementOptions(i, arc.active ? 'active' : mode)
       };
 
       me.updateElement(arc, i, properties, mode);
index e38c0778376291f926278a127c54f791d0ee7d0d..e8f037c51844cb6e783974d4eb53dbc2e1c3b555 100644 (file)
@@ -53,7 +53,7 @@ export default class RadarController extends DatasetController {
 
     for (let i = start; i < start + count; i++) {
       const point = points[i];
-      const options = me.resolveDataElementOptions(i, mode);
+      const options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);
       const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);
 
       const x = reset ? scale.xCenter : pointPosition.x;
diff --git a/test/fixtures/controller.doughnut/doughnut-set-active-elements.js b/test/fixtures/controller.doughnut/doughnut-set-active-elements.js
new file mode 100644 (file)
index 0000000..7a9a778
--- /dev/null
@@ -0,0 +1,27 @@
+module.exports = {
+  description: 'https://github.com/chartjs/Chart.js/issues/9248',
+  config: {
+    type: 'doughnut',
+    data: {
+      datasets: [
+        {
+          data: [34, 33, 17, 16],
+          backgroundColor: ['#D92323', '#E45757', '#ED8D8D', '#F5C4C4']
+        }
+      ]
+    },
+    options: {
+      events: [], // for easier saving of the fixture only
+      borderWidth: 0,
+      hoverBorderWidth: 4,
+      hoverBorderColor: 'black',
+      cutout: '80%',
+    }
+  },
+  options: {
+    run(chart) {
+      chart.setActiveElements([{datasetIndex: 0, index: 1}]);
+      chart.update();
+    }
+  }
+};
diff --git a/test/fixtures/controller.doughnut/doughnut-set-active-elements.png b/test/fixtures/controller.doughnut/doughnut-set-active-elements.png
new file mode 100644 (file)
index 0000000..14b0c39
Binary files /dev/null and b/test/fixtures/controller.doughnut/doughnut-set-active-elements.png differ