@coreui/react-pro 4.0.0-rc.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +157 -0
  2. package/dist/components/accordion/CAccordionCollapse.d.ts +1 -1
  3. package/dist/components/collapse/CCollapse.d.ts +4 -0
  4. package/dist/components/form/CFormCheck.d.ts +4 -0
  5. package/dist/components/form/CFormLabel.d.ts +2 -2
  6. package/dist/components/form/CFormSelect.d.ts +13 -0
  7. package/dist/components/placeholder/CPlaceholder.d.ts +51 -0
  8. package/dist/components/smart-table/CSmartTableHead.d.ts +2 -1
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.es.js +319 -217
  11. package/dist/index.es.js.map +1 -1
  12. package/dist/index.js +319 -216
  13. package/dist/index.js.map +1 -1
  14. package/package.json +10 -10
  15. package/src/components/accordion/CAccordionCollapse.tsx +1 -1
  16. package/src/components/collapse/CCollapse.tsx +36 -3
  17. package/src/components/form/CFormCheck.tsx +30 -3
  18. package/src/components/form/CFormLabel.tsx +2 -2
  19. package/src/components/form/CFormSelect.tsx +28 -2
  20. package/src/components/form/__tests__/CFormLabel.spec.tsx +8 -0
  21. package/src/components/form/__tests__/__snapshots__/CFormLabel.spec.tsx.snap +11 -0
  22. package/src/components/grid/CCol.tsx +8 -8
  23. package/src/components/grid/CContainer.tsx +3 -3
  24. package/src/components/grid/CRow.tsx +6 -6
  25. package/src/components/offcanvas/COffcanvas.tsx +15 -2
  26. package/src/components/offcanvas/__tests__/COffcanvas.spec.tsx +1 -1
  27. package/src/components/offcanvas/__tests__/__snapshots__/COffcanvas.spec.tsx.snap +2 -2
  28. package/src/components/placeholder/CPlaceholder.tsx +114 -0
  29. package/src/components/placeholder/__tests__/CPlaceholder.spec.tsx +21 -0
  30. package/src/components/placeholder/__tests__/__snapshots__/CPlaceholder.spec.tsx.snap +17 -0
  31. package/src/components/smart-table/CSmartTable.tsx +27 -38
  32. package/src/components/smart-table/CSmartTableHead.tsx +15 -2
  33. package/src/index.ts +2 -0
@@ -95,19 +95,32 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
95
95
  const compData = useRef({ firstRun: true, columnFiltered: 0, changeItems: 0 }).current
96
96
 
97
97
  const previousSorterValue = useRef<SorterValue>()
98
+ const previousItemsValue = useRef<Item[]>()
99
+
100
+ const [_activePage, setActivePage] = useState<number>(activePage)
101
+ const [_items, setItems] = useState<Item[]>([])
102
+ const [_itemsPerPage, setItemsPerPage] = useState(itemsPerPage)
103
+ const [columnFilterState, setColumnFilterState] = useState<ColumnFilterValue>(
104
+ columnFilterValue ? columnFilterValue : {},
105
+ )
106
+ const [selectedAll, setSelectedAll] = useState<boolean | string>()
107
+ const [sorterState, setSorterState] = useState<SorterValue>(previousSorterValue.current || {})
108
+ const [tableFilterState, setTableFilterState] = useState<string>(
109
+ tableFilterValue ? tableFilterValue : '',
110
+ )
98
111
 
99
112
  useMemo(() => {
100
113
  if (JSON.stringify(previousSorterValue.current) !== JSON.stringify(sorterValue)) {
101
114
  previousSorterValue.current = sorterValue
115
+ setSorterState({ ...sorterValue })
102
116
  }
103
117
  }, [sorterValue])
104
118
 
105
- const previousItemsValue = useRef<Item[]>()
106
-
107
- const [_items, setItems] = useState<Item[]>([])
108
-
109
119
  useMemo(() => {
110
120
  if (JSON.stringify(previousItemsValue.current) !== JSON.stringify(items)) {
121
+ if (items && items.length < _itemsPerPage * _activePage - _itemsPerPage) {
122
+ setActivePage(1)
123
+ }
111
124
  previousItemsValue.current = items
112
125
 
113
126
  Array.isArray(items) &&
@@ -119,19 +132,6 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
119
132
  }
120
133
  }, [items])
121
134
 
122
- const [_itemsPerPage, setItemsPerPage] = useState(itemsPerPage)
123
- const [_activePage, setActivePage] = useState<number>(activePage)
124
- console.log(_activePage)
125
- const [selectedAll, setSelectedAll] = useState<boolean | string>()
126
-
127
- const [sorterState, setSorterState] = useState<SorterValue>(previousSorterValue.current || {})
128
- const [tableFilterState, setTableFilterState] = useState<string>(
129
- tableFilterValue ? tableFilterValue : '',
130
- )
131
- const [columnFilterState, setColumnFilterState] = useState<ColumnFilterValue>(
132
- columnFilterValue ? columnFilterValue : {},
133
- )
134
-
135
135
  // functions
136
136
 
137
137
  const isSortable = (i: number): boolean | undefined => {
@@ -161,7 +161,11 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
161
161
  } else if (state.state === 'asc') {
162
162
  state.state = 'desc'
163
163
  } else {
164
- state.state = 0
164
+ if (typeof columnSorter === 'object' && !columnSorter.resetable) {
165
+ state.state = 'asc'
166
+ } else {
167
+ state.state = 0
168
+ }
165
169
  }
166
170
  } else {
167
171
  state.column = column
@@ -184,6 +188,7 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
184
188
  return
185
189
  }
186
190
  const newState = { ...columnFilterState, [`${colName}`]: value }
191
+ setActivePage(1)
187
192
  setColumnFilterState(newState)
188
193
  }
189
194
 
@@ -192,6 +197,7 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
192
197
  if ((isLazy && type === 'input') || (!isLazy && type === 'change')) {
193
198
  return
194
199
  }
200
+ setActivePage(1)
195
201
  setTableFilterState(value)
196
202
  }
197
203
 
@@ -333,23 +339,6 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
333
339
  )
334
340
  useMemo(() => setColumnFilterState({ ...columnFilterValue }), [columnFilterValue])
335
341
 
336
- //items
337
- // useMemo(() => {
338
- // if (
339
- // items &&
340
- // !compData.firstRun &&
341
- // (items.length !== _items.length || JSON.stringify(items) !== JSON.stringify(_items))
342
- // ) {
343
- // setItems(
344
- // items?.map((item: Item, index: number) => {
345
- // return { ...item, _id: index }
346
- // }),
347
- // )
348
-
349
- // compData.changeItems++
350
- // }
351
- // }, [items])
352
-
353
342
  compData.firstRun = false
354
343
 
355
344
  const handleRowChecked = (id: number, value: boolean) => {
@@ -378,6 +367,7 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
378
367
  useEffect(() => {
379
368
  if (selectable) {
380
369
  const selected = _items.filter((item) => item._selected === true)
370
+ onSelectedItemsChange && onSelectedItemsChange(selected)
381
371
 
382
372
  if (selected.length === _items.length) {
383
373
  setSelectedAll(true)
@@ -392,8 +382,6 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
392
382
  if (selected.length !== 0 && selected.length !== _items.length) {
393
383
  setSelectedAll('indeterminate')
394
384
  }
395
-
396
- onSelectedItemsChange && onSelectedItemsChange(selected)
397
385
  }
398
386
  }, [_items])
399
387
 
@@ -441,6 +429,7 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
441
429
  <CSmartTableHead
442
430
  {...tableHeadProps}
443
431
  columnFilter={columnFilter}
432
+ columnFilterState={columnFilterState}
444
433
  columns={columns ? columns : rawColumnNames}
445
434
  columnSorter={columnSorter}
446
435
  selectable={selectable}
@@ -493,7 +482,7 @@ export const CSmartTable = forwardRef<HTMLDivElement, CSmartTableProps>(
493
482
 
494
483
  {(pagination || itemsPerPageSelect) && (
495
484
  <div className="row">
496
- <div className="col-auto">
485
+ <div className="col">
497
486
  {pagination && numberOfPages > 1 && (
498
487
  <CSmartPagination
499
488
  {...paginationProps}
@@ -1,7 +1,13 @@
1
1
  import React, { ElementType, forwardRef, ReactNode, useEffect, useRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
 
4
- import { ColumnFilter, Column, Sorter, SorterValue } from './CSmartTableInterface'
4
+ import {
5
+ ColumnFilter,
6
+ ColumnFilterValue,
7
+ Column,
8
+ Sorter,
9
+ SorterValue,
10
+ } from './CSmartTableInterface'
5
11
 
6
12
  import { CFormInput } from '../form/CFormInput'
7
13
  import { CFormCheck } from '../form/CFormCheck'
@@ -10,6 +16,7 @@ import { CTableHeaderCell } from '../table/CTableHeaderCell'
10
16
  import { CTableRow } from '../table/CTableRow'
11
17
  export interface CSmartTableHeadProps extends CTableHeadProps {
12
18
  columnFilter?: boolean | ColumnFilter
19
+ columnFilterState?: ColumnFilterValue
13
20
  columnSorter?: boolean | Sorter
14
21
  component?: string | ElementType
15
22
  columns: (Column | string)[]
@@ -29,6 +36,7 @@ export const CSmartTableHead = forwardRef<HTMLTableSectionElement, CSmartTableHe
29
36
  (
30
37
  {
31
38
  columnFilter,
39
+ columnFilterState,
32
40
  columnSorter,
33
41
  component: Component = CTableHead,
34
42
  columns,
@@ -176,7 +184,11 @@ export const CSmartTableHead = forwardRef<HTMLTableSectionElement, CSmartTableHe
176
184
  handleFilterOnChange &&
177
185
  handleFilterOnChange(key(column), (event.target as HTMLInputElement).value)
178
186
  }
179
- // value={columnFilterState[colName] || ''}
187
+ value={
188
+ columnFilterState && columnFilterState[key(column)]
189
+ ? columnFilterState[key(column)]
190
+ : ''
191
+ }
180
192
  aria-label={`column name: '${label(column)}' filter input`}
181
193
  />
182
194
  )}
@@ -192,6 +204,7 @@ export const CSmartTableHead = forwardRef<HTMLTableSectionElement, CSmartTableHe
192
204
 
193
205
  CSmartTableHead.propTypes = {
194
206
  columnFilter: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
207
+ columnFilterState: PropTypes.object,
195
208
  columnSorter: PropTypes.bool,
196
209
  component: PropTypes.elementType,
197
210
  children: PropTypes.node,
package/src/index.ts CHANGED
@@ -89,6 +89,7 @@ import { CNavbarToggler } from './components/navbar/CNavbarToggler'
89
89
  import { CPagination } from './components/pagination/CPagination'
90
90
  import { CPaginationItem } from './components/pagination/CPaginationItem'
91
91
  import { CSmartPagination } from './components/pagination/CSmartPagination'
92
+ import { CPlaceholder } from './components/placeholder/CPlaceholder'
92
93
  import { CPopover } from './components/popover/CPopover'
93
94
  import { CProgress } from './components/progress/CProgress'
94
95
  import { CProgressBar } from './components/progress/CProgressBar'
@@ -212,6 +213,7 @@ export {
212
213
  CNavbarToggler,
213
214
  CPagination,
214
215
  CPaginationItem,
216
+ CPlaceholder,
215
217
  CPopover,
216
218
  CProgress,
217
219
  CProgressBar,