1- import React , { useState , useRef , useMemo } from 'react'
1+ import React , { useState , useRef , useMemo , useEffect } from 'react'
22import PropTypes from 'prop-types'
33import classNames from 'classnames'
44import 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