Skip to content

Commit a5fe810

Browse files
committed
feat(AnalyticalTable): add noDataReason prop to NoDataComponent
1 parent 0e54e85 commit a5fe810

File tree

4 files changed

+33
-10
lines changed

4 files changed

+33
-10
lines changed

packages/main/src/components/AnalyticalTable/defaults/NoDataComponent/index.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
interface NoDataComponentProps {
2-
noDataText: string;
3-
className: string;
4-
}
1+
import type { AnalyticalTablePropTypes } from '../../types/index.js';
52

6-
export const DefaultNoDataComponent = ({ noDataText, className }: NoDataComponentProps) => {
3+
export const DefaultNoDataComponent: AnalyticalTablePropTypes['NoDataComponent'] = (props) => {
4+
const { noDataText, className } = props;
75
return (
86
<div className={className} data-component-name="AnalyticalTableNoData" role="gridcell">
97
{noDataText}

packages/main/src/components/AnalyticalTable/index.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
useSortBy,
2525
useTable,
2626
} from 'react-table';
27+
import { AnalyticalTableNoDataReason } from '../../enums/AnalyticalTableNoDataReason.js';
2728
import { AnalyticalTablePopinDisplay } from '../../enums/AnalyticalTablePopinDisplay.js';
2829
import { AnalyticalTableScaleWidthMode } from '../../enums/AnalyticalTableScaleWidthMode.js';
2930
import { AnalyticalTableSelectionBehavior } from '../../enums/AnalyticalTableSelectionBehavior.js';
@@ -85,9 +86,9 @@ import type {
8586
AnalyticalTableDomRef,
8687
AnalyticalTablePropTypes,
8788
AnalyticalTableState,
89+
CellInstance,
8890
DivWithCustomScrollProp,
8991
TableInstance,
90-
CellInstance,
9192
} from './types/index.js';
9293
import {
9394
getCombinedElementsHeight,
@@ -325,8 +326,8 @@ const AnalyticalTable = forwardRef<AnalyticalTableDomRef, AnalyticalTablePropTyp
325326

326327
const noDataTextI18n = i18nBundle.getText(LIST_NO_DATA);
327328
const noDataTextFiltered = i18nBundle.getText(NO_DATA_FILTERED);
328-
const noDataTextLocal =
329-
noDataText ?? (tableState.filters?.length > 0 || tableState.globalFilter ? noDataTextFiltered : noDataTextI18n);
329+
const noDataFiltered = tableState.filters?.length > 0 || tableState.globalFilter;
330+
const noDataTextLocal = noDataText ?? (noDataFiltered ? noDataTextFiltered : noDataTextI18n);
330331

331332
const [componentRef, analyticalTableRef] = useSyncRef<AnalyticalTableDomRef>(ref);
332333
const [cbRef, scrollToRef] = useScrollToRef(componentRef, dispatch);
@@ -844,7 +845,13 @@ const AnalyticalTable = forwardRef<AnalyticalTableDomRef, AnalyticalTablePropTyp
844845
pleaseWaitText={i18nBundle.getText(PLEASE_WAIT)}
845846
/>
846847
) : (
847-
<NoDataComponent noDataText={noDataTextLocal} className={classNames.noData} />
848+
<NoDataComponent
849+
noDataText={noDataTextLocal}
850+
className={classNames.noData}
851+
noDataReason={
852+
noDataFiltered ? AnalyticalTableNoDataReason.Filtered : AnalyticalTableNoDataReason.Empty
853+
}
854+
/>
848855
)}
849856
</div>
850857
)}

packages/main/src/components/AnalyticalTable/types/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type {
1010
RefObject,
1111
SetStateAction,
1212
} from 'react';
13+
import type { AnalyticalTableNoDataReason } from '../../../enums/AnalyticalTableNoDataReason.js';
1314
import type { AnalyticalTablePopinDisplay } from '../../../enums/AnalyticalTablePopinDisplay.js';
1415
import type { AnalyticalTableScaleWidthMode } from '../../../enums/AnalyticalTableScaleWidthMode.js';
1516
import type { AnalyticalTableScrollMode } from '../../../enums/AnalyticalTableScrollMode.js';
@@ -1040,7 +1041,11 @@ export interface AnalyticalTablePropTypes extends Omit<CommonProps, 'title'> {
10401041
*
10411042
* @default DefaultNoDataComponent
10421043
*/
1043-
NoDataComponent?: ComponentType<any>;
1044+
NoDataComponent?: ComponentType<{
1045+
noDataText: string;
1046+
className: string;
1047+
noDataReason: AnalyticalTableNoDataReason | keyof typeof AnalyticalTableNoDataReason;
1048+
}>;
10441049

10451050
/**
10461051
* Exposes the internal table instance.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* Different reasons why the `NoDataComponent` is displayed.
3+
*/
4+
export enum AnalyticalTableNoDataReason {
5+
/*
6+
* No data was passed to the table.
7+
*/
8+
Empty = 'Empty',
9+
/*
10+
* No results match the applied filters.
11+
*/
12+
Filtered = 'Filtered',
13+
}

0 commit comments

Comments
 (0)