mirror of
https://github.com/ant-design/ant-design.git
synced 2025-06-08 01:53:34 +08:00
feat: add filterResetToDefaultFilteredValue api (#34355)
* feat: add filterResetToDefaultFilteredValue api * feat: fix lint * feat: update test case * feat: update doc
This commit is contained in:
parent
6df508d594
commit
d4acc661da
@ -1964,7 +1964,11 @@ describe('Table.filter', () => {
|
|||||||
expect(wrapper.find('.ant-tree-checkbox').at(0).hasClass('ant-tree-checkbox-checked')).toBe(
|
expect(wrapper.find('.ant-tree-checkbox').at(0).hasClass('ant-tree-checkbox-checked')).toBe(
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
expect(wrapper.find('.ant-table-filter-dropdown-checkall .ant-checkbox').hasClass('ant-checkbox-indeterminate')).toBe(true);
|
expect(
|
||||||
|
wrapper
|
||||||
|
.find('.ant-table-filter-dropdown-checkall .ant-checkbox')
|
||||||
|
.hasClass('ant-checkbox-indeterminate'),
|
||||||
|
).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('select-all checkbox should change when all items are selected', () => {
|
it('select-all checkbox should change when all items are selected', () => {
|
||||||
@ -1991,7 +1995,11 @@ describe('Table.filter', () => {
|
|||||||
});
|
});
|
||||||
wrapper.find('.ant-tree-node-content-wrapper').at(0).simulate('click');
|
wrapper.find('.ant-tree-node-content-wrapper').at(0).simulate('click');
|
||||||
wrapper.find('.ant-tree-node-content-wrapper').at(1).simulate('click');
|
wrapper.find('.ant-tree-node-content-wrapper').at(1).simulate('click');
|
||||||
expect(wrapper.find('.ant-table-filter-dropdown-checkall .ant-checkbox').hasClass('ant-checkbox-checked')).toBe(true);
|
expect(
|
||||||
|
wrapper
|
||||||
|
.find('.ant-table-filter-dropdown-checkall .ant-checkbox')
|
||||||
|
.hasClass('ant-checkbox-checked'),
|
||||||
|
).toBe(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -2189,4 +2197,59 @@ describe('Table.filter', () => {
|
|||||||
expect(wrapper.find('Dropdown').first().props().visible).toBe(res2);
|
expect(wrapper.find('Dropdown').first().props().visible).toBe(res2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('filterDropDown should support filterResetToDefaultFilteredValue', () => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
jest.spyOn(console, 'error').mockImplementation(() => undefined);
|
||||||
|
|
||||||
|
const columnFilter = {
|
||||||
|
...column,
|
||||||
|
filterMode: 'tree',
|
||||||
|
filterSearch: true,
|
||||||
|
defaultFilteredValue: ['girl'],
|
||||||
|
};
|
||||||
|
|
||||||
|
let wrapper = mount(
|
||||||
|
createTable({
|
||||||
|
columns: [columnFilter],
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
wrapper.find('span.ant-dropdown-trigger').simulate('click', nativeEvent);
|
||||||
|
act(() => {
|
||||||
|
jest.runAllTimers();
|
||||||
|
wrapper.update();
|
||||||
|
});
|
||||||
|
expect(wrapper.find('.ant-tree-checkbox-checked').length).toBe(1);
|
||||||
|
wrapper
|
||||||
|
.find(Checkbox)
|
||||||
|
.find('input')
|
||||||
|
.simulate('change', { target: { checked: true } });
|
||||||
|
expect(wrapper.find('.ant-tree-checkbox-checked').length).toBe(5);
|
||||||
|
wrapper.find('button.ant-btn-link').simulate('click', nativeEvent);
|
||||||
|
expect(wrapper.find('.ant-tree-checkbox-checked').length).toBe(0);
|
||||||
|
|
||||||
|
wrapper = mount(
|
||||||
|
createTable({
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
...columnFilter,
|
||||||
|
filterResetToDefaultFilteredValue: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
wrapper.find('span.ant-dropdown-trigger').simulate('click', nativeEvent);
|
||||||
|
act(() => {
|
||||||
|
jest.runAllTimers();
|
||||||
|
wrapper.update();
|
||||||
|
});
|
||||||
|
wrapper
|
||||||
|
.find(Checkbox)
|
||||||
|
.find('input')
|
||||||
|
.simulate('change', { target: { checked: true } });
|
||||||
|
expect(wrapper.find('.ant-tree-checkbox-checked').length).toBe(5);
|
||||||
|
wrapper.find('button.ant-btn-link').simulate('click', nativeEvent);
|
||||||
|
expect(wrapper.find('.ant-tree-checkbox-checked').length).toBe(1);
|
||||||
|
expect(wrapper.find('.ant-tree-checkbox-checked+span').text()).toBe('Girl');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -111,6 +111,7 @@ export interface FilterDropdownProps<RecordType> {
|
|||||||
triggerFilter: (filterState: FilterState<RecordType>) => void;
|
triggerFilter: (filterState: FilterState<RecordType>) => void;
|
||||||
locale: TableLocale;
|
locale: TableLocale;
|
||||||
getPopupContainer?: GetPopupContainer;
|
getPopupContainer?: GetPopupContainer;
|
||||||
|
filterResetToDefaultFilteredValue?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
function FilterDropdown<RecordType>(props: FilterDropdownProps<RecordType>) {
|
function FilterDropdown<RecordType>(props: FilterDropdownProps<RecordType>) {
|
||||||
@ -130,7 +131,12 @@ function FilterDropdown<RecordType>(props: FilterDropdownProps<RecordType>) {
|
|||||||
getPopupContainer,
|
getPopupContainer,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const { filterDropdownVisible, onFilterDropdownVisibleChange } = column;
|
const {
|
||||||
|
filterDropdownVisible,
|
||||||
|
onFilterDropdownVisibleChange,
|
||||||
|
filterResetToDefaultFilteredValue,
|
||||||
|
defaultFilteredValue,
|
||||||
|
} = column;
|
||||||
const [visible, setVisible] = React.useState(false);
|
const [visible, setVisible] = React.useState(false);
|
||||||
|
|
||||||
const filtered: boolean = !!(
|
const filtered: boolean = !!(
|
||||||
@ -231,8 +237,14 @@ function FilterDropdown<RecordType>(props: FilterDropdownProps<RecordType>) {
|
|||||||
if (closeDropdown) {
|
if (closeDropdown) {
|
||||||
triggerVisible(false);
|
triggerVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
setSearchValue('');
|
setSearchValue('');
|
||||||
|
|
||||||
|
if (filterResetToDefaultFilteredValue) {
|
||||||
|
setFilteredKeysSync((defaultFilteredValue || []).map(key => String(key)));
|
||||||
|
} else {
|
||||||
setFilteredKeysSync([]);
|
setFilteredKeysSync([]);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const doFilter = ({ closeDropdown } = { closeDropdown: true }) => {
|
const doFilter = ({ closeDropdown } = { closeDropdown: true }) => {
|
||||||
|
@ -120,6 +120,7 @@ One of the Table `columns` prop for describing the table's columns, Column has t
|
|||||||
| colSpan | Span of this column's title | number | - | |
|
| colSpan | Span of this column's title | number | - | |
|
||||||
| dataIndex | Display field of the data record, support nest path by string array | string \| string\[] | - | |
|
| dataIndex | Display field of the data record, support nest path by string array | string \| string\[] | - | |
|
||||||
| defaultFilteredValue | Default filtered values | string\[] | - | |
|
| defaultFilteredValue | Default filtered values | string\[] | - | |
|
||||||
|
| filterResetToDefaultFilteredValue | click the reset button, whether to restore the default filter | boolean | false | |
|
||||||
| defaultSortOrder | Default order of sorted values | `ascend` \| `descend` | - | |
|
| defaultSortOrder | Default order of sorted values | `ascend` \| `descend` | - | |
|
||||||
| editable | Whether column can be edited | boolean | false | |
|
| editable | Whether column can be edited | boolean | false | |
|
||||||
| ellipsis | The ellipsis cell content, not working with sorter and filters for now.<br />tableLayout would be `fixed` when `ellipsis` is `true` or `{ showTitle?: boolean }` | boolean \| {showTitle?: boolean } | false | showTitle: 4.3.0 |
|
| ellipsis | The ellipsis cell content, not working with sorter and filters for now.<br />tableLayout would be `fixed` when `ellipsis` is `true` or `{ showTitle?: boolean }` | boolean \| {showTitle?: boolean } | false | showTitle: 4.3.0 |
|
||||||
|
@ -127,6 +127,7 @@ const columns = [
|
|||||||
| colSpan | 表头列合并,设置为 0 时,不渲染 | number | - | |
|
| colSpan | 表头列合并,设置为 0 时,不渲染 | number | - | |
|
||||||
| dataIndex | 列数据在数据项中对应的路径,支持通过数组查询嵌套路径 | string \| string\[] | - | |
|
| dataIndex | 列数据在数据项中对应的路径,支持通过数组查询嵌套路径 | string \| string\[] | - | |
|
||||||
| defaultFilteredValue | 默认筛选值 | string\[] | - | |
|
| defaultFilteredValue | 默认筛选值 | string\[] | - | |
|
||||||
|
| filterResetToDefaultFilteredValue | 点击重置按钮的时候,是否恢复默认筛选值 | boolean | false | |
|
||||||
| defaultSortOrder | 默认排序顺序 | `ascend` \| `descend` | - | |
|
| defaultSortOrder | 默认排序顺序 | `ascend` \| `descend` | - | |
|
||||||
| editable | 是否可编辑 | boolean | false | |
|
| editable | 是否可编辑 | boolean | false | |
|
||||||
| ellipsis | 超过宽度将自动省略,暂不支持和排序筛选一起使用。<br />设置为 `true` 或 `{ showTitle?: boolean }` 时,表格布局将变成 `tableLayout="fixed"`。 | boolean \| { showTitle?: boolean } | false | showTitle: 4.3.0 |
|
| ellipsis | 超过宽度将自动省略,暂不支持和排序筛选一起使用。<br />设置为 `true` 或 `{ showTitle?: boolean }` 时,表格布局将变成 `tableLayout="fixed"`。 | boolean \| { showTitle?: boolean } | false | showTitle: 4.3.0 |
|
||||||
|
@ -117,6 +117,7 @@ export interface ColumnType<RecordType> extends RcColumnType<RecordType> {
|
|||||||
onFilter?: (value: string | number | boolean, record: RecordType) => boolean;
|
onFilter?: (value: string | number | boolean, record: RecordType) => boolean;
|
||||||
filterDropdownVisible?: boolean;
|
filterDropdownVisible?: boolean;
|
||||||
onFilterDropdownVisibleChange?: (visible: boolean) => void;
|
onFilterDropdownVisibleChange?: (visible: boolean) => void;
|
||||||
|
filterResetToDefaultFilteredValue?: boolean;
|
||||||
|
|
||||||
// Responsive
|
// Responsive
|
||||||
responsive?: Breakpoint[];
|
responsive?: Breakpoint[];
|
||||||
|
Loading…
Reference in New Issue
Block a user