UNPKG

@visactor/vtable

Version:

canvas table width high performance

86 lines (79 loc) 7.66 kB
"use strict"; function updateResizeColumn(xInTable, yInTable, state) { xInTable = Math.ceil(xInTable), yInTable = Math.ceil(yInTable); let detaX = state.columnResize.isRightFrozen ? state.columnResize.x - xInTable : xInTable - state.columnResize.x; if (Math.abs(detaX) < 1) return; const widthCache = state.table.getColWidth(state.columnResize.col); let width = widthCache; width += detaX; const minWidth = state.table.getMinColWidth(state.columnResize.col), maxWidth = state.table.getMaxColWidth(state.columnResize.col); if (width < minWidth || width > maxWidth) { if (widthCache === minWidth || widthCache === maxWidth) return; detaX = widthCache - minWidth > maxWidth - widthCache ? maxWidth - widthCache : minWidth - widthCache; } let afterSize = state.table.getColWidth(state.columnResize.col) + detaX; if (afterSize < state.table.internalProps.limitMinWidth && (afterSize = state.table.internalProps.limitMinWidth, detaX = afterSize - state.table.getColWidth(state.columnResize.col)), "adaptive" === state.table.widthMode && state.columnResize.col < state.table.colCount - 1) { const rightColWidthCache = state.table.getColWidth(state.columnResize.col + 1), rightColMinWidth = state.table.getMinColWidth(state.columnResize.col + 1), rightColMaxWidth = state.table.getMaxColWidth(state.columnResize.col + 1); let rightColWidth = rightColWidthCache; if (rightColWidth -= detaX, rightColWidth < rightColMinWidth || rightColWidth > rightColMaxWidth) { if (rightColWidthCache === rightColMinWidth || rightColWidthCache === rightColMaxWidth) return; detaX = rightColWidthCache - rightColMinWidth > rightColMaxWidth - rightColWidthCache ? rightColMaxWidth - rightColWidthCache : rightColMinWidth - rightColWidthCache; } rightColWidth - detaX < state.table.internalProps.limitMinWidth && (detaX = rightColWidth - state.table.internalProps.limitMinWidth); } detaX = Math.ceil(detaX), state.columnResize.col < state.table.rowHeaderLevelCount || state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount ? updateResizeColForColumn(detaX, state) : "indicator" === state.table.internalProps.columnResizeType ? updateResizeColForIndicator(detaX, state) : "indicatorGroup" === state.table.internalProps.columnResizeType ? updateResizeColForIndicatorGroup(detaX, state) : "all" === state.table.internalProps.columnResizeType ? updateResizeColForAll(detaX, state) : updateResizeColForColumn(detaX, state), state.columnResize.x = xInTable, state.table.scenegraph.component.updateResizeCol(state.columnResize.col, yInTable, state.columnResize.isRightFrozen), state.columnResize.col < state.table.frozenColCount && !state.table.isPivotTable() && !state.table.transpose ? state.table.scenegraph.component.setFrozenColumnShadow(state.table.frozenColCount - 1, state.columnResize.isRightFrozen) : state.table.options.frozenColCount && state.table.scenegraph.component.setFrozenColumnShadow(state.table.frozenColCount - 1), (state.columnResize.col >= state.table.colCount - state.table.rightFrozenColCount && !state.table.isPivotTable() && !state.table.transpose || state.table.options.rightFrozenColCount) && state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount), state.table.scenegraph.updateNextFrame(); } function updateResizeColForColumn(detaX, state) { "adaptive" === state.table.widthMode && state.columnResize.col < state.table.colCount - 1 ? (state.table.scenegraph.updateColWidth(state.columnResize.col, detaX), state.table.scenegraph.updateColWidth(state.columnResize.col + 1, -detaX), state.table.internalProps._widthResizedColMap.add(state.columnResize.col), state.table.internalProps._widthResizedColMap.add(state.columnResize.col + 1)) : (state.table.scenegraph.updateColWidth(state.columnResize.col, detaX), state.table.internalProps._widthResizedColMap.add(state.columnResize.col)); } function updateResizeColForAll(detaX, state) { const layout = state.table.internalProps.layoutMap; for (let col = state.table.frozenColCount; col < state.table.colCount - state.table.rightFrozenColCount; col++) { if (!(state.table.internalProps.transpose || state.table.isPivotTable() && !layout.indicatorsAsCol)) { const cellDefine = layout.getBody(col, state.table.columnHeaderLevelCount); if (null == cellDefine ? void 0 : cellDefine.disableColumnResize) continue; } state.table.scenegraph.updateColWidth(col, detaX), state.table.internalProps._widthResizedColMap.add(col); } } function updateResizeColForIndicator(detaX, state) { const layout = state.table.internalProps.layoutMap; let resizeIndicatorKey, resizeDimensionKey, resizeDimensionValue; if (layout.indicatorsAsCol) resizeIndicatorKey = layout.getIndicatorKey(state.columnResize.col, state.table.columnHeaderLevelCount); else { const headerPaths = layout.getCellHeaderPaths(state.columnResize.col, state.table.columnHeaderLevelCount - 1), headerPath = headerPaths.colHeaderPaths[headerPaths.colHeaderPaths.length - 1]; resizeDimensionKey = headerPath.dimensionKey, resizeDimensionValue = headerPath.value; } for (let col = state.table.rowHeaderLevelCount; col < state.table.colCount - state.table.rightFrozenColCount; col++) { const indicatorKey = layout.getIndicatorKey(col, state.table.columnHeaderLevelCount); if (layout.indicatorsAsCol && indicatorKey === resizeIndicatorKey) state.table.scenegraph.updateColWidth(col, detaX), state.table.internalProps._widthResizedColMap.add(col); else if (!layout.indicatorsAsCol) { const headerPaths = layout.getCellHeaderPaths(col, state.table.columnHeaderLevelCount - 1), headerPath = null == headerPaths ? void 0 : headerPaths.colHeaderPaths[headerPaths.colHeaderPaths.length - 1]; headerPath && resizeDimensionKey === headerPath.dimensionKey && resizeDimensionValue === headerPath.value && (state.table.scenegraph.updateColWidth(col, detaX), state.table.internalProps._widthResizedColMap.add(col)); } } } function updateResizeColForIndicatorGroup(detaX, state) { const layout = state.table.internalProps.layoutMap, headerPaths = layout.getCellHeaderPaths(state.columnResize.col, state.table.columnHeaderLevelCount), node = layout.getHeadNodeByRowOrColDimensions(headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length - 1)), startCol = node.startInTotal + state.table.frozenColCount, endCol = node.startInTotal + state.table.frozenColCount + node.size - 1, totalColWidth = state.table.getColsWidth(startCol, endCol), moveX = detaX; for (let col = startCol; col <= endCol; col++) { if (!(state.table.internalProps.transpose || state.table.isPivotTable() && !layout.indicatorsAsCol)) { const cellDefine = layout.getBody(col, state.table.columnHeaderLevelCount); if (null == cellDefine ? void 0 : cellDefine.disableColumnResize) continue; } let deltaWidth = state.table.getColWidth(col) / totalColWidth * moveX; deltaWidth > 0 && deltaWidth < .5 ? deltaWidth = .5 : deltaWidth < 0 && deltaWidth >= -.5 && (deltaWidth = -.5), state.table.scenegraph.updateColWidth(col, deltaWidth), state.table.internalProps._widthResizedColMap.add(col); } } Object.defineProperty(exports, "__esModule", { value: !0 }), exports.updateResizeColumn = void 0, exports.updateResizeColumn = updateResizeColumn; //# sourceMappingURL=update-resize-column.js.map