mirror of
https://github.com/ant-design/ant-design.git
synced 2025-06-07 17:44:35 +08:00
parent
7f404f1e20
commit
fbb6cb007f
@ -6,7 +6,7 @@ export interface ColumnProps<T> {
|
||||
key?: string;
|
||||
dataIndex?: string;
|
||||
render?: (text: any, record: T, index: number) => React.ReactNode;
|
||||
filters?: { text: string; value: string }[];
|
||||
filters?: { text: string; value: string, children?: any[] }[];
|
||||
onFilter?: (value: any, record: T) => boolean;
|
||||
filterMultiple?: boolean;
|
||||
filterDropdown?: React.ReactNode;
|
||||
|
@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import Menu, { SubMenu, Item as MenuItem } from 'rc-menu';
|
||||
import classNames from 'classnames';
|
||||
import Dropdown from '../dropdown';
|
||||
import Icon from '../icon';
|
||||
import Checkbox from '../checkbox';
|
||||
@ -12,7 +13,7 @@ export interface FilterMenuProps {
|
||||
column: {
|
||||
filterMultiple?: boolean,
|
||||
filterDropdown?: React.ReactNode,
|
||||
filters?: string[],
|
||||
filters?: { text: string; value: string, children?: any[] }[],
|
||||
filterDropdownVisible?: boolean,
|
||||
onFilterDropdownVisibleChange?: (visible: boolean) => any,
|
||||
};
|
||||
@ -112,6 +113,11 @@ export default class FilterMenu extends React.Component<FilterMenuProps, any> {
|
||||
);
|
||||
}
|
||||
|
||||
hasSubMenu() {
|
||||
const { column: { filters = [] } } = this.props;
|
||||
return filters.some(item => !!(item.children && item.children.length > 0));
|
||||
}
|
||||
|
||||
renderMenus(items) {
|
||||
return items.map(item => {
|
||||
if (item.children && item.children.length > 0) {
|
||||
@ -149,6 +155,9 @@ export default class FilterMenu extends React.Component<FilterMenuProps, any> {
|
||||
const { column, locale, prefixCls, dropdownPrefixCls } = this.props;
|
||||
// default multiple selection in filter dropdown
|
||||
const multiple = ('filterMultiple' in column) ? column.filterMultiple : true;
|
||||
const dropdownMenuClass = classNames({
|
||||
[`${dropdownPrefixCls}-menu-without-submenu`]: !this.hasSubMenu(),
|
||||
});
|
||||
const menus = column.filterDropdown ? (
|
||||
<FilterDropdownMenuWrapper>
|
||||
{column.filterDropdown}
|
||||
@ -159,6 +168,7 @@ export default class FilterMenu extends React.Component<FilterMenuProps, any> {
|
||||
multiple={multiple}
|
||||
onClick={this.handleMenuItemClick}
|
||||
prefixCls={`${dropdownPrefixCls}-menu`}
|
||||
className={dropdownMenuClass}
|
||||
onSelect={this.setSelectedKeys}
|
||||
onDeselect={this.setSelectedKeys}
|
||||
selectedKeys={this.state.selectedKeys}
|
||||
|
@ -373,8 +373,12 @@
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
border-radius: @border-radius-base @border-radius-base 0 0;
|
||||
|
||||
// https://github.com/ant-design/ant-design/issues/4916
|
||||
&-without-submenu {
|
||||
max-height: 400px;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
&-item > label + span {
|
||||
padding: 0;
|
||||
|
Loading…
Reference in New Issue
Block a user