@@ -49,26 +49,26 @@ export type TableProps<T extends RowData> = Pick<TableOptions<T>, 'data' | 'colu
49
49
} & (
50
50
| {
51
51
/** If wanting to use selectable table, specify _onSelectRow_ or _onSelectRows_ exclusively */
52
- selectedRow ?: string ;
53
- selectedRows ?: never ;
54
52
onSelectRow ?: ( ( id : string | undefined ) => void ) | undefined ;
53
+ defaultSelectedRow ?: string ;
55
54
onSelectRows ?: never ;
55
+ defaultSelectedRows ?: never ;
56
56
}
57
57
| {
58
- selectedRow ?: never ;
59
- selectedRows ?: string [ ] ;
60
58
onSelectRow ?: never ;
59
+ defaultSelectedRow ?: never ;
61
60
/** If wanting to use selectable table, specify _onSelectRow_ or _onSelectRows_ exclusively */
62
61
onSelectRows ?: ( ( ids : string [ ] ) => void ) | undefined ;
62
+ defaultSelectedRows ?: string [ ] ;
63
63
}
64
64
) ;
65
65
66
66
export const Table = < T extends RowData > ( {
67
67
data,
68
68
disablePagination,
69
69
defaultSortColumn,
70
- selectedRow ,
71
- selectedRows ,
70
+ defaultSelectedRow ,
71
+ defaultSelectedRows ,
72
72
onSelectRow,
73
73
onSelectRows,
74
74
onRowClick,
@@ -82,25 +82,25 @@ export const Table = <T extends RowData>({
82
82
defaultPage = 1 ,
83
83
onChangePage,
84
84
} : TableProps < T > ) => {
85
- const defaultSelectedRows = selectedRow
86
- ? { [ selectedRow ] : true }
87
- : selectedRows ?. reduce ( ( acc , id ) => ( { ...acc , [ id ] : true } ) , { } ) ?? { } ;
85
+ const tableId = useId ( ) ;
88
86
const [ sorting , setSorting ] = useState < SortingState > ( defaultSortColumn ? [ defaultSortColumn ] : [ ] ) ;
89
- const [ rowSelection , setRowSelection ] = useState < RowSelectionState > ( defaultSelectedRows ) ;
87
+
88
+ const defaultRowSelection = defaultSelectedRow
89
+ ? { [ defaultSelectedRow ] : true }
90
+ : ( defaultSelectedRows || [ ] ) . reduce ( ( acc , id ) => ( { ...acc , [ id ] : true } ) , { } ) ;
91
+ const [ rowSelection , setRowSelection ] = useState < RowSelectionState > ( defaultRowSelection ) ;
90
92
const prevRowSelection = useRef < RowSelectionState > ( { } ) ;
91
- const tableId = useId ( ) ;
92
93
93
94
const onRowSelectionChange : OnChangeFn < RowSelectionState > = useCallback (
94
95
( updater ) => {
95
96
// updater is designed to be passed to setState like `setState((prev) => updater(prev))`
96
97
// However, due to the React "state is snapshot" design, it is hard to get current selection without using rowSelection.
97
98
// This may lead to some bugs if setting state several times in 1 rendering.
98
99
const row : RowSelectionState = typeof updater === 'function' ? updater ( rowSelection ) : updater ;
99
- // If selected the same row (when single selectable table), skip it
100
+ // If the same row is selected (when single selectable table), skip it
100
101
if ( prevRowSelection . current === row ) {
101
102
return ;
102
103
}
103
- console . info ( row ) ;
104
104
setRowSelection ( row ) ;
105
105
prevRowSelection . current = row ;
106
106
const selectedIds = Object . keys ( row ) ;
@@ -112,7 +112,7 @@ export const Table = <T extends RowData>({
112
112
113
113
const selectRow = useCallback (
114
114
( row : RowType < T > ) => {
115
- // If multiply seletable table, using toggle. Or if singly selectable table, not using toggle.
115
+ // If multiple seletable table, using toggle. Otherwise ( singly selectable table) not using toggle.
116
116
row . toggleSelected ( onSelectRows ? undefined : true ) ;
117
117
} ,
118
118
[ onSelectRows ] ,
0 commit comments