UNPKG

vxe-table-select-area

Version:

一个基于 vxe-table 的可区域选中复制、粘贴的组件

1,385 lines (1,330 loc) 47.9 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.cancelColumnFixed = cancelColumnFixed; exports.cellAutofill = cellAutofill; exports.clsName = clsName; exports.getBodyContextmenuOptionCollection = getBodyContextmenuOptionCollection; exports.getColKeysByFixedType = getColKeysByFixedType; exports.getColKeysByFixedTypeWithinColKeys = getColKeysByFixedTypeWithinColKeys; exports.getColKeysByHeaderColumn = getColKeysByHeaderColumn; exports.getColKeysByRangeColKeys = getColKeysByRangeColKeys; exports.getColumnByColkey = getColumnByColkey; exports.getDomResizeObserverCompKey = getDomResizeObserverCompKey; exports.getFixedTotalWidthByColumnKey = getFixedTotalWidthByColumnKey; exports.getHeaderContextmenuOptionCollection = getHeaderContextmenuOptionCollection; exports.getLeftmostColKey = getLeftmostColKey; exports.getNextColKey = getNextColKey; exports.getNotFixedTotalWidthByColumnKey = getNotFixedTotalWidthByColumnKey; exports.getPreviewColKey = getPreviewColKey; exports.getRightmostColKey = getRightmostColKey; exports.getRowKey = getRowKey; exports.getRowKeysByRangeRowKeys = getRowKeysByRangeRowKeys; exports.getSelectionRangeData = getSelectionRangeData; exports.getSelectionRangeIndexes = getSelectionRangeIndexes; exports.getSelectionRangeKeys = getSelectionRangeKeys; exports.getTotalWidthByColKeys = getTotalWidthByColKeys; exports.initGroupColumns = initGroupColumns; exports.isCellInSelectionRange = isCellInSelectionRange; exports.isClearSelectionByBodyCellRightClick = isClearSelectionByBodyCellRightClick; exports.isContextmenuPanelClicked = isContextmenuPanelClicked; exports.isExistGivenFixedColKey = isExistGivenFixedColKey; exports.isExistNotFixedColKey = isExistNotFixedColKey; exports.isLastColumnByColKey = isLastColumnByColKey; exports.isLastRowByRowKey = isLastRowByRowKey; exports.isOperationColumn = isOperationColumn; exports.recursiveRemoveColumnByKey = recursiveRemoveColumnByKey; exports.setBodyContextmenuOptions = setBodyContextmenuOptions; exports.setColumnFixed = setColumnFixed; exports.setHeaderContextmenuOptions = setHeaderContextmenuOptions; var _constant = require("./constant"); var _constant2 = require("../utils/constant"); var _index = require("../utils/index"); function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure " + obj); } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } /* eslint-disable brace-style */ // import { getRandomId } from "../../../src/utils/random"; /** * @clsName * @desc get class name * @param {string} cls - class */ function clsName(cls) { return _constant.PREFIX_CLS + cls; } /** * @getRowKey * @desc get row key * @param {Object} rowData - rowData * @param {string} rowKeyFieldName - row key field name */ function getRowKey(rowData, rowKeyFieldName) { var result = null; if (rowData && rowKeyFieldName) { result = rowData[rowKeyFieldName]; } return result; } /** * @getColumnByColkey * @desc get column by col key * @param {string} colKey - column key */ function getColumnByColkey(colKey, colgroups) { if (colKey) { return colgroups.find(function (x) { return x.key === colKey; }); } return null; } /** * @isLastColumnByColKey * @desc is last column by column key * @param {string} colKey - column key */ function isLastColumnByColKey(colKey, colgroups) { if (!(0, _index.isEmptyValue)(colKey) && !(0, _index.isEmptyArray)(colgroups)) { return colgroups[colgroups.length - 1].key === colKey; } return false; } /** * @isOperationColumn * @desc is operation column * @param {string} colKey - column key * @param {arrat<object>} colgroups - column key */ function isOperationColumn(colKey, colgroups) { if (!(0, _index.isEmptyValue)(colKey) && !(0, _index.isEmptyArray)(colgroups)) { var firstCol = colgroups[0]; // console.log(72,firstCol) if (firstCol.key === colKey && firstCol.operationColumn) { return true; } } return false; } /** * @isLastRowByRowKey * @desc is last row by row key * @param {string} rowKey - row key */ function isLastRowByRowKey(rowKey, allRowKeys) { if (!(0, _index.isEmptyValue)(rowKey) && !(0, _index.isEmptyArray)(allRowKeys)) { return allRowKeys[allRowKeys.length - 1] === rowKey; } return false; } /** * @getDomResizeObserverCompKey * @desc get dom resize observer comp key * @param {Any} originalKey - original key * @param {Number} columnsOptionResetTime - columns option change time */ function getDomResizeObserverCompKey(originalKey, columnsOptionResetTime) { var result = originalKey; if (result || result === 0) { result = originalKey + '@' + columnsOptionResetTime; } return result; } /** * @recursiveRemoveColumnByKey * @desc recursive remove column key * @param {object} columns - deep clone column * @param {any} key - column key */ function recursiveRemoveColumnByKey(columns, key) { return columns.filter(function (item) { if ('children' in item) { item.children = recursiveRemoveColumnByKey(item.children, key); } return item.key !== key; }); } /** * @getFixedTotalWidthByColumnKey * @desc get fixed total width by column key * @param {object} colgroups - columns info * @param {any} colKey - column key * @param {string} fixed - left|right */ function getFixedTotalWidthByColumnKey(_ref) { var colgroups = _ref.colgroups, colKey = _ref.colKey, fixed = _ref.fixed; var currentIndex = colgroups.findIndex(function (x) { return x.key === colKey; }); var result = 0; if (fixed === _constant.COLUMN_FIXED_TYPE.LEFT) { // 只计算左列固定的 result = colgroups.reduce(function (total, currentVal, index) { return index < currentIndex && // eslint-disable-next-line eqeqeq currentVal.fixed == _constant.COLUMN_FIXED_TYPE.LEFT ? currentVal._realTimeWidth + total : total; }, 0); } else if (fixed === _constant.COLUMN_FIXED_TYPE.RIGHT) { // 只计算右列固定的 result = colgroups.reduce(function (total, currentVal, index) { return index > currentIndex && currentVal.fixed === _constant.COLUMN_FIXED_TYPE.RIGHT ? currentVal._realTimeWidth + total : total; }, 0); } return result; } /** * @getNotFixedTotalWidthByColumnKey * @desc get not fixed total width by column key * @param {object} colgroups - 列信息 * @param {any} colKey - column key * @param {string} direction - left|right */ function getNotFixedTotalWidthByColumnKey(_ref2) { var colgroups = _ref2.colgroups, colKey = _ref2.colKey, fixed = _ref2.fixed; var currentIndex = colgroups.findIndex(function (x) { return x.key === colKey; }); var result = 0; if (fixed === _constant.COLUMN_FIXED_TYPE.LEFT) { // 只计算左侧非固定列 result = colgroups.reduce(function (total, currentVal, index) { return index < currentIndex && !currentVal.fixed ? currentVal._realTimeWidth + total : total; }, 0); } else if (fixed === _constant.COLUMN_FIXED_TYPE.RIGHT) { // 只计算右侧非固定列 result = colgroups.reduce(function (total, currentVal, index) { return index > currentIndex && !currentVal.fixed ? currentVal._realTimeWidth + total : total; }, 0); } return result; } /** * @getTotalWidthByColKeys * @desc get total width by collumn keys * @param {array<T>} colKeys * @param {array<object>} colgroups * @return {number} width */ function getTotalWidthByColKeys(_ref3) { var colKeys = _ref3.colKeys, colgroups = _ref3.colgroups; var result = colgroups.reduce(function (total, currentVal, index) { return colKeys.indexOf(currentVal.key) > -1 ? currentVal._realTimeWidth + total : total; }, 0); return result; } /** * @initGroupColumns * @desc int group columns * @param {array} cloneColumns - clone columns * @return { isGroupHeader, colgroups, groupColumns } */ function initGroupColumns(cloneColumns) { var colgroups = []; var groupColumns = []; // set column level var maxLevel = 1; var setColumnLevel = function setColumnLevel(column, parent) { if (parent) { column._level = parent._level + 1; if (maxLevel < column._level) { maxLevel = column._level; } } if (column.children) { column.children.forEach(function (item) { item.fixed = column.fixed; setColumnLevel(item, column); }); } }; cloneColumns.forEach(function (column) { column._level = 1; setColumnLevel(column); }); // set colspan and rowspan and keys var setColspanAndRowspanAndKeys = function setColspanAndRowspanAndKeys(column) { if (column.children) { var keys = ''; var colspan = 0; column.children.forEach(function (item) { setColspanAndRowspanAndKeys(item); colspan += item._colspan; keys += item._keys.endsWith('|') ? item._keys : item._keys + '|'; }); column._keys = keys; column._colspan = colspan; column._rowspan = 1; } else { column._keys = column.key; column._colspan = 1; column._rowspan = maxLevel - column._level + 1; } }; cloneColumns.forEach(function (column) { setColspanAndRowspanAndKeys(column); }); // init groupColumns for (var i = 0; i < maxLevel; i++) { groupColumns.push([]); } // set colgroups and groupColumns var setColgroupsAndGroupColumns = function setColgroupsAndGroupColumns(column) { // column has children || column key is not empty if (!(0, _index.isEmptyArray)(column.children) || !(0, _index.isEmptyValue)(column.key)) { // set groupColumns var groupColumn = _extends({}, (_objectDestructuringEmpty(column), column)); groupColumns[column._level - 1].push(groupColumn); if (column.children) { column.children.forEach(function (item) { setColgroupsAndGroupColumns(item); }); } else { // set colgroups var colgroup = _extends({}, (_objectDestructuringEmpty(column), column)); colgroup._realTimeWidth = colgroup.width; colgroups.push(colgroup); } } }; cloneColumns.forEach(function (column) { setColgroupsAndGroupColumns(column); }); return { // set is group header isGroupHeader: maxLevel > 1, // set colgroups colgroups: colgroups, // set groupColumns groupColumns: groupColumns }; } // get header contextmenu option collection function getHeaderContextmenuOptionCollection(t) { return [{ type: _constant.CONTEXTMENU_NODE_TYPES.SEPARATOR }, { label: t('cut'), type: _constant.CONTEXTMENU_NODE_TYPES.CUT }, { label: t('copy'), type: _constant.CONTEXTMENU_NODE_TYPES.COPY }, // { // label: t("paste"), // type: CONTEXTMENU_NODE_TYPES.PASTE, // }, { label: t('removeColumn'), type: _constant.CONTEXTMENU_NODE_TYPES.REMOVE_COLUMN }, { label: t('emptyColumn'), type: _constant.CONTEXTMENU_NODE_TYPES.EMPTY_COLUMN }, { label: t('hideColumn'), type: _constant.CONTEXTMENU_NODE_TYPES.HIDE_COLUMN }, { label: t('leftFixedColumnTo'), type: _constant.CONTEXTMENU_NODE_TYPES.LEFT_FIXED_COLUMN_TO }, { label: t('cancelLeftFixedColumnTo'), type: _constant.CONTEXTMENU_NODE_TYPES.CANCEL_LEFT_FIXED_COLUMN_TO }, { label: t('rightFixedColumnTo'), type: _constant.CONTEXTMENU_NODE_TYPES.RIGHT_FIXED_COLUMN_TO }, { label: t('cancelRightFixedColumnTo'), type: _constant.CONTEXTMENU_NODE_TYPES.CANCEL_RIGHT_FIXED_COLUMN_TO }]; } // get body contextmenu option collection function getBodyContextmenuOptionCollection(t) { return [{ type: _constant.CONTEXTMENU_NODE_TYPES.SEPARATOR }, { label: t('cut'), type: _constant.CONTEXTMENU_NODE_TYPES.CUT }, { label: t('copy'), type: _constant.CONTEXTMENU_NODE_TYPES.COPY }, // { // label: t("paste"), // type: CONTEXTMENU_NODE_TYPES.PASTE, // }, { label: t('insertRowAbove'), type: _constant.CONTEXTMENU_NODE_TYPES.INSERT_ROW_ABOVE }, { label: t('insertRowBelow'), type: _constant.CONTEXTMENU_NODE_TYPES.INSERT_ROW_BELOW }, { label: t('removeRow'), type: _constant.CONTEXTMENU_NODE_TYPES.REMOVE_ROW }, { label: t('emptyRow'), type: _constant.CONTEXTMENU_NODE_TYPES.EMPTY_ROW }, { label: t('removeColumn'), type: _constant.CONTEXTMENU_NODE_TYPES.REMOVE_COLUMN }, { label: t('emptyCell'), type: _constant.CONTEXTMENU_NODE_TYPES.EMPTY_CELL }]; } /*** * @setHeaderContextmenuOptions * @desc set header contextmenu options * @param {array<object>} column * @param {array<object>} contextmenuHeaderOption * @param {object} cellSelectionRangeData * @param {array<object>} colgroups * @param {object} headerIndicatorColKeys * @param {boolean} enableHeaderContextmenu * @param {boolean} t locale * @return headerContextmenuOptions */ function setHeaderContextmenuOptions(_ref4) { var column = _ref4.column, contextmenuHeaderOption = _ref4.contextmenuHeaderOption, cellSelectionRangeData = _ref4.cellSelectionRangeData, colgroups = _ref4.colgroups, allRowKeys = _ref4.allRowKeys, headerIndicatorColKeys = _ref4.headerIndicatorColKeys, enableHeaderContextmenu = _ref4.enableHeaderContextmenu, t = _ref4.t; var result = []; if (enableHeaderContextmenu) { var selectionRangeKeys = getSelectionRangeKeys({ cellSelectionRangeData: cellSelectionRangeData }); var selectionRangeIndexes = getSelectionRangeIndexes({ cellSelectionRangeData: cellSelectionRangeData, colgroups: colgroups, allRowKeys: allRowKeys }); var isOperationCol = isOperationColumn(column.key, colgroups); var colCount = selectionRangeIndexes.endColIndex - selectionRangeIndexes.startColIndex + 1; var contextmenus = contextmenuHeaderOption.contextmenus, beforeShow = contextmenuHeaderOption.beforeShow; var isWholeColSelection = !(0, _index.isEmptyValue)(headerIndicatorColKeys.startColKey); var leftFixedColKeys = getColKeysByFixedType({ fixedType: _constant.COLUMN_FIXED_TYPE.LEFT, colgroups: colgroups, isExcludeOperationColumn: true }); var rightFixedColKeys = getColKeysByFixedType({ fixedType: _constant.COLUMN_FIXED_TYPE.RIGHT, colgroups: colgroups, isExcludeOperationColumn: true }); if ((0, _index.isFunction)(beforeShow)) { beforeShow({ isWholeColSelection: isWholeColSelection, selectionRangeKeys: selectionRangeKeys, selectionRangeIndexes: selectionRangeIndexes }); } var headerContextmenuOptionCollection = getHeaderContextmenuOptionCollection(t); contextmenus.forEach(function (contextmenu) { var contentmenuCollectionItem = headerContextmenuOptionCollection.find(function (x) { return x.type === contextmenu.type; }); if (contentmenuCollectionItem) { var isContinue = true; // empty column. 选中整列时支持 if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.EMPTY_COLUMN) { if (isWholeColSelection) { contentmenuCollectionItem.label = contentmenuCollectionItem.label.replace('$1', colCount); } else { isContinue = false; } // eslint-disable-next-line brace-style } // left fixed column to else if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.LEFT_FIXED_COLUMN_TO) { // if (isOperationCol) { contentmenuCollectionItem.disabled = true; } } // calcel left fixed column to else if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.CANCEL_LEFT_FIXED_COLUMN_TO) { if (leftFixedColKeys.length < 1) { contentmenuCollectionItem.disabled = true; } } // right fixed column to else if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.RIGHT_FIXED_COLUMN_TO) { // if (isOperationCol) { contentmenuCollectionItem.disabled = true; } } // calcel right fixed column to else if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.CANCEL_RIGHT_FIXED_COLUMN_TO) { if (rightFixedColKeys.length < 1) { contentmenuCollectionItem.disabled = true; } } if (isContinue) { result.push(contentmenuCollectionItem); } } else { result.push(contextmenu); } }); } return result; } /*** * @setHeaderContextmenuOptions * @desc set header contextmenu options * @param {array<object>} column * @param {array<object>} contextmenuBodyOption * @param {object} cellSelectionRangeData * @param {array<object>} colgroups * @param {object} bodyIndicatorRowKeys * @param {boolean} enableHeaderContextmenu * @param {boolean} t locale * @return headerContextmenuOptions */ function setBodyContextmenuOptions(_ref5) { var enableBodyContextmenu = _ref5.enableBodyContextmenu, contextmenuBodyOption = _ref5.contextmenuBodyOption, cellSelectionRangeData = _ref5.cellSelectionRangeData, colgroups = _ref5.colgroups, allRowKeys = _ref5.allRowKeys, bodyIndicatorRowKeys = _ref5.bodyIndicatorRowKeys, t = _ref5.t; var result = []; if (enableBodyContextmenu) { var selectionRangeKeys = getSelectionRangeKeys({ cellSelectionRangeData: cellSelectionRangeData }); var selectionRangeIndexes = getSelectionRangeIndexes({ cellSelectionRangeData: cellSelectionRangeData, colgroups: colgroups, allRowKeys: allRowKeys }); var rowCount = selectionRangeIndexes.endRowIndex - selectionRangeIndexes.startRowIndex + 1; var colCount = selectionRangeIndexes.endColIndex - selectionRangeIndexes.startColIndex + 1; var contextmenus = contextmenuBodyOption.contextmenus, beforeShow = contextmenuBodyOption.beforeShow; var isWholeRowSelection = !(0, _index.isEmptyValue)(bodyIndicatorRowKeys.startRowKey); if ((0, _index.isFunction)(beforeShow)) { beforeShow({ isWholeRowSelection: isWholeRowSelection, selectionRangeKeys: selectionRangeKeys, selectionRangeIndexes: selectionRangeIndexes }); } var bodyContextmenuOptionCollection = getBodyContextmenuOptionCollection(t); contextmenus.forEach(function (contextmenu) { var contentmenuCollectionItem = bodyContextmenuOptionCollection.find(function (x) { return x.type === contextmenu.type; }); if (contentmenuCollectionItem) { var isContinue = true; // remove row if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.REMOVE_ROW) { contentmenuCollectionItem.label = contentmenuCollectionItem.label.replace('$1', rowCount); } // empty row. 选中整行时支持 else if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.EMPTY_ROW) { if (isWholeRowSelection) { contentmenuCollectionItem.label = contentmenuCollectionItem.label.replace('$1', rowCount); } else { isContinue = false; } } // empty cell.没选中整行时支持 else if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.EMPTY_CELL) { isContinue = !isWholeRowSelection; } // remove column.没选中整行时支持 else if (contentmenuCollectionItem.type === _constant.CONTEXTMENU_NODE_TYPES.REMOVE_COLUMN) { if (isWholeRowSelection) { isContinue = false; } else { contentmenuCollectionItem.label = contentmenuCollectionItem.label.replace('$1', colCount); } } if (isContinue) { result.push(contentmenuCollectionItem); } } else { result.push(contextmenu); } }); } return result; } // create empty row data // export function createEmptyRowData({ colgroups, rowKeyFieldName }) { // let rowData = { // [rowKeyFieldName]: getRandomId(), // }; // colgroups.forEach((column) => { // if (column.field) { // rowData[column.field] = ""; // } // }); // return rowData; // } // empty row data // export function emptyRowData({ rowData, rowKeyFieldName }) { // Object.keys(rowData).forEach((key) => { // if (key !== rowKeyFieldName) { // rowData[key] = ""; // } // }); // return rowData; // } // is contextmenu panel clicked function isContextmenuPanelClicked(event) { var result = false; var contextmenuPanelEls = document.querySelectorAll('.ve-contextmenu-popper'); [].forEach.call(contextmenuPanelEls, function (el) { if (el.contains(event.target)) { result = true; } }); return result; } /** * @getColKeysByHeaderColumn * @desc * @param {object} headerColumnItem * @param {any} colKey2 * @return Array<colKeys> */ function getColKeysByHeaderColumn(_ref6) { var headerColumnItem = _ref6.headerColumnItem; var result = null; var _keys = headerColumnItem._keys; result = _keys.split('|'); if (result.length > 1) { result = result.slice(0, result.length - 1); } return result; } /** * @getColKeysByRangeColKeys * @desc get col keys by range col keys * @param {any} colKey1 * @param {any} colKey2 * @return Array<colKeys> */ function getColKeysByRangeColKeys(_ref7) { var colKey1 = _ref7.colKey1, colKey2 = _ref7.colKey2, colgroups = _ref7.colgroups; var result = null; var index1 = colgroups.findIndex(function (x) { return x.key === colKey1; }); var index2 = colgroups.findIndex(function (x) { return x.key === colKey2; }); if (index1 !== -1 && index1 !== -1) { var beginIndex = index1 < index2 ? index1 : index2; var endIndex = index1 < index2 ? index2 : index1; result = colgroups.slice(beginIndex, endIndex + 1).map(function (x) { return x.key; }); } return result; } /** * @getColKeysByFixedTypeWithinColKeys * @desc get col keys by fixed type * @param {array<T>} colKeys * @param {string} fixedType - fixed type * @param {array<object>} colgroups * @return {array} colKeys */ function getColKeysByFixedTypeWithinColKeys(_ref8) { var colKeys = _ref8.colKeys, fixedType = _ref8.fixedType, colgroups = _ref8.colgroups; var result = null; if (Array.isArray(colKeys)) { result = colgroups.filter(function (x) { return colKeys.indexOf(x.key) > -1 && x.fixed === fixedType; }).map(function (x) { return x.key; }); } return result; } /** * @getColKeysByFixedType * @desc get col keys by fixed type * @param {string} fixedType - fixed type * @param {array<object>} colgroups * * @param {boolean} isExcludeOperationColumn * @return colKey */ function getColKeysByFixedType(_ref9) { var fixedType = _ref9.fixedType, colgroups = _ref9.colgroups, isExcludeOperationColumn = _ref9.isExcludeOperationColumn; var result = null; result = colgroups.filter(function (x) { var condition = x.fixed === fixedType; // 排除操作列 if (isExcludeOperationColumn) { return condition && !x.operationColumn; } return condition; }).map(function (x) { return x.key; }); return result; } /** * @getRowKeysByRangeRowKeys * @desc get row keys by range row keys * @param {any} topRowKey - top row key * @param {any} bottomRowKey - bottom row key * @return Array<colKeys> */ function getRowKeysByRangeRowKeys(_ref10) { var topRowKey = _ref10.topRowKey, bottomRowKey = _ref10.bottomRowKey, allRowKeys = _ref10.allRowKeys; var result = null; var beginIndex = allRowKeys.findIndex(function (x) { return x === topRowKey; }); var endIndex = allRowKeys.findIndex(function (x) { return x === bottomRowKey; }); if (beginIndex !== -1 && endIndex !== -1) { result = allRowKeys.slice(beginIndex, endIndex + 1); } return result; } /** * @isCellInSelectionRange * @desc is cell in selection range * @param {object} cellData - cell data * @param {object} cellSelectionRangeData * @param {array<object>} colgroups * @param {array<object>} allRowKeys * @return {Array<colKeys>} */ function isCellInSelectionRange(_ref11) { var cellData = _ref11.cellData, cellSelectionRangeData = _ref11.cellSelectionRangeData, colgroups = _ref11.colgroups, allRowKeys = _ref11.allRowKeys; var leftColKey = cellSelectionRangeData.leftColKey, rightColKey = cellSelectionRangeData.rightColKey, topRowKey = cellSelectionRangeData.topRowKey, bottomRowKey = cellSelectionRangeData.bottomRowKey; var colKeys = getColKeysByRangeColKeys({ colKey1: leftColKey, colKey2: rightColKey, colgroups: colgroups }); var rowKeys = getRowKeysByRangeRowKeys({ topRowKey: topRowKey, bottomRowKey: bottomRowKey, allRowKeys: allRowKeys }); if (colKeys.indexOf(cellData.colKey) > -1 && rowKeys.indexOf(cellData.rowKey) > -1) { return true; } return false; } /** * @isClearSelectionByBodyCellRightClick * @desc is clear selection by body cell click * @param {number} mouseEventClickType * @param {object} cellData - cell data * @param {object} cellSelectionRangeData * @param {array<object>} colgroups * @param {array<object>} allRowKeys * @return {bool} */ function isClearSelectionByBodyCellRightClick(_ref12) { var mouseEventClickType = _ref12.mouseEventClickType, cellData = _ref12.cellData, cellSelectionData = _ref12.cellSelectionData, cellSelectionRangeData = _ref12.cellSelectionRangeData, colgroups = _ref12.colgroups, allRowKeys = _ref12.allRowKeys; var result = true; if (mouseEventClickType === _constant2.MOUSE_EVENT_CLICK_TYPE.RIGHT_MOUSE) { var normalEndCell = cellSelectionData.normalEndCell; if (normalEndCell.rowIndex > -1) { result = !isCellInSelectionRange({ cellData: cellData, cellSelectionRangeData: cellSelectionRangeData, colgroups: colgroups, allRowKeys: allRowKeys }); } } return result; } /** * @getSelectionRangeKeys * @desc get selection range keys * @param {object} cellSelectionRangeData * @return Array<colKeys> */ function getSelectionRangeKeys(_ref13) { var cellSelectionRangeData = _ref13.cellSelectionRangeData; var leftColKey = cellSelectionRangeData.leftColKey, rightColKey = cellSelectionRangeData.rightColKey, topRowKey = cellSelectionRangeData.topRowKey, bottomRowKey = cellSelectionRangeData.bottomRowKey; return { startColKey: leftColKey, endColKey: rightColKey, startRowKey: topRowKey, endRowKey: bottomRowKey }; } /** * @getSelectionRangeIndexes * @desc get selection range indexes * @param {object} cellSelectionRangeData * @param {array<object>} colgroups * @param {array<object>} allRowKeys * @return Array<colKeys> */ function getSelectionRangeIndexes(_ref14) { var cellSelectionRangeData = _ref14.cellSelectionRangeData, colgroups = _ref14.colgroups, allRowKeys = _ref14.allRowKeys; var leftColKey = cellSelectionRangeData.leftColKey, rightColKey = cellSelectionRangeData.rightColKey, topRowKey = cellSelectionRangeData.topRowKey, bottomRowKey = cellSelectionRangeData.bottomRowKey; return { startColIndex: colgroups.findIndex(function (x) { return x.key === leftColKey; }), endColIndex: colgroups.findIndex(function (x) { return x.key === rightColKey; }), startRowIndex: allRowKeys.indexOf(topRowKey), endRowIndex: allRowKeys.indexOf(bottomRowKey) }; } /** * @getSelectionRangeData * @desc get selection range data * @param {object} cellSelectionRangeData * @param {string} resultType "normal": contains key/value ; "flat":only contains value * @param {array<object>} tableData * @param {array<object>} colgroups * @param {array<object>} allRowKeys * @return Array<colKeys> */ function getSelectionRangeData(_ref15) { var cellSelectionRangeData = _ref15.cellSelectionRangeData, _ref15$resultType = _ref15.resultType, resultType = _ref15$resultType === void 0 ? 'normal' : _ref15$resultType, tableData = _ref15.tableData, colgroups = _ref15.colgroups, allRowKeys = _ref15.allRowKeys; var result = null; var leftColKey = cellSelectionRangeData.leftColKey, rightColKey = cellSelectionRangeData.rightColKey, topRowKey = cellSelectionRangeData.topRowKey, bottomRowKey = cellSelectionRangeData.bottomRowKey; var startColIndex = colgroups.findIndex(function (x) { return x.key === leftColKey; }); var endColIndex = colgroups.findIndex(function (x) { return x.key === rightColKey; }); var startRowIndex = allRowKeys.indexOf(topRowKey); var endRowIndex = allRowKeys.indexOf(bottomRowKey); var fieldNames = colgroups.slice(startColIndex, endColIndex + 1).map(function (x) { return x.field; }); if (resultType === 'normal') { result = tableData.slice(startRowIndex, endRowIndex + 1).map(function (rowData) { var newRow = {}; fieldNames.forEach(function (fieldName) { newRow[fieldName] = rowData[fieldName] || ''; }); return newRow; }); } else { result = tableData.slice(startRowIndex, endRowIndex + 1).map(function (rowData) { var newRow = []; fieldNames.forEach(function (fieldName) { newRow.push(rowData[fieldName] || ''); }); return newRow; }); } return result; } /** * @isExistFixedColKey * @desc is exist given fixed col key * @param {string} fixedType - fixed type * @param {array<T>} colKeys * @param {array<object>} colgroups * @return bool */ function isExistGivenFixedColKey(_ref16) { var fixedType = _ref16.fixedType, colKeys = _ref16.colKeys, colgroups = _ref16.colgroups; var result = false; if (Array.isArray(colKeys)) { result = colgroups.some(function (x) { return colKeys.indexOf(x.key) > -1 && x.fixed === fixedType; }); } return result; } /** * @isExistNotFixedColKey * @desc is exist not fixed col key * @param {array<T>} colKeys * @param {array<object>} colgroups * @return bool */ function isExistNotFixedColKey(_ref17) { var colKeys = _ref17.colKeys, colgroups = _ref17.colgroups; var result = false; if (Array.isArray(colKeys)) { result = colgroups.filter(function (x) { return !x.fixed && colKeys.indexOf(x.key) > -1; }).length; } return result; } /** * @getLeftmostOrRightmostColKey * @desc get leftmost or rightmost column key * @param {string} type * @param {array<object>} colgroups * @param {array<any>} colKeys * @return colKey */ function getLeftmostOrRightmostColKey(_ref18) { var type = _ref18.type, colgroups = _ref18.colgroups, colKeys = _ref18.colKeys; var result = null; if (Array.isArray(colKeys) && colKeys.length) { var mostObj = { colKey: null, colIndex: null }; colKeys.forEach(function (colKey) { var colIndex = colgroups.findIndex(function (x) { return x.key === colKey; }); if (colIndex === -1) { console.warn("getLeftmostOrRightmostColKey error:: can't find colKey:".concat(colKey)); return false; } if ((0, _index.isEmptyValue)(mostObj.colKey)) { mostObj = { colKey: colKey, colIndex: colIndex }; } else { if (type === 'leftmost') { if (colIndex < mostObj.colIndex) { mostObj = { colKey: colKey, colIndex: colIndex }; } } else if (type === 'rightmost') { if (colIndex > mostObj.colIndex) { mostObj = { colKey: colKey, colIndex: colIndex }; } } } }); result = mostObj.colKey; } return result; } /** * @getLeftmostColKey * @desc get leftmost column key * @param {array<object>} colgroups * @param {array<any>} colKeys * @return colKey */ function getLeftmostColKey(_ref19) { var colgroups = _ref19.colgroups, colKeys = _ref19.colKeys; return getLeftmostOrRightmostColKey({ type: 'leftmost', colgroups: colgroups, colKeys: colKeys }); } /** * @getRightmostColKey * @desc get rightmost column key * @param {array<object>} colgroups * @param {array<any>} colKeys * @return colKey */ function getRightmostColKey(_ref20) { var colgroups = _ref20.colgroups, colKeys = _ref20.colKeys; return getLeftmostOrRightmostColKey({ type: 'rightmost', colgroups: colgroups, colKeys: colKeys }); } /** * @getPreviewColKey * @desc get preview column key * @param {array<object>} colgroups * @param {any} currentColKey * @return colKey */ function getPreviewColKey(_ref21) { var colgroups = _ref21.colgroups, currentColKey = _ref21.currentColKey; var result = null; if (!(0, _index.isEmptyValue)(currentColKey)) { var index = colgroups.findIndex(function (x) { return x.key === currentColKey; }); if (index === 0) { result = currentColKey; } else if (index > 0) { result = colgroups[index - 1].key; } } return result; } /** * @getNextColKey * @desc get next column key * @param {array<object>} colgroups * @param {any} currentColKey * @return colKey */ function getNextColKey(_ref22) { var colgroups = _ref22.colgroups, currentColKey = _ref22.currentColKey; var result = null; if (!(0, _index.isEmptyValue)(currentColKey)) { var index = colgroups.findIndex(function (x) { return x.key === currentColKey; }); if (index === colgroups.length - 1) { result = currentColKey; } else if (index < colgroups.length - 1) { result = colgroups[index + 1].key; } } return result; } /*** * @cellAutofill * @desc cell auto fill * @param {bool} isReplaceData * @param {array<object>} tableData * @param {array<any>} allRowKeys * @param {array<object>} colgroups * @param {string} direction * @param {string} rowKeyFieldName * @param {object} nextCurrentCell next current cell * @param {object} nextNormalEndCell next normal end cell * @return autofillChangeDatas */ function cellAutofill(_ref23) { var isReplaceData = _ref23.isReplaceData, tableData = _ref23.tableData, allRowKeys = _ref23.allRowKeys, colgroups = _ref23.colgroups, direction = _ref23.direction, rowKeyFieldName = _ref23.rowKeyFieldName, cellSelectionRangeData = _ref23.cellSelectionRangeData, nextCurrentCell = _ref23.nextCurrentCell, nextNormalEndCell = _ref23.nextNormalEndCell; var cellSelectionTableData = []; var leftColKey = cellSelectionRangeData.leftColKey, rightColKey = cellSelectionRangeData.rightColKey, topRowKey = cellSelectionRangeData.topRowKey, bottomRowKey = cellSelectionRangeData.bottomRowKey; // source selection range var sourceSelectionRangeIndexes = { startRowIndex: -1, endRowIndex: -1, startColIndex: -1, endColIndex: -1 }; // target selection range var targetSelectionRangeIndexes = { startRowIndex: -1, endRowIndex: -1, startColIndex: -1, endColIndex: -1 }; sourceSelectionRangeIndexes.startRowIndex = allRowKeys.indexOf(topRowKey); sourceSelectionRangeIndexes.endRowIndex = allRowKeys.indexOf(bottomRowKey); sourceSelectionRangeIndexes.startColIndex = colgroups.findIndex(function (x) { return x.key === leftColKey; }); sourceSelectionRangeIndexes.endColIndex = colgroups.findIndex(function (x) { return x.key === rightColKey; }); cellSelectionTableData = tableData.slice(sourceSelectionRangeIndexes.startRowIndex, sourceSelectionRangeIndexes.endRowIndex + 1); if (direction === _constant.AUTOFILLING_DIRECTION.UP) { // targetSelectionRangeIndexes.startRowIndex = allRowKeys.indexOf(nextCurrentCell.rowKey); targetSelectionRangeIndexes.endRowIndex = sourceSelectionRangeIndexes.startRowIndex - 1; targetSelectionRangeIndexes.startColIndex = sourceSelectionRangeIndexes.startColIndex; targetSelectionRangeIndexes.endColIndex = sourceSelectionRangeIndexes.endColIndex; if (isReplaceData) { var cellSelectionTableDataRowIndex = cellSelectionTableData.length - 1; for (var rowIndex = targetSelectionRangeIndexes.endRowIndex; rowIndex >= targetSelectionRangeIndexes.startRowIndex; rowIndex--) { for (var colIndex = targetSelectionRangeIndexes.startColIndex; colIndex <= targetSelectionRangeIndexes.endColIndex; colIndex++) { var fieldName = colgroups[colIndex].field; // repeat autofill cell selection data if (cellSelectionTableDataRowIndex < 0) { cellSelectionTableDataRowIndex = cellSelectionTableData.length - 1; } tableData[rowIndex][fieldName] = cellSelectionTableData[cellSelectionTableDataRowIndex][fieldName]; } --cellSelectionTableDataRowIndex; } } } else if (direction === _constant.AUTOFILLING_DIRECTION.DOWN) { // targetSelectionRangeIndexes.startRowIndex = sourceSelectionRangeIndexes.endRowIndex + 1; targetSelectionRangeIndexes.endRowIndex = allRowKeys.indexOf(nextNormalEndCell.rowKey); targetSelectionRangeIndexes.startColIndex = sourceSelectionRangeIndexes.startColIndex; targetSelectionRangeIndexes.endColIndex = sourceSelectionRangeIndexes.endColIndex; if (isReplaceData) { var _cellSelectionTableDataRowIndex = 0; for (var _rowIndex = targetSelectionRangeIndexes.startRowIndex; _rowIndex <= targetSelectionRangeIndexes.endRowIndex; _rowIndex++) { for (var _colIndex = targetSelectionRangeIndexes.startColIndex; _colIndex <= targetSelectionRangeIndexes.endColIndex; _colIndex++) { var _fieldName = colgroups[_colIndex].field; // repeat autofill cell selection data if (_cellSelectionTableDataRowIndex > cellSelectionTableData.length - 1) { _cellSelectionTableDataRowIndex = 0; } tableData[_rowIndex][_fieldName] = cellSelectionTableData[_cellSelectionTableDataRowIndex][_fieldName]; } ++_cellSelectionTableDataRowIndex; } } } else if (direction === _constant.AUTOFILLING_DIRECTION.LEFT) { // targetSelectionRangeIndexes.startRowIndex = sourceSelectionRangeIndexes.startRowIndex; targetSelectionRangeIndexes.endRowIndex = sourceSelectionRangeIndexes.endRowIndex; targetSelectionRangeIndexes.startColIndex = colgroups.findIndex(function (x) { return x.key === nextCurrentCell.colKey; }); targetSelectionRangeIndexes.endColIndex = sourceSelectionRangeIndexes.startColIndex - 1; if (isReplaceData) { var _cellSelectionTableDataRowIndex2 = 0; for (var _rowIndex2 = targetSelectionRangeIndexes.startRowIndex; _rowIndex2 <= targetSelectionRangeIndexes.endRowIndex; _rowIndex2++) { var cellSelectionTableDataColIndex = sourceSelectionRangeIndexes.endColIndex; for (var _colIndex2 = targetSelectionRangeIndexes.endColIndex; _colIndex2 >= targetSelectionRangeIndexes.startColIndex; _colIndex2--) { var _fieldName2 = colgroups[_colIndex2].field; // repeat autofill cell selection data if (cellSelectionTableDataColIndex < sourceSelectionRangeIndexes.startColIndex) { cellSelectionTableDataColIndex = sourceSelectionRangeIndexes.endColIndex; } tableData[_rowIndex2][_fieldName2] = cellSelectionTableData[_cellSelectionTableDataRowIndex2][colgroups[cellSelectionTableDataColIndex].field]; --cellSelectionTableDataColIndex; } ++_cellSelectionTableDataRowIndex2; } } } else if (direction === _constant.AUTOFILLING_DIRECTION.RIGHT) { // targetSelectionRangeIndexes.startRowIndex = sourceSelectionRangeIndexes.startRowIndex; targetSelectionRangeIndexes.endRowIndex = sourceSelectionRangeIndexes.endRowIndex; targetSelectionRangeIndexes.startColIndex = sourceSelectionRangeIndexes.endColIndex + 1; targetSelectionRangeIndexes.endColIndex = colgroups.findIndex(function (x) { return x.key === nextNormalEndCell.colKey; }); if (isReplaceData) { var _cellSelectionTableDataRowIndex3 = 0; for (var _rowIndex3 = targetSelectionRangeIndexes.startRowIndex; _rowIndex3 <= targetSelectionRangeIndexes.endRowIndex; _rowIndex3++) { var _cellSelectionTableDataColIndex = sourceSelectionRangeIndexes.startColIndex; for (var _colIndex3 = targetSelectionRangeIndexes.startColIndex; _colIndex3 <= targetSelectionRangeIndexes.endColIndex; _colIndex3++) { var _fieldName3 = colgroups[_colIndex3].field; // repeat autofill cell selection data if (_cellSelectionTableDataColIndex > sourceSelectionRangeIndexes.startColIndex + (sourceSelectionRangeIndexes.endColIndex - sourceSelectionRangeIndexes.startColIndex)) { _cellSelectionTableDataColIndex = sourceSelectionRangeIndexes.startColIndex; } tableData[_rowIndex3][_fieldName3] = cellSelectionTableData[_cellSelectionTableDataRowIndex3][colgroups[_cellSelectionTableDataColIndex].field]; ++_cellSelectionTableDataColIndex; } ++_cellSelectionTableDataRowIndex3; } } } var response = { direction: direction, sourceSelectionRangeIndexes: sourceSelectionRangeIndexes, targetSelectionRangeIndexes: targetSelectionRangeIndexes, sourceSelectionData: [], targetSelectionData: [] }; var sourceFieldNames = colgroups.slice(sourceSelectionRangeIndexes.startColIndex, sourceSelectionRangeIndexes.endColIndex + 1).map(function (x) { return x.field; }); response.sourceSelectionData = tableData.slice(sourceSelectionRangeIndexes.startRowIndex, sourceSelectionRangeIndexes.endRowIndex + 1).map(function (rowData) { var newData = _defineProperty({}, rowKeyFieldName, rowData[rowKeyFieldName]); sourceFieldNames.forEach(function (fieldName) { newData[fieldName] = rowData[fieldName]; }); return newData; }); var targetFieldNames = colgroups.slice(targetSelectionRangeIndexes.startColIndex, targetSelectionRangeIndexes.endColIndex + 1).map(function (x) { return x.field; }); response.targetSelectionData = tableData.slice(targetSelectionRangeIndexes.startRowIndex, targetSelectionRangeIndexes.endRowIndex + 1).map(function (rowData) { var newData = _defineProperty({}, rowKeyFieldName, rowData[rowKeyFieldName]); targetFieldNames.forEach(function (fieldName) { newData[fieldName] = rowData[fieldName]; }); return newData; }); return response; } /*** * @setColumnFixed * @desc set column fixed * @param {array<object>} cloneColumns * @param {object} cellSelectionRangeData * @param {string} fixedType COLUMN_FIXED_TYPE * @param {array<object>} colgroups * @param {bool} enableColumnResize * @return cloneColumns */ function setColumnFixed(_ref24) { var cloneColumns = _ref24.cloneColumns, cellSelectionRangeData = _ref24.cellSelectionRangeData, fixedType = _ref24.fixedType, colgroups = _ref24.colgroups, enableColumnResize = _ref24.enableColumnResize; var result = cloneColumns; var leftColKey = cellSelectionRangeData.leftColKey, rightColKey = cellSelectionRangeData.rightColKey; var colKey; if (_constant.COLUMN_FIXED_TYPE.LEFT === fixedType) { colKey = rightColKey; } else if (_constant.COLUMN_FIXED_TYPE.RIGHT === fixedType) { colKey = leftColKey; } // find col index from cloneColumns // eslint-disable-next-line array-callback-return var fixedColIndex = cloneColumns.findIndex(function (colItem) { if (colItem._level === 1 && colItem.key === colKey) { return true; } else { var colKeys = getColKeysByHeaderColumn({ headerColumnItem: colItem }); if (colKeys.indexOf(colKey) > -1) { return true; } } }); if (fixedColIndex > -1) { // 不允许改变原有固定列方向 var oldFixedType = cloneColumns[fixedColIndex].fixed; if (!(0, _index.isEmptyValue)(oldFixedType) && oldFixedType !== fixedType) { return false; } result = cloneColumns.map(function (colItem, index) { // 清除所有固定 if (colItem.fixed === fixedType) { colItem.fixed = ''; } // 允许列自适应 && 不是多列表头 if (enableColumnResize && !(Array.isArray(colItem.children) && colItem.children.length)) { var _colItem = colgroups.find(function (x) { return x.key === colItem.key && !(0, _index.isEmptyValue)(x.key); }); if (_colItem) { colItem.width = _colItem._columnResizeWidth; } } if (_constant.COLUMN_FIXED_TYPE.LEFT === fixedType) { // 不允许左冻结最后一列 if (index <= fixedColIndex && index < cloneColumns.length) { colItem.fixed = fixedType; } } else { // 不允许右冻结第一列 if (index >= fixedColIndex && index > 0) { colItem.fixed = fixedType; } } return colItem; }); } return result; } /*** * @cancelColumnFixed * @desc cancel column fixed * @param {array<object>} cloneColumns * @param {array<object>} colgroups * @param {string} fixedType COLUMN_FIXED_TYPE * @param {bool} enableColumnResize * @return cloneColumns */ function cancelColumnFixed(_ref25) { var cloneColumns = _ref25.cloneColumns, colgroups = _ref25.colgroups, fixedType = _ref25.fixedType, enableColumnResize = _ref25.enableColumnResize; return cloneColumns.map(function (colItem) { // 允许列自适应 && 不是多列表头 if (enableColumnResize && !(Array.isArray(colItem.children) && colItem.children.length)) { var _colItem = colgroups.find(function (x) { return x.key === colItem.key && !(0, _index.isEmptyValue)(x.key); }); if (_colItem) { colItem.width = _colItem._columnResizeWidth; } } if (_constant.COLUMN_FIXED_TYPE.LEFT === fixedType) { if (colItem.fixed === fixedType && !isOperationColumn(colItem.key, colgroups)) { colItem.fixed = ''; } } else { if (colItem.fixed === fixedType) { colItem.fixed = ''; } } return colItem; }); }