@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
416 lines (415 loc) • 12.7 kB
TypeScript
import { BaseContext } from '../AdaptableState/Common/BaseContext';
import { IRowNode } from 'ag-grid-enterprise';
import { Action, Chart, ChatInitSettings, ChatMessage, ChatRoom, ChatSearchCriteria, Contact, ContactList, Context, ContextMetadata, ContextType, Country, Currency, Email, Instrument, InstrumentList, Intent, IntentResolution, IntentResult, Interaction, Message, Organization, Portfolio, Position, StandardContextType, StandardIntent, TimeRange, TransactionResult, Valuation } from '@finos/fdc3';
import { AdaptableIcon } from '../AdaptableState/Common/AdaptableIcon';
import { ButtonStyle } from '../AdaptableState/Common/ButtonStyle';
import { RowScope } from '../types';
/**
* Options for configuring FDC3 in AdapTable
*/
export interface Fdc3Options {
/**
* Enable logging message exchanges to Console
*
* @defaultValue false
*/
enableLogging?: boolean;
/**
* Maps Context Type to AdapTable Grid Data
*/
gridDataContextMapping?: GridDataContextMapping;
/**
* Builds Context Data (useful for postprocessing Context Data mapped from Grid data)
*/
resolveContextData?: (context: ResolveContextDataContext) => Context;
/**
* Configures FDC3 standard Intents that AdapTable will listen for and raise
*/
intents?: Fdc3IntentOptions;
/**
* Configures FDC3 standard Contexts that AdapTable will listen for and broadcast
*/
contexts?: Fdc3ContextOptions;
/**
* Configures the default FDC3 Actions column
*/
actionColumnDefaultConfiguration?: ActionColumnDefaultConfiguration;
/**
* Customises FDC3 UI Controls
*/
uiControlsDefaultConfiguration?: {
contexts?: {
[contextName in StandardContextType]?: UIControlConfig;
};
intents?: {
[intentName in StandardIntent]?: UIControlConfig;
};
};
}
/**
* Options for configuring FDC3 Intent Behaviour in AdapTable
*/
export interface Fdc3IntentOptions {
/**
* Raises given standard Intent(s) on various Grid Actions
*/
raises?: RaiseIntentConfiguration;
/**
* Subscribe to given standard Intent(s)
*/
listensFor?: Intent[];
/**
* Handles incoming Intents (standard and custom)
*/
handleIntent?: (context: HandleFdc3IntentContext) => Promise<IntentResult> | void;
/**
* Handles the IntentResolution that a raised Intent might return
*/
handleIntentResolution?: (context: HandleFdc3IntentResolutionContext) => Promise<void>;
}
/**
* Options for configuring FDC3 Context Behaviour in AdapTable
*/
export interface Fdc3ContextOptions {
/**
* Broadcasts given standard Context(s) on various Grid Actions
*/
broadcasts?: BroadcastConfiguration;
/**
* Subscribe to given standard Context(s)
*/
listensFor?: ContextType[];
/**
* Handles incoming Contexts (standard and custom)
*/
handleContext?: (context: HandleFdc3Context) => void;
}
/**
* Used to customise FDC3 controls (e.g. Action Columns)
*/
export interface UIControlConfig {
/**
* Icon to display
*/
icon?: AdaptableIcon;
}
/**
* Default configuration to use for an FDC3 Action Column
*/
export interface ActionColumnDefaultConfiguration {
/**
* Column Id
* @defaultValue 'fdc3ActionColumn'
*/
columnId?: string;
/**
* Column Header
* @defaultValue 'FDC3 Actions'
*/
headerName?: string;
/**
* Column Width in pixels
* @defaultValue 200
*/
width?: number;
/**
* If Column is resizable
* @defaultValue true
*/
resizable?: boolean;
/**
* If Column is movable
* @defaultValue true
*/
movable?: boolean;
/**
* Which rows button appears in
* @defaultValue data rows only
*/
rowScope?: RowScope;
}
/**
* Used to build Context Data
*/
export interface ResolveContextDataContext extends BaseContext {
/**
* FDC3 Context Type
*/
contextType: ContextType;
/**
* FDC3 Context Data which has been mapped from the grid data based on the given configuration in `gridDataContextMapping`
*/
contextMappedFromGridData?: Context;
/**
* Row Node which is source of the context data
*/
rowNode: IRowNode;
/**
* Row data which is the source of the context data
*/
rowData: any;
/**
* Primary Key value of row
*/
primaryKeyValue: any;
}
/**
* Context used when handling incoming FDC3 messages
*/
export interface HandleFdc3Context extends BaseContext {
/**
* The FDC3 Context
*/
context: Context;
/**
* The FDC3 Context Metadata related to the context
*/
metadata?: ContextMetadata;
}
/**
* Context used when handling incoming FDC3 Intents
*/
export interface HandleFdc3IntentContext extends HandleFdc3Context {
/**
* The FDC3 Intent
*/
intent: Intent;
}
export declare const ColumnRefTypePrefix = "_colId.";
export declare const FieldRefTypePrefix = "_field.";
export type GridDataRef = `_colId.${string}` | `_field.${string}`;
export type Fdc3ContentMapping<T> = PropertiesToGridRefs<Omit<T, 'type'>>;
/**
* Mapping of FDC3 Context Types to Grid Data/Columns
*/
export interface GridDataContextMapping {
'fdc3.action'?: Fdc3ContentMapping<Action>;
'fdc3.chart'?: Fdc3ContentMapping<Chart>;
'fdc3.chat.initSettings'?: Fdc3ContentMapping<ChatInitSettings>;
'fdc3.chat.message'?: Fdc3ContentMapping<ChatMessage>;
'fdc3.chat.room'?: Fdc3ContentMapping<ChatRoom>;
'fdc3.chat.searchCriteria'?: Fdc3ContentMapping<ChatSearchCriteria>;
'fdc3.contact'?: Fdc3ContentMapping<Contact>;
'fdc3.contactList'?: Fdc3ContentMapping<ContactList>;
'fdc3.country'?: Fdc3ContentMapping<Country>;
'fdc3.currency'?: Fdc3ContentMapping<Currency>;
'fdc3.email'?: Fdc3ContentMapping<Email>;
'fdc3.instrument'?: Fdc3ContentMapping<Instrument>;
'fdc3.instrumentList'?: Fdc3ContentMapping<InstrumentList>;
'fdc3.interaction'?: Fdc3ContentMapping<Interaction>;
'fdc3.message'?: Fdc3ContentMapping<Message>;
'fdc3.organization'?: Fdc3ContentMapping<Organization>;
'fdc3.portfolio'?: Fdc3ContentMapping<Portfolio>;
'fdc3.position'?: Fdc3ContentMapping<Position>;
'fdc3.timerange'?: Fdc3ContentMapping<TimeRange>;
'fdc3.transactionResult'?: Fdc3ContentMapping<TransactionResult>;
'fdc3.valuation'?: Fdc3ContentMapping<Valuation>;
custom?: {
[key: string]: Fdc3ContentMapping<Context>;
};
}
/**
* Defines config options for Raising FDC3 Intents
*/
export interface RaiseIntentConfiguration {
StartCall?: RaiseIntentConfig[];
StartChat?: RaiseIntentConfig[];
StartEmail?: RaiseIntentConfig[];
ViewAnalysis?: RaiseIntentConfig[];
ViewChart?: RaiseIntentConfig[];
ViewContact?: RaiseIntentConfig[];
ViewHoldings?: RaiseIntentConfig[];
ViewInstrument?: RaiseIntentConfig[];
ViewInteractions?: RaiseIntentConfig[];
ViewNews?: RaiseIntentConfig[];
ViewOrders?: RaiseIntentConfig[];
ViewProfile?: RaiseIntentConfig[];
ViewQuote?: RaiseIntentConfig[];
ViewResearch?: RaiseIntentConfig[];
custom?: {
[customIntent: string]: RaiseIntentConfig[];
};
}
/**
* Defines config options for Broadcasting FDC3 Context
*/
export interface BroadcastConfiguration {
'fdc3.chart'?: BroadcastConfig;
'fdc3.chat.initSettings'?: BroadcastConfig;
'fdc3.contact'?: BroadcastConfig;
'fdc3.contactList'?: BroadcastConfig;
'fdc3.country'?: BroadcastConfig;
'fdc3.currency'?: BroadcastConfig;
'fdc3.email'?: BroadcastConfig;
'fdc3.instrument'?: BroadcastConfig;
'fdc3.instrumentList'?: BroadcastConfig;
'fdc3.organization'?: BroadcastConfig;
'fdc3.portfolio'?: BroadcastConfig;
'fdc3.position'?: BroadcastConfig;
'fdc3.timerange'?: BroadcastConfig;
'fdc3.valuation'?: BroadcastConfig;
custom?: {
[customContext: string]: BroadcastConfig;
};
}
/**
* Config used when raising an FDC3 Intent
*/
export interface RaiseIntentConfig {
/**
* Key of Context being Raised
*/
contextType: ContextType;
/**
* Columns to display a 'Raise Intent' Context Menu item
*/
contextMenu?: {
/**
* Columns to display a 'Raise Intent' Context Menu item
*/
columnIds: string[];
/**
* Menu Item's Icon; can be an AdaptableIcon or function that provides `AdaptableIcon` object
*/
icon?: '_defaultFdc3' | AdaptableIcon;
};
/**
* Definition of Action Button (to be put in default FDC3 Action Column)
*/
actionButton?: Fdc3AdaptableButton;
/**
* Custom FDC3 Action Column definition for the Intent
*/
actionColumn?: {
columnId: string;
friendlyName?: string;
button: Fdc3AdaptableButton;
width?: number;
};
/**
* Handles the IntentResolution for this specific raise intent configuration
*/
handleIntentResolution?: (context: HandleFdc3IntentResolutionContext) => Promise<void>;
}
/**
* Config used when broadcasting FDC3 Context
*/
export interface BroadcastConfig {
/**
* Columns to display a 'Broadcast' Context Menu item
*/
contextMenu?: {
/**
* Columns to display a 'Broadcast' Context Menu item
*/
columnIds: string[];
/**
* Menu Item's Icon; can be an AdaptableIcon or function that provides `AdaptableIcon` object
*/
icon?: '_defaultFdc3' | AdaptableIcon;
};
/**
* Definition of Action Button (to be put in default FDC3 Action Column)
*/
actionButton?: Fdc3AdaptableButton;
/**
* Custom FDC3 Action Column definition to broadcast the Context
*/
actionColumn?: FDC3ActionColumn;
}
/**
* Action Column used for FDC3 workflows
*/
export interface FDC3ActionColumn {
/**
* Id of the Column
*/
columnId: string;
/**
* Column's friendly name
*/
friendlyName?: string;
/**
* FDC3 Button to display
*/
button: Fdc3AdaptableButton;
/**
* Default Width of column
*/
defaultWidth?: number;
}
/**
* Context provided in `handleIntentResolution` callback
*/
export interface HandleFdc3IntentResolutionContext extends BaseContext {
/**
* The FDC3 Intent Resolution
*/
intentResolution: IntentResolution;
}
/**
* Context provided in dynamic FDC3 Buttons
*/
export interface Fdc3ButtonContext extends BaseContext {
/**
* The FDC3 Context
*/
context: Context;
/**
* The FDC3 Intent
*/
intent?: Intent;
/**
* The row node which is the source of the context data
*/
rowNode: IRowNode;
/**
* The row data which is the source of the context data
*/
rowData: any;
/**
* Primary key value of row
*/
primaryKeyValue: any;
}
/**
* Button used in FDC3 Action Columns
*/
export interface Fdc3AdaptableButton {
/**
* Unique id for the button
*/
id: string;
/**
* Button's Icon; can be object or function that provides `AdaptableIcon` object
*/
icon?: '_defaultFdc3' | AdaptableIcon | ((button: Fdc3AdaptableButton, context: Fdc3ButtonContext) => AdaptableIcon);
/**
* Button's Label; can be string or function that provides string
*/
label?: '_defaultFdc3' | string | ((button: Fdc3AdaptableButton, context: Fdc3ButtonContext) => string);
/**
* Button's Tooltip; can be string or function that provides string
*/
tooltip?: '_defaultFdc3' | string | ((button: Fdc3AdaptableButton, context: Fdc3ButtonContext) => string);
/**
* Button's Style; can be object or function that provides `ButtonStyle` object
*/
buttonStyle?: ButtonStyle | ((button: Fdc3AdaptableButton, context: Fdc3ButtonContext) => ButtonStyle);
/**
* Function to disable / enable button based on evaluation result
*/
disabled?: (button: Fdc3AdaptableButton, context: Fdc3ButtonContext) => boolean;
/**
* Function to hide the Button
*/
hidden?: (button: Fdc3AdaptableButton, context: Fdc3ButtonContext) => boolean;
}
/**
* TypeScript magic to convert all non-string property types to string (but keep the object structures), incl. nested objects.
*/
type PropertiesToGridRefs<Type> = Type extends object ? ReplaceTypes<Type> : Type extends string ? GridDataRef : Type extends Date ? GridDataRef : Type;
type ReplaceTypes<ObjType extends object> = {
[KeyType in keyof ObjType]: PropertiesToGridRefs<ObjType[KeyType]>;
};
export {};