@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
109 lines • 4.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2007-2018 GoodData Corporation
var max = require("lodash/max");
var MappingHeader_1 = require("../../../interfaces/MappingHeader");
var DefaultGroupingProvider = /** @class */ (function () {
function DefaultGroupingProvider() {
}
// tslint:disable-next-line:no-empty
DefaultGroupingProvider.prototype.reset = function () { };
DefaultGroupingProvider.prototype.isGroupBoundary = function (_rowIndex) {
return false;
};
DefaultGroupingProvider.prototype.isColumnWithGrouping = function (_columnId) {
return false;
};
// tslint:disable-next-line:no-empty
DefaultGroupingProvider.prototype.processPage = function (_pageRows, _rowOffset, _columnIds) { };
DefaultGroupingProvider.prototype.isRepeatedValue = function (_columnId, _rowIndex) {
return false;
};
return DefaultGroupingProvider;
}());
var AttributeGroupingProvider = /** @class */ (function () {
function AttributeGroupingProvider() {
this.reset();
}
AttributeGroupingProvider.prototype.reset = function () {
this.itemUris = {};
this.itemRepetitions = {};
this.repetitionsCounts = [];
this.maxRepetitions = 0;
};
AttributeGroupingProvider.prototype.isRepeatedValue = function (columnId, rowIndex) {
if (this.itemRepetitions[columnId]) {
return this.itemRepetitions[columnId][rowIndex] === true;
}
return false;
};
AttributeGroupingProvider.prototype.isGroupBoundary = function (rowIndex) {
return (!!this.repetitionsCounts &&
(this.repetitionsCounts[rowIndex] === undefined ||
this.repetitionsCounts[rowIndex] < this.maxRepetitions));
};
AttributeGroupingProvider.prototype.isColumnWithGrouping = function (columnId) {
return Object.keys(this.itemRepetitions).indexOf(columnId) < this.maxRepetitions;
};
AttributeGroupingProvider.prototype.processPage = function (pageRows, rowOffset, columnIds) {
var _this = this;
columnIds.forEach(function (columnId) {
if (!_this.itemUris[columnId]) {
_this.itemUris[columnId] = [];
}
pageRows.forEach(function (row, rowIndex) {
var headerItem = row.headerItemMap[columnId];
if (MappingHeader_1.isMappingHeaderAttributeItem(headerItem)) {
var attributeItemUri = headerItem.attributeHeaderItem.uri;
_this.itemUris[columnId][rowIndex + rowOffset] = attributeItemUri;
}
});
});
this.update();
};
AttributeGroupingProvider.prototype.update = function () {
var _this = this;
this.repetitionsCounts = null;
this.maxRepetitions = 0;
var previousColumnId = null;
Object.keys(this.itemUris).forEach(function (columnId) {
var rowCount = _this.itemUris[columnId].length;
_this.itemRepetitions[columnId] = Array(rowCount).fill(false);
if (_this.repetitionsCounts === null) {
_this.repetitionsCounts = Array(rowCount).fill(0);
}
_this.updateAttributeColumn(_this.itemUris[columnId], _this.itemRepetitions[columnId], previousColumnId !== null ? _this.itemRepetitions[previousColumnId] : null);
previousColumnId = columnId;
});
this.maxRepetitions = max(this.repetitionsCounts);
};
AttributeGroupingProvider.prototype.updateAttributeColumn = function (itemUris, itemRepetitions, previousAttributeItemRepetitions) {
var _this = this;
var previousItemUri = null;
itemUris.forEach(function (itemUri, rowIndex) {
var repeatedItem = previousItemUri === itemUri;
if (previousAttributeItemRepetitions !== null) {
repeatedItem = repeatedItem && previousAttributeItemRepetitions[rowIndex];
}
if (repeatedItem) {
itemRepetitions[rowIndex] = true;
_this.repetitionsCounts[rowIndex] += 1;
}
previousItemUri = itemUri;
});
};
return AttributeGroupingProvider;
}());
var GroupingProviderFactory = /** @class */ (function () {
function GroupingProviderFactory() {
}
GroupingProviderFactory.createProvider = function (groupRows) {
if (groupRows) {
return new AttributeGroupingProvider();
}
return new DefaultGroupingProvider();
};
return GroupingProviderFactory;
}());
exports.GroupingProviderFactory = GroupingProviderFactory;
//# sourceMappingURL=GroupingProvider.js.map