import classes from './MRT_TableHeadCellFilterContainer.module.css'; import { useRef } from 'react'; import { ActionIcon, Collapse, Flex, type FlexProps, Menu, Text, Tooltip, } from '@mantine/core'; import { localizedFilterOption } from '../../fns/filterFns'; import { type MRT_Header, type MRT_RowData, type MRT_TableInstance, } from '../../types'; import { MRT_FilterCheckbox } from '../inputs/MRT_FilterCheckbox'; import { MRT_FilterRangeFields } from '../inputs/MRT_FilterRangeFields'; import { MRT_FilterRangeSlider } from '../inputs/MRT_FilterRangeSlider'; import { MRT_FilterTextInput } from '../inputs/MRT_FilterTextInput'; import { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu'; interface Props extends FlexProps { header: MRT_Header; table: MRT_TableInstance; } export const MRT_TableHeadCellFilterContainer = ({ header, table, ...rest }: Props) => { 'use no memo'; const { getState, options: { columnFilterDisplayMode, columnFilterModeOptions, enableColumnFilterModes, icons: { IconFilterCog }, localization, }, refs: { filterInputRefs }, } = table; const { showColumnFilters } = getState(); const { column } = header; const { columnDef } = column; const currentFilterOption = columnDef._filterFn; const allowedColumnFilterOptions = columnDef?.columnFilterModeOptions ?? columnFilterModeOptions; const isCollapseOpen = showColumnFilters || columnFilterDisplayMode === 'popover'; const collapseRef = useRef(null); const showChangeModeButton = enableColumnFilterModes && columnDef.enableColumnFilterModes !== false && (allowedColumnFilterOptions === undefined || !!allowedColumnFilterOptions?.length); return ( (
{ if (typeof ref === 'function') { ref(element); } else if (ref) { ref.current = element; } collapseRef.current = element; }} style={{ ...style, overflow: isCollapseOpen ? 'visible' : style?.overflow, }} /> )} > {columnDef.filterVariant === 'checkbox' ? ( ) : columnDef.filterVariant === 'range-slider' ? ( ) : ['date-range', 'range'].includes(columnDef.filterVariant ?? '') || ['between', 'betweenInclusive', 'inNumberRange'].includes( columnDef._filterFn, ) ? ( ) : ( )} {showChangeModeButton && ( setTimeout( () => filterInputRefs.current[`${column.id}-0`]?.focus(), 100, ) } table={table} /> )} {showChangeModeButton ? ( {localization.filterMode.replace( '{filterType}', localizedFilterOption(localization, currentFilterOption), )} ) : null} ); };