Skip to content

Commit

Permalink
Display moving controls for combined fields
Browse files Browse the repository at this point in the history
  • Loading branch information
oandregal committed Sep 3, 2024
1 parent d34fec7 commit 2c2d801
Showing 1 changed file with 32 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import type {
NormalizedField,
SortDirection,
ViewTable as ViewTableType,
Operator,
} from '../../types';
import { getVisibleFieldIds } from '../index';

Expand Down Expand Up @@ -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 (
<DropdownMenuV2
Expand All @@ -98,7 +110,7 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
ref={ ref }
variant="tertiary"
>
{ field.header }
{ header }
{ view.sort && isSorted && (
<span aria-hidden="true">
{ sortArrows[ view.sort.direction ] }
Expand Down Expand Up @@ -219,7 +231,7 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
{ __( 'Move right' ) }
</DropdownMenuV2.ItemLabel>
</DropdownMenuV2.Item>
{ isHidable && (
{ isHidable && field && (
<DropdownMenuV2.Item
prefix={ <Icon icon={ unseen } /> }
onClick={ () => {
Expand Down

0 comments on commit 2c2d801

Please sign in to comment.