@@ -95,7 +95,15 @@ const CDataTable = props => {
9595
9696 const headerClass = i => fields && fields [ i ] . _classes && fields [ i ] . _classes
9797
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+ }
99107
100108 const headerStyles = ( index ) => {
101109 let style = { verticalAlign : 'middle' , overflow : 'hidden' }
@@ -179,23 +187,18 @@ const CDataTable = props => {
179187
180188 // computed
181189
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 ) !== '_' )
185191
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 ) )
192195
193196 useMemo ( ( ) => {
194197 compData . columnFiltered ++
195198 } , [
196199 JSON . stringify ( columnFilter ) ,
197200 JSON . stringify ( columnFilterState ) ,
198- rawColumnNames . join ( '' ) ,
201+ itemsDataColumns . join ( '' ) ,
199202 compData . changeItems
200203 ] )
201204
@@ -206,7 +209,7 @@ const CDataTable = props => {
206209 }
207210 Object . entries ( columnFilterState ) . forEach ( ( [ key , value ] ) => {
208211 const columnFilter = String ( value ) . toLowerCase ( )
209- if ( columnFilter && rawColumnNames . includes ( key ) ) {
212+ if ( columnFilter && itemsDataColumns . includes ( key ) ) {
210213 items = items . filter ( item => {
211214 return String ( item [ key ] ) . toLowerCase ( ) . includes ( columnFilter )
212215 } )
@@ -223,7 +226,7 @@ const CDataTable = props => {
223226 const filter = tableFilterState . toLowerCase ( )
224227 const hasFilter = ( item ) => String ( item ) . toLowerCase ( ) . includes ( filter )
225228 items = items . filter ( item => {
226- return rawColumnNames . filter ( key => hasFilter ( item [ key ] ) ) . length
229+ return itemsDataColumns . filter ( key => hasFilter ( item [ key ] ) ) . length
227230 } )
228231 return items
229232 } , [
@@ -234,7 +237,7 @@ const CDataTable = props => {
234237
235238 const sortedItems = useMemo ( ( ) => {
236239 const col = sorterState . column
237- if ( ! col || ! rawColumnNames . includes ( col ) || sorter . external ) {
240+ if ( ! col || ! itemsDataColumns . includes ( col ) || sorter . external ) {
238241 onFilteredItemsChange && onFilteredItemsChange ( tableFiltered )
239242 return tableFiltered
240243 }
@@ -443,7 +446,7 @@ const CDataTable = props => {
443446 return (
444447 < th className = { classNames ( headerClass ( index ) ) } key = { index } >
445448 { columnFilterSlot [ `${ rawColumnNames [ index ] } ` ] ||
446- ( fields && fields [ index ] . filter !== false &&
449+ ( isFilterable ( colName , index ) &&
447450 < input
448451 className = "form-control form-control-sm"
449452 onInput = { e => { columnFilterEvent ( colName , e . target . value , 'input' ) } }
0 commit comments