primeng 11.2.2 → 11.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/avatar/primeng-avatar.metadata.json +1 -1
  2. package/bundles/primeng-avatar.umd.js +1 -1
  3. package/bundles/primeng-avatar.umd.min.js +1 -1
  4. package/bundles/primeng-avatar.umd.min.js.map +1 -1
  5. package/bundles/primeng-confirmdialog.umd.js +1 -1
  6. package/bundles/primeng-confirmdialog.umd.min.js +1 -1
  7. package/bundles/primeng-confirmdialog.umd.min.js.map +1 -1
  8. package/bundles/primeng-dialog.umd.js +1 -1
  9. package/bundles/primeng-dialog.umd.min.js +1 -1
  10. package/bundles/primeng-dialog.umd.min.js.map +1 -1
  11. package/bundles/primeng-dynamicdialog.umd.js +1 -1
  12. package/bundles/primeng-dynamicdialog.umd.min.js +1 -1
  13. package/bundles/primeng-dynamicdialog.umd.min.js.map +1 -1
  14. package/bundles/primeng-inputmask.umd.js +5 -2
  15. package/bundles/primeng-inputmask.umd.js.map +1 -1
  16. package/bundles/primeng-inputmask.umd.min.js +1 -1
  17. package/bundles/primeng-inputmask.umd.min.js.map +1 -1
  18. package/bundles/primeng-inputnumber.umd.js +16 -2
  19. package/bundles/primeng-inputnumber.umd.js.map +1 -1
  20. package/bundles/primeng-inputnumber.umd.min.js +1 -1
  21. package/bundles/primeng-inputnumber.umd.min.js.map +1 -1
  22. package/bundles/primeng-lightbox.umd.js +1 -1
  23. package/bundles/primeng-lightbox.umd.min.js +1 -1
  24. package/bundles/primeng-lightbox.umd.min.js.map +1 -1
  25. package/bundles/primeng-slider.umd.js +1 -0
  26. package/bundles/primeng-slider.umd.js.map +1 -1
  27. package/bundles/primeng-slider.umd.min.js +1 -1
  28. package/bundles/primeng-slider.umd.min.js.map +1 -1
  29. package/bundles/primeng-table.umd.js +15 -8
  30. package/bundles/primeng-table.umd.js.map +1 -1
  31. package/bundles/primeng-table.umd.min.js +2 -2
  32. package/bundles/primeng-table.umd.min.js.map +1 -1
  33. package/confirmdialog/primeng-confirmdialog.metadata.json +1 -1
  34. package/dialog/primeng-dialog.metadata.json +1 -1
  35. package/dynamicdialog/primeng-dynamicdialog.metadata.json +1 -1
  36. package/esm2015/avatar/avatar.js +1 -1
  37. package/esm2015/confirmdialog/confirmdialog.js +1 -1
  38. package/esm2015/dialog/dialog.js +1 -1
  39. package/esm2015/dynamicdialog/dynamicdialog.js +1 -1
  40. package/esm2015/inputmask/inputmask.js +6 -3
  41. package/esm2015/inputnumber/inputnumber.js +13 -3
  42. package/esm2015/lightbox/lightbox.js +1 -1
  43. package/esm2015/slider/slider.js +2 -1
  44. package/esm2015/table/table.js +16 -9
  45. package/fesm2015/primeng-avatar.js +1 -1
  46. package/fesm2015/primeng-confirmdialog.js +1 -1
  47. package/fesm2015/primeng-dialog.js +1 -1
  48. package/fesm2015/primeng-dynamicdialog.js +1 -1
  49. package/fesm2015/primeng-inputmask.js +5 -2
  50. package/fesm2015/primeng-inputmask.js.map +1 -1
  51. package/fesm2015/primeng-inputnumber.js +12 -2
  52. package/fesm2015/primeng-inputnumber.js.map +1 -1
  53. package/fesm2015/primeng-lightbox.js +1 -1
  54. package/fesm2015/primeng-slider.js +1 -0
  55. package/fesm2015/primeng-slider.js.map +1 -1
  56. package/fesm2015/primeng-table.js +15 -8
  57. package/fesm2015/primeng-table.js.map +1 -1
  58. package/inputmask/inputmask.d.ts +2 -1
  59. package/inputmask/primeng-inputmask.metadata.json +1 -1
  60. package/inputnumber/inputnumber.d.ts +3 -1
  61. package/inputnumber/primeng-inputnumber.metadata.json +1 -1
  62. package/lightbox/primeng-lightbox.metadata.json +1 -1
  63. package/package.json +1 -1
  64. package/resources/components/avatar/avatar.css +3 -2
  65. package/resources/components/dialog/dialog.css +2 -0
  66. package/slider/primeng-slider.metadata.json +1 -1
  67. package/table/primeng-table.metadata.json +1 -1
  68. package/table/table.d.ts +4 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../src/app/components/table/table.ts"],"names":["Object","create","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","__spread","arguments","concat","TableService","this","sortSource","Subject","selectionSource","contextMenuSource","valueSource","totalRecordsSource","columnsSource","sortSource$","asObservable","selectionSource$","contextMenuSource$","valueSource$","totalRecordsSource$","columnsSource$","prototype","onSort","sortMeta","onSelectionChange","onContextMenu","data","onValueChange","onTotalRecordsChange","onColumnsChange","columns","Injectable","Table","el","zone","tableService","cd","filterService","pageLinks","alwaysShowPaginator","paginatorPosition","paginatorDropdownScrollHeight","currentPageReportTemplate","showFirstLastIcon","showPageLinks","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","virtualScroll","emit","createLazyLoadMetadata","restoringFilter","initialized","ngAfterContentInit","_this","templates","forEach","getType","captionTemplate","template","headerTemplate","bodyTemplate","loadingBodyTemplate","footerTemplate","summaryTemplate","colGroupTemplate","expandedRowTemplate","frozenRowsTemplate","frozenHeaderTemplate","frozenBodyTemplate","frozenFooterTemplate","frozenColGroupTemplate","frozenExpandedRowTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","paginatorDropdownItemTemplate","ngAfterViewInit","isStateful","resizableColumns","restoreColumnWidths","ngOnChanges","simpleChange","stateRestored","restoreState","currentValue","totalRecords","sortField","sortSingle","multiSortMeta","sortMultiple","hasFilter","_filter","_columns","reorderableColumns","columnOrderStateRestored","restoreColumnOrder","_sortField","sortOrder","_multiSortMeta","selection","_selection","preventSelectionSetterPropagation","updateSelectionKeys","defineProperty","val","cols","_rows","dataKey","Array","isArray","_c","_d","String","ObjectUtils","resolveFieldData","onPageChange","event","first","rows","saveState","anchorRowIndex","scrollable","resetScrollTop","sort","originalEvent","field","metaKey","ctrlKey","getSortMeta","order","restoringSort","customSort","mode","data1","data2","value1","value2","result","localeCompare","multisortField","multisortmeta","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","selectionIndex_2","handleRowTouchEnd","handleRowRightClick","contextMenu","contextMenuSelection","show","rangeStart","rangeEnd","paginator","rangeRowsData","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","filterField","filterMeta","filterMeta_1","e_2","filterMeta_1_1","meta","executeLocalFilter","operator","FilterOperator","OR","AND","j","globalFilterField","filterLocale","markForCheck","filterValue","filterMatchMode","FilterMatchMode","STARTS_WITH","dataFieldValue","filterConstraint","empty","globalFilter","clear","reset","exportCSV","options","csv","frozenColumns","selectionOnly","frozenValue","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","scrollToVirtualIndex","scrollTo","top","scrollableViewChild","scrollableFrozenViewChild","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","onColumnResizeEnd","delta","offsetLeft","columnWidth","offsetWidth","minWidth","parseInt","newColumnWidth","nextColumn","nextElementSibling","offsetParent","nextColumnWidth","nextColumnMinWidth","scrollableView","findParentScrollableView","scrollableBodyTable","findSingle","scrollableHeaderTable","scrollableFooterTable","resizeColumnIndex","resizeColGroup","width","setScrollableItemsWidthOnExpandResize","tableViewChild","containerWidth","element","scrollableBody","scrollableHeader","scrollableFooter","scrollableBodyTableWidth","scrollableHeaderTableWidth","isContainerInViewport","setWidth","container","table","calculateScrollbarWidth","parent","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","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","Component","args","selector","providers","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","ElementRef","NgZone","ChangeDetectorRef","FilterService","Input","Output","ViewChild","ContentChildren","PrimeTemplate","TableBody","dt","subscription","subscribe","detectChanges","unsubscribe","ScrollableView","_scrollHeight","includes","console","log","virtualScrollBody","frozen","scrollableAlignerViewChild","calculateScrollbarHeight","frozenView","frozenSiblingBody","scrollBarWidth","scrollHeaderBoxViewChild","paddingRight","scrollFooterBoxViewChild","bindEvents","scrollHeaderViewChild","headerScrollListener","onHeaderScroll","bind","scrollFooterViewChild","footerScrollListener","onFooterScroll","bodyScrollListener","onBodyScroll","getElementRef","scrollBodyViewChild","unbindEvents","preventBodyScrollPropagation","marginLeft","scrollTop","onScrollIndexChange","virtualScrollTimeout","page","floor","virtualScrollOffset","virtualScrollChunkSize","virtualPage","getPageCount","dataToRender","dataLength","scrollToIndex","CdkVirtualScrollViewport","SortableColumn","isEnabled","updateSortState","onClick","isFilterElement","onEnterKey","pSortableColumnDisabled","Directive","host","[class.p-sortable-column]","[class.p-highlight]","[attr.tabindex]","[attr.role]","[attr.aria-sort]","HostListener","SortIcon","OnPush","SelectableRow","onTouchEnd","onArrowDownKeyDown","row","currentTarget","nextRow","findNextSelectableRow","focus","onArrowUpKeyDown","prevRow","findPrevSelectableRow","onEnterKeyDown","onSpaceKeyDown","onPageDownKeyDown","pSelectableRowDisabled","[class.p-selectable-row]","SelectableRowDblClick","ContextMenuRow","pContextMenuRowDisabled","[class.p-highlight-contextmenu]","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","onArrowDown","currentCell","findCell","cellIndex","targetCell","findNextEditableColumnByIndex","invokeElementMethod","onArrowUp","findPrevEditableColumnByIndex","onArrowLeft","onArrowRight","findPreviousEditableColumn","findNextEditableColumn","prevCell","previousRow","lastElementChild","nextCell","firstElementChild","pEditableColumnDisabled","EditableRow","pEditableRowDisabled","InitEditableRow","editableRow","SaveEditableRow","CancelEditableRow","CellEditor","editableColumn","inputTemplate","outputTemplate","decorators","Optional","TableRadioButton","disabled","onFocus","boxViewChild","onBlur","TableCheckbox","TableHeaderCheckbox","valueChangeSubscription","updateCheckedState","selectionChangeSubscription","isDisabled","isAllFilteredValuesChecked","ReorderableRowHandle","ReorderableRow","droppable","dragEndListener","onDragEnd","pReorderableRowDisabled","ColumnFilterFormElement","useGrouping","filterCallback","onModelChange","onTextInputEnterKeyDown","onNumericInputKeyDown","ColumnFilter","renderer","config","showMenu","showOperator","showClearButton","showApplyButton","showMatchModes","showAddButton","maxConstraints","initFieldFilterConstraint","translationSubscription","translationObserver","generateMatchModeOptions","generateOperatorOptions","matchModes","matchModeOptions","_a","filterMatchModeOptions","label","getTranslation","operatorOptions","TranslationKeys","MATCH_ALL","MATCH_ANY","filterTemplate","defaultMatchMode","getDefaultMatchMode","onMenuMatchModeChange","onRowMatchModeChange","hide","onRowMatchModeKeyDown","nextItem","findNextItem","removeAttribute","tabIndex","prevItem","findPrevItem","onRowClearItemClick","clearFilter","isRowMatchModeSelected","addConstraint","getDefaultOperator","removeConstraint","onOperatorChange","toggleMenu","overlayVisible","onToggleButtonKeyDown","focusable","getFocusableElements","overlay","altKey","onEscape","icon","onOverlayAnimationStart","toState","zIndex","zindex","absolutePosition","bindDocumentClickListener","bindDocumentResizeListener","bindScrollListener","onOverlayHide","EQUALS","DATE_IS","CONTAINS","hasRowFilter","fieldConstraints","APPLY","CLEAR","ADD_RULE","REMOVE_RULE","NO_FILTER","fieldFilter","isOutsideClicked","isSameNode","contains","documentClickListener","documentTarget","ownerDocument","listen","unbindDocumentClickListener","documentResizeListener","unbindDocumentResizeListener","scrollHandler","ConnectedOverlayScrollHandler","unbindScrollListener","applyFilter","animations","trigger","transition","opacity","transform","animate","Renderer2","PrimeNGConfig","NgModule","imports","CommonModule","PaginatorModule","InputTextModule","DropdownModule","ScrollingModule","FormsModule","ButtonModule","SelectButtonModule","CalendarModule","InputNumberModule","TriStateCheckboxModule","exports","SharedModule","declarations"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { NgModule, Component, HostListener, OnInit, OnDestroy, AfterViewInit, Directive, Optional, AfterContentInit,\n Input, Output, EventEmitter, ElementRef, ContentChildren, TemplateRef, QueryList, ViewChild, NgZone, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy, Query, ViewEncapsulation, Renderer2} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PrimeTemplate, SharedModule, FilterMatchMode, FilterOperator, SelectItem, PrimeNGConfig, TranslationKeys, FilterService } from 'primeng/api';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { TriStateCheckboxModule } from 'primeng/tristatecheckbox';\nimport { CalendarModule } from 'primeng/calendar';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { DomHandler, ConnectedOverlayScrollHandler } 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 { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\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\" data-scrollselectors=\".p-datatable-scrollable-body, .p-datatable-unfrozen-view .p-datatable-scrollable-body\"\n [ngClass]=\"{'p-datatable p-component': true,\n 'p-datatable-hoverable-rows': (rowHover||selectionMode),\n 'p-datatable-auto-layout': autoLayout,\n 'p-datatable-resizable': resizableColumns,\n 'p-datatable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),\n 'p-datatable-scrollable': scrollable,\n 'p-datatable-flex-scrollable': (scrollable && scrollHeight === 'flex'),\n 'p-datatable-responsive': responsive}\">\n <div class=\"p-datatable-loading-overlay p-component-overlay\" *ngIf=\"loading && showLoader\">\n <i [class]=\"'p-datatable-loading-icon pi-spin ' + loadingIcon\"></i>\n </div>\n <div *ngIf=\"captionTemplate\" class=\"p-datatable-header\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </div>\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-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\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div class=\"p-datatable-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=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\"></tbody>\n <tfoot *ngIf=\"footerTemplate\" class=\"p-datatable-tfoot\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n\n <div class=\"p-datatable-scrollable-wrapper\" *ngIf=\"scrollable\">\n <div class=\"p-datatable-scrollable-view p-datatable-frozen-view\" *ngIf=\"frozenColumns||frozenBodyTemplate\" #scrollableFrozenView [pScrollableView]=\"frozenColumns\" [frozen]=\"true\" [ngStyle]=\"{width: frozenWidth}\" [scrollHeight]=\"scrollHeight\"></div>\n <div class=\"p-datatable-scrollable-view\" #scrollableView [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=\"p-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\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div *ngIf=\"summaryTemplate\" class=\"p-datatable-footer\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n </div>\n\n <div #resizeHelper class=\"p-column-resizer-helper\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n <span #reorderIndicatorUp class=\"pi pi-arrow-down p-datatable-reorder-indicator-up\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n <span #reorderIndicatorDown class=\"pi pi-arrow-up p-datatable-reorder-indicator-down\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n </div>\n `,\n providers: [TableService],\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./table.css']\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() showJumpToPageDropdown: boolean;\n\n @Input() showFirstLastIcon: boolean = true;\n\n @Input() showPageLinks: boolean = true;\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 | 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 = 250;\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 @Input() minBufferPx: number;\n\n @Input() maxBufferPx: number;\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 @ViewChild('scrollableView') scrollableViewChild;\n\n @ViewChild('scrollableFrozenView') scrollableFrozenViewChild;\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 frozenExpandedRowTemplate: 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 paginatorDropdownItemTemplate: 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 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, public filterService: FilterService) {}\n\n ngOnInit() {\n if (this.lazy && this.lazyLoadOnInit) {\n if (!this.virtualScroll) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n\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 'frozenrowexpansion':\n this.frozenExpandedRowTemplate = 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 'paginatordropdownitem':\n this.paginatorDropdownItemTemplate = 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 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' && (this.initialized || !this.virtualScroll)) {\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 if (this.scrollable) {\n this.resetScrollTop();\n }\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\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\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 if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\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 this._value = [...this.value];\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 this._value = [...this.value];\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, 'p-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', index: event.rowIndex });\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', index: event.rowIndex });\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 if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (this.isMultipleSelectionMode()) {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n \n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n\n this.tableService.onSelectionChange();\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 let rangeRowsData = [];\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 rangeRowsData.push(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 }\n }\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({originalEvent: event, data: rangeRowsData, type: 'row'});\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 /* Legacy Filtering for custom elements */\n filter(value: any, field: string, matchMode: string) {\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\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 filterField = prop;\n let filterMeta = this.filters[filterField];\n\n if (Array.isArray(filterMeta)) {\n for (let meta of filterMeta) {\n localMatch = this.executeLocalFilter(filterField, this.value[i], meta);\n\n if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {\n break;\n }\n }\n }\n else {\n localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);\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 = this.filterService.filters[(<FilterMetadata> this.filters['global']).matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), (<FilterMetadata> 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 if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\n executeLocalFilter(field: string, rowData: any, filterMeta: FilterMetadata): boolean {\n let filterValue = filterMeta.value;\n let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;\n let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);\n let filterConstraint = this.filterService.filters[filterMatchMode];\n\n return filterConstraint(dataFieldValue, filterValue, this.filterLocale);\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.rows,\n sortField: this.sortField,\n sortOrder: this.sortOrder,\n filters: this.filters,\n globalFilter: this.filters && this.filters['global'] ? (<FilterMetadata> this.filters['global']).value : null,\n multiSortMeta: this.multiSortMeta\n };\n }\n\n public clear() {\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 reset() {\n this.clear();\n }\n\n public exportCSV(options?: any) {\n let data;\n let csv = '';\n let columns = this.frozenColumns ? [...this.frozenColumns, ...this.columns] : this.columns;\n\n if (options && options.selectionOnly) {\n data = this.selection || [];\n }\n else {\n data = this.filteredValue || this.value;\n\n if (this.frozenValue) {\n data = data ? [...this.frozenValue, ...data] : this.frozenValue;\n }\n }\n\n //headers\n for (let i = 0; i < columns.length; i++) {\n let column = columns[i];\n if (column.exportable !== false && column.field) {\n csv += '\"' + (column.header || column.field) + '\"';\n\n if (i < (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 < columns.length; i++) {\n let column = 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 csv += '\"' + cellData + '\"';\n\n if (i < (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 public resetScrollTop() {\n if (this.virtualScroll)\n this.scrollToVirtualIndex(0);\n else\n this.scrollTo({top: 0});\n }\n\n public scrollToVirtualIndex(index: number) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollToVirtualIndex(index);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollToVirtualIndex(index);\n }\n }\n\n public scrollTo(options) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollTo(options);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollTo(options);\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, 'p-cell-editing');\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 this.cd.markForCheck();\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, 'p-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, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, '.p-datatable-virtual-scrollable-body table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-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, 'p-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, '.p-datatable-scrollable-body') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport');\n let scrollableHeader = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-header');\n let scrollableFooter = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-footer');\n let scrollableBodyTable = DomHandler.findSingle(scrollableBody, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableHeader, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableFooter, 'table.p-datatable-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, 'p-datatable-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, 'p-datatable-dragpoint-bottom');\n\n this.droppedRowIndex = index;\n if (prevRowElement)\n DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n }\n else {\n if (prevRowElement)\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n\n this.droppedRowIndex = index + 1;\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom');\n }\n }\n }\n\n onRowDragLeave(event, rowElement) {\n let prevRowElement = rowElement.previousElementSibling;\n if (prevRowElement) {\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n }\n\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n DomHandler.removeClass(rowElement, 'p-datatable-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 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 if (this.first !== undefined) {\n this.first = state.first;\n this.firstChange.emit(this.first);\n }\n\n if (this.rows !== undefined) {\n this.rows = state.rows;\n this.rowsChange.emit(this.rows);\n }\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, '.p-datatable-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, '.p-datatable-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, '.p-datatable-scrollable-header-table > colgroup > col');\n let bodyCols = this.virtualScroll ? DomHandler.find(this.containerViewChild.nativeElement, 'cdk-virtual-scroll-viewport table > colgroup > col') : DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-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, '.p-datatable-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\n columnOrder.map(key => {\n let col = this.findColumnByKey(key);\n if (col) {\n reorderedColumns.push(col)\n }\n });\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 && !dt.virtualScroll\">\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 && dt.virtualScroll\">\n <ng-template cdkVirtualFor let-rowData let-rowIndex=\"index\" [cdkVirtualForOf]=\"dt.filteredValue||dt.value\" [cdkVirtualForTrackBy]=\"dt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n <ng-container *ngTemplateOutlet=\"rowData ? template: dt.loadingBodyTemplate; 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 && !(frozen && dt.frozenExpandedRowTemplate)\">\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.frozenExpandedRowTemplate && frozen\">\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.frozenExpandedRowTemplate; 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 changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableBody implements OnDestroy {\n\n @Input(\"pTableBody\") columns: any[];\n\n @Input(\"pTableBodyTemplate\") template: TemplateRef<any>;\n\n @Input() frozen: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.valueSource$.subscribe(() => {\n if (this.dt.virtualScroll) {\n this.cd.detectChanges();\n }\n });\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Component({\n selector: '[pScrollableView]',\n template: `\n <div #scrollHeader class=\"p-datatable-scrollable-header\">\n <div #scrollHeaderBox class=\"p-datatable-scrollable-header-box\">\n <table class=\"p-datatable-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=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenHeaderTemplate||dt.headerTemplate : dt.headerTemplate; context {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-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 <ng-container *ngIf=\"!dt.virtualScroll; else virtualScrollTemplate\">\n <div #scrollBody class=\"p-datatable-scrollable-body\" [ngStyle]=\"{'max-height': dt.scrollHeight !== 'flex' ? scrollHeight : undefined, 'overflow-y': !frozen && dt.scrollHeight ? 'scroll' : undefined}\">\n <table #scrollTable [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=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </div>\n </ng-container>\n <ng-template #virtualScrollTemplate>\n <cdk-virtual-scroll-viewport [itemSize]=\"dt.virtualRowHeight\" tabindex=\"0\" [style.height]=\"dt.scrollHeight !== 'flex' ? scrollHeight : undefined\"\n [minBufferPx]=\"dt.minBufferPx\" [maxBufferPx]=\"dt.maxBufferPx\" (scrolledIndexChange)=\"onScrollIndexChange($event)\" class=\"p-datatable-virtual-scrollable-body\">\n <table #scrollTable [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=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </cdk-virtual-scroll-viewport>\n </ng-template>\n <div #scrollFooter class=\"p-datatable-scrollable-footer\">\n <div #scrollFooterBox class=\"p-datatable-scrollable-footer-box\">\n <table class=\"p-datatable-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=\"p-datatable-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 changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class ScrollableView implements AfterViewInit,OnDestroy {\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('scrollFooter') scrollFooterViewChild: ElementRef;\n\n @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n @ViewChild('scrollableAligner') scrollableAlignerViewChild: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScrollBody: CdkVirtualScrollViewport;\n\n headerScrollListener: any;\n\n bodyScrollListener: any;\n\n footerScrollListener: any;\n\n frozenSiblingBody: HTMLDivElement;\n\n preventBodyScrollPropagation: boolean;\n\n _scrollHeight: string;\n\n virtualScrollTimeout: any;\n\n virtualPage: number;\n\n @Input() get scrollHeight(): string {\n return this._scrollHeight;\n }\n set scrollHeight(val: string) {\n this._scrollHeight = val;\n if (val != null && (val.includes('%') || val.includes('calc'))) {\n console.log('Percentage scroll height calculation is removed in favor of the more performant CSS based flex mode, use scrollHeight=\"flex\" instead.')\n }\n\n if (this.dt.virtualScroll && this.virtualScrollBody) {\n this.virtualScrollBody.ngOnInit();\n }\n }\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (!this.frozen) {\n if (this.dt.frozenColumns || this.dt.frozenBodyTemplate) {\n DomHandler.addClass(this.el.nativeElement, 'p-datatable-unfrozen-view');\n }\n\n let frozenView = this.el.nativeElement.previousElementSibling;\n if (frozenView) {\n if (this.dt.virtualScroll)\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-virtual-scrollable-body');\n else\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-scrollable-body');\n }\n\n let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n this.scrollHeaderBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n\n if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n }\n }\n else {\n if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {\n this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';\n }\n }\n\n this.bindEvents();\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\n if (this.dt.virtualScroll)\n this.virtualScrollBody.getElementRef().nativeElement.addEventListener('scroll', this.bodyScrollListener);\n else\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 if (this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n\n if (this.virtualScrollBody && this.virtualScrollBody.getElementRef()) {\n this.virtualScrollBody.getElementRef().nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n }\n\n onHeaderScroll() {\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() {\n const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;\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 * event.target.scrollLeft + 'px';\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n }\n\n if (this.frozenSiblingBody) {\n this.frozenSiblingBody.scrollTop = event.target.scrollTop;\n }\n }\n\n onScrollIndexChange(index: number) {\n if (this.dt.lazy) {\n if (this.virtualScrollTimeout) {\n clearTimeout(this.virtualScrollTimeout);\n }\n\n this.virtualScrollTimeout = setTimeout(() => {\n let page = Math.floor(index / this.dt.rows);\n let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.dt.rows;\n let virtualScrollChunkSize = page === 0 ? this.dt.rows * 2 : this.dt.rows * 3;\n \n if (page !== this.virtualPage) {\n this.virtualPage = page;\n this.dt.onLazyLoad.emit({\n first: virtualScrollOffset,\n rows: virtualScrollChunkSize,\n sortField: this.dt.sortField,\n sortOrder: this.dt.sortOrder,\n filters: this.dt.filters,\n globalFilter: this.dt.filters && this.dt.filters['global'] ? (<FilterMetadata> this.dt.filters['global']).value : null,\n multiSortMeta: this.dt.multiSortMeta\n });\n }\n }, this.dt.virtualScrollDelay);\n }\n }\n\n getPageCount() {\n let dataToRender = this.dt.filteredValue || this.dt.value;\n let dataLength = dataToRender ? dataToRender.length: 0;\n return Math.ceil(dataLength / this.dt.rows);\n }\n\n scrollToVirtualIndex(index: number): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollToIndex(index);\n }\n }\n\n scrollTo(options): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollTo(options);\n }\n else {\n if (this.scrollBodyViewChild.nativeElement.scrollTo) {\n this.scrollBodyViewChild.nativeElement.scrollTo(options);\n }\n else {\n this.scrollBodyViewChild.nativeElement.scrollLeft = options.left;\n this.scrollBodyViewChild.nativeElement.scrollTop = options.top;\n }\n }\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n this.frozenSiblingBody = null;\n }\n}\n\n@Directive({\n selector: '[pSortableColumn]',\n host: {\n '[class.p-sortable-column]': 'isEnabled()',\n '[class.p-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() && !this.isFilterElement(<HTMLElement> event.target)) {\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 isFilterElement(element: HTMLElement) {\n return DomHandler.hasClass(element, 'pi-filter-icon') || DomHandler.hasClass(element, 'p-column-filter-menu-button');\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=\"p-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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\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 this.cd.markForCheck();\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.p-selectable-row]': 'isEnabled()',\n '[class.p-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 @HostListener('keydown.shift.enter', ['$event'])\n @HostListener('keydown.meta.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 @HostListener('keydown.space', ['$event'])\n onSpaceKeyDown(event: KeyboardEvent) {\n event.preventDefault();\n }\n\n @HostListener('keydown.pagedown', ['$event'])\n @HostListener('keydown.pageup', ['$event'])\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n onPageDownKeyDown() {\n if (this.dt.virtualScroll) {\n DomHandler.findSingle(this.dt.scrollableViewChild.el.nativeElement, 'cdk-virtual-scroll-viewport').focus();\n }\n }\n\n findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let nextRow = <HTMLTableRowElement> row.nextElementSibling;\n if (nextRow) {\n if (DomHandler.hasClass(nextRow, 'p-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, 'p-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.p-selectable-row]': 'isEnabled()',\n '[class.p-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.p-highlight-contextmenu]': '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, 'p-resizable-column');\n this.resizer = document.createElement('span');\n this.resizer.className = 'p-column-resizer';\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, 'p-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, 'p-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, 'p-cell-editing');\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.dt.editingCellRowIndex});\n else\n this.dt.onEditCancel.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex});\n\n DomHandler.removeClass(this.dt.editingCell, 'p-cell-editing');\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 @HostListener('keydown.arrowdown', ['$event'])\n onArrowDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let cellIndex = DomHandler.index(currentCell);\n let targetCell = this.findNextEditableColumnByIndex(currentCell, cellIndex);\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 }\n\n event.preventDefault();\n }\n }\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n onArrowUp(event: KeyboardEvent) {\n if (this.isEnabled()) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let cellIndex = DomHandler.index(currentCell);\n let targetCell = this.findPrevEditableColumnByIndex(currentCell, cellIndex);\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 }\n \n event.preventDefault();\n }\n }\n }\n\n @HostListener('keydown.arrowleft', ['$event'])\n onArrowLeft(event: KeyboardEvent) {\n if (this.isEnabled()) {\n this.moveToPreviousCell(event);\n }\n }\n\n @HostListener('keydown.arrowright', ['$event'])\n onArrowRight(event: KeyboardEvent) {\n if (this.isEnabled()) {\n this.moveToNextCell(event);\n }\n }\n\n findCell(element) {\n if (element) {\n let cell = element;\n while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {\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, 'p-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, 'p-editable-column'))\n return nextCell;\n else\n return this.findNextEditableColumn(nextCell);\n }\n else {\n return null;\n }\n }\n\n findNextEditableColumnByIndex(cell: Element, index: number) {\n let nextRow = cell.parentElement.nextElementSibling;\n\n if (nextRow) {\n let nextCell = nextRow.children[index];\n\n if (nextCell && DomHandler.hasClass(nextCell, 'p-editable-column')) {\n return nextCell;\n }\n\n return null;\n }\n else {\n return null;\n }\n }\n\n findPrevEditableColumnByIndex(cell: Element, index: number) {\n let prevRow = cell.parentElement.previousElementSibling;\n\n if (prevRow) {\n let prevCell = prevRow.children[index];\n\n if (prevCell && DomHandler.hasClass(prevCell, 'p-editable-column')) {\n return prevCell;\n }\n\n return null;\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 encapsulation: ViewEncapsulation.None\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=\"p-radiobutton p-component\" (click)=\"onClick($event)\">\n <div class=\"p-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]=\"{'p-radiobutton-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"radio\" [attr.aria-checked]=\"checked\">\n <div class=\"p-radiobutton-icon\"></div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\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, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-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=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-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]=\"{'p-checkbox-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\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, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-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=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-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]=\"{'p-checkbox-box':true,\n 'p-highlight':checked, 'p-disabled': isDisabled()}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\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, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-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 this.cd.markForCheck();\n\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, 'p-datatable-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, 'p-datatable-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@Component({\n selector: 'p-columnFilterFormElement',\n template: `\n <ng-container *ngIf=\"filterTemplate; else builtInElement\">\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}\"></ng-container>\n </ng-container>\n <ng-template #builtInElement>\n <ng-container [ngSwitch]=\"type\">\n <input *ngSwitchCase=\"'text'\" type=\"text\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\">\n <p-inputNumber *ngSwitchCase=\"'numeric'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" (onKeyDown)=\"onNumericInputKeyDown($event)\" [showButtons]=\"true\" [attr.placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [mode]=\"currency ? 'currency' : 'decimal'\" [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-inputNumber>\n <p-triStateCheckbox *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-triStateCheckbox>\n <p-calendar *ngSwitchCase=\"'date'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-calendar>\n </ng-container>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilterFormElement implements OnInit {\n \n @Input() field: string;\n\n @Input() type: string;\n\n @Input() filterConstraint: FilterMetadata;\n\n @Input() filterTemplate: TemplateRef<any>;\n\n @Input() placeholder: string;\n\n @Input() minFractionDigits: number\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n filterCallback: Function;\n\n constructor(public dt: Table) {}\n\n ngOnInit() {\n this.filterCallback = value => {\n this.filterConstraint.value = value;\n this.dt._filter();\n };\n }\n\n onModelChange(value: any) {\n this.filterConstraint.value = value;\n\n if (this.type === 'boolean' || value === '') {\n this.dt._filter();\n }\n }\n\n onTextInputEnterKeyDown(event: KeyboardEvent) {\n this.dt._filter();\n event.preventDefault();\n }\n\n onNumericInputKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.dt._filter();\n event.preventDefault();\n }\n }\n}\n\n@Component({\n selector: 'p-columnFilter',\n template: `\n <div class=\"p-column-filter\" [ngClass]=\"{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}\">\n <p-columnFilterFormElement *ngIf=\"display === 'row'\" class=\"p-fluid\" [type]=\"type\" [field]=\"field\" [filterConstraint]=\"dt.filters[field]\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\" [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button #icon *ngIf=\"showMenuButton\" type=\"button\" class=\"p-column-filter-menu-button p-link\" aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}\" \n (click)=\"toggleMenu()\" (keydown)=\"onToggleButtonKeyDown($event)\"><span class=\"pi pi-filter-icon pi-filter\"></span></button>\n <button #icon *ngIf=\"showMenuButton && display === 'row'\" [ngClass]=\"{'p-hidden-space': !hasRowFilter()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\"><span class=\"pi pi-filter-slash\"></span></button>\n <div *ngIf=\"showMenu && overlayVisible\" [ngClass]=\"{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}\" \n [@overlayAnimation]=\"'visible'\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keydown.escape)=\"onEscape()\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: field}\"></ng-container>\n <ul *ngIf=\"display === 'row'; else menu\" class=\"p-column-filter-row-items\">\n <li class=\"p-column-filter-row-item\" *ngFor=\"let matchMode of matchModes; let i = index;\" (click)=\"onRowMatchModeChange(matchMode.value)\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\n [ngClass]=\"{'p-highlight': isRowMatchModeSelected(matchMode.value)}\" [attr.tabindex]=\"i === 0 ? '0' : null\">{{matchMode.label}}</li>\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{noFilterLabel}}</li>\n </ul>\n <ng-template #menu>\n <div class=\"p-column-filter-operator\" *ngIf=\"isShowOperator\">\n <p-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"p-column-filter-operator-dropdown\"></p-dropdown>\n </div>\n <div class=\"p-column-filter-constraints\">\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"p-column-filter-constraint\">\n <p-dropdown *ngIf=\"showMatchModes && matchModes\" [options]=\"matchModes\" [ngModel]=\"fieldConstraint.matchMode\" (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\" styleClass=\"p-column-filter-matchmode-dropdown\"></p-dropdown>\n <p-columnFilterFormElement [type]=\"type\" [field]=\"field\" [filterConstraint]=\"fieldConstraint\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <div>\n <button *ngIf=\"showRemoveIcon\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-column-filter-remove-button p-button-text p-button-danger p-button-sm\" (click)=\"removeConstraint(fieldConstraint)\" pRipple [label]=\"removeRuleButtonLabel\"></button>\n </div>\n </div>\n </div>\n <div class=\"p-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" icon=\"pi pi-plus\" class=\"p-column-filter-add-button p-button-text p-button-sm\" (click)=\"addConstraint()\" pRipple></button>\n </div>\n <div class=\"p-column-filter-buttonbar\">\n <button type=\"button\" pButton class=\"p-button-outlined\" (click)=\"clearFilter()\" [label]=\"clearButtonLabel\" pRipple></button>\n <button type=\"button\" pButton (click)=\"applyFilter()\" [label]=\"applyButtonLabel\" pRipple></button>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: field}\"></ng-container>\n </div>\n </div>\n `,\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({opacity: 0, transform: 'scaleY(0.8)'}),\n animate('.12s cubic-bezier(0, 0, 0.2, 1)')\n ]),\n transition(':leave', [\n animate('.1s linear', style({ opacity: 0 }))\n ])\n ])\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilter implements AfterContentInit {\n\n @Input() field: string;\n\n @Input() type: string = 'text';\n\n @Input() display: string = 'row';\n\n @Input() showMenu: boolean = true;\n\n @Input() matchMode: string;\n\n @Input() operator: string = FilterOperator.AND;\n\n @Input() showOperator: boolean = true;\n\n @Input() showClearButton: boolean = true;\n\n @Input() showApplyButton: boolean = true;\n\n @Input() showMatchModes: boolean = true;\n\n @Input() showAddButton: boolean = true;\n\n @Input() placeholder: string;\n\n @Input() matchModeOptions: SelectItem[];\n\n @Input() maxConstraints: number = 2;\n\n @Input() minFractionDigits: number;\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n @ViewChild('icon') icon: ElementRef;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n constructor(public el: ElementRef, public dt: Table, public renderer: Renderer2, public config: PrimeNGConfig) {}\n\n headerTemplate: TemplateRef<any>;\n\n filterTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n operatorOptions: any[];\n\n overlayVisible: boolean;\n\n overlay: HTMLElement;\n\n scrollHandler: any;\n\n documentClickListener: any;\n\n documentResizeListener: any;\n\n matchModes: SelectItem[];\n\n translationSubscription: Subscription;\n\n ngOnInit() {\n if (!this.dt.filters[this.field]) {\n this.initFieldFilterConstraint();\n }\n\n this.translationSubscription = this.config.translationObserver.subscribe(() => {\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n });\n\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n }\n\n generateMatchModeOptions() {\n this.matchModes = this.matchModeOptions || \n this.config.filterMatchModeOptions[this.type]?.map(key => {\n return {label: this.config.getTranslation(key), value: key}\n });\n }\n\n generateOperatorOptions() {\n this.operatorOptions = [\n {label: this.config.getTranslation(TranslationKeys.MATCH_ALL), value: FilterOperator.AND},\n {label: this.config.getTranslation(TranslationKeys.MATCH_ANY), value: FilterOperator.OR}\n ];\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch(item.getType()) {\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'filter':\n this.filterTemplate = item.template;\n break;\n \n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n default:\n this.filterTemplate = item.template;\n break;\n }\n });\n }\n\n initFieldFilterConstraint() {\n let defaultMatchMode = this.getDefaultMatchMode();\n this.dt.filters[this.field] = this.display == 'row' ? {value: null, matchMode: defaultMatchMode} : [{value: null, matchMode: defaultMatchMode, operator: this.operator}];\n }\n\n onMenuMatchModeChange(value: any, filterMeta: FilterMetadata) {\n filterMeta.matchMode = value;\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n onRowMatchModeChange(matchMode: string) {\n (<FilterMetadata> this.dt.filters[this.field]).matchMode = matchMode;\n this.dt._filter();\n this.hide();\n }\n \n onRowMatchModeKeyDown(event: KeyboardEvent) {\n let item = <HTMLLIElement> event.target;\n\n switch(event.key) { \n case 'ArrowDown':\n var nextItem = this.findNextItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n\n event.preventDefault();\n break;\n\n case 'ArrowUp':\n var prevItem = this.findPrevItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n\n event.preventDefault();\n break;\n }\n }\n\n onRowClearItemClick() {\n this.clearFilter();\n this.hide();\n }\n\n isRowMatchModeSelected(matchMode: string) {\n return (<FilterMetadata> this.dt.filters[this.field]).matchMode === matchMode;\n }\n\n addConstraint() {\n (<FilterMetadata[]> this.dt.filters[this.field]).push({value: null, matchMode: this.getDefaultMatchMode(), operator: this.getDefaultOperator()});\n this.dt._filter();\n }\n\n removeConstraint(filterMeta: FilterMetadata) {\n this.dt.filters[this.field] = (<FilterMetadata[]> this.dt.filters[this.field]).filter(meta => meta !== filterMeta);\n this.dt._filter();\n }\n\n onOperatorChange(value) {\n (<FilterMetadata[]> this.dt.filters[this.field]).forEach(filterMeta => {\n filterMeta.operator = value;\n this.operator = value;\n });\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n toggleMenu() {\n this.overlayVisible = !this.overlayVisible;\n }\n\n onToggleButtonKeyDown(event: KeyboardEvent) {\n switch(event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible = false;\n break;\n \n case 'ArrowDown':\n if (this.overlayVisible) {\n let focusable = DomHandler.getFocusableElements(this.overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n }\n else if (event.altKey) {\n this.overlayVisible = true;\n event.preventDefault();\n }\n break;\n }\n }\n\n onEscape() {\n this.overlayVisible = false;\n this.icon.nativeElement.focus();\n }\n\n findNextItem(item: HTMLLIElement) {\n let nextItem = <HTMLLIElement> item.nextElementSibling;\n\n if (nextItem)\n return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextItem(nextItem) : nextItem;\n else\n return item.parentElement.firstElementChild;\n }\n\n findPrevItem(item: HTMLLIElement) {\n let prevItem = <HTMLLIElement> item.previousElementSibling;\n\n if (prevItem)\n return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevItem(prevItem) : prevItem;\n else\n return item.parentElement.lastElementChild;\n }\n\n onOverlayAnimationStart(event: AnimationEvent) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n \n document.body.appendChild(this.overlay);\n this.overlay.style.zIndex = String(++DomHandler.zindex);\n DomHandler.absolutePosition(this.overlay, this.icon.nativeElement)\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n break;\n\n case 'void':\n this.onOverlayHide();\n break;\n }\n }\n\n getDefaultMatchMode(): string {\n if (this.matchMode) {\n return this.matchMode;\n }\n else {\n if (this.type === 'text')\n return FilterMatchMode.STARTS_WITH;\n else if (this.type === 'numeric')\n return FilterMatchMode.EQUALS;\n else if (this.type === 'date')\n return FilterMatchMode.DATE_IS;\n else\n return FilterMatchMode.CONTAINS;\n }\n }\n\n getDefaultOperator(): string {\n return this.dt.filters ? (<FilterMetadata[]> this.dt.filters[this.field])[0].operator: this.operator;\n }\n\n hasRowFilter() {\n return this.dt.filters[this.field] && !this.dt.isFilterBlank((<FilterMetadata>this.dt.filters[this.field]).value);\n }\n\n get fieldConstraints(): FilterMetadata[] {\n return this.dt.filters ? <FilterMetadata[]> this.dt.filters[this.field] : null;\n }\n\n get showRemoveIcon(): boolean {\n return this.fieldConstraints ? this.fieldConstraints.length > 1 : false;\n }\n\n get showMenuButton(): boolean {\n return this.showMenu && (this.display === 'row' ? this.type !== 'boolean': true);\n }\n\n get isShowOperator(): boolean {\n return this.showOperator && this.type !== 'boolean';\n }\n\n get isShowAddConstraint(): boolean {\n return this.showAddButton && this.type !== 'boolean' && (this.fieldConstraints && this.fieldConstraints.length < this.maxConstraints);\n }\n\n get applyButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.APPLY);\n }\n\n get clearButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.CLEAR);\n }\n\n get addRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.ADD_RULE);\n }\n\n get removeRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.REMOVE_RULE);\n }\n\n get noFilterLabel(): string {\n return this.config.getTranslation(TranslationKeys.NO_FILTER);\n }\n\n hasFilter(): boolean {\n let fieldFilter = this.dt.filters[this.field];\n if (fieldFilter) {\n if (Array.isArray(fieldFilter))\n return !this.dt.isFilterBlank((<FilterMetadata[]> fieldFilter)[0].value); \n else\n return !this.dt.isFilterBlank(fieldFilter.value);\n }\n\n return false;\n }\n\n isOutsideClicked(event): boolean {\n return !(this.overlay.isSameNode(event.target) || this.overlay.contains(event.target) \n || this.icon.nativeElement.isSameNode(event.target) || this.icon.nativeElement.contains(event.target)\n || DomHandler.hasClass(event.target, 'p-column-filter-add-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button')\n || DomHandler.hasClass(event.target, 'p-column-filter-remove-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', event => {\n if (this.isOutsideClicked(event)) {\n this.hide();\n }\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n\n bindDocumentResizeListener() {\n this.documentResizeListener = () => this.hide();\n window.addEventListener('resize', this.documentResizeListener);\n }\n\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon.nativeElement, () => {\n if (this.overlayVisible) {\n this.hide();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n hide() {\n this.overlayVisible = false;\n }\n\n onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n }\n\n clearFilter() {\n this.initFieldFilterConstraint();\n this.dt._filter();\n }\n\n applyFilter() {\n this.dt._filter();\n this.hide();\n }\n\n ngOnDestroy() {\n if (this.overlay) {\n this.el.nativeElement.appendChild(this.overlay);\n this.onOverlayHide();\n }\n\n if (this.translationSubscription) {\n this.translationSubscription.unsubscribe();\n }\n }\n}\n\n@NgModule({\n imports: [CommonModule,PaginatorModule,InputTextModule,DropdownModule,ScrollingModule,FormsModule,ButtonModule,SelectButtonModule,CalendarModule,InputNumberModule,TriStateCheckboxModule],\n exports: [Table,SharedModule,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ScrollingModule,ColumnFilter],\n declarations: [Table,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,TableBody,ScrollableView,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ColumnFilter,ColumnFilterFormElement]\n})\nexport class TableModule { }"]}
1
+ {"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../src/app/components/table/table.ts"],"names":["Object","create","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","__spread","arguments","concat","TableService","this","sortSource","Subject","selectionSource","contextMenuSource","valueSource","totalRecordsSource","columnsSource","resetSource","sortSource$","asObservable","selectionSource$","contextMenuSource$","valueSource$","totalRecordsSource$","columnsSource$","resetSource$","prototype","onSort","sortMeta","onSelectionChange","onResetChange","onContextMenu","data","onValueChange","onTotalRecordsChange","onColumnsChange","columns","Injectable","Table","el","zone","tableService","cd","filterService","pageLinks","alwaysShowPaginator","paginatorPosition","paginatorDropdownScrollHeight","currentPageReportTemplate","showFirstLastIcon","showPageLinks","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","virtualScroll","emit","createLazyLoadMetadata","restoringFilter","initialized","ngAfterContentInit","_this","templates","forEach","getType","captionTemplate","template","headerTemplate","bodyTemplate","loadingBodyTemplate","footerTemplate","summaryTemplate","colGroupTemplate","expandedRowTemplate","frozenRowsTemplate","frozenHeaderTemplate","frozenBodyTemplate","frozenFooterTemplate","frozenColGroupTemplate","frozenExpandedRowTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","paginatorDropdownItemTemplate","ngAfterViewInit","isStateful","resizableColumns","restoreColumnWidths","ngOnChanges","simpleChange","stateRestored","restoreState","currentValue","totalRecords","sortField","sortSingle","multiSortMeta","sortMultiple","hasFilter","_filter","_columns","reorderableColumns","columnOrderStateRestored","restoreColumnOrder","_sortField","sortOrder","_multiSortMeta","selection","_selection","preventSelectionSetterPropagation","updateSelectionKeys","defineProperty","val","cols","_rows","dataKey","Array","isArray","_c","_d","String","ObjectUtils","resolveFieldData","onPageChange","event","first","rows","saveState","anchorRowIndex","scrollable","resetScrollTop","sort","originalEvent","field","metaKey","ctrlKey","getSortMeta","order","restoringSort","customSort","mode","data1","data2","value1","value2","result","localeCompare","multisortField","multisortmeta","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","selectionIndex_2","handleRowTouchEnd","handleRowRightClick","contextMenu","contextMenuSelection","show","rangeStart","rangeEnd","paginator","rangeRowsData","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","filterField","filterMeta","filterMeta_1","e_2","filterMeta_1_1","meta","executeLocalFilter","operator","FilterOperator","OR","AND","j","globalFilterField","filterLocale","markForCheck","filterValue","filterMatchMode","FilterMatchMode","STARTS_WITH","dataFieldValue","filterConstraint","empty","globalFilter","clear","reset","exportCSV","options","csv","frozenColumns","selectionOnly","frozenValue","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","scrollToVirtualIndex","scrollTo","top","scrollableViewChild","scrollableFrozenViewChild","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","onColumnResizeEnd","delta","offsetLeft","columnWidth","offsetWidth","minWidth","parseInt","newColumnWidth","nextColumn","nextElementSibling","offsetParent","nextColumnWidth","nextColumnMinWidth","scrollableView","findParentScrollableView","scrollableBodyTable","findSingle","scrollableHeaderTable","scrollableFooterTable","resizeColumnIndex","resizeColGroup","width","setScrollableItemsWidthOnExpandResize","tableViewChild","containerWidth","element","scrollableBody","scrollableHeader","scrollableFooter","scrollableBodyTableWidth","scrollableHeaderTableWidth","isContainerInViewport","setWidth","container","table","calculateScrollbarWidth","parent","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","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","Component","args","selector","providers","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","ElementRef","NgZone","ChangeDetectorRef","FilterService","Input","Output","ViewChild","ContentChildren","PrimeTemplate","TableBody","dt","subscription","subscribe","detectChanges","unsubscribe","ScrollableView","_scrollHeight","includes","console","log","virtualScrollBody","frozen","scrollableAlignerViewChild","calculateScrollbarHeight","frozenView","frozenSiblingBody","scrollBarWidth","scrollHeaderBoxViewChild","paddingRight","scrollFooterBoxViewChild","bindEvents","scrollHeaderViewChild","headerScrollListener","onHeaderScroll","bind","scrollFooterViewChild","footerScrollListener","onFooterScroll","bodyScrollListener","onBodyScroll","getElementRef","scrollBodyViewChild","unbindEvents","preventBodyScrollPropagation","marginLeft","scrollTop","onScrollIndexChange","virtualScrollTimeout","page","floor","virtualScrollOffset","virtualScrollChunkSize","virtualPage","getPageCount","dataToRender","dataLength","scrollToIndex","CdkVirtualScrollViewport","SortableColumn","isEnabled","updateSortState","onClick","isFilterElement","onEnterKey","pSortableColumnDisabled","Directive","host","[class.p-sortable-column]","[class.p-highlight]","[attr.tabindex]","[attr.role]","[attr.aria-sort]","HostListener","SortIcon","OnPush","SelectableRow","onTouchEnd","onArrowDownKeyDown","row","currentTarget","nextRow","findNextSelectableRow","focus","onArrowUpKeyDown","prevRow","findPrevSelectableRow","onEnterKeyDown","onPageDownKeyDown","pSelectableRowDisabled","[class.p-selectable-row]","SelectableRowDblClick","ContextMenuRow","pContextMenuRowDisabled","[class.p-highlight-contextmenu]","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","onArrowDown","currentCell","findCell","cellIndex","targetCell","findNextEditableColumnByIndex","invokeElementMethod","onArrowUp","findPrevEditableColumnByIndex","onArrowLeft","onArrowRight","findPreviousEditableColumn","findNextEditableColumn","prevCell","previousRow","lastElementChild","nextCell","firstElementChild","pEditableColumnDisabled","EditableRow","pEditableRowDisabled","InitEditableRow","editableRow","SaveEditableRow","CancelEditableRow","CellEditor","editableColumn","inputTemplate","outputTemplate","decorators","Optional","TableRadioButton","disabled","onFocus","boxViewChild","onBlur","TableCheckbox","TableHeaderCheckbox","valueChangeSubscription","updateCheckedState","selectionChangeSubscription","isDisabled","isAllFilteredValuesChecked","ReorderableRowHandle","ReorderableRow","droppable","dragEndListener","onDragEnd","pReorderableRowDisabled","ColumnFilterFormElement","useGrouping","filterCallback","onModelChange","onTextInputEnterKeyDown","onNumericInputKeyDown","ColumnFilter","renderer","config","showMenu","showOperator","showClearButton","showApplyButton","showMatchModes","showAddButton","maxConstraints","initFieldFilterConstraint","translationSubscription","translationObserver","generateMatchModeOptions","generateOperatorOptions","resetSubscription","clearFilter","matchModes","matchModeOptions","_a","filterMatchModeOptions","label","getTranslation","operatorOptions","TranslationKeys","MATCH_ALL","MATCH_ANY","filterTemplate","defaultMatchMode","getDefaultMatchMode","onMenuMatchModeChange","onRowMatchModeChange","hide","onRowMatchModeKeyDown","nextItem","findNextItem","removeAttribute","tabIndex","prevItem","findPrevItem","onRowClearItemClick","isRowMatchModeSelected","addConstraint","getDefaultOperator","removeConstraint","onOperatorChange","toggleMenu","overlayVisible","onToggleButtonKeyDown","focusable","getFocusableElements","overlay","altKey","onEscape","icon","onOverlayAnimationStart","toState","zIndex","zindex","absolutePosition","bindDocumentClickListener","bindDocumentResizeListener","bindScrollListener","onOverlayHide","EQUALS","DATE_IS","CONTAINS","hasRowFilter","fieldConstraints","APPLY","CLEAR","ADD_RULE","REMOVE_RULE","NO_FILTER","fieldFilter","isOutsideClicked","isSameNode","contains","documentClickListener","documentTarget","ownerDocument","listen","unbindDocumentClickListener","documentResizeListener","unbindDocumentResizeListener","scrollHandler","ConnectedOverlayScrollHandler","unbindScrollListener","applyFilter","animations","trigger","transition","opacity","transform","animate","Renderer2","PrimeNGConfig","NgModule","imports","CommonModule","PaginatorModule","InputTextModule","DropdownModule","ScrollingModule","FormsModule","ButtonModule","SelectButtonModule","CalendarModule","InputNumberModule","TriStateCheckboxModule","exports","SharedModule","declarations"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { NgModule, Component, HostListener, OnInit, OnDestroy, AfterViewInit, Directive, Optional, AfterContentInit,\n Input, Output, EventEmitter, ElementRef, ContentChildren, TemplateRef, QueryList, ViewChild, NgZone, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy, Query, ViewEncapsulation, Renderer2} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PrimeTemplate, SharedModule, FilterMatchMode, FilterOperator, SelectItem, PrimeNGConfig, TranslationKeys, FilterService } from 'primeng/api';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { TriStateCheckboxModule } from 'primeng/tristatecheckbox';\nimport { CalendarModule } from 'primeng/calendar';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { DomHandler, ConnectedOverlayScrollHandler } 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 { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\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 private resetSource = 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 resetSource$ = this.resetSource.asObservable();\n\n onSort(sortMeta: SortMeta|SortMeta[]) {\n this.sortSource.next(sortMeta);\n }\n\n onSelectionChange() {\n this.selectionSource.next();\n }\n\n onResetChange() {\n this.resetSource.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\" data-scrollselectors=\".p-datatable-scrollable-body, .p-datatable-unfrozen-view .p-datatable-scrollable-body\"\n [ngClass]=\"{'p-datatable p-component': true,\n 'p-datatable-hoverable-rows': (rowHover||selectionMode),\n 'p-datatable-auto-layout': autoLayout,\n 'p-datatable-resizable': resizableColumns,\n 'p-datatable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),\n 'p-datatable-scrollable': scrollable,\n 'p-datatable-flex-scrollable': (scrollable && scrollHeight === 'flex'),\n 'p-datatable-responsive': responsive}\">\n <div class=\"p-datatable-loading-overlay p-component-overlay\" *ngIf=\"loading && showLoader\">\n <i [class]=\"'p-datatable-loading-icon pi-spin ' + loadingIcon\"></i>\n </div>\n <div *ngIf=\"captionTemplate\" class=\"p-datatable-header\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </div>\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-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\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div class=\"p-datatable-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=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\"></tbody>\n <tfoot *ngIf=\"footerTemplate\" class=\"p-datatable-tfoot\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n\n <div class=\"p-datatable-scrollable-wrapper\" *ngIf=\"scrollable\">\n <div class=\"p-datatable-scrollable-view p-datatable-frozen-view\" *ngIf=\"frozenColumns||frozenBodyTemplate\" #scrollableFrozenView [pScrollableView]=\"frozenColumns\" [frozen]=\"true\" [ngStyle]=\"{width: frozenWidth}\" [scrollHeight]=\"scrollHeight\"></div>\n <div class=\"p-datatable-scrollable-view\" #scrollableView [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=\"p-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\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div *ngIf=\"summaryTemplate\" class=\"p-datatable-footer\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n </div>\n\n <div #resizeHelper class=\"p-column-resizer-helper\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n <span #reorderIndicatorUp class=\"pi pi-arrow-down p-datatable-reorder-indicator-up\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n <span #reorderIndicatorDown class=\"pi pi-arrow-up p-datatable-reorder-indicator-down\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n </div>\n `,\n providers: [TableService],\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./table.css']\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() showJumpToPageDropdown: boolean;\n\n @Input() showFirstLastIcon: boolean = true;\n\n @Input() showPageLinks: boolean = true;\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 | 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 = 250;\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 @Input() minBufferPx: number;\n\n @Input() maxBufferPx: number;\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 @ViewChild('scrollableView') scrollableViewChild;\n\n @ViewChild('scrollableFrozenView') scrollableFrozenViewChild;\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 frozenExpandedRowTemplate: 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 paginatorDropdownItemTemplate: 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 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, public filterService: FilterService) {}\n\n ngOnInit() {\n if (this.lazy && this.lazyLoadOnInit) {\n if (!this.virtualScroll) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n\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 'frozenrowexpansion':\n this.frozenExpandedRowTemplate = 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 'paginatordropdownitem':\n this.paginatorDropdownItemTemplate = 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 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' && (this.initialized || (!this.lazy && !this.virtualScroll))) {\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 if (this.scrollable) {\n this.resetScrollTop();\n }\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\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\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 if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\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 this._value = [...this.value];\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 this._value = [...this.value];\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, 'p-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', index: event.rowIndex });\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', index: event.rowIndex });\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 if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (this.isMultipleSelectionMode()) {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n \n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n\n this.tableService.onSelectionChange();\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 let rangeRowsData = [];\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 rangeRowsData.push(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 }\n }\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({originalEvent: event, data: rangeRowsData, type: 'row'});\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 /* Legacy Filtering for custom elements */\n filter(value: any, field: string, matchMode: string) {\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\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 filterField = prop;\n let filterMeta = this.filters[filterField];\n\n if (Array.isArray(filterMeta)) {\n for (let meta of filterMeta) {\n localMatch = this.executeLocalFilter(filterField, this.value[i], meta);\n\n if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {\n break;\n }\n }\n }\n else {\n localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);\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 = this.filterService.filters[(<FilterMetadata> this.filters['global']).matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), (<FilterMetadata> 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 if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\n executeLocalFilter(field: string, rowData: any, filterMeta: FilterMetadata): boolean {\n let filterValue = filterMeta.value;\n let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;\n let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);\n let filterConstraint = this.filterService.filters[filterMatchMode];\n\n return filterConstraint(dataFieldValue, filterValue, this.filterLocale);\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.rows,\n sortField: this.sortField,\n sortOrder: this.sortOrder,\n filters: this.filters,\n globalFilter: this.filters && this.filters['global'] ? (<FilterMetadata> this.filters['global']).value : null,\n multiSortMeta: this.multiSortMeta\n };\n }\n\n public clear() {\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.tableService.onResetChange();\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 reset() {\n this.clear();\n }\n\n public exportCSV(options?: any) {\n let data;\n let csv = '';\n let columns = this.frozenColumns ? [...this.frozenColumns, ...this.columns] : this.columns;\n\n if (options && options.selectionOnly) {\n data = this.selection || [];\n }\n else {\n data = this.filteredValue || this.value;\n\n if (this.frozenValue) {\n data = data ? [...this.frozenValue, ...data] : this.frozenValue;\n }\n }\n\n //headers\n for (let i = 0; i < columns.length; i++) {\n let column = columns[i];\n if (column.exportable !== false && column.field) {\n csv += '\"' + (column.header || column.field) + '\"';\n\n if (i < (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 < columns.length; i++) {\n let column = 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 csv += '\"' + cellData + '\"';\n\n if (i < (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 public resetScrollTop() {\n if (this.virtualScroll)\n this.scrollToVirtualIndex(0);\n else\n this.scrollTo({top: 0});\n }\n\n public scrollToVirtualIndex(index: number) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollToVirtualIndex(index);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollToVirtualIndex(index);\n }\n }\n\n public scrollTo(options) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollTo(options);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollTo(options);\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, 'p-cell-editing');\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 this.cd.markForCheck();\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, 'p-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, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, '.p-datatable-virtual-scrollable-body table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-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, 'p-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, '.p-datatable-scrollable-body') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport');\n let scrollableHeader = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-header');\n let scrollableFooter = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-footer');\n let scrollableBodyTable = DomHandler.findSingle(scrollableBody, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableHeader, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableFooter, 'table.p-datatable-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, 'p-datatable-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, 'p-datatable-dragpoint-bottom');\n\n this.droppedRowIndex = index;\n if (prevRowElement)\n DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n }\n else {\n if (prevRowElement)\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n\n this.droppedRowIndex = index + 1;\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom');\n }\n }\n }\n\n onRowDragLeave(event, rowElement) {\n let prevRowElement = rowElement.previousElementSibling;\n if (prevRowElement) {\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n }\n\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n DomHandler.removeClass(rowElement, 'p-datatable-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 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 if (this.first !== undefined) {\n this.first = state.first;\n this.firstChange.emit(this.first);\n }\n\n if (this.rows !== undefined) {\n this.rows = state.rows;\n this.rowsChange.emit(this.rows);\n }\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, '.p-datatable-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, '.p-datatable-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, '.p-datatable-scrollable-header-table > colgroup > col');\n let bodyCols = this.virtualScroll ? DomHandler.find(this.containerViewChild.nativeElement, 'cdk-virtual-scroll-viewport table > colgroup > col') : DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-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, '.p-datatable-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\n columnOrder.map(key => {\n let col = this.findColumnByKey(key);\n if (col) {\n reorderedColumns.push(col)\n }\n });\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 && !dt.virtualScroll\">\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 && dt.virtualScroll\">\n <ng-template cdkVirtualFor let-rowData let-rowIndex=\"index\" [cdkVirtualForOf]=\"dt.filteredValue||dt.value\" [cdkVirtualForTrackBy]=\"dt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n <ng-container *ngTemplateOutlet=\"rowData ? template: dt.loadingBodyTemplate; 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 && !(frozen && dt.frozenExpandedRowTemplate)\">\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.frozenExpandedRowTemplate && frozen\">\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.frozenExpandedRowTemplate; 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 changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableBody implements OnDestroy {\n\n @Input(\"pTableBody\") columns: any[];\n\n @Input(\"pTableBodyTemplate\") template: TemplateRef<any>;\n\n @Input() frozen: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.valueSource$.subscribe(() => {\n if (this.dt.virtualScroll) {\n this.cd.detectChanges();\n }\n });\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Component({\n selector: '[pScrollableView]',\n template: `\n <div #scrollHeader class=\"p-datatable-scrollable-header\">\n <div #scrollHeaderBox class=\"p-datatable-scrollable-header-box\">\n <table class=\"p-datatable-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=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenHeaderTemplate||dt.headerTemplate : dt.headerTemplate; context {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-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 <ng-container *ngIf=\"!dt.virtualScroll; else virtualScrollTemplate\">\n <div #scrollBody class=\"p-datatable-scrollable-body\" [ngStyle]=\"{'max-height': dt.scrollHeight !== 'flex' ? scrollHeight : undefined, 'overflow-y': !frozen && dt.scrollHeight ? 'scroll' : undefined}\">\n <table #scrollTable [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=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </div>\n </ng-container>\n <ng-template #virtualScrollTemplate>\n <cdk-virtual-scroll-viewport [itemSize]=\"dt.virtualRowHeight\" tabindex=\"0\" [style.height]=\"dt.scrollHeight !== 'flex' ? scrollHeight : undefined\"\n [minBufferPx]=\"dt.minBufferPx\" [maxBufferPx]=\"dt.maxBufferPx\" (scrolledIndexChange)=\"onScrollIndexChange($event)\" class=\"p-datatable-virtual-scrollable-body\">\n <table #scrollTable [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=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </cdk-virtual-scroll-viewport>\n </ng-template>\n <div #scrollFooter class=\"p-datatable-scrollable-footer\">\n <div #scrollFooterBox class=\"p-datatable-scrollable-footer-box\">\n <table class=\"p-datatable-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=\"p-datatable-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 changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class ScrollableView implements AfterViewInit,OnDestroy {\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('scrollFooter') scrollFooterViewChild: ElementRef;\n\n @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n @ViewChild('scrollableAligner') scrollableAlignerViewChild: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScrollBody: CdkVirtualScrollViewport;\n\n headerScrollListener: any;\n\n bodyScrollListener: any;\n\n footerScrollListener: any;\n\n frozenSiblingBody: HTMLDivElement;\n\n preventBodyScrollPropagation: boolean;\n\n _scrollHeight: string;\n\n virtualScrollTimeout: any;\n\n virtualPage: number;\n\n @Input() get scrollHeight(): string {\n return this._scrollHeight;\n }\n set scrollHeight(val: string) {\n this._scrollHeight = val;\n if (val != null && (val.includes('%') || val.includes('calc'))) {\n console.log('Percentage scroll height calculation is removed in favor of the more performant CSS based flex mode, use scrollHeight=\"flex\" instead.')\n }\n\n if (this.dt.virtualScroll && this.virtualScrollBody) {\n this.virtualScrollBody.ngOnInit();\n }\n }\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (!this.frozen) {\n if (this.dt.frozenColumns || this.dt.frozenBodyTemplate) {\n DomHandler.addClass(this.el.nativeElement, 'p-datatable-unfrozen-view');\n }\n\n let frozenView = this.el.nativeElement.previousElementSibling;\n if (frozenView) {\n if (this.dt.virtualScroll)\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-virtual-scrollable-body');\n else\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-scrollable-body');\n }\n\n let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n this.scrollHeaderBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n\n if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n }\n }\n else {\n if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {\n this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';\n }\n }\n\n this.bindEvents();\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\n if (this.dt.virtualScroll)\n this.virtualScrollBody.getElementRef().nativeElement.addEventListener('scroll', this.bodyScrollListener);\n else\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 if (this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n\n if (this.virtualScrollBody && this.virtualScrollBody.getElementRef()) {\n this.virtualScrollBody.getElementRef().nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n }\n\n onHeaderScroll() {\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() {\n const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;\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 * event.target.scrollLeft + 'px';\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n }\n\n if (this.frozenSiblingBody) {\n this.frozenSiblingBody.scrollTop = event.target.scrollTop;\n }\n }\n\n onScrollIndexChange(index: number) {\n if (this.dt.lazy) {\n if (this.virtualScrollTimeout) {\n clearTimeout(this.virtualScrollTimeout);\n }\n\n this.virtualScrollTimeout = setTimeout(() => {\n let page = Math.floor(index / this.dt.rows);\n let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.dt.rows;\n let virtualScrollChunkSize = page === 0 ? this.dt.rows * 2 : this.dt.rows * 3;\n \n if (page !== this.virtualPage) {\n this.virtualPage = page;\n this.dt.onLazyLoad.emit({\n first: virtualScrollOffset,\n rows: virtualScrollChunkSize,\n sortField: this.dt.sortField,\n sortOrder: this.dt.sortOrder,\n filters: this.dt.filters,\n globalFilter: this.dt.filters && this.dt.filters['global'] ? (<FilterMetadata> this.dt.filters['global']).value : null,\n multiSortMeta: this.dt.multiSortMeta\n });\n }\n }, this.dt.virtualScrollDelay);\n }\n }\n\n getPageCount() {\n let dataToRender = this.dt.filteredValue || this.dt.value;\n let dataLength = dataToRender ? dataToRender.length: 0;\n return Math.ceil(dataLength / this.dt.rows);\n }\n\n scrollToVirtualIndex(index: number): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollToIndex(index);\n }\n }\n\n scrollTo(options): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollTo(options);\n }\n else {\n if (this.scrollBodyViewChild.nativeElement.scrollTo) {\n this.scrollBodyViewChild.nativeElement.scrollTo(options);\n }\n else {\n this.scrollBodyViewChild.nativeElement.scrollLeft = options.left;\n this.scrollBodyViewChild.nativeElement.scrollTop = options.top;\n }\n }\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n this.frozenSiblingBody = null;\n }\n}\n\n@Directive({\n selector: '[pSortableColumn]',\n host: {\n '[class.p-sortable-column]': 'isEnabled()',\n '[class.p-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() && !this.isFilterElement(<HTMLElement> event.target)) {\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 isFilterElement(element: HTMLElement) {\n return DomHandler.hasClass(element, 'pi-filter-icon') || DomHandler.hasClass(element, 'p-column-filter-menu-button');\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=\"p-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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\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 this.cd.markForCheck();\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.p-selectable-row]': 'isEnabled()',\n '[class.p-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 @HostListener('keydown.shift.enter', ['$event'])\n @HostListener('keydown.meta.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 @HostListener('keydown.pagedown', ['$event'])\n @HostListener('keydown.pageup', ['$event'])\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n @HostListener('keydown.space', ['$event'])\n onPageDownKeyDown() {\n if (this.dt.virtualScroll) {\n DomHandler.findSingle(this.dt.scrollableViewChild.el.nativeElement, 'cdk-virtual-scroll-viewport').focus();\n }\n }\n\n findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let nextRow = <HTMLTableRowElement> row.nextElementSibling;\n if (nextRow) {\n if (DomHandler.hasClass(nextRow, 'p-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, 'p-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.p-selectable-row]': 'isEnabled()',\n '[class.p-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.p-highlight-contextmenu]': '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, 'p-resizable-column');\n this.resizer = document.createElement('span');\n this.resizer.className = 'p-column-resizer';\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, 'p-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, 'p-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, 'p-cell-editing');\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.dt.editingCellRowIndex});\n else\n this.dt.onEditCancel.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex});\n\n DomHandler.removeClass(this.dt.editingCell, 'p-cell-editing');\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 @HostListener('keydown.arrowdown', ['$event'])\n onArrowDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let cellIndex = DomHandler.index(currentCell);\n let targetCell = this.findNextEditableColumnByIndex(currentCell, cellIndex);\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 }\n\n event.preventDefault();\n }\n }\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n onArrowUp(event: KeyboardEvent) {\n if (this.isEnabled()) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let cellIndex = DomHandler.index(currentCell);\n let targetCell = this.findPrevEditableColumnByIndex(currentCell, cellIndex);\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 }\n \n event.preventDefault();\n }\n }\n }\n\n @HostListener('keydown.arrowleft', ['$event'])\n onArrowLeft(event: KeyboardEvent) {\n if (this.isEnabled()) {\n this.moveToPreviousCell(event);\n }\n }\n\n @HostListener('keydown.arrowright', ['$event'])\n onArrowRight(event: KeyboardEvent) {\n if (this.isEnabled()) {\n this.moveToNextCell(event);\n }\n }\n\n findCell(element) {\n if (element) {\n let cell = element;\n while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {\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, 'p-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, 'p-editable-column'))\n return nextCell;\n else\n return this.findNextEditableColumn(nextCell);\n }\n else {\n return null;\n }\n }\n\n findNextEditableColumnByIndex(cell: Element, index: number) {\n let nextRow = cell.parentElement.nextElementSibling;\n\n if (nextRow) {\n let nextCell = nextRow.children[index];\n\n if (nextCell && DomHandler.hasClass(nextCell, 'p-editable-column')) {\n return nextCell;\n }\n\n return null;\n }\n else {\n return null;\n }\n }\n\n findPrevEditableColumnByIndex(cell: Element, index: number) {\n let prevRow = cell.parentElement.previousElementSibling;\n\n if (prevRow) {\n let prevCell = prevRow.children[index];\n\n if (prevCell && DomHandler.hasClass(prevCell, 'p-editable-column')) {\n return prevCell;\n }\n\n return null;\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 encapsulation: ViewEncapsulation.None\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=\"p-radiobutton p-component\" (click)=\"onClick($event)\">\n <div class=\"p-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]=\"{'p-radiobutton-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"radio\" [attr.aria-checked]=\"checked\">\n <div class=\"p-radiobutton-icon\"></div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\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, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-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=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-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]=\"{'p-checkbox-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\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, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-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=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-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]=\"{'p-checkbox-box':true,\n 'p-highlight':checked, 'p-disabled': isDisabled()}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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, public cd: ChangeDetectorRef) {\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, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-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 this.cd.markForCheck();\n\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, 'p-datatable-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, 'p-datatable-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@Component({\n selector: 'p-columnFilterFormElement',\n template: `\n <ng-container *ngIf=\"filterTemplate; else builtInElement\">\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}\"></ng-container>\n </ng-container>\n <ng-template #builtInElement>\n <ng-container [ngSwitch]=\"type\">\n <input *ngSwitchCase=\"'text'\" type=\"text\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\">\n <p-inputNumber *ngSwitchCase=\"'numeric'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" (onKeyDown)=\"onNumericInputKeyDown($event)\" [showButtons]=\"true\" [attr.placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\" [placeholder]=\"placeholder\"\n [mode]=\"currency ? 'currency' : 'decimal'\" [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-inputNumber>\n <p-triStateCheckbox *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-triStateCheckbox>\n <p-calendar *ngSwitchCase=\"'date'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-calendar>\n </ng-container>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilterFormElement implements OnInit {\n \n @Input() field: string;\n\n @Input() type: string;\n\n @Input() filterConstraint: FilterMetadata;\n\n @Input() filterTemplate: TemplateRef<any>;\n\n @Input() placeholder: string;\n\n @Input() minFractionDigits: number\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n filterCallback: Function;\n\n constructor(public dt: Table) {}\n\n ngOnInit() {\n this.filterCallback = value => {\n this.filterConstraint.value = value;\n this.dt._filter();\n };\n }\n\n onModelChange(value: any) {\n this.filterConstraint.value = value;\n\n if (this.type === 'boolean' || value === '') {\n this.dt._filter();\n }\n }\n\n onTextInputEnterKeyDown(event: KeyboardEvent) {\n this.dt._filter();\n event.preventDefault();\n }\n\n onNumericInputKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.dt._filter();\n event.preventDefault();\n }\n }\n}\n\n@Component({\n selector: 'p-columnFilter',\n template: `\n <div class=\"p-column-filter\" [ngClass]=\"{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}\">\n <p-columnFilterFormElement *ngIf=\"display === 'row'\" class=\"p-fluid\" [type]=\"type\" [field]=\"field\" [filterConstraint]=\"dt.filters[field]\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\" [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button #icon *ngIf=\"showMenuButton\" type=\"button\" class=\"p-column-filter-menu-button p-link\" aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}\" \n (click)=\"toggleMenu()\" (keydown)=\"onToggleButtonKeyDown($event)\"><span class=\"pi pi-filter-icon pi-filter\"></span></button>\n <button #icon *ngIf=\"showMenuButton && display === 'row'\" [ngClass]=\"{'p-hidden-space': !hasRowFilter()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\"><span class=\"pi pi-filter-slash\"></span></button>\n <div *ngIf=\"showMenu && overlayVisible\" [ngClass]=\"{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}\" \n [@overlayAnimation]=\"'visible'\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keydown.escape)=\"onEscape()\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: field}\"></ng-container>\n <ul *ngIf=\"display === 'row'; else menu\" class=\"p-column-filter-row-items\">\n <li class=\"p-column-filter-row-item\" *ngFor=\"let matchMode of matchModes; let i = index;\" (click)=\"onRowMatchModeChange(matchMode.value)\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\n [ngClass]=\"{'p-highlight': isRowMatchModeSelected(matchMode.value)}\" [attr.tabindex]=\"i === 0 ? '0' : null\">{{matchMode.label}}</li>\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{noFilterLabel}}</li>\n </ul>\n <ng-template #menu>\n <div class=\"p-column-filter-operator\" *ngIf=\"isShowOperator\">\n <p-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"p-column-filter-operator-dropdown\"></p-dropdown>\n </div>\n <div class=\"p-column-filter-constraints\">\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"p-column-filter-constraint\">\n <p-dropdown *ngIf=\"showMatchModes && matchModes\" [options]=\"matchModes\" [ngModel]=\"fieldConstraint.matchMode\" (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\" styleClass=\"p-column-filter-matchmode-dropdown\"></p-dropdown>\n <p-columnFilterFormElement [type]=\"type\" [field]=\"field\" [filterConstraint]=\"fieldConstraint\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <div>\n <button *ngIf=\"showRemoveIcon\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-column-filter-remove-button p-button-text p-button-danger p-button-sm\" (click)=\"removeConstraint(fieldConstraint)\" pRipple [label]=\"removeRuleButtonLabel\"></button>\n </div>\n </div>\n </div>\n <div class=\"p-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" icon=\"pi pi-plus\" class=\"p-column-filter-add-button p-button-text p-button-sm\" (click)=\"addConstraint()\" pRipple></button>\n </div>\n <div class=\"p-column-filter-buttonbar\">\n <button type=\"button\" pButton class=\"p-button-outlined\" (click)=\"clearFilter()\" [label]=\"clearButtonLabel\" pRipple></button>\n <button type=\"button\" pButton (click)=\"applyFilter()\" [label]=\"applyButtonLabel\" pRipple></button>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: field}\"></ng-container>\n </div>\n </div>\n `,\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({opacity: 0, transform: 'scaleY(0.8)'}),\n animate('.12s cubic-bezier(0, 0, 0.2, 1)')\n ]),\n transition(':leave', [\n animate('.1s linear', style({ opacity: 0 }))\n ])\n ])\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilter implements AfterContentInit {\n\n @Input() field: string;\n\n @Input() type: string = 'text';\n\n @Input() display: string = 'row';\n\n @Input() showMenu: boolean = true;\n\n @Input() matchMode: string;\n\n @Input() operator: string = FilterOperator.AND;\n\n @Input() showOperator: boolean = true;\n\n @Input() showClearButton: boolean = true;\n\n @Input() showApplyButton: boolean = true;\n\n @Input() showMatchModes: boolean = true;\n\n @Input() showAddButton: boolean = true;\n\n @Input() placeholder: string;\n\n @Input() matchModeOptions: SelectItem[];\n\n @Input() maxConstraints: number = 2;\n\n @Input() minFractionDigits: number;\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n @ViewChild('icon') icon: ElementRef;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n constructor(public el: ElementRef, public dt: Table, public renderer: Renderer2, public config: PrimeNGConfig) {}\n\n headerTemplate: TemplateRef<any>;\n\n filterTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n operatorOptions: any[];\n\n overlayVisible: boolean;\n\n overlay: HTMLElement;\n\n scrollHandler: any;\n\n documentClickListener: any;\n\n documentResizeListener: any;\n\n matchModes: SelectItem[];\n\n translationSubscription: Subscription;\n\n resetSubscription: Subscription;\n\n ngOnInit() {\n if (!this.dt.filters[this.field]) {\n this.initFieldFilterConstraint();\n }\n\n this.translationSubscription = this.config.translationObserver.subscribe(() => {\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n });\n\n this.resetSubscription = this.dt.tableService.resetSource$.subscribe(() => {\n this.clearFilter();\n })\n\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n }\n\n generateMatchModeOptions() {\n this.matchModes = this.matchModeOptions || \n this.config.filterMatchModeOptions[this.type]?.map(key => {\n return {label: this.config.getTranslation(key), value: key}\n });\n }\n\n generateOperatorOptions() {\n this.operatorOptions = [\n {label: this.config.getTranslation(TranslationKeys.MATCH_ALL), value: FilterOperator.AND},\n {label: this.config.getTranslation(TranslationKeys.MATCH_ANY), value: FilterOperator.OR}\n ];\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch(item.getType()) {\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'filter':\n this.filterTemplate = item.template;\n break;\n \n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n default:\n this.filterTemplate = item.template;\n break;\n }\n });\n }\n\n initFieldFilterConstraint() {\n let defaultMatchMode = this.getDefaultMatchMode();\n this.dt.filters[this.field] = this.display == 'row' ? {value: null, matchMode: defaultMatchMode} : [{value: null, matchMode: defaultMatchMode, operator: this.operator}];\n }\n\n onMenuMatchModeChange(value: any, filterMeta: FilterMetadata) {\n filterMeta.matchMode = value;\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n onRowMatchModeChange(matchMode: string) {\n (<FilterMetadata> this.dt.filters[this.field]).matchMode = matchMode;\n this.dt._filter();\n this.hide();\n }\n \n onRowMatchModeKeyDown(event: KeyboardEvent) {\n let item = <HTMLLIElement> event.target;\n\n switch(event.key) { \n case 'ArrowDown':\n var nextItem = this.findNextItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n\n event.preventDefault();\n break;\n\n case 'ArrowUp':\n var prevItem = this.findPrevItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n\n event.preventDefault();\n break;\n }\n }\n\n onRowClearItemClick() {\n this.clearFilter();\n this.hide();\n }\n\n isRowMatchModeSelected(matchMode: string) {\n return (<FilterMetadata> this.dt.filters[this.field]).matchMode === matchMode;\n }\n\n addConstraint() {\n (<FilterMetadata[]> this.dt.filters[this.field]).push({value: null, matchMode: this.getDefaultMatchMode(), operator: this.getDefaultOperator()});\n this.dt._filter();\n }\n\n removeConstraint(filterMeta: FilterMetadata) {\n this.dt.filters[this.field] = (<FilterMetadata[]> this.dt.filters[this.field]).filter(meta => meta !== filterMeta);\n this.dt._filter();\n }\n\n onOperatorChange(value) {\n (<FilterMetadata[]> this.dt.filters[this.field]).forEach(filterMeta => {\n filterMeta.operator = value;\n this.operator = value;\n });\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n toggleMenu() {\n this.overlayVisible = !this.overlayVisible;\n }\n\n onToggleButtonKeyDown(event: KeyboardEvent) {\n switch(event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible = false;\n break;\n \n case 'ArrowDown':\n if (this.overlayVisible) {\n let focusable = DomHandler.getFocusableElements(this.overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n }\n else if (event.altKey) {\n this.overlayVisible = true;\n event.preventDefault();\n }\n break;\n }\n }\n\n onEscape() {\n this.overlayVisible = false;\n this.icon.nativeElement.focus();\n }\n\n findNextItem(item: HTMLLIElement) {\n let nextItem = <HTMLLIElement> item.nextElementSibling;\n\n if (nextItem)\n return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextItem(nextItem) : nextItem;\n else\n return item.parentElement.firstElementChild;\n }\n\n findPrevItem(item: HTMLLIElement) {\n let prevItem = <HTMLLIElement> item.previousElementSibling;\n\n if (prevItem)\n return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevItem(prevItem) : prevItem;\n else\n return item.parentElement.lastElementChild;\n }\n\n onOverlayAnimationStart(event: AnimationEvent) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n \n document.body.appendChild(this.overlay);\n this.overlay.style.zIndex = String(++DomHandler.zindex);\n DomHandler.absolutePosition(this.overlay, this.icon.nativeElement)\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n break;\n\n case 'void':\n this.onOverlayHide();\n break;\n }\n }\n\n getDefaultMatchMode(): string {\n if (this.matchMode) {\n return this.matchMode;\n }\n else {\n if (this.type === 'text')\n return FilterMatchMode.STARTS_WITH;\n else if (this.type === 'numeric')\n return FilterMatchMode.EQUALS;\n else if (this.type === 'date')\n return FilterMatchMode.DATE_IS;\n else\n return FilterMatchMode.CONTAINS;\n }\n }\n\n getDefaultOperator(): string {\n return this.dt.filters ? (<FilterMetadata[]> this.dt.filters[this.field])[0].operator: this.operator;\n }\n\n hasRowFilter() {\n return this.dt.filters[this.field] && !this.dt.isFilterBlank((<FilterMetadata>this.dt.filters[this.field]).value);\n }\n\n get fieldConstraints(): FilterMetadata[] {\n return this.dt.filters ? <FilterMetadata[]> this.dt.filters[this.field] : null;\n }\n\n get showRemoveIcon(): boolean {\n return this.fieldConstraints ? this.fieldConstraints.length > 1 : false;\n }\n\n get showMenuButton(): boolean {\n return this.showMenu && (this.display === 'row' ? this.type !== 'boolean': true);\n }\n\n get isShowOperator(): boolean {\n return this.showOperator && this.type !== 'boolean';\n }\n\n get isShowAddConstraint(): boolean {\n return this.showAddButton && this.type !== 'boolean' && (this.fieldConstraints && this.fieldConstraints.length < this.maxConstraints);\n }\n\n get applyButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.APPLY);\n }\n\n get clearButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.CLEAR);\n }\n\n get addRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.ADD_RULE);\n }\n\n get removeRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.REMOVE_RULE);\n }\n\n get noFilterLabel(): string {\n return this.config.getTranslation(TranslationKeys.NO_FILTER);\n }\n\n hasFilter(): boolean {\n let fieldFilter = this.dt.filters[this.field];\n if (fieldFilter) {\n if (Array.isArray(fieldFilter))\n return !this.dt.isFilterBlank((<FilterMetadata[]> fieldFilter)[0].value); \n else\n return !this.dt.isFilterBlank(fieldFilter.value);\n }\n\n return false;\n }\n\n isOutsideClicked(event): boolean {\n return !(this.overlay.isSameNode(event.target) || this.overlay.contains(event.target) \n || this.icon.nativeElement.isSameNode(event.target) || this.icon.nativeElement.contains(event.target)\n || DomHandler.hasClass(event.target, 'p-column-filter-add-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button')\n || DomHandler.hasClass(event.target, 'p-column-filter-remove-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', event => {\n if (this.isOutsideClicked(event)) {\n this.hide();\n }\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n\n bindDocumentResizeListener() {\n this.documentResizeListener = () => this.hide();\n window.addEventListener('resize', this.documentResizeListener);\n }\n\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon.nativeElement, () => {\n if (this.overlayVisible) {\n this.hide();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n hide() {\n this.overlayVisible = false;\n }\n\n onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n }\n\n clearFilter() {\n this.initFieldFilterConstraint();\n this.dt._filter();\n }\n\n applyFilter() {\n this.dt._filter();\n this.hide();\n }\n\n ngOnDestroy() {\n if (this.overlay) {\n this.el.nativeElement.appendChild(this.overlay);\n this.onOverlayHide();\n }\n\n if (this.translationSubscription) {\n this.translationSubscription.unsubscribe();\n }\n\n if (this.resetSubscription) {\n this.resetSubscription.unsubscribe();\n }\n }\n}\n\n@NgModule({\n imports: [CommonModule,PaginatorModule,InputTextModule,DropdownModule,ScrollingModule,FormsModule,ButtonModule,SelectButtonModule,CalendarModule,InputNumberModule,TriStateCheckboxModule],\n exports: [Table,SharedModule,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ScrollingModule,ColumnFilter],\n declarations: [Table,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,TableBody,ScrollableView,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ColumnFilter,ColumnFilterFormElement]\n})\nexport class TableModule { }"]}