blob: 210b580b8af61460ec31d1600394bd0f3fe4c753 [file] [log] [blame]
import { EventEmitter, ChangeDetectorRef, OnDestroy, AfterViewInit, TemplateRef, AfterContentInit, QueryList, ElementRef, OnInit, AfterContentChecked } from '@angular/core';
import { DomSanitizer, SafeStyle } from '@angular/platform-browser';
import { TdDataTableRowComponent } from './data-table-row/data-table-row.component';
import { ITdDataTableSortChangeEvent, TdDataTableColumnComponent } from './data-table-column/data-table-column.component';
import { TdDataTableTemplateDirective } from './directives/data-table-template.directive';
import { IControlValueAccessor } from '@covalent/core/common';
export declare enum TdDataTableSortingOrder {
Ascending = "ASC",
Descending = "DESC"
}
export interface ITdDataTableColumnWidth {
min?: number;
max?: number;
}
export interface ITdDataTableColumn {
name: string;
label: string;
tooltip?: string;
numeric?: boolean;
format?: (value: any) => any;
nested?: boolean;
sortable?: boolean;
hidden?: boolean;
filter?: boolean;
width?: ITdDataTableColumnWidth | number;
}
export interface ITdDataTableSelectEvent {
row: any;
selected: boolean;
index: number;
}
export interface ITdDataTableSelectAllEvent {
rows: any[];
selected: boolean;
}
export interface ITdDataTableRowClickEvent {
row: any;
index: number;
}
export interface IInternalColumnWidth {
value: number;
limit: boolean;
index: number;
min?: boolean;
max?: boolean;
}
export declare class TdDataTableBase {
_changeDetectorRef: ChangeDetectorRef;
constructor(_changeDetectorRef: ChangeDetectorRef);
}
export declare const _TdDataTableMixinBase: (new (...args: any[]) => IControlValueAccessor) & typeof TdDataTableBase;
export declare class TdDataTableComponent extends _TdDataTableMixinBase implements IControlValueAccessor, OnInit, AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy {
private _document;
private _elementRef;
private _domSanitizer;
/** responsive width calculations */
private _resizeSubs;
private _rowsChangedSubs;
private _hostWidth;
/** manually resizable columns */
private _resizableColumns;
private _columnClientX;
private _columnResizeSubs;
private _resizingColumn;
private _onColumnResize;
readonly resizingColumn: number;
readonly hostWidth: number;
private _widths;
private _onResize;
/** column header reposition and viewpoort */
private _verticalScrollSubs;
private _horizontalScrollSubs;
private _scrollHorizontalOffset;
private _onHorizontalScroll;
private _onVerticalScroll;
private _rowHeightCache;
private _totalHeight;
private _hostHeight;
private _scrollVerticalOffset;
private _offsetTransform;
private _fromRow;
private _toRow;
/**
* Returns the offset style with a proper calculation on how much it should move
* over the y axis of the total height
*/
readonly offsetTransform: SafeStyle;
/**
* Returns the assumed total height of the rows
*/
readonly totalHeight: number;
/**
* Returns the initial row to render in the viewport
*/
readonly fromRow: number;
/**
* Returns the last row to render in the viewport
*/
readonly toRow: number;
private _valueChangesSubs;
/** internal attributes */
private _data;
private _virtualData;
private _columns;
private _selectable;
private _clickable;
private _multiple;
private _allSelected;
private _indeterminate;
/** sorting */
private _sortable;
private _sortBy;
private _sortOrder;
/** shift select */
private _shiftPreviouslyPressed;
private _lastSelectedIndex;
private _firstSelectedIndex;
private _firstCheckboxValue;
/** template fetching support */
private _templateMap;
_templates: QueryList<TdDataTableTemplateDirective>;
_scrollableDiv: ElementRef;
_colElements: QueryList<TdDataTableColumnComponent>;
_rows: QueryList<TdDataTableRowComponent>;
/**
* Returns scroll position to reposition column headers
*/
readonly columnsLeftScroll: number;
/**
* Returns true if all values are selected.
*/
readonly allSelected: boolean;
/**
* Returns true if all values are not deselected
* and at least one is.
*/
readonly indeterminate: boolean;
/**
* data?: {[key: string]: any}[]
* Sets the data to be rendered as rows.
*/
data: any[];
readonly virtualData: any[];
/**
* columns?: ITdDataTableColumn[]
* Sets additional column configuration. [ITdDataTableColumn.name] has to exist in [data] as key.
* Defaults to [data] keys.
*/
columns: ITdDataTableColumn[];
/**
* resizableColumns?: boolean
* Enables manual column resize.
* Defaults to 'false'
*/
resizableColumns: boolean;
/**
* selectable?: boolean
* Enables row selection events, hover and selected row states.
* Defaults to 'false'
*/
selectable: boolean;
/**
* clickable?: boolean
* Enables row click events, hover.
* Defaults to 'false'
*/
clickable: boolean;
/**
* multiple?: boolean
* Enables multiple row selection. [selectable] needs to be enabled.
* Defaults to 'false'
*/
multiple: boolean;
/**
* sortable?: boolean
* Enables sorting events, sort icons and active column states.
* Defaults to 'false'
*/
sortable: boolean;
/**
* sortBy?: string
* Sets the active sort column. [sortable] needs to be enabled.
*/
sortBy: string;
readonly sortByColumn: ITdDataTableColumn;
/**
* sortOrder?: ['ASC' | 'DESC'] or TdDataTableSortingOrder
* Sets the sort order of the [sortBy] column. [sortable] needs to be enabled.
* Defaults to 'ASC' or TdDataTableSortingOrder.Ascending
*/
sortOrder: 'ASC' | 'DESC';
readonly sortOrderEnum: TdDataTableSortingOrder;
readonly hasData: boolean;
/**
* sortChange?: function
* Event emitted when the column headers are clicked. [sortable] needs to be enabled.
* Emits an [ITdDataTableSortChangeEvent] implemented object.
*/
onSortChange: EventEmitter<ITdDataTableSortChangeEvent>;
/**
* rowSelect?: function
* Event emitted when a row is selected/deselected. [selectable] needs to be enabled.
* Emits an [ITdDataTableSelectEvent] implemented object.
*/
onRowSelect: EventEmitter<ITdDataTableSelectEvent>;
/**
* rowClick?: function
* Event emitted when a row is clicked.
* Emits an [ITdDataTableRowClickEvent] implemented object.
*/
onRowClick: EventEmitter<ITdDataTableRowClickEvent>;
/**
* selectAll?: function
* Event emitted when all rows are selected/deselected by the all checkbox. [selectable] needs to be enabled.
* Emits an [ITdDataTableSelectAllEvent] implemented object.
*/
onSelectAll: EventEmitter<ITdDataTableSelectAllEvent>;
constructor(_document: any, _elementRef: ElementRef, _domSanitizer: DomSanitizer, _changeDetectorRef: ChangeDetectorRef);
/**
* compareWith?: function(row, model): boolean
* Allows custom comparison between row and model to see if row is selected or not
* Default comparation is by reference
*/
compareWith: (row: any, model: any) => boolean;
/**
* Initialize observable for resize and scroll events
*/
ngOnInit(): void;
/**
* Loads templates and sets them in a map for faster access.
*/
ngAfterContentInit(): void;
/**
* Checks hosts native elements widths to see if it has changed (resize check)
*/
ngAfterContentChecked(): void;
/**
* Registers to an observable that checks if all rows have been rendered
* so we can start calculating the widths
*/
ngAfterViewInit(): void;
/**
* Unsubscribes observables when data table is destroyed
*/
ngOnDestroy(): void;
/**
* Method that gets executed every time there is a scroll event
* Calls the scroll observable
*/
handleScroll(event: Event): void;
/**
* Returns the width needed for the columns via index
*/
getColumnWidth(index: number): number;
getCellValue(column: ITdDataTableColumn, value: any): string;
/**
* Getter method for template references
*/
getTemplateRef(name: string): TemplateRef<any>;
/**
* Clears model (ngModel) of component by removing all values in array.
*/
clearModel(): void;
/**
* Refreshes data table and rerenders [data] and [columns]
*/
refresh(): void;
/**
* Selects or clears all rows depending on 'checked' value.
*/
selectAll(checked: boolean): void;
/**
* Checks if row is selected
*/
isRowSelected(row: any): boolean;
/**
* Selects or clears a row depending on 'checked' value if the row 'isSelectable'
* handles cntrl clicks and shift clicks for multi-select
*/
select(row: any, event: Event, currentSelected: number): void;
/**
* Overrides the onselectstart method of the document so other text on the page
* doesn't get selected when doing shift selections.
*/
disableTextSelection(): void;
/**
* Resets the original onselectstart method.
*/
enableTextSelection(): void;
/**
* emits the onRowClickEvent when a row is clicked
* if clickable is true and selectable is false then select the row
*/
handleRowClick(row: any, index: number, event: Event): void;
/**
* Method handle for sort click event in column headers.
*/
handleSort(column: ITdDataTableColumn): void;
/**
* Handle all keyup events when focusing a data table row
*/
_rowKeyup(event: KeyboardEvent, row: any, index: number): void;
/**
* Sets column index of the dragged column and initial clientX of column
*/
_handleStartColumnDrag(index: number, event: MouseEvent): void;
/**
* Calculates new width depending on new clientX of dragger column
*/
_handleColumnDrag(event: MouseEvent | DragEvent): void;
/**
* Ends dragged flags
*/
_handleEndColumnDrag(): void;
/**
* Method to prevent the default events
*/
blockEvent(event: Event): void;
private _getNestedValue;
/**
* Does the actual Row Selection
*/
private _doSelection;
/**
* Calculate all the state of all checkboxes
*/
private _calculateCheckboxState;
/**
* Calculates the widths for columns and cells depending on content
*/
private _calculateWidths;
/**
* Adjusts columns after calculation to see if they need to be recalculated.
*/
private _adjustColumnWidhts;
/**
* Adjusts a single column to see if it can be recalculated
*/
private _adjustColumnWidth;
/**
* Generic method to calculate column width
*/
private _calculateWidth;
/**
* Method to calculate the rows to be rendered in the viewport
*/
private _calculateVirtualRows;
}