diff --git a/src/ChartInternal/internals/domain.ts b/src/ChartInternal/internals/domain.ts index c24eca1c9..d91d830d4 100644 --- a/src/ChartInternal/internals/domain.ts +++ b/src/ChartInternal/internals/domain.ts @@ -355,8 +355,8 @@ export default { const [min, max] = zoomDomain; if (isInverted ? domain[0] >= min : domain[0] <= min) { - domain[0] = min; domain[1] = +domain[1] + (min - domain[0]); + domain[0] = min; } if (isInverted ? domain[1] <= max : domain[1] >= max) { diff --git a/test/internals/domain-spec.ts b/test/internals/domain-spec.ts index ca79f1047..31c256adb 100644 --- a/test/internals/domain-spec.ts +++ b/test/internals/domain-spec.ts @@ -377,4 +377,36 @@ describe("DOMAIN", function() { expect(y2.domain()).to.be.deep.equal(domain); }); }); + + describe("trimXDomain", () => { + before(() => { + args = { + data: { + columns: [ + ["sample", 30, 200, 100, 400, 150, 250, 150, 200, 170, 240, 350, 150, 100, 400, 150], + ], + type: "line", + }, + zoom: { + enabled: true, + }, + } + }); + + it("test pan left gets trimmed", () => { + const domain = chart.internal.scale.x.domain(); + const trimmed = chart.internal.trimXDomain(domain.map((x: number) => x - 10)); + + expect(trimmed[0]).to.approximately(domain[0], 0.1); + expect(trimmed[1]).to.approximately(domain[1], 0.1); + }); + + it("test pan right gets trimmed", () => { + const domain = chart.internal.scale.x.domain(); + const trimmed = chart.internal.trimXDomain(domain.map((x: number) => x + 5)); + + expect(trimmed[0]).to.approximately(domain[0], 0.1); + expect(trimmed[1]).to.approximately(domain[1], 0.1); + }); + }); });