diff --git a/src/table/__tests__/base.test.jsx b/src/table/__tests__/base.test.jsx index 8adf095cbe..d68e93a13f 100644 --- a/src/table/__tests__/base.test.jsx +++ b/src/table/__tests__/base.test.jsx @@ -561,5 +561,56 @@ TABLES.forEach((TTable) => { expect(wrapper.find('.t-table__top-content').text()).toBe(topContentText); }); }); + + describe(':props.filterIcon', () => { + it('props.filterIcon could be function', async () => { + const filterIconText = () => '筛'; + const filterColumns = SIMPLE_COLUMNS.map((item) => ({ + ...item, + filter: { type: 'single', list: [{ label: 1, value: 2 }] }, + })); + + const wrapper = mount({ + render() { + return ; + }, + }); + + if (TTable.name == 'TBaseTable') { + expect(wrapper.find('.t-table__filter-icon').exists()).toBeFalsy(); + } else { + expect(wrapper.find('.t-table__filter-icon').exists()).toBeTruthy(); + expect(wrapper.find('.t-table__filter-icon').text()).toBe(filterIconText()); + } + }); + + it('slots.filter-icon works fine', () => { + const filterIconText = (rowKey) => '筛' + rowKey; + const filterColumns = SIMPLE_COLUMNS.map((item) => ({ + ...item, + filter: { type: 'single', list: [{ label: 1, value: 2 }] }, + })); + const wrapper = mount({ + render() { + return ( + filterIconText(col.col.colKey) }} + rowKey="index" + data={data} + columns={filterColumns} + > + ); + }, + }); + if (TTable.name == 'TBaseTable') { + expect(wrapper.find('.t-table__filter-icon').exists()).toBeFalsy(); + } else { + expect(wrapper.find('.t-table__filter-icon').exists()).toBeTruthy(); + SIMPLE_COLUMNS.forEach((item, index) => { + expect(wrapper.findAll('.t-table__filter-icon').at(index).text()).toBe(filterIconText(item.colKey)); + }); + } + }); + }); }); }); diff --git a/src/table/filter-controller.tsx b/src/table/filter-controller.tsx index 7d3669edc0..9c4b3a37d3 100644 --- a/src/table/filter-controller.tsx +++ b/src/table/filter-controller.tsx @@ -7,7 +7,7 @@ import { RadioGroup } from '../radio'; import Input from '../input'; import TButton from '../button'; import { useTNodeDefault } from '../hooks/tnode'; -import { PrimaryTableCol, FilterValue } from './type'; +import { PrimaryTableCol, FilterValue, TdPrimaryTableProps } from './type'; import { useConfig } from '../hooks/useConfig'; import { useGlobalIcon } from '../hooks/useGlobalIcon'; import { AttachNode } from '../common'; @@ -37,6 +37,7 @@ export interface TableFilterControllerProps { popupProps: PopupProps; attach?: AttachNode; onVisibleChange: (val: boolean) => void; + filterIcon?: TdPrimaryTableProps['filterIcon']; } export default defineComponent({ @@ -55,6 +56,7 @@ export default defineComponent({ popupProps: Object as PropType, attach: [String, Function] as PropType, onVisibleChange: Function as PropType, + filterIcon: [Function] as PropType, }, emits: ['inner-filter-change', 'reset', 'confirm'],