UNPKG

161 kBSource Map (JSON)View Raw
1{"version":3,"sources":["ng://primeng/treetable/treetable.ts"],"names":["TreeTableService","this","sortSource","Subject","selectionSource","contextMenuSource","uiUpdateSource","totalRecordsSource","sortSource$","asObservable","selectionSource$","contextMenuSource$","uiUpdateSource$","totalRecordsSource$","prototype","onSort","sortMeta","next","onSelectionChange","onContextMenu","node","onUIUpdate","value","onTotalRecordsChange","__decorate","Injectable","TreeTable","el","zone","tableService","lazy","lazyLoadOnInit","first","pageLinks","alwaysShowPaginator","paginatorPosition","currentPageReportTemplate","defaultSortOrder","sortMode","resetPageOnSort","selectionChange","EventEmitter","contextMenuSelectionChange","contextMenuSelectionMode","compareSelectionBy","loadingIcon","showLoader","virtualScrollDelay","virtualRowHeight","columnResizeMode","rowTrackBy","index","item","filters","filterDelay","filterMode","onFilter","onNodeExpand","onNodeCollapse","onPage","onLazyLoad","sortFunction","onColResize","onColReorder","onNodeSelect","onNodeUnselect","onContextMenuSelect","onHeaderCheckboxToggle","onEditInit","onEditComplete","onEditCancel","_value","_totalRecords","_sortOrder","selectionKeys","ngOnInit","emit","createLazyLoadMetadata","initialized","ngAfterContentInit","_this","templates","forEach","getType","captionTemplate","template","headerTemplate","bodyTemplate","loadingBodyTemplate","footerTemplate","summaryTemplate","colGroupTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","frozenHeaderTemplate","frozenBodyTemplate","frozenFooterTemplate","frozenColGroupTemplate","ngOnChanges","simpleChange","currentValue","totalRecords","length","sortField","sortSingle","multiSortMeta","sortMultiple","hasFilter","_filter","virtualScroll","virtualScrollCallback","updateSerializedValue","_sortField","sortOrder","_multiSortMeta","selection","_selection","preventSelectionSetterPropagation","updateSelectionKeys","Object","defineProperty","val","serializedValue","paginator","serializePageNodes","serializeNodes","filteredNodes","parent","nodes","level","visible","nodes_1","__values","nodes_1_1","done","rowNode","expanded","push","children","data","i","rows","dataKey","Array","isArray","_b","_c","String","ObjectUtils","resolveFieldData","onPageChange","event","sort","originalEvent","field","metaKey","ctrlKey","getSortMeta","order","sortNodes","customSort","mode","node1","node2","value1","value2","result","localeCompare","undefined","numeric","nodes_2","nodes_2_1","sortMultipleNodes","multisortmeta","multisortField","nodes_3","nodes_3_1","isSorted","sorted","globalFilter","handleVirtualScroll","page","callback","run","virtualScrollTimer","clearTimeout","setTimeout","isEmpty","getBlockableElement","nativeElement","onColumnResizeBegin","containerLeft","DomHandler","getOffset","containerViewChild","left","lastResizerHelperX","pageX","scrollLeft","preventDefault","onColumnResize","addClass","resizeHelperViewChild","style","height","offsetHeight","top","display","onColumnResizeEnd","column","delta","offsetLeft","columnWidth","offsetWidth","newColumnWidth","minWidth","parseInt","nextColumn","nextElementSibling","offsetParent","nextColumnWidth","nextColumnMinWidth","scrollable","scrollableView","findParentScrollableView","scrollableBodyTable","findSingle","scrollableHeaderTable","scrollableFooterTable","resizeColumnIndex","resizeColGroup","width","tableViewChild","containerWidth","element","removeClass","parent_1","parentElement","hasClass","table","colGroup","nodeName","col","nextCol","onColumnDragStart","columnElement","reorderIconWidth","getHiddenElementOuterWidth","reorderIndicatorUpViewChild","reorderIconHeight","getHiddenElementOuterHeight","reorderIndicatorDownViewChild","draggedColumn","dataTransfer","setData","onColumnDragEnter","dropHeader","reorderableColumns","containerOffset","dropHeaderOffset","targetLeft","columnCenter","Math","ceil","dropPosition","dropEffect","onColumnDragLeave","onColumnDrop","dropColumn","dragIndex","indexWithinGroup","dropIndex","allowDrop","reorderArray","columns","draggable","handleRowClick","targetNode","target","selectionMode","selected","isSelected","metaSelection","rowTouched","metaKeySelection","dataKeyValue","isSingleSelectionMode","selectionIndex_1","findIndexInSelection","filter","type","isMultipleSelectionMode","__spread","rowIndex","selectionIndex_2","handleRowTouchEnd","handleRowRightClick","contextMenu","contextMenuSelection","show","toggleNodeWithCheckbox","propagateSelectionDown","propagateSelectionUp","toggleNodesWithCheckbox","check","slice","data_1","data_1_1","checked","select","selectedChildCount","childPartialSelected","child","partialSelected","index_1","equals","matchMode","filterTimeout","isFilterBlank","filterGlobal","trim","globalFilterFieldsArray","globalFilterFields","Error","isStrictMode","isValueChanged","copyNode","__assign","localMatch","globalMatch","paramsWithoutNode","prop","hasOwnProperty","filterMeta","filterField","filterValue","filterMatchMode","filterConstraint","FilterUtils","findFilteredNodes","isFilterMatched","j","copyNodeForGlobal","matches","filteredValue","matched","childNodes","childNodes_1","childNodes_1_1","childNode","copyChildNode","_a","filterLocale","isNodeLeaf","leaf","empty","reset","updateEditingCell","cell","editingCell","bindDocumentEditListener","isEditingCellValid","find","documentEditListener","editingCellClick","unbindDocumentEditListener","document","addEventListener","removeEventListener","ngOnDestroy","ElementRef","NgZone","Input","Output","ViewChild","ContentChildren","PrimeTemplate","Component","selector","providers","changeDetection","ChangeDetectionStrategy","Default","TTBody","tt","TTScrollableView","loadingArray","subscription","subscribe","runOutsideAngular","alignScrollBar","scrollLoadingTableViewChild","totalRecordsSubscription","setVirtualScrollerHeight","fill","_scrollHeight","setScrollHeight","ngAfterViewChecked","ngAfterViewInit","bindEvents","frozen","scrollBodyViewChild","paddingBottom","calculateScrollbarWidth","frozenColumns","frozenWidth","frozenView","previousElementSibling","frozenSiblingBody","scrollHeaderViewChild","headerScrollListener","onHeaderScroll","bind","scrollHeaderBoxViewChild","scrollFooterViewChild","footerScrollListener","onFooterScroll","bodyScrollListener","onBodyScroll","unbindEvents","marginLeft","scrollFooterBoxViewChild","scrollTop","viewport","getOuterHeight","tableHeight","scrollTableViewChild","pageHeight_1","pageCount","virtualScrollerViewChild","scrollBodyTop","parseFloat","page_1","floor","scrollHeight","indexOf","relativeHeight","visibility","containerHeight","includes","percentHeight","diffValue","scrollBodyHeight","maxHeight","hasVerticalOverflow","scrollBarWidth","marginRight","unsubscribe","TTSortableColumn","isEnabled","updateSortState","onClick","clearSelection","onEnterKey","ttSortableColumnDisabled","HostListener","Directive","host","[class.ui-sortable-column]","[class.ui-state-highlight]","[attr.tabindex]","TTSortIcon","TTResizableColumn","resizer","createElement","className","appendChild","resizerMouseDownListener","onMouseDown","bindDocumentEvents","documentMouseMoveListener","onDocumentMouseMove","documentMouseUpListener","onDocumentMouseUp","unbindDocumentEvents","ttResizableColumnDisabled","TTReorderableColumn","mouseDownListener","dragStartListener","onDragStart","dragOverListener","onDragEnter","dragEnterListener","dragLeaveListener","onDragLeave","onDragOver","onDrop","ttReorderableColumnDisabled","TTSelectableRow","which","onTouchEnd","ttSelectableRowDisabled","TTSelectableRowDblClick","TTContextMenuRow","focus","ttContextMenuRowDisabled","[class.ui-contextmenu-selected]","TTCheckbox","disabled","onFocus","boxViewChild","onBlur","TTHeaderCheckbox","valueChangeSubscription","updateCheckedState","selectionChangeSubscription","data_2","data_2_1","TTEditableColumn","openCell","focusable","closeEditingCell","onKeyDown","keyCode","shiftKey","moveToPreviousCell","moveToNextCell","findCell","currentCell","targetCell","findPreviousEditableColumn","invokeElementMethod","findNextEditableColumn","prevCell","previousRow","lastElementChild","nextCell","nextRow","firstElementChild","ttEditableColumnDisabled","TreeTableCellEditor","editableColumn","inputTemplate","outputTemplate","TTRow","prevRow","toggleRowIndex","restoreFocus","row","TreeTableToggler","TreeTableModule","NgModule","imports","CommonModule","PaginatorModule","exports","SharedModule","declarations"],"mappings":"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","sourcesContent":["import { NgModule, AfterContentInit, OnInit, OnDestroy, HostListener, Injectable, Directive, Component, Input, Output, EventEmitter, ContentChildren, TemplateRef, QueryList, ElementRef, NgZone, ViewChild, AfterViewInit, AfterViewChecked, OnChanges, SimpleChanges, ChangeDetectionStrategy} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeNode } from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { DomHandler } from 'primeng/dom';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { SortMeta } from 'primeng/api';\nimport { BlockableUI } from 'primeng/api';\nimport { FilterMetadata } from 'primeng/api';\nimport { ObjectUtils } from 'primeng/utils';\nimport { FilterUtils } from 'primeng/utils';\n\n@Injectable()\nexport class TreeTableService {\n\n private sortSource = new Subject<SortMeta|SortMeta[]>();\n private selectionSource = new Subject();\n private contextMenuSource = new Subject<any>();\n private uiUpdateSource = new Subject<any>();\n private totalRecordsSource = new Subject<any>();\n\n sortSource$ = this.sortSource.asObservable();\n selectionSource$ = this.selectionSource.asObservable();\n contextMenuSource$ = this.contextMenuSource.asObservable();\n uiUpdateSource$ = this.uiUpdateSource.asObservable();\n totalRecordsSource$ = this.totalRecordsSource.asObservable();\n\n onSort(sortMeta: SortMeta|SortMeta[]) {\n this.sortSource.next(sortMeta);\n }\n\n onSelectionChange() {\n this.selectionSource.next();\n }\n\n onContextMenu(node: any) {\n this.contextMenuSource.next(node);\n }\n\n onUIUpdate(value: any) {\n this.uiUpdateSource.next(value);\n }\n\n onTotalRecordsChange(value: number) {\n this.totalRecordsSource.next(value);\n }\n}\n\n@Component({\n selector: 'p-treeTable',\n template: `\n <div #container [ngStyle]=\"style\" [class]=\"styleClass\"\n [ngClass]=\"{'ui-treetable ui-widget': true, 'ui-treetable-auto-layout': autoLayout, 'ui-treetable-hoverable-rows': (rowHover||(selectionMode === 'single' || selectionMode === 'multiple')),\n 'ui-treetable-resizable': resizableColumns, 'ui-treetable-resizable-fit': (resizableColumns && columnResizeMode === 'fit')}\">\n <div class=\"ui-treetable-loading ui-widget-overlay\" *ngIf=\"loading && showLoader\"></div>\n <div class=\"ui-treetable-loading-content\" *ngIf=\"loading && showLoader\">\n <i [class]=\"'ui-treetable-loading-icon pi-spin ' + loadingIcon\"></i>\n </div>\n <div *ngIf=\"captionTemplate\" class=\"ui-treetable-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\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\"></p-paginator>\n\n <div class=\"ui-treetable-wrapper\" *ngIf=\"!scrollable\">\n <table #table class=\"ui-treetable-table\">\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"ui-treetable-thead\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: columns}\"></ng-container>\n </thead>\n <tfoot class=\"ui-treetable-tfoot\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n <tbody class=\"ui-treetable-tbody\" [pTreeTableBody]=\"columns\" [pTreeTableBodyTemplate]=\"bodyTemplate\"></tbody>\n </table>\n </div>\n\n <div class=\"ui-treetable-scrollable-wrapper\" *ngIf=\"scrollable\">\n <div class=\"ui-treetable-scrollable-view ui-treetable-frozen-view\" *ngIf=\"frozenColumns||frozenBodyTemplate\" [ttScrollableView]=\"frozenColumns\" [frozen]=\"true\" [ngStyle]=\"{width: frozenWidth}\" [scrollHeight]=\"scrollHeight\"></div>\n <div class=\"ui-treetable-scrollable-view\" [ttScrollableView]=\"columns\" [frozen]=\"false\" [scrollHeight]=\"scrollHeight\"></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\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\"></p-paginator>\n <div *ngIf=\"summaryTemplate\" class=\"ui-treetable-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\" *ngIf=\"reorderableColumns\"></span>\n <span #reorderIndicatorDown class=\"pi pi-arrow-up ui-table-reorder-indicator-down\" *ngIf=\"reorderableColumns\"></span>\n </div>\n `,\n providers: [TreeTableService],\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class TreeTable implements AfterContentInit, OnInit, OnDestroy, BlockableUI, OnChanges {\n\n @Input() columns: any[];\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() autoLayout: boolean;\n\n @Input() lazy: boolean = false;\n\n @Input() lazyLoadOnInit: boolean = true;\n\n @Input() paginator: boolean;\n\n @Input() rows: number;\n\n @Input() first: number = 0;\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() 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() customSort: boolean;\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() compareSelectionBy: string = 'deepEquals';\n\n @Input() rowHover: boolean;\n\n @Input() loading: boolean;\n\n @Input() loadingIcon: string = 'pi pi-spinner';\n\n @Input() showLoader: boolean = true;\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() frozenColumns: any[];\n\n @Input() resizableColumns: boolean;\n\n @Input() columnResizeMode: string = 'fit';\n\n @Input() reorderableColumns: boolean;\n\n @Input() contextMenu: any;\n\n @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n @Input() filters: { [s: string]: FilterMetadata; } = {};\n\n @Input() globalFilterFields: string[];\n\n @Input() filterDelay: number = 300;\n\n @Input() filterMode: string = 'lenient';\n\n @Input() filterLocale: string;\n\n @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n @Output() onNodeExpand: EventEmitter<any> = new EventEmitter();\n\n @Output() onNodeCollapse: EventEmitter<any> = new EventEmitter();\n\n @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n @Output() sortFunction: EventEmitter<any> = new EventEmitter();\n\n @Output() onColResize: EventEmitter<any> = new EventEmitter();\n\n @Output() onColReorder: EventEmitter<any> = new EventEmitter();\n\n @Output() onNodeSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onNodeUnselect: EventEmitter<any> = new EventEmitter();\n\n @Output() onContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onHeaderCheckboxToggle: 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 @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: TreeNode[] = [];\n\n serializedValue: any[];\n\n _totalRecords: number = 0;\n\n _multiSortMeta: SortMeta[];\n\n _sortField: string;\n\n _sortOrder: number = 1;\n\n virtualScrollTimer: any;\n\n virtualScrollCallback: Function;\n\n filteredNodes: any[];\n\n filterTimeout: any;\n\n colGroupTemplate: TemplateRef<any>;\n\n captionTemplate: TemplateRef<any>;\n\n headerTemplate: TemplateRef<any>;\n\n bodyTemplate: TemplateRef<any>;\n\n loadingBodyTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n summaryTemplate: TemplateRef<any>;\n\n emptyMessageTemplate: TemplateRef<any>;\n\n paginatorLeftTemplate: TemplateRef<any>;\n\n paginatorRightTemplate: TemplateRef<any>;\n\n frozenHeaderTemplate: TemplateRef<any>;\n\n frozenBodyTemplate: TemplateRef<any>;\n\n frozenFooterTemplate: TemplateRef<any>;\n\n frozenColGroupTemplate: TemplateRef<any>;\n\n lastResizerHelperX: number;\n\n reorderIconWidth: number;\n\n reorderIconHeight: number;\n\n draggedColumn: any;\n\n dropPosition: number;\n\n preventSelectionSetterPropagation: boolean;\n\n _selection: any;\n\n selectionKeys: any = {};\n\n rowTouched: boolean;\n\n editingCell: Element;\n\n editingCellClick: boolean;\n\n documentEditListener: any;\n\n initialized: boolean;\n\n toggleRowIndex: number;\n\n ngOnInit() {\n if (this.lazy && this.lazyLoadOnInit) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\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 '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 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 });\n }\n\n constructor(public el: ElementRef, public zone: NgZone, public tableService: TreeTableService) {}\n\n ngOnChanges(simpleChange: SimpleChanges) {\n if (simpleChange.value) {\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.updateSerializedValue();\n this.tableService.onUIUpdate(this.value);\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 updateSerializedValue() {\n this.serializedValue = [];\n\n if (this.paginator)\n this.serializePageNodes();\n else\n this.serializeNodes(null, this.filteredNodes||this.value, 0, true);\n }\n\n serializeNodes(parent, nodes, level, visible) {\n if (nodes && nodes.length) {\n for(let node of nodes) {\n node.parent = parent;\n const rowNode = {\n node: node,\n parent: parent,\n level: level,\n visible: visible && (parent ? parent.expanded : true)\n };\n this.serializedValue.push(rowNode);\n\n if (rowNode.visible && node.expanded) {\n this.serializeNodes(node, node.children, level + 1, rowNode.visible);\n }\n }\n }\n }\n\n serializePageNodes() {\n let data = this.filteredNodes || this.value;\n this.serializedValue = [];\n if (data && data.length) {\n const first = this.lazy ? 0 : this.first;\n\n for(let i = first; i < (first + this.rows); i++) {\n let node = data[i];\n if (node) {\n this.serializedValue.push({\n node: node,\n parent: null,\n level: 0,\n visible: true\n });\n\n this.serializeNodes(node, node.children, 1, true);\n }\n }\n }\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 node of this._selection) {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(node.data, this.dataKey))] = 1;\n }\n }\n else {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection.data, 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 else\n this.serializePageNodes();\n\n this.onPage.emit({\n first: this.first,\n rows: this.rows\n });\n\n this.tableService.onUIUpdate(this.value);\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.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 else {\n sortMeta.order = sortMeta.order * -1;\n }\n }\n else {\n if (!metaKey || !this.multiSortMeta) {\n this._multiSortMeta = [];\n }\n this.multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n }\n\n this.sortMultiple();\n }\n }\n\n sortSingle() {\n if (this.sortField && this.sortOrder) {\n if (this.resetPageOnSort) {\n this.first = 0;\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n this.sortNodes(this.value);\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 this.updateSerializedValue();\n }\n }\n\n sortNodes(nodes) {\n if (!nodes || nodes.length === 0) {\n return;\n }\n\n if (this.customSort) {\n this.sortFunction.emit({\n data: nodes,\n mode: this.sortMode,\n field: this.sortField,\n order: this.sortOrder\n });\n }\n else {\n nodes.sort((node1, node2) => {\n let value1 = ObjectUtils.resolveFieldData(node1.data, this.sortField);\n let value2 = ObjectUtils.resolveFieldData(node2.data, 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, undefined, {numeric: true});\n else\n result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n return (this.sortOrder * result);\n });\n }\n\n for(let node of nodes) {\n this.sortNodes(node.children);\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 this.sortMultipleNodes(this.value);\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 this.updateSerializedValue();\n }\n }\n\n sortMultipleNodes(nodes) {\n if (!nodes || nodes.length === 0) {\n return;\n }\n\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 nodes.sort((node1, node2) => {\n return this.multisortField(node1, node2, this.multiSortMeta, 0);\n });\n }\n\n for(let node of nodes) {\n this.sortMultipleNodes(node.children);\n }\n }\n\n multisortField(node1, node2, multiSortMeta, index) {\n let value1 = ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);\n let value2 = ObjectUtils.resolveFieldData(node2.data, 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 if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && (value1 != value2)) {\n return (multiSortMeta[index].order * value1.localeCompare(value2, undefined, {numeric: true}));\n }\n }\n else {\n result = (value1 < value2) ? -1 : 1;\n }\n\n if (value1 == value2) {\n return (multiSortMeta.length - 1) > (index) ? (this.multisortField(node1, node2, 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 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 handleVirtualScroll(event) {\n this.first = (event.page - 1) * this.rows;\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.filteredNodes||this.value;\n return data == null || data.length == 0;\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\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 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 newColumnWidth = columnWidth + delta;\n let minWidth = column.style.minWidth || 15;\n\n if (columnWidth + delta > parseInt(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-treetable-scrollable-body-table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-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 (this.scrollable) {\n let scrollableView = this.findParentScrollableView(column);\n let scrollableBodyTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-body-table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-footer-table');\n scrollableBodyTable.style.width = scrollableBodyTable.offsetWidth + delta + 'px';\n scrollableHeaderTable.style.width = scrollableHeaderTable.offsetWidth + delta + 'px';\n if (scrollableFooterTable) {\n scrollableFooterTable.style.width = scrollableFooterTable.offsetWidth + delta + 'px';\n }\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 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 this.onColResize.emit({\n element: column,\n delta: delta\n });\n }\n\n this.resizeHelperViewChild.nativeElement.style.display = 'none';\n DomHandler.removeClass(this.containerViewChild.nativeElement, 'ui-unselectable-text');\n }\n\n findParentScrollableView(column) {\n if (column) {\n let parent = column.parentElement;\n while (parent && !DomHandler.hasClass(parent, 'ui-treetable-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 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 this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\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, 'ttreorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'ttreorderablecolumn');\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\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 handleRowClick(event) {\n let targetNode = (<HTMLElement> event.originalEvent.target).nodeName;\n if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (DomHandler.hasClass(event.originalEvent.target, 'ui-clickable'))) {\n return;\n }\n\n if (this.selectionMode) {\n this.preventSelectionSetterPropagation = true;\n let rowNode = event.rowNode;\n let selected = this.isSelected(rowNode.node);\n let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowNode.node.data, this.dataKey)) : null;\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(rowNode.node);\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.onNodeUnselect.emit({originalEvent: event.originalEvent, node: rowNode.node, type: 'row'});\n }\n else {\n if (this.isSingleSelectionMode()) {\n this._selection = rowNode.node;\n this.selectionChange.emit(rowNode.node);\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, rowNode.node];\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.onNodeSelect.emit({originalEvent: event.originalEvent, node: rowNode.node, 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.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n }\n else {\n this._selection = rowNode.node;\n this.selectionChange.emit(this.selection);\n this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, 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(rowNode.node);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowNode.node] : [rowNode.node];\n this.selectionChange.emit(this.selection);\n this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n }\n\n this.tableService.onSelectionChange();\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 node = event.rowNode.node;\n\n if (this.contextMenuSelectionMode === 'separate') {\n this.contextMenuSelection = node;\n this.contextMenuSelectionChange.emit(node);\n this.onContextMenuSelect.emit({originalEvent: event.originalEvent, node: node});\n this.contextMenu.show(event.originalEvent);\n this.tableService.onContextMenu(node);\n }\n else if (this.contextMenuSelectionMode === 'joint') {\n this.preventSelectionSetterPropagation = true;\n let selected = this.isSelected(node);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n if (!selected) {\n if (this.isSingleSelectionMode()) {\n this.selection = node;\n this.selectionChange.emit(node);\n }\n else if (this.isMultipleSelectionMode()) {\n this.selection = [node];\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.originalEvent, node: node});\n }\n }\n }\n\n toggleNodeWithCheckbox(event) {\n this.selection = this.selection||[];\n this.preventSelectionSetterPropagation = true;\n let node = event.rowNode.node;\n let selected = this.isSelected(node);\n\n if (selected) {\n this.propagateSelectionDown(node, false);\n if (event.rowNode.parent) {\n this.propagateSelectionUp(node.parent, false);\n }\n this.selectionChange.emit(this.selection);\n this.onNodeUnselect.emit({originalEvent: event, node: node});\n }\n else {\n this.propagateSelectionDown(node, true);\n if (event.rowNode.parent) {\n this.propagateSelectionUp(node.parent, true);\n }\n this.selectionChange.emit(this.selection);\n this.onNodeSelect.emit({originalEvent: event, node: node});\n }\n\n this.tableService.onSelectionChange();\n }\n\n toggleNodesWithCheckbox(event: Event, check: boolean) {\n let data = this.filteredNodes || this.value;\n this._selection = check && data ? data.slice() : [];\n if (check) {\n if (data && data.length) {\n for (let node of data) {\n this.propagateSelectionDown(node, true);\n }\n }\n }\n else {\n this._selection = [];\n this.selectionKeys = {};\n }\n\n this.preventSelectionSetterPropagation = true;\n this.selectionChange.emit(this._selection);\n this.tableService.onSelectionChange();\n this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n }\n\n propagateSelectionUp(node: TreeNode, select: boolean) {\n if (node.children && node.children.length) {\n let selectedChildCount: number = 0;\n let childPartialSelected: boolean = false;\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n for (let child of node.children) {\n if (this.isSelected(child))\n selectedChildCount++;\n else if (child.partialSelected)\n childPartialSelected = true;\n }\n\n if (select && selectedChildCount == node.children.length) {\n this._selection = [...this.selection||[], node];\n node.partialSelected = false;\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else {\n if (!select) {\n let index = this.findIndexInSelection(node);\n if (index >= 0) {\n this._selection = this.selection.filter((val,i) => i!=index);\n\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n }\n\n if (childPartialSelected || selectedChildCount > 0 && selectedChildCount != node.children.length)\n node.partialSelected = true;\n else\n node.partialSelected = false;\n }\n }\n\n let parent = node.parent;\n if (parent) {\n this.propagateSelectionUp(parent, select);\n }\n }\n\n propagateSelectionDown(node: TreeNode, select: boolean) {\n let index = this.findIndexInSelection(node);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n if (select && index == -1) {\n this._selection = [...this.selection||[],node]\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (!select && index > -1) {\n this._selection = this.selection.filter((val,i) => i!=index);\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n\n node.partialSelected = false;\n\n if (node.children && node.children.length) {\n for (let child of node.children) {\n this.propagateSelectionDown(child, select);\n }\n }\n }\n\n isSelected(node) {\n if (node && this.selection) {\n if (this.dataKey) {\n return this.selectionKeys[ObjectUtils.resolveFieldData(node.data, this.dataKey)] !== undefined;\n }\n else {\n if (this.selection instanceof Array)\n return this.findIndexInSelection(node) > -1;\n else\n return this.equals(node, this.selection);\n }\n }\n\n return false;\n }\n\n findIndexInSelection(node: 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(node, this.selection[i])) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n isSingleSelectionMode() {\n return this.selectionMode === 'single';\n }\n\n isMultipleSelectionMode() {\n return this.selectionMode === 'multiple';\n }\n\n equals(node1, node2) {\n return this.compareSelectionBy === 'equals' ? (node1 === node2) : ObjectUtils.equals(node1.data, node2.data, 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\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.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n if (!this.value) {\n return;\n }\n\n if (!this.hasFilter()) {\n this.filteredNodes = 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.filteredNodes = [];\n const isStrictMode = this.filterMode === 'strict';\n let isValueChanged = false;\n\n for (let node of this.value) {\n let copyNode = {...node};\n let localMatch = true;\n let globalMatch = false;\n let paramsWithoutNode;\n\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n let filterMeta = this.filters[prop];\n let filterField = prop;\n let filterValue = filterMeta.value;\n let filterMatchMode = filterMeta.matchMode || 'startsWith';\n let filterConstraint = FilterUtils[filterMatchMode];\n paramsWithoutNode = {filterField, filterValue, filterConstraint, isStrictMode};\n if ((isStrictMode && !(this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||\n (!isStrictMode && !(this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {\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 copyNodeForGlobal = {...copyNode};\n let filterField = globalFilterFieldsArray[j].field||globalFilterFieldsArray[j];\n let filterValue = this.filters['global'].value;\n let filterConstraint = FilterUtils[this.filters['global'].matchMode];\n paramsWithoutNode = {filterField, filterValue, filterConstraint, isStrictMode};\n\n if ((isStrictMode && (this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) || this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode))) ||\n (!isStrictMode && (this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode) || this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))) {\n globalMatch = true;\n copyNode = copyNodeForGlobal;\n }\n }\n }\n\n let matches = localMatch;\n if (this.filters['global']) {\n matches = localMatch && globalMatch;\n }\n\n if (matches) {\n this.filteredNodes.push(copyNode);\n }\n\n isValueChanged = isValueChanged || !localMatch || globalMatch || (localMatch && this.filteredNodes.length > 0) || (!globalMatch && this.filteredNodes.length === 0)\n }\n\n if (!isValueChanged) {\n this.filteredNodes = null;\n }\n\n if (this.paginator) {\n this.totalRecords = this.filteredNodes ? this.filteredNodes.length : this.value ? this.value.length : 0;\n }\n }\n }\n\n this.first = 0;\n\n const filteredValue = this.filteredNodes || this.value;\n\n this.onFilter.emit({\n filters: this.filters,\n filteredValue: filteredValue\n });\n\n this.tableService.onUIUpdate(filteredValue);\n this.updateSerializedValue();\n }\n\n findFilteredNodes(node, paramsWithoutNode) {\n if (node) {\n let matched = false;\n if (node.children) {\n let childNodes = [...node.children];\n node.children = [];\n for (let childNode of childNodes) {\n let copyChildNode = {...childNode};\n if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n matched = true;\n node.children.push(copyChildNode);\n }\n }\n }\n\n if (matched) {\n return true;\n }\n }\n }\n\n isFilterMatched(node, {filterField, filterValue, filterConstraint, isStrictMode}) {\n let matched = false;\n let dataFieldValue = ObjectUtils.resolveFieldData(node.data, filterField);\n if (filterConstraint(dataFieldValue, filterValue, this.filterLocale)) {\n matched = true;\n }\n\n if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {\n matched = this.findFilteredNodes(node, {filterField, filterValue, filterConstraint, isStrictMode}) || matched;\n }\n\n return matched;\n }\n\n isNodeLeaf(node) {\n return node.leaf === false ? false : !(node.children && node.children.length);\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 public reset() {\n this._sortField = null;\n this._sortOrder = 1;\n this._multiSortMeta = null;\n this.tableService.onSort(null);\n\n this.filteredNodes = null;\n this.filters = {};\n\n this.first = 0;\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 updateEditingCell(cell) {\n this.editingCell = cell;\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.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 ngOnDestroy() {\n this.unbindDocumentEditListener();\n this.editingCell = null;\n this.initialized = null;\n }\n\n}\n\n@Component({\n selector: '[pTreeTableBody]',\n template: `\n <ng-template ngFor let-serializedNode let-rowIndex=\"index\" [ngForOf]=\"tt.serializedValue\" [ngForTrackBy]=\"tt.rowTrackBy\">\n <ng-container *ngIf=\"serializedNode.visible\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: serializedNode, node: serializedNode.node, rowData: serializedNode.node.data, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n <ng-container *ngIf=\"tt.isEmpty()\">\n <ng-container *ngTemplateOutlet=\"tt.emptyMessageTemplate; context: {$implicit: columns}\"></ng-container>\n </ng-container>\n `\n})\nexport class TTBody {\n\n @Input(\"pTreeTableBody\") columns: any[];\n\n @Input(\"pTreeTableBodyTemplate\") template: TemplateRef<any>;\n\n constructor(public tt: TreeTable) {}\n}\n\n@Component({\n selector: '[ttScrollableView]',\n template: `\n <div #scrollHeader class=\"ui-treetable-scrollable-header ui-widget-header\">\n <div #scrollHeaderBox class=\"ui-treetable-scrollable-header-box\">\n <table class=\"ui-treetable-scrollable-header-table\">\n <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"ui-treetable-thead\">\n <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenHeaderTemplate||tt.headerTemplate : tt.headerTemplate; context {$implicit: columns}\"></ng-container>\n </thead>\n </table>\n </div>\n </div>\n <div #scrollBody class=\"ui-treetable-scrollable-body\">\n <table #scrollTable [ngClass]=\"{'ui-treetable-scrollable-body-table': true, 'ui-treetable-virtual-table': tt.virtualScroll}\">\n <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tbody class=\"ui-treetable-tbody\" [pTreeTableBody]=\"columns\" [pTreeTableBodyTemplate]=\"frozen ? tt.frozenBodyTemplate||tt.bodyTemplate : tt.bodyTemplate\"></tbody>\n </table>\n <table #loadingTable *ngIf=\"tt.virtualScroll && tt.loadingBodyTemplate != null\" [ngClass]=\"{'ui-treetable-scrollable-body-table ui-treetable-loading-virtual-table': true, 'ui-treetable-virtual-table': tt.virtualScroll}\">\n <tbody class=\"ui-treetable-tbody\">\n <ng-template ngFor [ngForOf]=\"loadingArray\">\n <ng-container *ngTemplateOutlet=\"tt.loadingBodyTemplate; context: {columns: columns}\"></ng-container>\n </ng-template>\n </tbody>\n </table>\n <div #virtualScroller class=\"ui-treetable-virtual-scroller\" *ngIf=\"tt.virtualScroll\"></div>\n </div>\n <div #scrollFooter *ngIf=\"tt.footerTemplate\" class=\"ui-treetable-scrollable-footer ui-widget-header\">\n <div #scrollFooterBox class=\"ui-treetable-scrollable-footer-box\">\n <table class=\"ui-treetable-scrollable-footer-table\">\n <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tfoot class=\"ui-treetable-tfoot\">\n <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenFooterTemplate||tt.footerTemplate : tt.footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n </div>\n `\n})\nexport class TTScrollableView implements AfterViewInit, OnDestroy, AfterViewChecked {\n\n @Input(\"ttScrollableView\") 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 headerScrollListener: Function;\n\n bodyScrollListener: Function;\n\n footerScrollListener: Function;\n\n frozenSiblingBody: Element;\n\n _scrollHeight: string;\n\n subscription: Subscription;\n\n totalRecordsSubscription: Subscription;\n\n initialized: boolean;\n\n loadingArray: number[] = [];\n\n constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {\n this.subscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.alignScrollBar();\n this.initialized = true;\n\n if (this.scrollLoadingTableViewChild && this.scrollLoadingTableViewChild.nativeElement) {\n this.scrollLoadingTableViewChild.nativeElement.style.display = 'none';\n }\n }, 50);\n });\n });\n\n if (this.tt.virtualScroll) {\n this.totalRecordsSubscription = this.tt.tableService.totalRecordsSource$.subscribe(() => {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.setVirtualScrollerHeight();\n }, 50);\n });\n });\n }\n\n this.loadingArray = Array(this.tt.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.initialized = true;\n }\n }\n\n ngAfterViewInit() {\n this.bindEvents();\n this.setScrollHeight();\n this.alignScrollBar();\n\n if (!this.frozen) {\n if (this.tt.frozenColumns || this.tt.frozenBodyTemplate) {\n DomHandler.addClass(this.el.nativeElement, 'ui-treetable-unfrozen-view');\n }\n\n if (this.tt.frozenWidth) {\n this.el.nativeElement.style.left = this.tt.frozenWidth;\n this.el.nativeElement.style.width = 'calc(100% - ' + this.tt.frozenWidth + ')';\n }\n\n let frozenView = this.el.nativeElement.previousElementSibling;\n if (frozenView) {\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.ui-treetable-scrollable-body');\n }\n }\n else {\n this.scrollBodyViewChild.nativeElement.style.paddingBottom = DomHandler.calculateScrollbarWidth() + 'px';\n }\n\n if (this.tt.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 let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.headerScrollListener = this.onHeaderScroll.bind(this);\n this.scrollHeaderBoxViewChild.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.scrollHeaderBoxViewChild.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.addEventListener('scroll', this.bodyScrollListener);\n }\n\n onHeaderScroll(event) {\n this.scrollHeaderViewChild.nativeElement.scrollLeft = 0;\n }\n\n onFooterScroll(event) {\n this.scrollFooterViewChild.nativeElement.scrollLeft = 0;\n }\n\n onBodyScroll(event) {\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.tt.virtualScroll) {\n let viewport = DomHandler.getOuterHeight(this.scrollBodyViewChild.nativeElement);\n let tableHeight = DomHandler.getOuterHeight(this.scrollTableViewChild.nativeElement);\n let pageHeight = this.tt.virtualRowHeight * this.tt.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.tt.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 });\n }\n }\n }\n\n setScrollHeight() {\n if (this.scrollHeight && this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\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.tt.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.tt.el.nativeElement.parentElement) * percentHeight / 100) - diffValue;\n }\n else {\n relativeHeight = DomHandler.getOuterHeight(this.tt.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 if (this.frozen)\n this.scrollBodyViewChild.nativeElement.style.maxHeight = (parseInt(this.scrollHeight) - DomHandler.calculateScrollbarWidth()) + 'px';\n else\n this.scrollBodyViewChild.nativeElement.style.maxHeight = this.scrollHeight;\n }\n }\n }\n\n setVirtualScrollerHeight() {\n if (this.virtualScrollerViewChild.nativeElement) {\n this.virtualScrollerViewChild.nativeElement.style.height = this.tt.totalRecords * this.tt.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 this.initialized = false;\n }\n}\n\n@Directive({\n selector: '[ttSortableColumn]',\n host: {\n '[class.ui-sortable-column]': 'isEnabled()',\n '[class.ui-state-highlight]': 'sorted',\n '[attr.tabindex]': 'isEnabled() ? \"0\" : null'\n }\n})\nexport class TTSortableColumn implements OnInit, OnDestroy {\n\n @Input(\"ttSortableColumn\") field: string;\n\n @Input() ttSortableColumnDisabled: boolean;\n\n sorted: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable) {\n if (this.isEnabled()) {\n this.subscription = this.tt.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.tt.isSorted(this.field);\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled()) {\n this.updateSortState();\n this.tt.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.ttSortableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Component({\n selector: 'p-treeTableSortIcon',\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 TTSortIcon implements OnInit, OnDestroy {\n\n @Input() field: string;\n\n @Input() ariaLabelDesc: string;\n\n @Input() ariaLabelAsc: string;\n\n subscription: Subscription;\n\n sortOrder: number;\n\n constructor(public tt: TreeTable) {\n this.subscription = this.tt.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.tt.sortMode === 'single') {\n this.sortOrder = this.tt.isSorted(this.field) ? this.tt.sortOrder : 0;\n }\n else if (this.tt.sortMode === 'multiple') {\n let sortMeta = this.tt.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: '[ttResizableColumn]'\n})\nexport class TTResizableColumn implements AfterViewInit, OnDestroy {\n\n @Input() ttResizableColumnDisabled: boolean;\n\n resizer: HTMLSpanElement;\n\n resizerMouseDownListener: any;\n\n documentMouseMoveListener: any;\n\n documentMouseUpListener: any;\n\n constructor(public tt: TreeTable, 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: Event) {\n this.tt.onColumnResizeBegin(event);\n this.bindDocumentEvents();\n }\n\n onDocumentMouseMove(event: Event) {\n this.tt.onColumnResize(event);\n }\n\n onDocumentMouseUp(event: Event) {\n this.tt.onColumnResizeEnd(event, this.el.nativeElement);\n this.unbindDocumentEvents();\n }\n\n isEnabled() {\n return this.ttResizableColumnDisabled !== 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: '[ttReorderableColumn]'\n})\nexport class TTReorderableColumn implements AfterViewInit, OnDestroy {\n\n @Input() ttReorderableColumnDisabled: 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 tt: TreeTable, 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' || 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.tt.onColumnDragStart(event, this.el.nativeElement);\n }\n\n onDragOver(event) {\n event.preventDefault();\n }\n\n onDragEnter(event) {\n this.tt.onColumnDragEnter(event, this.el.nativeElement);\n }\n\n onDragLeave(event) {\n this.tt.onColumnDragLeave(event);\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled()) {\n this.tt.onColumnDrop(event, this.el.nativeElement);\n }\n }\n\n isEnabled() {\n return this.ttReorderableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n }\n\n}\n\n@Directive({\n selector: '[ttSelectableRow]',\n host: {\n '[class.ui-state-highlight]': 'selected'\n }\n})\nexport class TTSelectableRow implements OnInit, OnDestroy {\n\n @Input(\"ttSelectableRow\") rowNode: any;\n\n @Input() ttSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n if (this.isEnabled()) {\n this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.tt.isSelected(this.rowNode.node);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.tt.isSelected(this.rowNode.node);\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowClick({\n originalEvent: event,\n rowNode: this.rowNode\n });\n }\n }\n\n @HostListener('keydown', ['$event'])\n onEnterKey(event: KeyboardEvent) {\n if (event.which === 13) {\n this.onClick(event);\n }\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowTouchEnd(event);\n }\n }\n\n isEnabled() {\n return this.ttSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[ttSelectableRowDblClick]',\n host: {\n '[class.ui-state-highlight]': 'selected'\n }\n})\nexport class TTSelectableRowDblClick implements OnInit, OnDestroy {\n\n @Input(\"ttSelectableRowDblClick\") rowNode: any;\n\n @Input() ttSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n if (this.isEnabled()) {\n this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.tt.isSelected(this.rowNode.node);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.tt.isSelected(this.rowNode.node);\n }\n }\n\n @HostListener('dblclick', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowClick({\n originalEvent: event,\n rowNode: this.rowNode\n });\n }\n }\n\n isEnabled() {\n return this.ttSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[ttContextMenuRow]',\n host: {\n '[class.ui-contextmenu-selected]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class TTContextMenuRow {\n\n @Input(\"ttContextMenuRow\") rowNode: any;\n\n @Input() ttContextMenuRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService, private el: ElementRef) {\n if (this.isEnabled()) {\n this.subscription = this.tt.tableService.contextMenuSource$.subscribe((node) => {\n this.selected = this.tt.equals(this.rowNode.node, node);\n });\n }\n }\n\n @HostListener('contextmenu', ['$event'])\n onContextMenu(event: Event) {\n if (this.isEnabled()) {\n this.tt.handleRowRightClick({\n originalEvent: event,\n rowNode: this.rowNode\n });\n\n this.el.nativeElement.focus();\n\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.ttContextMenuRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-treeTableCheckbox',\n template: `\n <div class=\"ui-chkbox ui-treetable-chkbox ui-widget\" (click)=\"onClick($event)\">\n <div class=\"ui-helper-hidden-accessible\">\n <input type=\"checkbox\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\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 pi\" [ngClass]=\"{'pi-check':checked, 'pi-minus': rowNode.node.partialSelected}\"></span>\n </div>\n </div>\n `\n})\nexport class TTCheckbox {\n\n @Input() disabled: boolean;\n\n @Input(\"value\") rowNode: any;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.tt.isSelected(this.rowNode.node);\n });\n }\n\n ngOnInit() {\n this.checked = this.tt.isSelected(this.rowNode.node);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.tt.toggleNodeWithCheckbox({\n originalEvent: event,\n rowNode: this.rowNode\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 ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-treeTableHeaderCheckbox',\n template: `\n <div class=\"ui-chkbox ui-treetable-header-chkbox ui-widget\" (click)=\"onClick($event, cb.checked)\">\n <div class=\"ui-helper-hidden-accessible\">\n <input #cb type=\"checkbox\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [disabled]=\"!tt.value||tt.value.length === 0\">\n </div>\n <div #box [ngClass]=\"{'ui-chkbox-box ui-widget ui-state-default':true,\n 'ui-state-active':checked, 'ui-state-disabled': (!tt.value || tt.value.length === 0)}\" 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 TTHeaderCheckbox {\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n disabled: boolean;\n\n selectionChangeSubscription: Subscription;\n\n valueChangeSubscription: Subscription;\n\n constructor(public tt: TreeTable, public tableService: TreeTableService) {\n this.valueChangeSubscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n\n this.selectionChangeSubscription = this.tt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n }\n\n ngOnInit() {\n this.checked = this.updateCheckedState();\n }\n\n onClick(event: Event, checked) {\n if (this.tt.value && this.tt.value.length > 0) {\n this.tt.toggleNodesWithCheckbox(event, !checked);\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 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 let checked: boolean;\n const data = this.tt.filteredNodes||this.tt.value;\n\n if (data) {\n for (let node of data) {\n if (this.tt.isSelected(node)) {\n checked = true;\n }\n else {\n checked = false;\n break;\n }\n }\n }\n else {\n checked = false;\n }\n\n return checked;\n }\n\n}\n\n@Directive({\n selector: '[ttEditableColumn]'\n})\nexport class TTEditableColumn implements AfterViewInit {\n\n @Input(\"ttEditableColumn\") data: any;\n\n @Input(\"ttEditableColumnField\") field: any;\n\n @Input() ttEditableColumnDisabled: boolean;\n\n constructor(public tt: TreeTable, 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.tt.editingCellClick = true;\n\n if (this.tt.editingCell) {\n if (this.tt.editingCell !== this.el.nativeElement) {\n if (!this.tt.isEditingCellValid()) {\n return;\n }\n\n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.openCell();\n }\n }\n else {\n this.openCell();\n }\n }\n }\n\n openCell() {\n this.tt.updateEditingCell(this.el.nativeElement);\n DomHandler.addClass(this.el.nativeElement, 'ui-editing-cell');\n this.tt.onEditInit.emit({ field: this.field, data: this.data});\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n let focusable = DomHandler.findSingle(this.el.nativeElement, 'input, textarea');\n if (focusable) {\n focusable.focus();\n }\n }, 50);\n });\n }\n\n closeEditingCell() {\n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.tt.editingCell = null;\n this.tt.unbindDocumentEditListener();\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n //enter\n if (event.keyCode == 13) {\n if (this.tt.isEditingCellValid()) {\n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.closeEditingCell();\n this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n }\n\n event.preventDefault();\n }\n\n //escape\n else if (event.keyCode == 27) {\n if (this.tt.isEditingCellValid()) {\n DomHandler.removeClass(this.tt.editingCell, 'ui-editing-cell');\n this.closeEditingCell();\n this.tt.onEditCancel.emit({ field: this.field, data: this.data });\n }\n\n event.preventDefault();\n }\n\n //tab\n else if (event.keyCode == 9) {\n this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n\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 let row = currentCell.parentElement;\n let targetCell = this.findPreviousEditableColumn(currentCell);\n\n if (targetCell) {\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n\n moveToNextCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n let row = currentCell.parentElement;\n let targetCell = this.findNextEditableColumn(currentCell);\n\n if (targetCell) {\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n\n findPreviousEditableColumn(cell: Element) {\n let prevCell = cell.previousElementSibling;\n\n if (!prevCell) {\n let previousRow = cell.parentElement ? cell.parentElement.previousElementSibling : null;\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 ? cell.parentElement.nextElementSibling : null;\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.ttEditableColumnDisabled !== true;\n }\n\n}\n\n@Component({\n selector: 'p-treeTableCellEditor',\n template: `\n <ng-container *ngIf=\"tt.editingCell === editableColumn.el.nativeElement\">\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!tt.editingCell || tt.editingCell !== editableColumn.el.nativeElement\">\n <ng-container *ngTemplateOutlet=\"outputTemplate\"></ng-container>\n </ng-container>\n `\n})\nexport class TreeTableCellEditor implements AfterContentInit {\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n inputTemplate: TemplateRef<any>;\n\n outputTemplate: TemplateRef<any>;\n\n constructor(public tt: TreeTable, public editableColumn: TTEditableColumn) { }\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\n@Directive({\n selector: '[ttRow]',\n host: {\n '[attr.tabindex]': '\"0\"'\n }\n})\nexport class TTRow {\n\n @Input('ttRow') rowNode: any;\n\n constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n switch (event.which) {\n //down arrow\n case 40:\n let nextRow = this.el.nativeElement.nextElementSibling;\n if (nextRow) {\n nextRow.focus();\n }\n\n event.preventDefault();\n break;\n\n //down arrow\n case 38:\n let prevRow = this.el.nativeElement.previousElementSibling;\n if (prevRow) {\n prevRow.focus();\n }\n\n event.preventDefault();\n break;\n\n //left arrow\n case 37:\n if (this.rowNode.node.expanded) {\n this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n this.rowNode.node.expanded = false;\n\n this.tt.onNodeCollapse.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n\n this.tt.updateSerializedValue();\n this.tt.tableService.onUIUpdate(this.tt.value);\n this.restoreFocus();\n }\n break;\n\n //right arrow\n case 39:\n if (!this.rowNode.node.expanded) {\n this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n this.rowNode.node.expanded = true;\n\n this.tt.onNodeExpand.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n\n this.tt.updateSerializedValue();\n this.tt.tableService.onUIUpdate(this.tt.value);\n this.restoreFocus();\n }\n break;\n }\n }\n\n restoreFocus() {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n let row = DomHandler.findSingle(this.tt.containerViewChild.nativeElement, '.ui-treetable-tbody').children[this.tt.toggleRowIndex];\n if (row) {\n row.focus();\n }\n }, 25);\n });\n }\n}\n\n@Component({\n selector: 'p-treeTableToggler',\n template: `\n <a class=\"ui-treetable-toggler ui-unselectable-text\" (click)=\"onClick($event)\"\n [style.visibility]=\"rowNode.node.leaf === false || (rowNode.node.children && rowNode.node.children.length) ? 'visible' : 'hidden'\" [style.marginLeft]=\"rowNode.level * 16 + 'px'\">\n <i [ngClass]=\"rowNode.node.expanded ? 'pi pi-fw pi-chevron-down' : 'pi pi-fw pi-chevron-right'\"></i>\n </a>\n `\n})\nexport class TreeTableToggler {\n\n @Input() rowNode: any;\n\n constructor(public tt: TreeTable) {}\n\n onClick(event: Event) {\n this.rowNode.node.expanded = !this.rowNode.node.expanded;\n\n if (this.rowNode.node.expanded) {\n this.tt.onNodeExpand.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n }\n else {\n this.tt.onNodeCollapse.emit({\n originalEvent: event,\n node: this.rowNode.node\n });\n }\n\n this.tt.updateSerializedValue();\n this.tt.tableService.onUIUpdate(this.tt.value);\n\n event.preventDefault();\n }\n}\n\n@NgModule({\n imports: [CommonModule,PaginatorModule],\n exports: [TreeTable,SharedModule,TreeTableToggler,TTSortableColumn,TTSortIcon,TTResizableColumn,TTRow,TTReorderableColumn,TTSelectableRow,TTSelectableRowDblClick,TTContextMenuRow,TTCheckbox,TTHeaderCheckbox,TTEditableColumn,TreeTableCellEditor],\n declarations: [TreeTable,TreeTableToggler,TTScrollableView,TTBody,TTSortableColumn,TTSortIcon,TTResizableColumn,TTRow,TTReorderableColumn,TTSelectableRow,TTSelectableRowDblClick,TTContextMenuRow,TTCheckbox,TTHeaderCheckbox,TTEditableColumn,TreeTableCellEditor]\n})\nexport class TreeTableModule { }\n"]}
\No newline at end of file