@syncfusion/ej2-grids
Version:
Feature-rich JavaScript datagrid (datatable) control with built-in support for editing, filtering, grouping, paging, sorting, and exporting to Excel.
1,412 lines (1,240 loc) • 65.7 kB
TypeScript
import { isNullOrUndefined, setValue, getValue, defaultCurrencyCode, updateCSSText } from '@syncfusion/ej2-base';import { Component, ModuleDeclaration, ChildProperty, Browser, closest, extend, TouchEventArgs } from '@syncfusion/ej2-base';import { addClass, removeClass, append, remove, classList, setStyleAttribute } from '@syncfusion/ej2-base';import { Property, Collection, Complex, Event, NotifyPropertyChanges, INotifyPropertyChanged, L10n } from '@syncfusion/ej2-base';import { EventHandler, KeyboardEvents, KeyboardEventArgs as KeyArg, EmitType } from '@syncfusion/ej2-base';import { Query, DataManager, DataUtil, DataOptions, UrlAdaptor } from '@syncfusion/ej2-data';import { ItemModel, ClickEventArgs } from '@syncfusion/ej2-navigations';import { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';import { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, isGroupAdaptive, refreshForeignData, getScrollBarWidth } from './util';import { getRowHeight, setColumnIndex, Global, ispercentageWidth, getNumberFormat, getTransformValues } from './util';import { setRowElements, resetRowIndex, compareChanges, getCellByColAndRowIndex, performComplexDataOperation } from './util';import * as events from '../base/constant';import { ReturnType, BatchChanges } from '../base/type';import { IDialogUI, ScrollPositionType, ActionArgs, ExportGroupCaptionEventArgs, FilterUI, LazyLoadArgs, LoadEventArgs, ContextMenuClickEventArgs, NotifyArgs, ExportHeaders, DetailTemplateDetachArgs } from './interface';import {AggregateQueryCellInfoEventArgs, IGrid } from './interface';import { IRenderer, IValueFormatter, IFilterOperator, IIndex, RowDataBoundEventArgs, QueryCellInfoEventArgs } from './interface';import { CellDeselectEventArgs, CellSelectEventArgs, CellSelectingEventArgs, ParentDetails, ContextMenuItemModel } from './interface';import { PdfQueryCellInfoEventArgs, ExcelQueryCellInfoEventArgs, ExcelExportProperties, PdfExportProperties } from './interface';import { PdfHeaderQueryCellInfoEventArgs, ExcelHeaderQueryCellInfoEventArgs, ExportDetailDataBoundEventArgs, ExportDetailTemplateEventArgs } from './interface';import { ColumnMenuOpenEventArgs, BatchCancelArgs, RecordDoubleClickEventArgs, DataResult, PendingState } from './interface';import { HeaderCellInfoEventArgs, KeyboardEventArgs, RecordClickEventArgs, AdaptiveDialogEventArgs } from './interface';import { FailureEventArgs, FilterEventArgs, ColumnDragEventArgs, GroupEventArgs, PrintEventArgs, ICustomOptr, ReorderEventArgs } from './interface';import { RowDeselectEventArgs, RowSelectEventArgs, RowSelectingEventArgs, RowDeselectingEventArgs, PageEventArgs, RowDragEventArgs } from './interface';import { BeforeBatchAddArgs, BeforeBatchDeleteArgs, BeforeBatchSaveArgs, ResizeArgs, ColumnMenuItemModel } from './interface';import { BatchAddArgs, BatchDeleteArgs, BeginEditArgs, CellEditArgs, CellSaveArgs, BeforeDataBoundArgs, RowInfo } from './interface';import { DetailDataBoundEventArgs, ColumnChooserEventArgs, AddEventArgs, SaveEventArgs, EditEventArgs, DeleteEventArgs } from './interface';import { ExcelExportCompleteArgs, PdfExportCompleteArgs, DataStateChangeEventArgs, DataSourceChangedEventArgs } from './interface';import { SearchEventArgs, SortEventArgs, ISelectedCell, EJ2Intance, BeforeCopyEventArgs, ColumnDataStateChangeEventArgs} from './interface';import {BeforePasteEventArgs, CheckBoxChangeEventArgs, CommandClickEventArgs, BeforeAutoFillEventArgs } from './interface';import { Render } from '../renderer/render';import { Column, ColumnModel, ActionEventArgs } from '../models/column';import { SelectionType, GridLine, RenderType, SortDirection, SelectionMode, PrintMode, FilterType, FilterBarMode } from './enum';import { CheckboxSelectionType, HierarchyGridPrintMode, NewRowPosition, ClipMode, freezeMode, IndicatorType } from './enum';import { WrapMode, ToolbarItems, ContextMenuItem, ColumnMenuItem, ToolbarItem, CellSelectionMode, EditMode, ResizeMode } from './enum';import { ColumnQueryModeType, RowRenderingDirection, AdaptiveMode } from './enum';import { Data } from '../actions/data';import { Cell } from '../models/cell';import { RowRenderer } from '../renderer/row-renderer';import { CellRenderer } from '../renderer/cell-renderer';import { CellRendererFactory } from '../services/cell-render-factory';import { ServiceLocator } from '../services/service-locator';import { ValueFormatter } from '../services/value-formatter';import { RendererFactory } from '../services/renderer-factory';import { ColumnWidthService } from '../services/width-controller';import { AriaService } from '../services/aria-service';import { FocusStrategy } from '../services/focus-strategy';import { PageSettingsModel, AggregateRowModel, AggregateColumnModel, ColumnChooserSettingsModel } from '../models/models';import { PageSettings } from '../models/page-settings';import { ColumnChooserSettings } from '../models/column-chooser-settings';import { Sort } from '../actions/sort';import { Page } from '../actions/page';import { Selection } from '../actions/selection';import { Filter } from '../actions/filter';import { Search } from '../actions/search';import { Resize } from '../actions/resize';import { Reorder } from '../actions/reorder';import { RowDD } from '../actions/row-reorder';import { ShowHide } from '../actions/show-hide';import { Scroll } from '../actions/scroll';import { InfiniteScroll } from '../actions/infinite-scroll';import { Group } from '../actions/group';import { Print } from '../actions/print';import { DetailRow } from '../actions/detail-row';import { Toolbar } from '../actions/toolbar';import { AggregateRow } from '../models/aggregate';import { Edit } from '../actions/edit';import { Row } from '../models/row';import { ColumnChooser } from '../actions/column-chooser';import { ExcelExport } from '../actions/excel-export';import { PdfExport } from '../actions/pdf-export';import { Clipboard } from '../actions/clipboard';import { ContextMenu } from '../actions/context-menu';import { BeforeOpenCloseMenuEventArgs, MenuEventArgs } from '@syncfusion/ej2-navigations';import { ColumnMenu } from '../actions/column-menu';import { CheckState } from './enum';import { Aggregate } from '../actions/aggregate';import { ILogger, Logger } from '../actions/logger';import { IModelGenerator } from '../base/interface';import { RowModelGenerator } from '../services/row-model-generator';import { ColumnDeselectEventArgs, ColumnSelectEventArgs, ColumnSelectingEventArgs } from './interface';import { DateFormatOptions, NumberFormatOptions, SanitizeHtmlHelper } from '@syncfusion/ej2-base';import * as literals from '../base/string-literals';import { Workbook } from '@syncfusion/ej2-excel-export';import { HeaderCellRenderer } from '../renderer/header-cell-renderer';import { VirtualContentRenderer } from '../renderer/virtual-content-renderer';
import {ComponentModel} from '@syncfusion/ej2-base';
/**
* Interface for a class SortDescriptor
*/
export interface SortDescriptorModel {
/**
* Defines the field name of sort column.
*
* @default ''
*/
field?: string;
/**
* Defines the direction of sort column.
*
* @default ''
*/
direction?: SortDirection;
/**
* @hidden
* Defines the sorted column whether or from grouping operation.
*
* @default false
*/
isFromGroup?: boolean;
}
/**
* Interface for a class SortSettings
*/
export interface SortSettingsModel {
/**
* Specifies the columns to sort at initial rendering of Grid.
* Also user can get current sorted columns.
*
* @default []
*/
columns?: SortDescriptorModel[];
/**
* If `allowUnsort` set to false the user can not get the grid in unsorted state by clicking the sorted column header.
*
* @default true
*/
allowUnsort?: boolean;
}
/**
* Interface for a class Predicate
*/
export interface PredicateModel {
/**
* Defines the field name of the filter column.
*
* @default ''
*/
field?: string;
/**
* Defines the operator to filter records. The available operators and its supported data types are:
* <table>
* <tr>
* <td colspan=1 rowspan=1>
* Operator<br/></td><td colspan=1 rowspan=1>
* Description<br/></td><td colspan=1 rowspan=1>
* Supported Types<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* startswith<br/></td><td colspan=1 rowspan=1>
* Checks whether the value begins with the specified value.<br/></td><td colspan=1 rowspan=1>
* String<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* endswith<br/></td><td colspan=1 rowspan=1>
* Checks whether the value ends with the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* <br/>String<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* contains<br/></td><td colspan=1 rowspan=1>
* Checks whether the value contains the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* <br/>String<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* equal<br/></td><td colspan=1 rowspan=1>
* Checks whether the value is equal to the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* <br/>String | Number | Boolean | Date<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* notequal<br/></td><td colspan=1 rowspan=1>
* Checks for values that are not equal to the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* <br/>String | Number | Boolean | Date<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* greaterthan<br/></td><td colspan=1 rowspan=1>
* Checks whether the value is greater than the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* Number | Date<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* greaterthanorequal<br/></td><td colspan=1 rowspan=1>
* Checks whether the value is greater than or equal to the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* <br/>Number | Date<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* lessthan<br/></td><td colspan=1 rowspan=1>
* Checks whether the value is less than the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* <br/>Number | Date<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* lessthanorequal<br/></td><td colspan=1 rowspan=1>
* Checks whether the value is less than or equal to the specified value.<br/><br/></td><td colspan=1 rowspan=1>
* <br/>Number | Date<br/></td></tr>
* </table>
*
* @default null
*/
operator?: string;
/**
* Defines the value used to filter records.
*
* @default ''
*/
value?: string | number | Date | boolean | (string | number | Date | boolean)[];
/**
* If match case set to true, then filter records with exact match or else
* filter records with case insensitive(uppercase and lowercase letters treated as same).
*
* @default null
*/
matchCase?: boolean;
/**
* If ignoreAccent is set to true, then filter ignores the diacritic characters or accents while filtering.
*
* @default false
*/
ignoreAccent?: boolean;
/**
* Defines the relationship between one filter query and another by using AND or OR predicate.
*
* @default null
*/
predicate?: string;
/**
* @hidden
* Defines the actual filter value for the filter column.
*/
actualFilterValue?: Object;
/**
* @hidden
* Defines the actual filter operator for the filter column.
*/
actualOperator?: Object;
/**
* @hidden
* Defines the type of the filter column.
*/
type?: string;
/**
* @hidden
* Defines the predicate of filter column.
*/
ejpredicate?: Object;
/**
* Defines the UID of filter column.
*
* @default ''
*/
uid?: string;
/**
* @hidden
* Defines the foreignKey availability in filtered columns.
*/
isForeignKey?: boolean;
/**
* Defines the condition to add the new predicates on existing predicate with "and"/"or" operator.
*
* @default ''
*/
condition?: string;
}
/**
* Interface for a class InfiniteScrollSettings
*/
export interface InfiniteScrollSettingsModel {
/**
* If `enableCache` is set to true, the Grid will cache the loaded data to be reused next time it is needed.
*
* @default false
*/
enableCache?: boolean;
/**
* Defines the number of blocks to be maintained in Grid while settings enableCache as true.
*
* @default 3
*/
maxBlocks?: number;
/**
* Defines the number of blocks that will render at the initial Grid rendering.
*
* @default 3
*/
initialBlocks?: number;
}
/**
* Interface for a class FilterSettings
*/
export interface FilterSettingsModel {
/**
* Specifies the columns to be filtered at initial rendering of the Grid. You can also get the columns that were currently filtered.
*
* @default []
*/
columns?: PredicateModel[];
/**
* Defines options for filtering type. The available options are
* * `Menu` - Specifies the filter type as menu.
* * `CheckBox` - Specifies the filter type as checkbox.
* * `FilterBar` - Specifies the filter type as filterbar.
* * `Excel` - Specifies the filter type as checkbox.
*
* @default FilterBar
*/
type?: FilterType;
/**
* Defines the filter bar modes. The available options are,
* * `OnEnter`: Initiates filter operation after Enter key is pressed.
* * `Immediate`: Initiates filter operation after a certain time interval. By default, time interval is 1500 ms.
*
* @default OnEnter
*/
mode?: FilterBarMode;
/**
* Shows or hides the filtered status message on the pager.
*
* @default true
*/
showFilterBarStatus?: boolean;
/**
* Defines the time delay (in milliseconds) in filtering records when the `Immediate` mode of filter bar is set.
*
* @default 1500
*/
immediateModeDelay?: number;
/**
* The `operators` is used to override the default operators in filter menu. This should be defined by type wise
* (string, number, date and boolean). Based on the column type, this customize operator list will render in filter menu.
*
* > Check the [`Filter Menu Operator`](../../grid/filtering/filter-menu#customizing-filter-menu-operators-list) customization.
*
* @default null
*/
operators?: ICustomOptr;
/**
* If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.
*
* > Check the [`Diacritics`](../../grid/filtering/#diacritics/) filtering.
*
* @default false
*/
ignoreAccent?: boolean;
/**
* If `enableInfiniteScrolling` set to true, then the data will be loaded in Checkbox filter `Popup` content, when the scrollbar reaches the end.
* This helps to load large dataset in Checkbox filter `Popup` content.
* {% codeBlock src='grid/enableInfiniteScrolling/index.md' %}{% endcodeBlock %}
*
* @default false
*/
enableInfiniteScrolling?: boolean;
/**
* If `enableInfiniteScrolling` set to true, For on demand request, Gets data from the parent data source based on given number of records count.
*
* @default 100
*/
itemsCount?: number;
/**
* Defines the loading indicator. The available loading indicator are:
* * Spinner
* * Shimmer
*
* @default Shimmer
*/
loadingIndicator?: IndicatorType;
/**
* If `enableCaseSensitivity` is set to true then searches grid records with exact match based on the filter
* operator. It will have no effect on number, boolean and Date fields.
*
* @default false
*/
enableCaseSensitivity?: boolean;
/**
* If 'showFilterBarOperator' is set to true, then it renders the dropdownlist component to select the operator
* in filterbar input
*
* @default false
*/
showFilterBarOperator?: boolean;
}
/**
* Interface for a class SelectionSettings
*/
export interface SelectionSettingsModel {
/**
* Grid supports row, cell, and both (row and cell) selection mode.
*
* @default Row
*/
mode?: SelectionMode;
/**
* The cell selection modes are flow and box. It requires the selection
* [`mode`](./selectionmode/) to be either cell or both.
* * `Flow`: Selects the range of cells between start index and end index that also includes the other cells of the selected rows.
* * `Box`: Selects the range of cells within the start and end column indexes that includes in between cells of rows within the range.
* * `BoxWithBorder`: Selects the range of cells as like Box mode with borders.
*
* @default Flow
*/
cellSelectionMode?: CellSelectionMode;
/**
* Defines options for selection type. They are
* * `Single`: Allows selection of only a row or a cell.
* * `Multiple`: Allows selection of multiple rows or cells.
*
* @default Single
*/
type?: SelectionType;
/**
* If 'checkboxOnly' set to true, then the Grid selection is allowed only through checkbox.
*
* > To enable checkboxOnly selection, should specify the column type as`checkbox`.
*
* @default false
*/
checkboxOnly?: boolean;
/**
* If 'persistSelection' set to true, then the Grid selection is persisted on all operations.
* For persisting selection in the Grid, any one of the column should be enabled as a primary key.
*
* @default false
*/
persistSelection?: boolean;
/**
* Defines options for checkbox selection Mode. They are
* * `Default`: This is the default value of the checkboxMode. In this mode, user can select multiple rows by clicking rows one by one.
* * `ResetOnRowClick`: In ResetOnRowClick mode, on clicking a row it will reset previously selected row and also multiple
* rows can be selected by using CTRL or SHIFT key.
*
* @default Default
*/
checkboxMode?: CheckboxSelectionType;
/**
* If 'enableSimpleMultiRowSelection' set to true, then the user can able to perform multiple row selection with single clicks.
*
* @default false
*/
enableSimpleMultiRowSelection?: boolean;
/**
* If 'enableToggle' set to true, then the user can able to perform toggle for the selected row.
*
* @default true
*/
enableToggle?: boolean;
/**
* If 'allowColumnSelection' set to true, then the user can able to select the columns.
*
* @default false
*/
allowColumnSelection?: boolean;
}
/**
* Interface for a class SearchSettings
*/
export interface SearchSettingsModel {
/**
* Specifies the collection of fields included in search operation. By default, bounded columns of the Grid are included.
*
* @default []
*/
fields?: string[];
/**
* Specifies the key value to search Grid records at initial rendering.
* You can also get the current search key.
*
* @default ''
*/
key?: string;
/**
* Defines the operator to search records. The available operators are:
* <table>
* <tr>
* <td colspan=1 rowspan=1>
* Operator<br/></td><td colspan=1 rowspan=1>
* Description<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* startswith<br/></td><td colspan=1 rowspan=1>
* Checks whether the string begins with the specified string.<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* endswith<br/></td><td colspan=1 rowspan=1>
* Checks whether the string ends with the specified string.<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* contains<br/></td><td colspan=1 rowspan=1>
* Checks whether the string contains the specified string. <br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* equal<br/></td><td colspan=1 rowspan=1>
* Checks whether the string is equal to the specified string.<br/></td></tr>
* <tr>
* <td colspan=1 rowspan=1>
* notequal<br/></td><td colspan=1 rowspan=1>
* Checks for strings not equal to the specified string. <br/></td></tr>
* </table>
*
* @default 'contains'
*/
operator?: string;
/**
* If `ignoreCase` is set to false, searches records that match exactly, else
* searches records that are case insensitive(uppercase and lowercase letters treated the same).
*
* @default true
*/
ignoreCase?: boolean;
/**
* If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.
*
* > Check the [`Diacritics`](../../grid/filtering/#diacritics/) filtering.
*
* @default false
*/
ignoreAccent?: boolean;
}
/**
* Interface for a class RowDropSettings
*/
export interface RowDropSettingsModel {
/**
* Defines the ID of droppable component on which row drop should occur.
*
* @default null
*/
targetID?: string;
}
/**
* Interface for a class TextWrapSettings
*/
export interface TextWrapSettingsModel {
/**
* The `wrapMode` property defines how the text in the grid cells should be wrapped. The available modes are:
* * `Both`: Wraps text in both the header and content cells.
* * `Content`: Wraps text in the content cells only.
* * `Header`: Wraps texts in the header cells only.
*
* @default Both
*/
wrapMode?: WrapMode;
}
/**
* Interface for a class ResizeSettings
*/
export interface ResizeSettingsModel {
/**
* Defines the mode of Grid column resizing. The available modes are:
* `Normal`: Columns will not be adjusted to fit the remaining space.
* `Auto`: Resized column width will be adjusted by other columns automatically.
*
* @default Normal
*/
mode?: ResizeMode;
}
/**
* Interface for a class GroupSettings
*/
export interface GroupSettingsModel {
/**
* If `showDropArea` is set to true, the group drop area element will be visible at the top of the Grid.
*
* @default true
*/
showDropArea?: boolean;
/**
* If `allowReordering` is set to true, Grid allows the grouped elements to be reordered.
*
* @default false
*/
allowReordering?: boolean;
/**
* If `showToggleButton` set to true, then the toggle button will be showed in the column headers which can be used to group
* or ungroup columns by clicking them.
*
* @default false
*/
showToggleButton?: boolean;
/**
* If `showGroupedColumn` is set to false, it hides the grouped column after grouping.
*
* @default false
*/
showGroupedColumn?: boolean;
/**
* If `showUngroupButton` set to false, then ungroup button is hidden in dropped element.
* It can be used to ungroup the grouped column when click on ungroup button.
*
* @default true
*/
showUngroupButton?: boolean;
/**
* If `disablePageWiseAggregates` set to true, then the group aggregate value will
* be calculated from the whole data instead of paged data and two requests will be made for each page
* when Grid bound with remote service.
*
* @default false
*/
disablePageWiseAggregates?: boolean;
/**
* Specifies the column names to group at initial rendering of the Grid.
* You can also get the currently grouped columns.
*
* @default []
*/
columns?: string[];
/**
* The Caption Template allows user to display the string or HTML element in group caption.
* > It accepts either the
* [template string](https://ej2.syncfusion.com/documentation/common/template-engine/) or the HTML element ID.
*
* @default null
* @aspType string
*/
captionTemplate?: string | Object | Function;
/**
* The Lazy load grouping, allows the Grid to render only the initial level caption rows in collapsed state while grouping.
* The child rows of each caption will render only when we expand the captions.
*
* @default false
*/
enableLazyLoading?: boolean;
}
/**
* Interface for a class EditSettings
*/
export interface EditSettingsModel {
/**
* If `allowAdding` is set to true, new records can be added to the Grid.
*
* @default false
*/
allowAdding?: boolean;
/**
* If `allowEditing` is set to true, values can be updated in the existing record.
*
* @default false
*/
allowEditing?: boolean;
/**
* If `allowDeleting` is set to true, existing record can be deleted from the Grid.
*
* @default false
*/
allowDeleting?: boolean;
/**
* Defines the mode to edit. The available editing modes are:
* * Normal
* * Dialog
* * Batch
*
* @default Normal
*/
mode?: EditMode;
/**
* If `allowEditOnDblClick` is set to false, Grid will not allow editing of a record on double click.
*
* @default true
*/
allowEditOnDblClick?: boolean;
/**
* if `showConfirmDialog` is set to false, confirm dialog does not show when batch changes are saved or discarded.
*
* @default true
*/
showConfirmDialog?: boolean;
/**
* If `showDeleteConfirmDialog` is set to true, confirm dialog will show delete action. You can also cancel delete command.
*
* @default false
*/
showDeleteConfirmDialog?: boolean;
/**
* Defines the custom edit elements for the dialog template.
*
* @default null
* @aspType string
*/
template?: string | Object | Function;
/**
* Defines the custom edit elements for the dialog header template.
*
* @default null
* @aspType string
*/
headerTemplate?: string | Object | Function;
/**
* Defines the custom edit elements for the dialog footer template.
*
* @default null
* @aspType string
*/
footerTemplate?: string | Object | Function;
/**
* Defines the position of adding a new row. The available position are:
* * Top
* * Bottom
*
* @default Top
*/
newRowPosition?: NewRowPosition;
/**
* Defines the dialog params to edit.
*
* @default {}
*/
dialog?: IDialogUI;
/**
* If allowNextRowEdit is set to true, editing is done to next row. By default allowNextRowEdit is set to false.
*
* @default false
*/
allowNextRowEdit?: boolean;
/**
* If `showAddNewRow` is set to true, it indicates whether to display the add new form by default in the grid.
*
* @default false
*/
showAddNewRow?: boolean;
}
/**
* Interface for a class LoadingIndicator
*/
export interface LoadingIndicatorModel {
/**
* Defines the loading indicator. The available loading indicator are:
* * Spinner
* * Shimmer
*
* @default Spinner
*/
indicatorType?: IndicatorType;
}
/**
* Interface for a class Grid
*/
export interface GridModel extends ComponentModel{
/**
* Gets the currently visible records of the Grid.
*
* @default []
*/
currentViewData?: Object[];
/**
* Gets the parent Grid details.
*
* @default {}
*/
parentDetails?: ParentDetails;
/**
* The `showHider` is used to manipulate column's show/hide operation in the Grid.
*
* @default ''
*/
showHider?: ShowHide;
/**
* Defines the schema of dataSource.
* If the `columns` declaration is empty or undefined then the `columns` are automatically generated from data source.
* {% codeBlock src='grid/columns/index.md' %}{% endcodeBlock %}
*
* @default []
*/
columns?: Column[] | string[] | ColumnModel[];
/**
* If `enableAltRow` is set to true, the grid will render with `e-altrow` CSS class to the alternative tr elements.
* > Check the [`AltRow`](../../grid/row/#styling-alternate-rows/) to customize the styles of alternative rows.
* {% codeBlock src='grid/enableAltRow/index.md' %}{% endcodeBlock %}
*
* @default true
*/
enableAltRow?: boolean;
/**
* If `enableHover` is set to true, the row hover is enabled in the Grid.
* {% codeBlock src='grid/enableHover/index.md' %}{% endcodeBlock %}
*
* @default true
*/
enableHover?: boolean;
/**
* If `enableAutoFill` is set to true, then the auto fill icon will displayed on cell selection for copy cells.
* It requires the selection `mode` to be Cell and `cellSelectionMode` to be `Box`.
* {% codeBlock src='grid/enableAutoFill/index.md' %}{% endcodeBlock %}
*
* @default false
*/
enableAutoFill?: boolean;
/**
* Enables or disables the key board interaction of Grid.
*
* @default true
*/
allowKeyboard?: boolean;
/**
* If 'enableStickyHeader' set to true, then the user can able to make the column headers visible when the document is scrolled.
*
* @default false
*/
enableStickyHeader?: boolean;
/**
* Specifies whether to display or remove the untrusted HTML values in the Grid component.
* If 'enableHtmlSanitizer' set to true, the component will sanitize any suspected untrusted strings and scripts before rendering them.
*
* @default false
*/
enableHtmlSanitizer?: boolean;
/**
* If `allowTextWrap` set to true,
* then text content will wrap to the next line when its text content exceeds the width of the Column Cells.
* {% codeBlock src='grid/allowTextWrap/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowTextWrap?: boolean;
/**
* Configures the text wrap in the Grid.
* {% codeBlock src='grid/textWrapSettings/index.md' %}{% endcodeBlock %}
*
* @default {wrapMode:"Both"}
*/
textWrapSettings?: TextWrapSettingsModel;
/**
* Defines the resizing behavior of the Grid.
*
* @default {mode:"Normal"}
*/
resizeSettings?: ResizeSettingsModel;
/**
* If `allowPaging` is set to true, the pager renders at the footer of the Grid. It is used to handle page navigation in the Grid.
*
* > Check the [`Paging`](../../grid/paging/) to configure the grid pager.
* {% codeBlock src='grid/allowPaging/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowPaging?: boolean;
/**
* Configures the pager in the Grid.
* {% codeBlock src='grid/pageSettings/index.md' %}{% endcodeBlock %}
*
* @default {currentPage: 1, pageSize: 12, pageCount: 8, enableQueryString: false, pageSizes: false, template: null}
*/
pageSettings?: PageSettingsModel;
/**
* Configures the Loading Indicator of the Grid.
*
* @default {indicatorType: 'Spinner'}
*/
loadingIndicator?: LoadingIndicatorModel;
/**
* Specifies the shimmer effect for Grid virtual and infinite scrolling.
*
* @default true
*/
enableVirtualMaskRow?: boolean;
/**
* If `enableVirtualization` set to true, then the Grid will render only the rows visible within the view-port
* and load subsequent rows on vertical scrolling. This helps to load large dataset in Grid.
* {% codeBlock src='grid/enableVirtualization/index.md' %}{% endcodeBlock %}
*
* @default false
*/
enableVirtualization?: boolean;
/**
* If `enableColumnVirtualization` set to true, then the Grid will render only the columns visible within the view-port
* and load subsequent columns on horizontal scrolling. This helps to load large dataset of columns in Grid.
* {% codeBlock src='grid/enableColumnVirtualization/index.md' %}{% endcodeBlock %}
*
* @default false
*/
enableColumnVirtualization?: boolean;
/**
* If `enableInfiniteScrolling` set to true, then the data will be loaded in Grid when the scrollbar reaches the end.
* This helps to load large dataset in Grid.
* {% codeBlock src='grid/enableInfiniteScrolling/index.md' %}{% endcodeBlock %}
*
* @default false
*/
enableInfiniteScrolling?: boolean;
/**
* Configures the search behavior in the Grid.
* {% codeBlock src='grid/searchSettings/index.md' %}{% endcodeBlock %}
*
* @default { ignoreCase: true, fields: [], operator: 'contains', key: '' }
*/
searchSettings?: SearchSettingsModel;
/**
* If `allowSorting` is set to true, it allows sorting of grid records when column header is clicked.
*
* > Check the [`Sorting`](../../grid/sorting/) to customize its default behavior.
* {% codeBlock src='grid/allowSorting/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowSorting?: boolean;
/**
* Defines the mode of clip. The available modes are,
* `Clip`: Truncates the cell content when it overflows its area.
* `Ellipsis`: Displays ellipsis when the cell content overflows its area.
* `EllipsisWithTooltip`: Displays ellipsis when the cell content overflows its area,
* also it will display the tooltip while hover on ellipsis is applied.
* {% codeBlock src='grid/clipMode/index.md' %}{% endcodeBlock %}
*
* @default Ellipsis
*/
clipMode?: ClipMode;
/**
* If `allowMultiSorting` set to true, then it will allow the user to sort multiple column in the grid.
* > `allowSorting` should be true.
* {% codeBlock src='grid/allowMultiSorting/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowMultiSorting?: boolean;
/**
* If `allowExcelExport` set to true, then it will allow the user to export grid to Excel file.
*
* > Check the [`ExcelExport`](../../grid/excel-exporting/) to configure exporting document.
* {% codeBlock src='grid/allowExcelExport/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowExcelExport?: boolean;
/**
* If `allowPdfExport` set to true, then it will allow the user to export grid to Pdf file.
*
* > Check the [`Pdfexport`](../../grid/pdf-export/) to configure the exporting document.
* {% codeBlock src='grid/allowPdfExport/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowPdfExport?: boolean;
/**
* Configures the sort settings.
* {% codeBlock src='grid/sortSettings/index.md' %}{% endcodeBlock %}
*
* @default {columns:[]}
*/
sortSettings?: SortSettingsModel;
/**
* Configures the infinite scroll settings.
* {% codeBlock src='grid/infiniteScrollSettings/index.md' %}{% endcodeBlock %}
*
* @default { enableCache: false, maxBlocks: 5, initialBlocks: 5 }
*/
infiniteScrollSettings?: InfiniteScrollSettingsModel;
/**
* If `allowSelection` is set to true, it allows selection of (highlight row) Grid records by clicking it.
* {% codeBlock src='grid/allowSelection/index.md' %}{% endcodeBlock %}
*
* @default true
*/
allowSelection?: boolean;
/**
* The `selectedRowIndex` allows you to select a row at initial rendering.
* You can also get the currently selected row index.
* {% codeBlock src='grid/selectedRowIndex/index.md' %}{% endcodeBlock %}
*
* @default -1
*/
selectedRowIndex?: number;
/**
* Configures the selection settings.
* {% codeBlock src='grid/selectionSettings/index.md' %}{% endcodeBlock %}
*
* @default {mode: 'Row', cellSelectionMode: 'Flow', type: 'Single'}
*/
selectionSettings?: SelectionSettingsModel;
/**
* If `allowFiltering` set to true the filter bar will be displayed.
* If set to false the filter bar will not be displayed.
* Filter bar allows the user to filter grid records with required criteria.
*
* > Check the [`Filtering`](../../grid/filtering/) to customize its default behavior.
* {% codeBlock src='grid/allowFiltering/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowFiltering?: boolean;
/**
* Defines the grid row elements rendering direction. The available directions are,
* * `Horizontal`: Renders the grid row elements in the horizontal direction
* * `Vertical`: Renders the grid row elements in the vertical direction
*
* @default Horizontal
*/
rowRenderingMode?: RowRenderingDirection;
/**
* If `enableAdaptiveUI` set to true the grid filter, sort, and edit dialogs render adaptively.
*
* @default false
*/
enableAdaptiveUI?: boolean;
/**
* One of the adaptiveUIMode enumeration that specifies the Adaptive Mode. The default value is Both.
*
* @default Both
*/
adaptiveUIMode?: AdaptiveMode;
/**
* If `allowReordering` is set to true, Grid columns can be reordered.
* Reordering can be done by drag and drop of a particular column from one index to another index.
* > If Grid is rendered with stacked headers, reordering is allowed only at the same level as the column headers.
* {% codeBlock src='grid/allowReordering/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowReordering?: boolean;
/**
* If `allowResizing` is set to true, Grid columns can be resized.
* {% codeBlock src='grid/allowResizing/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowResizing?: boolean;
/**
* If `allowRowDragAndDrop` is set to true, you can drag and drop grid rows at another grid.
* {% codeBlock src='grid/allowRowDragAndDrop/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowRowDragAndDrop?: boolean;
/**
* Configures the row drop settings.
*
* @default {targetID: ''}
*/
rowDropSettings?: RowDropSettingsModel;
/**
* Configures the filter settings of the Grid.
* {% codeBlock src='grid/filterSettings/index.md' %}{% endcodeBlock %}
*
* @default {columns: [], type: 'FilterBar', mode: 'Immediate', showFilterBarStatus: true, immediateModeDelay: 1500 , operators: {}}
*/
filterSettings?: FilterSettingsModel;
/**
* If `allowGrouping` set to true, then it will allow the user to dynamically group or ungroup columns.
* Grouping can be done by drag and drop columns from column header to group drop area.
*
* > Check the [`Grouping`](../../grid/grouping/) to customize its default behavior.
* {% codeBlock src='grid/allowGrouping/index.md' %}{% endcodeBlock %}
*
* @default false
*/
allowGrouping?: boolean;
/**
* If `enableImmutableMode` is set to true, the grid will reuse old rows if it exists in the new result instead of
* full refresh while performing the grid actions.
*
* @default false
*/
enableImmutableMode?: boolean;
/**
* If `showColumnMenu` set to true, then it will enable the column menu options in each columns.
*
* > Check the [`Column menu`](../../grid/columns/#column-menu/) for its configuration.
* {% codeBlock src='grid/showColumnMenu/index.md' %}{% endcodeBlock %}
*
* @default false
*/
showColumnMenu?: boolean;
/**
* If `autoFit` set to true, then it will auto fit the columns based on given width.
*
* @default false
*/
autoFit?: boolean;
/**
* Configures the group settings.
* {% codeBlock src='grid/groupSettings/index.md' %}{% endcodeBlock %}
*
* @default {showDropArea: true, showToggleButton: false, showGroupedColumn: false, showUngroupButton: true, columns: []}
*/
groupSettings?: GroupSettingsModel;
/**
* Configures the edit settings.
* {% codeBlock src='grid/editSettings/index.md' %}{% endcodeBlock %}
*
* @default { allowAdding: false, allowEditing: false, allowDeleting: false, mode:'Normal',
* allowEditOnDblClick: true, showConfirmDialog: true, showDeleteConfirmDialog: false }
*/
editSettings?: EditSettingsModel;
/**
* Configures the Grid aggregate rows.
* {% codeBlock src='grid/aggregates/index.md' %}{% endcodeBlock %}
* > Check the [`Aggregates`](../../grid/aggregates/) for its configuration.
*
* @default []
*/
aggregates?: AggregateRowModel[];
/**
* If `showColumnChooser` is set to true, it allows you to dynamically show or hide columns.
*
* > Check the [`ColumnChooser`](../../grid/columns/#column-chooser/) for its configuration.
* {% codeBlock src='grid/showColumnChooser/index.md' %}{% endcodeBlock %}
*
* @default false
*/
showColumnChooser?: boolean;
/**
* Configures the column chooser in the Grid.
*
* @default { columnChooserOperator: 'startsWith' }
*/
columnChooserSettings?: ColumnChooserSettingsModel;
/**
* If `enableHeaderFocus` set to true, then header element will be focused when focus moves to grid.
*
* @default false
*/
enableHeaderFocus?: boolean;
/**
* Defines the scrollable height of the grid content.
* {% codeBlock src='grid/height/index.md' %}{% endcodeBlock %}
*
* @default 'auto'
*/
height?: string | number;
/**
* Defines the Grid width.
* {% codeBlock src='grid/width/index.md' %}{% endcodeBlock %}
*
* @default 'auto'
*/
width?: string | number;
/**
* Defines the mode of grid lines. The available modes are,
* * `Both`: Displays both horizontal and vertical grid lines.
* * `None`: No grid lines are displayed.
* * `Horizontal`: Displays the horizontal grid lines only.
* * `Vertical`: Displays the vertical grid lines only.
* * `Default`: Displays grid lines based on the theme.
* {% codeBlock src='grid/gridLines/index.md' %}{% endcodeBlock %}
*
* @default Default
*/
gridLines?: GridLine;
/**
* The row template that renders customized rows from the given template.
* By default, Grid renders a table row for every data source item.
* > * It accepts either [template string](../../common/template-engine/) or HTML element ID.
* > * The row template must be a table row.
*
* > Check the [`Row Template`](../../grid/row/) customization.
*
* @default null
* @aspType string
*/
rowTemplate?: string | Function;
/**
* The empty record template that renders customized element or text or image instead of displaying the empty record message in the grid.
* > It accepts either the [template string](../../common/template-engine/) or the HTML element ID.
*
* @default null
* @aspType string
*/
emptyRecordTemplate?: string | Function;
/**
* The detail template allows you to show or hide additional information about a particular row.
*
* > It accepts either the [template string](../../common/template-engine/) or the HTML element ID.
*
* {% codeBlock src="grid/detail-template-api/index.ts" %}{% endcodeBlock %}
*
* @default null
* @aspType string
*/
detailTemplate?: string | Function;
/**
* Defines Grid options to render child Grid.
* It requires the [`queryString`](./#querystring) for parent
* and child relationship.
*
* > Check the [`Child Grid`](../../grid/hierarchy-grid/) for its configuration.
*
* @default ''
*
*/
childGrid?: GridModel;
/**
* Defines the relationship between parent and child datasource. It acts as the foreign key for parent datasource.
*
* @default ''
*/
queryString?: string;
/**
* Defines the print modes. The available print modes are
* * `AllPages`: Prints all pages of the Grid.
* * `CurrentPage`: Prints the current page of the Grid.
* {% codeBlock src='grid/printMode/index.md' %}{% endcodeBlock %}
*
* @default AllPages
*/
printMode?: PrintMode;
/**
* Defines the hierarchy grid print modes. The available modes are
* * `Expanded` - Prints the master grid with expanded child grids.
* * `All` - Prints the master grid with all the child grids.
* * `None` - Prints the master grid alone.
*
* @default Expanded
*/
hierarchyPrintMode?: HierarchyGridPrintMode;
/**
* It is used to render grid table rows.
* If the `dataSource` is an array of JavaScript objects,
* then Grid will create instance of [`DataManager`](https://ej2.syncfusion.com/documentation/api/data/dataManager/)
* from this `dataSource`.
* If the `dataSource` is an existing [`DataManager`](https://ej2.syncfusion.com/documentation/api/data/dataManager/),
* the Grid will not initialize a new one.
*
* > Check the available [`Adaptors`](../../data/adaptors/) to customize the data operation.
* {% codeBlock src='grid/dataSource/index.md' %}{% endcodeBlock %}
*
* @default []
* @isGenericType true
*/
dataSource?: Object | DataManager | DataResult;
/**
* Defines the height of Grid rows.
* {% codeBlock src='grid/rowHeight/index.md' %}{% endcodeBlock %}
*
* @default null
*/
rowHeight?: number;
/**
* Defines the external [`Query`](https://ej2.syncfusion.com/documentation/data/api-query.html)
* that will be executed along with data processing.
* {% codeBlock src='grid/query/index.md' %}{% endcodeBlock %}
*
* @default null
*/
query?: Query;
/**
* Defines the currencyCode format of the Grid columns
*
* @private
*/
currencyCode?: string;
/**
* Defines the id of the grids that needs to be exported
*
* @default null
*/
exportGrids?: string[];
/**
* `toolbar` defines the ToolBar items of the Grid.
* It contains built-in and custom toolbar items.
* If a string value is assigned to the `toolbar` option, it is considered as the template for the whole Grid ToolBar.
* If an array value is assigned, it is considered as the list of built-in and custom toolbar items in the Grid's Toolbar.
* <br><br>
* The available built-in ToolBar items are:
* * Add: Adds a new record.
* * Edit: Edits the selected record.
* * Update: Updates the edited record.
* * Delete: Deletes the selected record.
* * Cancel: Cancels the edit state.
* * Search: Searches records by the given key.
* * Print: Prints the Grid.
* * ExcelExport - Export the Grid to Excel(excelExport() method manually to make export.)
* * PdfExport - Export the Grid to PDF(pdfExport() method manually to make export.)
* * CsvExport - Export the Grid to CSV(csvExport() method manually to make export.)<br><br>
* The following code example implements the custom toolbar items.
*
* > Check the [`Toolbar`](../../grid/tool-bar/#custom-toolbar-items/) to customize its default items.
*
* {% codeBlock src="grid/toolbar-api/index.ts" %}{% endcodeBlock %}
* {% codeBlock src='grid/toolbar/index.md' %}{% endcodeBlock %}
*
* @default null
*/
toolbar?: (ToolbarItems | string | ItemModel | ToolbarItem)[];
/**
* `contextMenuItems` defines both built-in and custom context menu items.
* <br><br>
* The available built-in items are,
* * `AutoFitAll` - Auto fit the size of all columns.
* * `AutoFit` - Auto fit the current column.
* * `Group` - Group by current column.
* * `Ungroup` - Ungroup by current column.
* * `Edit` - Edit the current record.
* * `Delete` - Delete the current record.
* * `Save` - Save the edited record.
* * `Cancel` - Cancel the edited state.
* * `Copy` - Copy the selected records.
* * `PdfExport` - Export the grid as Pdf format.
* * `ExcelExport` - Export the grid as Excel format.
* * `CsvExport` - Export the grid as CSV format.
* * `SortAscending` - Sort the current column in ascending order.
* * `SortDescending` - Sort the current column in descending order.
* * `FirstPage` - Go to the first page.
* * `PrevPage` - Go to the previous page.
* * `LastPage` - Go to the last page.
* * `NextPage` - Go to the next page.
*
* @default null
*/
contextMenuItems?: ContextMenuItem[] | ContextMenuItemModel[];
/**
* `columnMenuItems` defines both built-in and custom column menu items.
* <br><br>
* The available built-in items are,
* * `AutoFitAll` - Auto fit the size of all columns.
* * `AutoFit` - Auto fit the current column.
* * `Group` - Group by current column.
* * `Ungroup` - Ungroup by current column.
* * `SortAscending` - Sort the current column in ascending order.
* * `SortDescending` - Sort the current column in descending order.
* * `Filter` - Filter options will show based on filterSettings property like checkbox filter, excel filter, menu filter.
*
* @default null
*/
columnMenuItems?: ColumnMenuItem[] | ColumnMenuItemModel[];
/**
* It used to render toolbar template
*
* @default null
* @aspType string
*/
toolbarTemplate?: string | Function;
/**
* It used to render pager template
*
* @default null
* @aspType string
*/
pagerTemplate?: string | Function;
/**
* Gets or sets the number of frozen rows.
* {% codeBlock