@patternfly/react-table 6.0.0-alpha.1 → 6.0.0-alpha.10

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.
Files changed (268) hide show
  1. package/CHANGELOG.md +286 -0
  2. package/README.md +2 -2
  3. package/components/package.json +1 -1
  4. package/deprecated/package.json +1 -1
  5. package/dist/dynamic/components/Table/package.json +1 -1
  6. package/dist/dynamic/components/Table/utils/decorators/package.json +1 -1
  7. package/dist/dynamic/components/Table/utils/package.json +1 -1
  8. package/dist/dynamic/deprecated/components/Table/base/package.json +1 -1
  9. package/dist/dynamic/deprecated/components/Table/package.json +1 -1
  10. package/dist/dynamic/deprecated/components/package.json +1 -1
  11. package/dist/esm/components/Table/ActionsColumn.d.ts +1 -1
  12. package/dist/esm/components/Table/ActionsColumn.d.ts.map +1 -1
  13. package/dist/esm/components/Table/Caption.js +1 -1
  14. package/dist/esm/components/Table/Caption.js.map +1 -1
  15. package/dist/esm/components/Table/CollapseColumn.js +1 -1
  16. package/dist/esm/components/Table/CollapseColumn.js.map +1 -1
  17. package/dist/esm/components/Table/DraggableRowWrapper.js +2 -2
  18. package/dist/esm/components/Table/DraggableRowWrapper.js.map +1 -1
  19. package/dist/esm/components/Table/EditColumn.js +1 -1
  20. package/dist/esm/components/Table/EditColumn.js.map +1 -1
  21. package/dist/esm/components/Table/EditableSelectInputCell.js +3 -3
  22. package/dist/esm/components/Table/EditableSelectInputCell.js.map +1 -1
  23. package/dist/esm/components/Table/EditableTextCell.js +3 -3
  24. package/dist/esm/components/Table/EditableTextCell.js.map +1 -1
  25. package/dist/esm/components/Table/ExpandableRowContent.js +1 -1
  26. package/dist/esm/components/Table/ExpandableRowContent.js.map +1 -1
  27. package/dist/esm/components/Table/HeaderCellInfoWrapper.js +1 -1
  28. package/dist/esm/components/Table/HeaderCellInfoWrapper.js.map +1 -1
  29. package/dist/esm/components/Table/InnerScrollContainer.js +1 -1
  30. package/dist/esm/components/Table/InnerScrollContainer.js.map +1 -1
  31. package/dist/esm/components/Table/OuterScrollContainer.js +1 -1
  32. package/dist/esm/components/Table/OuterScrollContainer.js.map +1 -1
  33. package/dist/esm/components/Table/RowWrapper.d.ts +1 -1
  34. package/dist/esm/components/Table/SelectColumn.d.ts +5 -0
  35. package/dist/esm/components/Table/SelectColumn.d.ts.map +1 -1
  36. package/dist/esm/components/Table/SelectColumn.js +6 -3
  37. package/dist/esm/components/Table/SelectColumn.js.map +1 -1
  38. package/dist/esm/components/Table/SortColumn.d.ts +4 -0
  39. package/dist/esm/components/Table/SortColumn.d.ts.map +1 -1
  40. package/dist/esm/components/Table/SortColumn.js +3 -3
  41. package/dist/esm/components/Table/SortColumn.js.map +1 -1
  42. package/dist/esm/components/Table/Table.d.ts +1 -1
  43. package/dist/esm/components/Table/Table.d.ts.map +1 -1
  44. package/dist/esm/components/Table/Table.js +5 -5
  45. package/dist/esm/components/Table/Table.js.map +1 -1
  46. package/dist/esm/components/Table/TableText.d.ts +3 -1
  47. package/dist/esm/components/Table/TableText.d.ts.map +1 -1
  48. package/dist/esm/components/Table/TableText.js +13 -11
  49. package/dist/esm/components/Table/TableText.js.map +1 -1
  50. package/dist/esm/components/Table/TableTypes.d.ts +3 -0
  51. package/dist/esm/components/Table/TableTypes.d.ts.map +1 -1
  52. package/dist/esm/components/Table/Tbody.d.ts +1 -1
  53. package/dist/esm/components/Table/Tbody.d.ts.map +1 -1
  54. package/dist/esm/components/Table/Tbody.js +1 -1
  55. package/dist/esm/components/Table/Tbody.js.map +1 -1
  56. package/dist/esm/components/Table/Td.d.ts +1 -1
  57. package/dist/esm/components/Table/Td.d.ts.map +1 -1
  58. package/dist/esm/components/Table/Td.js +9 -5
  59. package/dist/esm/components/Table/Td.js.map +1 -1
  60. package/dist/esm/components/Table/Th.d.ts +4 -1
  61. package/dist/esm/components/Table/Th.d.ts.map +1 -1
  62. package/dist/esm/components/Table/Th.js +20 -10
  63. package/dist/esm/components/Table/Th.js.map +1 -1
  64. package/dist/esm/components/Table/Thead.d.ts +1 -1
  65. package/dist/esm/components/Table/Thead.d.ts.map +1 -1
  66. package/dist/esm/components/Table/Thead.js +1 -1
  67. package/dist/esm/components/Table/Thead.js.map +1 -1
  68. package/dist/esm/components/Table/Tr.d.ts +2 -2
  69. package/dist/esm/components/Table/Tr.d.ts.map +1 -1
  70. package/dist/esm/components/Table/Tr.js +2 -2
  71. package/dist/esm/components/Table/Tr.js.map +1 -1
  72. package/dist/esm/components/Table/TreeRowWrapper.js +2 -2
  73. package/dist/esm/components/Table/TreeRowWrapper.js.map +1 -1
  74. package/dist/esm/components/Table/base/provider.d.ts +8 -8
  75. package/dist/esm/components/Table/base/types.d.ts +7 -7
  76. package/dist/esm/components/Table/utils/decorators/cellActions.js +1 -1
  77. package/dist/esm/components/Table/utils/decorators/cellActions.js.map +1 -1
  78. package/dist/esm/components/Table/utils/decorators/cellWidth.js +1 -1
  79. package/dist/esm/components/Table/utils/decorators/cellWidth.js.map +1 -1
  80. package/dist/esm/components/Table/utils/decorators/classNames.js +1 -1
  81. package/dist/esm/components/Table/utils/decorators/classNames.js.map +1 -1
  82. package/dist/esm/components/Table/utils/decorators/collapsible.js +1 -1
  83. package/dist/esm/components/Table/utils/decorators/collapsible.js.map +1 -1
  84. package/dist/esm/components/Table/utils/decorators/compoundExpand.js +1 -1
  85. package/dist/esm/components/Table/utils/decorators/compoundExpand.js.map +1 -1
  86. package/dist/esm/components/Table/utils/decorators/editable.js +1 -1
  87. package/dist/esm/components/Table/utils/decorators/editable.js.map +1 -1
  88. package/dist/esm/components/Table/utils/decorators/favoritable.js +1 -1
  89. package/dist/esm/components/Table/utils/decorators/favoritable.js.map +1 -1
  90. package/dist/esm/components/Table/utils/decorators/info.js +1 -1
  91. package/dist/esm/components/Table/utils/decorators/info.js.map +1 -1
  92. package/dist/esm/components/Table/utils/decorators/selectable.d.ts.map +1 -1
  93. package/dist/esm/components/Table/utils/decorators/selectable.js +4 -4
  94. package/dist/esm/components/Table/utils/decorators/selectable.js.map +1 -1
  95. package/dist/esm/components/Table/utils/decorators/sortable.d.ts.map +1 -1
  96. package/dist/esm/components/Table/utils/decorators/sortable.js +7 -4
  97. package/dist/esm/components/Table/utils/decorators/sortable.js.map +1 -1
  98. package/dist/esm/components/Table/utils/decorators/treeRow.d.ts +3 -3
  99. package/dist/esm/components/Table/utils/decorators/treeRow.d.ts.map +1 -1
  100. package/dist/esm/components/Table/utils/decorators/treeRow.js +5 -5
  101. package/dist/esm/components/Table/utils/decorators/treeRow.js.map +1 -1
  102. package/dist/esm/components/Table/utils/decorators/wrappable.js +1 -1
  103. package/dist/esm/components/Table/utils/decorators/wrappable.js.map +1 -1
  104. package/dist/esm/demos/index.d.ts +2 -0
  105. package/dist/esm/demos/index.d.ts.map +1 -0
  106. package/dist/esm/demos/index.js +2 -0
  107. package/dist/esm/demos/index.js.map +1 -0
  108. package/dist/esm/demos/sampleData.d.ts +13 -0
  109. package/dist/esm/demos/sampleData.d.ts.map +1 -0
  110. package/dist/esm/demos/sampleData.js +764 -0
  111. package/dist/esm/demos/sampleData.js.map +1 -0
  112. package/dist/esm/deprecated/components/Table/Body.d.ts +1 -1
  113. package/dist/esm/deprecated/components/Table/Body.d.ts.map +1 -1
  114. package/dist/esm/deprecated/components/Table/Table.d.ts +1 -1
  115. package/dist/esm/deprecated/components/Table/Table.js +1 -1
  116. package/dist/esm/deprecated/components/Table/Table.js.map +1 -1
  117. package/dist/esm/deprecated/components/Table/base/body.d.ts +8 -2
  118. package/dist/esm/deprecated/components/Table/base/body.d.ts.map +1 -1
  119. package/dist/esm/deprecated/components/Table/base/header.d.ts +1 -1
  120. package/dist/esm/deprecated/components/Table/base/header.d.ts.map +1 -1
  121. package/dist/esm/index.d.ts +1 -0
  122. package/dist/esm/index.d.ts.map +1 -1
  123. package/dist/esm/index.js +1 -0
  124. package/dist/esm/index.js.map +1 -1
  125. package/dist/js/components/Table/ActionsColumn.d.ts +1 -1
  126. package/dist/js/components/Table/ActionsColumn.d.ts.map +1 -1
  127. package/dist/js/components/Table/ActionsColumn.js +6 -6
  128. package/dist/js/components/Table/ActionsColumn.js.map +1 -1
  129. package/dist/js/components/Table/CollapseColumn.js +2 -2
  130. package/dist/js/components/Table/CollapseColumn.js.map +1 -1
  131. package/dist/js/components/Table/DraggableCell.js +2 -2
  132. package/dist/js/components/Table/DraggableCell.js.map +1 -1
  133. package/dist/js/components/Table/EditColumn.js +4 -4
  134. package/dist/js/components/Table/EditColumn.js.map +1 -1
  135. package/dist/js/components/Table/EditableSelectInputCell.js +2 -2
  136. package/dist/js/components/Table/EditableSelectInputCell.js.map +1 -1
  137. package/dist/js/components/Table/EditableTextCell.js +2 -2
  138. package/dist/js/components/Table/EditableTextCell.js.map +1 -1
  139. package/dist/js/components/Table/FavoritesCell.js +2 -2
  140. package/dist/js/components/Table/FavoritesCell.js.map +1 -1
  141. package/dist/js/components/Table/HeaderCellInfoWrapper.js +4 -4
  142. package/dist/js/components/Table/HeaderCellInfoWrapper.js.map +1 -1
  143. package/dist/js/components/Table/RowWrapper.d.ts +1 -1
  144. package/dist/js/components/Table/RowWrapper.js +2 -1
  145. package/dist/js/components/Table/RowWrapper.js.map +1 -1
  146. package/dist/js/components/Table/SelectColumn.d.ts +5 -0
  147. package/dist/js/components/Table/SelectColumn.d.ts.map +1 -1
  148. package/dist/js/components/Table/SelectColumn.js +6 -3
  149. package/dist/js/components/Table/SelectColumn.js.map +1 -1
  150. package/dist/js/components/Table/SortColumn.d.ts +4 -0
  151. package/dist/js/components/Table/SortColumn.d.ts.map +1 -1
  152. package/dist/js/components/Table/SortColumn.js +6 -5
  153. package/dist/js/components/Table/SortColumn.js.map +1 -1
  154. package/dist/js/components/Table/Table.d.ts +1 -1
  155. package/dist/js/components/Table/Table.d.ts.map +1 -1
  156. package/dist/js/components/Table/Table.js +2 -2
  157. package/dist/js/components/Table/Table.js.map +1 -1
  158. package/dist/js/components/Table/TableText.d.ts +3 -1
  159. package/dist/js/components/Table/TableText.d.ts.map +1 -1
  160. package/dist/js/components/Table/TableText.js +13 -11
  161. package/dist/js/components/Table/TableText.js.map +1 -1
  162. package/dist/js/components/Table/TableTypes.d.ts +3 -0
  163. package/dist/js/components/Table/TableTypes.d.ts.map +1 -1
  164. package/dist/js/components/Table/TableTypes.js +4 -0
  165. package/dist/js/components/Table/TableTypes.js.map +1 -1
  166. package/dist/js/components/Table/Tbody.d.ts +1 -1
  167. package/dist/js/components/Table/Tbody.d.ts.map +1 -1
  168. package/dist/js/components/Table/Td.d.ts +1 -1
  169. package/dist/js/components/Table/Td.d.ts.map +1 -1
  170. package/dist/js/components/Table/Td.js +8 -4
  171. package/dist/js/components/Table/Td.js.map +1 -1
  172. package/dist/js/components/Table/Th.d.ts +4 -1
  173. package/dist/js/components/Table/Th.d.ts.map +1 -1
  174. package/dist/js/components/Table/Th.js +18 -8
  175. package/dist/js/components/Table/Th.js.map +1 -1
  176. package/dist/js/components/Table/Thead.d.ts +1 -1
  177. package/dist/js/components/Table/Thead.d.ts.map +1 -1
  178. package/dist/js/components/Table/Tr.d.ts +2 -2
  179. package/dist/js/components/Table/Tr.d.ts.map +1 -1
  180. package/dist/js/components/Table/Tr.js +1 -1
  181. package/dist/js/components/Table/Tr.js.map +1 -1
  182. package/dist/js/components/Table/base/provider.d.ts +8 -8
  183. package/dist/js/components/Table/base/types.d.ts +7 -7
  184. package/dist/js/components/Table/base/types.js +4 -0
  185. package/dist/js/components/Table/base/types.js.map +1 -1
  186. package/dist/js/components/Table/utils/decorators/selectable.d.ts.map +1 -1
  187. package/dist/js/components/Table/utils/decorators/selectable.js +2 -2
  188. package/dist/js/components/Table/utils/decorators/selectable.js.map +1 -1
  189. package/dist/js/components/Table/utils/decorators/sortable.d.ts.map +1 -1
  190. package/dist/js/components/Table/utils/decorators/sortable.js +7 -4
  191. package/dist/js/components/Table/utils/decorators/sortable.js.map +1 -1
  192. package/dist/js/components/Table/utils/decorators/treeRow.d.ts +3 -3
  193. package/dist/js/components/Table/utils/decorators/treeRow.d.ts.map +1 -1
  194. package/dist/js/components/Table/utils/decorators/treeRow.js +7 -7
  195. package/dist/js/components/Table/utils/decorators/treeRow.js.map +1 -1
  196. package/dist/js/demos/index.d.ts +2 -0
  197. package/dist/js/demos/index.d.ts.map +1 -0
  198. package/dist/js/demos/index.js +5 -0
  199. package/dist/js/demos/index.js.map +1 -0
  200. package/dist/js/demos/sampleData.d.ts +13 -0
  201. package/dist/js/demos/sampleData.d.ts.map +1 -0
  202. package/dist/js/demos/sampleData.js +767 -0
  203. package/dist/js/demos/sampleData.js.map +1 -0
  204. package/dist/js/deprecated/components/Table/Body.d.ts +1 -1
  205. package/dist/js/deprecated/components/Table/Body.d.ts.map +1 -1
  206. package/dist/js/deprecated/components/Table/BodyCell.js +4 -3
  207. package/dist/js/deprecated/components/Table/BodyCell.js.map +1 -1
  208. package/dist/js/deprecated/components/Table/Table.d.ts +1 -1
  209. package/dist/js/deprecated/components/Table/Table.js +1 -1
  210. package/dist/js/deprecated/components/Table/Table.js.map +1 -1
  211. package/dist/js/deprecated/components/Table/base/body.d.ts +8 -2
  212. package/dist/js/deprecated/components/Table/base/body.d.ts.map +1 -1
  213. package/dist/js/deprecated/components/Table/base/header.d.ts +1 -1
  214. package/dist/js/deprecated/components/Table/base/header.d.ts.map +1 -1
  215. package/dist/js/index.d.ts +1 -0
  216. package/dist/js/index.d.ts.map +1 -1
  217. package/dist/js/index.js +1 -0
  218. package/dist/js/index.js.map +1 -1
  219. package/dist/umd/react-table.min.js +9 -9
  220. package/package.json +6 -6
  221. package/src/components/Table/EditableSelectInputCell.tsx +1 -1
  222. package/src/components/Table/EditableTextCell.tsx +1 -1
  223. package/src/components/Table/SelectColumn.tsx +27 -8
  224. package/src/components/Table/SortColumn.tsx +15 -1
  225. package/src/components/Table/Table.tsx +2 -2
  226. package/src/components/Table/TableText.tsx +19 -9
  227. package/src/components/Table/TableTypes.tsx +3 -0
  228. package/src/components/Table/Td.tsx +10 -5
  229. package/src/components/Table/Th.tsx +22 -8
  230. package/src/components/Table/Tr.tsx +1 -1
  231. package/src/components/Table/examples/Table.md +3 -0
  232. package/src/components/Table/examples/TableCompoundExpandable.tsx +2 -1
  233. package/src/components/Table/examples/TableMisc.tsx +3 -1
  234. package/src/components/Table/examples/TableNestedHeaders.tsx +4 -3
  235. package/src/components/Table/examples/TableNestedStickyHeader.tsx +4 -3
  236. package/src/components/Table/examples/TableStickyColumnsAndHeader.tsx +5 -4
  237. package/src/components/Table/utils/decorators/selectable.tsx +2 -1
  238. package/src/components/Table/utils/decorators/sortable.tsx +8 -2
  239. package/src/components/Table/utils/decorators/treeRow.tsx +3 -3
  240. package/src/components/Table/utils/transformers.test.tsx +14 -8
  241. package/src/demos/Table.md +159 -0
  242. package/src/demos/examples/TableAutomaticPagination.tsx +101 -0
  243. package/src/{docs/demos/table-demos/BulkSelect.jsx → demos/examples/TableBulkSelect.tsx} +41 -20
  244. package/src/demos/examples/TableColumnManagement.tsx +486 -0
  245. package/src/demos/examples/TableColumnManagementWithDraggable.tsx +641 -0
  246. package/src/{docs/demos/table-demos/Compact.jsx → demos/examples/TableCompact.tsx} +32 -16
  247. package/src/{docs/demos/table-demos/CompoundExpansion.jsx → demos/examples/TableCompoundExpansion.tsx} +27 -13
  248. package/src/demos/examples/TableEmptyStateDefault.tsx +60 -0
  249. package/src/demos/examples/TableEmptyStateError.tsx +53 -0
  250. package/src/demos/examples/TableEmptyStateLoading.tsx +43 -0
  251. package/src/{docs/demos/table-demos/ExpandCollapseAll.jsx → demos/examples/TableExpandCollapseAll.tsx} +17 -10
  252. package/src/demos/examples/TableFilterable.tsx +394 -0
  253. package/src/{docs/demos/table-demos/SortableResponsive.jsx → demos/examples/TableSortableResponsive.tsx} +30 -28
  254. package/src/{docs/demos/table-demos/StaticBottomPagination.jsx → demos/examples/TableStaticBottomPagination.tsx} +22 -9
  255. package/src/{docs/demos/table-demos/StickyFirstColumn.jsx → demos/examples/TableStickyFirstColumn.tsx} +31 -9
  256. package/src/{docs/demos/table-demos/StickyHeader.jsx → demos/examples/TableStickyHeader.tsx} +3 -3
  257. package/src/demos/index.ts +1 -0
  258. package/src/{docs/demos/table-demos/sampleData.js → demos/sampleData.tsx} +88 -77
  259. package/src/deprecated/components/Table/__tests__/Table.test.tsx +4 -9
  260. package/src/deprecated/components/Table/__tests__/__snapshots__/Table.test.tsx.snap +8 -8
  261. package/src/deprecated/components/Table/examples/LegacyTableCompoundExpandable.tsx +4 -3
  262. package/src/deprecated/components/Table/examples/LegacyTableMisc.tsx +4 -3
  263. package/src/deprecated/components/Table/examples/LegacyTableSelectable.tsx +2 -1
  264. package/src/deprecated/components/Table/examples/LegacyTableStripedCustomTr.tsx +2 -6
  265. package/src/deprecated/components/Table/examples/Table.md +2 -0
  266. package/src/index.ts +1 -0
  267. package/src/docs/demos/Table.md +0 -1622
  268. package/src/docs/demos/table-demos/ColumnManagement.jsx +0 -471
@@ -1,471 +0,0 @@
1
- import React from 'react';
2
-
3
- import {
4
- Button,
5
- Card,
6
- DataList,
7
- DataListCheck,
8
- DataListItem,
9
- DataListItemRow,
10
- DataListCell,
11
- DataListItemCells,
12
- Label,
13
- Toolbar,
14
- ToolbarContent,
15
- ToolbarItem,
16
- MenuToggle,
17
- Modal,
18
- OverflowMenu,
19
- OverflowMenuGroup,
20
- OverflowMenuItem,
21
- PageSection,
22
- Pagination,
23
- PaginationVariant,
24
- Text,
25
- TextContent,
26
- TextVariants
27
- } from '@patternfly/react-core';
28
- import { Table, TableText, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table';
29
- import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';
30
- import SortAmountDownIcon from '@patternfly/react-icons/dist/esm/icons/sort-amount-down-icon';
31
- import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper.js';
32
- import { capitalize } from '@patternfly/react-table/src/components/Table/utils/utils';
33
- import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData';
34
-
35
- export const ColumnManagementAction = () => {
36
- const defaultColumns = columns;
37
- const defaultRows = rows;
38
-
39
- const [filters, setFilters] = React.useState([]);
40
- const [filteredColumns, setFilteredColumns] = React.useState([]);
41
- const [filteredRows, setFilteredRows] = React.useState([]);
42
- const [managedColumns, setManagedColumns] = React.useState(defaultColumns);
43
- const [managedRows, setManagedRows] = React.useState(defaultRows);
44
- const [isModalOpen, setIsModalOpen] = React.useState(false);
45
- const [checkedState, setCheckedState] = React.useState(Array(columns.length).fill(true));
46
- const [page, setPage] = React.useState(1);
47
- const [perPage, setPerPage] = React.useState(10);
48
- const [paginatedRows, setPaginatedRows] = React.useState(rows);
49
-
50
- const matchCheckboxNameToColumn = (name) => {
51
- switch (name) {
52
- case 'check1':
53
- return 'Servers';
54
- case 'check2':
55
- return 'Threads';
56
- case 'check3':
57
- return 'Applications';
58
- case 'check4':
59
- return 'Workspaces';
60
- case 'check5':
61
- return 'Status';
62
- case 'check6':
63
- return 'Location';
64
- case 'check7':
65
- return 'Last Modified';
66
- case 'check8':
67
- return 'URL';
68
- }
69
- };
70
- const matchSelectedColumnNameToAttr = (name) => {
71
- switch (name) {
72
- case 'Servers':
73
- return 'name';
74
- case 'Threads':
75
- return 'threads';
76
- case 'Applications':
77
- return 'applications';
78
- case 'Workspaces':
79
- return 'workspaces';
80
- case 'Status':
81
- return 'status';
82
- case 'Location':
83
- return 'location';
84
- case 'Last Modified':
85
- return 'lastModified';
86
- case 'URL':
87
- return 'url';
88
- }
89
- };
90
-
91
- // Pagination logic
92
- const handleSetPage = (_evt, newPage) => {
93
- setPage(newPage);
94
- };
95
-
96
- const handlePerPageSelect = (_evt, newPerPage) => {
97
- setPerPage(newPerPage);
98
- };
99
-
100
- const renderPagination = (variant, isCompact) => (
101
- <Pagination
102
- isCompact={isCompact}
103
- itemCount={rows.length}
104
- page={page}
105
- perPage={perPage}
106
- onSetPage={handleSetPage}
107
- onPerPageSelect={handlePerPageSelect}
108
- variant={variant}
109
- titles={{
110
- paginationAriaLabel: `${variant} pagination`
111
- }}
112
- />
113
- );
114
-
115
- React.useEffect(() => {
116
- setPaginatedRows(managedRows.slice((page - 1) * perPage, page * perPage - 1));
117
- }, [managedRows, page, perPage]);
118
-
119
- // Removes attribute from each node object in Data.jsx
120
- const removePropFromObject = (object, keys) =>
121
- keys.reduce((obj, prop) => {
122
- const { [prop]: _, ...keep } = obj;
123
- return keep;
124
- }, object);
125
-
126
- // Filters columns out of table that are not selected in the column management modal
127
- const filterData = (checked, name) => {
128
- const selectedColumn = matchSelectedColumnNameToAttr(name);
129
-
130
- const filteredRows = [];
131
- if (checked) {
132
- const updatedFilters = filters.filter((item) => item !== selectedColumn);
133
-
134
- // Only show the names of columns that were selected in the modal
135
- const filteredColumns = defaultColumns.filter(
136
- (column) => !updatedFilters.includes(matchSelectedColumnNameToAttr(column))
137
- );
138
-
139
- // Remove the attributes (i.e. "columns") that were not selected
140
- defaultRows.forEach((item) => filteredRows.push(removePropFromObject(item, updatedFilters)));
141
-
142
- setFilters(updatedFilters);
143
- setFilteredColumns(filteredColumns);
144
- setFilteredRows(filteredRows);
145
- } else {
146
- let updatedFilters = filters;
147
- updatedFilters.push(selectedColumn);
148
-
149
- // Only show the names of columns that were selected in the modal
150
- const filteredColumns = managedColumns.filter(
151
- (column) => !filters.includes(matchSelectedColumnNameToAttr(column))
152
- );
153
-
154
- // Remove the attributes (i.e. "columns") that were not selected
155
- managedRows.forEach((item) => filteredRows.push(removePropFromObject(item, updatedFilters)));
156
-
157
- setFilters(updatedFilters);
158
- setFilteredColumns(filteredColumns);
159
- setFilteredRows(filteredRows);
160
- }
161
- };
162
- const unfilterAllData = () => {
163
- setFilters([]);
164
- setFilteredColumns(defaultColumns);
165
- setFilteredRows(defaultRows);
166
- };
167
-
168
- const handleChange = (event, checked) => {
169
- const target = event.target;
170
- const value = target.type === 'checkbox' ? target.checked : target.value;
171
-
172
- // Remove any columns from the table that aren't checked
173
- filterData(checked, matchCheckboxNameToColumn(target.name));
174
- const checkedIndex = columns.findIndex((element) => element === matchCheckboxNameToColumn(target.name));
175
-
176
- const updatedCheckedState = [...checkedState];
177
- updatedCheckedState[checkedIndex] = value;
178
- setCheckedState(updatedCheckedState);
179
- };
180
-
181
- const handleModalToggle = (_event) => {
182
- setIsModalOpen(!isModalOpen);
183
- };
184
-
185
- const onSave = () => {
186
- setManagedColumns(filteredColumns);
187
- setManagedRows(filteredRows);
188
- setPaginatedRows(filteredRows);
189
- setIsModalOpen(!isModalOpen);
190
- };
191
-
192
- const selectAllColumns = () => {
193
- unfilterAllData();
194
- setCheckedState(Array(columns.length).fill(true));
195
- };
196
-
197
- const renderModal = () => {
198
- return (
199
- <Modal
200
- title="Manage columns"
201
- isOpen={isModalOpen}
202
- variant="small"
203
- description={
204
- <TextContent>
205
- <Text component={TextVariants.p}>Selected categories will be displayed in the table.</Text>
206
- <Button isInline onClick={selectAllColumns} variant="link">
207
- Select all
208
- </Button>
209
- </TextContent>
210
- }
211
- onClose={handleModalToggle}
212
- actions={[
213
- <Button key="save" variant="primary" onClick={onSave}>
214
- Save
215
- </Button>,
216
- <Button key="cancel" variant="secondary" onClick={handleModalToggle}>
217
- Cancel
218
- </Button>
219
- ]}
220
- >
221
- <DataList aria-label="Table column management" id="table-column-management" isCompact>
222
- <DataListItem aria-labelledby="table-column-management-item1">
223
- <DataListItemRow>
224
- <DataListCheck
225
- aria-labelledby="table-column-management-item1"
226
- checked={checkedState[0]}
227
- name="check1"
228
- id="check1"
229
- onChange={handleChange}
230
- />
231
- <DataListItemCells
232
- dataListCells={[
233
- <DataListCell id="table-column-management-item1" key="table-column-management-item1">
234
- <label htmlFor="check1">{columns[0]}</label>
235
- </DataListCell>
236
- ]}
237
- />
238
- </DataListItemRow>
239
- </DataListItem>
240
- <DataListItem aria-labelledby="table-column-management-item2">
241
- <DataListItemRow>
242
- <DataListCheck
243
- aria-labelledby="table-column-management-item2"
244
- checked={checkedState[1]}
245
- name="check2"
246
- id="check2"
247
- onChange={handleChange}
248
- />
249
- <DataListItemCells
250
- dataListCells={[
251
- <DataListCell id="table-column-management-item2" key="table-column-management-item2">
252
- <label htmlFor="check2">{columns[1]}</label>
253
- </DataListCell>
254
- ]}
255
- />
256
- </DataListItemRow>
257
- </DataListItem>
258
- <DataListItem aria-labelledby="table-column-management-item3">
259
- <DataListItemRow>
260
- <DataListCheck
261
- aria-labelledby="table-column-management-item3"
262
- checked={checkedState[2]}
263
- name="check3"
264
- id="check3"
265
- onChange={handleChange}
266
- />
267
- <DataListItemCells
268
- dataListCells={[
269
- <DataListCell id="table-column-management-item3" key="table-column-management-item3">
270
- <label htmlFor="check3">{columns[2]}</label>
271
- </DataListCell>
272
- ]}
273
- />
274
- </DataListItemRow>
275
- </DataListItem>
276
- <DataListItem aria-labelledby="table-column-management-item4">
277
- <DataListItemRow>
278
- <DataListCheck
279
- aria-labelledby="table-column-management-item4"
280
- checked={checkedState[3]}
281
- name="check4"
282
- id="check4"
283
- onChange={handleChange}
284
- />
285
- <DataListItemCells
286
- dataListCells={[
287
- <DataListCell id="table-column-management-item4" key="table-column-management-item4">
288
- <label htmlFor="check4">{columns[3]}</label>
289
- </DataListCell>
290
- ]}
291
- />
292
- </DataListItemRow>
293
- </DataListItem>
294
- <DataListItem aria-labelledby="table-column-management-item4">
295
- <DataListItemRow>
296
- <DataListCheck
297
- aria-labelledby="table-column-management-item4"
298
- checked={checkedState[4]}
299
- name="check5"
300
- id="check5"
301
- onChange={handleChange}
302
- />
303
- <DataListItemCells
304
- dataListCells={[
305
- <DataListCell id="table-column-management-item4" key="table-column-management-item4">
306
- <label htmlFor="check5">{columns[4]}</label>
307
- </DataListCell>
308
- ]}
309
- />
310
- </DataListItemRow>
311
- </DataListItem>
312
- <DataListItem aria-labelledby="table-column-management-item5">
313
- <DataListItemRow>
314
- <DataListCheck
315
- aria-labelledby="table-column-management-item5"
316
- checked={checkedState[5]}
317
- name="check6"
318
- id="check6"
319
- onChange={handleChange}
320
- />
321
- <DataListItemCells
322
- dataListCells={[
323
- <DataListCell id="table-column-management-item5" key="table-column-management-item5">
324
- <label htmlFor="check6">{columns[5]}</label>
325
- </DataListCell>
326
- ]}
327
- />
328
- </DataListItemRow>
329
- </DataListItem>
330
- <DataListItem aria-labelledby="table-column-management-item6">
331
- <DataListItemRow>
332
- <DataListCheck
333
- aria-labelledby="table-column-management-item6"
334
- checked={checkedState[6]}
335
- name="check7"
336
- id="check7"
337
- onChange={handleChange}
338
- />
339
- <DataListItemCells
340
- dataListCells={[
341
- <DataListCell id="table-column-management-item6" key="table-column-management-item5">
342
- <label htmlFor="check7">{columns[6]}</label>
343
- </DataListCell>
344
- ]}
345
- />
346
- </DataListItemRow>
347
- </DataListItem>
348
- <DataListItem aria-labelledby="table-column-management-item5">
349
- <DataListItemRow>
350
- <DataListCheck
351
- aria-labelledby="table-column-management-item5"
352
- checked={checkedState[7]}
353
- name="check8"
354
- id="check8"
355
- onChange={handleChange}
356
- />
357
- <DataListItemCells
358
- dataListCells={[
359
- <DataListCell id="table-column-management-item7" key="table-column-management-item7">
360
- <label htmlFor="check8">{columns[7]}</label>
361
- </DataListCell>
362
- ]}
363
- />
364
- </DataListItemRow>
365
- </DataListItem>
366
- </DataList>
367
- </Modal>
368
- );
369
- };
370
-
371
- const renderLabel = (labelText) => {
372
- switch (labelText) {
373
- case 'Running':
374
- return <Label color="green">{labelText}</Label>;
375
- case 'Stopped':
376
- return <Label color="orange">{labelText}</Label>;
377
- case 'Needs Maintenance':
378
- return <Label color="blue">{labelText}</Label>;
379
- case 'Down':
380
- return <Label color="red">{labelText}</Label>;
381
- }
382
- };
383
-
384
- const toolbarItems = (
385
- <React.Fragment>
386
- <Toolbar id="page-layout-table-column-management-action-toolbar-top">
387
- <span id="page-layout-table-column-management-action-toolbar-top-select-checkbox-label" hidden>
388
- Choose one
389
- </span>
390
- <ToolbarContent>
391
- <ToolbarItem variant="overflow-menu">
392
- <OverflowMenu breakpoint="md">
393
- <OverflowMenuItem>
394
- <MenuToggle>
395
- <FilterIcon /> Name
396
- </MenuToggle>
397
- </OverflowMenuItem>
398
- <OverflowMenuItem>
399
- <MenuToggle variant="plain" aria-label="Sort columns">
400
- <SortAmountDownIcon aria-hidden="true" />
401
- </MenuToggle>
402
- </OverflowMenuItem>
403
- <OverflowMenuGroup groupType="button" isPersistent>
404
- <OverflowMenuItem>
405
- <Button variant="primary">Action</Button>
406
- </OverflowMenuItem>
407
- <OverflowMenuItem breakpoint="md" isPersistent>
408
- <Button variant="link" onClick={handleModalToggle}>
409
- Manage columns
410
- </Button>
411
- </OverflowMenuItem>
412
- </OverflowMenuGroup>
413
- </OverflowMenu>
414
- </ToolbarItem>
415
- <ToolbarItem variant="pagination">{renderPagination(PaginationVariant.top)}</ToolbarItem>
416
- </ToolbarContent>
417
- </Toolbar>
418
- </React.Fragment>
419
- );
420
-
421
- return (
422
- <React.Fragment>
423
- <DashboardWrapper hasPageTemplateTitle>
424
- <PageSection isFilled>
425
- <Card>
426
- {toolbarItems}
427
- <Table variant="compact" aria-label="Column Management Table">
428
- <Thead>
429
- <Tr>
430
- {managedColumns.map((column, columnIndex) => (
431
- <Th key={columnIndex}>{column}</Th>
432
- ))}
433
- </Tr>
434
- </Thead>
435
- <Tbody>
436
- {paginatedRows.map((row, rowIndex) => (
437
- <Tr key={rowIndex}>
438
- <>
439
- {Object.entries(row).map(([key, value]) =>
440
- key === 'status' ? (
441
- <Td width={15} dataLabel="Status">
442
- {renderLabel(value)}
443
- </Td>
444
- ) : key === 'url' ? (
445
- <Td width={10} dataLabel="URL" modifier="truncate">
446
- <TableText>
447
- <a href="#">{row.url}</a>
448
- </TableText>
449
- </Td>
450
- ) : (
451
- <Td
452
- width={key === 'name' ? 15 : 10}
453
- dataLabel={key === 'lastModified' ? 'Last modified' : capitalize(key)}
454
- >
455
- {value}
456
- </Td>
457
- )
458
- )}
459
- </>
460
- </Tr>
461
- ))}
462
- </Tbody>
463
- </Table>
464
- {renderPagination(PaginationVariant.bottom)}
465
- {renderModal()}
466
- </Card>
467
- </PageSection>
468
- </DashboardWrapper>
469
- </React.Fragment>
470
- );
471
- };