@patternfly/react-table 6.5.0-prerelease.8 → 6.5.0-prerelease.80
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 +298 -0
- package/README.md +1 -1
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/Table/package.json +1 -1
- package/dist/dynamic/components/Table/utils/decorators/package.json +1 -1
- package/dist/dynamic/components/Table/utils/package.json +1 -1
- package/dist/dynamic/deprecated/components/Table/base/package.json +1 -1
- package/dist/dynamic/deprecated/components/Table/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/esm/components/Table/CollapseColumn.js +2 -2
- package/dist/esm/components/Table/CollapseColumn.js.map +1 -1
- package/dist/esm/components/Table/EditColumn.js +2 -2
- package/dist/esm/components/Table/EditColumn.js.map +1 -1
- package/dist/esm/components/Table/EditableSelectInputCell.d.ts.map +1 -1
- package/dist/esm/components/Table/EditableSelectInputCell.js.map +1 -1
- package/dist/esm/components/Table/InnerScrollContainer.d.ts +3 -1
- package/dist/esm/components/Table/InnerScrollContainer.d.ts.map +1 -1
- package/dist/esm/components/Table/InnerScrollContainer.js +5 -3
- package/dist/esm/components/Table/InnerScrollContainer.js.map +1 -1
- package/dist/esm/components/Table/SelectColumn.d.ts +2 -0
- package/dist/esm/components/Table/SelectColumn.d.ts.map +1 -1
- package/dist/esm/components/Table/SelectColumn.js +3 -2
- package/dist/esm/components/Table/SelectColumn.js.map +1 -1
- package/dist/esm/components/Table/Table.d.ts +7 -1
- package/dist/esm/components/Table/Table.d.ts.map +1 -1
- package/dist/esm/components/Table/Table.js +3 -3
- package/dist/esm/components/Table/Table.js.map +1 -1
- package/dist/esm/components/Table/TableTypes.d.ts +1 -0
- package/dist/esm/components/Table/TableTypes.d.ts.map +1 -1
- package/dist/esm/components/Table/Th.d.ts.map +1 -1
- package/dist/esm/components/Table/Th.js +2 -1
- package/dist/esm/components/Table/Th.js.map +1 -1
- package/dist/esm/components/Table/base/types.d.ts +2 -0
- package/dist/esm/components/Table/base/types.d.ts.map +1 -1
- package/dist/esm/components/Table/base/types.js.map +1 -1
- package/dist/esm/components/Table/utils/decorators/selectable.d.ts.map +1 -1
- package/dist/esm/components/Table/utils/decorators/selectable.js +2 -2
- package/dist/esm/components/Table/utils/decorators/selectable.js.map +1 -1
- package/dist/esm/components/Table/utils/decorators/sortable.js +2 -2
- package/dist/esm/components/Table/utils/decorators/sortable.js.map +1 -1
- package/dist/esm/components/Table/utils/decorators/treeRow.js +2 -2
- package/dist/esm/components/Table/utils/decorators/treeRow.js.map +1 -1
- package/dist/esm/demos/DashboardHeader.js +4 -4
- package/dist/esm/demos/DashboardHeader.js.map +1 -1
- package/dist/js/components/Table/CollapseColumn.js +2 -2
- package/dist/js/components/Table/CollapseColumn.js.map +1 -1
- package/dist/js/components/Table/EditColumn.js +2 -2
- package/dist/js/components/Table/EditColumn.js.map +1 -1
- package/dist/js/components/Table/EditableSelectInputCell.d.ts.map +1 -1
- package/dist/js/components/Table/EditableSelectInputCell.js.map +1 -1
- package/dist/js/components/Table/InnerScrollContainer.d.ts +3 -1
- package/dist/js/components/Table/InnerScrollContainer.d.ts.map +1 -1
- package/dist/js/components/Table/InnerScrollContainer.js +5 -4
- package/dist/js/components/Table/InnerScrollContainer.js.map +1 -1
- package/dist/js/components/Table/SelectColumn.d.ts +2 -0
- package/dist/js/components/Table/SelectColumn.d.ts.map +1 -1
- package/dist/js/components/Table/SelectColumn.js +3 -2
- package/dist/js/components/Table/SelectColumn.js.map +1 -1
- package/dist/js/components/Table/Table.d.ts +7 -1
- package/dist/js/components/Table/Table.d.ts.map +1 -1
- package/dist/js/components/Table/Table.js +3 -3
- package/dist/js/components/Table/Table.js.map +1 -1
- package/dist/js/components/Table/TableTypes.d.ts +1 -0
- package/dist/js/components/Table/TableTypes.d.ts.map +1 -1
- package/dist/js/components/Table/Th.d.ts.map +1 -1
- package/dist/js/components/Table/Th.js +2 -1
- package/dist/js/components/Table/Th.js.map +1 -1
- package/dist/js/components/Table/base/types.d.ts +2 -0
- package/dist/js/components/Table/base/types.d.ts.map +1 -1
- package/dist/js/components/Table/base/types.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/selectable.d.ts.map +1 -1
- package/dist/js/components/Table/utils/decorators/selectable.js +2 -2
- package/dist/js/components/Table/utils/decorators/selectable.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/sortable.js +2 -2
- package/dist/js/components/Table/utils/decorators/sortable.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/treeRow.js +2 -2
- package/dist/js/components/Table/utils/decorators/treeRow.js.map +1 -1
- package/dist/js/demos/DashboardHeader.js +4 -4
- package/dist/js/demos/DashboardHeader.js.map +1 -1
- package/dist/umd/assets/{output-B4SR7-ii.css → output-N6l81wiC.css} +4293 -4093
- package/dist/umd/react-table.min.js +5 -5
- package/package.json +7 -7
- package/src/components/Table/CollapseColumn.tsx +2 -2
- package/src/components/Table/EditColumn.tsx +2 -2
- package/src/components/Table/EditableSelectInputCell.tsx +4 -2
- package/src/components/Table/InnerScrollContainer.tsx +9 -2
- package/src/components/Table/SelectColumn.tsx +9 -1
- package/src/components/Table/Table.tsx +13 -1
- package/src/components/Table/TableTypes.tsx +1 -0
- package/src/components/Table/Th.tsx +3 -3
- package/src/components/Table/__tests__/Table.test.tsx +66 -0
- package/src/components/Table/__tests__/Th.test.tsx +23 -0
- package/src/components/Table/__tests__/__snapshots__/RowWrapper.test.tsx.snap +2 -2
- package/src/components/Table/__tests__/__snapshots__/Table.test.tsx.snap +1 -1
- package/src/components/Table/__tests__/__snapshots__/Tr.test.tsx.snap +2 -2
- package/src/components/Table/base/types.tsx +2 -0
- package/src/components/Table/examples/Table.md +26 -6
- package/src/components/Table/examples/TableActions.tsx +4 -9
- package/src/components/Table/examples/TableBasic.tsx +5 -10
- package/src/components/Table/examples/TableEditable.tsx +2 -2
- package/src/components/Table/examples/TableMultipleStickyColumns.tsx +2 -2
- package/src/components/Table/examples/TableSelectableIndeterminate.tsx +128 -0
- package/src/components/Table/examples/TableStickyColumnsAndHeader.tsx +2 -2
- package/src/components/Table/examples/TableStickyHeaderDynamic.tsx +140 -0
- package/src/components/Table/utils/decorators/selectable.tsx +2 -1
- package/src/components/Table/utils/decorators/sortable.tsx +2 -2
- package/src/components/Table/utils/decorators/treeRow.tsx +2 -2
- package/src/demos/DashboardHeader.tsx +4 -4
- package/src/demos/Table.md +7 -8
- package/src/demos/examples/TableEmptyStateError.tsx +2 -2
- package/src/deprecated/components/Table/__tests__/__snapshots__/Table.test.tsx.snap +937 -469
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table';
|
|
3
|
+
|
|
4
|
+
interface Repository {
|
|
5
|
+
name: string;
|
|
6
|
+
branches: string;
|
|
7
|
+
prs: string;
|
|
8
|
+
workspaces: string;
|
|
9
|
+
lastCommit: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const TableSelectableIndeterminate: React.FunctionComponent = () => {
|
|
13
|
+
// In real usage, this data would come from some external source like an API via props.
|
|
14
|
+
const repositories: Repository[] = [
|
|
15
|
+
{ name: 'one', branches: 'two', prs: 'a', workspaces: 'four', lastCommit: 'five' },
|
|
16
|
+
{ name: 'a', branches: 'two', prs: 'k', workspaces: 'four', lastCommit: 'five' },
|
|
17
|
+
{ name: 'b', branches: 'two', prs: 'k', workspaces: 'four', lastCommit: 'five' },
|
|
18
|
+
{ name: 'c', branches: 'two', prs: 'k', workspaces: 'four', lastCommit: 'five' },
|
|
19
|
+
{ name: 'd', branches: 'two', prs: 'k', workspaces: 'four', lastCommit: 'five' },
|
|
20
|
+
{ name: 'e', branches: 'two', prs: 'b', workspaces: 'four', lastCommit: 'five' }
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const columnNames = {
|
|
24
|
+
name: 'Repositories',
|
|
25
|
+
branches: 'Branches',
|
|
26
|
+
prs: 'Pull requests',
|
|
27
|
+
workspaces: 'Workspaces',
|
|
28
|
+
lastCommit: 'Last commit'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const isRepoSelectable = (repo: Repository) => repo.name !== 'a'; // Arbitrary logic for this example
|
|
32
|
+
const selectableRepos = repositories.filter(isRepoSelectable);
|
|
33
|
+
|
|
34
|
+
// In this example, selected rows are tracked by the repo names from each row. This could be any unique identifier.
|
|
35
|
+
// This is to prevent state from being based on row order index in case we later add sorting.
|
|
36
|
+
const [selectedRepoNames, setSelectedRepoNames] = useState<string[]>([]);
|
|
37
|
+
const setRepoSelected = (repo: Repository, isSelecting = true) =>
|
|
38
|
+
setSelectedRepoNames((prevSelected) => {
|
|
39
|
+
const otherSelectedRepoNames = prevSelected.filter((r) => r !== repo.name);
|
|
40
|
+
return isSelecting && isRepoSelectable(repo) ? [...otherSelectedRepoNames, repo.name] : otherSelectedRepoNames;
|
|
41
|
+
});
|
|
42
|
+
const selectAllRepos = (isSelecting = true) =>
|
|
43
|
+
setSelectedRepoNames(isSelecting ? selectableRepos.map((r) => r.name) : []);
|
|
44
|
+
const areAllReposSelected = selectedRepoNames.length === selectableRepos.length;
|
|
45
|
+
const areSomeReposSelected = selectedRepoNames.length > 0 && selectedRepoNames.length < selectableRepos.length;
|
|
46
|
+
const isRepoSelected = (repo: Repository) => selectedRepoNames.includes(repo.name);
|
|
47
|
+
|
|
48
|
+
// To allow shift+click to select/deselect multiple rows
|
|
49
|
+
const [recentSelectedRowIndex, setRecentSelectedRowIndex] = useState<number | null>(null);
|
|
50
|
+
const [shifting, setShifting] = useState(false);
|
|
51
|
+
|
|
52
|
+
const onSelectRepo = (repo: Repository, rowIndex: number, isSelecting: boolean) => {
|
|
53
|
+
// If the user is shift + selecting the checkboxes, then all intermediate checkboxes should be selected
|
|
54
|
+
if (shifting && recentSelectedRowIndex !== null) {
|
|
55
|
+
const numberSelected = rowIndex - recentSelectedRowIndex;
|
|
56
|
+
const intermediateIndexes =
|
|
57
|
+
numberSelected > 0
|
|
58
|
+
? Array.from(new Array(numberSelected + 1), (_x, i) => i + recentSelectedRowIndex)
|
|
59
|
+
: Array.from(new Array(Math.abs(numberSelected) + 1), (_x, i) => i + rowIndex);
|
|
60
|
+
intermediateIndexes.forEach((index) => setRepoSelected(repositories[index], isSelecting));
|
|
61
|
+
} else {
|
|
62
|
+
setRepoSelected(repo, isSelecting);
|
|
63
|
+
}
|
|
64
|
+
setRecentSelectedRowIndex(rowIndex);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const onKeyDown = (e: KeyboardEvent) => {
|
|
69
|
+
if (e.key === 'Shift') {
|
|
70
|
+
setShifting(true);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const onKeyUp = (e: KeyboardEvent) => {
|
|
74
|
+
if (e.key === 'Shift') {
|
|
75
|
+
setShifting(false);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
document.addEventListener('keydown', onKeyDown);
|
|
80
|
+
document.addEventListener('keyup', onKeyUp);
|
|
81
|
+
|
|
82
|
+
return () => {
|
|
83
|
+
document.removeEventListener('keydown', onKeyDown);
|
|
84
|
+
document.removeEventListener('keyup', onKeyUp);
|
|
85
|
+
};
|
|
86
|
+
}, []);
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<Table aria-label="Selectable table with indeterminate state">
|
|
90
|
+
<Thead>
|
|
91
|
+
<Tr>
|
|
92
|
+
<Th
|
|
93
|
+
select={{
|
|
94
|
+
onSelect: (_event, isSelecting) => selectAllRepos(isSelecting),
|
|
95
|
+
isSelected: areAllReposSelected,
|
|
96
|
+
isIndeterminate: areSomeReposSelected
|
|
97
|
+
}}
|
|
98
|
+
aria-label="Row select"
|
|
99
|
+
/>
|
|
100
|
+
<Th>{columnNames.name}</Th>
|
|
101
|
+
<Th>{columnNames.branches}</Th>
|
|
102
|
+
<Th>{columnNames.prs}</Th>
|
|
103
|
+
<Th>{columnNames.workspaces}</Th>
|
|
104
|
+
<Th>{columnNames.lastCommit}</Th>
|
|
105
|
+
</Tr>
|
|
106
|
+
</Thead>
|
|
107
|
+
<Tbody>
|
|
108
|
+
{repositories.map((repo, rowIndex) => (
|
|
109
|
+
<Tr key={repo.name}>
|
|
110
|
+
<Td
|
|
111
|
+
select={{
|
|
112
|
+
rowIndex,
|
|
113
|
+
onSelect: (_event, isSelecting) => onSelectRepo(repo, rowIndex, isSelecting),
|
|
114
|
+
isSelected: isRepoSelected(repo),
|
|
115
|
+
isDisabled: !isRepoSelectable(repo)
|
|
116
|
+
}}
|
|
117
|
+
/>
|
|
118
|
+
<Td dataLabel={columnNames.name}>{repo.name}</Td>
|
|
119
|
+
<Td dataLabel={columnNames.branches}>{repo.branches}</Td>
|
|
120
|
+
<Td dataLabel={columnNames.prs}>{repo.prs}</Td>
|
|
121
|
+
<Td dataLabel={columnNames.workspaces}>{repo.workspaces}</Td>
|
|
122
|
+
<Td dataLabel={columnNames.lastCommit}>{repo.lastCommit}</Td>
|
|
123
|
+
</Tr>
|
|
124
|
+
))}
|
|
125
|
+
</Tbody>
|
|
126
|
+
</Table>
|
|
127
|
+
);
|
|
128
|
+
};
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
ThProps,
|
|
12
12
|
ISortBy
|
|
13
13
|
} from '@patternfly/react-table';
|
|
14
|
-
import
|
|
14
|
+
import RhUiBlueprintIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-blueprint-icon';
|
|
15
15
|
|
|
16
16
|
interface Fact {
|
|
17
17
|
name: string;
|
|
@@ -133,7 +133,7 @@ export const TableStickyColumnsAndHeader: React.FunctionComponent = () => {
|
|
|
133
133
|
{fact.name}
|
|
134
134
|
</Th>
|
|
135
135
|
<Th isStickyColumn stickyMinWidth="120px" stickyLeftOffset="120px" modifier="truncate" hasRightBorder>
|
|
136
|
-
<
|
|
136
|
+
<RhUiBlueprintIcon />
|
|
137
137
|
{` ${fact.state}`}
|
|
138
138
|
</Th>
|
|
139
139
|
<Td modifier="nowrap" dataLabel={columnNames.header3}>
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { useLayoutEffect, useRef, useState } from 'react';
|
|
2
|
+
import { Table, Thead, Tr, Th, Tbody, Td, InnerScrollContainer } from '@patternfly/react-table';
|
|
3
|
+
import RhUiBlueprintIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-blueprint-icon';
|
|
4
|
+
|
|
5
|
+
interface Fact {
|
|
6
|
+
name: string;
|
|
7
|
+
state: string;
|
|
8
|
+
detail1: string;
|
|
9
|
+
detail2: string;
|
|
10
|
+
detail3: string;
|
|
11
|
+
detail4: string;
|
|
12
|
+
detail5: string;
|
|
13
|
+
detail6: string;
|
|
14
|
+
detail7: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const useIsStuckFromScrollParent = ({
|
|
18
|
+
shouldTrack,
|
|
19
|
+
scrollParentRef
|
|
20
|
+
}: {
|
|
21
|
+
/** Indicates whether to track the scroll top position of the scroll parent element */
|
|
22
|
+
shouldTrack: boolean;
|
|
23
|
+
/** Reference to the scroll parent element */
|
|
24
|
+
scrollParentRef: React.RefObject<any>;
|
|
25
|
+
}): boolean => {
|
|
26
|
+
const [isStuck, setIsStuck] = useState(false);
|
|
27
|
+
|
|
28
|
+
useLayoutEffect(() => {
|
|
29
|
+
if (!shouldTrack) {
|
|
30
|
+
setIsStuck(false);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const scrollElement = scrollParentRef.current;
|
|
35
|
+
if (!scrollElement) {
|
|
36
|
+
setIsStuck(false);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const syncFromScroll = () => {
|
|
41
|
+
setIsStuck(scrollElement.scrollTop > 0);
|
|
42
|
+
};
|
|
43
|
+
syncFromScroll();
|
|
44
|
+
scrollElement.addEventListener('scroll', syncFromScroll, { passive: true });
|
|
45
|
+
return () => scrollElement.removeEventListener('scroll', syncFromScroll);
|
|
46
|
+
}, [shouldTrack, scrollParentRef]);
|
|
47
|
+
|
|
48
|
+
return isStuck;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const TableStickyHeaderDynamic: React.FunctionComponent = () => {
|
|
52
|
+
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
|
53
|
+
const isStuck = useIsStuckFromScrollParent({ shouldTrack: true, scrollParentRef: scrollContainerRef });
|
|
54
|
+
|
|
55
|
+
// In real usage, this data would come from some external source like an API via props.
|
|
56
|
+
const facts: Fact[] = Array.from({ length: 9 }, (_, index) => ({
|
|
57
|
+
name: `Fact ${index + 1}`,
|
|
58
|
+
state: `State ${index + 1}`,
|
|
59
|
+
detail1: `Test cell ${index + 1}-3`,
|
|
60
|
+
detail2: `Test cell ${index + 1}-4`,
|
|
61
|
+
detail3: `Test cell ${index + 1}-5`,
|
|
62
|
+
detail4: `Test cell ${index + 1}-6`,
|
|
63
|
+
detail5: `Test cell ${index + 1}-7`,
|
|
64
|
+
detail6: `Test cell ${index + 1}-8`,
|
|
65
|
+
detail7: `Test cell ${index + 1}-9`
|
|
66
|
+
}));
|
|
67
|
+
|
|
68
|
+
const columnNames = {
|
|
69
|
+
name: 'Fact',
|
|
70
|
+
state: 'State',
|
|
71
|
+
header3: 'Header 3',
|
|
72
|
+
header4: 'Header 4',
|
|
73
|
+
header5: 'Header 5',
|
|
74
|
+
header6: 'Header 6',
|
|
75
|
+
header7: 'Header 7',
|
|
76
|
+
header8: 'Header 8',
|
|
77
|
+
header9: 'Header 9'
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<div style={{ height: '400px' }}>
|
|
82
|
+
<InnerScrollContainer ref={scrollContainerRef}>
|
|
83
|
+
<Table
|
|
84
|
+
aria-label="Dynamic sticky header table"
|
|
85
|
+
gridBreakPoint=""
|
|
86
|
+
isStickyHeaderBase
|
|
87
|
+
isStickyHeaderStuck={isStuck}
|
|
88
|
+
>
|
|
89
|
+
<Thead>
|
|
90
|
+
<Tr>
|
|
91
|
+
<Th modifier="truncate">{columnNames.name}</Th>
|
|
92
|
+
<Th modifier="truncate">{columnNames.state}</Th>
|
|
93
|
+
<Th modifier="truncate">{columnNames.header3}</Th>
|
|
94
|
+
<Th modifier="truncate">{columnNames.header4}</Th>
|
|
95
|
+
<Th modifier="truncate">{columnNames.header5}</Th>
|
|
96
|
+
<Th modifier="truncate">{columnNames.header6}</Th>
|
|
97
|
+
<Th modifier="truncate">{columnNames.header7}</Th>
|
|
98
|
+
<Th modifier="truncate">{columnNames.header8}</Th>
|
|
99
|
+
<Th modifier="truncate">{columnNames.header9}</Th>
|
|
100
|
+
</Tr>
|
|
101
|
+
</Thead>
|
|
102
|
+
<Tbody>
|
|
103
|
+
{facts.map((fact) => (
|
|
104
|
+
<Tr key={fact.name}>
|
|
105
|
+
<Td modifier="nowrap" dataLabel={columnNames.name}>
|
|
106
|
+
{fact.name}
|
|
107
|
+
</Td>
|
|
108
|
+
<Td modifier="nowrap" dataLabel={columnNames.state}>
|
|
109
|
+
<RhUiBlueprintIcon />
|
|
110
|
+
{` ${fact.state}`}
|
|
111
|
+
</Td>
|
|
112
|
+
<Td modifier="nowrap" dataLabel={columnNames.header3}>
|
|
113
|
+
{fact.detail1}
|
|
114
|
+
</Td>
|
|
115
|
+
<Td modifier="nowrap" dataLabel={columnNames.header4}>
|
|
116
|
+
{fact.detail2}
|
|
117
|
+
</Td>
|
|
118
|
+
<Td modifier="nowrap" dataLabel={columnNames.header5}>
|
|
119
|
+
{fact.detail3}
|
|
120
|
+
</Td>
|
|
121
|
+
<Td modifier="nowrap" dataLabel={columnNames.header6}>
|
|
122
|
+
{fact.detail4}
|
|
123
|
+
</Td>
|
|
124
|
+
<Td modifier="nowrap" dataLabel={columnNames.header7}>
|
|
125
|
+
{fact.detail5}
|
|
126
|
+
</Td>
|
|
127
|
+
<Td modifier="nowrap" dataLabel={columnNames.header8}>
|
|
128
|
+
{fact.detail6}
|
|
129
|
+
</Td>
|
|
130
|
+
<Td modifier="nowrap" dataLabel={columnNames.header9}>
|
|
131
|
+
{fact.detail7}
|
|
132
|
+
</Td>
|
|
133
|
+
</Tr>
|
|
134
|
+
))}
|
|
135
|
+
</Tbody>
|
|
136
|
+
</Table>
|
|
137
|
+
</InnerScrollContainer>
|
|
138
|
+
</div>
|
|
139
|
+
);
|
|
140
|
+
};
|
|
@@ -9,7 +9,7 @@ export const selectable: ITransform = (
|
|
|
9
9
|
{ rowIndex, columnIndex, rowData, column, property, tooltip }: IExtra
|
|
10
10
|
) => {
|
|
11
11
|
const {
|
|
12
|
-
extraParams: { onSelect, selectVariant, allRowsSelected, isHeaderSelectDisabled }
|
|
12
|
+
extraParams: { onSelect, selectVariant, allRowsSelected, isHeaderSelectDisabled, isIndeterminate }
|
|
13
13
|
} = column;
|
|
14
14
|
const extraData = {
|
|
15
15
|
rowIndex,
|
|
@@ -70,6 +70,7 @@ export const selectable: ITransform = (
|
|
|
70
70
|
onSelect={selectClick}
|
|
71
71
|
name={selectName}
|
|
72
72
|
tooltip={tooltip}
|
|
73
|
+
isIndeterminate={rowId === -1 ? isIndeterminate : undefined}
|
|
73
74
|
>
|
|
74
75
|
{label as React.ReactNode}
|
|
75
76
|
</SelectColumn>
|
|
@@ -2,10 +2,10 @@ import { css } from '@patternfly/react-styles';
|
|
|
2
2
|
import styles from '@patternfly/react-styles/css/components/Table/table';
|
|
3
3
|
import { IExtra, IFormatterValueType, ITransform } from '../../TableTypes';
|
|
4
4
|
import { SortColumn, SortByDirection } from '../../SortColumn';
|
|
5
|
-
import
|
|
5
|
+
import RhUiStarFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-star-fill-icon';
|
|
6
6
|
|
|
7
7
|
export const sortableFavorites = (sort: any) => () =>
|
|
8
|
-
sortable(<
|
|
8
|
+
sortable(<RhUiStarFillIcon />, {
|
|
9
9
|
columnIndex: sort.columnIndex,
|
|
10
10
|
className: styles.tableFavorite,
|
|
11
11
|
ariaLabel: sort.ariaLabel ?? 'Sort favorites',
|
|
@@ -4,7 +4,7 @@ import styles from '@patternfly/react-styles/css/components/Table/table';
|
|
|
4
4
|
import stylesTreeView from '@patternfly/react-styles/css/components/Table/table-tree-view';
|
|
5
5
|
import { Button } from '@patternfly/react-core/dist/esm/components/Button';
|
|
6
6
|
import { Checkbox } from '@patternfly/react-core/dist/esm/components/Checkbox';
|
|
7
|
-
import
|
|
7
|
+
import RhMicronsCaretDownIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-caret-down-icon';
|
|
8
8
|
import EllipsisHIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-h-icon';
|
|
9
9
|
|
|
10
10
|
export const treeRow =
|
|
@@ -54,7 +54,7 @@ export const treeRow =
|
|
|
54
54
|
aria-label={toggleAriaLabel || `${isExpanded ? 'Collapse' : 'Expand'} row ${rowIndex}`}
|
|
55
55
|
icon={
|
|
56
56
|
<div className={css(stylesTreeView.tableToggleIcon)}>
|
|
57
|
-
<
|
|
57
|
+
<RhMicronsCaretDownIcon />
|
|
58
58
|
</div>
|
|
59
59
|
}
|
|
60
60
|
/>
|
|
@@ -23,9 +23,9 @@ import {
|
|
|
23
23
|
ToolbarItem,
|
|
24
24
|
PageToggleButton
|
|
25
25
|
} from '@patternfly/react-core';
|
|
26
|
-
import
|
|
26
|
+
import RhUiSettingsFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-settings-fill-icon';
|
|
27
27
|
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
28
|
-
import
|
|
28
|
+
import RhUiQuestionMarkCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-question-mark-circle-fill-icon';
|
|
29
29
|
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
30
30
|
import imgAvatar from '@patternfly/react-table/src/demos/assets/avatarImg.svg';
|
|
31
31
|
|
|
@@ -87,7 +87,7 @@ export const DashboardHeader: React.FC<DashboardHeaderProps> = ({ notificationBa
|
|
|
87
87
|
const kebabDropdownItems = (
|
|
88
88
|
<>
|
|
89
89
|
<DropdownItem>
|
|
90
|
-
<
|
|
90
|
+
<RhUiSettingsFillIcon /> Settings
|
|
91
91
|
</DropdownItem>
|
|
92
92
|
<DropdownItem>
|
|
93
93
|
<HelpIcon /> Help
|
|
@@ -159,7 +159,7 @@ export const DashboardHeader: React.FC<DashboardHeaderProps> = ({ notificationBa
|
|
|
159
159
|
<Button aria-label="Settings" isSettings variant="plain" />
|
|
160
160
|
</ToolbarItem>
|
|
161
161
|
<ToolbarItem>
|
|
162
|
-
<Button aria-label="Help" variant={ButtonVariant.plain} icon={<
|
|
162
|
+
<Button aria-label="Help" variant={ButtonVariant.plain} icon={<RhUiQuestionMarkCircleFillIcon />} />
|
|
163
163
|
</ToolbarItem>
|
|
164
164
|
</ToolbarGroup>
|
|
165
165
|
<ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
|
package/src/demos/Table.md
CHANGED
|
@@ -58,20 +58,19 @@ import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';
|
|
|
58
58
|
import SortAmountDownIcon from '@patternfly/react-icons/dist/esm/icons/sort-amount-down-icon';
|
|
59
59
|
import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
|
|
60
60
|
import SyncIcon from '@patternfly/react-icons/dist/esm/icons/sync-icon';
|
|
61
|
-
import
|
|
62
|
-
import
|
|
61
|
+
import RhUiErrorFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-error-fill-icon';
|
|
62
|
+
import RhUiSettingsFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-settings-fill-icon';
|
|
63
63
|
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
64
|
-
import
|
|
65
|
-
import
|
|
66
|
-
import
|
|
64
|
+
import RhUiQuestionMarkCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-question-mark-circle-fill-icon';
|
|
65
|
+
import RhMicronsCaretDownIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-caret-down-icon';
|
|
66
|
+
import RhMicronsCaretRightIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-caret-right-icon';
|
|
67
67
|
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
|
|
68
|
-
import
|
|
69
|
-
import BlueprintIcon from '@patternfly/react-icons/dist/esm/icons/blueprint-icon';
|
|
68
|
+
import RhUiBlueprintIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-blueprint-icon';
|
|
70
69
|
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
71
70
|
import { DashboardWrapper } from '@patternfly/react-table/dist/esm/demos/DashboardWrapper';
|
|
72
71
|
import { rows, columns } from '@patternfly/react-table/dist/esm/demos/sampleData';
|
|
73
72
|
import spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';
|
|
74
|
-
import
|
|
73
|
+
import RhUiNotificationFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-notification-fill-icon';
|
|
75
74
|
|
|
76
75
|
## Demos
|
|
77
76
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table';
|
|
2
2
|
import { Bullseye, EmptyState, EmptyStateVariant, EmptyStateBody, PageSection } from '@patternfly/react-core';
|
|
3
|
-
import
|
|
3
|
+
import RhUiErrorFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-error-fill-icon';
|
|
4
4
|
import { DashboardWrapper } from '@patternfly/react-table/dist/esm/demos/DashboardWrapper';
|
|
5
5
|
|
|
6
6
|
export const TableEmptyStateError: React.FunctionComponent = () => (
|
|
@@ -21,7 +21,7 @@ export const TableEmptyStateError: React.FunctionComponent = () => (
|
|
|
21
21
|
<Td colSpan={8}>
|
|
22
22
|
<Bullseye>
|
|
23
23
|
<EmptyState
|
|
24
|
-
icon={
|
|
24
|
+
icon={RhUiErrorFillIcon}
|
|
25
25
|
titleText="Unable to connect"
|
|
26
26
|
headingLevel="h2"
|
|
27
27
|
variant={EmptyStateVariant.sm}
|