@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
280 lines (279 loc) • 8.32 kB
TypeScript
import { BaseState } from './BaseState';
import { AdaptableObject } from './Common/AdaptableObject';
import { ColumnSort } from './Common/ColumnSort';
import { ColumnFilter, GridFilter } from '../types';
import { TableAggregationColumns, PivotAggregationColumns } from './Common/AggregationColumns';
import { RowSummary } from './Common/RowSummary';
import { NonEmptyArray } from '../Utilities/Extensions/ArrayExtensions';
import { XOR } from '../Utilities/Extensions/TypeExtensions';
/**
* Base Layout Type - Pivot or Table
*/
export type Layout = TableLayout | PivotLayout;
/**
* Array of Layouts - must contain at least one item
*/
export type LayoutArray = NonEmptyArray<Layout>;
/**
* Adaptable State Section for Layout Module, containing collection of Layouts and name of Current Layout
*/
export interface LayoutState extends BaseState {
/**
* Layout to be loaded when AdapTable starts (using `Name` property in Layout); if not provided the first Layout is used
*/
CurrentLayout?: string;
/**
* Collection of Layouts - can be Table or Pivot
*/
Layouts: LayoutArray;
}
/**
* Base object for both Table and Pivot Layouts
*/
export interface LayoutBase extends AdaptableObject {
/**
* Name of Layout as will appear in Layout toolbar and tool panel
*/
Name: string;
/**
* Set of widths for some (or all) Columns
*/
ColumnWidths?: ColumnNumberMap;
/**
* Defines which Row Groups are expanded / collapsed
*/
RowGroupValues?: RowGroupValues;
/**
* Defines which Column Groups are expanded / collapsed
*/
ColumnGroupValues?: ColumnGroupValues;
/**
* Set of custom header names for some (or all) Columns
*/
ColumnHeaders?: ColumnStringMap;
/**
* Hides the aggFunc in Column header: e.g. 'sum(Price)' becomes 'Price'
*/
SuppressAggFuncInHeader?: boolean;
/**
* Sorting to apply in the Layout
*/
ColumnSorts?: ColumnSort[];
/**
* Collection of Column Filters to apply in Layout
*/
ColumnFilters?: ColumnFilter[];
/**
* Grid Filter to apply in Layout
*/
GridFilter?: GridFilter;
/**
* Details of which Columns are pinned
*/
ColumnPinning?: ColumnDirectionMap;
/**
* Whether Columns should autosize when Layout first loads
*/
AutoSizeColumns?: boolean;
/**
* Position of the Grand Total Row in the Layout
*/
GrandTotalRow?: 'top' | 'bottom' | 'pinnedTop' | 'pinnedBottom' | boolean;
}
/**
* Defines a Table-based Layout
*/
export interface TableLayout extends LayoutBase {
/**
* Names of Columns to include in the Table Layout
*/
TableColumns: string[];
/**
* Map of Table Column Visibility
*/
ColumnVisibility?: ColumnBooleanFalseMap;
/**
* Row Summaries - Pinned Rows that display Aggregation Info for a whole column
*/
RowSummaries?: RowSummary[];
/**
* Columns showing aggregated values in Grouped Rows; a record of ColumnId and aggfunc (e.g. sum) or 'true' (to use default aggfunc)
*/
TableAggregationColumns?: TableAggregationColumns;
/**
* Columns which are row-grouped when the Layout is applied
*/
RowGroupedColumns?: string[];
/**
* Display Row Grouped Columns as 'single' or 'multi' column
*/
RowGroupDisplayType?: 'single' | 'multi';
/**
* Pivot Columns - must NOT be provided
*/
PivotColumns?: never;
/**
* Pivot Group Columns - must NOT be provided
*/
PivotGroupedColumns?: never;
/**
* Pivot Expansions - must NOT be provided
*/
PivotExpandLevel?: never;
/**
* Pivot Aggregation Columns - must NOT be provided
*/
PivotAggregationColumns?: never;
}
/**
* Defines a Pivot-based Layout
*/
export interface PivotLayout extends LayoutBase {
/**
* Mandatory list of Columns to pivot (provide empty array if just displaying Aggregations)
*/
PivotColumns: string[];
/**
* How deep to expand Pivot Columns (0 for none, 1 for 1st level only etc, -1 to expand all)
*/
PivotExpandLevel?: number;
/**
* Columns showing aggregated values in Group Rows; 1st value in record is Column name, 2nd is either aggfunc (e.g. sum, avg etc.) or 'true' (to use default aggfunc)
*/
PivotAggregationColumns?: PivotAggregationColumns;
/**
* Columns which are row-grouped when the Layout is applied
*/
PivotGroupedColumns?: string[];
/**
* Table Columns - must NOT be provided
*/
TableColumns?: never;
/**
* Table Aggregation Columns - must NOT be provided
*/
TableAggregationColumns?: never;
/**
* Row Grouped Columns Columns - must NOT be provided
*/
RowGroupedColumns?: never;
/**
* Display automatically calculated Totals of all Pivot Columns, in the position specified
*/
PivotGrandTotal?: PivotTotalPosition;
/**
* Display automatically calculated Totals within EACH Pivot Column Group, in the position specified
*/
PivotColumnTotal?: PivotTotalPosition;
}
/**
* Defines the position of Pivot Total position - 'before' or 'after' the Value Column(s)
*/
export type PivotTotalPosition = 'before' | 'after' | boolean;
/**
* Manages Row Group expand / collapse behaviour, including exceptions
*/
export type RowGroupValues = {
RowGroupDefaultBehavior: 'always-expanded' | 'always-collapsed';
} | RowGroupValuesWithExceptionKeys;
/**
* Defines which Row Groups are expanded or collapsed
*/
export type RowGroupValuesWithExceptionKeys = {
/**
* Default behaviour for Row Groups: 'expanded' or 'collapsed';
*/
RowGroupDefaultBehavior: 'expanded' | 'collapsed';
} & XOR<{
/**
* @deprecated - use GroupKeys instead which enables listing exceptions on a per Column basis
*/
ExceptionGroupKeys?: any[][];
}, {
/**
* Configures Row Group Expand / Collapse behaviour together with per Column Exceptions
*/
GroupKeys?: GroupKeys[];
}>;
/**
* Enables setting Row Group behaviour with exceptions
*/
export interface GroupKeys {
/**
* Columns that are Row Grouped
*/
RowGroupedColumns: string[];
/**
* Exceptions to default behaviour, provided as array or arrays
*/
ExceptionGroupKeys?: any[][];
}
/**
* Manages Column Group expand / collapse behaviour, including exceptions
*/
export type ColumnGroupValues = {
ColumnGroupDefaultBehavior: 'always-expanded' | 'always-collapsed';
} | ColumnGroupValuesWithExceptionKeys;
/**
* Defines which Column Groups are expanded or collapsed
*/
export type ColumnGroupValuesWithExceptionKeys = {
/**
* Default behaviour for Column Groups: 'expanded' or 'collapsed';
*/
ColumnGroupDefaultBehavior: 'expanded' | 'collapsed';
/**
* Keys of Column Groups which are exceptions to default ColumnGroupDefaultBehavior; key maps to groupId property in ColGroupDef
*/
ExceptionGroupKeys?: any[];
};
/**
* Defines a map of Columns with a String value
*/
export type ColumnStringMap = {
[columnId: string]: string;
};
/**
* Defines a map of Columns with a Number value
*/
export type ColumnNumberMap = {
[columnId: string]: number;
};
/**
* Defines a map of Columns with a Boolean value
*/
export type ColumnBooleanFalseMap = {
[columnId: string]: false;
};
/**
* Defines a map of Columns with a Left / Right direction value
*/
export type ColumnDirectionMap = {
[columnId: string]: 'left' | 'right';
};
/**
* The OLD Layout - kept temporarily so we can check what we previously had
*/
export interface LayoutOld extends AdaptableObject {
Name: string;
Columns: string[];
ColumnWidthMap?: {
[columnId: string]: number;
};
ColumnSorts?: ColumnSort[];
ColumnFilters?: ColumnFilter[];
GridFilter?: GridFilter;
RowGroupedColumns?: string[];
ExpandedRowGroupValues?: any[];
AggregationColumns?: Record<string, string | true | any>;
EnablePivot?: boolean;
PivotColumns?: string[];
PinnedColumnsMap?: {
[columnId: string]: 'left' | 'right';
};
ColumnHeadersMap?: {
[columnId: string]: string;
};
SuppressAggFuncInHeader?: boolean;
RowSummaries?: RowSummary[];
}