UNPKG

@adaptabletools/adaptable

Version:

Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

80 lines (79 loc) 3.17 kB
import { AdaptableApi } from '../Api/AdaptableApi'; import { ComponentType, ReactElement } from 'react'; import { BaseContext } from '../types'; /** * Base Component for Bespoke Components: can be Angular, React or Vue */ export type AdaptableFrameworkComponent = AngularFrameworkComponent | ReactFrameworkComponent | VueFrameworkComponent; /** * Angular component defined by its type and (optional) initialisation callback */ export type AngularFrameworkComponent<T = unknown> = { /** * Angular component class (instance of https://angular.io/api/core/Type); will be automatically instantiated at runtime - `adaptableApi` is provided via Injection token */ type: T; /** * Optional initialisation callback; will be invoked after each component instantiation and returned object properties assigned to component instance */ onSetup?: ({ adaptableApi }: { adaptableApi: AdaptableApi; }) => Partial<T>; }; /** * A function that returns a ReactNode (toolbars, settings panels, tool panels, etc.). * For custom Column / Context menu rows, use `ReactMenuItemFrameworkComponent` instead. */ export type ReactFrameworkComponent = ({ adaptableApi, }: { adaptableApi: AdaptableApi; }) => ReactElement; /** AdapTable extras passed on AG Grid `menuItemParams` for custom menu items. */ export interface AdaptableMenuItemParams<TMenuContext = unknown> { adaptableApi: AdaptableApi; menuContext: TMenuContext; } /** * Props AG Grid passes to React custom menu item components, with AdapTable * `menuItemParams` (see `AgGridMenuAdapter.mapCustomMenuItemToAgGridMenuDefinition`). */ export interface AdaptableReactMenuItemProps<TMenuContext = unknown> { name: string; menuItemParams: AdaptableMenuItemParams<TMenuContext> & Record<string, unknown>; } /** * React component for custom Column / Context menu rows (AG Grid `menuItem`). * Unlike `ReactFrameworkComponent`, receives `name` and `menuItemParams`, not only `adaptableApi`. */ export type ReactMenuItemFrameworkComponent<TMenuContext = unknown> = ComponentType<AdaptableReactMenuItemProps<TMenuContext>>; /** * Framework component for a custom menu item (Column Menu or Context Menu). */ export type MenuItemFrameworkComponent<TMenuContext = unknown> = AngularFrameworkComponent | VueFrameworkComponent | ReactMenuItemFrameworkComponent<TMenuContext>; /** * Creates a Vue Component to be used in AdapTable UI controls */ export type VueFrameworkComponent<Component extends unknown = unknown> = ({ adaptableApi, }: { adaptableApi: AdaptableApi; }) => Component; /** * Context provided for any custom rendering */ export interface CustomRenderContext extends BaseContext { /** * Phase of DOM Element lifecycle */ phase: 'onMount' | 'onDestroy'; /** * Container Div Element */ element: HTMLDivElement; } /** * Function which is called when rendering/destroying a custom framework-agnostic component */ export interface CustomRenderFunction { /** * Function to provide bespoke content when NOT using a Framework wrapper */ (customRenderContext: CustomRenderContext): string | null; }