handsontable
Version:
Handsontable is a JavaScript Data Grid available for React, Angular and Vue.
87 lines (83 loc) • 3.44 kB
JavaScript
import "core-js/modules/es.error.cause.js";
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
* Column utils class contains all necessary information about sizes of the columns.
*
* @class {ColumnUtils}
*/
export default class ColumnUtils {
/**
* @param {TableDao} dataAccessObject The table Data Access Object.
* @param {Settings} wtSettings The walkontable settings.
*/
constructor(dataAccessObject, wtSettings) {
/**
* @type {TableDao}
*/
_defineProperty(this, "dataAccessObject", void 0);
/**
* @type {Settings}
*/
_defineProperty(this, "wtSettings", void 0);
/**
* @type {Map<number, number>}
*/
_defineProperty(this, "headerWidths", new Map());
this.dataAccessObject = dataAccessObject;
this.wtSettings = wtSettings;
}
/**
* Returns column width based on passed source index.
*
* @param {number} sourceIndex Column source index.
* @returns {number}
*/
getWidth(sourceIndex) {
const width = this.wtSettings.getSetting('columnWidth', sourceIndex) || this.wtSettings.getSetting('defaultColumnWidth');
return width;
}
/**
* Returns column header height based on passed header level.
*
* @param {number} level Column header level.
* @returns {number}
*/
getHeaderHeight(level) {
let height = this.wtSettings.getSetting('stylesHandler').getDefaultRowHeight();
const oversizedHeight = this.dataAccessObject.wtViewport.oversizedColumnHeaders[level];
if (oversizedHeight !== undefined) {
height = height ? Math.max(height, oversizedHeight) : oversizedHeight;
}
return height;
}
/**
* Returns column header width based on passed source index.
*
* @param {number} sourceIndex Column source index.
* @returns {number}
*/
getHeaderWidth(sourceIndex) {
return this.headerWidths.get(this.dataAccessObject.wtTable.columnFilter.sourceToRendered(sourceIndex));
}
/**
* Calculates column header widths that can be retrieved from the cache.
*/
calculateWidths() {
const {
wtSettings
} = this;
let rowHeaderWidthSetting = wtSettings.getSetting('rowHeaderWidth');
rowHeaderWidthSetting = wtSettings.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);
if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== undefined) {
const rowHeadersCount = wtSettings.getSetting('rowHeaders').length;
const defaultColumnWidth = wtSettings.getSetting('defaultColumnWidth');
for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {
let width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[visibleColumnIndex] : rowHeaderWidthSetting;
width = width === null || width === undefined ? defaultColumnWidth : width;
this.headerWidths.set(visibleColumnIndex, width);
}
}
}
}