@patternfly/react-table 4.44.10 → 4.44.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/dist/esm/components/Table/Table.d.ts +2 -1
- package/dist/esm/components/Table/Table.d.ts.map +1 -1
- package/dist/esm/components/Table/Table.js.map +1 -1
- package/dist/esm/components/Table/TableTypes.d.ts +2 -1
- package/dist/esm/components/Table/TableTypes.d.ts.map +1 -1
- package/dist/esm/components/Table/TableTypes.js.map +1 -1
- package/dist/esm/components/Table/base/provider.d.ts +2 -2
- package/dist/esm/components/Table/base/types.d.ts +2 -2
- package/dist/esm/components/TableComposable/TableComposable.d.ts +1 -1
- package/dist/esm/components/TableComposable/Td.d.ts +1 -1
- package/dist/js/components/Table/Table.d.ts +2 -1
- package/dist/js/components/Table/Table.d.ts.map +1 -1
- package/dist/js/components/Table/Table.js.map +1 -1
- package/dist/js/components/Table/TableTypes.d.ts +2 -1
- package/dist/js/components/Table/TableTypes.d.ts.map +1 -1
- package/dist/js/components/Table/TableTypes.js.map +1 -1
- package/dist/js/components/Table/base/provider.d.ts +2 -2
- package/dist/js/components/Table/base/types.d.ts +2 -2
- package/dist/js/components/TableComposable/TableComposable.d.ts +1 -1
- package/dist/js/components/TableComposable/Td.d.ts +1 -1
- package/dist/umd/react-table.css +5 -3
- package/dist/umd/react-table.min.css +17 -15
- package/package.json +6 -6
- package/src/components/Table/Table.tsx +2 -1
- package/src/components/Table/TableTypes.tsx +2 -1
- package/src/components/Table/examples/LegacyTableActions.tsx +218 -0
- package/src/components/Table/examples/LegacyTableBasic.tsx +90 -0
- package/src/components/Table/examples/LegacyTableCellWidth.tsx +66 -0
- package/src/components/Table/examples/LegacyTableCompoundExpandable.tsx +175 -0
- package/src/components/Table/examples/LegacyTableControllingText.tsx +51 -0
- package/src/components/Table/examples/LegacyTableEmptyState.tsx +48 -0
- package/src/components/Table/examples/LegacyTableExpandable.tsx +172 -0
- package/src/components/Table/examples/LegacyTableFavoritable.tsx +157 -0
- package/src/components/Table/examples/LegacyTableHoverable.tsx +125 -0
- package/src/components/Table/examples/LegacyTableMisc.tsx +56 -0
- package/src/components/Table/examples/LegacyTableSelectable.tsx +124 -0
- package/src/components/Table/examples/LegacyTableSelectableRadio.tsx +54 -0
- package/src/components/Table/examples/LegacyTableSortable.tsx +120 -0
- package/src/components/Table/examples/LegacyTableSortableCustom.tsx +189 -0
- package/src/components/Table/examples/LegacyTableTextModifiers.tsx +31 -0
- package/src/components/Table/examples/LegacyTableTree.tsx +213 -0
- package/src/components/Table/examples/Table.md +83 -1848
- package/src/components/TableComposable/examples/ComposableTable.md +31 -2805
- package/src/components/TableComposable/examples/ComposableTableActions.tsx +163 -0
- package/src/components/TableComposable/examples/ComposableTableBasic.tsx +89 -0
- package/src/components/TableComposable/examples/ComposableTableCellWidth.tsx +56 -0
- package/src/components/TableComposable/examples/ComposableTableCompoundExpandable.tsx +103 -0
- package/src/components/TableComposable/examples/ComposableTableControllingText.tsx +51 -0
- package/src/components/TableComposable/examples/ComposableTableDraggable.tsx +170 -0
- package/src/components/TableComposable/examples/ComposableTableEmptyState.tsx +45 -0
- package/src/components/TableComposable/examples/ComposableTableExpandable.tsx +195 -0
- package/src/components/TableComposable/examples/ComposableTableFavoritable.tsx +118 -0
- package/src/components/TableComposable/examples/ComposableTableHoverable.tsx +67 -0
- package/src/components/TableComposable/examples/ComposableTableMisc.tsx +92 -0
- package/src/components/TableComposable/examples/ComposableTableMultipleStickyColumns.tsx +153 -0
- package/src/components/TableComposable/examples/ComposableTableNestedExpandable.tsx +127 -0
- package/src/components/TableComposable/examples/ComposableTableNestedHeaders.tsx +202 -0
- package/src/components/TableComposable/examples/ComposableTableSelectable.tsx +125 -0
- package/src/components/TableComposable/examples/ComposableTableSelectableRadio.tsx +68 -0
- package/src/components/TableComposable/examples/ComposableTableSortable.tsx +107 -0
- package/src/components/TableComposable/examples/ComposableTableSortableCustom.tsx +175 -0
- package/src/components/TableComposable/examples/ComposableTableStickyColumn.tsx +144 -0
- package/src/components/TableComposable/examples/ComposableTableStickyColumnsAndHeader.tsx +167 -0
- package/src/components/TableComposable/examples/ComposableTableTextModifiers.tsx +33 -0
- package/src/components/TableComposable/examples/ComposableTableTree.tsx +201 -0
- package/src/demos/Table.md +7 -6
- package/src/components/Table/examples/DemoSortableTable.js +0 -65
- package/src/components/TableComposable/examples/DemoSortableTable.js +0 -65
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TableComposable, Thead, Tr, Th, Tbody, Td, TreeRowWrapper, TdProps } from '@patternfly/react-table';
|
|
3
|
+
import LeafIcon from '@patternfly/react-icons/dist/esm/icons/leaf-icon';
|
|
4
|
+
import FolderIcon from '@patternfly/react-icons/dist/esm/icons/folder-icon';
|
|
5
|
+
import FolderOpenIcon from '@patternfly/react-icons/dist/esm/icons/folder-open-icon';
|
|
6
|
+
|
|
7
|
+
interface RepositoriesTreeNode {
|
|
8
|
+
name: string;
|
|
9
|
+
branches: string;
|
|
10
|
+
pullRequests: string;
|
|
11
|
+
workspaces: string;
|
|
12
|
+
children?: RepositoriesTreeNode[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const ComposableTableTree: React.FunctionComponent = () => {
|
|
16
|
+
// In real usage, this data would come from some external source like an API via props.
|
|
17
|
+
const data: RepositoriesTreeNode[] = [
|
|
18
|
+
{
|
|
19
|
+
name: 'Repositories one',
|
|
20
|
+
branches: 'Branch one',
|
|
21
|
+
pullRequests: 'Pull request one',
|
|
22
|
+
workspaces: 'Workplace one',
|
|
23
|
+
children: [
|
|
24
|
+
{
|
|
25
|
+
name: 'Repositories two',
|
|
26
|
+
branches: 'Branch two',
|
|
27
|
+
pullRequests: 'Pull request two',
|
|
28
|
+
workspaces: 'Workplace two',
|
|
29
|
+
children: [
|
|
30
|
+
{
|
|
31
|
+
name: 'Repositories three',
|
|
32
|
+
branches: 'Branch three',
|
|
33
|
+
pullRequests: 'Pull request three',
|
|
34
|
+
workspaces: 'Workplace three'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'Repositories four',
|
|
38
|
+
branches: 'Branch four',
|
|
39
|
+
pullRequests: 'Pull request four',
|
|
40
|
+
workspaces: 'Workplace four'
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Repositories five',
|
|
46
|
+
branches: 'Branch five',
|
|
47
|
+
pullRequests: 'Pull request five',
|
|
48
|
+
workspaces: 'Workplace five'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'Repositories six',
|
|
52
|
+
branches: 'Branch six',
|
|
53
|
+
pullRequests: 'Pull request six',
|
|
54
|
+
workspaces: 'Workplace six'
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Repositories seven',
|
|
60
|
+
branches: 'Branch seven',
|
|
61
|
+
pullRequests: 'Pull request seven',
|
|
62
|
+
workspaces: 'Workplace seven',
|
|
63
|
+
children: [
|
|
64
|
+
{
|
|
65
|
+
name: 'Repositories eight',
|
|
66
|
+
branches: 'Branch eight',
|
|
67
|
+
pullRequests: 'Pull request eight',
|
|
68
|
+
workspaces: 'Workplace eight'
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'Repositories nine',
|
|
74
|
+
branches: 'Branch nine',
|
|
75
|
+
pullRequests: 'Pull request nine',
|
|
76
|
+
workspaces: 'Workplace nine'
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
const columnNames = {
|
|
81
|
+
name: 'Repositories',
|
|
82
|
+
branches: 'Branches',
|
|
83
|
+
prs: 'Pull requests',
|
|
84
|
+
workspaces: 'Workspaces'
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const [expandedNodeNames, setExpandedNodeNames] = React.useState<string[]>(['Repositories one']);
|
|
88
|
+
const [expandedDetailsNodeNames, setExpandedDetailsNodeNames] = React.useState<string[]>([]);
|
|
89
|
+
const [selectedNodeNames, setSelectedNodeNames] = React.useState<string[]>([]);
|
|
90
|
+
|
|
91
|
+
const getDescendants = (node: RepositoriesTreeNode): RepositoriesTreeNode[] =>
|
|
92
|
+
[node].concat(...(node.children ? node.children.map(getDescendants) : []));
|
|
93
|
+
const areAllDescendantsSelected = (node: RepositoriesTreeNode) =>
|
|
94
|
+
getDescendants(node).every(n => selectedNodeNames.includes(n.name));
|
|
95
|
+
const areSomeDescendantsSelected = (node: RepositoriesTreeNode) =>
|
|
96
|
+
getDescendants(node).some(n => selectedNodeNames.includes(n.name));
|
|
97
|
+
|
|
98
|
+
const isNodeChecked = (node: RepositoriesTreeNode) => {
|
|
99
|
+
if (areAllDescendantsSelected(node)) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
if (areSomeDescendantsSelected(node)) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
Recursive function which flattens the data into an array of flattened TreeRowWrapper components
|
|
110
|
+
params:
|
|
111
|
+
- nodes - array of a single level of tree nodes
|
|
112
|
+
- level - number representing how deeply nested the current row is
|
|
113
|
+
- posinset - position of the row relative to this row's siblings
|
|
114
|
+
- isHidden - defaults to false, true if this row's parent is expanded
|
|
115
|
+
- currentRowIndex - position of the row relative to the entire table
|
|
116
|
+
*/
|
|
117
|
+
const renderRows = (
|
|
118
|
+
[node, ...remainingNodes]: RepositoriesTreeNode[],
|
|
119
|
+
level = 1,
|
|
120
|
+
posinset = 1,
|
|
121
|
+
rowIndex = 0,
|
|
122
|
+
isHidden = false
|
|
123
|
+
): React.ReactNode[] => {
|
|
124
|
+
if (!node) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
const isExpanded = expandedNodeNames.includes(node.name);
|
|
128
|
+
const isDetailsExpanded = expandedDetailsNodeNames.includes(node.name);
|
|
129
|
+
const isChecked = isNodeChecked(node);
|
|
130
|
+
let icon = <LeafIcon />;
|
|
131
|
+
if (node.children) {
|
|
132
|
+
icon = isExpanded ? <FolderOpenIcon aria-hidden /> : <FolderIcon aria-hidden />;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const treeRow: TdProps['treeRow'] = {
|
|
136
|
+
onCollapse: () =>
|
|
137
|
+
setExpandedNodeNames(prevExpanded => {
|
|
138
|
+
const otherExpandedNodeNames = prevExpanded.filter(name => name !== node.name);
|
|
139
|
+
return isExpanded ? otherExpandedNodeNames : [...otherExpandedNodeNames, node.name];
|
|
140
|
+
}),
|
|
141
|
+
onToggleRowDetails: () =>
|
|
142
|
+
setExpandedDetailsNodeNames(prevDetailsExpanded => {
|
|
143
|
+
const otherDetailsExpandedNodeNames = prevDetailsExpanded.filter(name => name !== node.name);
|
|
144
|
+
return isDetailsExpanded ? otherDetailsExpandedNodeNames : [...otherDetailsExpandedNodeNames, node.name];
|
|
145
|
+
}),
|
|
146
|
+
onCheckChange: (_event, isChecking) => {
|
|
147
|
+
const nodeNamesToCheck = getDescendants(node).map(n => n.name);
|
|
148
|
+
setSelectedNodeNames(prevSelected => {
|
|
149
|
+
const otherSelectedNodeNames = prevSelected.filter(name => !nodeNamesToCheck.includes(name));
|
|
150
|
+
return !isChecking ? otherSelectedNodeNames : [...otherSelectedNodeNames, ...nodeNamesToCheck];
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
rowIndex,
|
|
154
|
+
props: {
|
|
155
|
+
isExpanded,
|
|
156
|
+
isDetailsExpanded,
|
|
157
|
+
isHidden,
|
|
158
|
+
'aria-level': level,
|
|
159
|
+
'aria-posinset': posinset,
|
|
160
|
+
'aria-setsize': node.children ? node.children.length : 0,
|
|
161
|
+
isChecked,
|
|
162
|
+
icon
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
return [
|
|
167
|
+
<TreeRowWrapper key={node.name} row={{ props: treeRow.props }}>
|
|
168
|
+
<Td dataLabel={columnNames.name} treeRow={treeRow}>
|
|
169
|
+
{node.name}
|
|
170
|
+
</Td>
|
|
171
|
+
<Td dataLabel={columnNames.branches}>{node.branches}</Td>
|
|
172
|
+
<Td dataLabel={columnNames.prs}>{node.pullRequests}</Td>
|
|
173
|
+
<Td dataLabel={columnNames.workspaces}>{node.workspaces}</Td>
|
|
174
|
+
</TreeRowWrapper>,
|
|
175
|
+
...(node.children && node.children.length
|
|
176
|
+
? renderRows(node.children, level + 1, 1, rowIndex + 1, !isExpanded || isHidden)
|
|
177
|
+
: []),
|
|
178
|
+
...renderRows(
|
|
179
|
+
remainingNodes,
|
|
180
|
+
level,
|
|
181
|
+
posinset + 1,
|
|
182
|
+
rowIndex + 1 + ((node.children && node.children.length) || 0),
|
|
183
|
+
isHidden
|
|
184
|
+
)
|
|
185
|
+
];
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
return (
|
|
189
|
+
<TableComposable isTreeTable aria-label="Tree table">
|
|
190
|
+
<Thead>
|
|
191
|
+
<Tr>
|
|
192
|
+
<Th>{columnNames.name}</Th>
|
|
193
|
+
<Th>{columnNames.branches}</Th>
|
|
194
|
+
<Th>{columnNames.prs}</Th>
|
|
195
|
+
<Th>{columnNames.workspaces}</Th>
|
|
196
|
+
</Tr>
|
|
197
|
+
</Thead>
|
|
198
|
+
<Tbody>{renderRows(data)}</Tbody>
|
|
199
|
+
</TableComposable>
|
|
200
|
+
);
|
|
201
|
+
};
|
package/src/demos/Table.md
CHANGED
|
@@ -333,17 +333,18 @@ class ExpandCollapseAllTableDemo extends React.Component {
|
|
|
333
333
|
this.toggleSelectAll = this.toggleSelectAll.bind(this);
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
-
onCollapse(event,
|
|
336
|
+
onCollapse(event, rowIndex, isOpen) {
|
|
337
337
|
const { rows, expandedRows, expandCollapseToggle } = this.state;
|
|
338
338
|
const expandableRowLength = this.state.rows.filter(row => row.isOpen !== undefined).length;
|
|
339
339
|
/**
|
|
340
340
|
* Please do not use rowKey as row index for more complex tables.
|
|
341
341
|
* Rather use some kind of identifier like ID passed with each row.
|
|
342
342
|
*/
|
|
343
|
-
|
|
343
|
+
const newRows = Array.from(rows);
|
|
344
|
+
newRows[rowIndex] = { ...newRows[rowIndex], isOpen };
|
|
344
345
|
const updatedExpandedRows = isOpen ? expandedRows + 1 : expandedRows - 1;
|
|
345
346
|
this.setState({
|
|
346
|
-
rows,
|
|
347
|
+
rows: newRows,
|
|
347
348
|
expandedRows: updatedExpandedRows,
|
|
348
349
|
expandCollapseToggle:
|
|
349
350
|
updatedExpandedRows === expandableRowLength
|
|
@@ -385,7 +386,7 @@ class ExpandCollapseAllTableDemo extends React.Component {
|
|
|
385
386
|
selectedRows = isSelected ? selectableRowLength : 0;
|
|
386
387
|
} else {
|
|
387
388
|
rows = [...this.state.rows];
|
|
388
|
-
rows[rowId]
|
|
389
|
+
rows[rowId] = { ...rows[rowId], selected: isSelected };
|
|
389
390
|
selectedRows = isSelected ? selectedRows + 1 : selectedRows - 1;
|
|
390
391
|
isChecked = selectedRows === 0 ? false : selectedRows === selectableRowLength ? true : null;
|
|
391
392
|
}
|
|
@@ -864,7 +865,7 @@ class ColumnManagementAction extends React.Component {
|
|
|
864
865
|
});
|
|
865
866
|
} else {
|
|
866
867
|
rows = [...this.state.rows];
|
|
867
|
-
rows[rowId]
|
|
868
|
+
rows[rowId] = { ...rows[rowId], selected: isSelected };
|
|
868
869
|
}
|
|
869
870
|
this.setState({
|
|
870
871
|
rows
|
|
@@ -1576,7 +1577,7 @@ class ColumnManagementAction extends React.Component {
|
|
|
1576
1577
|
});
|
|
1577
1578
|
} else {
|
|
1578
1579
|
rows = [...this.state.rows];
|
|
1579
|
-
rows[rowId]
|
|
1580
|
+
rows[rowId] = { ...rows[rowId], selected: isSelected };
|
|
1580
1581
|
}
|
|
1581
1582
|
this.setState({
|
|
1582
1583
|
rows
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import { Table, TableHeader, TableBody, TableVariant, sortable, SortByDirection } from '@patternfly/react-table';
|
|
4
|
-
|
|
5
|
-
export default class DemoSortableTable extends React.Component {
|
|
6
|
-
constructor(props) {
|
|
7
|
-
super(props);
|
|
8
|
-
this.state = {
|
|
9
|
-
columns: [
|
|
10
|
-
{ title: 'Repositories', transforms: [sortable] },
|
|
11
|
-
'Branches',
|
|
12
|
-
{ title: 'Pull requests', transforms: [sortable] },
|
|
13
|
-
'Workspaces',
|
|
14
|
-
'Last Commit'
|
|
15
|
-
],
|
|
16
|
-
rows: [props.firstColumnRows, ['a', 'two', 'k', 'four', 'five'], ['p', 'two', 'b', 'four', 'five']],
|
|
17
|
-
sortBy: {}
|
|
18
|
-
};
|
|
19
|
-
this.onSort = this.onSort.bind(this);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
onSort(_event, index, direction) {
|
|
23
|
-
const sortedRows = this.state.rows.sort((a, b) => {
|
|
24
|
-
if (a[index] < b[index]) {
|
|
25
|
-
return -1;
|
|
26
|
-
}
|
|
27
|
-
return a[index] > b[index] ? 1 : 0;
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
this.setState({
|
|
31
|
-
sortBy: {
|
|
32
|
-
index,
|
|
33
|
-
direction
|
|
34
|
-
},
|
|
35
|
-
rows: direction === SortByDirection.asc ? sortedRows : sortedRows.reverse()
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
render() {
|
|
40
|
-
const { id } = this.props;
|
|
41
|
-
const { columns, rows, sortBy } = this.state;
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<Table
|
|
45
|
-
aria-label="Sortable Table"
|
|
46
|
-
variant={TableVariant.compact}
|
|
47
|
-
sortBy={sortBy}
|
|
48
|
-
onSort={this.onSort}
|
|
49
|
-
cells={columns}
|
|
50
|
-
rows={rows}
|
|
51
|
-
className="pf-m-no-border-rows"
|
|
52
|
-
id={id}
|
|
53
|
-
isNested
|
|
54
|
-
>
|
|
55
|
-
<TableHeader />
|
|
56
|
-
<TableBody />
|
|
57
|
-
</Table>
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
DemoSortableTable.propTypes = {
|
|
63
|
-
firstColumnRows: PropTypes.array.isRequired,
|
|
64
|
-
id: PropTypes.string.isRequired
|
|
65
|
-
};
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import { Table, TableHeader, TableBody, TableVariant, sortable, SortByDirection } from '@patternfly/react-table';
|
|
4
|
-
|
|
5
|
-
export default class DemoSortableTable extends React.Component {
|
|
6
|
-
constructor(props) {
|
|
7
|
-
super(props);
|
|
8
|
-
this.state = {
|
|
9
|
-
columns: [
|
|
10
|
-
{ title: 'Repositories', transforms: [sortable] },
|
|
11
|
-
'Branches',
|
|
12
|
-
{ title: 'Pull requests', transforms: [sortable] },
|
|
13
|
-
'Workspaces',
|
|
14
|
-
'Last Commit'
|
|
15
|
-
],
|
|
16
|
-
rows: [props.firstColumnRows, ['a', 'two', 'k', 'four', 'five'], ['p', 'two', 'b', 'four', 'five']],
|
|
17
|
-
sortBy: {}
|
|
18
|
-
};
|
|
19
|
-
this.onSort = this.onSort.bind(this);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
onSort(_event, index, direction) {
|
|
23
|
-
const sortedRows = this.state.rows.sort((a, b) => {
|
|
24
|
-
if (a[index] < b[index]) {
|
|
25
|
-
return -1;
|
|
26
|
-
}
|
|
27
|
-
return a[index] > b[index] ? 1 : 0;
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
this.setState({
|
|
31
|
-
sortBy: {
|
|
32
|
-
index,
|
|
33
|
-
direction
|
|
34
|
-
},
|
|
35
|
-
rows: direction === SortByDirection.asc ? sortedRows : sortedRows.reverse()
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
render() {
|
|
40
|
-
const { id } = this.props;
|
|
41
|
-
const { columns, rows, sortBy } = this.state;
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<Table
|
|
45
|
-
aria-label="Sortable Table"
|
|
46
|
-
variant={TableVariant.compact}
|
|
47
|
-
sortBy={sortBy}
|
|
48
|
-
onSort={this.onSort}
|
|
49
|
-
cells={columns}
|
|
50
|
-
rows={rows}
|
|
51
|
-
className="pf-m-no-border-rows"
|
|
52
|
-
id={id}
|
|
53
|
-
isNested
|
|
54
|
-
>
|
|
55
|
-
<TableHeader />
|
|
56
|
-
<TableBody />
|
|
57
|
-
</Table>
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
DemoSortableTable.propTypes = {
|
|
63
|
-
firstColumnRows: PropTypes.array.isRequired,
|
|
64
|
-
id: PropTypes.string.isRequired
|
|
65
|
-
};
|