@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
TypeScript
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;
}