|
1 |
| -import React, { useState, useRef, useMemo } from 'react' |
| 1 | +import React, { useState, useRef, useMemo, useEffect } from 'react' |
2 | 2 | import PropTypes from 'prop-types'
|
3 | 3 | import classNames from 'classnames'
|
4 | 4 | import CPagination from '../pagination/CPagination'
|
@@ -144,9 +144,12 @@ const CDataTable = props => {
|
144 | 144 | }
|
145 | 145 | state.asc = !(columnRepeated && state.asc)
|
146 | 146 | setSorterState({...state})
|
147 |
| -onSorterValueChange && onSorterValueChange(sorterState) |
148 | 147 | }
|
149 | 148 |
|
| 149 | +useEffect(() => { |
| 150 | +onSorterValueChange && onSorterValueChange(sorterState) |
| 151 | +}, [JSON.stringify(sorterState)]) |
| 152 | + |
150 | 153 | const paginationChange = e => {
|
151 | 154 | onPaginationChange && onPaginationChange(Number(e.target.value))
|
152 | 155 | !itemsPerPageSelect.external && setPerPageItems(Number(e.target.value))
|
@@ -159,18 +162,24 @@ const CDataTable = props => {
|
159 | 162 | }
|
160 | 163 | const newState = {...columnFilterState, [`${colName}`]: value }
|
161 | 164 | setColumnFilterState(newState)
|
162 |
| -onColumnFilterChange && onColumnFilterChange(newState) |
163 | 165 | }
|
164 | 166 |
|
| 167 | +useEffect(() => { |
| 168 | +onColumnFilterChange && onColumnFilterChange(columnFilterState) |
| 169 | +}, [JSON.stringify(columnFilterState)]) |
| 170 | + |
165 | 171 | const tableFilterChange = (value, type) => {
|
166 | 172 | const isLazy = tableFilter && tableFilter.lazy === true
|
167 | 173 | if (isLazy && type === 'input' || !isLazy && type === 'change') {
|
168 | 174 | return
|
169 | 175 | }
|
170 | 176 | setTableFilterState(value)
|
171 |
| -onTableFilterChange && onTableFilterChange(value) |
172 | 177 | }
|
173 | 178 |
|
| 179 | +useEffect(() => { |
| 180 | +onTableFilterChange && onTableFilterChange(tableFilterState) |
| 181 | +}, [tableFilterState]) |
| 182 | + |
174 | 183 | const getClickedColumnName = (e, detailsClick) => {
|
175 | 184 | if (detailsClick) {
|
176 | 185 | return 'details'
|
@@ -239,11 +248,10 @@ const CDataTable = props => {
|
239 | 248 | tableFilterState,
|
240 | 249 | JSON.stringify(tableFilter)
|
241 | 250 | ])
|
242 |
| - |
| 251 | +
|
243 | 252 | const sortedItems = useMemo(() => {
|
244 | 253 | 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)) { |
247 | 255 | return tableFiltered
|
248 | 256 | }
|
249 | 257 | //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 => {
|
255 | 263 | const b = typeof value2 === 'number' ? value2 : String(value2).toLowerCase()
|
256 | 264 | return a > b ? 1 * flip : b > a ? -1 * flip : 0
|
257 | 265 | })
|
258 |
| -!compData.firstRun && onFilteredItemsChange && onFilteredItemsChange(tableFiltered) |
259 | 266 | return sorted
|
260 | 267 | }, [
|
261 | 268 | JSON.stringify(tableFiltered),
|
262 | 269 | JSON.stringify(sorterState),
|
263 | 270 | JSON.stringify(sorter)
|
264 | 271 | ])
|
265 | 272 |
|
| 273 | +useEffect(() => { |
| 274 | +!compData.firstRun && onFilteredItemsChange && onFilteredItemsChange(sortedItems) |
| 275 | +}, [JSON.stringify(sortedItems)]) |
| 276 | + |
266 | 277 | const tableClasses = [
|
267 | 278 | 'table',
|
268 | 279 | {
|
|
0 commit comments