UNPKG

@gooddata/react-components

Version:

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

107 lines 5.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var invariant = require("invariant"); var uniq = require("lodash/uniq"); var intersection = require("lodash/intersection"); var isEqual = require("lodash/isEqual"); var sortBy = require("lodash/sortBy"); var agGridConst_1 = require("./agGridConst"); var utils_1 = require("../../visualizations/table/totals/utils"); function getTotalsForMeasureAndType(totals, type, measureLocalIdentifier) { return totals.filter(function (total) { return total.measureIdentifier === measureLocalIdentifier && total.type === type; }); } function getAttributeIntersection(totals, type, measureLocalIdentifiers) { var attributeGroups = measureLocalIdentifiers.map(function (measure) { var filteredTotals = getTotalsForMeasureAndType(totals, type, measure); return filteredTotals.map(function (total) { return total.attributeIdentifier; }); }); return intersection.apply(null, attributeGroups); } function getUniqueMeasures(totals, type) { var totalsOfType = totals.filter(function (total) { return total.type === type; }); return uniq(totalsOfType.map(function (total) { return total.measureIdentifier; })); } function areMeasuresSame(measureLocalIdentifiers1, measureLocalIdentifiers2) { var sameMeasureLocalIdentifiers = intersection(measureLocalIdentifiers1, measureLocalIdentifiers2); return sameMeasureLocalIdentifiers.length === measureLocalIdentifiers2.length; } function getTotalsForAttributeHeader(totals, measureLocalIdentifiers) { return utils_1.AVAILABLE_TOTALS.reduce(function (columnTotals, type) { var uniqueMeasureLocalIdentifiers = getUniqueMeasures(totals, type); if (areMeasuresSame(uniqueMeasureLocalIdentifiers, measureLocalIdentifiers)) { var attributeLocalIdentifiers = getAttributeIntersection(totals, type, uniqueMeasureLocalIdentifiers); if (attributeLocalIdentifiers.length) { columnTotals.push({ type: type, attributes: attributeLocalIdentifiers, }); } } return columnTotals; }, []); } function getTotalsForMeasureHeader(totals, measureLocalIdentifier) { return totals.reduce(function (turnedOnAttributes, total) { if (total.measureIdentifier === measureLocalIdentifier) { var totalHeaderType = turnedOnAttributes.find(function (turned) { return turned.type === total.type; }); if (totalHeaderType === undefined) { turnedOnAttributes.push({ type: total.type, attributes: [total.attributeIdentifier], }); } else { totalHeaderType.attributes.push(total.attributeIdentifier); } } return turnedOnAttributes; }, []); } function getHeaderMeasureLocalIdentifiers(measureGroupHeaderItems, lastFieldType, lastFieldId) { if (lastFieldType === agGridConst_1.FIELD_TYPE_MEASURE) { if (measureGroupHeaderItems.length === 0 || !measureGroupHeaderItems[lastFieldId]) { invariant(false, "Measure header with index " + lastFieldId + " was not found"); } var localIdentifier = measureGroupHeaderItems[lastFieldId].measureHeaderItem.localIdentifier; return [localIdentifier]; } else if (lastFieldType === agGridConst_1.FIELD_TYPE_ATTRIBUTE) { return measureGroupHeaderItems.map(function (item) { return item.measureHeaderItem.localIdentifier; }); } invariant(false, "Unknown field type '" + lastFieldType + "' provided"); } function isTotalEnabledForAttribute(attributeLocalIdentifier, totalType, columnTotals) { return columnTotals.some(function (total) { return total.type === totalType && total.attributes.includes(attributeLocalIdentifier); }); } function includeTotals(columnTotals, columnTotalsChanged) { var columnTotalsChangedUnique = columnTotalsChanged.filter(function (totalChanged) { return !columnTotals.some(function (total) { return isEqual(total, totalChanged); }); }); return columnTotals.concat(columnTotalsChangedUnique); } function excludeTotals(columnTotals, columnTotalsChanged) { return columnTotals.filter(function (total) { return !columnTotalsChanged.find(function (totalChanged) { return isEqual(totalChanged, total); }); }); } function getUpdatedColumnTotals(columnTotals, menuAggregationClickConfig) { var type = menuAggregationClickConfig.type, measureIdentifiers = menuAggregationClickConfig.measureIdentifiers, attributeIdentifier = menuAggregationClickConfig.attributeIdentifier, include = menuAggregationClickConfig.include; var columnTotalsChanged = measureIdentifiers.map(function (measureIdentifier) { return ({ type: type, measureIdentifier: measureIdentifier, attributeIdentifier: attributeIdentifier, }); }); var updatedColumnTotals = include ? includeTotals(columnTotals, columnTotalsChanged) : excludeTotals(columnTotals, columnTotalsChanged); return sortBy(updatedColumnTotals, function (total) { return utils_1.AVAILABLE_TOTALS.findIndex(function (rankedItem) { return rankedItem === total.type; }); }); } exports.getUpdatedColumnTotals = getUpdatedColumnTotals; exports.default = { getTotalsForAttributeHeader: getTotalsForAttributeHeader, getTotalsForMeasureHeader: getTotalsForMeasureHeader, getHeaderMeasureLocalIdentifiers: getHeaderMeasureLocalIdentifiers, isTotalEnabledForAttribute: isTotalEnabledForAttribute, getUpdatedColumnTotals: getUpdatedColumnTotals, }; //# sourceMappingURL=aggregationsMenuHelper.js.map