1
- //TODO refactor bulk action and row action to single funtion to decrease repeatabillity
1
+ //TODO refactor bulk action and row action to single function to decrease repeatability
2
2
import React , { useEffect , useMemo , useState , useCallback , useRef } from "react"
3
3
4
4
import {
@@ -30,35 +30,37 @@ import useInfiniteScroll from "./hooks/useInfiniteScroll"
30
30
const noop = ( ) => { }
31
31
32
32
const NetdataTable = ( {
33
- dataColumns,
33
+ bulkActions = { } ,
34
+ columnPinningOptions = { } ,
35
+ columnVisibility : initialColumnVisibility ,
34
36
data,
35
- onRowSelected,
36
- onGlobalSearchChange,
37
+ dataColumns,
38
+ dataGa,
39
+ disableClickRow,
40
+ enableColumnPinning = false ,
41
+ enableColumnVisibility = false ,
42
+ enablePagination,
43
+ enableResize = false ,
37
44
enableSelection,
38
- globalFilterFn = includesString ,
39
- tableRef,
40
45
enableSorting,
41
- rowActions = { } ,
42
- bulkActions = { } ,
46
+ globalFilter : initialGlobalFilter = "" ,
47
+ globalFilterFn = includesString ,
48
+ loadMoreOptions = { } ,
43
49
onClickRow,
50
+ onColumnVisibilityChange = noop ,
51
+ onGlobalSearchChange,
44
52
onHoverRow,
53
+ onRowSelected,
45
54
onSortingChange = noop ,
46
- disableClickRow,
47
- enablePagination,
48
55
paginationOptions = {
49
56
pageIndex : 0 ,
50
57
pageSize : 100 ,
51
58
} ,
52
- columnVisibility : initialColumnVisibility ,
53
- testPrefix = "" ,
59
+ rowActions = { } ,
54
60
sortBy = [ ] ,
61
+ tableRef,
62
+ testPrefix = "" ,
55
63
testPrefixCallback,
56
- dataGa,
57
- enableColumnVisibility = false ,
58
- enableColumnPinning = false ,
59
- columnPinningOptions = { } ,
60
- enableResize = false ,
61
- loadMoreOptions = { } ,
62
64
virtualizeOptions = { } ,
63
65
} ) => {
64
66
const [ isColumnDropdownVisible , setIsColumnDropdownVisible ] = useState ( false )
@@ -68,7 +70,7 @@ const NetdataTable = ({
68
70
const [ originalSelectedRows , setOriginalSelectedRow ] = useState ( [ ] )
69
71
const [ sorting , setSorting ] = useState ( sortBy )
70
72
const [ rowSelection , setRowSelection ] = useState ( { } )
71
- const [ globalFilter , setGlobalFilter ] = useState ( "" )
73
+ const [ globalFilter , setGlobalFilter ] = useState ( initialGlobalFilter )
72
74
const [ pagination , setPagination ] = useState ( {
73
75
pageIndex : paginationOptions . pageIndex ,
74
76
pageSize : paginationOptions . pageSize ,
@@ -83,11 +85,21 @@ const NetdataTable = ({
83
85
84
86
useInfiniteScroll ( { target : scrollParentRef , updateTableData, ...loadMoreOptions } )
85
87
88
+ const handleColumnVisibilityChange = useCallback ( getVisibility => {
89
+ onColumnVisibilityChange ( getVisibility )
90
+ setColumnVisibility ( getVisibility )
91
+ } , [ ] )
92
+
86
93
const handleGlobalSearch = useCallback ( value => {
87
94
onGlobalSearchChange ?. ( value )
88
95
setGlobalFilter ( String ( value ) )
89
96
} , [ ] )
90
97
98
+ const handleSortingChange = useCallback ( getSorting => {
99
+ onSortingChange ( getSorting )
100
+ setSorting ( getSorting )
101
+ } , [ ] )
102
+
91
103
const makeActionsColumn = useMemo ( ( ) => makeRowActions ( { rowActions, testPrefix } ) , [ rowActions ] )
92
104
93
105
const renderBulkActions = ( ) => [
@@ -133,7 +145,7 @@ const NetdataTable = ({
133
145
} ,
134
146
index
135
147
) => {
136
- if ( ! id ) throw new Error ( `Please provide id at ${ index } ` )
148
+ if ( ! id ) throw new Error ( `Please provide id at ${ index } ` )
137
149
138
150
return {
139
151
id,
@@ -180,14 +192,11 @@ const NetdataTable = ({
180
192
getFilteredRowModel : getFilteredRowModel ( ) ,
181
193
onRowSelectionChange : setRowSelection ,
182
194
onGlobalFilterChange : handleGlobalSearch ,
183
- onSortingChange : getSorting => {
184
- onSortingChange ( getSorting )
185
- setSorting ( getSorting )
186
- } ,
195
+ onSortingChange : handleSortingChange ,
187
196
getSortedRowModel : getSortedRowModel ( ) ,
188
197
getPaginationRowModel : getPaginationRowModel ( ) ,
189
198
onPaginationChange : setPagination ,
190
- onColumnVisibilityChange : setColumnVisibility ,
199
+ onColumnVisibilityChange : handleColumnVisibilityChange ,
191
200
onColumnPinningChange : setColumnPinning ,
192
201
} )
193
202
@@ -212,9 +221,10 @@ const NetdataTable = ({
212
221
< SharedTableProvider >
213
222
< Flex height = "100%" overflow = "hidden" width = "100%" column >
214
223
< GlobalControls
215
- handleSearch = { onGlobalSearchChange ? handleGlobalSearch : null }
216
- dataGa = { dataGa }
217
224
bulkActions = { renderBulkActions }
225
+ dataGa = { dataGa }
226
+ handleSearch = { onGlobalSearchChange ? handleGlobalSearch : null }
227
+ searchValue = { globalFilter }
218
228
/>
219
229
< Flex
220
230
ref = { scrollParentRef }
0 commit comments