mirror of
https://github.com/ant-design/ant-design.git
synced 2025-06-12 20:43:11 +08:00
* feat: filter without close dropdown (#28652) * Change confirm parameter type * Update components/table/demo/custom-filter-panel.md Co-authored-by: 偏右 <afc163@gmail.com> Co-authored-by: alek.ye <alek.ye@meehealth.com> Co-authored-by: 偏右 <afc163@gmail.com>
This commit is contained in:
parent
d8c617d7c3
commit
168db12e3f
@ -9,6 +9,8 @@ title:
|
|||||||
|
|
||||||
通过 `filterDropdown` 自定义的列筛选功能,并实现一个搜索列的示例。
|
通过 `filterDropdown` 自定义的列筛选功能,并实现一个搜索列的示例。
|
||||||
|
|
||||||
|
给函数 `confirm` 添加 `boolean` 类型参数 `closeDropdown`,是否关闭筛选菜单,默认为 `true`。
|
||||||
|
|
||||||
## en-US
|
## en-US
|
||||||
|
|
||||||
Implement a customized column search example via `filterDropdown`.
|
Implement a customized column search example via `filterDropdown`.
|
||||||
@ -77,6 +79,20 @@ class App extends React.Component {
|
|||||||
<Button onClick={() => this.handleReset(clearFilters)} size="small" style={{ width: 90 }}>
|
<Button onClick={() => this.handleReset(clearFilters)} size="small" style={{ width: 90 }}>
|
||||||
Reset
|
Reset
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
onClick={() => {
|
||||||
|
confirm({ closeDropdown: false });
|
||||||
|
console.log('1234');
|
||||||
|
this.setState({
|
||||||
|
searchText: selectedKeys[0],
|
||||||
|
searchedColumn: dataIndex,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Filter
|
||||||
|
</Button>
|
||||||
</Space>
|
</Space>
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
|
@ -8,7 +8,14 @@ import Checkbox from '../../../checkbox';
|
|||||||
import Radio from '../../../radio';
|
import Radio from '../../../radio';
|
||||||
import Dropdown from '../../../dropdown';
|
import Dropdown from '../../../dropdown';
|
||||||
import Empty from '../../../empty';
|
import Empty from '../../../empty';
|
||||||
import { ColumnType, ColumnFilterItem, Key, TableLocale, GetPopupContainer } from '../../interface';
|
import {
|
||||||
|
ColumnType,
|
||||||
|
ColumnFilterItem,
|
||||||
|
Key,
|
||||||
|
TableLocale,
|
||||||
|
GetPopupContainer,
|
||||||
|
FilterConfirmProps,
|
||||||
|
} from '../../interface';
|
||||||
import FilterDropdownMenuWrapper from './FilterWrapper';
|
import FilterDropdownMenuWrapper from './FilterWrapper';
|
||||||
import { FilterState } from '.';
|
import { FilterState } from '.';
|
||||||
import useSyncState from '../../../_util/hooks/useSyncState';
|
import useSyncState from '../../../_util/hooks/useSyncState';
|
||||||
@ -160,8 +167,6 @@ function FilterDropdown<RecordType>(props: FilterDropdownProps<RecordType>) {
|
|||||||
|
|
||||||
// ======================= Submit ========================
|
// ======================= Submit ========================
|
||||||
const internalTriggerFilter = (keys: Key[] | undefined | null) => {
|
const internalTriggerFilter = (keys: Key[] | undefined | null) => {
|
||||||
triggerVisible(false);
|
|
||||||
|
|
||||||
const mergedKeys = keys && keys.length ? keys : null;
|
const mergedKeys = keys && keys.length ? keys : null;
|
||||||
if (mergedKeys === null && (!filterState || !filterState.filteredKeys)) {
|
if (mergedKeys === null && (!filterState || !filterState.filteredKeys)) {
|
||||||
return null;
|
return null;
|
||||||
@ -179,14 +184,21 @@ function FilterDropdown<RecordType>(props: FilterDropdownProps<RecordType>) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onConfirm = () => {
|
const onConfirm = () => {
|
||||||
|
triggerVisible(false);
|
||||||
internalTriggerFilter(getFilteredKeysSync());
|
internalTriggerFilter(getFilteredKeysSync());
|
||||||
};
|
};
|
||||||
|
|
||||||
const onReset = () => {
|
const onReset = () => {
|
||||||
setFilteredKeysSync([]);
|
setFilteredKeysSync([]);
|
||||||
|
triggerVisible(false);
|
||||||
internalTriggerFilter([]);
|
internalTriggerFilter([]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const doFilter = (param: FilterConfirmProps = { closeDropdown: true }) => {
|
||||||
|
triggerVisible(!param.closeDropdown);
|
||||||
|
internalTriggerFilter(getFilteredKeysSync());
|
||||||
|
};
|
||||||
|
|
||||||
const onVisibleChange = (newVisible: boolean) => {
|
const onVisibleChange = (newVisible: boolean) => {
|
||||||
if (newVisible && propFilteredKeys !== undefined) {
|
if (newVisible && propFilteredKeys !== undefined) {
|
||||||
// Sync filteredKeys on appear in controlled mode (propFilteredKeys !== undefiend)
|
// Sync filteredKeys on appear in controlled mode (propFilteredKeys !== undefiend)
|
||||||
@ -213,7 +225,7 @@ function FilterDropdown<RecordType>(props: FilterDropdownProps<RecordType>) {
|
|||||||
prefixCls: `${dropdownPrefixCls}-custom`,
|
prefixCls: `${dropdownPrefixCls}-custom`,
|
||||||
setSelectedKeys: (selectedKeys: Key[]) => onSelectKeys({ selectedKeys }),
|
setSelectedKeys: (selectedKeys: Key[]) => onSelectKeys({ selectedKeys }),
|
||||||
selectedKeys: getFilteredKeysSync(),
|
selectedKeys: getFilteredKeysSync(),
|
||||||
confirm: onConfirm,
|
confirm: doFilter,
|
||||||
clearFilters: onReset,
|
clearFilters: onReset,
|
||||||
filters: column.filters,
|
filters: column.filters,
|
||||||
visible: mergedVisible,
|
visible: mergedVisible,
|
||||||
|
@ -67,11 +67,15 @@ export type ColumnTitle<RecordType> =
|
|||||||
| React.ReactNode
|
| React.ReactNode
|
||||||
| ((props: ColumnTitleProps<RecordType>) => React.ReactNode);
|
| ((props: ColumnTitleProps<RecordType>) => React.ReactNode);
|
||||||
|
|
||||||
|
export interface FilterConfirmProps {
|
||||||
|
closeDropdown: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface FilterDropdownProps {
|
export interface FilterDropdownProps {
|
||||||
prefixCls: string;
|
prefixCls: string;
|
||||||
setSelectedKeys: (selectedKeys: React.Key[]) => void;
|
setSelectedKeys: (selectedKeys: React.Key[]) => void;
|
||||||
selectedKeys: React.Key[];
|
selectedKeys: React.Key[];
|
||||||
confirm: () => void;
|
confirm: (param: FilterConfirmProps) => void;
|
||||||
clearFilters?: () => void;
|
clearFilters?: () => void;
|
||||||
filters?: ColumnFilterItem[];
|
filters?: ColumnFilterItem[];
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
|
Loading…
Reference in New Issue
Block a user