primeng
Version:
[](https://opensource.org/licenses/MIT) [](https://gitter.im/primefaces/primeng?ut
1,149 lines • 104 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@angular/core");
var common_1 = require("@angular/common");
var rxjs_1 = require("rxjs");
var domhandler_1 = require("../dom/domhandler");
var paginator_1 = require("../paginator/paginator");
var shared_1 = require("../common/shared");
var objectutils_1 = require("../utils/objectutils");
var TreeTableService = /** @class */ (function () {
function TreeTableService() {
this.sortSource = new rxjs_1.Subject();
this.selectionSource = new rxjs_1.Subject();
this.contextMenuSource = new rxjs_1.Subject();
this.uiUpdateSource = new rxjs_1.Subject();
this.sortSource$ = this.sortSource.asObservable();
this.selectionSource$ = this.selectionSource.asObservable();
this.contextMenuSource$ = this.contextMenuSource.asObservable();
this.uiUpdateSource$ = this.uiUpdateSource.asObservable();
}
TreeTableService.prototype.onSort = function (sortMeta) {
this.sortSource.next(sortMeta);
};
TreeTableService.prototype.onSelectionChange = function () {
this.selectionSource.next();
};
TreeTableService.prototype.onContextMenu = function (node) {
this.contextMenuSource.next(node);
};
TreeTableService.prototype.onUIUpdate = function (value) {
this.uiUpdateSource.next(value);
};
TreeTableService = __decorate([
core_1.Injectable()
], TreeTableService);
return TreeTableService;
}());
exports.TreeTableService = TreeTableService;
var TreeTable = /** @class */ (function () {
function TreeTable(el, domHandler, objectUtils, zone, tableService) {
this.el = el;
this.domHandler = domHandler;
this.objectUtils = objectUtils;
this.zone = zone;
this.tableService = tableService;
this.lazy = false;
this.first = 0;
this.totalRecords = 0;
this.pageLinks = 5;
this.alwaysShowPaginator = true;
this.paginatorPosition = 'bottom';
this.defaultSortOrder = 1;
this.sortMode = 'single';
this.resetPageOnSort = true;
this.selectionChange = new core_1.EventEmitter();
this.contextMenuSelectionChange = new core_1.EventEmitter();
this.contextMenuSelectionMode = "separate";
this.compareSelectionBy = 'deepEquals';
this.loadingIcon = 'pi pi-spinner';
this.columnResizeMode = 'fit';
this.rowTrackBy = function (index, item) { return item; };
this.onNodeExpand = new core_1.EventEmitter();
this.onNodeCollapse = new core_1.EventEmitter();
this.onPage = new core_1.EventEmitter();
this.onSort = new core_1.EventEmitter();
this.onLazyLoad = new core_1.EventEmitter();
this.sortFunction = new core_1.EventEmitter();
this.onColResize = new core_1.EventEmitter();
this.onColReorder = new core_1.EventEmitter();
this.onNodeSelect = new core_1.EventEmitter();
this.onNodeUnselect = new core_1.EventEmitter();
this.onContextMenuSelect = new core_1.EventEmitter();
this.onHeaderCheckboxToggle = new core_1.EventEmitter();
this.onEditInit = new core_1.EventEmitter();
this.onEditComplete = new core_1.EventEmitter();
this.onEditCancel = new core_1.EventEmitter();
this._value = [];
this._sortOrder = 1;
this.selectionKeys = {};
}
TreeTable.prototype.ngOnInit = function () {
if (this.lazy) {
this.onLazyLoad.emit(this.createLazyLoadMetadata());
}
this.initialized = true;
};
TreeTable.prototype.ngAfterContentInit = function () {
var _this = this;
this.templates.forEach(function (item) {
switch (item.getType()) {
case 'caption':
_this.captionTemplate = item.template;
break;
case 'header':
_this.headerTemplate = item.template;
break;
case 'body':
_this.bodyTemplate = item.template;
break;
case 'footer':
_this.footerTemplate = item.template;
break;
case 'summary':
_this.summaryTemplate = item.template;
break;
case 'colgroup':
_this.colGroupTemplate = item.template;
break;
case 'emptymessage':
_this.emptyMessageTemplate = item.template;
break;
case 'paginatorleft':
_this.paginatorLeftTemplate = item.template;
break;
case 'paginatorright':
_this.paginatorRightTemplate = item.template;
break;
case 'frozenheader':
_this.frozenHeaderTemplate = item.template;
break;
case 'frozenbody':
_this.frozenBodyTemplate = item.template;
break;
case 'frozenfooter':
_this.frozenFooterTemplate = item.template;
break;
case 'frozencolgroup':
_this.frozenColGroupTemplate = item.template;
break;
}
});
};
Object.defineProperty(TreeTable.prototype, "value", {
get: function () {
return this._value;
},
set: function (val) {
this._value = val;
if (!this.lazy) {
this.totalRecords = (this._value ? this._value.length : 0);
if (this.sortMode == 'single' && this.sortField)
this.sortSingle();
else if (this.sortMode == 'multiple' && this.multiSortMeta)
this.sortMultiple();
}
this.updateSerializedValue();
this.tableService.onUIUpdate(this.value);
},
enumerable: true,
configurable: true
});
TreeTable.prototype.updateSerializedValue = function () {
this.serializedValue = [];
if (this.paginator)
this.serializePageNodes();
else
this.serializeNodes(null, this.value, 0, true);
};
TreeTable.prototype.serializeNodes = function (parent, nodes, level, visible) {
if (nodes && nodes.length) {
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
var node = nodes_1[_i];
node.parent = parent;
var rowNode = {
node: node,
parent: parent,
level: level,
visible: visible && (parent ? parent.expanded : true)
};
this.serializedValue.push(rowNode);
this.serializeNodes(node, node.children, level + 1, rowNode.visible);
}
}
};
TreeTable.prototype.serializePageNodes = function () {
this.serializedValue = [];
if (this.value && this.value.length) {
var first = this.lazy ? 0 : this.first;
for (var i = first; i < (first + this.rows); i++) {
var node = this.value[i];
if (node) {
this.serializedValue.push({
node: node,
parent: null,
level: 0,
visible: true
});
this.serializeNodes(node, node.children, 1, true);
}
}
}
};
Object.defineProperty(TreeTable.prototype, "sortField", {
get: function () {
return this._sortField;
},
set: function (val) {
this._sortField = val;
//avoid triggering lazy load prior to lazy initialization at onInit
if (!this.lazy || this.initialized) {
if (this.sortMode === 'single') {
this.sortSingle();
}
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TreeTable.prototype, "sortOrder", {
get: function () {
return this._sortOrder;
},
set: function (val) {
this._sortOrder = val;
//avoid triggering lazy load prior to lazy initialization at onInit
if (!this.lazy || this.initialized) {
if (this.sortMode === 'single') {
this.sortSingle();
}
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TreeTable.prototype, "multiSortMeta", {
get: function () {
return this._multiSortMeta;
},
set: function (val) {
this._multiSortMeta = val;
if (this.sortMode === 'multiple') {
this.sortMultiple();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TreeTable.prototype, "selection", {
get: function () {
return this._selection;
},
set: function (val) {
this._selection = val;
if (!this.preventSelectionSetterPropagation) {
this.updateSelectionKeys();
this.tableService.onSelectionChange();
}
this.preventSelectionSetterPropagation = false;
},
enumerable: true,
configurable: true
});
TreeTable.prototype.updateSelectionKeys = function () {
if (this.dataKey && this._selection) {
this.selectionKeys = {};
if (Array.isArray(this._selection)) {
for (var _i = 0, _a = this._selection; _i < _a.length; _i++) {
var node = _a[_i];
this.selectionKeys[String(this.objectUtils.resolveFieldData(node.data, this.dataKey))] = 1;
}
}
else {
this.selectionKeys[String(this.objectUtils.resolveFieldData(this._selection.data, this.dataKey))] = 1;
}
}
};
TreeTable.prototype.onPageChange = function (event) {
this.first = event.first;
this.rows = event.rows;
if (this.lazy)
this.onLazyLoad.emit(this.createLazyLoadMetadata());
else
this.serializePageNodes();
this.onPage.emit({
first: this.first,
rows: this.rows
});
this.tableService.onUIUpdate(this.value);
};
TreeTable.prototype.sort = function (event) {
var originalEvent = event.originalEvent;
if (this.sortMode === 'single') {
this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;
this._sortField = event.field;
this.sortSingle();
}
if (this.sortMode === 'multiple') {
var metaKey = originalEvent.metaKey || originalEvent.ctrlKey;
var sortMeta = this.getSortMeta(event.field);
if (sortMeta) {
if (!metaKey) {
this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];
}
else {
sortMeta.order = sortMeta.order * -1;
}
}
else {
if (!metaKey || !this.multiSortMeta) {
this._multiSortMeta = [];
}
this.multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });
}
this.sortMultiple();
}
};
TreeTable.prototype.sortSingle = function () {
if (this.sortField && this.sortOrder) {
if (this.resetPageOnSort) {
this.first = 0;
}
if (this.lazy) {
this.onLazyLoad.emit(this.createLazyLoadMetadata());
}
else if (this.value) {
this.sortNodes(this.value);
}
var sortMeta = {
field: this.sortField,
order: this.sortOrder
};
this.onSort.emit(sortMeta);
this.tableService.onSort(sortMeta);
this.updateSerializedValue();
}
};
TreeTable.prototype.sortNodes = function (nodes) {
var _this = this;
if (!nodes || nodes.length === 0) {
return;
}
if (this.customSort) {
this.sortFunction.emit({
data: nodes,
mode: this.sortMode,
field: this.sortField,
order: this.sortOrder
});
}
else {
nodes.sort(function (node1, node2) {
var value1 = _this.objectUtils.resolveFieldData(node1.data, _this.sortField);
var value2 = _this.objectUtils.resolveFieldData(node2.data, _this.sortField);
var result = null;
if (value1 == null && value2 != null)
result = -1;
else if (value1 != null && value2 == null)
result = 1;
else if (value1 == null && value2 == null)
result = 0;
else if (typeof value1 === 'string' && typeof value2 === 'string')
result = value1.localeCompare(value2, undefined, { numeric: true });
else
result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
return (_this.sortOrder * result);
});
}
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
var node = nodes_2[_i];
this.sortNodes(node.children);
}
};
TreeTable.prototype.sortMultiple = function () {
if (this.multiSortMeta) {
if (this.lazy) {
this.onLazyLoad.emit(this.createLazyLoadMetadata());
}
else if (this.value) {
this.sortMultipleNodes(this.value);
}
this.onSort.emit({
multisortmeta: this.multiSortMeta
});
this.tableService.onSort(this.multiSortMeta);
this.updateSerializedValue();
}
};
TreeTable.prototype.sortMultipleNodes = function (nodes) {
var _this = this;
if (!nodes || nodes.length === 0) {
return;
}
if (this.customSort) {
this.sortFunction.emit({
data: this.value,
mode: this.sortMode,
multiSortMeta: this.multiSortMeta
});
}
else {
this.value.sort(function (node1, node2) {
return _this.multisortField(node1, node2, _this.multiSortMeta, 0);
});
}
for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {
var node = nodes_3[_i];
this.sortMultipleNodes(node.children);
}
};
TreeTable.prototype.multisortField = function (node1, node2, multiSortMeta, index) {
var value1 = this.objectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);
var value2 = this.objectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);
var result = null;
if (value1 == null && value2 != null)
result = -1;
else if (value1 != null && value2 == null)
result = 1;
else if (value1 == null && value2 == null)
result = 0;
if (typeof value1 == 'string' || value1 instanceof String) {
if (value1.localeCompare && (value1 != value2)) {
return (multiSortMeta[index].order * value1.localeCompare(value2, undefined, { numeric: true }));
}
}
else {
result = (value1 < value2) ? -1 : 1;
}
if (value1 == value2) {
return (multiSortMeta.length - 1) > (index) ? (this.multisortField(node1, node2, multiSortMeta, index + 1)) : 0;
}
return (multiSortMeta[index].order * result);
};
TreeTable.prototype.getSortMeta = function (field) {
if (this.multiSortMeta && this.multiSortMeta.length) {
for (var i = 0; i < this.multiSortMeta.length; i++) {
if (this.multiSortMeta[i].field === field) {
return this.multiSortMeta[i];
}
}
}
return null;
};
TreeTable.prototype.isSorted = function (field) {
if (this.sortMode === 'single') {
return (this.sortField && this.sortField === field);
}
else if (this.sortMode === 'multiple') {
var sorted = false;
if (this.multiSortMeta) {
for (var i = 0; i < this.multiSortMeta.length; i++) {
if (this.multiSortMeta[i].field == field) {
sorted = true;
break;
}
}
}
return sorted;
}
};
TreeTable.prototype.createLazyLoadMetadata = function () {
return {
first: this.first,
rows: this.rows,
sortField: this.sortField,
sortOrder: this.sortOrder,
multiSortMeta: this.multiSortMeta
};
};
TreeTable.prototype.isEmpty = function () {
return this.value == null || this.value.length == 0;
};
TreeTable.prototype.getBlockableElement = function () {
return this.el.nativeElement.children[0];
};
TreeTable.prototype.onColumnResizeBegin = function (event) {
var containerLeft = this.domHandler.getOffset(this.containerViewChild.nativeElement).left;
this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);
event.preventDefault();
};
TreeTable.prototype.onColumnResize = function (event) {
var containerLeft = this.domHandler.getOffset(this.containerViewChild.nativeElement).left;
this.domHandler.addClass(this.containerViewChild.nativeElement, 'ui-unselectable-text');
this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';
this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';
this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';
this.resizeHelperViewChild.nativeElement.style.display = 'block';
};
TreeTable.prototype.onColumnResizeEnd = function (event, column) {
var delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;
var columnWidth = column.offsetWidth;
var newColumnWidth = columnWidth + delta;
var minWidth = column.style.minWidth || 15;
if (columnWidth + delta > parseInt(minWidth)) {
if (this.columnResizeMode === 'fit') {
var nextColumn = column.nextElementSibling;
while (!nextColumn.offsetParent) {
nextColumn = nextColumn.nextElementSibling;
}
if (nextColumn) {
var nextColumnWidth = nextColumn.offsetWidth - delta;
var nextColumnMinWidth = nextColumn.style.minWidth || 15;
if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {
if (this.scrollable) {
var scrollableView = this.findParentScrollableView(column);
var scrollableBodyTable = this.domHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-body-table');
var scrollableHeaderTable = this.domHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-header-table');
var scrollableFooterTable = this.domHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-footer-table');
var resizeColumnIndex = this.domHandler.index(column);
this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
}
else {
column.style.width = newColumnWidth + 'px';
if (nextColumn) {
nextColumn.style.width = nextColumnWidth + 'px';
}
}
}
}
}
else if (this.columnResizeMode === 'expand') {
if (this.scrollable) {
var scrollableView = this.findParentScrollableView(column);
var scrollableBodyTable = this.domHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-body-table');
var scrollableHeaderTable = this.domHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-header-table');
var scrollableFooterTable = this.domHandler.findSingle(scrollableView, 'table.ui-treetable-scrollable-footer-table');
scrollableBodyTable.style.width = scrollableBodyTable.offsetWidth + delta + 'px';
scrollableHeaderTable.style.width = scrollableHeaderTable.offsetWidth + delta + 'px';
if (scrollableFooterTable) {
scrollableFooterTable.style.width = scrollableHeaderTable.offsetWidth + delta + 'px';
}
var resizeColumnIndex = this.domHandler.index(column);
this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);
this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);
this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);
}
else {
this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';
column.style.width = newColumnWidth + 'px';
var containerWidth = this.tableViewChild.nativeElement.style.width;
this.containerViewChild.nativeElement.style.width = containerWidth + 'px';
}
}
this.onColResize.emit({
element: column,
delta: delta
});
}
this.resizeHelperViewChild.nativeElement.style.display = 'none';
this.domHandler.removeClass(this.containerViewChild.nativeElement, 'ui-unselectable-text');
};
TreeTable.prototype.findParentScrollableView = function (column) {
if (column) {
var parent_1 = column.parentElement;
while (parent_1 && !this.domHandler.hasClass(parent_1, 'ui-treetable-scrollable-view')) {
parent_1 = parent_1.parentElement;
}
return parent_1;
}
else {
return null;
}
};
TreeTable.prototype.resizeColGroup = function (table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {
if (table) {
var colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;
if (colGroup) {
var col = colGroup.children[resizeColumnIndex];
var nextCol = col.nextElementSibling;
col.style.width = newColumnWidth + 'px';
if (nextCol && nextColumnWidth) {
nextCol.style.width = nextColumnWidth + 'px';
}
}
else {
throw "Scrollable tables require a colgroup to support resizable columns";
}
}
};
TreeTable.prototype.onColumnDragStart = function (event, columnElement) {
this.reorderIconWidth = this.domHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);
this.reorderIconHeight = this.domHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);
this.draggedColumn = columnElement;
event.dataTransfer.setData('text', 'b'); // For firefox
};
TreeTable.prototype.onColumnDragEnter = function (event, dropHeader) {
if (this.reorderableColumns && this.draggedColumn && dropHeader) {
event.preventDefault();
var containerOffset = this.domHandler.getOffset(this.containerViewChild.nativeElement);
var dropHeaderOffset = this.domHandler.getOffset(dropHeader);
if (this.draggedColumn != dropHeader) {
var targetLeft = dropHeaderOffset.left - containerOffset.left;
var targetTop = containerOffset.top - dropHeaderOffset.top;
var columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;
this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';
this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';
if (event.pageX > columnCenter) {
this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';
this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';
this.dropPosition = 1;
}
else {
this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';
this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';
this.dropPosition = -1;
}
this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';
this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';
}
else {
event.dataTransfer.dropEffect = 'none';
}
}
};
TreeTable.prototype.onColumnDragLeave = function (event) {
if (this.reorderableColumns && this.draggedColumn) {
event.preventDefault();
this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
}
};
TreeTable.prototype.onColumnDrop = function (event, dropColumn) {
event.preventDefault();
if (this.draggedColumn) {
var dragIndex = this.domHandler.indexWithinGroup(this.draggedColumn, 'ttreorderablecolumn');
var dropIndex = this.domHandler.indexWithinGroup(dropColumn, 'ttreorderablecolumn');
var allowDrop = (dragIndex != dropIndex);
if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {
allowDrop = false;
}
if (allowDrop) {
this.objectUtils.reorderArray(this.columns, dragIndex, dropIndex);
this.onColReorder.emit({
dragIndex: dragIndex,
dropIndex: dropIndex,
columns: this.columns
});
}
this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
this.draggedColumn.draggable = false;
this.draggedColumn = null;
this.dropPosition = null;
}
};
TreeTable.prototype.handleRowClick = function (event) {
var targetNode = event.originalEvent.target.nodeName;
if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (this.domHandler.hasClass(event.originalEvent.target, 'ui-clickable'))) {
return;
}
if (this.selectionMode) {
this.preventSelectionSetterPropagation = true;
var rowNode = event.rowNode;
var selected = this.isSelected(rowNode.node);
var metaSelection = this.rowTouched ? false : this.metaKeySelection;
var dataKeyValue = this.dataKey ? String(this.objectUtils.resolveFieldData(rowNode.node.data, this.dataKey)) : null;
if (metaSelection) {
var metaKey = event.originalEvent.metaKey || event.originalEvent.ctrlKey;
if (selected && metaKey) {
if (this.isSingleSelectionMode()) {
this._selection = null;
this.selectionKeys = {};
this.selectionChange.emit(null);
}
else {
var selectionIndex_1 = this.findIndexInSelection(rowNode.node);
this._selection = this.selection.filter(function (val, i) { return i != selectionIndex_1; });
this.selectionChange.emit(this.selection);
if (dataKeyValue) {
delete this.selectionKeys[dataKeyValue];
}
}
this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });
}
else {
if (this.isSingleSelectionMode()) {
this._selection = rowNode.node;
this.selectionChange.emit(rowNode.node);
if (dataKeyValue) {
this.selectionKeys = {};
this.selectionKeys[dataKeyValue] = 1;
}
}
else if (this.isMultipleSelectionMode()) {
if (metaKey) {
this._selection = this.selection || [];
}
else {
this._selection = [];
this.selectionKeys = {};
}
this._selection = this.selection.concat([rowNode.node]);
this.selectionChange.emit(this.selection);
if (dataKeyValue) {
this.selectionKeys[dataKeyValue] = 1;
}
}
this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });
}
}
else {
if (this.selectionMode === 'single') {
if (selected) {
this._selection = null;
this.selectionKeys = {};
this.selectionChange.emit(this.selection);
this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });
}
else {
this._selection = rowNode.node;
this.selectionChange.emit(this.selection);
this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });
if (dataKeyValue) {
this.selectionKeys = {};
this.selectionKeys[dataKeyValue] = 1;
}
}
}
else if (this.selectionMode === 'multiple') {
if (selected) {
var selectionIndex_2 = this.findIndexInSelection(rowNode.node);
this._selection = this.selection.filter(function (val, i) { return i != selectionIndex_2; });
this.selectionChange.emit(this.selection);
this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });
if (dataKeyValue) {
delete this.selectionKeys[dataKeyValue];
}
}
else {
this._selection = this.selection ? this.selection.concat([rowNode.node]) : [rowNode.node];
this.selectionChange.emit(this.selection);
this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });
if (dataKeyValue) {
this.selectionKeys[dataKeyValue] = 1;
}
}
}
}
this.tableService.onSelectionChange();
}
this.rowTouched = false;
};
TreeTable.prototype.handleRowTouchEnd = function (event) {
this.rowTouched = true;
};
TreeTable.prototype.handleRowRightClick = function (event) {
if (this.contextMenu) {
var node = event.rowNode.node;
if (this.contextMenuSelectionMode === 'separate') {
this.contextMenuSelection = node;
this.contextMenuSelectionChange.emit(node);
this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, node: node });
this.contextMenu.show(event.originalEvent);
this.tableService.onContextMenu(node);
}
else if (this.contextMenuSelectionMode === 'joint') {
this.preventSelectionSetterPropagation = true;
var selected = this.isSelected(node);
var dataKeyValue = this.dataKey ? String(this.objectUtils.resolveFieldData(node.data, this.dataKey)) : null;
if (!selected) {
if (this.isSingleSelectionMode()) {
this.selection = node;
this.selectionChange.emit(node);
}
else if (this.isMultipleSelectionMode()) {
this.selection = [node];
this.selectionChange.emit(this.selection);
}
if (dataKeyValue) {
this.selectionKeys[dataKeyValue] = 1;
}
}
this.contextMenu.show(event.originalEvent);
this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, node: node });
}
}
};
TreeTable.prototype.toggleNodeWithCheckbox = function (event) {
this.preventSelectionSetterPropagation = true;
var node = event.rowNode.node;
var selected = this.isSelected(node);
if (selected) {
this.propagateSelectionDown(node, false);
if (event.rowNode.parent) {
this.propagateSelectionUp(node.parent, false);
}
this.selectionChange.emit(this.selection);
this.onNodeUnselect.emit({ originalEvent: event, node: node });
}
else {
this.propagateSelectionDown(node, true);
if (event.rowNode.parent) {
this.propagateSelectionUp(node.parent, true);
}
this.selectionChange.emit(this.selection);
this.onNodeSelect.emit({ originalEvent: event, node: node });
}
this.tableService.onSelectionChange();
};
TreeTable.prototype.toggleNodesWithCheckbox = function (event, check) {
if (check) {
if (this.value && this.value.length) {
for (var _i = 0, _a = this.value; _i < _a.length; _i++) {
var node = _a[_i];
this.propagateSelectionDown(node, true);
}
}
}
else {
this._selection = [];
this.selectionKeys = {};
}
this.preventSelectionSetterPropagation = true;
this.selectionChange.emit(this._selection);
this.tableService.onSelectionChange();
this.onHeaderCheckboxToggle.emit({ originalEvent: event, checked: check });
};
TreeTable.prototype.propagateSelectionUp = function (node, select) {
if (node.children && node.children.length) {
var selectedChildCount = 0;
var childPartialSelected = false;
var dataKeyValue = this.dataKey ? String(this.objectUtils.resolveFieldData(node.data, this.dataKey)) : null;
for (var _i = 0, _a = node.children; _i < _a.length; _i++) {
var child = _a[_i];
if (this.isSelected(child))
selectedChildCount++;
else if (child.partialSelected)
childPartialSelected = true;
}
if (select && selectedChildCount == node.children.length) {
this._selection = (this.selection || []).concat([node]);
node.partialSelected = false;
if (dataKeyValue) {
this.selectionKeys[dataKeyValue] = 1;
}
}
else {
if (!select) {
var index_1 = this.findIndexInSelection(node);
if (index_1 >= 0) {
this._selection = this.selection.filter(function (val, i) { return i != index_1; });
if (dataKeyValue) {
delete this.selectionKeys[dataKeyValue];
}
}
}
if (childPartialSelected || selectedChildCount > 0 && selectedChildCount != node.children.length)
node.partialSelected = true;
else
node.partialSelected = false;
}
}
var parent = node.parent;
if (parent) {
this.propagateSelectionUp(parent, select);
}
};
TreeTable.prototype.propagateSelectionDown = function (node, select) {
var index = this.findIndexInSelection(node);
var dataKeyValue = this.dataKey ? String(this.objectUtils.resolveFieldData(node.data, this.dataKey)) : null;
if (select && index == -1) {
this._selection = (this.selection || []).concat([node]);
if (dataKeyValue) {
this.selectionKeys[dataKeyValue] = 1;
}
}
else if (!select && index > -1) {
this._selection = this.selection.filter(function (val, i) { return i != index; });
if (dataKeyValue) {
delete this.selectionKeys[dataKeyValue];
}
}
node.partialSelected = false;
if (node.children && node.children.length) {
for (var _i = 0, _a = node.children; _i < _a.length; _i++) {
var child = _a[_i];
this.propagateSelectionDown(child, select);
}
}
};
TreeTable.prototype.isSelected = function (node) {
if (node && this.selection) {
if (this.dataKey) {
return this.selectionKeys[this.objectUtils.resolveFieldData(node.data, this.dataKey)] !== undefined;
}
else {
if (this.selection instanceof Array)
return this.findIndexInSelection(node) > -1;
else
return this.equals(node, this.selection);
}
}
return false;
};
TreeTable.prototype.findIndexInSelection = function (node) {
var index = -1;
if (this.selection && this.selection.length) {
for (var i = 0; i < this.selection.length; i++) {
if (this.equals(node, this.selection[i])) {
index = i;
break;
}
}
}
return index;
};
TreeTable.prototype.isSingleSelectionMode = function () {
return this.selectionMode === 'single';
};
TreeTable.prototype.isMultipleSelectionMode = function () {
return this.selectionMode === 'multiple';
};
TreeTable.prototype.equals = function (node1, node2) {
return this.compareSelectionBy === 'equals' ? (node1 === node2) : this.objectUtils.equals(node1.data, node2.data, this.dataKey);
};
TreeTable.prototype.reset = function () {
this._sortField = null;
this._sortOrder = 1;
this._multiSortMeta = null;
this.tableService.onSort(null);
this.first = 0;
if (this.lazy) {
this.onLazyLoad.emit(this.createLazyLoadMetadata());
}
else {
this.totalRecords = (this._value ? this._value.length : 0);
}
};
TreeTable.prototype.ngOnDestroy = function () {
this.editingCell = null;
this.initialized = null;
};
__decorate([
core_1.Input(),
__metadata("design:type", Array)
], TreeTable.prototype, "columns", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Object)
], TreeTable.prototype, "style", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "styleClass", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "autoLayout", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "lazy", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "paginator", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Number)
], TreeTable.prototype, "rows", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Number)
], TreeTable.prototype, "first", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Number)
], TreeTable.prototype, "totalRecords", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Number)
], TreeTable.prototype, "pageLinks", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Array)
], TreeTable.prototype, "rowsPerPageOptions", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "alwaysShowPaginator", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "paginatorPosition", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Object)
], TreeTable.prototype, "paginatorDropdownAppendTo", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Number)
], TreeTable.prototype, "defaultSortOrder", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "sortMode", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "resetPageOnSort", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "customSort", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "selectionMode", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "selectionChange", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Object)
], TreeTable.prototype, "contextMenuSelection", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "contextMenuSelectionChange", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "contextMenuSelectionMode", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "dataKey", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "metaKeySelection", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "compareSelectionBy", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "rowHover", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "loading", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "loadingIcon", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "scrollable", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "scrollHeight", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "frozenWidth", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Array)
], TreeTable.prototype, "frozenColumns", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "resizableColumns", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", String)
], TreeTable.prototype, "columnResizeMode", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Boolean)
], TreeTable.prototype, "reorderableColumns", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Object)
], TreeTable.prototype, "contextMenu", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Function)
], TreeTable.prototype, "rowTrackBy", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onNodeExpand", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onNodeCollapse", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onPage", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onSort", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onLazyLoad", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "sortFunction", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onColResize", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onColReorder", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onNodeSelect", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onNodeUnselect", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onContextMenuSelect", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onHeaderCheckboxToggle", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onEditInit", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onEditComplete", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], TreeTable.prototype, "onEditCancel", void 0);
__decorate([
core_1.ViewChild('container'),
__metadata("design:type", core_1.ElementRef)
], TreeTable.prototype, "containerViewChild", void 0);
__decorate(