Skip to content

Commit 9dae2ab

Browse files
committed
fix: CDataTable component fixes
- fire events also on clean method execution, - events fired on useEffect to avoid errors
1 parent 03c4c32 commit 9dae2ab

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/table/CDataTable.js

+19-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useRef, useMemo } from 'react'
1+
import React, { useState, useRef, useMemo, useEffect } from 'react'
22
import PropTypes from 'prop-types'
33
import classNames from 'classnames'
44
import CPagination from '../pagination/CPagination'
@@ -144,9 +144,12 @@ const CDataTable = props => {
144144
}
145145
state.asc = !(columnRepeated && state.asc)
146146
setSorterState({...state})
147-
onSorterValueChange && onSorterValueChange(sorterState)
148147
}
149148

149+
useEffect(() => {
150+
onSorterValueChange && onSorterValueChange(sorterState)
151+
}, [JSON.stringify(sorterState)])
152+
150153
const paginationChange = e => {
151154
onPaginationChange && onPaginationChange(Number(e.target.value))
152155
!itemsPerPageSelect.external && setPerPageItems(Number(e.target.value))
@@ -159,18 +162,24 @@ const CDataTable = props => {
159162
}
160163
const newState = {...columnFilterState, [`${colName}`]: value }
161164
setColumnFilterState(newState)
162-
onColumnFilterChange && onColumnFilterChange(newState)
163165
}
164166

167+
useEffect(() => {
168+
onColumnFilterChange && onColumnFilterChange(columnFilterState)
169+
}, [JSON.stringify(columnFilterState)])
170+
165171
const tableFilterChange = (value, type) => {
166172
const isLazy = tableFilter && tableFilter.lazy === true
167173
if (isLazy && type === 'input' || !isLazy && type === 'change') {
168174
return
169175
}
170176
setTableFilterState(value)
171-
onTableFilterChange && onTableFilterChange(value)
172177
}
173178

179+
useEffect(() => {
180+
onTableFilterChange && onTableFilterChange(tableFilterState)
181+
}, [tableFilterState])
182+
174183
const getClickedColumnName = (e, detailsClick) => {
175184
if (detailsClick) {
176185
return 'details'
@@ -239,11 +248,10 @@ const CDataTable = props => {
239248
tableFilterState,
240249
JSON.stringify(tableFilter)
241250
])
242-
251+
243252
const sortedItems = useMemo(() => {
244253
const col = sorterState.column
245-
if (!col || !itemsDataColumns.includes(col) || sorter.external) {
246-
onFilteredItemsChange && onFilteredItemsChange(tableFiltered)
254+
if (!col || !itemsDataColumns.includes(col) || (sorter && sorter.external)) {
247255
return tableFiltered
248256
}
249257
//if values in column are to be sorted by numeric value they all have to be type number
@@ -255,14 +263,17 @@ const CDataTable = props => {
255263
const b = typeof value2 === 'number' ? value2 : String(value2).toLowerCase()
256264
return a > b ? 1 * flip : b > a ? -1 * flip : 0
257265
})
258-
!compData.firstRun && onFilteredItemsChange && onFilteredItemsChange(tableFiltered)
259266
return sorted
260267
}, [
261268
JSON.stringify(tableFiltered),
262269
JSON.stringify(sorterState),
263270
JSON.stringify(sorter)
264271
])
265272

273+
useEffect(() => {
274+
!compData.firstRun && onFilteredItemsChange && onFilteredItemsChange(sortedItems)
275+
}, [JSON.stringify(sortedItems)])
276+
266277
const tableClasses = [
267278
'table',
268279
{

0 commit comments

Comments
 (0)