@@ -95,7 +95,15 @@ const CDataTable = props => {
95
95
96
96
const headerClass = i => fields && fields [ i ] . _classes && fields [ i ] . _classes
97
97
98
- const isSortable = i => sorter && fields && fields [ i ] . sorter !== false
98
+ const isSortable = i => {
99
+ const isDataColumn = itemsDataColumns . includes ( rawColumnNames [ i ] )
100
+ return sorter && fields && fields [ i ] . sorter !== false && isDataColumn
101
+ }
102
+
103
+ const isFilterable = ( colName , index ) => {
104
+ const haveEnabledFilter = ( ! fields || fields [ index ] . filter !== false )
105
+ return itemsDataColumns . includes ( colName ) && haveEnabledFilter
106
+ }
99
107
100
108
const headerStyles = ( index ) => {
101
109
let style = { verticalAlign : 'middle' , overflow : 'hidden' }
@@ -179,23 +187,18 @@ const CDataTable = props => {
179
187
180
188
// computed
181
189
182
- const generatedColumnNames = ( ( ) => {
183
- return Object . keys ( passedItems [ 0 ] || { } ) . filter ( el => el . charAt ( 0 ) !== '_' )
184
- } ) ( )
190
+ const genCols = Object . keys ( passedItems [ 0 ] || { } ) . filter ( el => el . charAt ( 0 ) !== '_' )
185
191
186
- const rawColumnNames = ( ( ) => {
187
- if ( fields ) {
188
- return fields . map ( el => el . key || el )
189
- }
190
- return generatedColumnNames
191
- } ) ( )
192
+ const rawColumnNames = fields ? fields . map ( el => el . key || el ) : genCols
193
+
194
+ const itemsDataColumns = rawColumnNames . filter ( name => genCols . includes ( name ) )
192
195
193
196
useMemo ( ( ) => {
194
197
compData . columnFiltered ++
195
198
} , [
196
199
JSON . stringify ( columnFilter ) ,
197
200
JSON . stringify ( columnFilterState ) ,
198
- rawColumnNames . join ( '' ) ,
201
+ itemsDataColumns . join ( '' ) ,
199
202
compData . changeItems
200
203
] )
201
204
@@ -206,7 +209,7 @@ const CDataTable = props => {
206
209
}
207
210
Object . entries ( columnFilterState ) . forEach ( ( [ key , value ] ) => {
208
211
const columnFilter = String ( value ) . toLowerCase ( )
209
- if ( columnFilter && rawColumnNames . includes ( key ) ) {
212
+ if ( columnFilter && itemsDataColumns . includes ( key ) ) {
210
213
items = items . filter ( item => {
211
214
return String ( item [ key ] ) . toLowerCase ( ) . includes ( columnFilter )
212
215
} )
@@ -223,7 +226,7 @@ const CDataTable = props => {
223
226
const filter = tableFilterState . toLowerCase ( )
224
227
const hasFilter = ( item ) => String ( item ) . toLowerCase ( ) . includes ( filter )
225
228
items = items . filter ( item => {
226
- return rawColumnNames . filter ( key => hasFilter ( item [ key ] ) ) . length
229
+ return itemsDataColumns . filter ( key => hasFilter ( item [ key ] ) ) . length
227
230
} )
228
231
return items
229
232
} , [
@@ -234,7 +237,7 @@ const CDataTable = props => {
234
237
235
238
const sortedItems = useMemo ( ( ) => {
236
239
const col = sorterState . column
237
- if ( ! col || ! rawColumnNames . includes ( col ) || sorter . external ) {
240
+ if ( ! col || ! itemsDataColumns . includes ( col ) || sorter . external ) {
238
241
onFilteredItemsChange && onFilteredItemsChange ( tableFiltered )
239
242
return tableFiltered
240
243
}
@@ -443,7 +446,7 @@ const CDataTable = props => {
443
446
return (
444
447
< th className = { classNames ( headerClass ( index ) ) } key = { index } >
445
448
{ columnFilterSlot [ `${ rawColumnNames [ index ] } ` ] ||
446
- ( fields && fields [ index ] . filter !== false &&
449
+ ( isFilterable ( colName , index ) &&
447
450
< input
448
451
className = "form-control form-control-sm"
449
452
onInput = { e => { columnFilterEvent ( colName , e . target . value , 'input' ) } }
0 commit comments