import classes from './MRT_TableHeadCellFilterContainer.module.css'; 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) => { 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 showChangeModeButton = enableColumnFilterModes && columnDef.enableColumnFilterModes !== false && (allowedColumnFilterOptions === undefined || !!allowedColumnFilterOptions?.length); return ( {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} ); };