diff --git a/packages/dataviews/src/dataviews-layouts/table/column-header-menu.tsx b/packages/dataviews/src/dataviews-layouts/table/column-header-menu.tsx index 8b3dcb61e23cb..aff211fb613dc 100644 --- a/packages/dataviews/src/dataviews-layouts/table/column-header-menu.tsx +++ b/packages/dataviews/src/dataviews-layouts/table/column-header-menu.tsx @@ -25,6 +25,7 @@ import type { NormalizedField, SortDirection, ViewTable as ViewTableType, + Operator, } from '../../types'; import { getVisibleFieldIds } from '../index'; @@ -63,30 +64,41 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >( ) { const visibleFieldIds = getVisibleFieldIds( view, fields ); const index = visibleFieldIds?.indexOf( fieldId ) as number; + const isSorted = view.sort?.field === fieldId; + let isHidable = false; + let isSortable = false; + let canAddFilter = false; + let header; + let operators: Operator[] = []; const combinedField = view.layout?.combinedFields?.find( ( f ) => f.id === fieldId ); - if ( !! combinedField ) { - return combinedField.header || combinedField.label; - } const field = fields.find( ( f ) => f.id === fieldId ); - if ( ! field ) { - return null; + + if ( ! combinedField ) { + if ( ! field ) { + // No combined or regular field found. + return null; + } + + isHidable = field.enableHiding !== false; + isSortable = field.enableSorting !== false; + header = field.header; + + operators = sanitizeOperators( field ); + // Filter can be added: + // 1. If the field is not already part of a view's filters. + // 2. If the field meets the type and operator requirements. + // 3. If it's not primary. If it is, it should be already visible. + canAddFilter = + ! view.filters?.some( ( _filter ) => fieldId === _filter.field ) && + !! field.elements?.length && + !! operators.length && + ! field.filterBy?.isPrimary; + } else { + header = combinedField.header || combinedField.label; } - const isHidable = field.enableHiding !== false; - const isSortable = field.enableSorting !== false; - const isSorted = view.sort?.field === fieldId; - const operators = sanitizeOperators( field ); - // Filter can be added: - // 1. If the field is not already part of a view's filters. - // 2. If the field meets the type and operator requirements. - // 3. If it's not primary. If it is, it should be already visible. - const canAddFilter = - ! view.filters?.some( ( _filter ) => fieldId === _filter.field ) && - !! field.elements?.length && - !! operators.length && - ! field.filterBy?.isPrimary; return ( ( ref={ ref } variant="tertiary" > - { field.header } + { header } { view.sort && isSorted && (