Skip to content

Commit 71fcb40

Browse files
authored
feat(charts): introduce loadingDelay prop (#6027)
1 parent ca13875 commit 71fcb40

File tree

13 files changed

+46
-7
lines changed

13 files changed

+46
-7
lines changed

packages/charts/src/components/BarChart/BarChart.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export interface BarChartProps extends IChartBaseProps {
130130
const BarChart = forwardRef<HTMLDivElement, BarChartProps>((props, ref) => {
131131
const {
132132
loading,
133+
loadingDelay,
133134
dataset,
134135
noLegend,
135136
noAnimation,
@@ -226,6 +227,7 @@ const BarChart = forwardRef<HTMLDivElement, BarChartProps>((props, ref) => {
226227
<ChartContainer
227228
dataset={dataset}
228229
loading={loading}
230+
loadingDelay={loadingDelay}
229231
Placeholder={ChartPlaceholder ?? BarChartPlaceholder}
230232
ref={componentRef}
231233
style={style}

packages/charts/src/components/BulletChart/BulletChart.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ type AvailableChartTypes = 'primary' | 'comparison' | 'additional' | string;
128128
const BulletChart = forwardRef<HTMLDivElement, BulletChartProps>((props, ref) => {
129129
const {
130130
loading,
131+
loadingDelay,
131132
dataset,
132133
onDataPointClick,
133134
noLegend,
@@ -271,6 +272,7 @@ const BulletChart = forwardRef<HTMLDivElement, BulletChartProps>((props, ref) =>
271272
<ChartContainer
272273
ref={componentRef}
273274
loading={loading}
275+
loadingDelay={loadingDelay}
274276
dataset={dataset}
275277
Placeholder={ChartPlaceholder ?? Placeholder}
276278
style={style}

packages/charts/src/components/ColumnChart/ColumnChart.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ const valueAccessor =
128128
const ColumnChart = forwardRef<HTMLDivElement, ColumnChartProps>((props, ref) => {
129129
const {
130130
loading,
131+
loadingDelay,
131132
dataset,
132133
noLegend,
133134
noAnimation,
@@ -225,6 +226,7 @@ const ColumnChart = forwardRef<HTMLDivElement, ColumnChartProps>((props, ref) =>
225226
<ChartContainer
226227
dataset={dataset}
227228
loading={loading}
229+
loadingDelay={loadingDelay}
228230
Placeholder={ChartPlaceholder ?? ColumnChartPlaceholder}
229231
ref={componentRef}
230232
style={style}

packages/charts/src/components/ColumnChartWithTrend/ColumnChartWithTrend.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ type AvailableChartTypes = 'line' | 'bar' | string;
106106
const ColumnChartWithTrend = forwardRef<HTMLDivElement, ColumnChartWithTrendProps>((props, ref) => {
107107
const {
108108
loading,
109+
loadingDelay,
109110
dataset,
110111
style,
111112
className,
@@ -177,6 +178,7 @@ const ColumnChartWithTrend = forwardRef<HTMLDivElement, ColumnChartWithTrendProp
177178
tooltipConfig={lineTooltipConfig}
178179
noAnimation={noAnimation}
179180
loading={loading}
181+
loadingDelay={loadingDelay}
180182
onClick={onClick}
181183
syncId={syncId}
182184
style={{ ...style, height: `calc(${style?.height} * 0.2)` }}
@@ -201,6 +203,7 @@ const ColumnChartWithTrend = forwardRef<HTMLDivElement, ColumnChartWithTrendProp
201203
noAnimation={noAnimation}
202204
noLegend={noLegend}
203205
loading={loading}
206+
loadingDelay={loadingDelay}
204207
onClick={onClick}
205208
onDataPointClick={onDataPointClick}
206209
syncId={syncId}

packages/charts/src/components/ComposedChart/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ type AvailableChartTypes = 'line' | 'bar' | 'area' | string;
142142
const ComposedChart = forwardRef<HTMLDivElement, ComposedChartProps>((props, ref) => {
143143
const {
144144
loading,
145+
loadingDelay,
145146
dataset,
146147
onDataPointClick,
147148
noLegend,
@@ -276,6 +277,7 @@ const ComposedChart = forwardRef<HTMLDivElement, ComposedChartProps>((props, ref
276277
<ChartContainer
277278
ref={componentRef}
278279
loading={loading}
280+
loadingDelay={loadingDelay}
279281
dataset={dataset}
280282
Placeholder={ChartPlaceholder ?? Placeholder}
281283
style={style}

packages/charts/src/components/LineChart/LineChart.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ const LineChart = forwardRef<HTMLDivElement, LineChartProps>((props, ref) => {
115115
const {
116116
dataset,
117117
loading,
118+
loadingDelay,
118119
noLegend,
119120
noAnimation,
120121
tooltipConfig,
@@ -214,6 +215,7 @@ const LineChart = forwardRef<HTMLDivElement, LineChartProps>((props, ref) => {
214215
<ChartContainer
215216
dataset={dataset}
216217
loading={loading}
218+
loadingDelay={loadingDelay}
217219
Placeholder={ChartPlaceholder ?? LineChartPlaceholder}
218220
ref={componentRef}
219221
style={style}

packages/charts/src/components/MicroBarChart/MicroBarChart.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ const resolveColor = (index: number, color = null) => {
9090
* The `MicroBarChart` compares different values of the same category to each other by displaying them in a compact way.
9191
*/
9292
const MicroBarChart = forwardRef<HTMLDivElement, MicroBarChartProps>((props, ref) => {
93-
const { loading, dataset, onDataPointClick, style, className, slot, ChartPlaceholder, ...rest } = props;
93+
const { loading, loadingDelay, dataset, onDataPointClick, style, className, slot, ChartPlaceholder, ...rest } = props;
9494

9595
useStylesheet(styleData, MicroBarChart.displayName);
9696

@@ -140,6 +140,7 @@ const MicroBarChart = forwardRef<HTMLDivElement, MicroBarChartProps>((props, ref
140140
<ChartContainer
141141
dataset={dataset}
142142
loading={loading}
143+
loadingDelay={loadingDelay}
143144
Placeholder={ChartPlaceholder ?? BarChartPlaceholder}
144145
ref={ref}
145146
style={style}

packages/charts/src/components/PieChart/PieChart.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ const tooltipItemDefaultStyle = { color: 'var (--sapTextColor)' };
9191
const PieChart = forwardRef<HTMLDivElement, PieChartProps>((props, ref) => {
9292
const {
9393
loading,
94+
loadingDelay,
9495
dataset,
9596
noLegend,
9697
noAnimation,
@@ -267,6 +268,7 @@ const PieChart = forwardRef<HTMLDivElement, PieChartProps>((props, ref) => {
267268
dataset={dataset}
268269
ref={ref}
269270
loading={loading}
271+
loadingDelay={loadingDelay}
270272
Placeholder={ChartPlaceholder ?? PieChartPlaceholder}
271273
style={style}
272274
className={className}

packages/charts/src/components/RadarChart/RadarChart.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ const measureDefaults = {
8080
const RadarChart = forwardRef<HTMLDivElement, RadarChartProps>((props, ref) => {
8181
const {
8282
loading,
83+
loadingDelay,
8384
dataset,
8485
noLegend,
8586
noAnimation,
@@ -166,6 +167,7 @@ const RadarChart = forwardRef<HTMLDivElement, RadarChartProps>((props, ref) => {
166167
dataset={dataset}
167168
ref={ref}
168169
loading={loading}
170+
loadingDelay={loadingDelay}
169171
Placeholder={ChartPlaceholder ?? PieChartPlaceholder}
170172
style={style}
171173
className={className}

packages/charts/src/components/RadialChart/RadialChart.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ interface RadialChartConfig {
1717

1818
[rest: string]: any;
1919
}
20-
20+
//todo expose `loading`
2121
export interface RadialChartProps extends Omit<CommonProps, 'onClick' | 'children' | 'onLegendClick'> {
2222
/**
2323
* The actual value which defines how much the ring is filled.
@@ -126,6 +126,8 @@ const RadialChart = forwardRef<HTMLDivElement, RadialChartProps>((props, ref) =>
126126

127127
return (
128128
<ChartContainer
129+
loading={undefined}
130+
loadingDelay={undefined}
129131
dataset={dataset}
130132
ref={ref}
131133
Placeholder={PieChartPlaceholder}

packages/charts/src/components/ScatterChart/ScatterChart.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ const ScatterChart = forwardRef<HTMLDivElement, ScatterChartProps>((props, ref)
133133
const {
134134
dataset,
135135
loading,
136+
loadingDelay,
136137
noLegend,
137138
noAnimation,
138139
tooltipConfig,
@@ -216,6 +217,7 @@ const ScatterChart = forwardRef<HTMLDivElement, ScatterChartProps>((props, ref)
216217
<ChartContainer
217218
dataset={dataset}
218219
loading={loading}
220+
loadingDelay={loadingDelay}
219221
Placeholder={ChartPlaceholder ?? ScatterChartPlaceholder}
220222
ref={componentRef}
221223
style={style}

packages/charts/src/interfaces/IChartBaseProps.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ export interface IChartBaseProps<T = ICartesianChartConfig> extends Omit<CommonP
77
/**
88
* Flag whether the chart should display a loading indicator.
99
*
10-
* This can either be a placeholder shimmer (in case the chart has no data yet) or a small
11-
* loading bar in the top of the chart (in case the chart has already some data to display).
10+
* This can either be a skeleton placeholder shimmer (in case the chart has no data yet) or a `BusyIndicator` on top of the chart (in case the chart has already some data to display).
1211
*/
1312
loading?: boolean;
13+
/**
14+
* Defines the delay in milliseconds, after which the `BusyIndicator` will be visible on the screen.
15+
*
16+
* @default 1000
17+
*/
18+
loadingDelay?: number;
1419
/**
1520
* The `dataset` is an array of object which will be displayed in the chart.
1621
*/

packages/charts/src/internal/ChartContainer.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ addCustomCSSWithScoping(
2323

2424
export interface ContainerProps extends CommonProps {
2525
children: ReactElement;
26-
Placeholder?: ComponentType;
26+
Placeholder: ComponentType;
2727
dataset: unknown[];
28-
loading?: boolean;
28+
loading: boolean;
29+
loadingDelay: number;
2930
resizeDebounce: number;
3031
}
3132

@@ -49,7 +50,17 @@ class ErrorBoundary extends Component<{ children: ReactNode }, { errorCount: num
4950
}
5051

5152
const ChartContainer = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => {
52-
const { Placeholder, loading = false, dataset, className, slot, children, resizeDebounce, ...rest } = props;
53+
const {
54+
Placeholder,
55+
loading = false,
56+
dataset,
57+
className,
58+
slot,
59+
children,
60+
resizeDebounce,
61+
loadingDelay,
62+
...rest
63+
} = props;
5364

5465
useStylesheet(styleData, ChartContainer.displayName);
5566

@@ -60,6 +71,7 @@ const ChartContainer = forwardRef<HTMLDivElement, ContainerProps>((props, ref) =
6071
{loading && (
6172
<BusyIndicator
6273
active
74+
delay={loadingDelay}
6375
className={classNames.busyIndicator}
6476
data-component-name="ChartContainerBusyIndicator"
6577
/>

0 commit comments

Comments
 (0)