@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
241 lines • 11.9 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2007-2020 GoodData Corporation
var cloneDeep = require("lodash/cloneDeep");
var agGridUtils_1 = require("./agGridUtils");
var agGridConst_1 = require("./agGridConst");
var agGridHeaders_1 = require("./agGridHeaders");
var invariant = require("invariant");
var PivotTable_1 = require("../../../interfaces/PivotTable");
exports.MIN_WIDTH = 60;
exports.AUTO_SIZED_MAX_WIDTH = 500;
exports.MANUALLY_SIZED_MAX_WIDTH = 2000;
/*
* All code related to column resizing the ag-grid backed Pivot Table is concentrated here
*/
exports.convertColumnWidthsToMap = function (columnWidths, executionResponse, widthValidator) {
if (widthValidator === void 0) { widthValidator = exports.defaultWidthValidator; }
if (!columnWidths || !executionResponse) {
return {};
}
var dimensions = executionResponse.dimensions;
var columnWidthsMap = {};
var _a = agGridHeaders_1.assortDimensionHeaders(dimensions), attributeHeaders = _a.attributeHeaders, measureHeaderItems = _a.measureHeaderItems;
columnWidths.forEach(function (columnWidth) {
if (PivotTable_1.isAttributeColumnWidthItem(columnWidth)) {
var _a = getAttributeColumnWidthItemFieldAndWidth(columnWidth, attributeHeaders), field = _a[0], width = _a[1];
columnWidthsMap[field] = {
width: widthValidator(width),
};
}
if (PivotTable_1.isMeasureColumnWidthItem(columnWidth)) {
var _b = getMeasureColumnWidthItemFieldAndWidth(columnWidth, measureHeaderItems), field = _b[0], width = _b[1];
var locator = columnWidth.measureColumnWidthItem.locators.filter(PivotTable_1.isMeasureLocatorItem)[0];
var measureIdentifier = locator ? locator.measureLocatorItem.measureIdentifier : undefined;
columnWidthsMap[field] = {
width: widthValidator(width),
measureIdentifier: measureIdentifier,
};
}
});
return columnWidthsMap;
};
var getAttributeColumnWidthItemFieldAndWidth = function (columnWidthItem, attributeHeaders) {
var localIdentifier = columnWidthItem.attributeColumnWidthItem.attributeIdentifier;
var attributeHeader = attributeHeaders.find(function (header) { return header.attributeHeader.localIdentifier === localIdentifier; });
invariant(attributeHeader, "Could not find attributeHeader with localIdentifier \"" + localIdentifier + "\"");
var field = agGridHeaders_1.identifyResponseHeader(attributeHeader);
return [field, columnWidthItem.attributeColumnWidthItem.width];
};
var getMeasureColumnWidthItemFieldAndWidth = function (columnWidthItem, measureHeaderItems) {
var keys = [];
columnWidthItem.measureColumnWidthItem.locators.forEach(function (locator) {
if (PivotTable_1.isMeasureLocatorItem(locator)) {
var measureColumnWidthHeaderIndex = measureHeaderItems.findIndex(function (measureHeaderItem) {
return measureHeaderItem.measureHeaderItem.localIdentifier ===
locator.measureLocatorItem.measureIdentifier;
});
invariant(measureColumnWidthHeaderIndex !== -1, "Could not find measureHeader with localIdentifier \"" + locator.measureLocatorItem.measureIdentifier + "\"");
keys.push("m" + agGridConst_1.ID_SEPARATOR + measureColumnWidthHeaderIndex);
}
else {
var key = "a" + agGridConst_1.ID_SEPARATOR + agGridUtils_1.getIdsFromUri(locator.attributeLocatorItem.element).join(agGridConst_1.ID_SEPARATOR);
keys.push(key);
}
});
var field = keys.join(agGridConst_1.FIELD_SEPARATOR); // check if keys is empty than *
return [field, columnWidthItem.measureColumnWidthItem.width];
};
var getSizeItemByColId = function (execution, colId, width) {
var dimensions = execution.executionResponse.dimensions;
var fields = agGridUtils_1.getParsedFields(colId);
var lastFieldType = agGridUtils_1.getLastFieldType(fields);
var lastFieldId = agGridUtils_1.getLastFieldId(fields);
var searchDimensionIndex = lastFieldType === agGridConst_1.FIELD_TYPE_MEASURE ? 1 : 0;
var _a = agGridHeaders_1.assortDimensionHeaders([
dimensions[searchDimensionIndex],
]), attributeHeaders = _a.attributeHeaders, measureHeaderItems = _a.measureHeaderItems;
if (lastFieldType === agGridConst_1.FIELD_TYPE_ATTRIBUTE) {
for (var _i = 0, attributeHeaders_1 = attributeHeaders; _i < attributeHeaders_1.length; _i++) {
var header = attributeHeaders_1[_i];
if (agGridUtils_1.getIdsFromUri(header.attributeHeader.uri)[0] === lastFieldId) {
var attributeIdentifier = header.attributeHeader.localIdentifier;
if (PivotTable_1.isAbsoluteColumnWidth(width)) {
return {
attributeColumnWidthItem: {
width: width,
attributeIdentifier: attributeIdentifier,
},
};
}
else {
invariant(false, "width value for attributeColumnWidthItem has to be number " + colId);
}
}
}
// check only column attribute without measure
var columnAttributeHeaders = agGridHeaders_1.assortDimensionHeaders([dimensions[1]]).attributeHeaders;
var EMPTY_MEASURE_FIELD = [];
var attributeLocators = agGridUtils_1.getAttributeLocators(fields.concat([EMPTY_MEASURE_FIELD]), columnAttributeHeaders);
if (attributeLocators) {
return {
measureColumnWidthItem: {
width: width,
locators: attributeLocators.slice(),
},
};
}
invariant(false, "could not find attribute header matching " + colId);
}
else if (lastFieldType === agGridConst_1.FIELD_TYPE_MEASURE) {
var headerItem = measureHeaderItems[parseInt(lastFieldId, 10)];
var attributeLocators = agGridUtils_1.getAttributeLocators(fields, attributeHeaders);
return {
measureColumnWidthItem: {
width: width,
locators: attributeLocators.concat([
{
measureLocatorItem: {
measureIdentifier: headerItem.measureHeaderItem.localIdentifier,
},
},
]),
},
};
}
invariant(false, "could not find header matching " + colId);
};
exports.getColumnWidthsFromMap = function (map, execution) {
return Object.keys(map).map(function (colId) {
var width = map[colId].width;
var sizeItem = getSizeItemByColId(execution, colId, width);
invariant(sizeItem, "unable to find size item by filed " + colId);
return sizeItem;
});
};
exports.getWeakColumnWidthsFromMap = function (map) {
return Object.keys(map).map(function (measureIdentifier) {
return map[measureIdentifier];
});
};
exports.defaultWidthValidator = function (width) {
if (PivotTable_1.isAbsoluteColumnWidth(width)) {
return __assign({}, width, { value: Math.min(Math.max(width.value, exports.MIN_WIDTH), exports.MANUALLY_SIZED_MAX_WIDTH) });
}
return width;
};
exports.enrichColumnDefinitionsWithWidths = function (columnDefinitions, resizedColumnsStore, autoResizedColumns, defaultColumnWidth, isGrowToFitEnabled, growToFittedColumns) {
if (growToFittedColumns === void 0) { growToFittedColumns = {}; }
var result = cloneDeep(columnDefinitions);
var leaves = agGridUtils_1.getTreeLeaves(result);
leaves.forEach(function (columnDefinition) {
if (columnDefinition) {
var columnId = agGridUtils_1.getColumnIdentifierFromDef(columnDefinition);
var manualSize = resizedColumnsStore.getManuallyResizedColumn(columnDefinition);
var autoResizeSize = autoResizedColumns[columnId];
columnDefinition.maxWidth = exports.MANUALLY_SIZED_MAX_WIDTH;
if (manualSize) {
columnDefinition.width = manualSize.width;
columnDefinition.suppressSizeToFit = !manualSize.allowGrowToFit;
}
else {
columnDefinition.suppressSizeToFit = false;
columnDefinition.width = autoResizeSize ? autoResizeSize.width : defaultColumnWidth;
if (isGrowToFitEnabled) {
var growToFittedColumn = growToFittedColumns[agGridUtils_1.getColumnIdentifierFromDef(columnDefinition)];
if (growToFittedColumn) {
columnDefinition.width = growToFittedColumn.width;
if (growToFittedColumn.width > exports.MANUALLY_SIZED_MAX_WIDTH) {
columnDefinition.maxWidth = undefined;
}
}
}
}
}
});
return result;
};
exports.syncSuppressSizeToFitOnColumns = function (resizedColumnsStore, columnApi) {
if (!columnApi) {
return;
}
var columns = columnApi.getAllColumns();
columns.forEach(function (col) {
var resizedColumn = resizedColumnsStore.getManuallyResizedColumn(col);
resizedColumn
? (col.getColDef().suppressSizeToFit = !resizedColumn.allowGrowToFit)
: (col.getColDef().suppressSizeToFit = false);
});
};
exports.isColumnAutoResized = function (autoResizedColumns, resizedColumnId) {
return resizedColumnId && autoResizedColumns[resizedColumnId];
};
exports.resetColumnsWidthToDefault = function (columnApi, columns, resizedColumnsStore, autoResizedColumns, defaultWidth) {
columns.forEach(function (col) {
var id = agGridUtils_1.getColumnIdentifier(col);
if (resizedColumnsStore.isColumnManuallyResized(col)) {
var manuallyResizedColumn = resizedColumnsStore.getManuallyResizedColumn(col);
columnApi.setColumnWidth(col, manuallyResizedColumn.width);
}
else if (exports.isColumnAutoResized(autoResizedColumns, id)) {
columnApi.setColumnWidth(col, autoResizedColumns[id].width);
}
else {
columnApi.setColumnWidth(col, defaultWidth);
}
});
};
exports.resizeAllMeasuresColumns = function (columnApi, resizedColumnsStore, column) {
var columnWidth = column.getActualWidth();
var allColumns = columnApi.getAllColumns();
allColumns.forEach(function (col) {
if (agGridUtils_1.isMeasureColumn(col)) {
columnApi.setColumnWidth(col, columnWidth);
}
});
resizedColumnsStore.addAllMeasureColumn(columnWidth, allColumns);
};
exports.resizeWeakMeasureColumns = function (columnApi, resizedColumnsStore, column) {
var allColumns = columnApi.getAllColumns();
resizedColumnsStore.addWeekMeasureColumn(column);
allColumns.forEach(function (col) {
var weakColumnWidth = resizedColumnsStore.getMatchedWeakMeasuresColumnWidth(col);
if (agGridUtils_1.isMeasureColumn(col) && weakColumnWidth) {
columnApi.setColumnWidth(col, weakColumnWidth.measureColumnWidthItem.width.value);
col.getColDef().suppressSizeToFit = true;
}
});
};
exports.getAllowGrowToFitProp = function (allowGrowToFit) { return (allowGrowToFit ? { allowGrowToFit: allowGrowToFit } : {}); };
//# sourceMappingURL=agGridColumnSizing.js.map