@kwiz/fluentui
Version:
KWIZ common controls for FluentUI
49 lines (48 loc) • 1.67 kB
TypeScript
import { MenuListProps, MenuPopoverProps, MenuProps, SplitButtonProps } from '@fluentui/react-components';
import React, { MutableRefObject } from 'react';
import { ButtonEXProps } from '../types';
interface iMenuItemEXItem {
type?: "item";
title: string;
onClick: (e: React.MouseEvent) => void;
disabled?: boolean;
icon?: JSX.Element;
items?: iMenuItemEX[];
checked?: boolean;
/** render this control instead of the item IMPORTANT! pass in a key to this control */
as?: JSX.Element;
}
interface iMenuItemEXSeparator {
type: "separator";
}
interface iMenuItemEXGroup {
type: "group";
title: string;
items: (iMenuItemEX & {
type?: "separator" | "item";
})[];
}
export type iMenuItemEX = iMenuItemEXItem | iMenuItemEXSeparator | iMenuItemEXGroup;
interface IPropsBase {
menuProps?: Partial<MenuProps>;
menuPopOverProps?: MenuPopoverProps;
menuListProps?: MenuListProps;
items: iMenuItemEX[];
/** default 8 null/false to disable */
filterThreshold?: number | false;
/** default 8, null/false to disable */
pageSize?: number | false;
closeMenu?: MutableRefObject<() => void>;
}
interface IPropsNoSplit {
trigger: JSX.Element | string | ButtonEXProps;
SplitButton?: false;
}
interface IPropsSplit {
trigger: SplitButtonProps;
/** send to to render trigger element as primary action on a split button. Only works with trigger as JSX.Element for primary button */
SplitButton: true;
}
export type iMenuExProps = IPropsBase & (IPropsNoSplit | IPropsSplit);
export declare const MenuEx: React.FunctionComponent<React.PropsWithChildren<iMenuExProps>>;
export {};