@patternfly/react-table 5.1.0 → 5.1.1-prerelease.1
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 +11 -3
- 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/ActionsColumn.d.ts.map +1 -1
- package/dist/esm/components/Table/ActionsColumn.js.map +1 -1
- package/dist/esm/components/Table/EditColumn.js +3 -3
- 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/RowWrapper.d.ts +2 -1
- package/dist/esm/components/Table/RowWrapper.d.ts.map +1 -1
- package/dist/esm/components/Table/RowWrapper.js +2 -1
- package/dist/esm/components/Table/RowWrapper.js.map +1 -1
- package/dist/esm/components/Table/Table.d.ts +3 -1
- package/dist/esm/components/Table/Table.d.ts.map +1 -1
- package/dist/esm/components/Table/Table.js +4 -4
- package/dist/esm/components/Table/Table.js.map +1 -1
- package/dist/esm/components/Table/base/evaluate-transforms.js +2 -2
- package/dist/esm/components/Table/base/evaluate-transforms.js.map +1 -1
- package/dist/esm/components/Table/base/provider.d.ts +3 -2
- package/dist/esm/components/Table/base/provider.d.ts.map +1 -1
- package/dist/esm/components/Table/base/provider.js +2 -1
- package/dist/esm/components/Table/base/provider.js.map +1 -1
- package/dist/esm/components/Table/base/types.d.ts +1 -1
- 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/cellActions.d.ts.map +1 -1
- package/dist/esm/components/Table/utils/decorators/cellActions.js.map +1 -1
- package/dist/esm/components/Table/utils/decorators/cellWidth.d.ts.map +1 -1
- package/dist/esm/components/Table/utils/decorators/cellWidth.js.map +1 -1
- package/dist/esm/components/Table/utils/decorators/classNames.d.ts.map +1 -1
- package/dist/esm/components/Table/utils/decorators/classNames.js +1 -1
- package/dist/esm/components/Table/utils/decorators/classNames.js.map +1 -1
- package/dist/esm/components/Table/utils/decorators/editable.js +2 -2
- package/dist/esm/components/Table/utils/decorators/editable.js.map +1 -1
- package/dist/esm/components/Table/utils/headerUtils.d.ts.map +1 -1
- package/dist/esm/components/Table/utils/headerUtils.js +1 -6
- package/dist/esm/components/Table/utils/headerUtils.js.map +1 -1
- package/dist/esm/components/Table/utils/utils.d.ts.map +1 -1
- package/dist/esm/components/Table/utils/utils.js +7 -10
- package/dist/esm/components/Table/utils/utils.js.map +1 -1
- package/dist/esm/deprecated/components/Table/BodyWrapper.js +1 -1
- package/dist/esm/deprecated/components/Table/BodyWrapper.js.map +1 -1
- package/dist/esm/deprecated/components/Table/Table.d.ts +2 -1
- package/dist/esm/deprecated/components/Table/Table.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Table/Table.js +2 -1
- package/dist/esm/deprecated/components/Table/Table.js.map +1 -1
- package/dist/esm/deprecated/components/Table/base/body-row.d.ts +2 -1
- package/dist/esm/deprecated/components/Table/base/body-row.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Table/base/body-row.js +2 -1
- package/dist/esm/deprecated/components/Table/base/body-row.js.map +1 -1
- package/dist/esm/deprecated/components/Table/base/body.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Table/base/body.js.map +1 -1
- package/dist/esm/deprecated/components/Table/base/header.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Table/base/header.js.map +1 -1
- package/dist/js/components/Table/ActionsColumn.d.ts.map +1 -1
- package/dist/js/components/Table/ActionsColumn.js +6 -6
- package/dist/js/components/Table/ActionsColumn.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/DraggableCell.js +2 -2
- package/dist/js/components/Table/DraggableCell.js.map +1 -1
- package/dist/js/components/Table/EditColumn.js +7 -7
- 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 +1 -1
- package/dist/js/components/Table/EditableSelectInputCell.js.map +1 -1
- package/dist/js/components/Table/EditableTextCell.js +1 -1
- package/dist/js/components/Table/EditableTextCell.js.map +1 -1
- package/dist/js/components/Table/FavoritesCell.js +2 -2
- package/dist/js/components/Table/FavoritesCell.js.map +1 -1
- package/dist/js/components/Table/HeaderCellInfoWrapper.js +4 -4
- package/dist/js/components/Table/HeaderCellInfoWrapper.js.map +1 -1
- package/dist/js/components/Table/RowWrapper.d.ts +2 -1
- package/dist/js/components/Table/RowWrapper.d.ts.map +1 -1
- package/dist/js/components/Table/RowWrapper.js +1 -2
- package/dist/js/components/Table/RowWrapper.js.map +1 -1
- package/dist/js/components/Table/SortColumn.js +3 -3
- package/dist/js/components/Table/SortColumn.js.map +1 -1
- package/dist/js/components/Table/Table.d.ts +3 -1
- package/dist/js/components/Table/Table.d.ts.map +1 -1
- package/dist/js/components/Table/Table.js +4 -4
- package/dist/js/components/Table/Table.js.map +1 -1
- package/dist/js/components/Table/TableText.js +1 -1
- package/dist/js/components/Table/TableText.js.map +1 -1
- package/dist/js/components/Table/TableTypes.js +0 -4
- package/dist/js/components/Table/TableTypes.js.map +1 -1
- package/dist/js/components/Table/Td.js +1 -1
- package/dist/js/components/Table/Td.js.map +1 -1
- package/dist/js/components/Table/Th.js +1 -1
- package/dist/js/components/Table/Th.js.map +1 -1
- package/dist/js/components/Table/Tr.js +1 -1
- package/dist/js/components/Table/Tr.js.map +1 -1
- package/dist/js/components/Table/base/evaluate-transforms.js +2 -2
- package/dist/js/components/Table/base/evaluate-transforms.js.map +1 -1
- package/dist/js/components/Table/base/provider.d.ts +3 -2
- package/dist/js/components/Table/base/provider.d.ts.map +1 -1
- package/dist/js/components/Table/base/provider.js.map +1 -1
- package/dist/js/components/Table/base/types.d.ts +1 -1
- package/dist/js/components/Table/base/types.d.ts.map +1 -1
- package/dist/js/components/Table/base/types.js +0 -4
- package/dist/js/components/Table/base/types.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/cellActions.d.ts.map +1 -1
- package/dist/js/components/Table/utils/decorators/cellActions.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/cellWidth.d.ts.map +1 -1
- package/dist/js/components/Table/utils/decorators/cellWidth.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/classNames.d.ts.map +1 -1
- package/dist/js/components/Table/utils/decorators/classNames.js +1 -1
- package/dist/js/components/Table/utils/decorators/classNames.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/editable.js +2 -2
- package/dist/js/components/Table/utils/decorators/editable.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/sortable.js +1 -1
- package/dist/js/components/Table/utils/decorators/sortable.js.map +1 -1
- package/dist/js/components/Table/utils/decorators/treeRow.js +4 -4
- package/dist/js/components/Table/utils/decorators/treeRow.js.map +1 -1
- package/dist/js/components/Table/utils/headerUtils.d.ts.map +1 -1
- package/dist/js/components/Table/utils/headerUtils.js +1 -6
- package/dist/js/components/Table/utils/headerUtils.js.map +1 -1
- package/dist/js/components/Table/utils/utils.d.ts.map +1 -1
- package/dist/js/components/Table/utils/utils.js +7 -10
- package/dist/js/components/Table/utils/utils.js.map +1 -1
- package/dist/js/deprecated/components/Table/BodyCell.js +3 -4
- package/dist/js/deprecated/components/Table/BodyCell.js.map +1 -1
- package/dist/js/deprecated/components/Table/BodyWrapper.js +1 -1
- package/dist/js/deprecated/components/Table/BodyWrapper.js.map +1 -1
- package/dist/js/deprecated/components/Table/Table.d.ts +2 -1
- package/dist/js/deprecated/components/Table/Table.d.ts.map +1 -1
- package/dist/js/deprecated/components/Table/Table.js +1 -1
- package/dist/js/deprecated/components/Table/Table.js.map +1 -1
- package/dist/js/deprecated/components/Table/base/body-row.d.ts +2 -1
- package/dist/js/deprecated/components/Table/base/body-row.d.ts.map +1 -1
- package/dist/js/deprecated/components/Table/base/body-row.js.map +1 -1
- package/dist/js/deprecated/components/Table/base/body.d.ts.map +1 -1
- package/dist/js/deprecated/components/Table/base/body.js.map +1 -1
- package/dist/js/deprecated/components/Table/base/header.d.ts.map +1 -1
- package/dist/js/deprecated/components/Table/base/header.js.map +1 -1
- package/dist/umd/react-table.min.js +5 -5
- package/package.json +7 -8
- package/src/components/Table/ActionsColumn.tsx +3 -1
- package/src/components/Table/EditColumn.tsx +3 -3
- package/src/components/Table/EditableSelectInputCell.tsx +1 -4
- package/src/components/Table/RowWrapper.tsx +5 -3
- package/src/components/Table/Table.tsx +5 -1
- package/src/components/Table/base/evaluate-transforms.ts +2 -2
- package/src/components/Table/base/provider.tsx +3 -1
- package/src/components/Table/base/types.tsx +1 -4
- package/src/components/Table/examples/Table.md +7 -0
- package/src/components/Table/examples/TableActions.tsx +1 -1
- package/src/components/Table/examples/TableBasic.tsx +1 -1
- package/src/components/Table/examples/TableCellWidth.tsx +1 -1
- package/src/components/Table/examples/TableClickable.tsx +1 -1
- package/src/components/Table/examples/TableDraggable.tsx +10 -10
- package/src/components/Table/examples/TableExpandable.tsx +3 -3
- package/src/components/Table/examples/TableFavoritable.tsx +6 -6
- package/src/components/Table/examples/TableMultipleStickyColumns.tsx +1 -1
- package/src/components/Table/examples/TableNestedExpandable.tsx +3 -12
- package/src/components/Table/examples/TableNestedTableExpandable.tsx +5 -15
- package/src/components/Table/examples/TableRightStickyColumn.tsx +1 -1
- package/src/components/Table/examples/TableSelectable.tsx +4 -4
- package/src/components/Table/examples/TableStickyColumn.tsx +1 -1
- package/src/components/Table/examples/TableStickyColumnsAndHeader.tsx +1 -1
- package/src/components/Table/examples/TableStriped.tsx +1 -1
- package/src/components/Table/examples/TableStripedExpandable.tsx +4 -9
- package/src/components/Table/examples/TableStripedMultipleTbody.tsx +2 -2
- package/src/components/Table/examples/TableTree.tsx +10 -10
- package/src/components/Table/examples/TableTreeNoInset.tsx +121 -0
- package/src/components/Table/utils/decorators/cellActions.tsx +51 -53
- package/src/components/Table/utils/decorators/cellWidth.ts +9 -9
- package/src/components/Table/utils/decorators/classNames.ts +6 -4
- package/src/components/Table/utils/decorators/editable.tsx +2 -2
- package/src/components/Table/utils/headerUtils.test.tsx +10 -10
- package/src/components/Table/utils/headerUtils.tsx +1 -7
- package/src/components/Table/utils/utils.tsx +7 -11
- package/src/deprecated/components/Table/BodyWrapper.tsx +1 -1
- package/src/deprecated/components/Table/Table.tsx +5 -2
- package/src/deprecated/components/Table/base/body-row.tsx +3 -1
- package/src/deprecated/components/Table/base/body.tsx +8 -1
- package/src/deprecated/components/Table/base/header.tsx +1 -6
- package/src/deprecated/components/Table/examples/LegacyTableActions.tsx +3 -8
- package/src/deprecated/components/Table/examples/LegacyTableBasic.tsx +1 -1
- package/src/deprecated/components/Table/examples/LegacyTableCellWidth.tsx +1 -1
- package/src/deprecated/components/Table/examples/LegacyTableClickable.tsx +1 -1
- package/src/deprecated/components/Table/examples/LegacyTableControllingText.tsx +1 -8
- package/src/deprecated/components/Table/examples/LegacyTableExpandable.tsx +4 -4
- package/src/deprecated/components/Table/examples/LegacyTableFavoritable.tsx +6 -6
- package/src/deprecated/components/Table/examples/LegacyTableSelectableRadio.tsx +1 -1
- package/src/deprecated/components/Table/examples/LegacyTableSortable.tsx +1 -1
- package/src/deprecated/components/Table/examples/LegacyTableStriped.tsx +1 -1
- package/src/deprecated/components/Table/examples/LegacyTableStripedCustomTr.tsx +1 -1
- package/src/deprecated/components/Table/examples/LegacyTableStripedExpandable.tsx +4 -4
- package/src/deprecated/components/Table/examples/LegacyTableTree.tsx +9 -9
- package/src/docs/demos/Table.md +2 -2
- package/src/test-helpers/MockedTableChanges.js +20 -18
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Table, Thead, Tr, Th, Tbody, Td, TreeRowWrapper, TdProps } from '@patternfly/react-table';
|
|
3
|
+
import LeafIcon from '@patternfly/react-icons/dist/esm/icons/leaf-icon';
|
|
4
|
+
|
|
5
|
+
interface RepositoriesTreeNode {
|
|
6
|
+
name: string;
|
|
7
|
+
branches: string;
|
|
8
|
+
pullRequests: string;
|
|
9
|
+
workspaces: string;
|
|
10
|
+
children?: RepositoriesTreeNode[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const TableTreeNoInset: React.FunctionComponent = () => {
|
|
14
|
+
// In real usage, this data would come from some external source like an API via props.
|
|
15
|
+
const data: RepositoriesTreeNode[] = [
|
|
16
|
+
{
|
|
17
|
+
name: 'Repositories one',
|
|
18
|
+
branches: 'Branch one',
|
|
19
|
+
pullRequests: 'Pull request one',
|
|
20
|
+
workspaces: 'Workplace one',
|
|
21
|
+
children: []
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'Repositories seven',
|
|
25
|
+
branches: 'Branch seven',
|
|
26
|
+
pullRequests: 'Pull request seven',
|
|
27
|
+
workspaces: 'Workplace seven',
|
|
28
|
+
children: []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'Repositories nine',
|
|
32
|
+
branches: 'Branch nine',
|
|
33
|
+
pullRequests: 'Pull request nine',
|
|
34
|
+
workspaces: 'Workplace nine'
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const columnNames = {
|
|
39
|
+
name: 'Repositories',
|
|
40
|
+
branches: 'Branches',
|
|
41
|
+
prs: 'Pull requests',
|
|
42
|
+
workspaces: 'Workspaces'
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const [selectedNodeNames, setSelectedNodeNames] = React.useState<string[]>([]);
|
|
46
|
+
const isNodeChecked = (node: RepositoriesTreeNode) => selectedNodeNames.includes(node.name);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
Recursive function which flattens the data into an array of flattened TreeRowWrapper components
|
|
50
|
+
params:
|
|
51
|
+
- nodes - array of a single level of tree nodes
|
|
52
|
+
- level - number representing how deeply nested the current row is
|
|
53
|
+
- posinset - position of the row relative to this row's siblings
|
|
54
|
+
- currentRowIndex - position of the row relative to the entire table
|
|
55
|
+
- isHidden - defaults to false, true if this row's parent is expanded
|
|
56
|
+
*/
|
|
57
|
+
const renderRows = (
|
|
58
|
+
[node, ...remainingNodes]: RepositoriesTreeNode[],
|
|
59
|
+
level = 1,
|
|
60
|
+
posinset = 1,
|
|
61
|
+
rowIndex = 0,
|
|
62
|
+
isHidden = false
|
|
63
|
+
): React.ReactNode[] => {
|
|
64
|
+
if (!node) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const isChecked = isNodeChecked(node);
|
|
68
|
+
const icon = <LeafIcon />;
|
|
69
|
+
|
|
70
|
+
const treeRow: TdProps['treeRow'] = {
|
|
71
|
+
onCollapse: () => {},
|
|
72
|
+
onToggleRowDetails: () => {},
|
|
73
|
+
onCheckChange: (_event, isChecking) => {
|
|
74
|
+
setSelectedNodeNames((prevSelected) => {
|
|
75
|
+
const otherSelectedNodeNames = prevSelected.filter((name) => name === node.name);
|
|
76
|
+
return !isChecking ? otherSelectedNodeNames : [...otherSelectedNodeNames, node.name];
|
|
77
|
+
});
|
|
78
|
+
},
|
|
79
|
+
rowIndex,
|
|
80
|
+
props: {
|
|
81
|
+
isHidden,
|
|
82
|
+
'aria-level': level,
|
|
83
|
+
'aria-posinset': posinset,
|
|
84
|
+
'aria-setsize': node.children ? node.children.length : 0,
|
|
85
|
+
isChecked,
|
|
86
|
+
checkboxId: `flat_checkbox_id_${node.name.toLowerCase().replace(/\s+/g, '_')}`,
|
|
87
|
+
icon
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const childRows =
|
|
92
|
+
node.children && node.children.length ? renderRows(node.children, level + 1, 1, rowIndex + 1, isHidden) : [];
|
|
93
|
+
|
|
94
|
+
return [
|
|
95
|
+
<TreeRowWrapper key={node.name} row={{ props: treeRow.props }}>
|
|
96
|
+
<Td dataLabel={columnNames.name} treeRow={treeRow}>
|
|
97
|
+
{node.name}
|
|
98
|
+
</Td>
|
|
99
|
+
<Td dataLabel={columnNames.branches}>{node.branches}</Td>
|
|
100
|
+
<Td dataLabel={columnNames.prs}>{node.pullRequests}</Td>
|
|
101
|
+
<Td dataLabel={columnNames.workspaces}>{node.workspaces}</Td>
|
|
102
|
+
</TreeRowWrapper>,
|
|
103
|
+
...childRows,
|
|
104
|
+
...renderRows(remainingNodes, level, posinset + 1, rowIndex + 1 + childRows.length, isHidden)
|
|
105
|
+
];
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
return (
|
|
109
|
+
<Table isTreeTable aria-label="Tree table" hasNoInset>
|
|
110
|
+
<Thead>
|
|
111
|
+
<Tr>
|
|
112
|
+
<Th width={40}>{columnNames.name}</Th>
|
|
113
|
+
<Th>{columnNames.branches}</Th>
|
|
114
|
+
<Th>{columnNames.prs}</Th>
|
|
115
|
+
<Th>{columnNames.workspaces}</Th>
|
|
116
|
+
</Tr>
|
|
117
|
+
</Thead>
|
|
118
|
+
<Tbody>{renderRows(data)}</Tbody>
|
|
119
|
+
</Table>
|
|
120
|
+
);
|
|
121
|
+
};
|
|
@@ -21,59 +21,57 @@ const resolveOrDefault = (
|
|
|
21
21
|
extraData: IExtraData
|
|
22
22
|
) => (typeof resolver === 'function' ? resolver(rowData, extraData) : defaultValue);
|
|
23
23
|
|
|
24
|
-
export const cellActions =
|
|
25
|
-
actions: IActions,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
extraData
|
|
53
|
-
) as boolean;
|
|
24
|
+
export const cellActions =
|
|
25
|
+
(actions: IActions, actionResolver: IActionsResolver, areActionsDisabled: IAreActionsDisabled): ITransform =>
|
|
26
|
+
(
|
|
27
|
+
label: IFormatterValueType,
|
|
28
|
+
{
|
|
29
|
+
rowData,
|
|
30
|
+
column,
|
|
31
|
+
rowIndex,
|
|
32
|
+
columnIndex,
|
|
33
|
+
column: {
|
|
34
|
+
extraParams: { actionsToggle, actionsPopperProps }
|
|
35
|
+
},
|
|
36
|
+
property
|
|
37
|
+
}: IExtra
|
|
38
|
+
) => {
|
|
39
|
+
const extraData = {
|
|
40
|
+
rowIndex,
|
|
41
|
+
columnIndex,
|
|
42
|
+
column,
|
|
43
|
+
property
|
|
44
|
+
};
|
|
45
|
+
const resolvedActions = resolveOrDefault(actionResolver, actions, rowData, extraData) as IAction[];
|
|
46
|
+
const resolvedIsDisabled = resolveOrDefault(
|
|
47
|
+
areActionsDisabled,
|
|
48
|
+
rowData && rowData.disableActions,
|
|
49
|
+
rowData,
|
|
50
|
+
extraData
|
|
51
|
+
) as boolean;
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
53
|
+
const renderProps =
|
|
54
|
+
resolvedActions && (resolvedActions as []).length > 0
|
|
55
|
+
? {
|
|
56
|
+
children: (
|
|
57
|
+
<ActionsColumn
|
|
58
|
+
items={resolvedActions}
|
|
59
|
+
isDisabled={resolvedIsDisabled}
|
|
60
|
+
rowData={rowData}
|
|
61
|
+
extraData={extraData}
|
|
62
|
+
actionsToggle={actionsToggle}
|
|
63
|
+
popperProps={actionsPopperProps}
|
|
64
|
+
>
|
|
65
|
+
{label as React.ReactNode}
|
|
66
|
+
</ActionsColumn>
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
: {};
|
|
72
70
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
return {
|
|
72
|
+
className: css(styles.tableAction),
|
|
73
|
+
style: { paddingRight: 0 },
|
|
74
|
+
isVisible: true,
|
|
75
|
+
...renderProps
|
|
76
|
+
};
|
|
78
77
|
};
|
|
79
|
-
};
|
|
@@ -19,12 +19,12 @@ type WidthClass =
|
|
|
19
19
|
| 'width_90'
|
|
20
20
|
| 'width_100';
|
|
21
21
|
|
|
22
|
-
export const cellWidth =
|
|
23
|
-
width: 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 60 | 70 | 80 | 90 | 100
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
});
|
|
22
|
+
export const cellWidth =
|
|
23
|
+
(width: 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 60 | 70 | 80 | 90 | 100): ITransform =>
|
|
24
|
+
() => ({
|
|
25
|
+
className: css(
|
|
26
|
+
styles.modifiers[
|
|
27
|
+
typeof width === 'number' ? (`width_${width}` as WidthClass) : (`width${capitalize(width)}` as WidthClass)
|
|
28
|
+
]
|
|
29
|
+
)
|
|
30
|
+
});
|
|
@@ -31,13 +31,15 @@ export interface IVisibility {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export const Visibility = visibilityModifiers
|
|
34
|
-
.filter(key => styles.modifiers[key])
|
|
34
|
+
.filter((key) => styles.modifiers[key])
|
|
35
35
|
.reduce((acc, curr) => {
|
|
36
36
|
const key2 = curr.replace('_2xl', '2Xl') as keyof typeof Visibility;
|
|
37
37
|
acc[key2] = styles.modifiers[curr];
|
|
38
38
|
return acc;
|
|
39
39
|
}, {} as IVisibility);
|
|
40
40
|
|
|
41
|
-
export const classNames =
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
export const classNames =
|
|
42
|
+
(...classes: string[]): ITransform =>
|
|
43
|
+
() => ({
|
|
44
|
+
className: css(...classes)
|
|
45
|
+
});
|
|
@@ -15,7 +15,7 @@ export const editable: ITransform = (label: IFormatterValueType, { rowIndex, row
|
|
|
15
15
|
validationErrors =
|
|
16
16
|
rowData.rowEditValidationRules &&
|
|
17
17
|
rowData.rowEditValidationRules.reduce((acc, rule) => {
|
|
18
|
-
const invalidCells = (rowData.cells as IRowCell[]).filter(cellData => {
|
|
18
|
+
const invalidCells = (rowData.cells as IRowCell[]).filter((cellData) => {
|
|
19
19
|
const testValue =
|
|
20
20
|
cellData.props.editableValue === '' ? '' : cellData.props.editableValue || cellData.props.value;
|
|
21
21
|
|
|
@@ -45,7 +45,7 @@ export const editable: ITransform = (label: IFormatterValueType, { rowIndex, row
|
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
if (invalidCells.length) {
|
|
48
|
-
acc[rule.name] = invalidCells.map(cell => cell.props.name);
|
|
48
|
+
acc[rule.name] = invalidCells.map((cell) => cell.props.name);
|
|
49
49
|
}
|
|
50
50
|
return acc;
|
|
51
51
|
}, {} as RowErrors);
|
|
@@ -12,9 +12,9 @@ describe('headerUtils', () => {
|
|
|
12
12
|
expect(collapsibleTransfroms[0].extraParams.onCollapse).toBeDefined();
|
|
13
13
|
expect(collapsibleTransfroms[0].header.transforms).toHaveLength(2);
|
|
14
14
|
expect(collapsibleTransfroms[1].cell.transforms).toHaveLength(3);
|
|
15
|
-
expect(collapsibleTransfroms[1].cell.transforms.find(transform => transform.name === 'parentId')).toBeDefined();
|
|
15
|
+
expect(collapsibleTransfroms[1].cell.transforms.find((transform) => transform.name === 'parentId')).toBeDefined();
|
|
16
16
|
expect(
|
|
17
|
-
collapsibleTransfroms[1].cell.transforms.find(transform => transform.name === 'expandedRowFormatter')
|
|
17
|
+
collapsibleTransfroms[1].cell.transforms.find((transform) => transform.name === 'expandedRowFormatter')
|
|
18
18
|
).toBeDefined();
|
|
19
19
|
});
|
|
20
20
|
|
|
@@ -101,8 +101,8 @@ describe('headerUtils', () => {
|
|
|
101
101
|
],
|
|
102
102
|
{}
|
|
103
103
|
);
|
|
104
|
-
expect(result[0].header.formatters.find(formatter => formatter.name === 'testFunc')).toBeDefined();
|
|
105
|
-
expect(result[0].header.transforms.find(transform => transform.name === 'testFunc')).toBeDefined();
|
|
104
|
+
expect(result[0].header.formatters.find((formatter) => formatter.name === 'testFunc')).toBeDefined();
|
|
105
|
+
expect(result[0].header.transforms.find((transform) => transform.name === 'testFunc')).toBeDefined();
|
|
106
106
|
});
|
|
107
107
|
|
|
108
108
|
test('custom functions in header', () => {
|
|
@@ -119,8 +119,8 @@ describe('headerUtils', () => {
|
|
|
119
119
|
],
|
|
120
120
|
{}
|
|
121
121
|
);
|
|
122
|
-
expect(result[0].header.formatters.find(formatter => formatter.name === 'testFunc')).toBeDefined();
|
|
123
|
-
expect(result[0].header.transforms.find(transform => transform.name === 'testFunc')).toBeDefined();
|
|
122
|
+
expect(result[0].header.formatters.find((formatter) => formatter.name === 'testFunc')).toBeDefined();
|
|
123
|
+
expect(result[0].header.transforms.find((transform) => transform.name === 'testFunc')).toBeDefined();
|
|
124
124
|
});
|
|
125
125
|
});
|
|
126
126
|
|
|
@@ -151,8 +151,8 @@ describe('headerUtils', () => {
|
|
|
151
151
|
],
|
|
152
152
|
{}
|
|
153
153
|
);
|
|
154
|
-
expect(result[0].cell.formatters.find(formatter => formatter.name === 'testFunc')).toBeDefined();
|
|
155
|
-
expect(result[0].cell.transforms.find(transform => transform.name === 'testFunc')).toBeDefined();
|
|
154
|
+
expect(result[0].cell.formatters.find((formatter) => formatter.name === 'testFunc')).toBeDefined();
|
|
155
|
+
expect(result[0].cell.transforms.find((transform) => transform.name === 'testFunc')).toBeDefined();
|
|
156
156
|
});
|
|
157
157
|
|
|
158
158
|
test('custom functions in header', () => {
|
|
@@ -169,8 +169,8 @@ describe('headerUtils', () => {
|
|
|
169
169
|
],
|
|
170
170
|
{}
|
|
171
171
|
);
|
|
172
|
-
expect(result[0].cell.formatters.find(formatter => formatter.name === 'testFunc')).toBeDefined();
|
|
173
|
-
expect(result[0].cell.transforms.find(transform => transform.name === 'testFunc')).toBeDefined();
|
|
172
|
+
expect(result[0].cell.formatters.find((formatter) => formatter.name === 'testFunc')).toBeDefined();
|
|
173
|
+
expect(result[0].cell.transforms.find((transform) => transform.name === 'testFunc')).toBeDefined();
|
|
174
174
|
});
|
|
175
175
|
|
|
176
176
|
describe('custom dataLabel', () => {
|
|
@@ -99,13 +99,7 @@ const mapHeader = (column: ICell, extra: any, key: number, ...props: any) => {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
return {
|
|
102
|
-
property:
|
|
103
|
-
(typeof title === 'string' &&
|
|
104
|
-
title
|
|
105
|
-
.toLowerCase()
|
|
106
|
-
.trim()
|
|
107
|
-
.replace(/\s/g, '-')) ||
|
|
108
|
-
`column-${key}`,
|
|
102
|
+
property: (typeof title === 'string' && title.toLowerCase().trim().replace(/\s/g, '-')) || `column-${key}`,
|
|
109
103
|
extraParams: extra,
|
|
110
104
|
data: column.data,
|
|
111
105
|
header: generateHeader(column, title),
|
|
@@ -37,12 +37,12 @@ export const isRowExpanded = (row: IRow, rows: IRow[]) => {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
export const getErrorTextByValidator = (validatorName: string, validators: IValidatorDef[]) => {
|
|
40
|
-
const result = validators.filter(validator => validator.name === validatorName);
|
|
40
|
+
const result = validators.filter((validator) => validator.name === validatorName);
|
|
41
41
|
return result[0].errorText;
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
export const cancelCellEdits = (row: IRow) => {
|
|
45
|
-
(row.cells as IRowCell[]).forEach(cell => {
|
|
45
|
+
(row.cells as IRowCell[]).forEach((cell) => {
|
|
46
46
|
delete cell.props.errorText;
|
|
47
47
|
delete cell.props.editableValue;
|
|
48
48
|
cell.props.isValid = true;
|
|
@@ -65,7 +65,7 @@ export const validateCellEdits = (
|
|
|
65
65
|
) => {
|
|
66
66
|
row.isValid = Object.keys(validationErrors).length ? false : true;
|
|
67
67
|
|
|
68
|
-
(row.cells as IRowCell[]).forEach(cell => {
|
|
68
|
+
(row.cells as IRowCell[]).forEach((cell) => {
|
|
69
69
|
delete cell.props.errorText;
|
|
70
70
|
|
|
71
71
|
const hasValue = cell.props.value !== undefined && cell.props.value !== null;
|
|
@@ -74,8 +74,8 @@ export const validateCellEdits = (
|
|
|
74
74
|
if (cell.props && hasValue && hasEditableValue) {
|
|
75
75
|
if (type === 'save') {
|
|
76
76
|
const errorMsg = Object.keys(validationErrors)
|
|
77
|
-
.filter(validatorName => validationErrors[validatorName].includes(cell.props.name))
|
|
78
|
-
.map(validatorName => getErrorTextByValidator(validatorName, row.rowEditValidationRules));
|
|
77
|
+
.filter((validatorName) => validationErrors[validatorName].includes(cell.props.name))
|
|
78
|
+
.map((validatorName) => getErrorTextByValidator(validatorName, row.rowEditValidationRules));
|
|
79
79
|
|
|
80
80
|
if (errorMsg.length) {
|
|
81
81
|
cell.props.errorText = cell.props.name ? errorMsg.join(', ') : missingPropErrorTxt;
|
|
@@ -94,7 +94,7 @@ export const validateCellEdits = (
|
|
|
94
94
|
};
|
|
95
95
|
|
|
96
96
|
export const applyCellEdits = (row: IRow, type: RowEditType) => {
|
|
97
|
-
(row.cells as IRowCell[]).forEach(cell => {
|
|
97
|
+
(row.cells as IRowCell[]).forEach((cell) => {
|
|
98
98
|
delete cell.props.errorText;
|
|
99
99
|
const hasValue = cell.props.value !== undefined && cell.props.value !== null;
|
|
100
100
|
const hasEditableValue = cell.props.editableValue !== undefined && cell.props.editableValue !== null;
|
|
@@ -119,11 +119,7 @@ export const applyCellEdits = (row: IRow, type: RowEditType) => {
|
|
|
119
119
|
return row;
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
-
const camelize = (s: string) =>
|
|
123
|
-
s
|
|
124
|
-
.toUpperCase()
|
|
125
|
-
.replace('-', '')
|
|
126
|
-
.replace('_', '');
|
|
122
|
+
const camelize = (s: string) => s.toUpperCase().replace('-', '').replace('_', '');
|
|
127
123
|
export const toCamel = (s: string) => s.replace(/([-_][a-z])/gi, camelize);
|
|
128
124
|
|
|
129
125
|
/**
|
|
@@ -28,7 +28,7 @@ export const BodyWrapper: React.FunctionComponent<BodyWrapperProps> = ({
|
|
|
28
28
|
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
29
29
|
...props
|
|
30
30
|
}: BodyWrapperProps) => {
|
|
31
|
-
if (mappedRows && mappedRows.some(row => row.hasOwnProperty('parent'))) {
|
|
31
|
+
if (mappedRows && mappedRows.some((row) => row.hasOwnProperty('parent'))) {
|
|
32
32
|
return (
|
|
33
33
|
<React.Fragment>
|
|
34
34
|
{mapOpenedRows(mappedRows, props.children).map((oneRow, key) => (
|
|
@@ -27,7 +27,8 @@ import {
|
|
|
27
27
|
IHeaderRow,
|
|
28
28
|
OnFavorite,
|
|
29
29
|
TreeRowWrapper,
|
|
30
|
-
CustomActionsToggleProps
|
|
30
|
+
CustomActionsToggleProps
|
|
31
|
+
} from '../../../components';
|
|
31
32
|
|
|
32
33
|
export interface TableProps extends OUIAProps {
|
|
33
34
|
/** Adds an accessible name for the Table */
|
|
@@ -131,7 +132,7 @@ export interface TableProps extends OUIAProps {
|
|
|
131
132
|
ouiaSafe?: boolean;
|
|
132
133
|
}
|
|
133
134
|
|
|
134
|
-
|
|
135
|
+
class Table extends React.Component<TableProps, {}> {
|
|
135
136
|
static displayName = 'Table';
|
|
136
137
|
static hasWarnBeta = false;
|
|
137
138
|
static defaultProps: Partial<TableProps> = {
|
|
@@ -297,3 +298,5 @@ export class Table extends React.Component<TableProps, {}> {
|
|
|
297
298
|
return table;
|
|
298
299
|
}
|
|
299
300
|
}
|
|
301
|
+
|
|
302
|
+
export { Table };
|
|
@@ -28,7 +28,7 @@ export interface BodyRowProps {
|
|
|
28
28
|
rowKey: string;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
class BodyRow extends React.Component<BodyRowProps, {}> {
|
|
32
32
|
static displayName = 'BodyRow';
|
|
33
33
|
static defaultProps = {
|
|
34
34
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -97,3 +97,5 @@ export class BodyRow extends React.Component<BodyRowProps, {}> {
|
|
|
97
97
|
);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
+
|
|
101
|
+
export { BodyRow };
|
|
@@ -6,7 +6,14 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
import isEqual from 'lodash/isEqual';
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
RowsType,
|
|
11
|
+
RowType,
|
|
12
|
+
RowKeyType,
|
|
13
|
+
RenderersTypes,
|
|
14
|
+
createElementType,
|
|
15
|
+
ColumnsType
|
|
16
|
+
} from '../../../../components/Table/base/types';
|
|
10
17
|
import { ProviderContext } from '../../../../components/Table/base/provider';
|
|
11
18
|
import { resolveRowKey } from './resolve-row-key';
|
|
12
19
|
import { BodyRow } from './body-row';
|
|
@@ -5,12 +5,7 @@
|
|
|
5
5
|
* https://github.com/reactabular/reactabular/tree/v8.14.0/packages/reactabular-table/src
|
|
6
6
|
*/
|
|
7
7
|
import * as React from 'react';
|
|
8
|
-
import {
|
|
9
|
-
createElementType,
|
|
10
|
-
RowsType,
|
|
11
|
-
ColumnsType,
|
|
12
|
-
RenderersTypes
|
|
13
|
-
} from '../../../../components/Table/base/types';
|
|
8
|
+
import { createElementType, RowsType, ColumnsType, RenderersTypes } from '../../../../components/Table/base/types';
|
|
14
9
|
import { ProviderContext } from '../../../../components/Table/base/provider';
|
|
15
10
|
|
|
16
11
|
import { HeaderRow } from './header-row';
|
|
@@ -19,12 +19,7 @@ import {
|
|
|
19
19
|
IActionsResolver,
|
|
20
20
|
TableText
|
|
21
21
|
} from '@patternfly/react-table';
|
|
22
|
-
import {
|
|
23
|
-
Table,
|
|
24
|
-
TableBody,
|
|
25
|
-
TableHeader,
|
|
26
|
-
TableProps
|
|
27
|
-
} from '@patternfly/react-table/deprecated';
|
|
22
|
+
import { Table, TableBody, TableHeader, TableProps } from '@patternfly/react-table/deprecated';
|
|
28
23
|
|
|
29
24
|
interface Repository {
|
|
30
25
|
name: string;
|
|
@@ -78,7 +73,7 @@ export const LegacyTableActions: React.FunctionComponent = () => {
|
|
|
78
73
|
{ title: '', dataLabel: 'Action', cellTransforms: [fitContent] }
|
|
79
74
|
];
|
|
80
75
|
|
|
81
|
-
const rows: TableProps['rows'] = repositories.map(repo => {
|
|
76
|
+
const rows: TableProps['rows'] = repositories.map((repo) => {
|
|
82
77
|
let singleActionButton: React.ReactNode = null;
|
|
83
78
|
if (repo.singleAction !== '') {
|
|
84
79
|
singleActionButton = (
|
|
@@ -196,7 +191,7 @@ export const LegacyTableActions: React.FunctionComponent = () => {
|
|
|
196
191
|
rows={rows}
|
|
197
192
|
{...(propToUse === 'actions' && { actions })}
|
|
198
193
|
{...(propToUse === 'actionResolver' && { actionResolver })}
|
|
199
|
-
areActionsDisabled={rowData => !!rowData.disableActions}
|
|
194
|
+
areActionsDisabled={(rowData) => !!rowData.disableActions}
|
|
200
195
|
dropdownPosition="left"
|
|
201
196
|
dropdownDirection="down"
|
|
202
197
|
actionsToggle={useCustomToggle ? customActionsToggle : undefined}
|
|
@@ -45,7 +45,7 @@ export const LegacyTableBasic: React.FunctionComponent = () => {
|
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
const columns: TableProps['cells'] = ['Repositories', 'Branches', 'Pull requests', 'Workspaces', 'Last commit'];
|
|
48
|
-
const rows: TableProps['rows'] = repositories.map(repo => [
|
|
48
|
+
const rows: TableProps['rows'] = repositories.map((repo) => [
|
|
49
49
|
repo.name,
|
|
50
50
|
repo.branches,
|
|
51
51
|
repo.prs,
|
|
@@ -50,7 +50,7 @@ export const LegacyTableCellWidth: React.FunctionComponent = () => {
|
|
|
50
50
|
transforms: [cellWidth(30)]
|
|
51
51
|
}
|
|
52
52
|
];
|
|
53
|
-
const rows: TableProps['rows'] = repositories.map(repo => [
|
|
53
|
+
const rows: TableProps['rows'] = repositories.map((repo) => [
|
|
54
54
|
repo.name,
|
|
55
55
|
repo.branches,
|
|
56
56
|
repo.prs,
|
|
@@ -72,7 +72,7 @@ export const LegacyTableClickable: React.FunctionComponent = () => {
|
|
|
72
72
|
cellTransforms: [textCenter]
|
|
73
73
|
}
|
|
74
74
|
];
|
|
75
|
-
const rows: TableProps['rows'] = repositories.map(repo => {
|
|
75
|
+
const rows: TableProps['rows'] = repositories.map((repo) => {
|
|
76
76
|
let cells: (string | ICell)[] = [repo.name, repo.branches || '', repo.prs || '', repo.workspaces, repo.lastCommit];
|
|
77
77
|
// These rows have arbitrary differences for this example, but these could be based on some other conditions
|
|
78
78
|
if (repo.name === 'one - 2') {
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
cellWidth,
|
|
4
|
-
truncate,
|
|
5
|
-
breakWord,
|
|
6
|
-
wrappable,
|
|
7
|
-
fitContent,
|
|
8
|
-
nowrap
|
|
9
|
-
} from '@patternfly/react-table';
|
|
2
|
+
import { cellWidth, truncate, breakWord, wrappable, fitContent, nowrap } from '@patternfly/react-table';
|
|
10
3
|
import { Table, TableHeader, TableBody, TableProps } from '@patternfly/react-table/deprecated';
|
|
11
4
|
|
|
12
5
|
// This example has been simplified to focus on the text modifier props. In real usage,
|
|
@@ -77,11 +77,11 @@ export const LegacyTableExpandable: React.FunctionComponent = () => {
|
|
|
77
77
|
// In this example, expanded rows are tracked by the repo names from each row. This could be any unique identifier.
|
|
78
78
|
// This is to prevent state from being based on row order index in case we later add sorting.
|
|
79
79
|
// Note that this behavior is very similar to selection state.
|
|
80
|
-
const initialExpandedRepoNames = repositories.filter(repo => !!repo.details).map(repo => repo.name); // Default to all expanded
|
|
80
|
+
const initialExpandedRepoNames = repositories.filter((repo) => !!repo.details).map((repo) => repo.name); // Default to all expanded
|
|
81
81
|
const [expandedRepoNames, setExpandedRepoNames] = React.useState<string[]>(initialExpandedRepoNames);
|
|
82
82
|
const setRepoExpanded = (repo: Repository, isExpanding = true) =>
|
|
83
|
-
setExpandedRepoNames(prevExpanded => {
|
|
84
|
-
const otherExpandedRepoNames = prevExpanded.filter(r => r !== repo.name);
|
|
83
|
+
setExpandedRepoNames((prevExpanded) => {
|
|
84
|
+
const otherExpandedRepoNames = prevExpanded.filter((r) => r !== repo.name);
|
|
85
85
|
return isExpanding ? [...otherExpandedRepoNames, repo.name] : otherExpandedRepoNames;
|
|
86
86
|
});
|
|
87
87
|
const isRepoExpanded = (repo: Repository) => expandedRepoNames.includes(repo.name);
|
|
@@ -103,7 +103,7 @@ export const LegacyTableExpandable: React.FunctionComponent = () => {
|
|
|
103
103
|
{ title: '' /* deliberately empty */, dataLabel: 'Label for mobile view' }
|
|
104
104
|
];
|
|
105
105
|
const rows: TableProps['rows'] = [];
|
|
106
|
-
repositories.forEach(repo => {
|
|
106
|
+
repositories.forEach((repo) => {
|
|
107
107
|
rows.push({
|
|
108
108
|
...(repo.details ? { isOpen: isRepoExpanded(repo) } : {}),
|
|
109
109
|
cells: [repo.name, repo.branches, repo.prs, repo.workspaces]
|
|
@@ -30,8 +30,8 @@ export const LegacyTableFavoritable: React.FunctionComponent = () => {
|
|
|
30
30
|
// Favorite state is similar to selection state. See selectedRepoNames and associated code below.
|
|
31
31
|
const [favoriteRepoNames, setFavoriteRepoNames] = React.useState<string[]>([]);
|
|
32
32
|
const setRepoFavorited = (repo: Repository, isFavoriting = true) =>
|
|
33
|
-
setFavoriteRepoNames(prevFavorites => {
|
|
34
|
-
const otherFavorites = prevFavorites.filter(r => r !== repo.name);
|
|
33
|
+
setFavoriteRepoNames((prevFavorites) => {
|
|
34
|
+
const otherFavorites = prevFavorites.filter((r) => r !== repo.name);
|
|
35
35
|
return isFavoriting ? [...otherFavorites, repo.name] : otherFavorites;
|
|
36
36
|
});
|
|
37
37
|
const isRepoFavorited = (repo: Repository) => favoriteRepoNames.includes(repo.name);
|
|
@@ -78,12 +78,12 @@ export const LegacyTableFavoritable: React.FunctionComponent = () => {
|
|
|
78
78
|
// This is to prevent state from being based on row order index in case we later add sorting.
|
|
79
79
|
const [selectedRepoNames, setSelectedRepoNames] = React.useState<string[]>([]);
|
|
80
80
|
const setRepoSelected = (repo: Repository, isSelecting = true) =>
|
|
81
|
-
setSelectedRepoNames(prevSelected => {
|
|
82
|
-
const otherSelectedRepoNames = prevSelected.filter(r => r !== repo.name);
|
|
81
|
+
setSelectedRepoNames((prevSelected) => {
|
|
82
|
+
const otherSelectedRepoNames = prevSelected.filter((r) => r !== repo.name);
|
|
83
83
|
return isSelecting && isRepoSelectable(repo) ? [...otherSelectedRepoNames, repo.name] : otherSelectedRepoNames;
|
|
84
84
|
});
|
|
85
85
|
const selectAllRepos = (isSelecting = true) =>
|
|
86
|
-
setSelectedRepoNames(isSelecting ? selectableRepos.map(r => r.name) : []);
|
|
86
|
+
setSelectedRepoNames(isSelecting ? selectableRepos.map((r) => r.name) : []);
|
|
87
87
|
const isRepoSelected = (repo: Repository) => selectedRepoNames.includes(repo.name);
|
|
88
88
|
|
|
89
89
|
const columns: TableProps['cells'] = [
|
|
@@ -93,7 +93,7 @@ export const LegacyTableFavoritable: React.FunctionComponent = () => {
|
|
|
93
93
|
'Workspaces',
|
|
94
94
|
'Last commit'
|
|
95
95
|
];
|
|
96
|
-
const rows: TableProps['rows'] = sortedRepositories.map(repo => {
|
|
96
|
+
const rows: TableProps['rows'] = sortedRepositories.map((repo) => {
|
|
97
97
|
const favorited = isRepoFavorited(repo);
|
|
98
98
|
return {
|
|
99
99
|
favorited,
|
|
@@ -31,7 +31,7 @@ export const LegacyTableSelectableRadio: React.FunctionComponent = () => {
|
|
|
31
31
|
'Workspaces',
|
|
32
32
|
'Last commit'
|
|
33
33
|
];
|
|
34
|
-
const rows: TableProps['rows'] = repositories.map(repo => ({
|
|
34
|
+
const rows: TableProps['rows'] = repositories.map((repo) => ({
|
|
35
35
|
cells: [repo.name, repo.branches, repo.prs, repo.workspaces, repo.lastCommit],
|
|
36
36
|
selected: selectedRepoName === repo.name,
|
|
37
37
|
disableSelection: !isRepoSelectable(repo)
|