UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

89 lines 2.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.diffPanelIndexes = exports.diffIndexes = exports.allIndexes = exports.isXYInRange = void 0; const lodash_1 = require("lodash"); /** * 是否在 视窗索引范围中 * @param x * @param y * @param indexes */ const isXYInRange = (x, y, indexes) => { const [xMin, xMax, yMin, yMax] = indexes; return x >= xMin && x <= xMax && y >= yMin && y <= yMax; }; exports.isXYInRange = isXYInRange; const allIndexes = (indexes) => { const [minI, maxI, minJ, maxJ] = indexes; const r = []; for (let i = minI; i <= maxI; i += 1) { for (let j = minJ; j <= maxJ; j += 1) { r.push([i, j]); } } return r; }; exports.allIndexes = allIndexes; /** * 计算两个 indexes 的 diff,获取 sourceIndexes -> targetIndexes 过程中新增的和移除的index * @param sourceIndexes * @param targetIndexes */ const diffIndexes = (sourceIndexes, targetIndexes) => { const add = []; const remove = []; // source 为空 if ((0, lodash_1.isEmpty)(sourceIndexes)) { if ((0, lodash_1.isEmpty)(targetIndexes)) { // 都为空 return { add, remove }; } // target 不为空 return { add: (0, exports.allIndexes)(targetIndexes), remove }; } // source 不为空,target 为空 if ((0, lodash_1.isEmpty)(targetIndexes)) { return { add, remove: (0, exports.allIndexes)(sourceIndexes) }; } const [sourceMinI, sourceMaxI, sourceMinJ, sourceMaxJ] = sourceIndexes; const [targetMinI, targetMaxI, targetMinJ, targetMaxJ] = targetIndexes; // sourceIndexes -> targetIndexes 过程中,remove 掉的单元格 for (let i = sourceMinI; i <= sourceMaxI; i++) { for (let j = sourceMinJ; j <= sourceMaxJ; j++) { if (!(0, exports.isXYInRange)(i, j, targetIndexes)) { remove.push([i, j]); } } } // sourceIndexes -> targetIndexes 过程中,add 新增的单元格 for (let i = targetMinI; i <= targetMaxI; i += 1) { for (let j = targetMinJ; j <= targetMaxJ; j += 1) { if (!(0, exports.isXYInRange)(i, j, sourceIndexes)) { add.push([i, j]); } } } return { add, remove, }; }; exports.diffIndexes = diffIndexes; /** * 计算 Panel 下所有子 Group的 Indexes Diff */ const diffPanelIndexes = (sourceIndexes, targetIndexes) => { const allAdd = []; const allRemove = []; Object.keys(targetIndexes || {}).forEach((key) => { const { add, remove } = (0, exports.diffIndexes)((sourceIndexes === null || sourceIndexes === void 0 ? void 0 : sourceIndexes[key]) || [], targetIndexes[key]); allAdd.push(...add); allRemove.push(...remove); }); return { add: allAdd, remove: allRemove, }; }; exports.diffPanelIndexes = diffPanelIndexes; //# sourceMappingURL=indexes.js.map