Writing a Widget Controller
For example, the GeneTableComponent exposes a specific controller interface: GeneTableController.
/** * This component provides a configurable paginate table component wrapping an ag-grid. * * ... * * The widget is compatible with Views and Dashboard and compatible with custom GeneWidgetController mechanism * using GeneTableController interface. */ export class GeneTableComponent<T extends GeneEntity> extends GeneBaseDataWidgetComponent<GeneTableWidgetConfiguration, T[], GeneTableController<T>>
/**
* This interface describes a GeneTable controller that allows to override parts of the
* Platform Table behavior.
*
* @param T GeneEntity type being loaded by the GeneTable instance.
*/
export class GeneTableController<T extends GeneEntity> extends DefaultWidgetController<GeneTableComponent<T>> {
/**
* This method allows to override a single ColDef used by the current the Platform Table configuration,
* to configure, for example, some custom renderers, editors.
*
* This method is being called each time the gene-table configuration is refreshed.
*
* @param column ag-grid column definition, the instance that is being bound to ag-grid
* @param field optional associated field of the entity
* @param editionMode current table edition mode
*/
customizeColumn?: (column: ColDef, field?: GeneField) => void;
/**
* This method allows to define additional columns.
*
* This method is being called every time the Platform Table configuration changes and columns
* get recomputed.
*
* Adding additional ColDef with ValueGetter is a solution to implement computed columns.
*
* Note that additional columns are not editable.
*
* @param editionMode current table edition mode.
* @return additional ColDef columns to be displayed.
*/
additionalColumns?: (editionMode: GeneEditionMode) => ColDef[];
/**
* This method allows to override any of the available ag-grid settings of the GridOptions generated by the Gene-Table component.
*
* Note that some settings may conflict with the GeneTable component internal implementation.
*
* @see www.ag-grid.com/javascript-grid-reference-overview/
* @param options GridOptions instance bound to the internal ag-grid component.
*/
customizeGridOption?: (options: GridOptions) => void;
/**
* This method allows to override default Data Grid column order in all modes.
*
* This method is being called each time the Data Grid configuration is refreshed or edition mode changes.
*
* @param columns the sorted columns to display.
* @param editionMode the current Gene-Table edition mode.
* @return the modified sorted columns to display
*/
processColumns?: (columns: ColDef[], editionMode: GeneEditionMode) => ColDef[];
/**
* This method allows to override the data loading process.
*
* @param configuration current GeneTable configuration
* @param currentContext the context to be used to load the data, which is by default the current application context (current selected scenarios and filters).
* @param pageNumber page to request, starting from 0
* @param pageSize max number of elements to fetch in the page
* @param agGridSort current ag-grid user defined sorts
*
* @return data page
*/
loadData?: (configuration: GeneTableWidgetConfiguration, currentContext: GeneContext, pageNumber: number, pageSize: number, agGridSort: AgGridSort, agGridFilters: AgGridFilterModel) => Observable<Page<T>>;
/**
* This method allows to perform some processing to the data before they are being displayed in the Data Grid.
* For example, you can enrich T type with additional information. This is a way to implement processed fields.
*
* This method is being called by GeneTable when the data are being loaded.
*
* @param data the data to display in the Data Grid.
* @return the processed data.
*/
processData?: (data: T[]) => Observable<T[]>;
}
This custom controller interface let us, override parts of the features, and in the following example we will provide two things:
-
Use custom colors for rows coloring
-
An extra button to refresh the data
/**
* A Sample Table Controller to customize rows color and provide a refresh button
*/
export class SampleCustomColorsController extends GeneTableController<GeneEntity> {
constructor(private widget: GeneTableComponent<GeneEntity>) {
super(widget);
}
// Customize rows coloring
// See www.ag-grid.com/javascript-grid-row-styles/ for more details
customizeGridOption = (options: GridOptions) => {
options.getRowStyle = (params) => {
if (params.node.rowIndex % 2 === 0) {
return { background: '#FF8888' };
} else {
return { background: '#d1f1da' };
}
};
}
// Customize the toolbar buttons
customizeToolbarElements = (toolbarElements: GeneToolbarElement[]) => {
return of(toolbarButtons.concat([
{
id: 'refresh',
type: 'button',
icon: 'refresh',
label: 'Refresh',
title: 'Refresh Data',
clickHandler: (button, $event) => this.widget.requestLoadData(),
}]));
}
}