UNPKG

@gooddata/react-components

Version:

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

241 lines • 11.9 kB
"use strict"; 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