var ngAggregate = function (aggEntity, rowFactory, rowHeight) {
var self = this;
self.rowIndex = 0;
self.offsetTop = self.rowIndex * rowHeight;
self.entity = aggEntity;
self.label = aggEntity.gLabel;
self.field = aggEntity.gField;
self.depth = aggEntity.gDepth;
self.parent = aggEntity.parent;
self.children = aggEntity.children;
self.aggChildren = aggEntity.aggChildren;
self.aggIndex = aggEntity.aggIndex;
self.collapsed = true;
self.isAggRow = true;
self.offsetleft = aggEntity.gDepth * 25;
self.aggLabelFilter = aggEntity.aggLabelFilter;
self.toggleExpand = function() {
self.collapsed = self.collapsed ? false : true;
if (self.orig) {
self.orig.collapsed = self.collapsed;
}
self.notifyChildren();
};
self.setExpand = function(state) {
self.collapsed = state;
self.notifyChildren();
};
self.notifyChildren = function () {
var longest = Math.max(rowFactory.aggCache.length, self.children.length);
for (var i = 0; i < longest; i++) {
if (self.aggChildren[i]) {
self.aggChildren[i].entity[NG_HIDDEN] = self.collapsed;
if (self.collapsed) {
self.aggChildren[i].setExpand(self.collapsed);
}
}
if (self.children[i]) {
self.children[i][NG_HIDDEN] = self.collapsed;
}
if (i > self.aggIndex && rowFactory.aggCache[i]) {
var agg = rowFactory.aggCache[i];
var offset = (30 * self.children.length);
agg.offsetTop = self.collapsed ? agg.offsetTop - offset : agg.offsetTop + offset;
}
};
rowFactory.renderedChange();
};
self.aggClass = function() {
return self.collapsed ? "ngAggArrowCollapsed" : "ngAggArrowExpanded";
};
self.totalChildren = function() {
if (self.aggChildren.length > 0) {
var i = 0;
var recurse = function(cur) {
if (cur.aggChildren.length > 0) {
angular.forEach(cur.aggChildren, function(a) {
recurse(a);
});
} else {
i += cur.children.length;
}
};
recurse(self);
return i;
} else {
return self.children.length;
}
};
self.copy = function () {
var ret = new ngAggregate(self.entity, rowFactory, rowHeight);
ret.orig = self;
return ret;
};
};