Skip to content

Commit 4d7965c

Browse files
authored
Augment chart limits and improve padding on bar chart (#16184)
- Maximum from 50 to 100 - Reduce padding - Make inner padding dynamic
1 parent f2cdf8a commit 4d7965c

File tree

8 files changed

+73
-9
lines changed

8 files changed

+73
-9
lines changed

packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/components/GraphWidgetBarChart.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { GraphWidgetLegend } from '@/page-layout/widgets/graph/components/GraphW
33
import { CustomBarItem } from '@/page-layout/widgets/graph/graphWidgetBarChart/components/CustomBarItem';
44
import { CustomTotalsLayer } from '@/page-layout/widgets/graph/graphWidgetBarChart/components/CustomTotalsLayer';
55
import { GraphBarChartTooltip } from '@/page-layout/widgets/graph/graphWidgetBarChart/components/GraphBarChartTooltip';
6-
import { BAR_CHART_MINIMUM_INNER_PADDING } from '@/page-layout/widgets/graph/graphWidgetBarChart/constants/BarChartMinimumInnerPadding';
6+
import { BAR_CHART_OUTER_PADDING_RATIO } from '@/page-layout/widgets/graph/graphWidgetBarChart/constants/BarChartOuterPaddingRatio';
77
import { useBarChartData } from '@/page-layout/widgets/graph/graphWidgetBarChart/hooks/useBarChartData';
88
import { useBarChartTheme } from '@/page-layout/widgets/graph/graphWidgetBarChart/hooks/useBarChartTheme';
99
import { BarChartLayout } from '@/page-layout/widgets/graph/graphWidgetBarChart/types/BarChartLayout';
@@ -12,6 +12,7 @@ import { calculateStackedBarChartValueRange } from '@/page-layout/widgets/graph/
1212
import { calculateValueRangeFromBarChartKeys } from '@/page-layout/widgets/graph/graphWidgetBarChart/utils/calculateValueRangeFromBarChartKeys';
1313
import { getBarChartAxisConfigs } from '@/page-layout/widgets/graph/graphWidgetBarChart/utils/getBarChartAxisConfigs';
1414
import { getBarChartColor } from '@/page-layout/widgets/graph/graphWidgetBarChart/utils/getBarChartColor';
15+
import { getBarChartInnerPadding } from '@/page-layout/widgets/graph/graphWidgetBarChart/utils/getBarChartInnerPadding';
1516
import { getBarChartMargins } from '@/page-layout/widgets/graph/graphWidgetBarChart/utils/getBarChartMargins';
1617
import { createGraphColorRegistry } from '@/page-layout/widgets/graph/utils/createGraphColorRegistry';
1718
import {
@@ -233,7 +234,7 @@ export const GraphWidgetBarChart = ({
233234
keys={keys}
234235
indexBy={indexBy}
235236
margin={margins}
236-
padding={0.3}
237+
padding={BAR_CHART_OUTER_PADDING_RATIO}
237238
groupMode={groupMode}
238239
layout={layout}
239240
valueScale={{
@@ -256,9 +257,15 @@ export const GraphWidgetBarChart = ({
256257
gridYValues={layout === BarChartLayout.VERTICAL ? 5 : undefined}
257258
enableLabel={false}
258259
labelSkipWidth={12}
259-
innerPadding={
260-
groupMode === 'grouped' ? BAR_CHART_MINIMUM_INNER_PADDING : 0
261-
}
260+
innerPadding={getBarChartInnerPadding({
261+
chartWidth,
262+
chartHeight,
263+
dataLength: data.length,
264+
keysLength: keys.length,
265+
layout,
266+
margins,
267+
groupMode,
268+
})}
262269
labelSkipHeight={12}
263270
valueFormat={(value) =>
264271
formatGraphValue(Number(value), formatOptions)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const BAR_CHART_DEFAULT_INNER_PADDING = 4;
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const BAR_CHART_MAXIMUM_NUMBER_OF_BARS = 50;
1+
export const BAR_CHART_MAXIMUM_NUMBER_OF_BARS = 100;

packages/twenty-front/src/modules/page-layout/widgets/graph/graphWidgetBarChart/constants/BarChartMinimumInnerPadding.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const BAR_CHART_OUTER_PADDING_RATIO = 0.05;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { BAR_CHART_DEFAULT_INNER_PADDING } from '@/page-layout/widgets/graph/graphWidgetBarChart/constants/BarChartDefaultInnerPadding';
2+
import { BAR_CHART_OUTER_PADDING_RATIO } from '@/page-layout/widgets/graph/graphWidgetBarChart/constants/BarChartOuterPaddingRatio';
3+
import { BarChartLayout } from '@/page-layout/widgets/graph/graphWidgetBarChart/types/BarChartLayout';
4+
5+
type BarChartMargins = {
6+
top: number;
7+
right: number;
8+
bottom: number;
9+
left: number;
10+
};
11+
12+
type GetBarChartInnerPaddingProps = {
13+
chartWidth: number;
14+
chartHeight: number;
15+
dataLength: number;
16+
keysLength: number;
17+
layout: BarChartLayout;
18+
margins: BarChartMargins;
19+
groupMode?: 'grouped' | 'stacked';
20+
};
21+
22+
const MINIMUM_BAR_WIDTH = 2;
23+
24+
export const getBarChartInnerPadding = ({
25+
chartWidth,
26+
chartHeight,
27+
dataLength,
28+
keysLength,
29+
layout,
30+
margins,
31+
groupMode,
32+
}: GetBarChartInnerPaddingProps): number => {
33+
if (groupMode !== 'grouped') {
34+
return 0;
35+
}
36+
37+
if (dataLength === 0 || keysLength === 0) {
38+
return BAR_CHART_DEFAULT_INNER_PADDING;
39+
}
40+
41+
const availableSpace =
42+
layout === BarChartLayout.VERTICAL
43+
? chartWidth - margins.left - margins.right
44+
: chartHeight - margins.top - margins.bottom;
45+
46+
const spacePerGroup =
47+
(availableSpace / dataLength) * (1 - BAR_CHART_OUTER_PADDING_RATIO);
48+
49+
const spacePerBar = spacePerGroup / keysLength;
50+
51+
if (spacePerBar < MINIMUM_BAR_WIDTH + BAR_CHART_DEFAULT_INNER_PADDING) {
52+
return Math.max(0, (spacePerBar - MINIMUM_BAR_WIDTH) / 2);
53+
}
54+
55+
return BAR_CHART_DEFAULT_INNER_PADDING;
56+
};
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const LINE_CHART_MAXIMUM_NUMBER_OF_DATA_POINTS = 50;
1+
export const LINE_CHART_MAXIMUM_NUMBER_OF_DATA_POINTS = 100;
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const PIE_CHART_MAXIMUM_NUMBER_OF_SLICES = 50;
1+
export const PIE_CHART_MAXIMUM_NUMBER_OF_SLICES = 100;

0 commit comments

Comments
 (0)