primeng 4.1.2 → 4.2.1

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 (166) hide show
  1. package/components/autocomplete/autocomplete.d.ts +7 -0
  2. package/components/autocomplete/autocomplete.js +63 -6
  3. package/components/autocomplete/autocomplete.js.map +1 -1
  4. package/components/autocomplete/autocomplete.metadata.json +1 -1
  5. package/components/blockui/blockui.js +1 -0
  6. package/components/blockui/blockui.js.map +1 -1
  7. package/components/breadcrumb/breadcrumb.js +1 -1
  8. package/components/breadcrumb/breadcrumb.js.map +1 -1
  9. package/components/breadcrumb/breadcrumb.metadata.json +1 -1
  10. package/components/calendar/calendar.d.ts +36 -14
  11. package/components/calendar/calendar.js +337 -108
  12. package/components/calendar/calendar.js.map +1 -1
  13. package/components/calendar/calendar.metadata.json +1 -1
  14. package/components/checkbox/checkbox.js +1 -1
  15. package/components/checkbox/checkbox.js.map +1 -1
  16. package/components/checkbox/checkbox.metadata.json +1 -1
  17. package/components/chips/chips.d.ts +2 -0
  18. package/components/chips/chips.js +25 -11
  19. package/components/chips/chips.js.map +1 -1
  20. package/components/chips/chips.metadata.json +1 -1
  21. package/components/common/menuitem.d.ts +1 -0
  22. package/components/common/messageservice.d.ts +9 -0
  23. package/components/common/messageservice.js +35 -0
  24. package/components/common/messageservice.js.map +1 -0
  25. package/components/common/messageservice.metadata.json +1 -0
  26. package/components/common/selectitem.d.ts +1 -0
  27. package/components/common/shared.d.ts +1 -0
  28. package/components/common/shared.js +4 -0
  29. package/components/common/shared.js.map +1 -1
  30. package/components/common/shared.metadata.json +1 -1
  31. package/components/contextmenu/contextmenu.d.ts +2 -0
  32. package/components/contextmenu/contextmenu.js +18 -5
  33. package/components/contextmenu/contextmenu.js.map +1 -1
  34. package/components/contextmenu/contextmenu.metadata.json +1 -1
  35. package/components/datatable/datatable.d.ts +14 -0
  36. package/components/datatable/datatable.js +113 -38
  37. package/components/datatable/datatable.js.map +1 -1
  38. package/components/datatable/datatable.metadata.json +1 -1
  39. package/components/dropdown/dropdown.d.ts +4 -2
  40. package/components/dropdown/dropdown.js +25 -13
  41. package/components/dropdown/dropdown.js.map +1 -1
  42. package/components/dropdown/dropdown.metadata.json +1 -1
  43. package/components/fileupload/fileupload.d.ts +16 -4
  44. package/components/fileupload/fileupload.js +72 -9
  45. package/components/fileupload/fileupload.js.map +1 -1
  46. package/components/fileupload/fileupload.metadata.json +1 -1
  47. package/components/growl/growl.d.ts +9 -2
  48. package/components/growl/growl.js +45 -8
  49. package/components/growl/growl.js.map +1 -1
  50. package/components/growl/growl.metadata.json +1 -1
  51. package/components/inputmask/inputmask.d.ts +4 -1
  52. package/components/inputmask/inputmask.js +28 -7
  53. package/components/inputmask/inputmask.js.map +1 -1
  54. package/components/inputmask/inputmask.metadata.json +1 -1
  55. package/components/listbox/listbox.d.ts +3 -0
  56. package/components/listbox/listbox.js +14 -1
  57. package/components/listbox/listbox.js.map +1 -1
  58. package/components/listbox/listbox.metadata.json +1 -1
  59. package/components/megamenu/megamenu.js +1 -1
  60. package/components/megamenu/megamenu.js.map +1 -1
  61. package/components/megamenu/megamenu.metadata.json +1 -1
  62. package/components/menu/menu.js +2 -2
  63. package/components/menu/menu.js.map +1 -1
  64. package/components/menu/menu.metadata.json +1 -1
  65. package/components/menubar/menubar.js +1 -1
  66. package/components/menubar/menubar.js.map +1 -1
  67. package/components/menubar/menubar.metadata.json +1 -1
  68. package/components/messages/messages.d.ts +8 -2
  69. package/components/messages/messages.js +29 -3
  70. package/components/messages/messages.js.map +1 -1
  71. package/components/messages/messages.metadata.json +1 -1
  72. package/components/multiselect/multiselect.d.ts +8 -2
  73. package/components/multiselect/multiselect.js +40 -6
  74. package/components/multiselect/multiselect.js.map +1 -1
  75. package/components/multiselect/multiselect.metadata.json +1 -1
  76. package/components/orderlist/orderlist.js +1 -1
  77. package/components/orderlist/orderlist.js.map +1 -1
  78. package/components/organizationchart/organizationchart.js +2 -2
  79. package/components/organizationchart/organizationchart.js.map +1 -1
  80. package/components/organizationchart/organizationchart.metadata.json +1 -1
  81. package/components/paginator/paginator.d.ts +2 -1
  82. package/components/paginator/paginator.js +19 -10
  83. package/components/paginator/paginator.js.map +1 -1
  84. package/components/paginator/paginator.metadata.json +1 -1
  85. package/components/panel/panel.js +1 -1
  86. package/components/panel/panel.js.map +1 -1
  87. package/components/panelmenu/panelmenu.js +2 -2
  88. package/components/panelmenu/panelmenu.js.map +1 -1
  89. package/components/panelmenu/panelmenu.metadata.json +1 -1
  90. package/components/picklist/picklist.js +18 -8
  91. package/components/picklist/picklist.js.map +1 -1
  92. package/components/radiobutton/radiobutton.js +2 -2
  93. package/components/radiobutton/radiobutton.js.map +1 -1
  94. package/components/radiobutton/radiobutton.metadata.json +1 -1
  95. package/components/schedule/schedule.d.ts +2 -1
  96. package/components/schedule/schedule.js +14 -7
  97. package/components/schedule/schedule.js.map +1 -1
  98. package/components/schedule/schedule.metadata.json +1 -1
  99. package/components/selectbutton/selectbutton.d.ts +2 -1
  100. package/components/selectbutton/selectbutton.js +12 -2
  101. package/components/selectbutton/selectbutton.js.map +1 -1
  102. package/components/selectbutton/selectbutton.metadata.json +1 -1
  103. package/components/slidemenu/slidemenu.d.ts +1 -0
  104. package/components/slidemenu/slidemenu.js +18 -3
  105. package/components/slidemenu/slidemenu.js.map +1 -1
  106. package/components/slidemenu/slidemenu.metadata.json +1 -1
  107. package/components/slider/slider.d.ts +11 -4
  108. package/components/slider/slider.js +70 -29
  109. package/components/slider/slider.js.map +1 -1
  110. package/components/slider/slider.metadata.json +1 -1
  111. package/components/spinner/spinner.d.ts +5 -3
  112. package/components/spinner/spinner.js +21 -11
  113. package/components/spinner/spinner.js.map +1 -1
  114. package/components/spinner/spinner.metadata.json +1 -1
  115. package/components/tabmenu/tabmenu.js +1 -1
  116. package/components/tabmenu/tabmenu.js.map +1 -1
  117. package/components/tabmenu/tabmenu.metadata.json +1 -1
  118. package/components/tabview/tabview.d.ts +16 -6
  119. package/components/tabview/tabview.js +65 -17
  120. package/components/tabview/tabview.js.map +1 -1
  121. package/components/tabview/tabview.metadata.json +1 -1
  122. package/components/terminal/terminal.d.ts +8 -5
  123. package/components/terminal/terminal.js +15 -13
  124. package/components/terminal/terminal.js.map +1 -1
  125. package/components/terminal/terminal.metadata.json +1 -1
  126. package/components/terminal/terminalservice.d.ts +9 -0
  127. package/components/terminal/terminalservice.js +34 -0
  128. package/components/terminal/terminalservice.js.map +1 -0
  129. package/components/terminal/terminalservice.metadata.json +1 -0
  130. package/components/tieredmenu/tieredmenu.js +1 -1
  131. package/components/tieredmenu/tieredmenu.js.map +1 -1
  132. package/components/tieredmenu/tieredmenu.metadata.json +1 -1
  133. package/components/tooltip/tooltip.d.ts +4 -1
  134. package/components/tooltip/tooltip.js +27 -5
  135. package/components/tooltip/tooltip.js.map +1 -1
  136. package/components/tooltip/tooltip.metadata.json +1 -1
  137. package/components/tree/tree.d.ts +2 -0
  138. package/components/tree/tree.js +19 -5
  139. package/components/tree/tree.js.map +1 -1
  140. package/components/tree/tree.metadata.json +1 -1
  141. package/components/treetable/treetable.d.ts +2 -0
  142. package/components/treetable/treetable.js +11 -1
  143. package/components/treetable/treetable.js.map +1 -1
  144. package/components/treetable/treetable.metadata.json +1 -1
  145. package/package.json +19 -19
  146. package/resources/primeng.css +451 -68
  147. package/resources/primeng.min.css +1 -1
  148. package/resources/themes/_theme.scss +8 -0
  149. package/resources/themes/cruze/theme.css +6 -0
  150. package/resources/themes/cupertino/theme.css +6 -0
  151. package/resources/themes/darkness/theme.css +6 -0
  152. package/resources/themes/flick/theme.css +6 -0
  153. package/resources/themes/home/theme.css +6 -0
  154. package/resources/themes/kasper/theme.css +6 -0
  155. package/resources/themes/lightness/theme.css +6 -0
  156. package/resources/themes/ludvig/theme.css +6 -0
  157. package/resources/themes/omega/theme.css +14 -0
  158. package/resources/themes/omega/theme.css.map +7 -0
  159. package/resources/themes/omega/theme.scss +11 -0
  160. package/resources/themes/pepper-grinder/theme.css +6 -0
  161. package/resources/themes/redmond/theme.css +6 -0
  162. package/resources/themes/rocket/theme.css +6 -0
  163. package/resources/themes/south-street/theme.css +6 -0
  164. package/resources/themes/start/theme.css +6 -0
  165. package/resources/themes/trontastic/theme.css +6 -0
  166. package/resources/themes/voclain/theme.css +6 -0
@@ -122,7 +122,7 @@ __decorate([
122
122
  ColumnHeaders = __decorate([
123
123
  core_1.Component({
124
124
  selector: '[pColumnHeaders]',
125
- template: "\n <ng-template ngFor let-col [ngForOf]=\"columns\" let-lastCol=\"last\">\n <th #headerCell [attr.id]=\"col.colId\" [ngStyle]=\"col.style\" [class]=\"col.styleClass\" [style.display]=\"col.hidden ? 'none' : 'table-cell'\" (click)=\"dt.sort($event,col)\" [attr.colspan]=\"col.colspan\" [attr.rowspan]=\"col.rowspan\"\n [ngClass]=\"{'ui-state-default ui-unselectable-text':true, 'ui-sortable-column': col.sortable, 'ui-state-active': dt.isSorted(col), 'ui-resizable-column': dt.resizableColumns, 'ui-selection-column':col.selectionMode}\" \n (dragstart)=\"dt.onColumnDragStart($event)\" (dragleave)=\"dt.onColumnDragleave($event)\" (drop)=\"dt.onColumnDrop($event)\" (mousedown)=\"dt.onHeaderMousedown($event,headerCell)\"\n [attr.tabindex]=\"col.sortable ? tabindex : null\" (keydown)=\"dt.onHeaderKeydown($event,col)\">\n <span class=\"ui-column-resizer ui-clickable\" *ngIf=\"dt.resizableColumns && ((dt.columnResizeMode == 'fit' && !lastCol) || dt.columnResizeMode == 'expand')\" (mousedown)=\"dt.initColumnResize($event)\"></span>\n <span class=\"ui-column-title\" *ngIf=\"!col.selectionMode&&!col.headerTemplate\">{{col.header}}</span>\n <span class=\"ui-column-title\" *ngIf=\"col.headerTemplate\">\n <p-columnHeaderTemplateLoader [column]=\"col\"></p-columnHeaderTemplateLoader>\n </span>\n <span class=\"ui-sortable-column-icon fa fa-fw fa-sort\" *ngIf=\"col.sortable\"\n [ngClass]=\"{'fa-sort-desc': (dt.getSortOrder(col) == -1),'fa-sort-asc': (dt.getSortOrder(col) == 1)}\"></span>\n <input [attr.type]=\"col.filterType\" class=\"ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all\" [attr.maxlength]=\"col.filterMaxlength\" [attr.placeholder]=\"col.filterPlaceholder\" *ngIf=\"col.filter&&!col.filterTemplate\" [value]=\"dt.filters[col.field] ? dt.filters[col.field].value : ''\" \n (click)=\"dt.onFilterInputClick($event)\" (input)=\"dt.onFilterKeyup($event.target.value, col.field, col.filterMatchMode)\"/>\n <p-columnFilterTemplateLoader [column]=\"col\" *ngIf=\"col.filterTemplate\"></p-columnFilterTemplateLoader>\n <p-dtCheckbox *ngIf=\"col.selectionMode=='multiple'\" (onChange)=\"dt.toggleRowsWithCheckbox($event)\" [checked]=\"dt.allSelected\" [disabled]=\"dt.isEmpty()\"></p-dtCheckbox>\n </th>\n </ng-template>\n "
125
+ template: "\n <ng-template ngFor let-col [ngForOf]=\"columns\" let-lastCol=\"last\">\n <th #headerCell [attr.id]=\"col.colId\" [ngStyle]=\"col.style\" [class]=\"col.styleClass\" (click)=\"dt.sort($event,col)\" [attr.colspan]=\"col.colspan\" [attr.rowspan]=\"col.rowspan\"\n [ngClass]=\"{'ui-state-default ui-unselectable-text':true, 'ui-sortable-column': col.sortable, 'ui-state-active': dt.isSorted(col), 'ui-resizable-column': dt.resizableColumns, 'ui-selection-column':col.selectionMode,\n 'ui-helper-hidden': col.hidden}\" \n (dragstart)=\"dt.onColumnDragStart($event)\" (dragleave)=\"dt.onColumnDragleave($event)\" (drop)=\"dt.onColumnDrop($event)\" (mousedown)=\"dt.onHeaderMousedown($event,headerCell)\"\n [attr.tabindex]=\"col.sortable ? tabindex : null\" (keydown)=\"dt.onHeaderKeydown($event,col)\">\n <span class=\"ui-column-resizer ui-clickable\" *ngIf=\"dt.resizableColumns && ((dt.columnResizeMode == 'fit' && !lastCol) || dt.columnResizeMode == 'expand')\" (mousedown)=\"dt.initColumnResize($event)\"></span>\n <span class=\"ui-column-title\" *ngIf=\"!col.selectionMode&&!col.headerTemplate\">{{col.header}}</span>\n <span class=\"ui-column-title\" *ngIf=\"col.headerTemplate\">\n <p-columnHeaderTemplateLoader [column]=\"col\"></p-columnHeaderTemplateLoader>\n </span>\n <span class=\"ui-sortable-column-icon fa fa-fw fa-sort\" *ngIf=\"col.sortable\"\n [ngClass]=\"{'fa-sort-desc': (dt.getSortOrder(col) == -1),'fa-sort-asc': (dt.getSortOrder(col) == 1)}\"></span>\n <input [attr.type]=\"col.filterType\" class=\"ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all\" [attr.maxlength]=\"col.filterMaxlength\" [attr.placeholder]=\"col.filterPlaceholder\" *ngIf=\"col.filter&&!col.filterTemplate\" [value]=\"dt.filters[col.filterField||col.field] ? dt.filters[col.filterField||col.field].value : ''\" \n (click)=\"dt.onFilterInputClick($event)\" (input)=\"dt.onFilterKeyup($event.target.value, col.filterField||col.field, col.filterMatchMode)\"/>\n <p-columnFilterTemplateLoader [column]=\"col\" *ngIf=\"col.filterTemplate\"></p-columnFilterTemplateLoader>\n <p-dtCheckbox *ngIf=\"col.selectionMode=='multiple'\" (onChange)=\"dt.toggleRowsWithCheckbox($event)\" [checked]=\"dt.allSelected\" [disabled]=\"dt.isEmpty()\"></p-dtCheckbox>\n </th>\n </ng-template>\n "
126
126
  }),
127
127
  __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),
128
128
  __metadata("design:paramtypes", [DataTable])
@@ -141,7 +141,7 @@ __decorate([
141
141
  ColumnFooters = __decorate([
142
142
  core_1.Component({
143
143
  selector: '[pColumnFooters]',
144
- template: "\n <td *ngFor=\"let col of columns\" [ngStyle]=\"col.style\" [class]=\"col.styleClass\"\n [attr.colspan]=\"col.colspan\" [attr.rowspan]=\"col.rowspan\"\n [ngClass]=\"{'ui-state-default':true}\" [style.display]=\"col.hidden ? 'none' : 'table-cell'\">\n <span class=\"ui-column-footer\" *ngIf=\"!col.footerTemplate\">{{col.footer}}</span>\n <span class=\"ui-column-footer\" *ngIf=\"col.footerTemplate\">\n <p-columnFooterTemplateLoader [column]=\"col\"></p-columnFooterTemplateLoader>\n </span>\n </td>\n "
144
+ template: "\n <td *ngFor=\"let col of columns\" [ngStyle]=\"col.style\" [class]=\"col.styleClass\"\n [attr.colspan]=\"col.colspan\" [attr.rowspan]=\"col.rowspan\"\n [ngClass]=\"{'ui-state-default':true, 'ui-helper-hidden': col.hidden}\">\n <span class=\"ui-column-footer\" *ngIf=\"!col.footerTemplate\">{{col.footer}}</span>\n <span class=\"ui-column-footer\" *ngIf=\"col.footerTemplate\">\n <p-columnFooterTemplateLoader [column]=\"col\"></p-columnFooterTemplateLoader>\n </span>\n </td>\n "
145
145
  }),
146
146
  __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),
147
147
  __metadata("design:paramtypes", [DataTable])
@@ -160,10 +160,14 @@ __decorate([
160
160
  core_1.Input("pTableBody"),
161
161
  __metadata("design:type", Array)
162
162
  ], TableBody.prototype, "columns", void 0);
163
+ __decorate([
164
+ core_1.Input(),
165
+ __metadata("design:type", Array)
166
+ ], TableBody.prototype, "data", void 0);
163
167
  TableBody = __decorate([
164
168
  core_1.Component({
165
169
  selector: '[pTableBody]',
166
- template: "\n <ng-template ngFor let-rowData [ngForOf]=\"dt.dataToRender\" let-even=\"even\" let-odd=\"odd\" let-rowIndex=\"index\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <tr #rowGroupElement class=\"ui-widget-header ui-rowgroup-header\" \n *ngIf=\"dt.rowGroupMode=='subheader' && (rowIndex === 0||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex - 1], dt.groupField)))\"\n (click)=\"dt.onRowGroupClick($event)\" [ngStyle]=\"{'cursor': dt.sortableRowGroup ? 'pointer' : 'auto'}\">\n <td [attr.colspan]=\"dt.visibleColumns().length\">\n <a href=\"#\" *ngIf=\"dt.expandableRowGroups\" (click)=\"dt.toggleRowGroup($event,rowData)\">\n <span class=\"fa fa-fw\" [ngClass]=\"{'fa-chevron-circle-down':dt.isRowGroupExpanded(rowData), 'fa-chevron-circle-right': !dt.isRowGroupExpanded(rowData)}\"></span>\n </a>\n <span class=\"ui-rowgroup-header-name\">\n <p-templateLoader [template]=\"dt.rowGroupHeaderTemplate\" [data]=\"rowData\"></p-templateLoader>\n </span>\n </td>\n </tr>\n <tr #rowElement *ngIf=\"!dt.expandableRowGroups||dt.isRowGroupExpanded(rowData)\" [class]=\"dt.getRowStyleClass(rowData,rowIndex)\"\n (click)=\"dt.handleRowClick($event, rowData, rowIndex)\" (dblclick)=\"dt.rowDblclick($event,rowData)\" (contextmenu)=\"dt.onRowRightClick($event,rowData)\" (touchend)=\"dt.handleRowTouchEnd($event)\"\n [ngClass]=\"{'ui-datatable-even':even&&dt.rowGroupMode!='rowspan','ui-datatable-odd':odd&&dt.rowGroupMode!='rowspan','ui-state-highlight': dt.isSelected(rowData)}\">\n <ng-template ngFor let-col [ngForOf]=\"columns\" let-colIndex=\"index\">\n <td #cell *ngIf=\"!dt.rowGroupMode || (dt.rowGroupMode == 'subheader') ||\n (dt.rowGroupMode=='rowspan' && ((dt.sortField==col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) || (dt.sortField!=col.field)))\"\n [ngStyle]=\"col.style\" [class]=\"col.styleClass\" [style.display]=\"col.hidden ? 'none' : 'table-cell'\"\n [ngClass]=\"{'ui-editable-column':col.editable,'ui-selection-column':col.selectionMode}\"\n [attr.rowspan]=\"(dt.rowGroupMode=='rowspan' && dt.sortField == col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) ? dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].size : null\">\n <span class=\"ui-column-title\" *ngIf=\"dt.responsive\">{{col.header}}</span>\n <span class=\"ui-cell-data\" *ngIf=\"!col.bodyTemplate && !col.expander && !col.selectionMode\">{{dt.resolveFieldData(rowData,col.field)}}</span>\n <span class=\"ui-cell-data\" *ngIf=\"col.bodyTemplate\">\n <p-columnBodyTemplateLoader [column]=\"col\" [rowData]=\"rowData\" [rowIndex]=\"rowIndex + dt.first\"></p-columnBodyTemplateLoader>\n </span>\n <div class=\"ui-cell-editor\" *ngIf=\"col.editable\">\n <input *ngIf=\"!col.editorTemplate\" type=\"text\" [(ngModel)]=\"rowData[col.field]\" required=\"true\"\n (keydown)=\"dt.onCellEditorKeydown($event, col, rowData, rowIndex)\" class=\"ui-inputtext ui-widget ui-state-default ui-corner-all\"/>\n <a *ngIf=\"col.editorTemplate\" class=\"ui-cell-editor-proxy-focus\" href=\"#\" (focus)=\"dt.onCustomEditorFocusPrev($event, colIndex)\"></a>\n <p-columnEditorTemplateLoader *ngIf=\"col.editorTemplate\" [column]=\"col\" [rowData]=\"rowData\" [rowIndex]=\"rowIndex\"></p-columnEditorTemplateLoader>\n <a *ngIf=\"col.editorTemplate\" class=\"ui-cell-editor-proxy-focus\" href=\"#\" (focus)=\"dt.onCustomEditorFocusNext($event, colIndex)\"></a>\n </div>\n <a href=\"#\" *ngIf=\"col.expander\" (click)=\"dt.toggleRow(rowData,$event)\">\n <span class=\"ui-row-toggler fa fa-fw ui-clickable\" [ngClass]=\"{'fa-chevron-circle-down':dt.isRowExpanded(rowData), 'fa-chevron-circle-right': !dt.isRowExpanded(rowData)}\"></span>\n </a>\n <p-dtRadioButton *ngIf=\"col.selectionMode=='single'\" (onClick)=\"dt.selectRowWithRadio($event, rowData)\" [checked]=\"dt.isSelected(rowData)\"></p-dtRadioButton>\n <p-dtCheckbox *ngIf=\"col.selectionMode=='multiple'\" (onChange)=\"dt.toggleRowWithCheckbox($event,rowData)\" [checked]=\"dt.isSelected(rowData)\"></p-dtCheckbox>\n </td>\n </ng-template>\n </tr>\n <tr class=\"ui-widget-header\" *ngIf=\"dt.rowGroupFooterTemplate && dt.rowGroupMode=='subheader' && ((rowIndex === dt.dataToRender.length - 1)||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex + 1],dt.groupField))) && (!dt.expandableRowGroups || dt.isRowGroupExpanded(rowData))\">\n <p-templateLoader class=\"ui-helper-hidden\" [data]=\"rowData\" [template]=\"dt.rowGroupFooterTemplate\"></p-templateLoader>\n </tr>\n <tr *ngIf=\"dt.expandableRows && dt.isRowExpanded(rowData)\">\n <td [attr.colspan]=\"dt.visibleColumns().length\">\n <p-rowExpansionLoader [rowData]=\"rowData\" [rowIndex]=\"rowIndex\" [template]=\"dt.rowExpansionTemplate\"></p-rowExpansionLoader>\n </td>\n </tr>\n </ng-template>\n\n <tr *ngIf=\"dt.isEmpty()\" class=\"ui-widget-content\">\n <td [attr.colspan]=\"dt.visibleColumns().length\" class=\"ui-datatable-emptymessage\">{{dt.emptyMessage}}</td>\n </tr>\n "
170
+ template: "\n <ng-template ngFor let-rowData [ngForOf]=\"data\" let-even=\"even\" let-odd=\"odd\" let-rowIndex=\"index\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <tr #rowGroupElement class=\"ui-widget-header ui-rowgroup-header\" \n *ngIf=\"dt.rowGroupMode=='subheader' && (rowIndex === 0||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex - 1], dt.groupField)))\"\n (click)=\"dt.onRowGroupClick($event)\" [ngStyle]=\"{'cursor': dt.sortableRowGroup ? 'pointer' : 'auto'}\">\n <td [attr.colspan]=\"dt.visibleColumns().length\">\n <a href=\"#\" *ngIf=\"dt.expandableRowGroups\" (click)=\"dt.toggleRowGroup($event,rowData)\">\n <span class=\"fa fa-fw\" [ngClass]=\"dt.isRowGroupExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon\"></span>\n </a>\n <span class=\"ui-rowgroup-header-name\">\n <p-templateLoader [template]=\"dt.rowGroupHeaderTemplate\" [data]=\"rowData\"></p-templateLoader>\n </span>\n </td>\n </tr>\n <tr #rowElement *ngIf=\"!dt.expandableRowGroups||dt.isRowGroupExpanded(rowData)\"\n (click)=\"dt.handleRowClick($event, rowData, rowIndex)\" (dblclick)=\"dt.rowDblclick($event,rowData)\" (contextmenu)=\"dt.onRowRightClick($event,rowData)\" (touchend)=\"dt.handleRowTouchEnd($event)\"\n [ngClass]=\"[even&&dt.rowGroupMode!='rowspan'? 'ui-datatable-even':'',\n odd&&dt.rowGroupMode!='rowspan'?'ui-datatable-odd':'',\n dt.isSelected(rowData)? 'ui-state-highlight': '', \n dt.getRowStyleClass(rowData,rowIndex)]\">\n <ng-template ngFor let-col [ngForOf]=\"columns\" let-colIndex=\"index\">\n <td #cell *ngIf=\"!dt.rowGroupMode || (dt.rowGroupMode == 'subheader') ||\n (dt.rowGroupMode=='rowspan' && ((dt.sortField==col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) || (dt.sortField!=col.field)))\"\n [ngStyle]=\"col.style\" [class]=\"col.styleClass\" (click)=\"dt.switchCellToEditMode(cell,col,rowData)\"\n [ngClass]=\"{'ui-editable-column':col.editable,'ui-selection-column':col.selectionMode, 'ui-helper-hidden': col.hidden}\"\n [attr.rowspan]=\"(dt.rowGroupMode=='rowspan' && dt.sortField == col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) ? dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].size : null\">\n <span class=\"ui-column-title\" *ngIf=\"dt.responsive\">{{col.header}}</span>\n <span class=\"ui-cell-data\" *ngIf=\"!col.bodyTemplate && !col.expander && !col.selectionMode\">{{dt.resolveFieldData(rowData,col.field)}}</span>\n <span class=\"ui-cell-data\" *ngIf=\"col.bodyTemplate\">\n <p-columnBodyTemplateLoader [column]=\"col\" [rowData]=\"rowData\" [rowIndex]=\"rowIndex + dt.first\"></p-columnBodyTemplateLoader>\n </span>\n <div class=\"ui-cell-editor\" *ngIf=\"col.editable\">\n <input *ngIf=\"!col.editorTemplate\" type=\"text\" [(ngModel)]=\"rowData[col.field]\" required=\"true\"\n (keydown)=\"dt.onCellEditorKeydown($event, col, rowData, rowIndex)\" class=\"ui-inputtext ui-widget ui-state-default ui-corner-all\"/>\n <a *ngIf=\"col.editorTemplate\" class=\"ui-cell-editor-proxy-focus\" href=\"#\" (focus)=\"dt.onCustomEditorFocusPrev($event, colIndex)\"></a>\n <p-columnEditorTemplateLoader *ngIf=\"col.editorTemplate\" [column]=\"col\" [rowData]=\"rowData\" [rowIndex]=\"rowIndex\"></p-columnEditorTemplateLoader>\n <a *ngIf=\"col.editorTemplate\" class=\"ui-cell-editor-proxy-focus\" href=\"#\" (focus)=\"dt.onCustomEditorFocusNext($event, colIndex)\"></a>\n </div>\n <a href=\"#\" *ngIf=\"col.expander\" (click)=\"dt.toggleRow(rowData,$event)\">\n <span class=\"ui-row-toggler fa fa-fw ui-clickable\" [ngClass]=\"dt.isRowExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon\"></span>\n </a>\n <p-dtRadioButton *ngIf=\"col.selectionMode=='single'\" (onClick)=\"dt.selectRowWithRadio($event, rowData)\" [checked]=\"dt.isSelected(rowData)\"></p-dtRadioButton>\n <p-dtCheckbox *ngIf=\"col.selectionMode=='multiple'\" (onChange)=\"dt.toggleRowWithCheckbox($event,rowData)\" [checked]=\"dt.isSelected(rowData)\"></p-dtCheckbox>\n </td>\n </ng-template>\n </tr>\n <tr class=\"ui-widget-header\" *ngIf=\"dt.rowGroupFooterTemplate && dt.rowGroupMode=='subheader' && ((rowIndex === dt.dataToRender.length - 1)||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex + 1],dt.groupField))) && (!dt.expandableRowGroups || dt.isRowGroupExpanded(rowData))\">\n <p-templateLoader class=\"ui-helper-hidden\" [data]=\"rowData\" [template]=\"dt.rowGroupFooterTemplate\"></p-templateLoader>\n </tr>\n <tr *ngIf=\"dt.expandableRows && dt.isRowExpanded(rowData)\">\n <td [attr.colspan]=\"dt.visibleColumns().length\">\n <p-rowExpansionLoader [rowData]=\"rowData\" [rowIndex]=\"rowIndex\" [template]=\"dt.rowExpansionTemplate\"></p-rowExpansionLoader>\n </td>\n </tr>\n </ng-template>\n\n <tr *ngIf=\"dt.isEmpty()\" class=\"ui-widget-content ui-datatable-emptymessage-row\">\n <td [attr.colspan]=\"dt.visibleColumns().length\" class=\"ui-datatable-emptymessage\">\n <span *ngIf=\"!dt.emptyMessageTemplate\">{{dt.emptyMessage}}</span>\n <p-templateLoader [template]=\"dt.emptyMessageTemplate\"></p-templateLoader>\n </td>\n </tr>\n "
167
171
  }),
168
172
  __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),
169
173
  __metadata("design:paramtypes", [DataTable])
@@ -182,14 +186,19 @@ var ScrollableView = (function () {
182
186
  this.initScrolling();
183
187
  };
184
188
  ScrollableView.prototype.ngAfterViewChecked = function () {
189
+ var _this = this;
185
190
  if (this.virtualScroll && !this.rowHeight) {
186
- var row = this.domHandler.findSingle(this.scrollTable, 'tr.ui-widget-content');
191
+ var row = this.domHandler.findSingle(this.scrollTable, 'tr.ui-widget-content:not(.ui-datatable-emptymessage-row)');
187
192
  if (row) {
188
193
  this.rowHeight = this.domHandler.getOuterHeight(row);
189
194
  }
190
195
  }
191
196
  if (!this.frozen) {
192
- this.alignScrollBar();
197
+ this.zone.runOutsideAngular(function () {
198
+ setTimeout(function () {
199
+ _this.alignScrollBar();
200
+ }, 1);
201
+ });
193
202
  }
194
203
  };
195
204
  ScrollableView.prototype.initScrolling = function () {
@@ -309,7 +318,7 @@ __decorate([
309
318
  ScrollableView = __decorate([
310
319
  core_1.Component({
311
320
  selector: '[pScrollableView]',
312
- template: "\n <div #scrollHeader class=\"ui-widget-header ui-datatable-scrollable-header\" [ngStyle]=\"{'width': width}\">\n <div #scrollHeaderBox class=\"ui-datatable-scrollable-header-box\">\n <table [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <thead class=\"ui-datatable-thead\">\n <tr *ngIf=\"!dt.headerColumnGroup\" class=\"ui-state-default\" [pColumnHeaders]=\"columns\"></tr>\n <ng-template [ngIf]=\"dt.headerColumnGroup\">\n <tr *ngFor=\"let headerRow of dt.headerColumnGroup.rows\" class=\"ui-state-default\" [pColumnHeaders]=\"headerRow.columns\"></tr>\n </ng-template>\n </thead>\n </table>\n </div>\n </div>\n <div #scrollBody class=\"ui-datatable-scrollable-body\" [ngStyle]=\"{'width': width,'max-height':dt.scrollHeight}\">\n <div #scrollTableWrapper class=\"ui-datatable-scrollable-table-wrapper\" style=\"position:relative\">\n <table #scrollTable [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\" [ngClass]=\"{'ui-datatable-virtual-table':virtualScroll}\" style=\"top:0px\">\n <colgroup class=\"ui-datatable-scrollable-colgroup\">\n <col *ngFor=\"let col of columns\" [ngStyle]=\"col.style\"/>\n </colgroup>\n <tbody [ngClass]=\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (dt.rowHover||dt.selectionMode)}\" [pTableBody]=\"columns\"></tbody>\n </table>\n </div>\n </div>\n <div #scrollFooter class=\"ui-widget-header ui-datatable-scrollable-footer\" [ngStyle]=\"{'width': width}\" *ngIf=\"dt.hasFooter()\">\n <div #scrollFooterBox class=\"ui-datatable-scrollable-footer-box\">\n <table [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <tfoot class=\"ui-datatable-tfoot\">\n <tr *ngIf=\"!dt.footerColumnGroup\" [pColumnFooters]=\"columns\" class=\"ui-state-default\"></tr>\n <ng-template [ngIf]=\"dt.footerColumnGroup\">\n <tr *ngFor=\"let footerRow of dt.footerColumnGroup.rows\" class=\"ui-state-default\" [pColumnFooters]=\"footerRow.columns\"></tr>\n </ng-template>\n </tfoot>\n </table>\n </div>\n </div>\n "
321
+ template: "\n <div #scrollHeader class=\"ui-widget-header ui-datatable-scrollable-header\" [ngStyle]=\"{'width': width}\">\n <div #scrollHeaderBox class=\"ui-datatable-scrollable-header-box\">\n <table [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <thead class=\"ui-datatable-thead\">\n <tr *ngIf=\"!dt.headerColumnGroup\" class=\"ui-state-default\" [pColumnHeaders]=\"columns\"></tr>\n <ng-template [ngIf]=\"dt.headerColumnGroup\">\n <tr *ngFor=\"let headerRow of dt.headerColumnGroup.rows\" class=\"ui-state-default\" [pColumnHeaders]=\"headerRow.columns\"></tr>\n </ng-template>\n </thead>\n <tbody *ngIf=\"dt.frozenValue\" [ngClass]=\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (dt.rowHover||dt.selectionMode)}\" [pTableBody]=\"columns\" [data]=\"dt.frozenValue\"></tbody>\n </table>\n </div>\n </div>\n <div #scrollBody class=\"ui-datatable-scrollable-body\" [ngStyle]=\"{'width': width,'max-height':dt.scrollHeight}\">\n <div #scrollTableWrapper class=\"ui-datatable-scrollable-table-wrapper\" style=\"position:relative\">\n <table #scrollTable [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\" [ngClass]=\"{'ui-datatable-virtual-table':virtualScroll}\" style=\"top:0px\">\n <colgroup class=\"ui-datatable-scrollable-colgroup\">\n <col *ngFor=\"let col of columns\" [ngStyle]=\"col.style\" [ngClass]=\"{'ui-helper-hidden': col.hidden}\"/>\n </colgroup>\n <tbody [ngClass]=\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (dt.rowHover||dt.selectionMode)}\" [pTableBody]=\"columns\" [data]=\"dt.dataToRender\"></tbody>\n </table>\n </div>\n </div>\n <div #scrollFooter class=\"ui-widget-header ui-datatable-scrollable-footer\" [ngStyle]=\"{'width': width}\" *ngIf=\"dt.hasFooter()\">\n <div #scrollFooterBox class=\"ui-datatable-scrollable-footer-box\">\n <table [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <tfoot class=\"ui-datatable-tfoot\">\n <tr *ngIf=\"!dt.footerColumnGroup\" [pColumnFooters]=\"columns\" class=\"ui-state-default\"></tr>\n <ng-template [ngIf]=\"dt.footerColumnGroup\">\n <tr *ngFor=\"let footerRow of dt.footerColumnGroup.rows\" class=\"ui-state-default\" [pColumnFooters]=\"footerRow.columns\"></tr>\n </ng-template>\n </tfoot>\n </table>\n </div>\n </div>\n "
313
322
  }),
314
323
  __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),
315
324
  __metadata("design:paramtypes", [DataTable, domhandler_1.DomHandler, core_1.ElementRef, core_1.Renderer2, core_1.NgZone])
@@ -339,6 +348,7 @@ var DataTable = (function () {
339
348
  this.onColReorder = new core_1.EventEmitter();
340
349
  this.sortMode = 'single';
341
350
  this.sortOrder = 1;
351
+ this.defaultSortOrder = 1;
342
352
  this.csvSeparator = ',';
343
353
  this.exportFilename = 'download';
344
354
  this.emptyMessage = 'No records found';
@@ -356,10 +366,15 @@ var DataTable = (function () {
356
366
  this.onSort = new core_1.EventEmitter();
357
367
  this.onFilter = new core_1.EventEmitter();
358
368
  this.rowExpandMode = 'multiple';
369
+ this.expandedIcon = 'fa-chevron-circle-down';
370
+ this.collapsedIcon = 'fa-chevron-circle-right';
359
371
  this.tabindex = 1;
360
372
  this.sortableRowGroup = true;
361
373
  this.filters = {};
362
374
  this.loadingIcon = 'fa-circle-o-notch';
375
+ this.enableLoader = true;
376
+ this.virtualScrollDelay = 500;
377
+ this.valueChange = new core_1.EventEmitter();
363
378
  this.firstChange = new core_1.EventEmitter();
364
379
  this.onRowExpand = new core_1.EventEmitter();
365
380
  this.onRowCollapse = new core_1.EventEmitter();
@@ -455,6 +470,9 @@ var DataTable = (function () {
455
470
  case 'rowgroupfooter':
456
471
  _this.rowGroupFooterTemplate = item.template;
457
472
  break;
473
+ case 'emptymessage':
474
+ _this.emptyMessageTemplate = item.template;
475
+ break;
458
476
  }
459
477
  });
460
478
  };
@@ -468,25 +486,29 @@ var DataTable = (function () {
468
486
  }
469
487
  this.columnsChanged = false;
470
488
  }
471
- if (this.totalRecordsChanged && this.virtualScroll) {
472
- var scrollableTable = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-datatable-scrollable-table-wrapper');
473
- var row = this.domHandler.findSingle(scrollableTable, 'tr.ui-widget-content');
489
+ if (this.totalRecordsChanged && this.virtualScroll && this.virtualScrollableTableWrapper && this.virtualScrollableTableWrapper.offsetParent) {
490
+ var row = this.domHandler.findSingle(this.virtualScrollableTableWrapper, 'tr.ui-widget-content');
474
491
  var rowHeight = this.domHandler.getOuterHeight(row);
475
492
  this.virtualTableHeight = this._totalRecords * rowHeight;
476
- scrollableTable.style.height = this.virtualTableHeight + 'px';
477
- this.totalRecordsChanged = true;
493
+ this.virtualScrollableTableWrapper.style.height = this.virtualTableHeight + 'px';
494
+ this.totalRecordsChanged = false;
478
495
  }
479
496
  };
480
497
  DataTable.prototype.ngAfterViewInit = function () {
481
498
  var _this = this;
482
499
  if (this.globalFilter) {
483
500
  this.globalFilterFunction = this.renderer.listen(this.globalFilter, 'keyup', function () {
501
+ if (_this.filterTimeout) {
502
+ clearTimeout(_this.filterTimeout);
503
+ }
484
504
  _this.filterTimeout = setTimeout(function () {
485
505
  _this._filter();
486
506
  _this.filterTimeout = null;
487
507
  }, _this.filterDelay);
488
508
  });
489
509
  }
510
+ this.virtualScrollableTableWrapper = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-datatable-scrollable-table-wrapper');
511
+ this.initialized = true;
490
512
  };
491
513
  Object.defineProperty(DataTable.prototype, "value", {
492
514
  get: function () {
@@ -500,6 +522,7 @@ var DataTable = (function () {
500
522
  else {
501
523
  this._value = val;
502
524
  }
525
+ this.valueChange.emit(this.value);
503
526
  },
504
527
  enumerable: true,
505
528
  configurable: true
@@ -509,7 +532,7 @@ var DataTable = (function () {
509
532
  return this._first;
510
533
  },
511
534
  set: function (val) {
512
- var shouldPaginate = this._first !== val;
535
+ var shouldPaginate = this.initialized && this._first !== val;
513
536
  this._first = val;
514
537
  if (shouldPaginate) {
515
538
  this.paginate();
@@ -559,6 +582,9 @@ var DataTable = (function () {
559
582
  };
560
583
  DataTable.prototype.handleDataChange = function () {
561
584
  var _this = this;
585
+ if (this.lazy && this.enableLoader) {
586
+ this.loading = false;
587
+ }
562
588
  if (this.paginator) {
563
589
  this.updatePaginator();
564
590
  }
@@ -586,9 +612,9 @@ var DataTable = (function () {
586
612
  this.columns = this.cols.toArray();
587
613
  if (this.scrollable) {
588
614
  this.scrollableColumns = [];
615
+ this.frozenColumns = [];
589
616
  this.cols.forEach(function (col) {
590
617
  if (col.frozen) {
591
- _this.frozenColumns = _this.frozenColumns || [];
592
618
  _this.frozenColumns.push(col);
593
619
  }
594
620
  else {
@@ -689,11 +715,19 @@ var DataTable = (function () {
689
715
  }
690
716
  };
691
717
  DataTable.prototype.onVirtualScroll = function (event) {
718
+ var _this = this;
692
719
  this._first = (event.page - 1) * this.rows;
693
- if (this.lazy)
694
- this.onLazyLoad.emit(this.createLazyLoadMetadata());
695
- else
696
- this.updateDataToRender(this.filteredValue || this.value);
720
+ this.zone.run(function () {
721
+ if (_this.virtualScrollTimer) {
722
+ clearTimeout(_this.virtualScrollTimer);
723
+ }
724
+ _this.virtualScrollTimer = setTimeout(function () {
725
+ if (_this.lazy)
726
+ _this.onLazyLoad.emit(_this.createLazyLoadMetadata());
727
+ else
728
+ _this.updateDataToRender(_this.filteredValue || _this.value);
729
+ }, _this.virtualScrollDelay);
730
+ });
697
731
  };
698
732
  DataTable.prototype.onHeaderKeydown = function (event, column) {
699
733
  if (event.keyCode == 13) {
@@ -721,7 +755,7 @@ var DataTable = (function () {
721
755
  this.preventSortPropagation = true;
722
756
  }
723
757
  var columnSortField = column.sortField || column.field;
724
- this.sortOrder = (this.sortField === columnSortField) ? this.sortOrder * -1 : 1;
758
+ this.sortOrder = (this.sortField === columnSortField) ? this.sortOrder * -1 : this.defaultSortOrder;
725
759
  this.sortField = columnSortField;
726
760
  this.sortColumn = column;
727
761
  var metaKey = event.metaKey || event.ctrlKey;
@@ -777,7 +811,7 @@ var DataTable = (function () {
777
811
  return (_this.sortOrder * result);
778
812
  });
779
813
  }
780
- this.first = 0;
814
+ this._first = 0;
781
815
  if (this.hasFilter()) {
782
816
  this._filter();
783
817
  }
@@ -944,14 +978,6 @@ var DataTable = (function () {
944
978
  return;
945
979
  }
946
980
  var targetNode = event.target.nodeName;
947
- if (this.editable) {
948
- var cell = this.findCell(event.target);
949
- var column = this.columns[this.domHandler.index(cell)];
950
- if (column.editable) {
951
- this.switchCellToEditMode(cell, column, rowData);
952
- return;
953
- }
954
- }
955
981
  if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (this.domHandler.hasClass(event.target, 'ui-clickable'))) {
956
982
  return;
957
983
  }
@@ -1229,10 +1255,10 @@ var DataTable = (function () {
1229
1255
  var localMatch = true;
1230
1256
  var globalMatch = false;
1231
1257
  for (var j = 0; j < this.columns.length; j++) {
1232
- var col = this.columns[j], filterMeta = this.filters[col.field];
1258
+ var col = this.columns[j], filterMeta = this.filters[col.filterField || col.field];
1233
1259
  //local
1234
1260
  if (filterMeta) {
1235
- var filterValue = filterMeta.value, filterField = col.field, filterMatchMode = filterMeta.matchMode || 'startsWith', dataFieldValue = this.resolveFieldData(this.value[i], filterField);
1261
+ var filterValue = filterMeta.value, filterField = col.filterField || col.field, filterMatchMode = filterMeta.matchMode || 'startsWith', dataFieldValue = this.resolveFieldData(this.value[i], filterField);
1236
1262
  var filterConstraint = this.filterConstraints[filterMatchMode];
1237
1263
  if (!filterConstraint(dataFieldValue, filterValue)) {
1238
1264
  localMatch = false;
@@ -1243,7 +1269,7 @@ var DataTable = (function () {
1243
1269
  }
1244
1270
  //global
1245
1271
  if (this.globalFilter && !globalMatch) {
1246
- globalMatch = this.filterConstraints['contains'](this.resolveFieldData(this.value[i], col.field), this.globalFilter.value);
1272
+ globalMatch = this.filterConstraints['contains'](this.resolveFieldData(this.value[i], col.filterField || col.field), this.globalFilter.value);
1247
1273
  }
1248
1274
  }
1249
1275
  var matches = localMatch;
@@ -1302,7 +1328,7 @@ var DataTable = (function () {
1302
1328
  DataTable.prototype.switchCellToViewMode = function (element) {
1303
1329
  this.editingCell = null;
1304
1330
  var cell = this.findCell(element);
1305
- this.domHandler.removeClass(this.editingCell, 'ui-cell-editing');
1331
+ this.domHandler.removeClass(cell, 'ui-cell-editing');
1306
1332
  this.unbindDocumentEditListener();
1307
1333
  };
1308
1334
  DataTable.prototype.closeCell = function () {
@@ -1415,11 +1441,16 @@ var DataTable = (function () {
1415
1441
  this.moveToNextCell(event);
1416
1442
  };
1417
1443
  DataTable.prototype.findCell = function (element) {
1418
- var cell = element;
1419
- while (cell.tagName != 'TD') {
1420
- cell = cell.parentElement;
1444
+ if (element) {
1445
+ var cell = element;
1446
+ while (cell && cell.tagName != 'TD') {
1447
+ cell = cell.parentElement;
1448
+ }
1449
+ return cell;
1450
+ }
1451
+ else {
1452
+ return null;
1421
1453
  }
1422
- return cell;
1423
1454
  };
1424
1455
  DataTable.prototype.initResizableColumns = function () {
1425
1456
  this.tbody = this.domHandler.findSingle(this.el.nativeElement, 'tbody.ui-datatable-data');
@@ -1598,7 +1629,7 @@ var DataTable = (function () {
1598
1629
  allowDrop = false;
1599
1630
  }
1600
1631
  if (allowDrop) {
1601
- this.columns.splice(dropIndex, 0, this.columns.splice(dragIndex, 1)[0]);
1632
+ this.objectUtils.reorderArray(this.columns, dragIndex, dropIndex);
1602
1633
  this.onColReorder.emit({
1603
1634
  dragIndex: dragIndex,
1604
1635
  dropIndex: dropIndex,
@@ -1639,7 +1670,7 @@ var DataTable = (function () {
1639
1670
  else {
1640
1671
  if (this.columns) {
1641
1672
  for (var i = 0; i < this.columns.length; i++) {
1642
- if (this.columns[i].footer) {
1673
+ if (this.columns[i].footer || this.columns[i].footerTemplate) {
1643
1674
  return true;
1644
1675
  }
1645
1676
  }
@@ -1651,6 +1682,9 @@ var DataTable = (function () {
1651
1682
  return !this.dataToRender || (this.dataToRender.length == 0);
1652
1683
  };
1653
1684
  DataTable.prototype.createLazyLoadMetadata = function () {
1685
+ if (this.enableLoader) {
1686
+ this.loading = true;
1687
+ }
1654
1688
  return {
1655
1689
  first: this.first,
1656
1690
  rows: this.virtualScroll ? this.rows * 2 : this.rows,
@@ -1811,6 +1845,12 @@ var DataTable = (function () {
1811
1845
  styleClass += ' ' + rowClass;
1812
1846
  }
1813
1847
  }
1848
+ else if (this.rowStyleMap && this.dataKey) {
1849
+ var rowClass = this.rowStyleMap[rowData[this.dataKey]];
1850
+ if (rowClass) {
1851
+ styleClass += ' ' + rowClass;
1852
+ }
1853
+ }
1814
1854
  return styleClass;
1815
1855
  };
1816
1856
  DataTable.prototype.visibleColumns = function () {
@@ -1833,6 +1873,9 @@ var DataTable = (function () {
1833
1873
  enumerable: true,
1834
1874
  configurable: true
1835
1875
  });
1876
+ DataTable.prototype.hasFrozenColumns = function () {
1877
+ return this.frozenColumns && this.frozenColumns.length > 0;
1878
+ };
1836
1879
  DataTable.prototype.ngOnDestroy = function () {
1837
1880
  //remove event listener
1838
1881
  if (this.globalFilterFunction) {
@@ -2000,6 +2043,10 @@ __decorate([
2000
2043
  core_1.Input(),
2001
2044
  __metadata("design:type", Number)
2002
2045
  ], DataTable.prototype, "sortOrder", void 0);
2046
+ __decorate([
2047
+ core_1.Input(),
2048
+ __metadata("design:type", Number)
2049
+ ], DataTable.prototype, "defaultSortOrder", void 0);
2003
2050
  __decorate([
2004
2051
  core_1.Input(),
2005
2052
  __metadata("design:type", String)
@@ -2044,6 +2091,10 @@ __decorate([
2044
2091
  core_1.Input(),
2045
2092
  __metadata("design:type", Boolean)
2046
2093
  ], DataTable.prototype, "immutable", void 0);
2094
+ __decorate([
2095
+ core_1.Input(),
2096
+ __metadata("design:type", Array)
2097
+ ], DataTable.prototype, "frozenValue", void 0);
2047
2098
  __decorate([
2048
2099
  core_1.Input(),
2049
2100
  __metadata("design:type", String)
@@ -2104,6 +2155,14 @@ __decorate([
2104
2155
  core_1.Input(),
2105
2156
  __metadata("design:type", Array)
2106
2157
  ], DataTable.prototype, "expandedRowsGroups", void 0);
2158
+ __decorate([
2159
+ core_1.Input(),
2160
+ __metadata("design:type", String)
2161
+ ], DataTable.prototype, "expandedIcon", void 0);
2162
+ __decorate([
2163
+ core_1.Input(),
2164
+ __metadata("design:type", String)
2165
+ ], DataTable.prototype, "collapsedIcon", void 0);
2107
2166
  __decorate([
2108
2167
  core_1.Input(),
2109
2168
  __metadata("design:type", Number)
@@ -2112,6 +2171,10 @@ __decorate([
2112
2171
  core_1.Input(),
2113
2172
  __metadata("design:type", Function)
2114
2173
  ], DataTable.prototype, "rowStyleClass", void 0);
2174
+ __decorate([
2175
+ core_1.Input(),
2176
+ __metadata("design:type", Object)
2177
+ ], DataTable.prototype, "rowStyleMap", void 0);
2115
2178
  __decorate([
2116
2179
  core_1.Input(),
2117
2180
  __metadata("design:type", String)
@@ -2144,6 +2207,18 @@ __decorate([
2144
2207
  core_1.Input(),
2145
2208
  __metadata("design:type", String)
2146
2209
  ], DataTable.prototype, "loadingIcon", void 0);
2210
+ __decorate([
2211
+ core_1.Input(),
2212
+ __metadata("design:type", Boolean)
2213
+ ], DataTable.prototype, "enableLoader", void 0);
2214
+ __decorate([
2215
+ core_1.Input(),
2216
+ __metadata("design:type", Number)
2217
+ ], DataTable.prototype, "virtualScrollDelay", void 0);
2218
+ __decorate([
2219
+ core_1.Output(),
2220
+ __metadata("design:type", core_1.EventEmitter)
2221
+ ], DataTable.prototype, "valueChange", void 0);
2147
2222
  __decorate([
2148
2223
  core_1.Output(),
2149
2224
  __metadata("design:type", core_1.EventEmitter)
@@ -2203,7 +2278,7 @@ __decorate([
2203
2278
  DataTable = __decorate([
2204
2279
  core_1.Component({
2205
2280
  selector: 'p-dataTable',
2206
- template: "\n <div [ngStyle]=\"style\" [class]=\"styleClass\" [style.width]=\"containerWidth\"\n [ngClass]=\"{'ui-datatable ui-widget':true,'ui-datatable-reflow':responsive,'ui-datatable-stacked':stacked,'ui-datatable-resizable':resizableColumns,'ui-datatable-scrollable':scrollable}\">\n <div class=\"ui-datatable-loading ui-widget-overlay\" *ngIf=\"loading\"></div>\n <div class=\"ui-datatable-loading-content\" *ngIf=\"loading\">\n <i [class]=\"'fa fa-spin fa-2x ' + loadingIcon\"></i>\n </div>\n <div class=\"ui-datatable-header ui-widget-header\" *ngIf=\"header\">\n <ng-content select=\"p-header\"></ng-content>\n </div>\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"ui-paginator-top\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && paginatorPosition =='top' || paginatorPosition =='both'\"></p-paginator>\n <div class=\"ui-datatable-tablewrapper\" *ngIf=\"!scrollable\">\n <table [class]=\"tableStyleClass\" [ngStyle]=\"tableStyle\">\n <thead class=\"ui-datatable-thead\">\n <tr *ngIf=\"!headerColumnGroup\" class=\"ui-state-default\" [pColumnHeaders]=\"columns\"></tr>\n <ng-template [ngIf]=\"headerColumnGroup\">\n <tr *ngFor=\"let headerRow of headerColumnGroup.rows\" class=\"ui-state-default\" [pColumnHeaders]=\"headerRow.columns\"></tr>\n </ng-template>\n </thead>\n <tfoot *ngIf=\"hasFooter()\" class=\"ui-datatable-tfoot\">\n <tr *ngIf=\"!footerColumnGroup\" class=\"ui-state-default\" [pColumnFooters]=\"columns\"></tr>\n <ng-template [ngIf]=\"footerColumnGroup\">\n <tr *ngFor=\"let footerRow of footerColumnGroup.rows\" class=\"ui-state-default\" [pColumnFooters]=\"footerRow.columns\"></tr>\n </ng-template>\n </tfoot>\n <tbody [ngClass]=\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (rowHover||selectionMode)}\" [pTableBody]=\"columns\"></tbody>\n </table>\n </div>\n \n <ng-template [ngIf]=\"scrollable\">\n <div class=\"ui-datatable-scrollable-wrapper ui-helper-clearfix\" [ngClass]=\"{'max-height':scrollHeight}\">\n <div *ngIf=\"frozenColumns\" [pScrollableView]=\"frozenColumns\" frozen=\"true\" \n [ngStyle]=\"{'width':this.frozenWidth}\" class=\"ui-datatable-scrollable-view ui-datatable-frozen-view\"></div>\n <div [pScrollableView]=\"scrollableColumns\" [ngStyle]=\"{'width':this.unfrozenWidth, 'left': this.frozenWidth}\"\n class=\"ui-datatable-scrollable-view\" [virtualScroll]=\"virtualScroll\" (onVirtualScroll)=\"onVirtualScroll($event)\"\n [ngClass]=\"{'ui-datatable-unfrozen-view': frozenColumns}\"></div>\n </div>\n </ng-template>\n \n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"ui-paginator-bottom\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && paginatorPosition =='bottom' || paginatorPosition =='both'\"></p-paginator>\n <div class=\"ui-datatable-footer ui-widget-header\" *ngIf=\"footer\">\n <ng-content select=\"p-footer\"></ng-content>\n </div>\n \n <div class=\"ui-column-resizer-helper ui-state-highlight\" style=\"display:none\"></div>\n <span class=\"fa fa-arrow-down ui-datatable-reorder-indicator-up\" style=\"position: absolute; display: none;\"></span>\n <span class=\"fa fa-arrow-up ui-datatable-reorder-indicator-down\" style=\"position: absolute; display: none;\"></span>\n </div>\n ",
2281
+ template: "\n <div [ngStyle]=\"style\" [class]=\"styleClass\" [style.width]=\"containerWidth\"\n [ngClass]=\"{'ui-datatable ui-widget':true,'ui-datatable-reflow':responsive,'ui-datatable-stacked':stacked,'ui-datatable-resizable':resizableColumns,'ui-datatable-scrollable':scrollable}\">\n <div class=\"ui-datatable-loading ui-widget-overlay\" *ngIf=\"loading\"></div>\n <div class=\"ui-datatable-loading-content\" *ngIf=\"loading\">\n <i [class]=\"'fa fa-spin fa-2x ' + loadingIcon\"></i>\n </div>\n <div class=\"ui-datatable-header ui-widget-header\" *ngIf=\"header\">\n <ng-content select=\"p-header\"></ng-content>\n </div>\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"ui-paginator-top\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && paginatorPosition =='top' || paginatorPosition =='both'\"></p-paginator>\n <div class=\"ui-datatable-tablewrapper\" *ngIf=\"!scrollable\">\n <table [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\">\n <thead class=\"ui-datatable-thead\">\n <tr *ngIf=\"!headerColumnGroup\" class=\"ui-state-default\" [pColumnHeaders]=\"columns\"></tr>\n <ng-template [ngIf]=\"headerColumnGroup\">\n <tr *ngFor=\"let headerRow of headerColumnGroup.rows\" class=\"ui-state-default\" [pColumnHeaders]=\"headerRow.columns\"></tr>\n </ng-template>\n </thead>\n <tfoot *ngIf=\"hasFooter()\" class=\"ui-datatable-tfoot\">\n <tr *ngIf=\"!footerColumnGroup\" class=\"ui-state-default\" [pColumnFooters]=\"columns\"></tr>\n <ng-template [ngIf]=\"footerColumnGroup\">\n <tr *ngFor=\"let footerRow of footerColumnGroup.rows\" class=\"ui-state-default\" [pColumnFooters]=\"footerRow.columns\"></tr>\n </ng-template>\n </tfoot>\n <tbody [ngClass]=\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (rowHover||selectionMode)}\" [pTableBody]=\"columns\" [data]=\"dataToRender\"></tbody>\n </table>\n </div>\n \n <ng-template [ngIf]=\"scrollable\">\n <div class=\"ui-datatable-scrollable-wrapper ui-helper-clearfix\" [ngClass]=\"{'max-height':scrollHeight}\">\n <div *ngIf=\"hasFrozenColumns()\" [pScrollableView]=\"frozenColumns\" frozen=\"true\" \n [ngStyle]=\"{'width':this.frozenWidth}\" class=\"ui-datatable-scrollable-view ui-datatable-frozen-view\"></div>\n <div [pScrollableView]=\"scrollableColumns\" [ngStyle]=\"{'width':this.unfrozenWidth, 'left': this.frozenWidth}\"\n class=\"ui-datatable-scrollable-view\" [virtualScroll]=\"virtualScroll\" (onVirtualScroll)=\"onVirtualScroll($event)\"\n [ngClass]=\"{'ui-datatable-unfrozen-view': hasFrozenColumns()}\"></div>\n </div>\n </ng-template>\n \n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"ui-paginator-bottom\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && paginatorPosition =='bottom' || paginatorPosition =='both'\"></p-paginator>\n <div class=\"ui-datatable-footer ui-widget-header\" *ngIf=\"footer\">\n <ng-content select=\"p-footer\"></ng-content>\n </div>\n \n <div class=\"ui-column-resizer-helper ui-state-highlight\" style=\"display:none\"></div>\n <span class=\"fa fa-arrow-down ui-datatable-reorder-indicator-up\" style=\"position: absolute; display: none;\"></span>\n <span class=\"fa fa-arrow-up ui-datatable-reorder-indicator-down\" style=\"position: absolute; display: none;\"></span>\n </div>\n ",
2207
2282
  providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils]
2208
2283
  }),
2209
2284
  __metadata("design:paramtypes", [core_1.ElementRef, domhandler_1.DomHandler, core_1.IterableDiffers,