@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
107 lines • 5.7 kB
JavaScript
;
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