TimeSeries: Fix stacking when first value is negative zero (#57257)

* TimeSeries: Fix stacking when first value is negative zero

* More test + refactor
This commit is contained in:
Zoltán Bedi 2022-10-21 20:58:23 +02:00 committed by GitHub
parent 2c9526fdf7
commit 7f3b567657
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 12 deletions

View File

@ -1059,6 +1059,11 @@ describe('auto stacking groups', () => {
values: [0, 0, 0], values: [0, 0, 0],
config: { custom: { stacking: { mode: StackingMode.Normal } } }, config: { custom: { stacking: { mode: StackingMode.Normal } } },
}, },
{
name: 'd',
values: [-0, -10, -20],
config: { custom: { stacking: { mode: StackingMode.Normal } } },
},
], ],
}); });
@ -1068,6 +1073,7 @@ describe('auto stacking groups', () => {
"dir": -1, "dir": -1,
"series": Array [ "series": Array [
1, 1,
4,
], ],
}, },
Object { Object {
@ -1100,6 +1106,11 @@ describe('auto stacking groups', () => {
values: [0, 0, 0], values: [0, 0, 0],
config: { custom: { stacking: { mode: StackingMode.Normal } } }, config: { custom: { stacking: { mode: StackingMode.Normal } } },
}, },
{
name: 'd',
values: [-0, null, 3],
config: { custom: { stacking: { mode: StackingMode.Normal }, transform: GraphTransform.NegativeY } },
},
], ],
}); });
@ -1111,6 +1122,7 @@ describe('auto stacking groups', () => {
1, 1,
2, 2,
3, 3,
4,
], ],
}, },
] ]

View File

@ -117,18 +117,7 @@ export function getStackingGroups(frame: DataFrame) {
let vals = values.toArray(); let vals = values.toArray();
let transform = custom.transform; let transform = custom.transform;
let firstValue = vals.find((v) => v != null); let firstValue = vals.find((v) => v != null);
let stackDir = let stackDir = getStackDirection(transform, firstValue);
transform === GraphTransform.Constant
? firstValue >= 0
? StackDirection.Pos
: StackDirection.Neg
: transform === GraphTransform.NegativeY
? firstValue >= 0
? StackDirection.Neg
: StackDirection.Pos
: firstValue >= 0
? StackDirection.Pos
: StackDirection.Neg;
let drawStyle = custom.drawStyle as GraphDrawStyle; let drawStyle = custom.drawStyle as GraphDrawStyle;
let drawStyle2 = let drawStyle2 =
@ -352,6 +341,15 @@ export function findMidPointYPosition(u: uPlot, idx: number) {
return y; return y;
} }
function getStackDirection(transform: GraphTransform, firstValue: number) {
// Check if first value is negative zero. This can happen with a binary operation transform.
const isNegativeZero = Object.is(firstValue, -0);
if (transform === GraphTransform.NegativeY) {
return !isNegativeZero && firstValue >= 0 ? StackDirection.Neg : StackDirection.Pos;
}
return !isNegativeZero && firstValue >= 0 ? StackDirection.Pos : StackDirection.Neg;
}
// Dev helpers // Dev helpers
/** @internal */ /** @internal */