Skip to content

Commit f37d066

Browse files
authored
fix(bar): improve grouped bar performance (pmndrs#1404)
1 parent 644faf4 commit f37d066

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

packages/bar/src/compute/common.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,17 @@ export const getIndexScale = (data, getIndex, range, padding, indexScale) => {
2828

2929
export const normalizeData = (data, keys) =>
3030
data.map(item => ({
31-
...keys.reduce((acc, key) => ({ ...acc, [key]: null }), {}),
31+
...keys.reduce((acc, key) => {
32+
acc[key] = null
33+
return acc
34+
}, {}),
3235
...item,
3336
}))
3437

3538
export const filterNullValues = data =>
36-
Object.keys(data).reduce((acc, key) => (data[key] ? { ...acc, [key]: data[key] } : acc), {})
39+
Object.keys(data).reduce((acc, key) => {
40+
if (data[key]) {
41+
acc[key] = data[key]
42+
}
43+
return acc
44+
}, {})

packages/bar/src/compute/grouped.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const generateVerticalGroupedBars = (
4242
const compare = reverse ? lt : gt
4343
const getY = d => (compare(d, 0) ? yScale(d) : yRef)
4444
const getHeight = (d, y) => (compare(d, 0) ? yRef - y : yScale(d) - yRef)
45+
const cleanedData = data.map(filterNullValues)
4546

4647
const bars = flatten(
4748
keys.map((key, i) =>
@@ -54,7 +55,7 @@ const generateVerticalGroupedBars = (
5455
value: data[index][key],
5556
index,
5657
indexValue: getIndex(data[index]),
57-
data: filterNullValues(data[index]),
58+
data: cleanedData[index],
5859
}
5960

6061
return {
@@ -98,6 +99,7 @@ const generateHorizontalGroupedBars = (
9899
const compare = reverse ? lt : gt
99100
const getX = d => (compare(d, 0) ? xRef : xScale(d))
100101
const getWidth = (d, x) => (compare(d, 0) ? xScale(d) - xRef : xRef - x)
102+
const cleanedData = data.map(filterNullValues)
101103

102104
const bars = flatten(
103105
keys.map((key, i) =>
@@ -110,7 +112,7 @@ const generateHorizontalGroupedBars = (
110112
value: data[index][key],
111113
index,
112114
indexValue: getIndex(data[index]),
113-
data: filterNullValues(data[index]),
115+
data: cleanedData[index],
114116
}
115117

116118
return {

0 commit comments

Comments
 (0)