UNPKG

209 kBSource Map (JSON)View Raw
1{"version":3,"sources":["ng://primeng/table/table.ts"],"names":["TableService","this","sortSource","Subject","selectionSource","contextMenuSource","valueSource","totalRecordsSource","columnsSource","sortSource$","asObservable","selectionSource$","contextMenuSource$","valueSource$","totalRecordsSource$","columnsSource$","prototype","onSort","sortMeta","next","onSelectionChange","onContextMenu","data","onValueChange","value","onTotalRecordsChange","onColumnsChange","columns","__decorate","Injectable","Table","el","zone","tableService","cd","pageLinks","alwaysShowPaginator","paginatorPosition","paginatorDropdownScrollHeight","currentPageReportTemplate","defaultSortOrder","sortMode","resetPageOnSort","selectionChange","EventEmitter","contextMenuSelectionChange","contextMenuSelectionMode","rowTrackBy","index","item","lazy","lazyLoadOnInit","compareSelectionBy","csvSeparator","exportFilename","filters","filterDelay","expandedRowKeys","editingRowKeys","rowExpandMode","virtualScrollDelay","virtualRowHeight","columnResizeMode","loadingIcon","showLoader","stateStorage","editMode","onRowSelect","onRowUnselect","onPage","onFilter","onLazyLoad","onRowExpand","onRowCollapse","onContextMenuSelect","onColResize","onColReorder","onRowReorder","onEditInit","onEditComplete","onEditCancel","onHeaderCheckboxToggle","sortFunction","firstChange","rowsChange","onStateSave","onStateRestore","_value","_totalRecords","_first","selectionKeys","_sortOrder","ngOnInit","emit","createLazyLoadMetadata","restoringFilter","initialized","ngAfterContentInit","_this","templates","forEach","getType","captionTemplate","template","headerTemplate","bodyTemplate","loadingBodyTemplate","footerTemplate","summaryTemplate","colGroupTemplate","expandedRowTemplate","frozenRowsTemplate","frozenHeaderTemplate","frozenBodyTemplate","frozenFooterTemplate","frozenColGroupTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","ngAfterViewInit","isStateful","resizableColumns","restoreColumnWidths","ngOnChanges","simpleChange","stateRestored","restoreState","currentValue","totalRecords","length","sortField","sortSingle","multiSortMeta","sortMultiple","hasFilter","_filter","virtualScroll","virtualScrollCallback","_columns","reorderableColumns","columnOrderStateRestored","restoreColumnOrder","_sortField","sortOrder","_multiSortMeta","selection","_selection","preventSelectionSetterPropagation","updateSelectionKeys","Object","defineProperty","val","cols","_rows","dataKey","Array","isArray","_b","__values","_c","done","String","ObjectUtils","resolveFieldData","onPageChange","event","first","rows","saveState","anchorRowIndex","sort","originalEvent","field","metaKey","ctrlKey","getSortMeta","order","push","restoringSort","customSort","mode","data1","data2","value1","value2","result","localeCompare","multisortField","multisortmeta","i","isSorted","sorted","handleRowClick","target","targetNode","nodeName","parentNode","parentElement","DomHandler","hasClass","selectionMode","isMultipleSelectionMode","shiftKey","clearSelection","rangeRowIndex","clearSelectionRange","rowIndex","selectRange","rowData","selected","isSelected","metaSelection","rowTouched","metaKeySelection","dataKeyValue","isSingleSelectionMode","selectionIndex_1","findIndexInSelection","filter","type","__spread","selectionIndex_2","handleRowTouchEnd","handleRowRightClick","contextMenu","contextMenuSelection","show","rangeStart","rangeEnd","paginator","rangeRowData","filteredValue","this_1","selectionIndex","undefined","equals","toggleRowWithRadio","toggleRowWithCheckbox","selectionIndex_3","toggleRowsWithCheckbox","check","slice","checked","matchMode","filterTimeout","clearTimeout","isFilterBlank","setTimeout","filterGlobal","trim","globalFilterFieldsArray","globalFilterFields","Error","localMatch","globalMatch","localFiltered","prop","hasOwnProperty","filterMeta","filterField","filterValue","filterMatchMode","dataFieldValue","filterConstraint","FilterUtils","filterLocale","j","globalFilterField","markForCheck","empty","globalFilter","reset","exportCSV","options","csv","selectionOnly","column","exportable","header","record","i_1","cellData","exportFunction","replace","blob","Blob","window","navigator","msSaveOrOpenBlob","link","document","createElement","style","display","body","appendChild","download","setAttribute","URL","createObjectURL","click","open","encodeURI","removeChild","updateEditingCell","cell","editingCell","editingCellData","editingCellField","editingCellRowIndex","bindDocumentEditListener","isEditingCellValid","find","documentEditListener","editingCellClick","removeClass","unbindDocumentEditListener","addEventListener","removeEventListener","initRowEdit","saveRowEdit","rowElement","cancelRowEdit","toggleRow","preventDefault","isRowExpanded","isRowEditing","onColumnResizeBegin","containerLeft","getOffset","containerViewChild","nativeElement","left","lastResizerHelperX","pageX","scrollLeft","onColumnResize","addClass","resizeHelperViewChild","height","offsetHeight","top","onColumnResizeEnd","delta","offsetLeft","columnWidth","offsetWidth","minWidth","parseInt","newColumnWidth","nextColumn","nextElementSibling","offsetParent","nextColumnWidth","nextColumnMinWidth","scrollable","scrollableView","findParentScrollableView","scrollableBodyTable","findSingle","scrollableHeaderTable","scrollableFooterTable","resizeColumnIndex","resizeColGroup","width","setScrollableItemsWidthOnExpandResize","tableViewChild","containerWidth","element","scrollableBody","scrollableHeader","scrollableFooter","scrollableBodyTableWidth","scrollableHeaderTableWidth","isContainerInViewport","setWidth","container","table","calculateScrollbarWidth","parent_1","colGroup","children","col","nextCol","onColumnDragStart","columnElement","reorderIconWidth","getHiddenElementOuterWidth","reorderIndicatorUpViewChild","reorderIconHeight","getHiddenElementOuterHeight","reorderIndicatorDownViewChild","draggedColumn","dataTransfer","setData","onColumnDragEnter","dropHeader","containerOffset","dropHeaderOffset","dragIndex","indexWithinGroup","dropIndex","targetLeft","columnCenter","Math","ceil","dropPosition","dropEffect","onColumnDragLeave","onColumnDrop","dropColumn","allowDrop","reorderArray","runOutsideAngular","draggable","onRowDragStart","rowDragging","draggedRowIndex","onRowDragOver","rowY","getWindowScrollTop","pageY","rowMidY","getOuterHeight","prevRowElement","previousElementSibling","droppedRowIndex","onRowDragLeave","onRowDragEnd","onRowDrop","handleVirtualScroll","page","callback","run","virtualScrollTimer","isEmpty","getBlockableElement","getStorage","localStorage","sessionStorage","stateKey","storage","state","saveColumnWidths","saveColumnOrder","keys","setItem","JSON","stringify","clearState","removeItem","stateString","getItem","state_1","parse","columnWidthsState","columnWidths","tableWidthState","tableWidth","Promise","resolve","then","widths","map","getOuterWidth","join","widths_1","split","headerCols","bodyCols","columnOrder_1","key","columnOrder","reorderedColumns_1","findColumnByKey","ngOnDestroy","ElementRef","NgZone","ChangeDetectorRef","Input","Output","ViewChild","ContentChildren","PrimeTemplate","Component","selector","providers","changeDetection","ChangeDetectionStrategy","Default","TableBody","dt","ScrollableView","loadingArray","lastBodyScrollTop","subscription","subscribe","alignScrollBar","scrollLoadingTableViewChild","totalRecordsSubscription","setVirtualScrollerHeight","fill","_scrollHeight","setScrollHeight","ngAfterViewChecked","frozen","scrollableAlignerViewChild","calculateScrollbarHeight","scrollableSiblingBody","frozenColumns","frozenView","frozenSiblingBody","bindEvents","columnsSubscription","scrollHeaderViewChild","headerScrollListener","onHeaderScroll","bind","scrollFooterViewChild","footerScrollListener","onFooterScroll","bodyScrollListener","onBodyScroll","scrollBodyViewChild","unbindEvents","preventBodyScrollPropagation","scrollHeaderBoxViewChild","marginLeft","scrollFooterBoxViewChild","scrollTop","requestAnimationFrame","viewport","tableHeight","scrollTableViewChild","pageHeight_1","pageCount","virtualScrollerViewChild","scrollBodyTop","parseFloat","page_1","floor","scrollHeight","maxHeight","indexOf","relativeHeight","visibility","containerHeight","includes","percentHeight","diffValue","scrollBodyHeight","hasVerticalOverflow","scrollBarWidth","marginRight","unsubscribe","SortableColumn","isEnabled","updateSortState","onClick","onEnterKey","pSortableColumnDisabled","HostListener","Directive","host","[class.ui-sortable-column]","[class.ui-state-highlight]","[attr.tabindex]","[attr.role]","[attr.aria-sort]","SortIcon","SelectableRow","onTouchEnd","onArrowDownKeyDown","row","currentTarget","nextRow","findNextSelectableRow","focus","onArrowUpKeyDown","prevRow","findPrevSelectableRow","onEnterKeyDown","pSelectableRowDisabled","[class.ui-selectable-row]","SelectableRowDblClick","ContextMenuRow","pContextMenuRowDisabled","[class.ui-contextmenu-selected]","RowToggler","pRowTogglerDisabled","ResizableColumn","resizer","className","resizerMouseDownListener","onMouseDown","bindDocumentEvents","documentMouseMoveListener","onDocumentMouseMove","documentMouseUpListener","onDocumentMouseUp","unbindDocumentEvents","which","pResizableColumnDisabled","ReorderableColumn","mouseDownListener","dragStartListener","onDragStart","dragOverListener","onDragEnter","dragEnterListener","dragLeaveListener","onDragLeave","onDragOver","onDrop","pReorderableColumnDisabled","EditableColumn","closeEditingCell","openCell","focusCellSelector","pFocusCellSelector","focusableElement","completed","onEscapeKeyDown","onShiftKeyDown","moveToPreviousCell","moveToNextCell","findCell","currentCell","targetCell","findPreviousEditableColumn","invokeElementMethod","findNextEditableColumn","prevCell","previousRow","lastElementChild","nextCell","firstElementChild","pEditableColumnDisabled","EditableRow","pEditableRowDisabled","InitEditableRow","editableRow","SaveEditableRow","CancelEditableRow","CellEditor","editableColumn","inputTemplate","outputTemplate","decorators","Optional","__param","TableRadioButton","disabled","onFocus","boxViewChild","onBlur","TableCheckbox","TableHeaderCheckbox","valueChangeSubscription","updateCheckedState","selectionChangeSubscription","isDisabled","isAllFilteredValuesChecked","ReorderableRowHandle","ReorderableRow","droppable","dragEndListener","onDragEnd","pReorderableRowDisabled","TableModule","NgModule","imports","CommonModule","PaginatorModule","exports","SharedModule","declarations"],"mappings":"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","sourcesContent":["import { NgModule, Component, HostListener, OnInit, OnDestroy, AfterViewInit, AfterViewChecked, Directive, Optional, AfterContentInit,\n Input, Output, EventEmitter, ElementRef, ContentChildren, TemplateRef, QueryList, ViewChild, NgZone, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { DomHandler } from 'primeng/dom';\nimport { ObjectUtils } from 'primeng/utils';\nimport { SortMeta } from 'primeng/api';\nimport { TableState } from 'primeng/api';\nimport { FilterMetadata } from 'primeng/api';\nimport { Injectable } from '@angular/core';\nimport { BlockableUI } from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { FilterUtils } from 'primeng/utils';\n\n@Injectable()\nexport class TableService {\n\n private sortSource = new Subject<SortMeta|SortMeta[]>();\n private selectionSource = new Subject();\n private contextMenuSource = new Subject<any>();\n private valueSource = new Subject<any>();\n private totalRecordsSource = new Subject<any>();\n private columnsSource = new Subject();\n\n sortSource$ = this.sortSource.asObservable();\n selectionSource$ = this.selectionSource.asObservable();\n contextMenuSource$ = this.contextMenuSource.asObservable();\n valueSource$ = this.valueSource.asObservable();\n totalRecordsSource$ = this.totalRecordsSource.asObservable();\n columnsSource$ = this.columnsSource.asObservable();\n\n onSort(sortMeta: SortMeta|SortMeta[]) {\n this.sortSource.next(sortMeta);\n }\n\n onSelectionChange() {\n this.selectionSource.next();\n }\n\n onContextMenu(data: any) {\n this.contextMenuSource.next(data);\n }\n\n onValueChange(value: any) {\n this.valueSource.next(value);\n }\n\n onTotalRecordsChange(value: number) {\n this.totalRecordsSource.next(value);\n }\n\n onColumnsChange(columns: any[]) {\n this.columnsSource.next(columns);\n }\n}\n\n@Component({\n selector: 'p-table',\n template: `\n <div #container [ngStyle]=\"style\" [class]=\"styleClass\"\n [ngClass]=\"{'ui-table ui-widget': true, 'ui-table-responsive': responsive, 'ui-table-resizable': resizableColumns,\n 'ui-table-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),\n 'ui-table-hoverable-rows': (rowHover||selectionMode), 'ui-table-auto-layout': autoLayout}\">\n <div class=\"ui-table-loading ui-widget-overlay\" *ngIf=\"loading && showLoader\"></div>\n <div class=\"ui-table-loading-content\" *ngIf=\"loading && showLoader\">\n <i [class]=\"'ui-table-loading-icon pi-spin ' + loadingIcon\"></i>\n </div>\n <div *ngIf=\"captionTemplate\" class=\"ui-table-caption ui-widget-header\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </div>\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"ui-paginator-top\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\"\n [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\"></p-paginator>\n\n <div class=\"ui-table-wrapper\" *ngIf=\"!scrollable\">\n <table role=\"grid\" #table [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\">\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"ui-table-thead\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"ui-table-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\"></tbody>\n <tfoot *ngIf=\"footerTemplate\" class=\"ui-table-tfoot\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n\n <div class=\"ui-table-scrollable-wrapper\" *ngIf=\"scrollable\">\n <div class=\"ui-table-scrollable-view ui-table-frozen-view\" *ngIf=\"frozenColumns||frozenBodyTemplate\" [pScrollableView]=\"frozenColumns\" [frozen]=\"true\" [ngStyle]=\"{width: frozenWidth}\" [scrollHeight]=\"scrollHeight\"></div>\n <div class=\"ui-table-scrollable-view\" [pScrollableView]=\"columns\" [frozen]=\"false\" [scrollHeight]=\"scrollHeight\" [ngStyle]=\"{left: frozenWidth, width: 'calc(100% - '+frozenWidth+')'}\"></div>\n </div>\n\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"ui-paginator-bottom\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\"\n [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\"></p-paginator>\n\n <div *ngIf=\"summaryTemplate\" class=\"ui-table-summary ui-widget-header\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n </div>\n\n <div #resizeHelper class=\"ui-column-resizer-helper ui-state-highlight\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n\n <span #reorderIndicatorUp class=\"pi pi-arrow-down ui-table-reorder-indicator-up\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n <span #reorderIndicatorDown class=\"pi pi-arrow-up ui-table-reorder-indicator-down\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n </div>\n `,\n providers: [TableService],\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class Table implements OnInit, AfterViewInit, AfterContentInit, BlockableUI, OnChanges {\n\n @Input() frozenColumns: any[];\n\n @Input() frozenValue: any[];\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() tableStyle: any;\n\n @Input() tableStyleClass: string;\n\n @Input() paginator: boolean;\n\n @Input() pageLinks: number = 5;\n\n @Input() rowsPerPageOptions: any[];\n\n @Input() alwaysShowPaginator: boolean = true;\n\n @Input() paginatorPosition: string = 'bottom';\n\n @Input() paginatorDropdownAppendTo: any;\n\n @Input() paginatorDropdownScrollHeight: string = '200px';\n\n @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n @Input() showCurrentPageReport: boolean;\n\n @Input() defaultSortOrder: number = 1;\n\n @Input() sortMode: string = 'single';\n\n @Input() resetPageOnSort: boolean = true;\n\n @Input() selectionMode: string;\n\n @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n @Input() contextMenuSelection: any;\n\n @Output() contextMenuSelectionChange: EventEmitter<any> = new EventEmitter();\n\n @Input() contextMenuSelectionMode: string = \"separate\";\n\n @Input() dataKey: string;\n\n @Input() metaKeySelection: boolean;\n\n @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n @Input() lazy: boolean = false;\n\n @Input() lazyLoadOnInit: boolean = true;\n\n @Input() compareSelectionBy: string = 'deepEquals';\n\n @Input() csvSeparator: string = ',';\n\n @Input() exportFilename: string = 'download';\n\n @Input() filters: { [s: string]: FilterMetadata; } = {};\n\n @Input() globalFilterFields: string[];\n\n @Input() filterDelay: number = 300;\n\n @Input() filterLocale: string;\n\n @Input() expandedRowKeys: { [s: string]: boolean; } = {};\n\n @Input() editingRowKeys: { [s: string]: boolean; } = {};\n\n @Input() rowExpandMode: string = 'multiple';\n\n @Input() scrollable: boolean;\n\n @Input() scrollHeight: string;\n\n @Input() virtualScroll: boolean;\n\n @Input() virtualScrollDelay: number = 150;\n\n @Input() virtualRowHeight: number = 28;\n\n @Input() frozenWidth: string;\n\n @Input() responsive: boolean;\n\n @Input() contextMenu: any;\n\n @Input() resizableColumns: boolean;\n\n @Input() columnResizeMode: string = 'fit';\n\n @Input() reorderableColumns: boolean;\n\n @Input() loading: boolean;\n\n @Input() loadingIcon: string = 'pi pi-spinner';\n\n @Input() showLoader: boolean = true;\n\n @Input() rowHover: boolean;\n\n @Input() customSort: boolean;\n\n @Input() autoLayout: boolean;\n\n @Input() exportFunction;\n\n @Input() stateKey: string;\n\n @Input() stateStorage: string = 'session';\n\n @Input() editMode: string = 'cell';\n\n @Output() onRowSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowUnselect: EventEmitter<any> = new EventEmitter();\n\n @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowExpand: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowCollapse: EventEmitter<any> = new EventEmitter();\n\n @Output() onContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onColResize: EventEmitter<any> = new EventEmitter();\n\n @Output() onColReorder: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowReorder: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditInit: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditComplete: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditCancel: EventEmitter<any> = new EventEmitter();\n\n @Output() onHeaderCheckboxToggle: EventEmitter<any> = new EventEmitter();\n\n @Output() sortFunction: EventEmitter<any> = new EventEmitter();\n\n @Output() firstChange: EventEmitter<number> = new EventEmitter();\n\n @Output() rowsChange: EventEmitter<number> = new EventEmitter();\n\n @Output() onStateSave: EventEmitter<any> = new EventEmitter();\n\n @Output() onStateRestore: EventEmitter<any> = new EventEmitter();\n\n @ViewChild('container') containerViewChild: ElementRef;\n\n @ViewChild('resizeHelper') resizeHelperViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorUp') reorderIndicatorUpViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorDown') reorderIndicatorDownViewChild: ElementRef;\n\n @ViewChild('table') tableViewChild: ElementRef;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n _value: any[] = [];\n\n _columns: any[];\n\n _totalRecords: number = 0;\n\n _first: number = 0;\n\n _rows: number;\n\n filteredValue: any[];\n\n headerTemplate: TemplateRef<any>;\n\n bodyTemplate: TemplateRef<any>;\n\n loadingBodyTemplate: TemplateRef<any>;\n\n captionTemplate: TemplateRef<any>;\n\n frozenRowsTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n summaryTemplate: TemplateRef<any>;\n\n colGroupTemplate: TemplateRef<any>;\n\n expandedRowTemplate: TemplateRef<any>;\n\n frozenHeaderTemplate: TemplateRef<any>;\n\n frozenBodyTemplate: TemplateRef<any>;\n\n frozenFooterTemplate: TemplateRef<any>;\n\n frozenColGroupTemplate: TemplateRef<any>;\n\n emptyMessageTemplate: TemplateRef<any>;\n\n paginatorLeftTemplate: TemplateRef<any>;\n\n paginatorRightTemplate: TemplateRef<any>;\n\n selectionKeys: any = {};\n\n lastResizerHelperX: number;\n\n reorderIconWidth: number;\n\n reorderIconHeight: number;\n\n draggedColumn: any;\n\n draggedRowIndex: number;\n\n droppedRowIndex: number;\n\n rowDragging: boolean;\n\n dropPosition: number;\n\n editingCell: Element;\n\n editingCellData: any;\n\n editingCellField: any;\n\n editingCellRowIndex: number;\n\n editingCellClick: boolean;\n\n documentEditListener: any;\n\n _multiSortMeta: SortMeta[];\n\n _sortField: string;\n\n _sortOrder: number = 1;\n\n virtualScrollTimer: any;\n\n virtualScrollCallback: Function;\n\n preventSelectionSetterPropagation: boolean;\n\n _selection: any;\n\n anchorRowIndex: number;\n\n rangeRowIndex: number;\n\n filterTimeout: any;\n\n initialized: boolean;\n\n rowTouched: boolean;\n\n restoringSort: boolean;\n\n restoringFilter: boolean;\n\n stateRestored: boolean;\n\n columnOrderStateRestored: boolean;\n\n columnWidthsState: string;\n\n tableWidthState: string;\n\n constructor(public el: ElementRef, public zone: NgZone, public tableService: TableService, public cd: ChangeDetectorRef) {}\n\n ngOnInit() {\n if (this.lazy && this.lazyLoadOnInit) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n if (this.restoringFilter) {\n this.restoringFilter = false;\n }\n }\n\n this.initialized = true;\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'caption':\n this.captionTemplate = item.template;\n break;\n\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'body':\n this.bodyTemplate = item.template;\n break;\n\n case 'loadingbody':\n this.loadingBodyTemplate = item.template;\n break;\n\n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n case 'summary':\n this.summaryTemplate = item.template;\n break;\n\n case 'colgroup':\n this.colGroupTemplate = item.template;\n break;\n\n case 'rowexpansion':\n this.expandedRowTemplate = item.template;\n break;\n\n case 'frozenrows':\n this.frozenRowsTemplate = item.template;\n break;\n\n case 'frozenheader':\n this.frozenHeaderTemplate = item.template;\n break;\n\n case 'frozenbody':\n this.frozenBodyTemplate = item.template;\n break;\n\n case 'frozenfooter':\n this.frozenFooterTemplate = item.template;\n break;\n\n case 'frozencolgroup':\n this.frozenColGroupTemplate = item.template;\n break;\n\n case 'emptymessage':\n this.emptyMessageTemplate = item.template;\n break;\n\n case 'paginatorleft':\n this.paginatorLeftTemplate = item.template;\n break;\n\n case 'paginatorright':\n this.paginatorRightTemplate = item.template;\n break;\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.isStateful() && this.resizableColumns) {\n this.restoreColumnWidths();\n }\n }\n\n ngOnChanges(simpleChange: SimpleChanges) {\n if (simpleChange.value) {\n if (this.isStateful() && !this.stateRestored) {\n this.restoreState();\n }\n\n this._value = simpleChange.value.currentValue;\n\n if (!this.lazy) {\n this.totalRecords = (this._value ? this._value.length : 0);\n\n if (this.sortMode == 'single' && this.sortField)\n this.sortSingle();\n else if (this.sortMode == 'multiple' && this.multiSortMeta)\n this.sortMultiple();\n else if (this.hasFilter()) //sort already filters\n this._filter();\n }\n\n if (this.virtualScroll && this.virtualScrollCallback) {\n this.virtualScrollCallback();\n }\n\n this.tableService.onValueChange(simpleChange.value.currentValue);\n }\n\n if (simpleChange.columns) {\n this._columns = simpleChange.columns.currentValue;\n this.tableService.onColumnsChange(simpleChange.columns.currentValue);\n\n if (this._columns && this.isStateful() && this.reorderableColumns && !this.columnOrderStateRestored ) {\n this.restoreColumnOrder();\n }\n }\n\n if (simpleChange.sortField) {\n this._sortField = simpleChange.sortField.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.sortOrder) {\n this._sortOrder = simpleChange.sortOrder.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.multiSortMeta) {\n this._multiSortMeta = simpleChange.multiSortMeta.currentValue;\n if (this.sortMode === 'multiple') {\n this.sortMultiple();\n }\n }\n\n if (simpleChange.selection) {\n this._selection = simpleChange.selection.currentValue;\n\n if (!this.preventSelectionSetterPropagation) {\n this.updateSelectionKeys();\n this.tableService.onSelectionChange();\n }\n this.preventSelectionSetterPropagation = false;\n }\n }\n\n @Input() get value(): any[] {\n return this._value;\n }\n set value(val: any[]) {\n this._value = val;\n }\n\n @Input() get columns(): any[] {\n return this._columns;\n }\n set columns(cols: any[]) {\n this._columns = cols;\n }\n\n @Input() get first(): number {\n return this._first;\n }\n set first(val: number) {\n this._first = val;\n }\n\n @Input() get rows(): number {\n return this._rows;\n }\n set rows(val: number) {\n this._rows = val;\n }\n\n @Input() get totalRecords(): number {\n return this._totalRecords;\n }\n set totalRecords(val: number) {\n this._totalRecords = val;\n this.tableService.onTotalRecordsChange(this._totalRecords);\n }\n\n @Input() get sortField(): string {\n return this._sortField;\n }\n\n set sortField(val: string) {\n this._sortField = val;\n }\n\n @Input() get sortOrder(): number {\n return this._sortOrder;\n }\n set sortOrder(val: number) {\n this._sortOrder = val;\n }\n\n @Input() get multiSortMeta(): SortMeta[] {\n return this._multiSortMeta;\n }\n\n set multiSortMeta(val: SortMeta[]) {\n this._multiSortMeta = val;\n }\n\n @Input() get selection(): any {\n return this._selection;\n }\n\n set selection(val: any) {\n this._selection = val;\n }\n\n updateSelectionKeys() {\n if (this.dataKey && this._selection) {\n this.selectionKeys = {};\n if (Array.isArray(this._selection)) {\n for(let data of this._selection) {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(data, this.dataKey))] = 1;\n }\n }\n else {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;\n }\n }\n }\n\n onPageChange(event) {\n this.first = event.first;\n this.rows = event.rows;\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n\n this.onPage.emit({\n first: this.first,\n rows: this.rows\n });\n\n this.firstChange.emit(this.first);\n this.rowsChange.emit(this.rows);\n this.tableService.onValueChange(this.value);\n\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.anchorRowIndex = null;\n }\n\n sort(event) {\n let originalEvent = event.originalEvent;\n\n if (this.sortMode === 'single') {\n this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;\n this._sortField = event.field;\n this.sortSingle();\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n }\n }\n if (this.sortMode === 'multiple') {\n let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n let sortMeta = this.getSortMeta(event.field);\n\n if (sortMeta) {\n if (!metaKey) {\n this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n }\n }\n else {\n sortMeta.order = sortMeta.order * -1;\n }\n }\n else {\n if (!metaKey || !this.multiSortMeta) {\n this._multiSortMeta = [];\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n }\n }\n this._multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n }\n\n this.sortMultiple();\n }\n\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.anchorRowIndex = null;\n }\n\n sortSingle() {\n if (this.sortField && this.sortOrder) {\n if (this.restoringSort) {\n this.restoringSort = false;\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n if (this.customSort) {\n this.sortFunction.emit({\n data: this.value,\n mode: this.sortMode,\n field: this.sortField,\n order: this.sortOrder\n });\n }\n else {\n this.value.sort((data1, data2) => {\n let value1 = ObjectUtils.resolveFieldData(data1, this.sortField);\n let value2 = ObjectUtils.resolveFieldData(data2, this.sortField);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 === 'string' && typeof value2 === 'string')\n result = value1.localeCompare(value2);\n else\n result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n return (this.sortOrder * result);\n });\n }\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n\n let sortMeta: SortMeta = {\n field: this.sortField,\n order: this.sortOrder\n };\n\n this.onSort.emit(sortMeta);\n this.tableService.onSort(sortMeta);\n }\n }\n\n sortMultiple() {\n if (this.multiSortMeta) {\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n if (this.customSort) {\n this.sortFunction.emit({\n data: this.value,\n mode: this.sortMode,\n multiSortMeta: this.multiSortMeta\n });\n }\n else {\n this.value.sort((data1, data2) => {\n return this.multisortField(data1, data2, this.multiSortMeta, 0);\n });\n }\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n\n this.onSort.emit({\n multisortmeta: this.multiSortMeta\n });\n this.tableService.onSort(this.multiSortMeta);\n }\n }\n\n multisortField(data1, data2, multiSortMeta, index) {\n let value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field);\n let value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && (value1 != value2)) {\n return (multiSortMeta[index].order * value1.localeCompare(value2));\n }\n }\n else {\n result = (value1 < value2) ? -1 : 1;\n }\n\n if (value1 == value2) {\n return (multiSortMeta.length - 1) > (index) ? (this.multisortField(data1, data2, multiSortMeta, index + 1)) : 0;\n }\n\n return (multiSortMeta[index].order * result);\n }\n\n getSortMeta(field: string) {\n if (this.multiSortMeta && this.multiSortMeta.length) {\n for (let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field === field) {\n return this.multiSortMeta[i];\n }\n }\n }\n\n return null;\n }\n\n isSorted(field: string) {\n if (this.sortMode === 'single') {\n return (this.sortField && this.sortField === field);\n }\n else if (this.sortMode === 'multiple') {\n let sorted = false;\n if (this.multiSortMeta) {\n for(let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field == field) {\n sorted = true;\n break;\n }\n }\n }\n return sorted;\n }\n }\n\n handleRowClick(event) {\n let target = (<HTMLElement> event.originalEvent.target);\n let targetNode = target.nodeName;\n let parentNode = target.parentElement && target.parentElement.nodeName;\n if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' ||\n parentNode == 'INPUT' || parentNode == 'BUTTON' || parentNode == 'A' ||\n (DomHandler.hasClass(event.originalEvent.target, 'ui-clickable'))) {\n return;\n }\n\n if (this.selectionMode) {\n this.preventSelectionSetterPropagation = true;\n if (this.isMultipleSelectionMode() && event.originalEvent.shiftKey && this.anchorRowIndex != null) {\n DomHandler.clearSelection();\n if (this.rangeRowIndex != null) {\n this.clearSelectionRange(event.originalEvent);\n }\n\n this.rangeRowIndex = event.rowIndex;\n this.selectRange(event.originalEvent, event.rowIndex);\n }\n else {\n let rowData = event.rowData;\n let selected = this.isSelected(rowData);\n let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n this.anchorRowIndex = event.rowIndex;\n this.rangeRowIndex = event.rowIndex;\n\n if (metaSelection) {\n let metaKey = event.originalEvent.metaKey||event.originalEvent.ctrlKey;\n\n if (selected && metaKey) {\n if (this.isSingleSelectionMode()) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(null);\n }\n else {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n\n this.onRowUnselect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row'});\n }\n else {\n if (this.isSingleSelectionMode()) {\n this._selection = rowData;\n this.selectionChange.emit(rowData);\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (this.isMultipleSelectionMode()) {\n if (metaKey) {\n this._selection = this.selection||[];\n }\n else {\n this._selection = [];\n this.selectionKeys = {};\n }\n\n this._selection = [...this.selection,rowData];\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.onRowSelect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex});\n }\n }\n else {\n if (this.selectionMode === 'single') {\n if (selected) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });\n }\n else {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n else if (this.selectionMode === 'multiple') {\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n this.rowTouched = false;\n }\n\n handleRowTouchEnd(event) {\n this.rowTouched = true;\n }\n\n handleRowRightClick(event) {\n if (this.contextMenu) {\n const rowData = event.rowData;\n\n if (this.contextMenuSelectionMode === 'separate') {\n this.contextMenuSelection = rowData;\n this.contextMenuSelectionChange.emit(rowData);\n this.onContextMenuSelect.emit({originalEvent: event.originalEvent, data: rowData, index: event.rowIndex});\n this.contextMenu.show(event.originalEvent);\n this.tableService.onContextMenu(rowData);\n }\n else if (this.contextMenuSelectionMode === 'joint') {\n this.preventSelectionSetterPropagation = true;\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n\n if (!selected) {\n if (this.isSingleSelectionMode()) {\n this.selection = rowData;\n this.selectionChange.emit(rowData);\n }\n else if (this.isMultipleSelectionMode()) {\n this.selection = [rowData];\n this.selectionChange.emit(this.selection);\n }\n\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.contextMenu.show(event.originalEvent);\n this.onContextMenuSelect.emit({originalEvent: event, data: rowData, index: event.rowIndex});\n }\n }\n }\n\n selectRange(event: MouseEvent, rowIndex: number) {\n let rangeStart, rangeEnd;\n\n if (this.anchorRowIndex > rowIndex) {\n rangeStart = rowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else if (this.anchorRowIndex < rowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = rowIndex;\n }\n else {\n rangeStart = rowIndex;\n rangeEnd = rowIndex;\n }\n\n if (this.lazy && this.paginator) {\n rangeStart -= this.first;\n rangeEnd -= this.first;\n }\n\n for(let i = rangeStart; i <= rangeEnd; i++) {\n let rangeRowData = this.filteredValue ? this.filteredValue[i] : this.value[i];\n if (!this.isSelected(rangeRowData)) {\n this._selection = [...this.selection, rangeRowData];\n let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n this.onRowSelect.emit({originalEvent: event, data: rangeRowData, type: 'row'});\n }\n }\n\n this.selectionChange.emit(this.selection);\n }\n\n clearSelectionRange(event: MouseEvent) {\n let rangeStart, rangeEnd;\n\n if (this.rangeRowIndex > this.anchorRowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n else if (this.rangeRowIndex < this.anchorRowIndex) {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n\n for(let i = rangeStart; i <= rangeEnd; i++) {\n let rangeRowData = this.value[i];\n let selectionIndex = this.findIndexInSelection(rangeRowData);\n this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n this.onRowUnselect.emit({originalEvent: event, data: rangeRowData, type: 'row'});\n }\n }\n\n isSelected(rowData) {\n if (rowData && this.selection) {\n if (this.dataKey) {\n return this.selectionKeys[ObjectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;\n }\n else {\n if (this.selection instanceof Array)\n return this.findIndexInSelection(rowData) > -1;\n else\n return this.equals(rowData, this.selection);\n }\n }\n\n return false;\n }\n\n findIndexInSelection(rowData: any) {\n let index: number = -1;\n if (this.selection && this.selection.length) {\n for (let i = 0; i < this.selection.length; i++) {\n if (this.equals(rowData, this.selection[i])) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n toggleRowWithRadio(event: any, rowData:any) {\n this.preventSelectionSetterPropagation = true;\n\n if (this.selection != rowData) {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n\n if (this.dataKey) {\n this.selectionKeys = {};\n this.selectionKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] = 1;\n }\n }\n else {\n this._selection = null;\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowWithCheckbox(event, rowData: any) {\n this.selection = this.selection||[];\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n this.preventSelectionSetterPropagation = true;\n\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowsWithCheckbox(event: Event, check: boolean) {\n this._selection = check ? this.filteredValue ? this.filteredValue.slice(): this.value.slice() : [];\n this.preventSelectionSetterPropagation = true;\n this.updateSelectionKeys();\n this.selectionChange.emit(this._selection);\n this.tableService.onSelectionChange();\n this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n equals(data1, data2) {\n return this.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, this.dataKey);\n }\n\n filter(value, field, matchMode) {\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\n }\n\n if (!this.isFilterBlank(value)) {\n this.filters[field] = { value: value, matchMode: matchMode };\n } else if (this.filters[field]) {\n delete this.filters[field];\n }\n\n this.filterTimeout = setTimeout(() => {\n this._filter();\n this.filterTimeout = null;\n }, this.filterDelay);\n\n this.anchorRowIndex = null;\n }\n\n filterGlobal(value, matchMode) {\n this.filter(value, 'global', matchMode);\n }\n\n isFilterBlank(filter: any): boolean {\n if (filter !== null && filter !== undefined) {\n if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n return true;\n else\n return false;\n }\n return true;\n }\n\n _filter() {\n if (!this.restoringFilter) {\n this.first = 0;\n this.firstChange.emit(this.first);\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n if (!this.value) {\n return;\n }\n\n if (!this.hasFilter()) {\n this.filteredValue = null;\n if (this.paginator) {\n this.totalRecords = this.value ? this.value.length : 0;\n }\n }\n else {\n let globalFilterFieldsArray;\n if (this.filters['global']) {\n if (!this.columns && !this.globalFilterFields)\n throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');\n else\n globalFilterFieldsArray = this.globalFilterFields||this.columns;\n }\n\n this.filteredValue = [];\n\n for (let i = 0; i < this.value.length; i++) {\n let localMatch = true;\n let globalMatch = false;\n let localFiltered = false;\n\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n localFiltered = true;\n let filterMeta = this.filters[prop];\n let filterField = prop;\n let filterValue = filterMeta.value;\n let filterMatchMode = filterMeta.matchMode || 'startsWith';\n let dataFieldValue = ObjectUtils.resolveFieldData(this.value[i], filterField);\n let filterConstraint = FilterUtils[filterMatchMode];\n\n if (!filterConstraint(dataFieldValue, filterValue, this.filterLocale)) {\n localMatch = false;\n }\n\n if (!localMatch) {\n break;\n }\n }\n }\n\n if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {\n for(let j = 0; j < globalFilterFieldsArray.length; j++) {\n let globalFilterField = globalFilterFieldsArray[j].field||globalFilterFieldsArray[j];\n globalMatch = FilterUtils[this.filters['global'].matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), this.filters['global'].value, this.filterLocale);\n\n if (globalMatch) {\n break;\n }\n }\n }\n\n let matches: boolean;\n if (this.filters['global']) {\n matches = localFiltered ? (localFiltered && localMatch && globalMatch) : globalMatch;\n }\n else {\n matches = localFiltered && localMatch;\n }\n\n if (matches) {\n this.filteredValue.push(this.value[i]);\n }\n }\n\n if (this.filteredValue.length === this.value.length) {\n this.filteredValue = null;\n }\n\n if (this.paginator) {\n this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;\n }\n }\n }\n\n this.onFilter.emit({\n filters: this.filters,\n filteredValue: this.filteredValue || this.value\n });\n\n this.tableService.onValueChange(this.value);\n\n if (this.isStateful() && !this.restoringFilter) {\n this.saveState();\n }\n\n if (this.restoringFilter) {\n this.restoringFilter = false;\n }\n\n this.cd.markForCheck();\n }\n\n hasFilter() {\n let empty = true;\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n empty = false;\n break;\n }\n }\n\n return !empty;\n }\n\n createLazyLoadMetadata(): any {\n return {\n first: this.first,\n rows: this.virtualScroll ? this.rows * 2: this.rows,\n sortField: this.sortField,\n sortOrder: this.sortOrder,\n filters: this.filters,\n globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,\n multiSortMeta: this.multiSortMeta\n };\n }\n\n public reset() {\n this._sortField = null;\n this._sortOrder = this.defaultSortOrder;\n this._multiSortMeta = null;\n this.tableService.onSort(null);\n\n this.filteredValue = null;\n this.filters = {};\n\n this.first = 0;\n this.firstChange.emit(this.first);\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n this.totalRecords = (this._value ? this._value.length : 0);\n }\n }\n\n public exportCSV(options?: any) {\n let data = this.filteredValue || this.value;\n let csv = '';\n\n if (options && options.selectionOnly) {\n data = this.selection || [];\n }\n\n //headers\n for (let i = 0; i < this.columns.length; i++) {\n let column = this.columns[i];\n if (column.exportable !== false && column.field) {\n csv += '\"' + (column.header || column.field) + '\"';\n\n if (i < (this.columns.length - 1)) {\n csv += this.csvSeparator;\n }\n }\n }\n\n //body\n data.forEach((record, i) => {\n csv += '\\n';\n for (let i = 0; i < this.columns.length; i++) {\n let column = this.columns[i];\n if (column.exportable !== false && column.field) {\n let cellData = ObjectUtils.resolveFieldData(record, column.field);\n\n if (cellData != null) {\n if (this.exportFunction) {\n cellData = this.exportFunction({\n data: cellData,\n field: column.field\n });\n }\n else\n cellData = String(cellData).replace(/\"/g, '\"\"');\n }\n else\n cellData = '';\n\n\n csv += '\"' + cellData + '\"';\n\n if (i < (this.columns.length - 1)) {\n csv += this.csvSeparator;\n }\n }\n }\n });\n\n let blob = new Blob([csv], {\n type: 'text/csv;charset=utf-8;'\n });\n\n if (window.navigator.msSaveOrOpenBlob) {\n navigator.msSaveOrOpenBlob(blob, this.exportFilename + '.csv');\n }\n else {\n let link = document.createElement(\"a\");\n link.style.display = 'none';\n document.body.appendChild(link);\n if (link.download !== undefined) {\n link.setAttribute('href', URL.createObjectURL(blob));\n link.setAttribute('download', this.exportFilename + '.csv');\n link.click();\n }\n else {\n csv = 'data:text/csv;charset=utf-8,' + csv;\n window.open(encodeURI(csv));\n }\n document.body.removeChild(link);\n }\n }\n\n updateEditingCell(cell, data, field, index) {\n this.editingCell = cell;\n this.editingCellData = data;\n this.editingCellField = field;\n this.editingCellRowIndex = index;\n this.bindDocumentEditListener();\n }\n\n isEditingCellValid() {\n return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);\n }\n\n bindDocumentEditListener() {\n if (!this.documentEditListener) {\n this.documentEditListener = (event) => {\n if (this.editingCell && !this.editingCellClick && this.isEditingCellValid()) {\n DomHandler.removeClass(this.editingCell, 'ui-editing-cell');\n this.editingCell = null;\n this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData, originalEvent: event, index: this.editingCellRowIndex });\n this.editingCellField = null;\n this.editingCellData = null;\n this.editingCellRowIndex = null;\n this.unbindDocumentEditListener();\n }\n\n this.editingCellClick = false;\n };\n\n document.addEventListener('click', this.documentEditListener);\n }\n }\n\n unbindDocumentEditListener() {\n if (this.documentEditListener) {\n document.removeEventListener('click', this.documentEditListener);\n this.documentEditListener = null;\n }\n }\n\n initRowEdit(rowData: any) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n this.editingRowKeys[dataKeyValue] = true;\n }\n\n saveRowEdit(rowData: any, rowElement: HTMLTableRowElement) {\n if (DomHandler.find(rowElement, '.ng-invalid.ng-dirty').length === 0) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n delete this.editingRowKeys[dataKeyValue];\n }\n }\n\n cancelRowEdit(rowData: any) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n delete this.editingRowKeys[dataKeyValue];\n }\n\n toggleRow(rowData: any, event?: Event) {\n if (!this.dataKey) {\n throw new Error('dataKey must be defined to use row expansion');\n }\n\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n\n if (this.expandedRowKeys[dataKeyValue] != null) {\n delete this.expandedRowKeys[dataKeyValue];\n this.onRowCollapse.emit({\n originalEvent: event,\n data: rowData\n });\n }\n else {\n if (this.rowExpandMode === 'single') {\n this.expandedRowKeys = {};\n }\n\n this.expandedRowKeys[dataKeyValue] = true;\n this.onRowExpand.emit({\n originalEvent: event,\n data: rowData\n });\n }\n\n if (event) {\n event.preventDefault();\n }\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n isRowExpanded(rowData: any): boolean {\n return this.expandedRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n }\n\n isRowEditing(rowData: any): boolean {\n return this.editingRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n }\n\n isSingleSelectionMode() {\n return this.selectionMode === 'single';\n }\n\n isMultipleSelectionMode() {\n return this.selectionMode === 'multiple';\n }\n\n onColumnResizeBegin(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);\n this.onColumnResize(event);\n event.preventDefault();\n }\n\n onColumnResize(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n DomHandler.addClass(this.containerViewChild.nativeElement, 'ui-unselectable-text');\n this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';\n this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';\n this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';\n\n this.resizeHelperViewChild.nativeElement.style.display = 'block';\n }\n\n onColumnResizeEnd(event, column) {\n let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;\n let columnWidth = column.offsetWidth;\n let minWidth = parseInt(column.style.minWidth || 15);\n\n if (columnWidth + delta < minWidth) {\n delta = minWidth - columnWidth;\n }\n\n const newColumnWidth = columnWidth + delta;\n\n if (newColumnWidth >= minWidth) {\n if (this.columnResizeMode === 'fit') {\n let nextColumn = column.nextElementSibling;\n while (!nextColumn.offsetParent) {\n nextColumn = nextColumn.nextElementSibling;\n }\n\n if (nextColumn) {\n let nextColumnWidth = nextColumn.offsetWidth - delta;\n let nextColumnMinWidth = nextColumn.style.minWidth || 15;\n\n if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n if (this.scrollable) {\n let scrollableView = this.findParentScrollableView(column);\n let scrollableBodyTable = DomHandler.findSingle(scrollableView, 'table.ui-table-scrollable-body-table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.ui-table-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.ui-table-scrollable-footer-table');\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n }\n else {\n column.style.width = newColumnWidth + 'px';\n if (nextColumn) {\n nextColumn.style.width = nextColumnWidth + 'px';\n }\n }\n }\n }\n }\n else if (this.columnResizeMode === 'expand') {\n if (newColumnWidth > minWidth) {\n if (this.scrollable) {\n this.setScrollableItemsWidthOnExpandResize(column, newColumnWidth, delta);\n }\n else {\n this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';\n column.style.width = newColumnWidth + 'px';\n let containerWidth = this.tableViewChild.nativeElement.style.width;\n this.containerViewChild.nativeElement.style.width = containerWidth + 'px';\n }\n }\n }\n\n this.onColResize.emit({\n element: column,\n delta: delta\n });\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n this.resizeHelperViewChild.nativeElement.style.display = 'none';\n DomHandler.removeClass(this.containerViewChild.nativeElement, 'ui-unselectable-text');\n }\n\n setScrollableItemsWidthOnExpandResize(column, newColumnWidth, delta) {\n let scrollableView = column ? this.findParentScrollableView(column) : this.containerViewChild.nativeElement;\n let scrollableBody = DomHandler.findSingle(scrollableView, '.ui-table-scrollable-body');\n let scrollableHeader = DomHandler.findSingle(scrollableView, '.ui-table-scrollable-header');\n let scrollableFooter = DomHandler.findSingle(scrollableView, '.ui-table-scrollable-footer');\n let scrollableBodyTable = DomHandler.findSingle(scrollableBody, 'table.ui-table-scrollable-body-table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableHeader, 'table.ui-table-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableFooter, 'table.ui-table-scrollable-footer-table');\n\n const scrollableBodyTableWidth = column ? scrollableBodyTable.offsetWidth + delta : newColumnWidth;\n const scrollableHeaderTableWidth = column ? scrollableHeaderTable.offsetWidth + delta : newColumnWidth;\n const isContainerInViewport = this.containerViewChild.nativeElement.offsetWidth >= scrollableBodyTableWidth;\n\n let setWidth = (container, table, width, isContainerInViewport) => {\n if (container && table) {\n container.style.width = isContainerInViewport ? width + DomHandler.calculateScrollbarWidth(scrollableBody) + 'px' : 'auto'\n table.style.width = width + 'px';\n }\n };\n\n setWidth(scrollableBody, scrollableBodyTable, scrollableBodyTableWidth, isContainerInViewport);\n setWidth(scrollableHeader, scrollableHeaderTable, scrollableHeaderTableWidth, isContainerInViewport);\n setWidth(scrollableFooter, scrollableFooterTable, scrollableHeaderTableWidth, isContainerInViewport);\n\n if (column) {\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);\n }\n }\n\n findParentScrollableView(column) {\n if (column) {\n let parent = column.parentElement;\n while (parent && !DomHandler.hasClass(parent, 'ui-table-scrollable-view')) {\n parent = parent.parentElement;\n }\n\n return parent;\n }\n else {\n return null;\n }\n }\n\n resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {\n if (table) {\n let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;\n\n if (colGroup) {\n let col = colGroup.children[resizeColumnIndex];\n let nextCol = col.nextElementSibling;\n col.style.width = newColumnWidth + 'px';\n\n if (nextCol && nextColumnWidth) {\n nextCol.style.width = nextColumnWidth + 'px';\n }\n }\n else {\n throw \"Scrollable tables require a colgroup to support resizable columns\";\n }\n }\n }\n\n onColumnDragStart(event, columnElement) {\n this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);\n this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);\n this.draggedColumn = columnElement;\n event.dataTransfer.setData('text', 'b'); // For firefox\n }\n\n onColumnDragEnter(event, dropHeader) {\n if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n event.preventDefault();\n let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);\n let dropHeaderOffset = DomHandler.getOffset(dropHeader);\n\n if (this.draggedColumn != dropHeader) {\n let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropHeader, 'preorderablecolumn');\n let targetLeft = dropHeaderOffset.left - containerOffset.left;\n let targetTop = containerOffset.top - dropHeaderOffset.top;\n let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n\n this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n\n if (event.pageX > columnCenter) {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = 1;\n }\n else {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = -1;\n }\n\n if ((dropIndex - dragIndex === 1 && this.dropPosition === -1) || (dropIndex - dragIndex === -1 && this.dropPosition === 1)) {\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n }\n else {\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\n }\n }\n else {\n event.dataTransfer.dropEffect = 'none';\n }\n }\n }\n\n onColumnDragLeave(event) {\n if (this.reorderableColumns && this.draggedColumn) {\n event.preventDefault();\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n }\n }\n\n onColumnDrop(event, dropColumn) {\n event.preventDefault();\n if (this.draggedColumn) {\n let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'preorderablecolumn');\n let allowDrop = (dragIndex != dropIndex);\n if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n allowDrop = false;\n }\n\n if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {\n dropIndex = dropIndex + 1;\n }\n\n if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {\n dropIndex = dropIndex - 1;\n }\n\n if (allowDrop) {\n ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n\n this.onColReorder.emit({\n dragIndex: dragIndex,\n dropIndex: dropIndex,\n columns: this.columns\n });\n\n if (this.isStateful()) {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.saveState();\n });\n });\n }\n }\n\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n this.draggedColumn.draggable = false;\n this.draggedColumn = null;\n this.dropPosition = null;\n }\n }\n\n onRowDragStart(event, index) {\n this.rowDragging = true;\n this.draggedRowIndex = index;\n event.dataTransfer.setData('text', 'b'); // For firefox\n }\n\n onRowDragOver(event, index, rowElement) {\n if (this.rowDragging && this.draggedRowIndex !== index) {\n let rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop();\n let pageY = event.pageY;\n let rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2;\n let prevRowElement = rowElement.previousElementSibling;\n\n if (pageY < rowMidY) {\n DomHandler.removeClass(rowElement, 'ui-table-dragpoint-bottom');\n\n this.droppedRowIndex = index;\n if (prevRowElement)\n DomHandler.addClass(prevRowElement, 'ui-table-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'ui-table-dragpoint-top');\n }\n else {\n if (prevRowElement)\n DomHandler.removeClass(prevRowElement, 'ui-table-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'ui-table-dragpoint-top');\n\n this.droppedRowIndex = index + 1;\n DomHandler.addClass(rowElement, 'ui-table-dragpoint-bottom');\n }\n }\n }\n\n onRowDragLeave(event, rowElement) {\n let prevRowElement = rowElement.previousElementSibling;\n if (prevRowElement) {\n DomHandler.removeClass(prevRowElement, 'ui-table-dragpoint-bottom');\n }\n\n DomHandler.removeClass(rowElement, 'ui-table-dragpoint-bottom');\n DomHandler.removeClass(rowElement, 'ui-table-dragpoint-top');\n }\n\n onRowDragEnd(event) {\n this.rowDragging = false;\n this.draggedRowIndex = null;\n this.droppedRowIndex = null;\n }\n\n onRowDrop(event, rowElement) {\n if (this.droppedRowIndex != null) {\n let dropIndex = (this.draggedRowIndex > this.droppedRowIndex) ? this.droppedRowIndex : (this.droppedRowIndex === 0) ? 0 : this.droppedRowIndex - 1;\n ObjectUtils.reorderArray(this.value, this.draggedRowIndex, dropIndex);\n\n this.onRowReorder.emit({\n dragIndex: this.draggedRowIndex,\n dropIndex: dropIndex\n });\n }\n //cleanup\n this.onRowDragLeave(event, rowElement);\n this.onRowDragEnd(event);\n }\n\n handleVirtualScroll(event) {\n this.first = (event.page - 1) * this.rows;\n this.firstChange.emit(this.first);\n this.virtualScrollCallback = event.callback;\n\n this.zone.run(() => {\n if (this.virtualScrollTimer) {\n clearTimeout(this.virtualScrollTimer);\n }\n\n this.virtualScrollTimer = setTimeout(() => {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }, this.virtualScrollDelay);\n });\n }\n\n isEmpty() {\n let data = this.filteredValue||this.value;\n return data == null || data.length == 0;\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\n }\n\n getStorage() {\n switch(this.stateStorage) {\n case 'local':\n return window.localStorage;\n\n case 'session':\n return window.sessionStorage;\n\n default:\n throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n }\n }\n\n isStateful() {\n return this.stateKey != null;\n }\n\n saveState() {\n const storage = this.getStorage();\n let state: TableState = {};\n\n if (this.paginator) {\n state.first = this.first;\n state.rows = this.rows;\n }\n\n if (this.sortField) {\n state.sortField = this.sortField;\n state.sortOrder = this.sortOrder;\n }\n\n if (this.multiSortMeta) {\n state.multiSortMeta = this.multiSortMeta;\n }\n\n if (this.hasFilter()) {\n state.filters = this.filters;\n }\n\n if (this.resizableColumns) {\n this.saveColumnWidths(state);\n }\n\n if (this.reorderableColumns) {\n this.saveColumnOrder(state);\n }\n\n if (this.selection) {\n state.selection = this.selection;\n }\n\n if (Object.keys(this.expandedRowKeys).length) {\n state.expandedRowKeys = this.expandedRowKeys;\n }\n\n if (Object.keys(state).length) {\n storage.setItem(this.stateKey, JSON.stringify(state));\n }\n\n this.onStateSave.emit(state);\n }\n\n clearState() {\n const storage = this.getStorage();\n\n if (this.stateKey) {\n storage.removeItem(this.stateKey);\n }\n }\n\n restoreState() {\n const storage = this.getStorage();\n const stateString = storage.getItem(this.stateKey);\n\n if (stateString) {\n let state: TableState = JSON.parse(stateString);\n\n if (this.paginator) {\n this.first = state.first;\n this.rows = state.rows;\n this.firstChange.emit(this.first);\n this.rowsChange.emit(this.rows);\n }\n\n if (state.sortField) {\n this.restoringSort = true;\n this._sortField = state.sortField;\n this._sortOrder = state.sortOrder;\n }\n\n if (state.multiSortMeta) {\n this.restoringSort = true;\n this._multiSortMeta = state.multiSortMeta;\n }\n\n if (state.filters) {\n this.restoringFilter = true;\n this.filters = state.filters;\n }\n\n if (this.resizableColumns) {\n this.columnWidthsState = state.columnWidths;\n this.tableWidthState = state.tableWidth;\n }\n\n if (state.expandedRowKeys) {\n this.expandedRowKeys = state.expandedRowKeys;\n }\n\n if (state.selection) {\n Promise.resolve(null).then(() => this.selectionChange.emit(state.selection));\n }\n\n this.stateRestored = true;\n\n this.onStateRestore.emit(state);\n }\n }\n\n saveColumnWidths(state) {\n let widths = [];\n let headers = DomHandler.find(this.containerViewChild.nativeElement, '.ui-table-thead > tr:first-child > th');\n headers.map(header => widths.push(DomHandler.getOuterWidth(header)));\n state.columnWidths = widths.join(',');\n\n if (this.columnResizeMode === 'expand') {\n state.tableWidth = this.scrollable ? DomHandler.findSingle(this.containerViewChild.nativeElement, '.ui-table-scrollable-header-table').style.width :\n DomHandler.getOuterWidth(this.tableViewChild.nativeElement) + 'px';\n }\n }\n\n restoreColumnWidths() {\n if (this.columnWidthsState) {\n let widths = this.columnWidthsState.split(',');\n\n if (this.columnResizeMode === 'expand' && this.tableWidthState) {\n if (this.scrollable) {\n this.setScrollableItemsWidthOnExpandResize(null, this.tableWidthState, 0);\n }\n else {\n this.tableViewChild.nativeElement.style.width = this.tableWidthState;\n this.containerViewChild.nativeElement.style.width = this.tableWidthState;\n }\n }\n\n if (this.scrollable) {\n let headerCols = DomHandler.find(this.containerViewChild.nativeElement, '.ui-table-scrollable-header-table > colgroup > col');\n let bodyCols = DomHandler.find(this.containerViewChild.nativeElement, '.ui-table-scrollable-body-table > colgroup > col');\n\n headerCols.map((col, index) => col.style.width = widths[index] + 'px');\n bodyCols.map((col, index) => col.style.width = widths[index] + 'px');\n }\n else {\n let headers = DomHandler.find(this.tableViewChild.nativeElement, '.ui-table-thead > tr:first-child > th');\n headers.map((header, index) => header.style.width = widths[index] + 'px');\n }\n }\n }\n\n saveColumnOrder(state) {\n if (this.columns) {\n let columnOrder: string[] = [];\n this.columns.map(column => {\n columnOrder.push(column.field||column.key)\n });\n\n state.columnOrder = columnOrder;\n }\n }\n\n restoreColumnOrder() {\n const storage = this.getStorage();\n const stateString = storage.getItem(this.stateKey);\n if (stateString) {\n let state: TableState = JSON.parse(stateString);\n let columnOrder = state.columnOrder;\n if (columnOrder) {\n let reorderedColumns = [];\n columnOrder.map(key => reorderedColumns.push(this.findColumnByKey(key)));\n this.columnOrderStateRestored = true;\n this.columns = reorderedColumns;\n }\n }\n }\n\n findColumnByKey(key) {\n if (this.columns) {\n for (let col of this.columns) {\n if (col.key === key || col.field === key)\n return col;\n else\n continue;\n }\n }\n else {\n return null;\n }\n }\n\n ngOnDestroy() {\n this.unbindDocumentEditListener();\n this.editingCell = null;\n this.initialized = null;\n }\n}\n\n@Component({\n selector: '[pTableBody]',\n template: `\n <ng-container *ngIf=\"!dt.expandedRowTemplate\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.expandedRowTemplate\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n <ng-container *ngTemplateOutlet=\"dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"dt.isEmpty() && !dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n `\n})\nexport class TableBody {\n\n @Input(\"pTableBody\") columns: any[];\n\n @Input(\"pTableBodyTemplate\") template: TemplateRef<any>;\n\n @Input() frozen: boolean;\n\n constructor(public dt: Table) {}\n}\n\n@Component({\n selector: '[pScrollableView]',\n template: `\n <div #scrollHeader class=\"ui-table-scrollable-header ui-widget-header\">\n <div #scrollHeaderBox class=\"ui-table-scrollable-header-box\">\n <table class=\"ui-table-scrollable-header-table\" [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"ui-table-thead\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenHeaderTemplate||dt.headerTemplate : dt.headerTemplate; context {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"ui-table-tbody\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"dt.frozenValue\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"dt.frozenRowsTemplate; context: {$implicit: rowData, rowIndex: rowIndex, columns: columns}\"></ng-container>\n </ng-template>\n </tbody>\n </table>\n </div>\n </div>\n <div #scrollBody class=\"ui-table-scrollable-body\">\n <table #scrollTable [ngClass]=\"{'ui-table-scrollable-body-table': true, 'ui-table-virtual-table': dt.virtualScroll}\" [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tbody class=\"ui-table-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <table #loadingTable *ngIf=\"dt.virtualScroll && dt.loadingBodyTemplate != null\" [ngClass]=\"{'ui-table-scrollable-body-table ui-table-loading-virtual-table': true, 'ui-table-virtual-table': dt.virtualScroll}\">\n <tbody class=\"ui-table-tbody\">\n <ng-template ngFor [ngForOf]=\"loadingArray\">\n <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {columns: columns}\"></ng-container>\n </ng-template>\n </tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n <div #virtualScroller class=\"ui-table-virtual-scroller\" *ngIf=\"dt.virtualScroll\"></div>\n </div>\n <div #scrollFooter class=\"ui-table-scrollable-footer ui-widget-header\">\n <div #scrollFooterBox class=\"ui-table-scrollable-footer-box\">\n <table class=\"ui-table-scrollable-footer-table\" [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tfoot class=\"ui-table-tfoot\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenFooterTemplate||dt.footerTemplate : dt.footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n </div>\n `\n})\nexport class ScrollableView implements AfterViewInit,OnDestroy,AfterViewChecked {\n\n @Input(\"pScrollableView\") columns: any[];\n\n @Input() frozen: boolean;\n\n @ViewChild('scrollHeader') scrollHeaderViewChild: ElementRef;\n\n @ViewChild('scrollHeaderBox') scrollHeaderBoxViewChild: ElementRef;\n\n @ViewChild('scrollBody') scrollBodyViewChild: ElementRef;\n\n @ViewChild('scrollTable') scrollTableViewChild: ElementRef;\n\n @ViewChild('loadingTable') scrollLoadingTableViewChild: ElementRef;\n\n @ViewChild('scrollFooter') scrollFooterViewChild: ElementRef;\n\n @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n @ViewChild('virtualScroller') virtualScrollerViewChild: ElementRef;\n\n @ViewChild('scrollableAligner') scrollableAlignerViewChild: ElementRef;\n\n headerScrollListener: Function;\n\n bodyScrollListener: Function;\n\n footerScrollListener: Function;\n\n frozenSiblingBody: HTMLDivElement;\n\n scrollableSiblingBody: Element;\n\n _scrollHeight: string;\n\n subscription: Subscription;\n\n totalRecordsSubscription: Subscription;\n\n columnsSubscription: Subscription;\n\n initialized: boolean;\n\n preventBodyScrollPropagation: boolean;\n\n loadingArray: number[] = [];\n\n lastBodyScrollTop: number = 0;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {\n this.subscription = this.dt.tableService.valueSource$.subscribe(() => {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.alignScrollBar();\n\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'none';\n }\n }, 50);\n });\n });\n\n if (this.dt.virtualScroll) {\n this.totalRecordsSubscription = this.dt.tableService.totalRecordsSource$.subscribe(() => {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.setVirtualScrollerHeight();\n }, 50);\n });\n });\n }\n\n this.loadingArray = Array(this.dt.rows).fill(1);\n\n this.initialized = false;\n }\n\n @Input() get scrollHeight(): string {\n return this._scrollHeight;\n }\n set scrollHeight(val: string) {\n this._scrollHeight = val;\n this.setScrollHeight();\n }\n\n ngAfterViewChecked() {\n if (!this.initialized && this.el.nativeElement.offsetParent) {\n this.alignScrollBar();\n this.setScrollHeight();\n this.initialized = true;\n }\n }\n\n ngAfterViewInit() {\n if (!this.frozen) {\n if (this.dt.frozenColumns || this.dt.frozenBodyTemplate) {\n DomHandler.addClass(this.el.nativeElement, 'ui-table-unfrozen-view');\n }\n\n let frozenView = this.el.nativeElement.previousElementSibling;\n if (frozenView) {\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.ui-table-scrollable-body');\n }\n }\n else {\n if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {\n this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';\n }\n let scrollableView = this.el.nativeElement.nextElementSibling;\n if (scrollableView) {\n this.scrollableSiblingBody = DomHandler.findSingle(scrollableView, '.ui-table-scrollable-body');\n }\n }\n\n this.bindEvents();\n this.setScrollHeight();\n this.alignScrollBar();\n\n if (this.frozen) {\n this.columnsSubscription = this.dt.tableService.columnsSource$.subscribe(() => {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.setScrollHeight();\n }, 50);\n });\n });\n }\n\n if (this.dt.virtualScroll) {\n this.setVirtualScrollerHeight();\n\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'table';\n }\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.headerScrollListener = this.onHeaderScroll.bind(this);\n this.scrollHeaderViewChild.nativeElement.addEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.footerScrollListener = this.onFooterScroll.bind(this);\n this.scrollFooterViewChild.nativeElement.addEventListener('scroll', this.footerScrollListener);\n }\n\n if (!this.frozen) {\n this.bodyScrollListener = this.onBodyScroll.bind(this);\n this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);\n }\n });\n }\n\n unbindEvents() {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderViewChild.nativeElement.removeEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterViewChild.nativeElement.removeEventListener('scroll', this.footerScrollListener);\n }\n\n this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n\n onHeaderScroll(event) {\n const scrollLeft = this.scrollHeaderViewChild.nativeElement.scrollLeft;\n\n this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterViewChild.nativeElement.scrollLeft = scrollLeft;\n }\n\n this.preventBodyScrollPropagation = true;\n }\n\n onFooterScroll(event) {\n const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;\n\n this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderViewChild.nativeElement.scrollLeft = scrollLeft;\n }\n\n this.preventBodyScrollPropagation = true;\n }\n\n onBodyScroll(event) {\n if (this.preventBodyScrollPropagation) {\n this.preventBodyScrollPropagation = false;\n return;\n }\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderBoxViewChild.nativeElement.style.marginLeft = -1 * this.scrollBodyViewChild.nativeElement.scrollLeft + 'px';\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * this.scrollBodyViewChild.nativeElement.scrollLeft + 'px';\n }\n\n if (this.frozenSiblingBody) {\n this.frozenSiblingBody.scrollTop = this.scrollBodyViewChild.nativeElement.scrollTop;\n }\n\n if (this.dt.virtualScroll) {\n requestAnimationFrame(() => {\n if (this.lastBodyScrollTop !== this.scrollBodyViewChild.nativeElement.scrollTop) {\n this.lastBodyScrollTop = this.scrollBodyViewChild.nativeElement.scrollTop;\n let viewport = DomHandler.getOuterHeight(this.scrollBodyViewChild.nativeElement);\n let tableHeight = DomHandler.getOuterHeight(this.scrollTableViewChild.nativeElement);\n let pageHeight = this.dt.virtualRowHeight * this.dt.rows;\n let virtualTableHeight = DomHandler.getOuterHeight(this.virtualScrollerViewChild.nativeElement);\n let pageCount = (virtualTableHeight / pageHeight)||1;\n let scrollBodyTop = this.scrollTableViewChild.nativeElement.style.top||'0';\n\n if ((this.scrollBodyViewChild.nativeElement.scrollTop + viewport > parseFloat(scrollBodyTop) + tableHeight) || (this.scrollBodyViewChild.nativeElement.scrollTop < parseFloat(scrollBodyTop))) {\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'table';\n this.scrollLoadingTableViewChild.nativeElement.style.top = this.scrollBodyViewChild.nativeElement.scrollTop + 'px';\n }\n\n let page = Math.floor((this.scrollBodyViewChild.nativeElement.scrollTop * pageCount) / (this.scrollBodyViewChild.nativeElement.scrollHeight)) + 1;\n this.dt.handleVirtualScroll({\n page: page,\n callback: () => {\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'none';\n }\n\n this.scrollTableViewChild.nativeElement.style.top = ((page - 1) * pageHeight) + 'px';\n\n if (this.frozenSiblingBody) {\n (<HTMLElement> this.frozenSiblingBody.children[0]).style.top = this.scrollTableViewChild.nativeElement.style.top;\n }\n\n this.dt.anchorRowIndex = null;\n }\n });\n }\n }\n });\n }\n }\n\n setScrollHeight() {\n if (this.scrollHeight && this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n if (this.frozenSiblingBody) {\n this.scrollBodyViewChild.nativeElement.style.maxHeight = this.frozenSiblingBody.style.maxHeight;\n }\n else {\n if (this.scrollHeight.indexOf('%') !== -1) {\n let relativeHeight;\n this.scrollBodyViewChild.nativeElement.style.visibility = 'hidden';\n this.scrollBodyViewChild.nativeElement.style.height = '100px'; //temporary height to calculate static height\n let containerHeight = DomHandler.getOuterHeight(this.dt.el.nativeElement.children[0]);\n\n if (this.scrollHeight.includes(\"calc\")) {\n let percentHeight = parseInt(this.scrollHeight.slice(this.scrollHeight.indexOf(\"(\") + 1, this.scrollHeight.indexOf(\"%\")));\n let diffValue = parseInt(this.scrollHeight.slice(this.scrollHeight.indexOf(\"-\") + 1, this.scrollHeight.indexOf(\")\")));\n relativeHeight = (DomHandler.getOuterHeight(this.dt.el.nativeElement.parentElement) * percentHeight / 100) - diffValue;\n }\n else {\n relativeHeight = DomHandler.getOuterHeight(this.dt.el.nativeElement.parentElement) * parseInt(this.scrollHeight) / 100;\n }\n\n let staticHeight = containerHeight - 100; //total height of headers, footers, paginators\n let scrollBodyHeight = (relativeHeight - staticHeight);\n\n if (this.frozen) {\n scrollBodyHeight -= DomHandler.calculateScrollbarWidth();\n }\n\n this.scrollBodyViewChild.nativeElement.style.height = 'auto';\n this.scrollBodyViewChild.nativeElement.style.maxHeight = scrollBodyHeight + 'px';\n this.scrollBodyViewChild.nativeElement.style.visibility = 'visible';\n }\n else {\n this.scrollBodyViewChild.nativeElement.style.maxHeight = this.scrollHeight;\n }\n }\n }\n }\n\n setVirtualScrollerHeight() {\n if (this.virtualScrollerViewChild.nativeElement) {\n this.virtualScrollerViewChild.nativeElement.style.height = this.dt.totalRecords * this.dt.virtualRowHeight + 'px';\n }\n }\n\n hasVerticalOverflow() {\n return DomHandler.getOuterHeight(this.scrollTableViewChild.nativeElement) > DomHandler.getOuterHeight(this.scrollBodyViewChild.nativeElement);\n }\n\n alignScrollBar() {\n if (!this.frozen) {\n let scrollBarWidth = this.hasVerticalOverflow() ? DomHandler.calculateScrollbarWidth() : 0;\n this.scrollHeaderBoxViewChild.nativeElement.style.marginRight = scrollBarWidth + 'px';\n\n if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginRight = scrollBarWidth + 'px';\n }\n }\n this.initialized = false;\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n\n this.frozenSiblingBody = null;\n\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n if (this.totalRecordsSubscription) {\n this.totalRecordsSubscription.unsubscribe();\n }\n\n if (this.columnsSubscription) {\n this.columnsSubscription.unsubscribe();\n }\n\n this.initialized = false;\n }\n}\n\n@Directive({\n selector: '[pSortableColumn]',\n host: {\n '[class.ui-sortable-column]': 'isEnabled()',\n '[class.ui-state-highlight]': 'sorted',\n '[attr.tabindex]': 'isEnabled() ? \"0\" : null',\n '[attr.role]': '\"columnheader\"',\n '[attr.aria-sort]': 'sortOrder'\n }\n})\nexport class SortableColumn implements OnInit, OnDestroy {\n\n @Input(\"pSortableColumn\") field: string;\n\n @Input() pSortableColumnDisabled: boolean;\n\n sorted: boolean;\n\n sortOrder: string;\n\n subscription: Subscription;\n\n constructor(public dt: Table) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.updateSortState();\n }\n }\n\n updateSortState() {\n this.sorted = this.dt.isSorted(this.field);\n this.sortOrder = this.sorted ? (this.dt.sortOrder === 1 ? 'ascending' : 'descending') : 'none';\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled()) {\n this.updateSortState();\n this.dt.sort({\n originalEvent: event,\n field: this.field\n });\n\n DomHandler.clearSelection();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKey(event: MouseEvent) {\n this.onClick(event);\n }\n\n isEnabled() {\n return this.pSortableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n\n@Component({\n selector: 'p-sortIcon',\n template: `\n <i class=\"ui-sortable-column-icon pi pi-fw\" [ngClass]=\"{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}\"></i>\n `\n})\nexport class SortIcon implements OnInit, OnDestroy {\n\n @Input() field: string;\n\n subscription: Subscription;\n\n sortOrder: number;\n\n constructor(public dt: Table) {\n this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n\n ngOnInit() {\n this.updateSortState();\n }\n\n onClick(event){\n event.preventDefault();\n }\n\n updateSortState() {\n if (this.dt.sortMode === 'single') {\n this.sortOrder = this.dt.isSorted(this.field) ? this.dt.sortOrder : 0;\n }\n else if (this.dt.sortMode === 'multiple') {\n let sortMeta = this.dt.getSortMeta(this.field);\n this.sortOrder = sortMeta ? sortMeta.order: 0;\n }\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Directive({\n selector: '[pSelectableRow]',\n host: {\n '[class.ui-selectable-row]': 'isEnabled()',\n '[class.ui-state-highlight]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class SelectableRow implements OnInit, OnDestroy {\n\n @Input(\"pSelectableRow\") data: any;\n\n @Input(\"pSelectableRowIndex\") index: number;\n\n @Input() pSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.dt.isSelected(this.data);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.dt.isSelected(this.data);\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowTouchEnd(event);\n }\n }\n\n @HostListener('keydown.arrowdown', ['$event'])\n onArrowDownKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n const row = <HTMLTableRowElement>event.currentTarget;\n const nextRow = this.findNextSelectableRow(row);\n\n if (nextRow) {\n nextRow.focus();\n }\n\n event.preventDefault();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n onArrowUpKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n const row = <HTMLTableRowElement>event.currentTarget;\n const prevRow = this.findPrevSelectableRow(row);\n\n if (prevRow) {\n prevRow.focus();\n }\n\n event.preventDefault();\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n\n findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let nextRow = <HTMLTableRowElement> row.nextElementSibling;\n if (nextRow) {\n if (DomHandler.hasClass(nextRow, 'ui-selectable-row'))\n return nextRow;\n else\n return this.findNextSelectableRow(nextRow);\n }\n else {\n return null;\n }\n }\n\n findPrevSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let prevRow = <HTMLTableRowElement> row.previousElementSibling;\n if (prevRow) {\n if (DomHandler.hasClass(prevRow, 'ui-selectable-row'))\n return prevRow;\n else\n return this.findPrevSelectableRow(prevRow);\n }\n else {\n return null;\n }\n }\n\n isEnabled() {\n return this.pSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pSelectableRowDblClick]',\n host: {\n '[class.ui-selectable-row]': 'isEnabled()',\n '[class.ui-state-highlight]': 'selected'\n }\n})\nexport class SelectableRowDblClick implements OnInit, OnDestroy {\n\n @Input(\"pSelectableRowDblClick\") data: any;\n\n @Input(\"pSelectableRowIndex\") index: number;\n\n @Input() pSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.dt.isSelected(this.data);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.dt.isSelected(this.data);\n }\n }\n\n @HostListener('dblclick', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n }\n\n isEnabled() {\n return this.pSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pContextMenuRow]',\n host: {\n '[class.ui-contextmenu-selected]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class ContextMenuRow {\n\n @Input(\"pContextMenuRow\") data: any;\n\n @Input(\"pContextMenuRowIndex\") index: number;\n\n @Input() pContextMenuRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, private el: ElementRef) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.contextMenuSource$.subscribe((data) => {\n this.selected = this.dt.equals(this.data, data);\n });\n }\n }\n\n @HostListener('contextmenu', ['$event'])\n onContextMenu(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowRightClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n\n this.el.nativeElement.focus();\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.pContextMenuRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pRowToggler]'\n})\nexport class RowToggler {\n\n @Input('pRowToggler') data: any;\n\n @Input() pRowTogglerDisabled: boolean;\n\n constructor(public dt: Table) { }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.toggleRow(this.data, event);\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.pRowTogglerDisabled !== true;\n }\n}\n\n@Directive({\n selector: '[pResizableColumn]'\n})\nexport class ResizableColumn implements AfterViewInit, OnDestroy {\n\n @Input() pResizableColumnDisabled: boolean;\n\n resizer: HTMLSpanElement;\n\n resizerMouseDownListener: any;\n\n documentMouseMoveListener: any;\n\n documentMouseUpListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'ui-resizable-column');\n this.resizer = document.createElement('span');\n this.resizer.className = 'ui-column-resizer ui-clickable';\n this.el.nativeElement.appendChild(this.resizer);\n\n this.zone.runOutsideAngular(() => {\n this.resizerMouseDownListener = this.onMouseDown.bind(this);\n this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);\n });\n }\n }\n\n bindDocumentEvents() {\n this.zone.runOutsideAngular(() => {\n this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);\n document.addEventListener('mousemove', this.documentMouseMoveListener);\n\n this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);\n document.addEventListener('mouseup', this.documentMouseUpListener);\n });\n }\n\n unbindDocumentEvents() {\n if (this.documentMouseMoveListener) {\n document.removeEventListener('mousemove', this.documentMouseMoveListener);\n this.documentMouseMoveListener = null;\n }\n\n if (this.documentMouseUpListener) {\n document.removeEventListener('mouseup', this.documentMouseUpListener);\n this.documentMouseUpListener = null;\n }\n }\n\n onMouseDown(event: MouseEvent) {\n if (event.which === 1) {\n this.dt.onColumnResizeBegin(event);\n this.bindDocumentEvents();\n }\n }\n\n onDocumentMouseMove(event: MouseEvent) {\n this.dt.onColumnResize(event);\n }\n\n onDocumentMouseUp(event: MouseEvent) {\n this.dt.onColumnResizeEnd(event, this.el.nativeElement);\n this.unbindDocumentEvents();\n }\n\n isEnabled() {\n return this.pResizableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.resizerMouseDownListener) {\n this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);\n }\n\n this.unbindDocumentEvents();\n }\n}\n\n@Directive({\n selector: '[pReorderableColumn]'\n})\nexport class ReorderableColumn implements AfterViewInit, OnDestroy {\n\n @Input() pReorderableColumnDisabled: boolean;\n\n dragStartListener: any;\n\n dragOverListener: any;\n\n dragEnterListener: any;\n\n dragLeaveListener: any;\n\n mouseDownListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n this.dragStartListener = this.onDragStart.bind(this);\n this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n this.dragOverListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n this.dragEnterListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);\n\n this.dragLeaveListener = this.onDragLeave.bind(this);\n this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n });\n }\n\n unbindEvents() {\n if (this.mouseDownListener) {\n document.removeEventListener('mousedown', this.mouseDownListener);\n this.mouseDownListener = null;\n }\n\n if (this.dragOverListener) {\n document.removeEventListener('dragover', this.dragOverListener);\n this.dragOverListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragLeaveListener) {\n document.removeEventListener('dragleave', this.dragLeaveListener);\n this.dragLeaveListener = null;\n }\n }\n\n onMouseDown(event) {\n if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'ui-column-resizer'))\n this.el.nativeElement.draggable = false;\n else\n this.el.nativeElement.draggable = true;\n }\n\n onDragStart(event) {\n this.dt.onColumnDragStart(event, this.el.nativeElement);\n }\n\n onDragOver(event) {\n event.preventDefault();\n }\n\n onDragEnter(event) {\n this.dt.onColumnDragEnter(event, this.el.nativeElement);\n }\n\n onDragLeave(event) {\n this.dt.onColumnDragLeave(event);\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled()) {\n this.dt.onColumnDrop(event, this.el.nativeElement);\n }\n }\n\n isEnabled() {\n return this.pReorderableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n }\n\n}\n\n@Directive({\n selector: '[pEditableColumn]'\n})\nexport class EditableColumn implements AfterViewInit {\n\n @Input(\"pEditableColumn\") data: any;\n\n @Input(\"pEditableColumnField\") field: any;\n\n @Input(\"pEditableColumnRowIndex\") rowIndex: number;\n\n @Input() pEditableColumnDisabled: boolean;\n\n @Input() pFocusCellSelector: string;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'ui-editable-column');\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled()) {\n this.dt.editingCellClick = true;\n\n if (this.dt.editingCell) {\n if (this.dt.editingCell !== this.el.nativeElement) {\n if (!this.dt.isEditingCellValid()) {\n return;\n }\n\n this.closeEditingCell(true, event);\n this.openCell();\n }\n }\n else {\n this.openCell();\n }\n }\n }\n\n openCell() {\n this.dt.updateEditingCell(this.el.nativeElement, this.data, this.field, this.rowIndex);\n DomHandler.addClass(this.el.nativeElement, 'ui-editing-cell');\n this.dt.onEditInit.emit({field: this.field, data: this.data, index: this.rowIndex});\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n let focusCellSelector = this.pFocusCellSelector || 'input, textarea, select';\n let focusableElement = DomHandler.findSingle(this.el.nativeElement, focusCellSelector);\n\n if (focusableElement) {\n focusableElement.focus();\n }\n }, 50);\n });\n }\n\n closeEditingCell(completed, event) {\n if (completed)\n this.dt.onEditComplete.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.rowIndex});\n else\n this.dt.onEditCancel.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.rowIndex});\n\n DomHandler.removeClass(this.dt.editingCell, 'ui-editing-cell');\n this.dt.editingCell = null;\n this.dt.editingCellData = null;\n this.dt.editingCellField = null;\n this.dt.unbindDocumentEditListener();\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n event.preventDefault();\n }\n }\n\n @HostListener('keydown.escape', ['$event'])\n onEscapeKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(false, event);\n }\n\n event.preventDefault();\n }\n }\n\n @HostListener('keydown.tab', ['$event'])\n @HostListener('keydown.shift.tab', ['$event'])\n @HostListener('keydown.meta.tab', ['$event'])\n onShiftKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (event.shiftKey)\n this.moveToPreviousCell(event);\n else{\n this.moveToNextCell(event);\n }\n }\n }\n\n findCell(element) {\n if (element) {\n let cell = element;\n while (cell && !DomHandler.hasClass(cell, 'ui-editing-cell')) {\n cell = cell.parentElement;\n }\n\n return cell;\n }\n else {\n return null;\n }\n }\n\n moveToPreviousCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let targetCell = this.findPreviousEditableColumn(currentCell);\n\n if (targetCell) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n DomHandler.invokeElementMethod(event.target, 'blur');\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n }\n\n moveToNextCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let targetCell = this.findNextEditableColumn(currentCell);\n\n if (targetCell) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n DomHandler.invokeElementMethod(event.target, 'blur');\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n }\n\n findPreviousEditableColumn(cell: Element) {\n let prevCell = cell.previousElementSibling;\n\n if (!prevCell) {\n let previousRow = cell.parentElement.previousElementSibling;\n if (previousRow) {\n prevCell = previousRow.lastElementChild;\n }\n }\n\n if (prevCell) {\n if (DomHandler.hasClass(prevCell, 'ui-editable-column'))\n return prevCell;\n else\n return this.findPreviousEditableColumn(prevCell);\n }\n else {\n return null;\n }\n }\n\n findNextEditableColumn(cell: Element) {\n let nextCell = cell.nextElementSibling;\n\n if (!nextCell) {\n let nextRow = cell.parentElement.nextElementSibling;\n if (nextRow) {\n nextCell = nextRow.firstElementChild;\n }\n }\n\n if (nextCell) {\n if (DomHandler.hasClass(nextCell, 'ui-editable-column'))\n return nextCell;\n else\n return this.findNextEditableColumn(nextCell);\n }\n else {\n return null;\n }\n }\n\n isEnabled() {\n return this.pEditableColumnDisabled !== true;\n }\n\n}\n\n@Directive({\n selector: '[pEditableRow]'\n})\nexport class EditableRow {\n\n @Input(\"pEditableRow\") data: any;\n\n @Input() pEditableRowDisabled: boolean;\n\n constructor(public el: ElementRef) {}\n\n isEnabled() {\n return this.pEditableRowDisabled !== true;\n }\n\n}\n\n@Directive({\n selector: '[pInitEditableRow]'\n})\nexport class InitEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.initRowEdit(this.editableRow.data);\n event.preventDefault();\n }\n\n}\n\n@Directive({\n selector: '[pSaveEditableRow]'\n})\nexport class SaveEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.saveRowEdit(this.editableRow.data, this.editableRow.el.nativeElement);\n event.preventDefault();\n }\n}\n\n@Directive({\n selector: '[pCancelEditableRow]'\n})\nexport class CancelEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.cancelRowEdit(this.editableRow.data);\n event.preventDefault();\n }\n}\n\n@Component({\n selector: 'p-cellEditor',\n template: `\n <ng-container *ngIf=\"editing\">\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!editing\">\n <ng-container *ngTemplateOutlet=\"outputTemplate\"></ng-container>\n </ng-container>\n `\n})\nexport class CellEditor implements AfterContentInit {\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n inputTemplate: TemplateRef<any>;\n\n outputTemplate: TemplateRef<any>;\n\n constructor(public dt: Table, @Optional() public editableColumn: EditableColumn, @Optional() public editableRow: EditableRow) { }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'input':\n this.inputTemplate = item.template;\n break;\n\n case 'output':\n this.outputTemplate = item.template;\n break;\n }\n });\n }\n\n get editing(): boolean {\n return (this.dt.editingCell && this.editableColumn && this.dt.editingCell === this.editableColumn.el.nativeElement) ||\n (this.editableRow && this.dt.editMode === 'row' && this.dt.isRowEditing(this.editableRow.data));\n }\n\n}\n\n@Component({\n selector: 'p-tableRadioButton',\n template: `\n <div class=\"ui-radiobutton ui-widget\" (click)=\"onClick($event)\">\n <div class=\"ui-helper-hidden-accessible\">\n <input type=\"radio\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n [disabled]=\"disabled\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'ui-radiobutton-box ui-widget ui-state-default':true,\n 'ui-state-active':checked, 'ui-state-disabled':disabled}\" role=\"radio\" [attr.aria-checked]=\"checked\">\n <span class=\"ui-radiobutton-icon ui-clickable\" [ngClass]=\"{'pi pi-circle-on':checked}\"></span>\n </div>\n </div>\n `\n})\nexport class TableRadioButton {\n\n @Input() disabled: boolean;\n\n @Input() value: any;\n\n @Input() index: number;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n });\n }\n\n ngOnInit() {\n this.checked = this.dt.isSelected(this.value);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.dt.toggleRowWithRadio({\n originalEvent: event,\n rowIndex: this.index\n }, this.value);\n }\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-tableCheckbox',\n template: `\n <div class=\"ui-chkbox ui-widget\" (click)=\"onClick($event)\">\n <div class=\"ui-helper-hidden-accessible\">\n <input type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [disabled]=\"disabled\"\n [attr.required]=\"required\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'ui-chkbox-box ui-widget ui-state-default':true,\n 'ui-state-active':checked, 'ui-state-disabled':disabled}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"ui-chkbox-icon ui-clickable\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `\n})\nexport class TableCheckbox {\n\n @Input() disabled: boolean;\n\n @Input() value: any;\n\n @Input() index: number;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() required: boolean;\n\n @Input() ariaLabel: string;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n });\n }\n\n ngOnInit() {\n this.checked = this.dt.isSelected(this.value);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.dt.toggleRowWithCheckbox({\n originalEvent: event,\n rowIndex: this.index\n }, this.value);\n }\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-tableHeaderCheckbox',\n template: `\n <div class=\"ui-chkbox ui-widget\" (click)=\"onClick($event)\">\n <div class=\"ui-helper-hidden-accessible\">\n <input #cb type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n [disabled]=\"isDisabled()\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'ui-chkbox-box ui-widget ui-state-default':true,\n 'ui-state-active':checked, 'ui-state-disabled': isDisabled()}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"ui-chkbox-icon ui-clickable\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `\n})\nexport class TableHeaderCheckbox {\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n @Input() disabled: boolean;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n checked: boolean;\n\n selectionChangeSubscription: Subscription;\n\n valueChangeSubscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n this.valueChangeSubscription = this.dt.tableService.valueSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n\n this.selectionChangeSubscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n }\n\n ngOnInit() {\n this.checked = this.updateCheckedState();\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n if (this.dt.value && this.dt.value.length > 0) {\n this.dt.toggleRowsWithCheckbox(event, !this.checked);\n }\n }\n\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'ui-state-focus');\n }\n\n isDisabled() {\n return this.disabled || !this.dt.value || !this.dt.value.length;\n }\n\n ngOnDestroy() {\n if (this.selectionChangeSubscription) {\n this.selectionChangeSubscription.unsubscribe();\n }\n\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n\n updateCheckedState() {\n if (this.dt.filteredValue) {\n const val = this.dt.filteredValue;\n return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.isAllFilteredValuesChecked());\n }\n else {\n const val = this.dt.value;\n return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.dt.selection.length === val.length);\n }\n }\n\n isAllFilteredValuesChecked() {\n if (!this.dt.filteredValue) {\n return false;\n }\n else {\n for (let rowData of this.dt.filteredValue) {\n if (!this.dt.isSelected(rowData)) {\n return false;\n }\n }\n return true;\n }\n }\n\n}\n\n@Directive({\n selector: '[pReorderableRowHandle]'\n})\nexport class ReorderableRowHandle implements AfterViewInit {\n\n @Input(\"pReorderableRowHandle\") index: number;\n\n constructor(public el: ElementRef) {}\n\n ngAfterViewInit() {\n DomHandler.addClass(this.el.nativeElement, 'ui-table-reorderablerow-handle');\n }\n}\n\n@Directive({\n selector: '[pReorderableRow]'\n})\nexport class ReorderableRow implements AfterViewInit {\n\n @Input(\"pReorderableRow\") index: number;\n\n @Input() pReorderableRowDisabled: boolean;\n\n mouseDownListener: any;\n\n dragStartListener: any;\n\n dragEndListener: any;\n\n dragOverListener: any;\n\n dragLeaveListener: any;\n\n dropListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n this.el.nativeElement.droppable = true;\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n this.dragStartListener = this.onDragStart.bind(this);\n this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n this.dragEndListener = this.onDragEnd.bind(this);\n this.el.nativeElement.addEventListener('dragend', this.dragEndListener);\n\n this.dragOverListener = this.onDragOver.bind(this);\n this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n this.dragLeaveListener = this.onDragLeave.bind(this);\n this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n });\n }\n\n unbindEvents() {\n if (this.mouseDownListener) {\n document.removeEventListener('mousedown', this.mouseDownListener);\n this.mouseDownListener = null;\n }\n\n if (this.dragStartListener) {\n document.removeEventListener('dragstart', this.dragStartListener);\n this.dragStartListener = null;\n }\n\n if (this.dragEndListener) {\n document.removeEventListener('dragend', this.dragEndListener);\n this.dragEndListener = null;\n }\n\n if (this.dragOverListener) {\n document.removeEventListener('dragover', this.dragOverListener);\n this.dragOverListener = null;\n }\n\n if (this.dragLeaveListener) {\n document.removeEventListener('dragleave', this.dragLeaveListener);\n this.dragLeaveListener = null;\n }\n }\n\n onMouseDown(event) {\n if (DomHandler.hasClass(event.target, 'ui-table-reorderablerow-handle'))\n this.el.nativeElement.draggable = true;\n else\n this.el.nativeElement.draggable = false;\n }\n\n onDragStart(event) {\n this.dt.onRowDragStart(event, this.index);\n }\n\n onDragEnd(event) {\n this.dt.onRowDragEnd(event);\n this.el.nativeElement.draggable = false;\n }\n\n onDragOver(event) {\n this.dt.onRowDragOver(event, this.index, this.el.nativeElement);\n event.preventDefault();\n }\n\n onDragLeave(event) {\n this.dt.onRowDragLeave(event, this.el.nativeElement);\n }\n\n isEnabled() {\n return this.pReorderableRowDisabled !== true;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled() && this.dt.rowDragging) {\n this.dt.onRowDrop(event, this.el.nativeElement);\n }\n\n event.preventDefault()\n }\n}\n\n@NgModule({\n imports: [CommonModule,PaginatorModule],\n exports: [Table,SharedModule,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,SortIcon,TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow],\n declarations: [Table,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,TableBody,ScrollableView,SortIcon,TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow]\n})\nexport class TableModule { }\n"]}
\No newline at end of file