import { MenuSeparator } from '@infinite-table/infinite-react'; import { AdaptableContextMenuItemName, AdaptableMenuItem, AgGridMenuItem, ContextMenuContext } from '../AdaptableState/Common/Menu'; import { AdaptableIcon } from '../types'; /** * Options for managing menus in AdapTable – provided using 2 collections */ export interface ContextMenuOptions { /** * Customises Context Menu (default context menu items are available in provided context) */ customContextMenu?: (menuContext: CustomContextMenuContext) => CustomContextMenuItem[]; } /** * Context info provided when building Custom Context Menus */ export interface CustomContextMenuContext extends ContextMenuContext { /** * Flat list of all available AdapTable Menu Items */ defaultAdaptableMenuItems: AdaptableSystemContextMenuItem[]; /** * Flat list of all available AG Grid Menu Items */ defaultAgGridMenuItems: AgGridMenuItem[]; /** * Default structure of Adaptable Menu Items */ defaultAdaptableMenuStructure: DefaultAdaptableMenuStructure; /** * Default structure of AG Grid Menu Items */ defaultAgGridMenuStructure: DefaultAgGridMenuStructure; } /** * Custom Context Menu Item */ export type CustomContextMenuItem = AgGridMenuItem | AdaptableSystemContextMenuItem | UserContextMenuItem | MenuSeparator | CustomGroupContextMenuItem; /** * Defines a Grouped Menu Item in the Context Menu */ export type CustomGroupContextMenuItem = { menuType: 'Group'; label: string; subMenuItems: CustomContextMenuItem[]; disabled?: boolean; icon?: AdaptableIcon; }; /** * System Menu Item that is provided by AdapTable */ export interface AdaptableSystemContextMenuItem extends AdaptableMenuItem { /** * Type of Menu - always 'Adaptable' */ menuType: 'Adaptable'; } /** * Context Menu Item that is provided by User */ export interface UserContextMenuItem { /** * Type of Menu - always 'User' */ menuType: 'User'; /** * Text to appear in the Menu Item */ label: string; /** * Function invoked when the Menu Item is clicked */ onClick?: (menuContext: ContextMenuContext) => void; /** * Whether menu item is disabled */ disabled?: boolean; /** * Whether menu item is hidden */ hidden?: boolean; /** * Optional icon to display */ icon?: AdaptableIcon; /** * Array of Menu Items, enabling limitless levels of menus */ subMenuItems?: CustomContextMenuItem[]; } /** * Defines AG Grid Context Menu Items */ export type AgGridContextMenuItemType = 'autoSizeAll' | 'expandAll' | 'contractAll' | 'copy' | 'copyWithHeaders' | 'copyWithGroupHeaders' | 'cut' | 'paste' | 'resetColumns' | 'export' | 'csvExport' | 'excelExport' | 'chartRange' | 'pivotChart' | 'separator'; /** * The Context Menu provided by AadapTable by default */ export type DefaultAdaptableMenuStructure = (AdaptableSystemContextMenuItem | MenuSeparator)[]; /** * AG Grid section of Context Menu provided by AadapTable by default */ export type DefaultAgGridMenuStructure = (AgGridMenuItem | { menuType: 'Group'; label: string; subMenuItems: AgGridMenuItem[]; disabled?: boolean; icon?: AdaptableIcon; })[];