UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

191 lines 6.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildHeaderHierarchy = void 0; const lodash_1 = require("lodash"); const common_1 = require("../../common"); const build_gird_hierarchy_1 = require("./build-gird-hierarchy"); const build_grid_tree_hierarchy_1 = require("./build-grid-tree-hierarchy"); const build_row_custom_tree_hierarchy_1 = require("./build-row-custom-tree-hierarchy"); const build_row_tree_hierarchy_1 = require("./build-row-tree-hierarchy"); const build_table_hierarchy_1 = require("./build-table-hierarchy"); const hierarchy_1 = require("./hierarchy"); const handleCustomTreeHierarchy = (params) => { const { rootNode, hierarchy, fields, spreadsheet, isRowHeader } = params; // 自定义行/列 需要去除额外添加的 EXTRA_FIELD 虚拟数值字段, 即不参与布局, 只用于定位数据 const withoutExtraFieldsTree = (0, lodash_1.filter)(fields, (field) => field !== common_1.EXTRA_FIELD); // custom tree header (0, build_row_custom_tree_hierarchy_1.buildCustomTreeHierarchy)({ spreadsheet, tree: withoutExtraFieldsTree, level: 0, parentNode: rootNode, hierarchy, isRowHeader, }); }; const handleGridRowColHierarchy = (params) => { const { isValueInCols, moreThanOneValue, rootNode, hierarchy, fields, isRowHeader, isCustomTreeFields, spreadsheet, } = params; // add new total measure in total node let addTotalMeasureInTotal; // add measure info in total query let addMeasureInTotalQuery; if (isRowHeader) { addTotalMeasureInTotal = !isValueInCols && moreThanOneValue; addMeasureInTotalQuery = !isValueInCols && !moreThanOneValue; } else { addTotalMeasureInTotal = isValueInCols && moreThanOneValue; addMeasureInTotalQuery = isValueInCols && !moreThanOneValue; } if (isCustomTreeFields) { handleCustomTreeHierarchy(params); } else { (0, build_gird_hierarchy_1.buildGridHierarchy)({ spreadsheet, addTotalMeasureInTotal, addMeasureInTotalQuery, parentNode: rootNode, currentField: fields[0], fields: fields, hierarchy, }); } }; const handleTreeRowHierarchy = (params) => { const { spreadsheet, rootNode, hierarchy, isCustomTreeFields } = params; const { rows } = spreadsheet.dataSet.fields; if (spreadsheet.isHierarchyTreeType() && !isCustomTreeFields) { // row tree hierarchy(value must stay in colHeader) (0, build_row_tree_hierarchy_1.buildRowTreeHierarchy)({ level: 0, currentField: rows === null || rows === void 0 ? void 0 : rows[0], pivotMeta: spreadsheet.dataSet.rowPivotMeta, parentNode: rootNode, hierarchy, spreadsheet, }); } else { handleCustomTreeHierarchy(params); } }; const handleGridTreeRowHierarchy = (params) => { const { isValueInCols, moreThanOneValue, rootNode, hierarchy, fields, isCustomTreeFields, spreadsheet, } = params; // grid-tree 模式使用专门的层级构建器 const addTotalMeasureInTotal = !isValueInCols && moreThanOneValue; const addMeasureInTotalQuery = !isValueInCols && !moreThanOneValue; if (isCustomTreeFields) { handleCustomTreeHierarchy(params); } else { (0, build_grid_tree_hierarchy_1.buildGridTreeHierarchy)({ spreadsheet, addTotalMeasureInTotal, addMeasureInTotalQuery, parentNode: rootNode, currentField: fields[0], fields: fields, hierarchy, }); } }; const handleRowHeaderHierarchy = (params) => { // 只有透视表有行头 const { spreadsheet } = params; if (spreadsheet.isHierarchyGridTreeType()) { // grid-tree 模式:平铺布局 + 展开折叠 handleGridTreeRowHierarchy(params); } else if (spreadsheet.isHierarchyTreeType()) { // tree 模式:纯树状布局 handleTreeRowHierarchy(params); } else { // grid 模式:纯平铺布局 handleGridRowColHierarchy(params); } }; const handleTableHierarchy = (params) => { var _a; const { isCustomTreeFields, spreadsheet } = params; const { enable } = (_a = spreadsheet.options.seriesNumber) !== null && _a !== void 0 ? _a : {}; if (isCustomTreeFields) { const seriesNumberField = { field: common_1.SERIES_NUMBER_FIELD, title: spreadsheet.getSeriesNumberText(), }; const fields = enable ? [seriesNumberField, ...params.fields] : params.fields.filter((node) => (node === null || node === void 0 ? void 0 : node.field) !== common_1.SERIES_NUMBER_FIELD); handleCustomTreeHierarchy(Object.assign(Object.assign({}, params), { fields })); return; } (0, build_table_hierarchy_1.buildTableHierarchy)(params); }; const handleColHeaderHierarchy = (params) => { const { spreadsheet } = params; const isPivotMode = spreadsheet.isPivotMode(); if (isPivotMode) { handleGridRowColHierarchy(params); } else { handleTableHierarchy(params); } }; /** * Header Hierarchy * - row header * - tree layout * - custom tree layout * - grid layout * - table layout * - col header * - grid layout * - single value * - total + sub_total * - more than one value * - total + sub_total * - separate by values * - table layout * @param params */ const buildHeaderHierarchy = (params) => { const { isRowHeader, spreadsheet } = params; const { rows = [], columns = [] } = spreadsheet.dataSet.fields; const isValueInCols = spreadsheet.isValueInCols(); const moreThanOneValue = spreadsheet.dataSet.moreThanOneValue(); const hierarchy = new hierarchy_1.Hierarchy(); const fields = isRowHeader ? rows : columns; const isCustomTreeFields = spreadsheet.isCustomHeaderFields(isRowHeader ? 'rows' : 'columns'); const headerParams = { isValueInCols, moreThanOneValue, rootNode: hierarchy.rootNode, hierarchy, spreadsheet, fields, isRowHeader, isCustomTreeFields, }; if (isRowHeader) { handleRowHeaderHierarchy(headerParams); } else { handleColHeaderHierarchy(headerParams); } const getLeafNodes = () => { if (!isRowHeader) { return hierarchy.getLeaves(); } return spreadsheet.isHierarchyTreeType() ? hierarchy.getNodes() : hierarchy.getLeaves(); }; return { hierarchy, leafNodes: getLeafNodes(), }; }; exports.buildHeaderHierarchy = buildHeaderHierarchy; //# sourceMappingURL=build-header-hierarchy.js.map