primeng 11.1.0 → 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 (234) hide show
  1. package/README.md +1 -0
  2. package/api/confirmaeventtype.d.ts +5 -0
  3. package/api/filtermatchmode.d.ts +4 -0
  4. package/api/filterservice.d.ts +4 -0
  5. package/api/primeng-api.metadata.json +1 -1
  6. package/api/public_api.d.ts +1 -0
  7. package/api/translation.d.ts +4 -0
  8. package/autocomplete/autocomplete.d.ts +8 -1
  9. package/autocomplete/primeng-autocomplete.metadata.json +1 -1
  10. package/avatar/primeng-avatar.metadata.json +1 -1
  11. package/bundles/primeng-api.umd.js +56 -6
  12. package/bundles/primeng-api.umd.js.map +1 -1
  13. package/bundles/primeng-api.umd.min.js +1 -1
  14. package/bundles/primeng-api.umd.min.js.map +1 -1
  15. package/bundles/primeng-autocomplete.umd.js +86 -17
  16. package/bundles/primeng-autocomplete.umd.js.map +1 -1
  17. package/bundles/primeng-autocomplete.umd.min.js +1 -1
  18. package/bundles/primeng-autocomplete.umd.min.js.map +1 -1
  19. package/bundles/primeng-avatar.umd.js +1 -1
  20. package/bundles/primeng-avatar.umd.min.js +1 -1
  21. package/bundles/primeng-avatar.umd.min.js.map +1 -1
  22. package/bundles/primeng-calendar.umd.js +6 -0
  23. package/bundles/primeng-calendar.umd.js.map +1 -1
  24. package/bundles/primeng-calendar.umd.min.js +1 -1
  25. package/bundles/primeng-calendar.umd.min.js.map +1 -1
  26. package/bundles/primeng-cascadeselect.umd.js +8 -5
  27. package/bundles/primeng-cascadeselect.umd.js.map +1 -1
  28. package/bundles/primeng-cascadeselect.umd.min.js +2 -2
  29. package/bundles/primeng-cascadeselect.umd.min.js.map +1 -1
  30. package/bundles/primeng-colorpicker.umd.js.map +1 -1
  31. package/bundles/primeng-colorpicker.umd.min.js.map +1 -1
  32. package/bundles/primeng-confirmdialog.umd.js +11 -8
  33. package/bundles/primeng-confirmdialog.umd.js.map +1 -1
  34. package/bundles/primeng-confirmdialog.umd.min.js +1 -1
  35. package/bundles/primeng-confirmdialog.umd.min.js.map +1 -1
  36. package/bundles/primeng-contextmenu.umd.js +2 -2
  37. package/bundles/primeng-contextmenu.umd.js.map +1 -1
  38. package/bundles/primeng-contextmenu.umd.min.js +1 -1
  39. package/bundles/primeng-contextmenu.umd.min.js.map +1 -1
  40. package/bundles/primeng-dialog.umd.js +1 -1
  41. package/bundles/primeng-dialog.umd.min.js +1 -1
  42. package/bundles/primeng-dialog.umd.min.js.map +1 -1
  43. package/bundles/primeng-dom.umd.js +3 -0
  44. package/bundles/primeng-dom.umd.js.map +1 -1
  45. package/bundles/primeng-dom.umd.min.js +1 -1
  46. package/bundles/primeng-dom.umd.min.js.map +1 -1
  47. package/bundles/primeng-dropdown.umd.js +1 -1
  48. package/bundles/primeng-dropdown.umd.js.map +1 -1
  49. package/bundles/primeng-dropdown.umd.min.js +1 -1
  50. package/bundles/primeng-dropdown.umd.min.js.map +1 -1
  51. package/bundles/primeng-dynamicdialog.umd.js +1 -1
  52. package/bundles/primeng-dynamicdialog.umd.min.js +1 -1
  53. package/bundles/primeng-dynamicdialog.umd.min.js.map +1 -1
  54. package/bundles/primeng-inputmask.umd.js +5 -2
  55. package/bundles/primeng-inputmask.umd.js.map +1 -1
  56. package/bundles/primeng-inputmask.umd.min.js +1 -1
  57. package/bundles/primeng-inputmask.umd.min.js.map +1 -1
  58. package/bundles/primeng-inputnumber.umd.js +16 -2
  59. package/bundles/primeng-inputnumber.umd.js.map +1 -1
  60. package/bundles/primeng-inputnumber.umd.min.js +1 -1
  61. package/bundles/primeng-inputnumber.umd.min.js.map +1 -1
  62. package/bundles/primeng-knob.umd.js +1 -1
  63. package/bundles/primeng-knob.umd.js.map +1 -1
  64. package/bundles/primeng-knob.umd.min.js +1 -1
  65. package/bundles/primeng-knob.umd.min.js.map +1 -1
  66. package/bundles/primeng-lightbox.umd.js +1 -1
  67. package/bundles/primeng-lightbox.umd.min.js +1 -1
  68. package/bundles/primeng-lightbox.umd.min.js.map +1 -1
  69. package/bundles/primeng-listbox.umd.js +133 -34
  70. package/bundles/primeng-listbox.umd.js.map +1 -1
  71. package/bundles/primeng-listbox.umd.min.js +1 -1
  72. package/bundles/primeng-listbox.umd.min.js.map +1 -1
  73. package/bundles/primeng-multiselect.umd.js +146 -32
  74. package/bundles/primeng-multiselect.umd.js.map +1 -1
  75. package/bundles/primeng-multiselect.umd.min.js +2 -2
  76. package/bundles/primeng-multiselect.umd.min.js.map +1 -1
  77. package/bundles/primeng-sidebar.umd.js.map +1 -1
  78. package/bundles/primeng-sidebar.umd.min.js.map +1 -1
  79. package/bundles/primeng-slider.umd.js +1 -0
  80. package/bundles/primeng-slider.umd.js.map +1 -1
  81. package/bundles/primeng-slider.umd.min.js +1 -1
  82. package/bundles/primeng-slider.umd.min.js.map +1 -1
  83. package/bundles/primeng-table.umd.js +117 -16
  84. package/bundles/primeng-table.umd.js.map +1 -1
  85. package/bundles/primeng-table.umd.min.js +1 -1
  86. package/bundles/primeng-table.umd.min.js.map +1 -1
  87. package/bundles/primeng-tabview.umd.js +25 -3
  88. package/bundles/primeng-tabview.umd.js.map +1 -1
  89. package/bundles/primeng-tabview.umd.min.js +1 -1
  90. package/bundles/primeng-tabview.umd.min.js.map +1 -1
  91. package/bundles/primeng-treetable.umd.js +1 -1
  92. package/bundles/primeng-treetable.umd.js.map +1 -1
  93. package/bundles/primeng-treetable.umd.min.js +1 -1
  94. package/bundles/primeng-treetable.umd.min.js.map +1 -1
  95. package/bundles/primeng-virtualscroller.umd.js +3 -2
  96. package/bundles/primeng-virtualscroller.umd.js.map +1 -1
  97. package/bundles/primeng-virtualscroller.umd.min.js +1 -1
  98. package/bundles/primeng-virtualscroller.umd.min.js.map +1 -1
  99. package/calendar/primeng-calendar.metadata.json +1 -1
  100. package/cascadeselect/cascadeselect.d.ts +3 -3
  101. package/cascadeselect/primeng-cascadeselect.metadata.json +1 -1
  102. package/colorpicker/colorpicker.d.ts +1 -1
  103. package/confirmdialog/confirmdialog.d.ts +3 -2
  104. package/confirmdialog/primeng-confirmdialog.metadata.json +1 -1
  105. package/dialog/primeng-dialog.metadata.json +1 -1
  106. package/dom/primeng-dom.metadata.json +1 -1
  107. package/dropdown/primeng-dropdown.metadata.json +1 -1
  108. package/dynamicdialog/primeng-dynamicdialog.metadata.json +1 -1
  109. package/esm2015/api/confirmaeventtype.js +7 -0
  110. package/esm2015/api/filtermatchmode.js +5 -1
  111. package/esm2015/api/filterservice.js +39 -3
  112. package/esm2015/api/primengconfig.js +9 -5
  113. package/esm2015/api/public_api.js +2 -1
  114. package/esm2015/api/translation.js +1 -1
  115. package/esm2015/autocomplete/autocomplete.js +105 -22
  116. package/esm2015/avatar/avatar.js +1 -1
  117. package/esm2015/calendar/calendar.js +7 -1
  118. package/esm2015/cascadeselect/cascadeselect.js +9 -6
  119. package/esm2015/colorpicker/colorpicker.js +1 -1
  120. package/esm2015/confirmdialog/confirmdialog.js +14 -11
  121. package/esm2015/contextmenu/contextmenu.js +3 -3
  122. package/esm2015/dialog/dialog.js +1 -1
  123. package/esm2015/dom/domhandler.js +4 -1
  124. package/esm2015/dropdown/dropdown.js +2 -2
  125. package/esm2015/dynamicdialog/dynamicdialog.js +1 -1
  126. package/esm2015/inputmask/inputmask.js +6 -3
  127. package/esm2015/inputnumber/inputnumber.js +13 -3
  128. package/esm2015/knob/knob.js +2 -2
  129. package/esm2015/lightbox/lightbox.js +1 -1
  130. package/esm2015/listbox/listbox.js +134 -42
  131. package/esm2015/multiselect/multiselect.js +149 -42
  132. package/esm2015/sidebar/sidebar.js +1 -1
  133. package/esm2015/slider/slider.js +2 -1
  134. package/esm2015/table/table.js +127 -17
  135. package/esm2015/tabview/tabview.js +18 -4
  136. package/esm2015/treetable/treetable.js +2 -2
  137. package/esm2015/virtualscroller/virtualscroller.js +4 -3
  138. package/fesm2015/primeng-api.js +58 -7
  139. package/fesm2015/primeng-api.js.map +1 -1
  140. package/fesm2015/primeng-autocomplete.js +104 -21
  141. package/fesm2015/primeng-autocomplete.js.map +1 -1
  142. package/fesm2015/primeng-avatar.js +1 -1
  143. package/fesm2015/primeng-calendar.js +6 -0
  144. package/fesm2015/primeng-calendar.js.map +1 -1
  145. package/fesm2015/primeng-cascadeselect.js +8 -5
  146. package/fesm2015/primeng-cascadeselect.js.map +1 -1
  147. package/fesm2015/primeng-colorpicker.js.map +1 -1
  148. package/fesm2015/primeng-confirmdialog.js +13 -10
  149. package/fesm2015/primeng-confirmdialog.js.map +1 -1
  150. package/fesm2015/primeng-contextmenu.js +2 -2
  151. package/fesm2015/primeng-contextmenu.js.map +1 -1
  152. package/fesm2015/primeng-dialog.js +1 -1
  153. package/fesm2015/primeng-dom.js +3 -0
  154. package/fesm2015/primeng-dom.js.map +1 -1
  155. package/fesm2015/primeng-dropdown.js +1 -1
  156. package/fesm2015/primeng-dropdown.js.map +1 -1
  157. package/fesm2015/primeng-dynamicdialog.js +1 -1
  158. package/fesm2015/primeng-inputmask.js +5 -2
  159. package/fesm2015/primeng-inputmask.js.map +1 -1
  160. package/fesm2015/primeng-inputnumber.js +12 -2
  161. package/fesm2015/primeng-inputnumber.js.map +1 -1
  162. package/fesm2015/primeng-knob.js +1 -1
  163. package/fesm2015/primeng-knob.js.map +1 -1
  164. package/fesm2015/primeng-lightbox.js +1 -1
  165. package/fesm2015/primeng-listbox.js +133 -41
  166. package/fesm2015/primeng-listbox.js.map +1 -1
  167. package/fesm2015/primeng-multiselect.js +148 -41
  168. package/fesm2015/primeng-multiselect.js.map +1 -1
  169. package/fesm2015/primeng-sidebar.js.map +1 -1
  170. package/fesm2015/primeng-slider.js +1 -0
  171. package/fesm2015/primeng-slider.js.map +1 -1
  172. package/fesm2015/primeng-table.js +126 -16
  173. package/fesm2015/primeng-table.js.map +1 -1
  174. package/fesm2015/primeng-tabview.js +17 -3
  175. package/fesm2015/primeng-tabview.js.map +1 -1
  176. package/fesm2015/primeng-treetable.js +1 -1
  177. package/fesm2015/primeng-treetable.js.map +1 -1
  178. package/fesm2015/primeng-virtualscroller.js +3 -2
  179. package/fesm2015/primeng-virtualscroller.js.map +1 -1
  180. package/inputmask/inputmask.d.ts +2 -1
  181. package/inputmask/primeng-inputmask.metadata.json +1 -1
  182. package/inputnumber/inputnumber.d.ts +3 -1
  183. package/inputnumber/primeng-inputnumber.metadata.json +1 -1
  184. package/knob/primeng-knob.metadata.json +1 -1
  185. package/lightbox/primeng-lightbox.metadata.json +1 -1
  186. package/listbox/listbox.d.ts +7 -1
  187. package/listbox/primeng-listbox.metadata.json +1 -1
  188. package/multiselect/multiselect.d.ts +8 -1
  189. package/multiselect/primeng-multiselect.metadata.json +1 -1
  190. package/package.json +1 -1
  191. package/resources/components/avatar/avatar.css +3 -2
  192. package/resources/components/dialog/dialog.css +2 -0
  193. package/resources/components/virtualscroller/virtualscroller.css +2 -16
  194. package/resources/themes/arya-blue/theme.css +26 -38
  195. package/resources/themes/arya-green/theme.css +26 -38
  196. package/resources/themes/arya-orange/theme.css +26 -38
  197. package/resources/themes/arya-purple/theme.css +26 -38
  198. package/resources/themes/bootstrap4-dark-blue/theme.css +26 -38
  199. package/resources/themes/bootstrap4-dark-purple/theme.css +26 -38
  200. package/resources/themes/bootstrap4-light-blue/theme.css +26 -38
  201. package/resources/themes/bootstrap4-light-purple/theme.css +26 -38
  202. package/resources/themes/fluent-light/theme.css +26 -38
  203. package/resources/themes/luna-amber/theme.css +26 -38
  204. package/resources/themes/luna-blue/theme.css +26 -38
  205. package/resources/themes/luna-green/theme.css +26 -38
  206. package/resources/themes/luna-pink/theme.css +26 -38
  207. package/resources/themes/md-dark-deeppurple/theme.css +89 -69
  208. package/resources/themes/md-dark-indigo/theme.css +89 -69
  209. package/resources/themes/md-light-deeppurple/theme.css +293 -273
  210. package/resources/themes/md-light-indigo/theme.css +293 -273
  211. package/resources/themes/mdc-dark-deeppurple/theme.css +89 -69
  212. package/resources/themes/mdc-dark-indigo/theme.css +89 -69
  213. package/resources/themes/mdc-light-deeppurple/theme.css +293 -273
  214. package/resources/themes/mdc-light-indigo/theme.css +293 -273
  215. package/resources/themes/nova/theme.css +26 -38
  216. package/resources/themes/nova-accent/theme.css +26 -38
  217. package/resources/themes/nova-alt/theme.css +26 -38
  218. package/resources/themes/rhea/theme.css +26 -38
  219. package/resources/themes/saga-blue/theme.css +26 -38
  220. package/resources/themes/saga-green/theme.css +26 -38
  221. package/resources/themes/saga-orange/theme.css +26 -38
  222. package/resources/themes/saga-purple/theme.css +26 -38
  223. package/resources/themes/vela-blue/theme.css +26 -38
  224. package/resources/themes/vela-green/theme.css +26 -38
  225. package/resources/themes/vela-orange/theme.css +26 -38
  226. package/resources/themes/vela-purple/theme.css +26 -38
  227. package/sidebar/sidebar.d.ts +1 -1
  228. package/slider/primeng-slider.metadata.json +1 -1
  229. package/table/primeng-table.metadata.json +1 -1
  230. package/table/table.d.ts +12 -0
  231. package/tabview/primeng-tabview.metadata.json +1 -1
  232. package/tabview/tabview.d.ts +6 -2
  233. package/treetable/primeng-treetable.metadata.json +1 -1
  234. package/virtualscroller/primeng-virtualscroller.metadata.json +1 -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","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","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","findCell","currentCell","targetCell","findPreviousEditableColumn","invokeElementMethod","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","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 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 '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') {\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 this.sortSingle();\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 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' });\n }\n else {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n else if (this.selectionMode === 'multiple') {\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n this.rowTouched = false;\n }\n\n handleRowTouchEnd(event) {\n this.rowTouched = true;\n }\n\n handleRowRightClick(event) {\n if (this.contextMenu) {\n const rowData = event.rowData;\n\n if (this.contextMenuSelectionMode === 'separate') {\n this.contextMenuSelection = rowData;\n this.contextMenuSelectionChange.emit(rowData);\n this.onContextMenuSelect.emit({originalEvent: event.originalEvent, data: rowData, index: event.rowIndex});\n this.contextMenu.show(event.originalEvent);\n this.tableService.onContextMenu(rowData);\n }\n else if (this.contextMenuSelectionMode === 'joint') {\n this.preventSelectionSetterPropagation = true;\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n\n if (!selected) {\n if (this.isSingleSelectionMode()) {\n this.selection = rowData;\n this.selectionChange.emit(rowData);\n }\n else if (this.isMultipleSelectionMode()) {\n this.selection = [rowData];\n this.selectionChange.emit(this.selection);\n }\n\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.contextMenu.show(event.originalEvent);\n this.onContextMenuSelect.emit({originalEvent: event, data: rowData, index: event.rowIndex});\n }\n }\n }\n\n selectRange(event: MouseEvent, rowIndex: number) {\n let rangeStart, rangeEnd;\n\n if (this.anchorRowIndex > rowIndex) {\n rangeStart = rowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else if (this.anchorRowIndex < rowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = rowIndex;\n }\n else {\n rangeStart = rowIndex;\n rangeEnd = rowIndex;\n }\n\n if (this.lazy && this.paginator) {\n rangeStart -= this.first;\n rangeEnd -= this.first;\n }\n\n 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.onRowSelect.emit({originalEvent: event, data: rangeRowsData, type: 'row'});\n this.selectionChange.emit(this.selection);\n }\n\n clearSelectionRange(event: MouseEvent) {\n let rangeStart, rangeEnd;\n\n if (this.rangeRowIndex > this.anchorRowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n else if (this.rangeRowIndex < this.anchorRowIndex) {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n\n for(let i = rangeStart; i <= rangeEnd; i++) {\n let rangeRowData = this.value[i];\n let selectionIndex = this.findIndexInSelection(rangeRowData);\n this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n this.onRowUnselect.emit({originalEvent: event, data: rangeRowData, type: 'row'});\n }\n }\n\n isSelected(rowData) {\n if (rowData && this.selection) {\n if (this.dataKey) {\n return this.selectionKeys[ObjectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;\n }\n else {\n if (this.selection instanceof Array)\n return this.findIndexInSelection(rowData) > -1;\n else\n return this.equals(rowData, this.selection);\n }\n }\n\n return false;\n }\n\n findIndexInSelection(rowData: any) {\n let index: number = -1;\n if (this.selection && this.selection.length) {\n for (let i = 0; i < this.selection.length; i++) {\n if (this.equals(rowData, this.selection[i])) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n toggleRowWithRadio(event: any, rowData:any) {\n this.preventSelectionSetterPropagation = true;\n\n if (this.selection != rowData) {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n\n if (this.dataKey) {\n this.selectionKeys = {};\n this.selectionKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] = 1;\n }\n }\n else {\n this._selection = null;\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowWithCheckbox(event, rowData: any) {\n this.selection = this.selection||[];\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n this.preventSelectionSetterPropagation = true;\n\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowsWithCheckbox(event: Event, check: boolean) {\n this._selection = check ? this.filteredValue ? this.filteredValue.slice(): this.value.slice() : [];\n this.preventSelectionSetterPropagation = true;\n this.updateSelectionKeys();\n this.selectionChange.emit(this._selection);\n this.tableService.onSelectionChange();\n this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n equals(data1, data2) {\n return this.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, this.dataKey);\n }\n\n /* 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\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n <ng-container *ngTemplateOutlet=\"dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"dt.isEmpty() && !dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n `,\n 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 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\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 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 <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 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 });\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.EQUALS;\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 { }"]}