From: huqingkun Date: Mon, 12 Aug 2024 15:56:35 +0000 (+0800) Subject: Bugfix/issue 11804 tooltip show for all invisible (#11858) X-Git-Tag: v4.4.4~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9c01414bac867310d192da676c78e8e269f7d8b;p=thirdparty%2FChart.js.git Bugfix/issue 11804 tooltip show for all invisible (#11858) * exclude 0 angle from inRange to not showing tooltip when all data are hidden Signed-off-by: Hu, Vince * test 0 angle point not in arc range --------- Signed-off-by: Hu, Vince --- diff --git a/src/elements/element.arc.ts b/src/elements/element.arc.ts index 1595016c9..e2bd26f52 100644 --- a/src/elements/element.arc.ts +++ b/src/elements/element.arc.ts @@ -324,7 +324,8 @@ export default class ArcElement extends Element { ], useFinalPosition); const rAdjust = (this.options.spacing + this.options.borderWidth) / 2; const _circumference = valueOrDefault(circumference, endAngle - startAngle); - const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle); + const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle; + const betweenAngles = _circumference >= TAU || nonZeroBetween; const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust); return (betweenAngles && withinRadius); diff --git a/test/specs/element.arc.tests.js b/test/specs/element.arc.tests.js index e8ba72f3a..63d20caae 100644 --- a/test/specs/element.arc.tests.js +++ b/test/specs/element.arc.tests.js @@ -281,4 +281,26 @@ describe('Arc element tests', function() { expect(ctx.getCalls().length).toBeGreaterThan(0); }); + + it ('should determine not in range when angle 0', function() { + // Mock out the arc as if the controller put it there + var arc = new Chart.elements.ArcElement({ + startAngle: 0, + endAngle: 0, + x: 0, + y: 0, + innerRadius: 0, + outerRadius: 10, + circumference: 0, + options: { + spacing: 0, + offset: 0, + borderWidth: 0 + } + }); + + var center = arc.getCenterPoint(); + + expect(arc.inRange(center.x, 1)).toBe(false); + }); });