Skip to content

Commit 1d7bad7

Browse files
authored
fix(AnalyticalTable): adjust NoDataComponent height to "Auto" mode height (#8047)
Fixes #8046
1 parent 941a3fd commit 1d7bad7

File tree

3 files changed

+79
-4
lines changed

3 files changed

+79
-4
lines changed

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

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import ValueState from '@ui5/webcomponents-base/dist/types/ValueState.js';
2+
import NoDataIllustration from '@ui5/webcomponents-fiori/dist/illustrations/NoData.js';
3+
import NoFilterResults from '@ui5/webcomponents-fiori/dist/illustrations/NoFilterResults.js';
24
import paperPlaneIcon from '@ui5/webcomponents-icons/paper-plane.js';
5+
import { isIOS, isMac } from '@ui5/webcomponents-react-base/Device';
36
import { ThemingParameters } from '@ui5/webcomponents-react-base/ThemingParameters';
7+
import type { ComponentClass, ComponentProps } from 'react';
48
import { useCallback, useEffect, useMemo, useRef, useState, version as reactVersion } from 'react';
59
import type {
610
AnalyticalTableCellInstance,
@@ -53,6 +57,7 @@ import {
5357
FileUploader,
5458
IndicationColor,
5559
Icon,
60+
IllustratedMessage,
5661
Input,
5762
MessageViewButton,
5863
MultiComboBox,
@@ -80,7 +85,6 @@ import { useRowDisableSelection } from './pluginHooks/useRowDisableSelection';
8085
import { cssVarToRgb, cypressPassThroughTestsFactory } from '@/cypress/support/utils';
8186
import type { RowType } from '@/packages/main/src/components/AnalyticalTable/types/index.js';
8287
import { getUi5TagWithSuffix } from '@/packages/main/src/internal/utils.js';
83-
import { isIOS, isMac } from '@ui5/webcomponents-react-base/Device';
8488

8589
const canUseVoiceOver = isIOS() || isMac();
8690

@@ -1859,6 +1863,70 @@ describe('AnalyticalTable', () => {
18591863
cy.findByText('No data found. Try adjusting the filter settings.').should('be.visible');
18601864
});
18611865

1866+
it('NoDataComponent', () => {
1867+
const NoDataComponent = (
1868+
props: ComponentProps<Exclude<AnalyticalTablePropTypes['NoDataComponent'], ComponentClass<any>>>,
1869+
) => {
1870+
return props.noDataReason === 'Filtered' ? (
1871+
<IllustratedMessage role={props.accessibleRole} name={NoFilterResults} />
1872+
) : (
1873+
<IllustratedMessage role={props.accessibleRole} name={NoDataIllustration} />
1874+
);
1875+
};
1876+
1877+
cy.mount(<AnalyticalTable data={data} columns={columns} NoDataComponent={NoDataComponent} />);
1878+
cy.get('[data-component-name="AnalyticalTableBody"]').should('have.attr', 'style').and('include', 'height: 220px');
1879+
cy.mount(<AnalyticalTable data={[]} columns={columns} NoDataComponent={NoDataComponent} />);
1880+
cy.get('[data-component-name="AnalyticalTableNoDataContainer"]')
1881+
.should('have.attr', 'style')
1882+
.and('include', 'height: 220px');
1883+
1884+
cy.mount(
1885+
<div style={{ height: '400px' }}>
1886+
<AnalyticalTable
1887+
data={[...data, ...data]}
1888+
columns={columns}
1889+
NoDataComponent={NoDataComponent}
1890+
visibleRowCountMode="Auto"
1891+
/>
1892+
</div>,
1893+
);
1894+
cy.get('[data-component-name="AnalyticalTableBody"]').should('have.attr', 'style').and('include', 'height: 352px');
1895+
cy.mount(
1896+
<div style={{ height: '400px' }}>
1897+
<AnalyticalTable data={[]} columns={columns} NoDataComponent={NoDataComponent} visibleRowCountMode="Auto" />
1898+
</div>,
1899+
);
1900+
cy.get('[data-component-name="AnalyticalTableNoDataContainer"]')
1901+
.should('have.attr', 'style')
1902+
.and('include', 'height: 352px');
1903+
1904+
cy.mount(
1905+
<div style={{ height: '400px' }}>
1906+
<AnalyticalTable
1907+
data={data}
1908+
columns={columns}
1909+
NoDataComponent={NoDataComponent}
1910+
visibleRowCountMode="AutoWithEmptyRows"
1911+
/>
1912+
</div>,
1913+
);
1914+
cy.get('[data-component-name="AnalyticalTableBody"]').should('have.attr', 'style').and('include', 'height: 352px');
1915+
cy.mount(
1916+
<div style={{ height: '400px' }}>
1917+
<AnalyticalTable
1918+
data={[]}
1919+
columns={columns}
1920+
NoDataComponent={NoDataComponent}
1921+
visibleRowCountMode="AutoWithEmptyRows"
1922+
/>
1923+
</div>,
1924+
);
1925+
cy.get('[data-component-name="AnalyticalTableNoDataContainer"]')
1926+
.should('have.attr', 'style')
1927+
.and('include', 'height: 352px');
1928+
});
1929+
18621930
it('Alternate Row Color', () => {
18631931
const standardRowColor = cssVarToRgb(ThemingParameters.sapList_Background);
18641932
const alternatingRowColor = cssVarToRgb(ThemingParameters.sapList_AlternatingBackground);

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,8 @@ export const NoData: Story = {
627627
NoDataComponent: NoDataComponent,
628628
};
629629

630+
const isAutoRowCount = args.visibleRowCountMode?.startsWith('Auto');
631+
630632
return (
631633
<>
632634
<SegmentedButton onSelectionChange={handleChange} accessibleName="Select data view mode">
@@ -645,11 +647,15 @@ export const NoData: Story = {
645647
Table filtered
646648
</ToggleButton>
647649
{context.viewMode === 'story' ? (
648-
<AnalyticalTable {...tableProps} />
650+
<div style={{ height: isAutoRowCount ? '300px' : 'auto' }}>
651+
<AnalyticalTable {...tableProps} />
652+
</div>
649653
) : (
650654
<>
651655
<hr />
652-
<ToggleableTable {...tableProps} />
656+
<div style={{ height: isAutoRowCount ? '300px' : 'auto' }}>
657+
<ToggleableTable {...tableProps} />
658+
</div>
653659
</>
654660
)}
655661
</>

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,8 @@ const AnalyticalTable = forwardRef<AnalyticalTableDomRef, AnalyticalTablePropTyp
579579
return tableState.bodyHeight;
580580
}
581581
let rowNum;
582-
if (visibleRowCountMode === AnalyticalTableVisibleRowCountMode.AutoWithEmptyRows) {
582+
const noDataAuto = !rows.length && visibleRowCountMode.startsWith('Auto');
583+
if (visibleRowCountMode === AnalyticalTableVisibleRowCountMode.AutoWithEmptyRows || noDataAuto) {
583584
rowNum = internalVisibleRowCount;
584585
} else {
585586
rowNum = rows.length < internalVisibleRowCount ? Math.max(rows.length, minRows) : internalVisibleRowCount;

0 commit comments

Comments
 (0)