Files
2026-01-16 02:20:32 +00:00

58 lines
3.1 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { MenuProps } from 'antd';
import React from 'react';
import type { PureSettings } from '../../defaultSettings';
import type { MenuDataItem, MessageDescriptor, RouterTypes, WithFalse } from '../../typing';
import type { PrivateSiderMenuProps } from './SiderMenu';
export type MenuMode = 'vertical' | 'vertical-left' | 'vertical-right' | 'horizontal' | 'inline';
export type BaseMenuProps = {
className?: string;
/** 默认的是否展开,会受到 breakpoint 的影响 */
defaultCollapsed?: boolean;
collapsed?: boolean;
splitMenus?: boolean;
isMobile?: boolean;
menuData?: MenuDataItem[];
mode?: MenuMode;
onCollapse?: (collapsed: boolean) => void;
openKeys?: WithFalse<string[]> | undefined;
handleOpenChange?: (openKeys: string[]) => void;
iconPrefixes?: string;
/** 要给菜单的props, 参考antd-menu的属性。https://ant.design/components/menu-cn/ */
menuProps?: MenuProps;
style?: React.CSSProperties;
formatMessage?: (message: MessageDescriptor) => string;
/**
* @name 处理父级菜单的 props可以覆写菜单的点击功能一般用于埋点
* @see 子级的菜单要使用 menuItemRender 来处理
*
* @example 使用 a 标签跳转到特殊的地址 subMenuItemRender={(item, defaultDom) => { return <a onClick={()=> history.push(item.path) }>{defaultDom}</a> }}
* @example 增加埋点 subMenuItemRender={(item, defaultDom) => { return <a onClick={()=> log.click(item.name) }>{defaultDom}</a> }}
*/
subMenuItemRender?: WithFalse<(item: MenuDataItem & {
isUrl: boolean;
}, defaultDom: React.ReactNode, menuProps: BaseMenuProps) => React.ReactNode>;
/**
* @name 处理菜单的 props可以覆写菜单的点击功能一般结合 Router 框架使用
* @see 非子级的菜单要使用 subMenuItemRender 来处理
*
* @example 使用 a 标签 menuItemRender={(item, defaultDom) => { return <a onClick={()=> history.push(item.path) }>{defaultDom}</a> }}
* @example 使用 Link 标签 menuItemRender={(item, defaultDom) => { return <Link to={item.path}>{defaultDom}</Link> }}
*/
menuItemRender?: WithFalse<(item: MenuDataItem & {
isUrl: boolean;
onClick: () => void;
}, defaultDom: React.ReactNode, menuProps: BaseMenuProps & Partial<PrivateSiderMenuProps>) => React.ReactNode>;
/**
* 修改 name如果想做个简单的国际化可以使用这个方法
*/
menuTextRender?: WithFalse<(item: MenuDataItem, defaultText: React.ReactNode, menuProps: BaseMenuProps) => React.ReactNode>;
/**
* @name 处理 menuData 的方法,与 menuDataRender 不同postMenuData处理完成后会直接渲染不再进行国际化和拼接处理
*
* @example 增加菜单图标 postMenuData={(menuData) => { return menuData.map(item => { return { ...item, icon: <Icon type={item.icon} /> } }) }}
*/
postMenuData?: (menusData?: MenuDataItem[]) => MenuDataItem[];
} & Partial<RouterTypes> & Omit<MenuProps, 'openKeys' | 'onOpenChange' | 'title'> & Partial<PureSettings>;
declare const BaseMenu: React.FC<BaseMenuProps & PrivateSiderMenuProps>;
export { BaseMenu };