Skip to content

Commit 42f6060

Browse files
authored
fix(table): update types in table (#3296)
update/align onSelect event type from React.MouseEvent and React.ChangeEvent<HTMLInputElement> to React.FormEvent<HTMLInputElement> clear todo and tslint error in selectable transform types for ICustomCell and ISelectTransform clear noImplicitAny errors for Table
1 parent f26fd0c commit 42f6060

File tree

11 files changed

+112
-81
lines changed

11 files changed

+112
-81
lines changed

packages/react-integration/demo-app-ts/src/components/demos/TableDemo/TableActionsDemo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export class TableActionsDemo extends React.Component<TableProps, TableState> {
5050

5151
actionResolver(rowData: IRowData, { rowIndex }: IExtra) {
5252
if (rowIndex === 1) {
53-
return null;
53+
return [];
5454
}
5555

5656
const thirdAction: IActions =

packages/react-integration/demo-app-ts/src/components/demos/TableDemo/TableSelectableDemo.tsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as React from 'react';
22
import { Table, TableHeader, TableBody, TableProps, headerCol, ICell, IRow } from '@patternfly/react-table';
33
import { Checkbox } from '@patternfly/react-core';
4+
import '@patternfly/patternfly/utilities/Spacing/spacing.css';
45

56
interface TableState {
67
columns: (ICell | string)[];
@@ -36,9 +37,10 @@ export class TableSelectableDemo extends React.Component<TableProps, TableState>
3637
canSelectAll: true
3738
};
3839
this.onSelect = this.onSelect.bind(this);
40+
this.toggleSelect = this.toggleSelect.bind(this);
3941
}
4042

41-
onSelect(event: React.MouseEvent, isSelected: boolean, rowId: number) {
43+
onSelect(event: React.FormEvent, isSelected: boolean, rowId: number) {
4244
let rows: IRow[];
4345
if (rowId === -1) {
4446
rows = this.state.rows.map(oneRow => {
@@ -65,28 +67,29 @@ export class TableSelectableDemo extends React.Component<TableProps, TableState>
6567
}
6668

6769
render() {
68-
const { columns, rows } = this.state;
70+
const { columns, rows, canSelectAll } = this.state;
6971

7072
return (
7173
<div>
74+
<Checkbox
75+
label="Can select all"
76+
className="pf-u-mb-lg"
77+
isChecked={canSelectAll}
78+
onChange={this.toggleSelect}
79+
aria-label="toggle select all checkbox"
80+
id="toggle-select-all"
81+
name="toggle-select-all"
82+
/>
7283
<Table
73-
caption="Selectable Table"
7484
onSelect={this.onSelect}
85+
canSelectAll={canSelectAll}
86+
caption="Selectable Table"
7587
cells={columns}
7688
rows={rows}
77-
canSelectAll={this.state.canSelectAll}
7889
>
7990
<TableHeader />
8091
<TableBody />
8192
</Table>
82-
<Checkbox
83-
label="canSelectAll"
84-
isChecked={this.state.canSelectAll}
85-
onChange={this.toggleSelect}
86-
aria-label="toggle select all checkbox"
87-
id="toggle-select-all"
88-
name="toggle-select-all"
89-
/>
9093
</div>
9194
);
9295
}

packages/react-integration/demo-app-ts/src/components/demos/TableDemo/TableSimpleActionsDemo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export class TableSimpleActionsDemo extends React.Component<TableProps, ITableSt
4343
},
4444
{
4545
isSeparator: true,
46-
onClick: null
46+
onClick: () => {}
4747
},
4848
{
4949
title: 'Third action',

packages/react-integration/demo-app-ts/src/components/demos/TableDemo/TableSimpleDemo.tsx

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import * as React from 'react';
22
import { Table, TableHeader, TableBody, TableProps, textCenter, ICell, IRow } from '@patternfly/react-table';
33

4-
export class TableSimpleDemo extends React.Component<TableProps, { columns: (ICell | string)[]; rows: IRow[] }> {
4+
export class TableSimpleDemo extends React.Component<
5+
TableProps,
6+
{ columns: (ICell | string)[]; rows: (IRow | string[])[] }
7+
> {
58
constructor(props: TableProps) {
69
super(props);
710
this.state = {
@@ -17,25 +20,31 @@ export class TableSimpleDemo extends React.Component<TableProps, { columns: (ICe
1720
}
1821
],
1922
rows: [
20-
['one', 'two', 'three', 'four', 'five'],
21-
[
22-
{
23-
title: <div>one - 2</div>,
24-
props: { title: 'hover title', colSpan: 3 }
25-
},
26-
'four - 2',
27-
'five - 2'
28-
],
29-
[
30-
'one - 3',
31-
'two - 3',
32-
'three - 3',
33-
'four - 3',
34-
{
35-
title: 'five - 3 (not centered)',
36-
props: { textCenter: false }
37-
}
38-
]
23+
{
24+
cells: ['one', 'two', 'three', 'four', 'five']
25+
},
26+
{
27+
cells: [
28+
{
29+
title: <div>one - 2</div>,
30+
props: { title: 'hover title', colSpan: 3 }
31+
},
32+
'four - 2',
33+
'five - 2'
34+
]
35+
},
36+
{
37+
cells: [
38+
'one - 3',
39+
'two - 3',
40+
'three - 3',
41+
'four - 3',
42+
{
43+
title: 'five - 3 (not centered)',
44+
props: { textCenter: false }
45+
}
46+
]
47+
}
3948
]
4049
};
4150
}

packages/react-integration/demo-app-ts/src/components/demos/TableDemo/TableSortableForCompoundExpandableDemo.tsx

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import {
99
SortByDirection,
1010
ICell,
1111
IRow,
12-
ISortBy
12+
ISortBy,
13+
TableProps
1314
} from '@patternfly/react-table';
1415

1516
export interface DemoSortableTableProps {
@@ -20,18 +21,27 @@ export interface DemoSortableTableProps {
2021
id?: string;
2122
}
2223

23-
export class DemoSortableTable extends React.Component<DemoSortableTableProps> {
24-
state = {
25-
columns: [
26-
{ title: 'Repositories', transforms: [sortable] },
27-
'Branches',
28-
{ title: 'Pull requests', transforms: [sortable] },
29-
'Workspaces',
30-
'Last Commit'
31-
],
32-
rows: [this.props.firstColumnRows, ['a', 'two', 'k', 'four', 'five'], ['p', 'two', 'b', 'four', 'five']],
33-
sortBy: {}
34-
};
24+
interface DemoSortableTableState {
25+
rows: (IRow | string[])[];
26+
columns: (ICell | string)[];
27+
sortBy: ISortBy;
28+
}
29+
30+
export class DemoSortableTable extends React.Component<DemoSortableTableProps, DemoSortableTableState> {
31+
constructor(props: TableProps) {
32+
super(props);
33+
this.state = {
34+
columns: [
35+
{ title: 'Repositories', transforms: [sortable] },
36+
'Branches',
37+
{ title: 'Pull requests', transforms: [sortable] },
38+
'Workspaces',
39+
'Last Commit'
40+
],
41+
rows: [this.props.firstColumnRows, ['a', 'two', 'k', 'four', 'five'], ['p', 'two', 'b', 'four', 'five']],
42+
sortBy: {}
43+
};
44+
}
3545

3646
onSort = (_event: React.MouseEvent, index: number, direction: SortByDirection) => {
3747
const sortedRows = this.state.rows.sort((a, b) => {

packages/react-table/src/components/Table/SelectColumn.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ export interface SelectColumnProps {
44
name?: string;
55
children?: React.ReactNode;
66
className?: string;
7-
onSelect?: (event: React.ChangeEvent<HTMLInputElement>) => void;
7+
onSelect?: (event: React.FormEvent<HTMLInputElement>) => void;
88
}
99

1010
export const SelectColumn: React.FunctionComponent<SelectColumnProps> = ({
1111
children = null as React.ReactNode,
12-
onSelect = null as (event: React.ChangeEvent<HTMLInputElement>) => void,
1312
// eslint-disable-next-line @typescript-eslint/no-unused-vars
1413
className,
14+
onSelect = null as (event: React.FormEvent<HTMLInputElement>) => void,
1515
...props
1616
}: SelectColumnProps) => (
1717
<React.Fragment>

packages/react-table/src/components/Table/Table.md

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -430,22 +430,28 @@ class SelectableTable extends React.Component {
430430
}
431431

432432
render() {
433-
const { columns, rows } = this.state;
433+
const { columns, rows, canSelectAll } = this.state;
434434

435435
return (
436436
<div>
437-
<Table aria-label="Selectable Table" onSelect={this.onSelect} cells={columns} rows={rows} canSelectAll={this.state.canSelectAll}>
438-
<TableHeader />
439-
<TableBody />
440-
</Table>
441-
<Checkbox
442-
label="canSelectAll"
443-
isChecked={this.state.canSelectAll}
444-
onChange={this.toggleSelect}
445-
aria-label="toggle select all checkbox"
446-
id="toggle-select-all"
447-
name="toggle-select-all"
448-
/>
437+
<Checkbox
438+
label="Can select all"
439+
className="pf-u-mb-lg"
440+
isChecked={canSelectAll}
441+
onChange={this.toggleSelect}
442+
aria-label="toggle select all checkbox"
443+
id="toggle-select-all"
444+
name="toggle-select-all"
445+
/>
446+
<Table
447+
onSelect={this.onSelect}
448+
canSelectAll={canSelectAll}
449+
aria-label="Selectable Table"
450+
cells={columns}
451+
rows={rows}>
452+
<TableHeader />
453+
<TableBody />
454+
</Table>
449455
</div>
450456
);
451457
}

packages/react-table/src/components/Table/Table.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ test('Selectable table with selected expandable row', () => {
244244
parent: 0
245245
}
246246
],
247-
onSelect: (e: React.MouseEvent) => e
247+
onSelect: (e: React.FormEvent<HTMLInputElement>) => e
248248
};
249249

250250
const view = mount(

packages/react-table/src/components/Table/Table.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export type OnExpand = (
6060
extraData: IExtraData
6161
) => void;
6262
export type OnSelect = (
63-
event: React.MouseEvent,
63+
event: React.FormEvent<HTMLInputElement>,
6464
isSelected: boolean,
6565
rowIndex: number,
6666
rowData: IRowData,

packages/react-table/src/components/Table/utils/decorators/selectable.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,12 @@ export const selectable: ITransform = (
2727
const rowId = rowIndex !== undefined ? rowIndex : -1;
2828

2929
/**
30-
* @param {React.ChangeEvent} event - React change event
30+
* @param {React.FormEvent} event - React form event
3131
*/
32-
function selectClick(event: React.ChangeEvent<HTMLInputElement>) {
33-
const selected = rowIndex === undefined ? event.target.checked : rowData && !rowData.selected;
34-
// todo: change event type to React.FormEvent<HTMLInputElement> in the future, breaking change a.t.m.
32+
function selectClick(event: React.FormEvent<HTMLInputElement>) {
33+
const selected = rowIndex === undefined ? event.currentTarget.checked : rowData && !rowData.selected;
3534
// tslint:disable-next-line:no-unused-expression
36-
onSelect && onSelect((event as unknown) as React.MouseEvent, selected, rowId, rowData, extraData);
35+
onSelect && onSelect(event, selected, rowId, rowData, extraData);
3736
}
3837
const customProps = {
3938
...(rowId !== -1

0 commit comments

Comments
 (0)