UNPKG

@visactor/vtable

Version:

canvas table width high performance

731 lines (715 loc) 49.8 kB
"use strict"; var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.listTableUpdateRecords = exports.listTableDeleteRecords = exports.listTableAddRecords = exports.listTableAddRecord = exports.sortRecords = exports.listTableChangeCellValuesByRanges = exports.listTableChangeCellValues = exports.listTableChangeCellValue = void 0; const compute_col_width_1 = require("../scenegraph/layout/compute-col-width"), compute_row_height_1 = require("../scenegraph/layout/compute-row-height"), helper_1 = require("../tools/helper"), util_1 = require("../tools/util"), TABLE_EVENT_TYPE_1 = require("./TABLE_EVENT_TYPE"), vutils_1 = require("@visactor/vutils"), get_custom_merge_cell_func_1 = require("./utils/get-custom-merge-cell-func"); function refreshCustomMergeCellGroups(table) { var _a; if (!Array.isArray(table.options.customMergeCell)) return; table.internalProps.customMergeCell = (0, get_custom_merge_cell_func_1.getCustomMergeCellFunc)(table.options.customMergeCell); const merges = table.options.customMergeCell; for (let i = 0; i < merges.length; i++) { const r = null === (_a = merges[i]) || void 0 === _a ? void 0 : _a.range; if (null == r ? void 0 : r.start) for (let col = r.start.col; col <= r.end.col; col++) for (let row = r.start.row; row <= r.end.row; row++) table.scenegraph.updateCellContent(col, row); } } function listTableChangeCellValue(col, row, value, workOnEditableCell, triggerEvent, table, noTriggerChangeCellValuesEvent) { var _a, _b; if (workOnEditableCell && table.isHasEditorDefine(col, row) || !1 === workOnEditableCell) { const recordShowIndex = table.getRecordShowIndexByCell(col, row), recordIndex = recordShowIndex >= 0 ? table.dataSource.getIndexKey(recordShowIndex) : void 0, {field: field} = table.internalProps.layoutMap.getBody(col, row), beforeChangeValue = table.getCellRawValue(col, row), oldValue = table.getCellOriginValue(col, row); table.isHeader(col, row) ? table.internalProps.layoutMap.updateColumnTitle(col, row, value) : table.dataSource.changeFieldValue(value, recordShowIndex, field, col, row, table); const range = table.getCellRange(col, row); if (range.isCustom && range.start.col === col && range.start.row === row && Array.isArray(table.options.customMergeCell) && "function" == typeof table.getCellValue) { const customMerge = null === (_b = null === (_a = table.internalProps) || void 0 === _a ? void 0 : _a.customMergeCell) || void 0 === _b ? void 0 : _b.call(_a, col, row, table); customMerge && (customMerge.text = value); } const aggregators = table.internalProps.layoutMap.getAggregatorsByCell(col, row); if (aggregators) { if (Array.isArray(aggregators)) for (let i = 0; i < (null == aggregators ? void 0 : aggregators.length); i++) aggregators[i].recalculate(); else aggregators.recalculate(); const aggregatorCells = table.internalProps.layoutMap.getAggregatorCellAddress(range.start.col, range.start.row, range.end.col, range.end.row); for (let i = 0; i < aggregatorCells.length; i++) { const range = table.getCellRange(aggregatorCells[i].col, aggregatorCells[i].row); for (let sCol = range.start.col; sCol <= range.end.col; sCol++) for (let sRow = range.start.row; sRow <= range.end.row; sRow++) table.scenegraph.updateCellContent(sCol, sRow); } } for (let sCol = range.start.col; sCol <= range.end.col; sCol++) for (let sRow = range.start.row; sRow <= range.end.row; sRow++) table.scenegraph.updateCellContent(sCol, sRow); if ("adaptive" === table.widthMode || table.autoFillWidth && table.getAllColsWidth() <= table.tableNoFrameWidth) 0 === table.internalProps._widthResizedColMap.size && table.scenegraph.recalculateColWidths(); else if (!table.internalProps._widthResizedColMap.has(col)) { const oldWidth = table.getColWidth(col), newWidth = (0, compute_col_width_1.computeColWidth)(col, 0, table.rowCount - 1, table, !1); newWidth !== oldWidth && table.scenegraph.updateColWidth(col, newWidth - oldWidth); } if ("adaptive" === table.heightMode || table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight) 0 === table.internalProps._heightResizedRowMap.size && table.scenegraph.recalculateRowHeights(); else if (table.isAutoRowHeight(row) && !table.internalProps._heightResizedRowMap.has(row)) { const oldHeight = table.getRowHeight(row), newHeight = (0, compute_row_height_1.computeRowHeight)(row, 0, table.colCount - 1, table); table.scenegraph.updateRowHeight(row, newHeight - oldHeight); } const changedValue = table.getCellOriginValue(col, row); if (oldValue !== changedValue && triggerEvent) { const changeValue = { col: col, row: row, recordIndex: recordIndex, field: field, rawValue: beforeChangeValue, currentValue: oldValue, changedValue: changedValue }; table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, changeValue), noTriggerChangeCellValuesEvent || table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CHANGE_CELL_VALUES, { values: [ changeValue ] }); } table.scenegraph.updateNextFrame(); } } function listTableChangeCellValues(startCol, startRow, values, workOnEditableCell, triggerEvent, table, noTriggerChangeCellValuesEvent) { var _a, _b; return __awaiter(this, void 0, void 0, (function*() { const changedCellResults = []; let pasteColEnd = startCol, pasteRowEnd = startRow; const beforeChangeValues = [], oldValues = []; let cellUpdateType; for (let i = 0; i < values.length && !(startRow + i > table.rowCount - 1); i++) { const rowValues = values[i], rawRowValues = [], oldRowValues = []; beforeChangeValues.push(rawRowValues), oldValues.push(oldRowValues); for (let j = 0; j < rowValues.length && !(startCol + j > table.colCount - 1); j++) { cellUpdateType = getCellUpdateType(startCol + j, startRow + i, table, cellUpdateType); const beforeChangeValue = table.getCellRawValue(startCol + j, startRow + i); rawRowValues.push(beforeChangeValue); const oldValue = table.getCellOriginValue(startCol + j, startRow + i); oldRowValues.push(oldValue); } } const resultChangeValues = []; for (let i = 0; i < values.length && !(startRow + i > table.rowCount - 1); i++) { changedCellResults[i] = [], pasteRowEnd = startRow + i; const rowValues = values[i]; let thisRowPasteColEnd = startCol; for (let j = 0; j < rowValues.length && !(startCol + j > table.colCount - 1); j++) { thisRowPasteColEnd = startCol + j; let isCanChange = !1; if (!1 === workOnEditableCell) isCanChange = !0; else if (table.isHasEditorDefine(startCol + j, startRow + i)) { const editor = table.getEditor(startCol + j, startRow + i), oldValue = oldValues[i][j], value = rowValues[j], maybePromiseOrValue = null === (_b = null === (_a = null == editor ? void 0 : editor.validateValue) || void 0 === _a ? void 0 : _a.call(editor, value, oldValue, { col: startCol + j, row: startRow + i }, table)) || void 0 === _b || _b; if ((0, helper_1.isPromise)(maybePromiseOrValue)) { const validateResult = yield maybePromiseOrValue; isCanChange = !0 === validateResult || "validate-exit" === validateResult || "validate-not-exit" === validateResult; } else isCanChange = !0 === maybePromiseOrValue || "validate-exit" === maybePromiseOrValue || "validate-not-exit" === maybePromiseOrValue; } if (isCanChange) { changedCellResults[i][j] = !0; const value = rowValues[j], recordShowIndex = table.getRecordShowIndexByCell(startCol + j, startRow + i), recordIndex = recordShowIndex >= 0 ? table.dataSource.getIndexKey(recordShowIndex) : void 0, {field: field} = table.internalProps.layoutMap.getBody(startCol + j, startRow + i), beforeChangeValue = beforeChangeValues[i][j], oldValue = oldValues[i][j]; table.isHeader(startCol + j, startRow + i) ? table.internalProps.layoutMap.updateColumnTitle(startCol + j, startRow + i, value) : table.dataSource.changeFieldValue(value, recordShowIndex, field, startCol + j, startRow + i, table); const changedValue = table.getCellOriginValue(startCol + j, startRow + i); if (oldValue !== changedValue && triggerEvent) { const changeValue = { col: startCol + j, row: startRow + i, recordIndex: recordIndex, field: field, rawValue: beforeChangeValue, currentValue: oldValue, changedValue: changedValue }; table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, changeValue), resultChangeValues.push(changeValue); } } else changedCellResults[i][j] = !1; } pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd); } noTriggerChangeCellValuesEvent || table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CHANGE_CELL_VALUES, { values: resultChangeValues }); const startRange = table.getCellRange(startCol, startRow), range = table.getCellRange(pasteColEnd, pasteRowEnd), aggregators = table.internalProps.layoutMap.getAggregatorsByCellRange(startRange.start.col, startRange.start.row, range.end.col, range.end.row); if (aggregators) { for (let i = 0; i < (null == aggregators ? void 0 : aggregators.length); i++) aggregators[i].recalculate(); if ("normal" === cellUpdateType) { const aggregatorCells = table.internalProps.layoutMap.getAggregatorCellAddress(startRange.start.col, startRange.start.row, range.end.col, range.end.row); for (let i = 0; i < aggregatorCells.length; i++) { const range = table.getCellRange(aggregatorCells[i].col, aggregatorCells[i].row); for (let sCol = range.start.col; sCol <= range.end.col; sCol++) for (let sRow = range.start.row; sRow <= range.end.row; sRow++) table.scenegraph.updateCellContent(sCol, sRow); } } } if ("group" === cellUpdateType && table.dataSource.updateRecordsForGroup([], []), "sort" === cellUpdateType || "group" === cellUpdateType) return table.dataSource.sortedIndexMap.clear(), sortRecords(table), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(), changedCellResults; for (let sCol = startRange.start.col; sCol <= range.end.col; sCol++) for (let sRow = startRange.start.row; sRow <= range.end.row; sRow++) table.scenegraph.updateCellContent(sCol, sRow); if ("adaptive" === table.widthMode || table.autoFillWidth && table.getAllColsWidth() <= table.tableNoFrameWidth) 0 === table.internalProps._widthResizedColMap.size && table.scenegraph.recalculateColWidths(); else for (let sCol = startCol; sCol <= range.end.col; sCol++) if (!table.internalProps._widthResizedColMap.has(sCol)) { const oldWidth = table.getColWidth(sCol), newWidth = (0, compute_col_width_1.computeColWidth)(sCol, 0, table.rowCount - 1, table, !1); newWidth !== oldWidth && table.scenegraph.updateColWidth(sCol, newWidth - oldWidth); } if ("adaptive" === table.heightMode || table.autoFillHeight && table.getAllRowsHeight() <= table.tableNoFrameHeight) table.scenegraph.recalculateRowHeights(); else if (table.isAutoRowHeight(startRow)) { const rows = [], deltaYs = []; for (let sRow = startRow; sRow <= range.end.row; sRow++) if (table.rowHeightsMap.get(sRow)) { const oldHeight = table.getRowHeight(sRow), newHeight = (0, compute_row_height_1.computeRowHeight)(sRow, 0, table.colCount - 1, table); rows.push(sRow), deltaYs.push(newHeight - oldHeight); } table.scenegraph.updateRowsHeight(rows, deltaYs); } return table.scenegraph.updateNextFrame(), changedCellResults; })); } function listTableChangeCellValuesByRanges(ranges, value, workOnEditableCell, triggerEvent, table, noTriggerChangeCellValuesEvent) { var _a, _b; return __awaiter(this, void 0, void 0, (function*() { const resultChangeValues = [], processed = new Set, nextValue = null != value ? value : ""; for (let i = 0; i < (null !== (_a = null == ranges ? void 0 : ranges.length) && void 0 !== _a ? _a : 0); i++) { const range = ranges[i], startCol = Math.min(range.start.col, range.end.col), endCol = Math.max(range.start.col, range.end.col), startRow = Math.min(range.start.row, range.end.row), endRow = Math.max(range.start.row, range.end.row); if (startCol > endCol || startRow > endRow) continue; const values = [], oldValues = []; for (let row = startRow; row <= endRow; row++) { const rowValues = [], rowOldValues = []; for (let col = startCol; col <= endCol; col++) rowValues.push(nextValue), rowOldValues.push(table.getCellOriginValue(col, row)); values.push(rowValues), oldValues.push(rowOldValues); } const changedCellResults = yield listTableChangeCellValues(startCol, startRow, values, workOnEditableCell, triggerEvent, table, !0); for (let r = 0; r < values.length; r++) for (let c = 0; c < values[r].length; c++) { const col = startCol + c, row = startRow + r, key = `${col},${row}`; if (processed.has(key)) continue; if (processed.add(key), !triggerEvent || !(null === (_b = null == changedCellResults ? void 0 : changedCellResults[r]) || void 0 === _b ? void 0 : _b[c])) continue; const oldValue = oldValues[r][c], changedValue = table.getCellOriginValue(col, row); if (oldValue === changedValue) continue; const recordShowIndex = table.getRecordShowIndexByCell(col, row), recordIndex = recordShowIndex >= 0 ? table.dataSource.getIndexKey(recordShowIndex) : void 0, {field: field} = table.internalProps.layoutMap.getBody(col, row); resultChangeValues.push({ col: col, row: row, recordIndex: recordIndex, field: field, rawValue: oldValue, currentValue: oldValue, changedValue: changedValue }); } } !noTriggerChangeCellValuesEvent && triggerEvent && table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CHANGE_CELL_VALUES, { values: resultChangeValues }); })); } function getCellUpdateType(col, row, table, oldCellUpdateType) { if ("group" === oldCellUpdateType) return oldCellUpdateType; if ("sort" === oldCellUpdateType && !table.internalProps.groupBy) return oldCellUpdateType; let cellUpdateType = "normal"; if (table.internalProps.groupBy) cellUpdateType = "group"; else if (!table.isHeader(col, row) && table.dataSource.lastOrderField) { table.getBodyField(col, row) === table.dataSource.lastOrderField && (cellUpdateType = "sort"); } return cellUpdateType; } function sortRecords(table) { let sortState = table.sortState; sortState = !sortState || Array.isArray(sortState) ? sortState : [ sortState ], sortState && (sortState = sortState.map((item => { var _a; return item.orderFn = null !== (_a = table._getSortFuncFromHeaderOption(void 0, item.field)) && void 0 !== _a ? _a : util_1.defaultOrderFn, item; })), table.dataSource.sort(sortState)); } function listTableAddRecord(record, recordIndex, table) { var _a, _b, _c, _d, _e, _f; try { if (!record) return !1; if (table.internalProps.groupBy) null === (_b = (_a = table.dataSource).addRecordsForGroup) || void 0 === _b || _b.call(_a, [ record ], recordIndex), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else if ("tree" === table.dataSource.rowHierarchyType) null === (_d = (_c = table.dataSource).addRecordsForTree) || void 0 === _d || _d.call(_c, [ record ], recordIndex), adjustCheckBoxStateMapWithAddRecordIndex(table, recordIndex, 1), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else if (table.sortState) { !!(null === (_e = table.options) || void 0 === _e ? void 0 : _e.syncRecordOperationsToSourceRecords) ? table.dataSource.addRecord(record, table.dataSource.records.length, !0) : table.dataSource.addRecordForSorted(record), table.stateManager.checkedState.clear(), sortRecords(table), table.refreshRowColCount(), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); } else { (void 0 === recordIndex || recordIndex > table.dataSource.sourceLength) && (recordIndex = table.dataSource.sourceLength); const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount, syncToOriginalRecords = !!(null === (_f = table.options) || void 0 === _f ? void 0 : _f.syncRecordOperationsToSourceRecords); if (table.dataSource.addRecord(record, recordIndex, syncToOriginalRecords), adjustCheckBoxStateMapWithAddRecordIndex(table, recordIndex, 1), syncToOriginalRecords) { if (!table.transpose) { const insertRowIndex = recordIndex + headerCount + table.internalProps.layoutMap.hasAggregationOnTopCount; table.rowHeightsMap.insert(insertRowIndex); } return table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(!0), !0; } const oldRowCount = table.rowCount; if (table.refreshRowColCount(), 0 === table.scenegraph.proxy.totalActualBodyRowCount) return table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(), !0; const newRowCount = table.transpose ? table.colCount : table.rowCount; if (table.pagination) { const {perPageCount: perPageCount, currentPage: currentPage} = table.pagination, endIndex = perPageCount * (currentPage || 0) + perPageCount; if (recordIndex < endIndex) if (recordIndex < endIndex - perPageCount) table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else { const rowNum = recordIndex - (endIndex - perPageCount) + headerCount; if (oldRowCount - headerCount === table.pagination.perPageCount) { const updateRows = []; for (let row = rowNum; row < newRowCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], [], updateRows) : table.scenegraph.updateRow([], [], updateRows); } else { const addRows = []; for (let row = rowNum; row < Math.min(newRowCount, rowNum + 1); row++) table.transpose ? addRows.push({ col: row, row: 0 }) : addRows.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []); } } } else { const addRows = []; for (let row = recordIndex + headerCount; row < recordIndex + headerCount + 1; row++) table.transpose ? addRows.push({ col: row, row: 0 }) : addRows.push({ col: 0, row: row }); const updateRows = [], topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount, bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount; for (let row = headerCount; row < headerCount + topAggregationCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); for (let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount; row < (table.transpose ? table.colCount : table.rowCount); row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []); } } return !0; } catch (error) { return !1; } } function listTableAddRecords(records, recordIndex, table) { var _a, _b, _c, _d, _e, _f; try { if (!records || 0 === records.length) return !1; if (table.internalProps.groupBy) null === (_b = (_a = table.dataSource).addRecordsForGroup) || void 0 === _b || _b.call(_a, records, recordIndex), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else if ("tree" === table.dataSource.rowHierarchyType) null === (_d = (_c = table.dataSource).addRecordsForTree) || void 0 === _d || _d.call(_c, records, recordIndex), adjustCheckBoxStateMapWithAddRecordIndex(table, recordIndex, records.length), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else if (table.sortState) { !!(null === (_e = table.options) || void 0 === _e ? void 0 : _e.syncRecordOperationsToSourceRecords) ? table.dataSource.addRecords(records, table.dataSource.records.length, !0) : table.dataSource.addRecordsForSorted(records), sortRecords(table), table.refreshRowColCount(), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); } else { void 0 === recordIndex || recordIndex > table.dataSource.sourceLength ? recordIndex = table.dataSource.sourceLength : recordIndex < 0 && (recordIndex = 0); const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount, syncToOriginalRecords = !!(null === (_f = table.options) || void 0 === _f ? void 0 : _f.syncRecordOperationsToSourceRecords); if (table.dataSource.addRecords(records, recordIndex, syncToOriginalRecords), adjustCheckBoxStateMapWithAddRecordIndex(table, recordIndex, records.length), syncToOriginalRecords) { if (!table.transpose) { const insertRowIndex = recordIndex + headerCount + table.internalProps.layoutMap.hasAggregationOnTopCount; for (let i = 0; i < records.length; i++) table.rowHeightsMap.insert(insertRowIndex); } return table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(!0), !0; } const oldRowCount = table.transpose ? table.colCount : table.rowCount; if (table.refreshRowColCount(), 0 === table.scenegraph.proxy.totalActualBodyRowCount) return table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(), !0; const newRowCount = table.transpose ? table.colCount : table.rowCount; if (table.pagination) { const {perPageCount: perPageCount, currentPage: currentPage} = table.pagination, endIndex = perPageCount * (currentPage || 0) + perPageCount; if (recordIndex < endIndex) if (recordIndex < endIndex - perPageCount) table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else { const rowNum = recordIndex - (endIndex - perPageCount) + headerCount; if (oldRowCount - headerCount === table.pagination.perPageCount) { const updateRows = []; for (let row = rowNum; row < newRowCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], [], updateRows) : table.scenegraph.updateRow([], [], updateRows); } else { const addRows = []; for (let row = rowNum; row < Math.min(newRowCount, rowNum + (Array.isArray(records) ? records.length : 1)); row++) table.transpose ? addRows.push({ col: row, row: 0 }) : addRows.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], addRows, []) : table.scenegraph.updateRow([], addRows, []); } } } else { const addRows = []; for (let row = recordIndex + headerCount; row < recordIndex + headerCount + (Array.isArray(records) ? records.length : 1); row++) table.transpose ? addRows.push({ col: row, row: 0 }) : addRows.push({ col: 0, row: row }); const topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount, bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount, updateRows = []; for (let row = headerCount; row < headerCount + topAggregationCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); for (let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount; row < (table.transpose ? table.colCount : table.rowCount); row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], addRows, updateRows) : table.scenegraph.updateRow([], addRows, updateRows); } } return !0; } catch (error) { return !1; } } function listTableDeleteRecords(recordIndexs, table) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; if ((null == recordIndexs ? void 0 : recordIndexs.length) > 0) if (table.internalProps.groupBy) null === (_b = (_a = table.dataSource).deleteRecordsForGroup) || void 0 === _b || _b.call(_a, recordIndexs), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else if ("tree" === table.dataSource.rowHierarchyType) { const deletedRecordIndexs = null === (_d = (_c = table.dataSource).deleteRecordsForTree) || void 0 === _d ? void 0 : _d.call(_c, recordIndexs); if (0 === deletedRecordIndexs.length) return; for (let index = 0; index < deletedRecordIndexs.length; index++) adjustCheckBoxStateMapWithDeleteRecordIndex(table, deletedRecordIndexs[index], 1); table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); } else if (table.sortState) { !!(null === (_e = table.options) || void 0 === _e ? void 0 : _e.syncRecordOperationsToSourceRecords) ? table.dataSource.deleteRecords(recordIndexs, !0) : table.dataSource.deleteRecordsForSorted(recordIndexs), sortRecords(table), table.refreshRowColCount(), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); } else { const syncToOriginalRecords = !!(null === (_f = table.options) || void 0 === _f ? void 0 : _f.syncRecordOperationsToSourceRecords), deletedRecordIndexs = table.dataSource.deleteRecords(recordIndexs, syncToOriginalRecords); if (0 === deletedRecordIndexs.length) return; Array.isArray(table.options.customMergeCell) && (table.internalProps.customMergeCell = (0, get_custom_merge_cell_func_1.getCustomMergeCellFunc)(table.options.customMergeCell)); for (let index = 0; index < deletedRecordIndexs.length; index++) adjustCheckBoxStateMapWithDeleteRecordIndex(table, deletedRecordIndexs[index], 1); if (syncToOriginalRecords) { if (!table.transpose) { const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount, topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount, sorted = [ ...deletedRecordIndexs ].sort(((a, b) => b - a)); for (let i = 0; i < sorted.length; i++) table.rowHeightsMap.delete(sorted[i] + headerCount + topAggregationCount); } return table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.scenegraph.clearCells(), void table.scenegraph.createSceneGraph(!0); } const oldRowCount = table.transpose ? table.colCount : table.rowCount; table.refreshRowColCount(); const newRowCount = table.transpose ? table.colCount : table.rowCount, recordIndexsMinToMax = deletedRecordIndexs.sort(((a, b) => a - b)), minRecordIndex = recordIndexsMinToMax[0]; if (table.pagination) { const {perPageCount: perPageCount, currentPage: currentPage} = table.pagination, endIndex = perPageCount * (currentPage || 0) + perPageCount; if (minRecordIndex < endIndex) if (minRecordIndex < endIndex - perPageCount) table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else { const headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount, topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount, updateRows = [], delRows = []; for (let row = minRecordIndex - (endIndex - perPageCount) + (table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount) + topAggregationCount; row < newRowCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); for (let row = headerCount; row < headerCount + topAggregationCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); if (newRowCount < oldRowCount) for (let row = newRowCount; row < oldRowCount; row++) table.transpose ? delRows.push({ col: row, row: 0 }) : delRows.push({ col: 0, row: row }); null === (_g = table.reactCustomLayout) || void 0 === _g || _g.clearCache(), table.transpose ? table.scenegraph.updateCol(delRows, [], updateRows) : table.scenegraph.updateRow(delRows, [], updateRows), null === (_h = table.reactCustomLayout) || void 0 === _h || _h.updateAllCustomCell(), refreshCustomMergeCellGroups(table); } } else { const delRows = [], headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount, topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount, bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount; for (let index = 0; index < recordIndexsMinToMax.length; index++) { const rowNum = recordIndexsMinToMax[index] + headerCount + topAggregationCount; table.transpose ? delRows.push({ col: rowNum, row: 0 }) : delRows.push({ col: 0, row: rowNum }); } const updateRows = []; if (table.internalProps.customMergeCell) { const proxy = table.scenegraph.proxy, deletedIndexNums = (recordIndexsMinToMax[0], recordIndexsMinToMax.map((recordIndex => recordIndex + headerCount + topAggregationCount))), minIndexNum = deletedIndexNums[0]; let updateMin = minIndexNum, updateMax = minIndexNum; if (Array.isArray(table.options.customMergeCell)) { const merges = table.options.customMergeCell, axis = table.transpose ? "col" : "row"; merges.forEach((m => { const r = null == m ? void 0 : m.range; if ((null == r ? void 0 : r.start) && (null == r ? void 0 : r.end)) for (let i = 0; i < deletedIndexNums.length; i++) { const deleteIndex = deletedIndexNums[i]; if (r.end[axis] >= deleteIndex - 1) { updateMin = Math.min(updateMin, r.start[axis]), updateMax = Math.max(updateMax, r.end[axis]); break; } } })); } if (table.transpose) { const start = Math.max(updateMin, null !== (_j = null == proxy ? void 0 : proxy.colStart) && void 0 !== _j ? _j : updateMin), end = Math.min(updateMax, null !== (_k = null == proxy ? void 0 : proxy.colEnd) && void 0 !== _k ? _k : updateMax); for (let col = start; col <= end; col++) updateRows.push({ col: col, row: 0 }); } else { const start = Math.max(updateMin, null !== (_l = null == proxy ? void 0 : proxy.rowStart) && void 0 !== _l ? _l : updateMin), end = Math.min(updateMax, null !== (_m = null == proxy ? void 0 : proxy.rowEnd) && void 0 !== _m ? _m : updateMax); for (let row = start; row <= end; row++) updateRows.push({ col: 0, row: row }); } } for (let row = headerCount; row < headerCount + topAggregationCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); for (let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount; row < (table.transpose ? table.colCount : table.rowCount); row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); null === (_o = table.reactCustomLayout) || void 0 === _o || _o.clearCache(), table.transpose ? table.scenegraph.updateCol(delRows, [], updateRows) : table.scenegraph.updateRow(delRows, [], updateRows), null === (_p = table.reactCustomLayout) || void 0 === _p || _p.updateAllCustomCell(), refreshCustomMergeCellGroups(table); } } } function listTableUpdateRecords(records, recordIndexs, table) { var _a, _b, _c, _d, _e, _f; if ((null == recordIndexs ? void 0 : recordIndexs.length) > 0) if (table.internalProps.groupBy) null === (_b = (_a = table.dataSource).updateRecordsForGroup) || void 0 === _b || _b.call(_a, records, recordIndexs), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else if ("tree" === table.dataSource.rowHierarchyType) null === (_d = (_c = table.dataSource).updateRecordsForTree) || void 0 === _d || _d.call(_c, records, recordIndexs), table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.sortState && sortRecords(table), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); else if (table.sortState) { !!(null === (_e = table.options) || void 0 === _e ? void 0 : _e.syncRecordOperationsToSourceRecords) ? table.dataSource.updateRecords(records, recordIndexs, !0) : table.dataSource.updateRecordsForSorted(records, recordIndexs), sortRecords(table), table.refreshRowColCount(), table.scenegraph.clearCells(), table.scenegraph.createSceneGraph(); } else { const syncToOriginalRecords = !!(null === (_f = table.options) || void 0 === _f ? void 0 : _f.syncRecordOperationsToSourceRecords), updateRecordIndexs = table.dataSource.updateRecords(records, recordIndexs, syncToOriginalRecords); if (0 === updateRecordIndexs.length) return; if (syncToOriginalRecords) return table.refreshRowColCount(), table.internalProps.layoutMap.clearCellRangeMap(), table.scenegraph.clearCells(), void table.scenegraph.createSceneGraph(!0); const recordIndexsMinToMax = updateRecordIndexs.map((index => table.getBodyRowIndexByRecordIndex(index))).sort(((a, b) => a - b)); if (table.pagination) { const {perPageCount: perPageCount, currentPage: currentPage} = table.pagination, headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount, topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount, endIndex = perPageCount * (currentPage || 0) + perPageCount, updateRows = []; for (let index = 0; index < recordIndexsMinToMax.length; index++) { const recordIndex = recordIndexsMinToMax[index]; if (recordIndex < endIndex && recordIndex >= endIndex - perPageCount) { const rowNum = recordIndex - (endIndex - perPageCount) + (table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount) + topAggregationCount; updateRows.push(rowNum); } } if (updateRows.length >= 1) { const updateRowCells = []; for (let index = 0; index < updateRows.length; index++) { const updateRow = updateRows[index]; table.transpose ? updateRowCells.push({ col: updateRow, row: 0 }) : updateRowCells.push({ col: 0, row: updateRow }); } for (let row = headerCount; row < headerCount + topAggregationCount; row++) table.transpose ? updateRowCells.push({ col: row, row: 0 }) : updateRowCells.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], [], updateRowCells) : table.scenegraph.updateRow([], [], updateRowCells); } } else { const updateRows = [], headerCount = table.transpose ? table.rowHeaderLevelCount : table.columnHeaderLevelCount, topAggregationCount = table.internalProps.layoutMap.hasAggregationOnTopCount, bottomAggregationCount = table.internalProps.layoutMap.hasAggregationOnBottomCount; for (let index = 0; index < recordIndexsMinToMax.length; index++) { const rowNum = recordIndexsMinToMax[index] + headerCount + topAggregationCount; table.transpose ? updateRows.push({ col: rowNum, row: 0 }) : updateRows.push({ col: 0, row: rowNum }); } for (let row = headerCount; row < headerCount + topAggregationCount; row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); for (let row = (table.transpose ? table.colCount : table.rowCount) - bottomAggregationCount; row < (table.transpose ? table.colCount : table.rowCount); row++) table.transpose ? updateRows.push({ col: row, row: 0 }) : updateRows.push({ col: 0, row: row }); table.transpose ? table.scenegraph.updateCol([], [], updateRows) : table.scenegraph.updateRow([], [], updateRows); } } } function adjustCheckBoxStateMapWithDeleteRecordIndex(table, recordIndex, count) { const {checkedState: checkedState} = table.stateManager; if (checkedState) if ("tree" === table.dataSource.rowHierarchyType) { let toOperateIndexArr; toOperateIndexArr = (0, vutils_1.isNumber)(recordIndex) ? [ recordIndex ] : recordIndex; const toOperateIndexArrLength = toOperateIndexArr.length, targetResult = []; checkedState.forEach(((value, key) => { var _a; const keyArray = key.split(","); if (keyArray.length >= toOperateIndexArr.length) for (let i = 0; i < keyArray.length; i++) { const toOperateIndex = null !== (_a = toOperateIndexArr[i]) && void 0 !== _a ? _a : -1, keyIndex = Number(keyArray[i]); if (!(toOperateIndex === keyIndex && i < keyArray.length - 1)) { if (toOperateIndex === keyIndex && i === keyArray.length - 1 || -1 === toOperateIndex) { targetResult.push({ originKey: key, value: value }); break; } if (toOperateIndex < keyIndex && i === toOperateIndexArrLength - 1) { keyArray[i] = (keyIndex - count).toString(), targetResult.push({ originKey: key, targetKey: keyArray.toString(), value: value }); break; } break; } } })), targetResult.sort(((a, b) => { const aArray = a.originKey.split(","), bArray = b.originKey.split(","), aLength = aArray.length, bLength = bArray.length, minLength = Math.min(aLength, bLength); for (let i = 0; i < minLength; i++) { const aIndex = Number(aArray[i]), bIndex = Number(bArray[i]); if (aIndex !== bIndex) return aIndex - bIndex; } return aLength - bLength; })), targetResult.forEach((({originKey: originKey, targetKey: targetKey, value: value}) => { checkedState.delete(originKey), targetKey && checkedState.set(targetKey, value); })); } else { const toDelete = [], toUpdate = []; checkedState.forEach(((value, key) => { const dataIndex = Number(key); !isNaN(dataIndex) && dataIndex >= recordIndex && (dataIndex === recordIndex ? toDelete.push(key) : dataIndex > recordIndex && toUpdate.push({ originKey: key, targetKey: (dataIndex - count).toString(), value: value })); })), toDelete.forEach((key => checkedState.delete(key))), toUpdate.forEach((({originKey: originKey, targetKey: targetKey, value: value}) => { checkedState.delete(originKey), checkedState.set(targetKey, value); })); } } function adjustCheckBoxStateMapWithAddRecordIndex(table, recordIndex, count) { const {checkedState: checkedState} = table.stateManager; if (checkedState) if ("tree" === table.dataSource.rowHierarchyType) { let toOperateIndexArr; toOperateIndexArr = (0, vutils_1.isNumber)(recordIndex) ? [ recordIndex ] : recordIndex; const toOperateIndexArrLength = toOperateIndexArr.length, targetResult = []; checkedState.forEach(((value, key) => { var _a; const keyArray = key.split(","); if (keyArray.length >= toOperateIndexArr.length) for (let i = 0; i < keyArray.length; i++) { const toOperateIndex = null !== (_a = toOperateIndexArr[i]) && void 0 !== _a ? _a : -1, keyIndex = Number(keyArray[i]); if (toOperateIndex === keyIndex && (i === keyArray.length - 1 || i === toOperateIndexArrLength - 1)) { keyArray[i] = (keyIndex + count).toString(), targetResult.push({ originKey: key, targetKey: keyArray.toString(), value: value }); break; } if (!(toOperateIndex === keyIndex && i < keyArray.length - 1)) { if (toOperateIndex < keyIndex && i === toOperateIndexArrLength - 1) { keyArray[i] = (keyIndex + count).toString(), targetResult.push({ originKey: key, targetKey: keyArray.toString(), value: value }); break; } break; } } })), targetResult.sort(((a, b) => { const aArray = a.originKey.split(","), bArray = b.originKey.split(","), aLength = aArray.length, bLength = bArray.length, minLength = Math.min(aLength, bLength); for (let i = 0; i < minLength; i++) { const aIndex = Number(aArray[i]), bIndex = Number(bArray[i]); if (aIndex !== bIndex) return -aIndex + bIndex; } return -aLength + bLength; })), targetResult.forEach((({originKey: originKey, targetKey: targetKey, value: value}) => { checkedState.delete(originKey), targetKey && checkedState.set(targetKey, value); })); } else { for (let key = checkedState.size - 1; key >= recordIndex; key--) { const record = checkedState.get(key.toString()); checkedState.delete(key.toString()), checkedState.set((key + count).toString(), record); } } } //# sourceMappingURL=record-helper.js.map exports.listTableChangeCellValue = listTableChangeCellValue, exports.listTableChangeCellValues = listTableChangeCellValues, exports.listTableChangeCellValuesByRanges = listTableChangeCellValuesByRanges, exports.sortRecords = sortRecords, exports.listTableAddRecord = listTableAddRecord, exports.listTableAddRecords = listTableAddRecords, exports.listTableDeleteRecords = listTableDeleteRecords, exports.listTableUpdateRecords = listTableUpdateRecords;