import React from 'react'; import { Dropdown, Menu, Space, Tabs } from 'antd'; import { DownOutlined } from '@ant-design/icons'; import classNames from 'classnames'; import useMergedState from 'rc-util/lib/hooks/useMergedState'; import './index.less'; export type ListToolBarMenuItem = { key: React.Key; label: React.ReactNode; disabled?: boolean; }; export type ListToolBarHeaderMenuProps = { type?: 'inline' | 'dropdown' | 'tab'; activeKey?: React.Key; items?: ListToolBarMenuItem[]; onChange?: (activeKey?: React.Key) => void; prefixCls?: string; }; const HeaderMenu: React.FC = (props) => { const { items = [], type = 'inline', prefixCls, activeKey: propActiveKey } = props; const [activeKey, setActiveKey] = useMergedState(propActiveKey as React.Key, { value: propActiveKey, onChange: props.onChange, }); if (items.length < 1) { return null; } const activeItem = items.find((item) => { return item.key === activeKey; }) || items[0]; if (type === 'inline') { return (
{items.map((item, index) => (
{ setActiveKey(item.key); }} className={classNames( `${prefixCls}-inline-menu-item`, activeItem.key === item.key ? `${prefixCls}-inline-menu-item-active` : undefined, )} > {item.label}
))}
); } if (type === 'tab') { return ( setActiveKey(key)}> {items.map(({ label, key, ...rest }, index) => { return ; })} ); } return (
{ setActiveKey(item.key); }} > {items.map((item, index) => ( {item.label} ))} } > {activeItem.label}
); }; export default HeaderMenu;