From 77ed88c5ed58243d77ff88b393351abf028bb991 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Sat, 15 Feb 2025 23:29:22 +0200 Subject: [PATCH] fix: numeric scale panning with dynamic limits (#915) --- src/scale.types.ts | 9 +++++---- test/specs/pan.spec.js | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/scale.types.ts b/src/scale.types.ts index 0674df5b..4f5c929b 100644 --- a/src/scale.types.ts +++ b/src/scale.types.ts @@ -133,7 +133,8 @@ export function updateRange( scale: Scale, { min, max }: ScaleRange, limits?: LimitOptions, - zoom: boolean | 'pan' = false + zoom = false, + pan = false ): boolean { const state = getState(scale.chart) const { options: scaleOpts } = scale @@ -143,7 +144,7 @@ export function updateRange( const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity) const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity) - if (zoom === 'pan' && (min < minLimit || max > maxLimit)) { + if (pan && (min < minLimit || max > maxLimit)) { // At limit: No change but return true to indicate no need to store the delta. return true } @@ -246,7 +247,7 @@ const OFFSETS: Record = { year: 182 * 24 * 60 * 60 * 1000, // 182 d } -function panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, pan = false) { +function panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) { const { min: prevStart, max: prevEnd } = scale let offset = 0 if (isTimeScale(scale)) { @@ -260,7 +261,7 @@ function panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, pa // with min === max or because the chart has 0 plottable area). return true } - return updateRange(scale, { min: newMin, max: newMax }, limits, pan ? 'pan' : false) + return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true) } function panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) { diff --git a/test/specs/pan.spec.js b/test/specs/pan.spec.js index 0eecc9d1..19f0cd4e 100644 --- a/test/specs/pan.spec.js +++ b/test/specs/pan.spec.js @@ -87,11 +87,11 @@ describe('pan', function () { expect(scale.min).toBe(1) expect(scale.max).toBe(3) chart.pan(-2000) - expect(scale.min).toBe(2) - expect(scale.max).toBe(4) + expect(scale.min).toBe(1) + expect(scale.max).toBe(3) chart.pan(-2000) - expect(scale.min).toBe(2) - expect(scale.max).toBe(4) + expect(scale.min).toBe(1) + expect(scale.max).toBe(3) chart.pan(50) expect(scale.min).toBeLessThan(2) expect(scale.max).toBe(scale.min + 2)