UNPKG

@gooddata/react-components

Version:

GoodData.UI - A powerful JavaScript library for building analytical applications

109 lines 4.72 kB
"use strict"; 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