Skip to content

docs(Table): improve story #6498

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 126 additions & 13 deletions packages/main/src/webComponents/Table/Table.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,32 @@ import * as ComponentStories from './Table.stories';

## Growing Table

`Table` with `growing={TableGrowingMode.Scroll}`.
`Table` with growing feature (`<TableGrowing onLoadMore={onLoadMore} type={TableGrowingMode.Scroll} />`):

<Canvas of={ComponentStories.GrowingTable} />

### Code
<details>

<summary>Show code</summary>

```jsx
const createRows = (indexOffset) => {
return new Array(25).fill('').map((_, index) => (
<TableRow key={`${index + indexOffset} - row`}>
<TableRow key={`${index + indexOffset}-row`}>
<TableCell>
<span>{index + indexOffset}</span>
</TableCell>
<TableCell>
<span>Placeholder</span>
</TableCell>
<TableCell>
<Label>{index + indexOffset}</Label>
<span>Placeholder 2</span>
</TableCell>
<TableCell>
<Label>Placeholder</Label>
<span>Placeholder 3</span>
</TableCell>
<TableCell>
<span>Placeholder 4</span>
</TableCell>
</TableRow>
));
Expand All @@ -59,18 +70,27 @@ const GrowingTable = () => {
return (
<div style={{ height: '250px', overflow: 'auto' }}>
<Table
onLoadMore={onLoadMore}
growing={TableGrowingMode.Scroll}
{...otherProps}
headerRow={
<TableHeaderRow>
<TableHeaderCell>
<Label>Column 1</Label>
<TableHeaderRow sticky>
<TableHeaderCell width={'200px'} minWidth={'200px'}>
<span>Product</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'200px'}>
<span>Supplier</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'200px'}>
<span>Dimensions</span>
</TableHeaderCell>
<TableHeaderCell>
<Label>Column 2</Label>
<TableHeaderCell minWidth={'100px'} maxWidth="200px">
<span>Weight</span>
</TableHeaderCell>
</>
<TableHeaderCell minWidth="200px">
<span>Price</span>
</TableHeaderCell>
</TableHeaderRow>
}
features={<TableGrowing onLoadMore={onLoadMore} type={TableGrowingMode.Scroll} />}
>
{rows}
</Table>
Expand All @@ -79,6 +99,99 @@ const GrowingTable = () => {
};
```

</details>

## Table with row selection

`Table` with selection feature (`<TableSelection mode="Multiple" />`):

<Canvas of={ComponentStories.WithSelection} />

<details>

<summary>Show code</summary>

```jsx
function TableWithRowSelection() {
const [mode, setMode] = useState(TableSelectionMode.Multiple);
return (
<>
<SegmentedButton
onSelectionChange={(e) => {
setMode(e.detail.selectedItems[0].textContent);
}}
>
{Object.values(TableSelectionMode).map((selectionMode) => (
<SegmentedButtonItem key={selectionMode} selected={selectionMode === mode}>
{selectionMode}
</SegmentedButtonItem>
))}
</SegmentedButton>
<Table
{...otherProps}
headerRow={
<TableHeaderRow sticky>
<TableHeaderCell width={'200px'} minWidth={'200px'}>
<span>Product</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'200px'}>
<span>Supplier</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'200px'}>
<span>Dimensions</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'100px'} maxWidth="200px">
<span>Weight</span>
</TableHeaderCell>
<TableHeaderCell minWidth="200px">
<span>Price</span>
</TableHeaderCell>
</TableHeaderRow>
}
features={<TableSelection mode={mode} />}
>
<TableRow>
<TableCell>
<span>Notebook Basic</span>
</TableCell>
<TableCell>
<span>Very Best Screens</span>
</TableCell>
<TableCell>
<span>30 x 18 x 3cm</span>
</TableCell>
<TableCell>
<span>4.2KG</span>
</TableCell>
<TableCell>
<span>956EUR</span>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<span>Notebook Basic 17HT-1001</span>
</TableCell>
<TableCell>
<span>Very Best Screens</span>
</TableCell>
<TableCell>
<span>29 x 17 x 3.1cm</span>
</TableCell>
<TableCell>
<span>4.5KG</span>
</TableCell>
<TableCell>
<span>1249EUR</span>
</TableCell>
</TableRow>
</Table>
</>
);
}
```

</details>

<Markdown>{SubcomponentsSection}</Markdown>

## TableHeaderRow
Expand Down
79 changes: 72 additions & 7 deletions packages/main/src/webComponents/Table/Table.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import type { Meta, StoryObj } from '@storybook/react';
import TableGrowingMode from '@ui5/webcomponents/dist/types/TableGrowingMode.js';
import TableSelectionMode from '@ui5/webcomponents/dist/types/TableSelectionMode.js';
import { SegmentedButton, SegmentedButtonItem } from '@ui5/webcomponents-react';
import { useState } from 'react';
import { TableCell } from '../TableCell/index.js';
import { TableGrowing } from '../TableGrowing/index.js';
import { TableHeaderCell } from '../TableHeaderCell/index.js';
import { TableHeaderRow } from '../TableHeaderRow/index.js';
import { TableRow } from '../TableRow/index.js';
import { TableSelection } from '../TableSelection/index.js';
import { Table } from './index.js';

const meta = {
Expand All @@ -19,19 +22,19 @@ const meta = {
args: {
headerRow: (
<TableHeaderRow sticky>
<TableHeaderCell width={'12rem'}>
<TableHeaderCell width={'200px'} minWidth={'200px'}>
<span>Product</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'800px'}>
<TableHeaderCell minWidth={'200px'}>
<span>Supplier</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'600px'}>
<TableHeaderCell minWidth={'200px'}>
<span>Dimensions</span>
</TableHeaderCell>
<TableHeaderCell minWidth={'600px'}>
<TableHeaderCell minWidth={'100px'} maxWidth="200px">
<span>Weight</span>
</TableHeaderCell>
<TableHeaderCell>
<TableHeaderCell minWidth="200px">
<span>Price</span>
</TableHeaderCell>
</TableHeaderRow>
Expand Down Expand Up @@ -100,6 +103,12 @@ export const GrowingTable: Story = {
<TableCell>
<span>Placeholder 2</span>
</TableCell>
<TableCell>
<span>Placeholder 3</span>
</TableCell>
<TableCell>
<span>Placeholder 4</span>
</TableCell>
</TableRow>
));
};
Expand All @@ -109,11 +118,67 @@ export const GrowingTable: Story = {
};
return (
<div style={{ height: '250px', overflow: 'auto' }}>
<Table {...args}>
<Table {...args} features={<TableGrowing onLoadMore={onLoadMore} type={TableGrowingMode.Scroll} />}>
{rows}
<TableGrowing slot="features" onLoadMore={onLoadMore} type={TableGrowingMode.Button} />
</Table>
</div>
);
}
};

export const WithSelection: Story = {
render(args) {
const [mode, setMode] = useState<TableSelectionMode>(TableSelectionMode.Multiple);
return (
<>
<SegmentedButton
onSelectionChange={(e) => {
setMode(e.detail.selectedItems[0].textContent);
}}
>
{Object.values(TableSelectionMode).map((selectionMode) => (
<SegmentedButtonItem key={selectionMode} selected={selectionMode === mode}>
{selectionMode}
</SegmentedButtonItem>
))}
</SegmentedButton>
<Table {...args} features={<TableSelection mode={mode} />}>
<TableRow>
<TableCell>
<span>Notebook Basic</span>
</TableCell>
<TableCell>
<span>Very Best Screens</span>
</TableCell>
<TableCell>
<span>30 x 18 x 3cm</span>
</TableCell>
<TableCell>
<span>4.2KG</span>
</TableCell>
<TableCell>
<span>956EUR</span>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<span>Notebook Basic 17HT-1001</span>
</TableCell>
<TableCell>
<span>Very Best Screens</span>
</TableCell>
<TableCell>
<span>29 x 17 x 3.1cm</span>
</TableCell>
<TableCell>
<span>4.5KG</span>
</TableCell>
<TableCell>
<span>1249EUR</span>
</TableCell>
</TableRow>
</Table>
</>
);
}
};
Loading