diff --git a/packages/react-table/src/docs/demos/Table.md b/packages/react-table/src/docs/demos/Table.md index aa3afbf8413..59893dcf8b3 100644 --- a/packages/react-table/src/docs/demos/Table.md +++ b/packages/react-table/src/docs/demos/Table.md @@ -317,648 +317,7 @@ class BulkSelectTableDemo extends React.Component { ### Column management -```js -import React from 'react'; -import { - Button, - DataList, - DataListCheck, - DataListItem, - DataListItemRow, - DataListCell, - DataListItemCells, - Toolbar, - ToolbarContent, - ToolbarItem, - Modal, - OverflowMenu, - OverflowMenuGroup, - OverflowMenuItem, - OptionsMenu, - OptionsMenuToggle, - Pagination, - PaginationVariant, - Text, - TextContent, - Select, - SelectVariant -} from '@patternfly/react-core'; -import { Table, TableHeader, TableBody } from '@patternfly/react-table'; -import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon'; -import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-icon'; -import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon'; -import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon'; -import SortAmountDownIcon from '@patternfly/react-icons/dist/esm/icons/sort-amount-down-icon'; - -class ColumnManagementAction extends React.Component { - constructor(props) { - super(props); - this.actions = [ - { - title: Link - }, - { - title: 'Action' - }, - { - isSeparator: true - }, - { - title: Separated link - } - ]; - this.defaultColumns = ['Repositories', 'Branches', 'Pull requests', 'Workspaces', 'Last commit', '']; - this.defaultRows = [ - { - cells: [ - { - title: ( - -
Node 1
- siemur/test-space -
- ), - props: { column: 'Repositories' } - }, - { - title: ( - - 10 - - ), - props: { column: 'Branches' } - }, - { - title: ( - - 25 - - ), - props: { column: 'Pull requests' } - }, - { - title: ( - - 5 - - ), - props: { column: 'Workspaces' } - }, - { - title: '2 days ago', - props: { column: 'Last commit' } - }, - { - title: ( - - Action link - - ), - props: { column: '' } - } - ] - }, - { - cells: [ - { - title: ( - -
Node 2
- siemur/test-space -
- ), - props: { column: 'Repositories' } - }, - { - title: ( - - 8 - - ), - props: { column: 'Branches' } - }, - { - title: ( - - 30 - - ), - props: { column: 'Pull requests' } - }, - { - title: ( - - 2 - - ), - props: { column: 'Workspaces' } - }, - { - title: '2 days ago', - props: { column: 'Last commit' } - }, - { - title: ( - - Action link - - ), - props: { column: '' } - } - ] - }, - { - cells: [ - { - title: ( - -
Node 3
- siemur/test-space -
- ), - props: { column: 'Repositories' } - }, - { - title: ( - - 12 - - ), - props: { column: 'Branches' } - }, - { - title: ( - - 48 - - ), - props: { column: 'Pull requests' } - }, - { - title: ( - - 13 - - ), - props: { column: 'Workspaces' } - }, - { - title: '30 days ago', - props: { column: 'Last commit' } - }, - { - title: ( - - Action link - - ), - props: { column: '' } - } - ] - }, - { - cells: [ - { - title: ( - -
Node 4
- siemur/test-space -
- ), - props: { column: 'Repositories' } - }, - { - title: ( - - 3 - - ), - props: { column: 'Branches' } - }, - { - title: ( - - 8 - - ), - props: { column: 'Pull requests' } - }, - { - title: ( - - 20 - - ), - props: { column: 'Workspaces' } - }, - { - title: '8 days ago', - props: { column: 'Last commit' } - }, - { - title: ( - - Action link - - ), - props: { column: '' } - } - ] - }, - { - cells: [ - { - title: ( - -
Node 5
- siemur/test-space -
- ), - props: { column: 'Repositories' } - }, - { - title: ( - - 34 - - ), - props: { column: 'Branches' } - }, - { - title: ( - - 21 - - ), - props: { column: 'Pull requests' } - }, - { - title: ( - - 26 - - ), - props: { column: 'Workspaces' } - }, - { - title: '2 days ago', - props: { column: 'Last commit' } - }, - { - title: ( - - Action link - - ), - props: { column: '' } - } - ] - } - ]; - this.state = { - filters: [], - filteredColumns: [], - filteredRows: [], - columns: this.defaultColumns, - rows: this.defaultRows, - canSelectAll: true, - isModalOpen: false, - check1: true, - check2: true, - check3: true, - check4: true, - check5: true - }; - this.onSelect = this.onSelect.bind(this); - this.toggleSelect = this.toggleSelect.bind(this); - this.renderModal = this.renderModal.bind(this); - this.matchCheckboxNameToColumn = name => { - switch (name) { - case 'check1': - return 'Repositories'; - case 'check2': - return 'Branches'; - case 'check3': - return 'Pull requests'; - case 'check4': - return 'Workspaces'; - case 'check5': - return 'Last commit'; - } - }; - this.filterData = (checked, name) => { - const { rows, columns, filters } = this.state; - if (checked) { - const updatedFilters = filters.filter(item => item !== name); - const filteredColumns = this.defaultColumns.filter(column => !updatedFilters.includes(column)); - const filteredRows = this.defaultRows.map(({ ...row }) => { - row.cells = row.cells.filter(cell => !updatedFilters.includes(cell.props.column)); - return row; - }); - this.setState({ - filters: updatedFilters, - filteredColumns: filteredColumns, - filteredRows: filteredRows - }); - } else { - let updatedFilters = filters; - updatedFilters.push(name); - const filteredColumns = columns.filter(column => !filters.includes(column)); - const filteredRows = rows.map(({ ...row }) => { - row.cells = row.cells.filter(cell => !filters.includes(cell.props.column)); - return row; - }); - this.setState({ - filters: updatedFilters, - filteredColumns: filteredColumns, - filteredRows: filteredRows - }); - } - }; - this.unfilterAllData = () => { - this.setState({ - filters: [], - filteredColumns: this.defaultColumns, - filteredRows: this.defaultRows - }); - }; - this.handleChange = (checked, event) => { - const target = event.target; - const value = target.type === 'checkbox' ? target.checked : target.value; - this.filterData(checked, this.matchCheckboxNameToColumn(target.name)); - this.setState({ - [target.name]: value - }); - }; - this.handleModalToggle = () => { - this.setState(({ isModalOpen }) => ({ - isModalOpen: !isModalOpen - })); - }; - this.onSave = () => { - this.setState(({ filteredColumns, filteredRows, isModalOpen }) => ({ - columns: filteredColumns, - rows: filteredRows, - isModalOpen: !isModalOpen - })); - }; - this.selectAllColumns = () => { - this.unfilterAllData(); - this.setState({ - check1: true, - check2: true, - check3: true, - check4: true, - check5: true - }); - }; - } - - onSelect(event, isSelected, rowId) { - let rows; - if (rowId === -1) { - rows = this.state.rows.map(oneRow => { - oneRow.selected = isSelected; - return oneRow; - }); - } else { - rows = [...this.state.rows]; - rows[rowId] = { ...rows[rowId], selected: isSelected }; - } - this.setState({ - rows - }); - } - - toggleSelect(checked) { - this.setState({ - canSelectAll: checked - }); - } - - renderModal() { - const { isModalOpen } = this.state; - return ( - - Selected categories will be displayed in the table. - - - } - onClose={this.handleModalToggle} - actions={[ - , - - ]} - > - - - - - - - - ]} - /> - - - - - - - - - ]} - /> - - - - - - - - - ]} - /> - - - - - - - - - ]} - /> - - - - - - - - - ]} - /> - - - - - ); - } - - render() { - const { canSelectAll, columns, rows } = this.state; - - const toolbarItems = ( - - - - - - - + Name + + } + /> + + + + + + + + + + + + + + {renderPagination()} + + + + ); + + return ( + + + + + {toolbarItems} + + + + {managedColumns.map((column, columnIndex) => ( + {column} + ))} + + + + {paginatedRows.map((row, rowIndex) => ( + + <> + {Object.entries(row).map(([key, value]) => + key === 'status' ? ( + + {renderLabel(value)} + + ) : key === 'url' ? ( + + + {row.url} + + + ) : ( + + {value} + + ) + )} + + + ))} + + + {renderPagination()} + {renderModal()} + + + + + ); +};