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

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 +290 -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
@@ -29,6 +29,9 @@ import {
29
29
  IRowData,
30
30
  ISeparator
31
31
  } from '../TableTypes';
32
+ import { css } from '@patternfly/react-styles';
33
+ import tableStyles from '@patternfly/react-styles/css/components/Table/table';
34
+ import dropdownStyles from '@patternfly/react-styles/css/components/Dropdown/dropdown';
32
35
 
33
36
  const testCellActions = async ({
34
37
  actions,
@@ -65,7 +68,7 @@ const testCellActions = async ({
65
68
  actions = actionResolver(rowData, extraData);
66
69
  }
67
70
 
68
- expect(returnedData).toMatchObject({ className: 'pf-v5-c-table__action' });
71
+ expect(returnedData).toMatchObject({ className: tableStyles.tableAction });
69
72
 
70
73
  if (!actions || actions.length === 0) {
71
74
  expect(returnedData.children).toBeUndefined();
@@ -73,7 +76,10 @@ const testCellActions = async ({
73
76
  const { container } = render(returnedData.children as React.ReactElement<any>);
74
77
  await user.click(screen.getAllByRole('button')[0]);
75
78
  await waitFor(() =>
76
- expect(container.querySelectorAll('.pf-v5-c-dropdown__menu li button')).toHaveLength(expectDisabled ? 0 : 1)
79
+ // eslint-disable-next-line testing-library/no-container
80
+ expect(container.querySelectorAll(`.${dropdownStyles.dropdownMenu} li button`)).toHaveLength(
81
+ expectDisabled ? 0 : 1
82
+ )
77
83
  );
78
84
  }
79
85
  };
@@ -86,7 +92,7 @@ describe('Transformer functions', () => {
86
92
  extraParams: { onSelect }
87
93
  };
88
94
  const returnedData = selectable('', { column, rowData: {} } as IExtra);
89
- expect(returnedData).toMatchObject({ className: 'pf-v5-c-table__check' });
95
+ expect(returnedData).toMatchObject({ className: tableStyles.tableCheck });
90
96
 
91
97
  const user = userEvent.setup();
92
98
 
@@ -103,7 +109,7 @@ describe('Transformer functions', () => {
103
109
  extraParams: { onSelect }
104
110
  };
105
111
  const returnedData = selectable('', { column, rowIndex: 0, rowData: { selected: true } } as IExtra);
106
- expect(returnedData).toMatchObject({ className: 'pf-v5-c-table__check' });
112
+ expect(returnedData).toMatchObject({ className: tableStyles.tableCheck });
107
113
  const user = userEvent.setup();
108
114
 
109
115
  render(returnedData.children as React.ReactElement<any>);
@@ -128,7 +134,7 @@ describe('Transformer functions', () => {
128
134
  const onSort = jest.fn();
129
135
  const column = { extraParams: { sortBy: {}, onSort } };
130
136
  const returnedData = sortable('', { column, columnIndex: 0 });
131
- expect(returnedData).toMatchObject({ className: 'pf-v5-c-table__sort' });
137
+ expect(returnedData).toMatchObject({ className: tableStyles.tableSort });
132
138
 
133
139
  const user = userEvent.setup();
134
140
 
@@ -154,7 +160,7 @@ describe('Transformer functions', () => {
154
160
  const onSort = jest.fn();
155
161
  const column = { extraParams: { sortBy: { index: 0, direction: 'desc' }, onSort } };
156
162
  const returnedData = sortable('', { column, columnIndex: 0 } as IExtra);
157
- expect(returnedData).toMatchObject({ className: 'pf-v5-c-table__sort pf-m-selected' });
163
+ expect(returnedData).toMatchObject({ className: css(tableStyles.tableSort, tableStyles.modifiers.selected) });
158
164
 
159
165
  const user = userEvent.setup();
160
166
 
@@ -226,7 +232,7 @@ describe('Transformer functions', () => {
226
232
  extraParams: { onCollapse }
227
233
  };
228
234
  const returnedData = collapsible('', { rowIndex: 0, rowData, column });
229
- expect(returnedData).toMatchObject({ className: 'pf-v5-c-table__toggle' });
235
+ expect(returnedData).toMatchObject({ className: tableStyles.tableToggle });
230
236
 
231
237
  const user = userEvent.setup();
232
238
 
@@ -332,7 +338,7 @@ describe('Transformer functions', () => {
332
338
  extraParams: { onRowEdit }
333
339
  };
334
340
  const returned = editable('test', { rowIndex: 0, column });
335
- expect(returned).toMatchObject({ className: 'pf-v5-c-table__inline-edit-action' });
341
+ expect(returned).toMatchObject({ className: tableStyles.tableInlineEditAction });
336
342
  });
337
343
 
338
344
  describe('visibility classNames', () => {
@@ -0,0 +1,159 @@
1
+ ---
2
+ id: Table
3
+ section: components
4
+ ---
5
+
6
+ import {
7
+ Checkbox,
8
+ Label,
9
+ PageSection,
10
+ ToolbarExpandIconWrapper,
11
+ ToolbarContent,
12
+ Toolbar,
13
+ ToolbarItem,
14
+ SearchInput,
15
+ Masthead,
16
+ MastheadToggle,
17
+ MastheadMain,
18
+ MastheadContent,
19
+ SkipToContent,
20
+ Breadcrumb,
21
+ BreadcrumbItem,
22
+ Page,
23
+ PageSectionVariants,
24
+ TextContent,
25
+ Text,
26
+ Divider } from '@patternfly/react-core';
27
+ import { Table as TableDeprecated, TableHeader, TableBody } from '@patternfly/react-table/deprecated';
28
+ import CheckIcon from '@patternfly/react-icons/dist/esm/icons/check-icon';
29
+ import CloneIcon from '@patternfly/react-icons/dist/esm/icons/clone-icon';
30
+ import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon';
31
+ import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-icon';
32
+ import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';
33
+ import EditIcon from '@patternfly/react-icons/dist/esm/icons/edit-icon';
34
+ import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';
35
+ import SortAmountDownIcon from '@patternfly/react-icons/dist/esm/icons/sort-amount-down-icon';
36
+ import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
37
+ import SyncIcon from '@patternfly/react-icons/dist/esm/icons/sync-icon';
38
+ import ExclamationCircleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon';
39
+ import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
40
+ import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
41
+ import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
42
+ import globalDangerColor200 from '@patternfly/react-tokens/dist/esm/global_danger_color_200';
43
+ import imgBrand from '@patternfly/react-core/src/components/assets/pfLogo.svg';
44
+ import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
45
+ import AngleDownIcon from '@patternfly/react-icons/dist/esm/icons/angle-down-icon';
46
+ import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
47
+ import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
48
+ import AttentionBellIcon from '@patternfly/react-icons/dist/esm/icons/attention-bell-icon';
49
+ import BlueprintIcon from '@patternfly/react-icons/dist/esm/icons/blueprint-icon';
50
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
51
+ import { DashboardWrapper } from '@patternfly/react-core/dist/esm/demos/DashboardWrapper';
52
+ import { rows, columns } from '@patternfly/react-table/dist/esm/demos/sampleData';
53
+ import spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';
54
+
55
+ ## Demos
56
+
57
+ ### Bulk select
58
+
59
+ ```js isFullscreen file="./examples/TableBulkSelect.tsx"
60
+ ```
61
+
62
+ ### Expand/collapse all
63
+
64
+ ```js isFullscreen file="./examples/TableExpandCollapseAll.tsx"
65
+
66
+ ```
67
+
68
+ ### Compact
69
+
70
+ ```js isFullscreen file="./examples/TableCompact.tsx"
71
+
72
+ ```
73
+
74
+ ### Compound expansion
75
+
76
+ ```js isFullscreen file="./examples/TableCompoundExpansion.tsx"
77
+
78
+ ```
79
+
80
+ ### Column management
81
+
82
+ ```js isFullscreen file="./examples/TableColumnManagement.tsx"
83
+
84
+ ```
85
+
86
+ ### Column management with draggable
87
+
88
+ ```js isFullscreen file="./examples/TableColumnManagementWithDraggable.tsx"
89
+ ```
90
+
91
+ ### Filterable
92
+
93
+ ```js isFullscreen file="./examples/TableFilterable.tsx"
94
+ ```
95
+
96
+ ### Sortable - responsive
97
+
98
+ ```js isFullscreen file="./examples/TableSortableResponsive.tsx"
99
+
100
+ ```
101
+
102
+ ### Automatic pagination
103
+
104
+ The below example illustrates the `isLastFullPageShown` prop, which makes the following changes when the user sets the number of items to display per page to an amount that exceeds the remaining amount of data:
105
+
106
+ - The component automatically changes the page back to the last full page of results, rather than defaulting to the final page of results.
107
+
108
+ To demonstrate this, navigate to the last page of data below using the `>>` navigation arrows, then use the dropdown selector to change the view to 5 per page.
109
+
110
+ - The default behavior would show the last page of results, which would only contain the last two rows (rows 11 - 12).
111
+ - The `isLastFullPageShown` prop navigates you back to the previous page which does contain a full page of 5 rows (rows 6 - 10).
112
+
113
+ ```js isFullscreen file="./examples/TableAutomaticPagination.tsx"
114
+ ```
115
+
116
+ ### Static bottom pagination on mobile
117
+
118
+ ```ts isFullscreen file="./examples/TableStaticBottomPagination.tsx"
119
+
120
+ ```
121
+
122
+ ### Sticky header
123
+
124
+ ```js isFullscreen file="./examples/TableStickyHeader.tsx"
125
+
126
+ ```
127
+
128
+ ### Sticky first column
129
+
130
+ ```js isFullscreen file="./examples/TableStickyFirstColumn.tsx"
131
+
132
+ ```
133
+
134
+ ### Sticky columns and header with toolbar
135
+
136
+ A toolbar may be added above a sticky table either inside or outside the `OuterScrollContainer`.
137
+
138
+ ```js isFullscreen file="../components/Table/examples/TableStickyColumnsAndHeader.tsx"
139
+
140
+ ```
141
+
142
+ ## Empty states
143
+
144
+ These examples demonstrate the use of an [Empty State component](/components/empty-state) inside of a [Table](/components/table). Empty states are useful in a table when a filter returns no results, while data is loading, or when any type of error or exception condition occurs.
145
+
146
+ ### Empty
147
+
148
+ ```js isFullscreen file="./examples/TableEmptyStateDefault.tsx"
149
+ ```
150
+
151
+ ### Loading
152
+
153
+ ```js isFullscreen file="./examples/TableEmptyStateLoading.tsx"
154
+ ```
155
+
156
+ ### Error
157
+
158
+ ```js isFullscreen file="./examples/TableEmptyStateError.tsx"
159
+ ```
@@ -0,0 +1,101 @@
1
+ import React from 'react';
2
+ import { Pagination } from '@patternfly/react-core';
3
+ import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table';
4
+
5
+ export const TableAutomaticPagination: React.FunctionComponent = () => {
6
+ const columns = {
7
+ firstColumn: 'First column',
8
+ secondColumn: 'Second column',
9
+ thirdColumn: 'Third column'
10
+ };
11
+
12
+ const defaultRows = [
13
+ { firstColumn: 'Row 1 column 1', secondColumn: 'Row 1 column 2', thirdColumn: 'Row 1 column 3' },
14
+ { firstColumn: 'Row 2 column 1', secondColumn: 'Row 2 column 2', thirdColumn: 'Row 2 column 3' },
15
+ { firstColumn: 'Row 3 column 1', secondColumn: 'Row 3 column 2', thirdColumn: 'Row 3 column 3' },
16
+ { firstColumn: 'Row 4 column 1', secondColumn: 'Row 4 column 2', thirdColumn: 'Row 4 column 3' },
17
+ { firstColumn: 'Row 5 column 1', secondColumn: 'Row 5 column 2', thirdColumn: 'Row 5 column 3' },
18
+ { firstColumn: 'Row 6 column 1', secondColumn: 'Row 6 column 2', thirdColumn: 'Row 6 column 3' },
19
+ { firstColumn: 'Row 7 column 1', secondColumn: 'Row 7 column 2', thirdColumn: 'Row 7 column 3' },
20
+ { firstColumn: 'Row 8 column 1', secondColumn: 'Row 8 column 2', thirdColumn: 'Row 8 column 3' },
21
+ { firstColumn: 'Row 9 column 1', secondColumn: 'Row 9 column 2', thirdColumn: 'Row 9 column 3' },
22
+ { firstColumn: 'Row 10 column 1', secondColumn: 'Row 10 column 2', thirdColumn: 'Row 10 column 3' },
23
+ { firstColumn: 'Row 11 column 1', secondColumn: 'Row 11 column 2', thirdColumn: 'Row 11 column 3' },
24
+ { firstColumn: 'Row 12 column 1', secondColumn: 'Row 12 column 2', thirdColumn: 'Row 12 column 3' }
25
+ ];
26
+ const defaultPerPage = 10;
27
+
28
+ const [perPage, setPerPage] = React.useState(defaultPerPage);
29
+ const [page, setPage] = React.useState(1);
30
+ const [rows, setRows] = React.useState(defaultRows.slice(0, defaultPerPage));
31
+
32
+ const handleSetPage = (
33
+ _evt: React.MouseEvent | React.KeyboardEvent | MouseEvent,
34
+ newPage: number,
35
+ _perPage: number,
36
+ startIdx: number,
37
+ endIdx: number
38
+ ) => {
39
+ setPage(newPage);
40
+ setRows(defaultRows.slice(startIdx, endIdx));
41
+ };
42
+
43
+ const handlePerPageSelect = (
44
+ _evt: React.MouseEvent | React.KeyboardEvent | MouseEvent,
45
+ newPerPage: number,
46
+ newPage: number,
47
+ startIdx: number,
48
+ endIdx: number
49
+ ) => {
50
+ setPerPage(newPerPage);
51
+ setPage(newPage);
52
+ setRows(defaultRows.slice(startIdx, endIdx));
53
+ };
54
+
55
+ const renderPagination = (variant = 'top') => (
56
+ <Pagination
57
+ isCompact
58
+ itemCount={defaultRows.length}
59
+ page={page}
60
+ perPage={perPage}
61
+ isLastFullPageShown
62
+ onSetPage={handleSetPage}
63
+ onPerPageSelect={handlePerPageSelect}
64
+ perPageOptions={[
65
+ { title: '3', value: 3 },
66
+ { title: '5', value: 5 },
67
+ { title: '12', value: 12 },
68
+ { title: '20', value: 20 }
69
+ ]}
70
+ titles={{
71
+ paginationAriaLabel: `${variant} pagination`
72
+ }}
73
+ />
74
+ );
75
+
76
+ return (
77
+ <React.Fragment>
78
+ {renderPagination()}
79
+ <Table aria-label="Automated Pagination Table Demo">
80
+ <Thead>
81
+ <Tr>
82
+ <Th>{columns.firstColumn}</Th>
83
+ <Th>{columns.secondColumn}</Th>
84
+ <Th>{columns.thirdColumn}</Th>
85
+ </Tr>
86
+ </Thead>
87
+ <Tbody>
88
+ {rows.map((row, rowIndex) => (
89
+ <Tr key={rowIndex}>
90
+ <>
91
+ <Td dataLabel={columns.firstColumn}>{row.firstColumn}</Td>
92
+ <Td dataLabel={columns.secondColumn}>{row.secondColumn}</Td>
93
+ <Td dataLabel={columns.thirdColumn}>{row.thirdColumn}</Td>
94
+ </>
95
+ </Tr>
96
+ ))}
97
+ </Tbody>
98
+ </Table>
99
+ </React.Fragment>
100
+ );
101
+ };
@@ -6,44 +6,63 @@ import {
6
6
  DropdownItem,
7
7
  MenuToggle,
8
8
  MenuToggleCheckbox,
9
+ MenuToggleElement,
9
10
  PageSection,
10
11
  Pagination,
11
12
  Toolbar,
12
13
  ToolbarContent,
13
14
  ToolbarGroup,
14
- ToolbarItem
15
+ ToolbarItem,
16
+ PaginationVariant
15
17
  } from '@patternfly/react-core';
16
18
  import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table';
17
- import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper';
18
- import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData';
19
+ import { rows, columns, SampleDataRow } from '@patternfly/react-table/dist/esm/demos/sampleData';
20
+ import { DashboardWrapper } from '@patternfly/react-core/dist/esm/demos/DashboardWrapper';
19
21
 
20
- export const BulkSelectTableDemo = () => {
22
+ export const TableBulkSelect: React.FunctionComponent = () => {
21
23
  const [isBulkSelectDropdownOpen, setIsBulkSelectDropdownOpen] = React.useState(false);
22
24
  const [bulkSelection, setBulkSelection] = React.useState('');
23
25
  const [page, setPage] = React.useState(1);
24
26
  const [perPage, setPerPage] = React.useState(10);
25
27
  const [paginatedRows, setPaginatedRows] = React.useState(rows.slice(0, 10));
26
- const [selectedRows, setSelectedRows] = React.useState([]);
27
- const handleSetPage = (_evt, newPage, _perPage, startIdx, endIdx) => {
28
- setPaginatedRows(rows.slice(startIdx, endIdx));
28
+ const [selectedRows, setSelectedRows] = React.useState<string[]>([]);
29
+
30
+ const handleSetPage = (
31
+ _evt: React.MouseEvent | React.KeyboardEvent | MouseEvent,
32
+ newPage: number,
33
+ _perPage: number,
34
+ startIdx: number,
35
+ endIdx: number
36
+ ) => {
37
+ setPaginatedRows(rows?.slice(startIdx, endIdx));
29
38
  setPage(newPage);
30
39
  };
31
- const handlePerPageSelect = (_evt, newPerPage, newPage, startIdx, endIdx) => {
40
+
41
+ const handlePerPageSelect = (
42
+ _evt: React.MouseEvent | React.KeyboardEvent | MouseEvent,
43
+ newPerPage: number,
44
+ newPage: number,
45
+ startIdx: number,
46
+ endIdx: number
47
+ ) => {
32
48
  setPaginatedRows(rows.slice(startIdx, endIdx));
33
49
  setPage(newPage);
34
50
  setPerPage(newPerPage);
35
51
  };
36
52
 
37
- const setRowSelected = (row, isSelecting = true) =>
53
+ const setRowSelected = (row: SampleDataRow, isSelecting: boolean) =>
38
54
  setSelectedRows((prevSelected) => {
39
55
  const otherSelectedRows = prevSelected.filter((r) => r !== row.name);
40
56
  return isSelecting ? [...otherSelectedRows, row.name] : otherSelectedRows;
41
57
  });
42
- const selectAllRows = (isSelecting = true) => setSelectedRows(isSelecting ? rows.map((r) => r.name) : []);
43
- const selectPageRows = (isSelecting = true) => setSelectedRows(isSelecting ? paginatedRows.map((r) => r.name) : []);
44
- const isRowSelected = (row) => selectedRows.includes(row.name);
45
58
 
46
- const buildPagination = (variant, isCompact) => (
59
+ const selectAllRows = (isSelecting: boolean) => setSelectedRows(isSelecting ? rows.map((r) => r.name) : []);
60
+
61
+ const selectPageRows = (isSelecting: boolean) => setSelectedRows(isSelecting ? paginatedRows.map((r) => r.name) : []);
62
+
63
+ const isRowSelected = (row: any) => selectedRows.includes(row.name);
64
+
65
+ const buildPagination = (variant: 'bottom' | 'top' | PaginationVariant, isCompact: boolean) => (
47
66
  <Pagination
48
67
  isCompact={isCompact}
49
68
  itemCount={rows.length}
@@ -72,10 +91,11 @@ export const BulkSelectTableDemo = () => {
72
91
  <DropdownItem value="all">Select all ({rows.length} items)</DropdownItem>
73
92
  </>
74
93
  );
94
+
75
95
  return (
76
96
  <Dropdown
77
97
  role="menu"
78
- onSelect={(_ev, value) => {
98
+ onSelect={(_event: React.MouseEvent<Element, MouseEvent>, value: string) => {
79
99
  if (value === 'all') {
80
100
  selectAllRows(bulkSelection !== 'all');
81
101
  } else if (value === 'page') {
@@ -83,11 +103,11 @@ export const BulkSelectTableDemo = () => {
83
103
  } else {
84
104
  setSelectedRows([]);
85
105
  }
86
- setBulkSelection(value);
106
+ setBulkSelection(value as string);
87
107
  }}
88
108
  isOpen={isBulkSelectDropdownOpen}
89
- onOpenChange={(isOpen) => setIsBulkSelectDropdownOpen(isOpen)}
90
- toggle={(toggleRef) => (
109
+ onOpenChange={(isOpen: boolean) => setIsBulkSelectDropdownOpen(isOpen)}
110
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
91
111
  <MenuToggle
92
112
  ref={toggleRef}
93
113
  isExpanded={isBulkSelectDropdownOpen}
@@ -122,7 +142,7 @@ export const BulkSelectTableDemo = () => {
122
142
  <ToolbarGroup>
123
143
  <ToolbarItem variant="bulk-select">{buildBulkSelectDropdown()}</ToolbarItem>
124
144
  </ToolbarGroup>
125
- <ToolbarItem variant="pagination">{buildPagination('top')}</ToolbarItem>
145
+ <ToolbarItem variant="pagination">{buildPagination('top', false)}</ToolbarItem>
126
146
  </ToolbarContent>
127
147
  </Toolbar>
128
148
  );
@@ -147,7 +167,8 @@ export const BulkSelectTableDemo = () => {
147
167
  <Td
148
168
  select={{
149
169
  rowIndex,
150
- onSelect: (_event, isSelecting) => setRowSelected(row, isSelecting),
170
+ onSelect: (_event: React.FormEvent<HTMLInputElement>, isSelecting: boolean) =>
171
+ setRowSelected(row, isSelecting),
151
172
  isSelected: isRowSelected(row)
152
173
  }}
153
174
  />
@@ -159,7 +180,7 @@ export const BulkSelectTableDemo = () => {
159
180
  ))}
160
181
  </Tbody>
161
182
  </Table>
162
- {buildPagination('bottom')}
183
+ {buildPagination('bottom', true)}
163
184
  </PageSection>
164
185
  </DashboardWrapper>
165
186
  );