@antv/s2
Version:
effective spreadsheet render core lib
111 lines • 4.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSelectedRows = exports.getSelectedCols = exports.getColNodeFieldFromNode = exports.getHeaderList = exports.getHeaderMeasureFieldNames = exports.escapeField = exports.getAllLevels = exports.keyEqualTo = void 0;
/**
* 导出和复制的公共方法,这里的方法都比较纯,参数中都不包含 spreadsheet 对象
*/
const lodash_1 = require("lodash");
const common_1 = require("../../common");
const layout_1 = require("../layout");
const text_1 = require("../text");
function keyEqualTo(key, compareKey) {
if (!key || !compareKey) {
return false;
}
return String(key).toLowerCase() === String(compareKey).toLowerCase();
}
exports.keyEqualTo = keyEqualTo;
/**
* 获取 intersection cell 所有的层级
* @param {(RowCell | ColCell)[]} interactedCells
*/
function getAllLevels(interactedCells) {
const allLevels = new Set();
(0, lodash_1.forEach)(interactedCells, (cell) => {
const level = cell.getMeta().level;
if (allLevels.has(level)) {
return;
}
allLevels.add(level);
});
return allLevels;
}
exports.getAllLevels = getAllLevels;
/**
* https://en.wikipedia.org/wiki/Comma-separated_values#Example
* 根据 CSV、Excel 规范,按以下规则处理字段内容:
* 若字段包含 ,、"、\r、\n 或 \t → 用双引号包裹字段。
* 字段中的双引号 → 转义为两个双引号 ""。
* 为了兼容直接粘贴纯文本到Excel单元格保持换行的场景,把\n替换成\r\n。但是\r\n不做替换
* @param field
*/
const escapeField = (field) => {
if (typeof field !== 'string') {
return field;
}
// 检查是否需要转义:包含逗号、双引号或换行符
if (/[",\r\n\t]/.test(field)) {
// 转义双引号 -> 两个双引号
// 为了兼容直接粘贴纯文本到Excel单元格保持换行的场景,把\n替换成\r\n。但是\r\n不做替换
// 在ios 14.8.1中正则前瞻和后顾存在兼容问题
const newField = field
.replace(/"/g, '""')
.replace(/\r\n/g, '\n')
.replace(/\n/g, '\r\n');
// 用双引号包裹字段
return `"${newField}"`;
}
return field;
};
exports.escapeField = escapeField;
const getHeaderMeasureFieldNames = (fields, spreadsheet, formatHeader = true) => {
return (0, lodash_1.map)(fields, (field) => {
// https://github.com/antvis/S2/issues/2755
if (field === common_1.SERIES_NUMBER_FIELD) {
return spreadsheet.getSeriesNumberText();
}
// https://github.com/antvis/S2/issues/2688
// https://github.com/antvis/S2/pull/2829
if (!formatHeader) {
return (0, lodash_1.flow)(layout_1.resolveNillString, text_1.replaceEmptyFieldValue)(field);
}
return spreadsheet.dataSet.getFieldName(field);
});
};
exports.getHeaderMeasureFieldNames = getHeaderMeasureFieldNames;
/**
* 根据 id 计算出行头或者列头展示的文本数组
* 将 id : root[&]家具[&]桌子[&]price"
* startLevel 不传, 转换为 List: ['家具', '桌子', 'price']
* startLevel = 1, 转换为 List: ['家具', '桌子', 'price']
* @param headerId
* @param startLevel 层级
*/
const getHeaderList = (headerId, startLevel) => {
const headerList = headerId.split(common_1.NODE_ID_SEPARATOR);
if (startLevel) {
return headerList.slice(headerList.length - startLevel);
}
// 去除 root
headerList.shift();
return headerList;
};
exports.getHeaderList = getHeaderList;
/**
* 获取 col node 对应的 field。e.g. field: age
* @param {() => boolean} isPivotMode
* @param {Node} colNode
* @return {string | undefined}
*/
const getColNodeFieldFromNode = (isPivotMode, colNode) => {
if (isPivotMode()) {
return colNode === null || colNode === void 0 ? void 0 : colNode.value;
}
return colNode === null || colNode === void 0 ? void 0 : colNode.field;
};
exports.getColNodeFieldFromNode = getColNodeFieldFromNode;
const getSelectedCols = (cells) => cells.filter(({ type }) => type === common_1.CellType.COL_CELL);
exports.getSelectedCols = getSelectedCols;
const getSelectedRows = (cells) => cells.filter(({ type }) => type === common_1.CellType.ROW_CELL);
exports.getSelectedRows = getSelectedRows;
//# sourceMappingURL=method.js.map