@visactor/vseed 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/cjs/index.cjs +2 -2
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/esm/builder/builder/prepare.js +87 -153
  4. package/dist/esm/builder/builder/prepare.js.map +1 -1
  5. package/dist/esm/dataSelector/selector.d.ts +2 -2
  6. package/dist/esm/dataSelector/selector.js.map +1 -1
  7. package/dist/esm/i18n/i18nData.js +28 -0
  8. package/dist/esm/i18n/i18nData.js.map +1 -1
  9. package/dist/esm/pipeline/advanced/chart/pipes/default/defaultMeasures.js.map +1 -1
  10. package/dist/esm/pipeline/advanced/table/pipeline/pivotTable.js +2 -3
  11. package/dist/esm/pipeline/advanced/table/pipeline/pivotTable.js.map +1 -1
  12. package/dist/esm/pipeline/advanced/table/pipes/config/pivotTableConfig.js +2 -1
  13. package/dist/esm/pipeline/advanced/table/pipes/config/pivotTableConfig.js.map +1 -1
  14. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasures.js.map +1 -1
  15. package/dist/esm/pipeline/advanced/table/pipes/default/index.d.ts +0 -1
  16. package/dist/esm/pipeline/advanced/table/pipes/default/index.js +1 -2
  17. package/dist/esm/pipeline/advanced/table/pipes/encoding/pivotTable.js +6 -3
  18. package/dist/esm/pipeline/advanced/table/pipes/encoding/pivotTable.js.map +1 -1
  19. package/dist/esm/pipeline/advanced/table/pipes/index.d.ts +0 -1
  20. package/dist/esm/pipeline/advanced/table/pipes/index.js +0 -1
  21. package/dist/esm/pipeline/spec/chart/pipes/label/label.js +6 -2
  22. package/dist/esm/pipeline/spec/chart/pipes/label/label.js.map +1 -1
  23. package/dist/esm/pipeline/spec/table/pipeline/pivotTable.js +1 -1
  24. package/dist/esm/pipeline/spec/table/pipeline/pivotTable.js.map +1 -1
  25. package/dist/esm/pipeline/spec/table/pipeline/table.js +3 -1
  26. package/dist/esm/pipeline/spec/table/pipeline/table.js.map +1 -1
  27. package/dist/esm/pipeline/spec/table/pipes/cellStyle/pivot.js +1 -3
  28. package/dist/esm/pipeline/spec/table/pipes/cellStyle/pivot.js.map +1 -1
  29. package/dist/esm/pipeline/spec/table/pipes/columns/columnsAggregation.d.ts +8 -0
  30. package/dist/esm/pipeline/spec/table/pipes/columns/columnsAggregation.js +76 -0
  31. package/dist/esm/pipeline/spec/table/pipes/columns/columnsAggregation.js.map +1 -0
  32. package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js +1 -27
  33. package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js.map +1 -1
  34. package/dist/esm/pipeline/spec/table/pipes/columns/index.d.ts +1 -0
  35. package/dist/esm/pipeline/spec/table/pipes/columns/index.js +1 -0
  36. package/dist/esm/pipeline/spec/table/pipes/columns/measuresToColumns.js +1 -27
  37. package/dist/esm/pipeline/spec/table/pipes/columns/measuresToColumns.js.map +1 -1
  38. package/dist/esm/pipeline/spec/table/pipes/columns/utils.d.ts +15 -0
  39. package/dist/esm/pipeline/spec/table/pipes/columns/utils.js +35 -0
  40. package/dist/esm/pipeline/spec/table/pipes/columns/utils.js.map +1 -0
  41. package/dist/esm/pipeline/spec/table/pipes/corner/titleOnDimension.js +3 -2
  42. package/dist/esm/pipeline/spec/table/pipes/corner/titleOnDimension.js.map +1 -1
  43. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotDataConfig.js +41 -5
  44. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotDataConfig.js.map +1 -1
  45. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotIndicators.js +20 -25
  46. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotIndicators.js.map +1 -1
  47. package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js +2 -12
  48. package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js.map +1 -1
  49. package/dist/esm/pipeline/spec/table/pipes/theme/bottomFrozenStyle.d.ts +2 -0
  50. package/dist/esm/pipeline/spec/table/pipes/theme/bottomFrozenStyle.js +51 -0
  51. package/dist/esm/pipeline/spec/table/pipes/theme/bottomFrozenStyle.js.map +1 -0
  52. package/dist/esm/pipeline/spec/table/pipes/theme/index.d.ts +1 -0
  53. package/dist/esm/pipeline/spec/table/pipes/theme/index.js +1 -0
  54. package/dist/esm/types/advancedVSeed.d.ts +2 -1
  55. package/dist/esm/types/advancedVSeed.js +3 -2
  56. package/dist/esm/types/advancedVSeed.js.map +1 -1
  57. package/dist/esm/types/chartType/area/zArea.d.ts +113 -8
  58. package/dist/esm/types/chartType/areaPercent/zAreaPercent.d.ts +113 -8
  59. package/dist/esm/types/chartType/bar/zBar.d.ts +97 -4
  60. package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +97 -4
  61. package/dist/esm/types/chartType/barPercent/zBarPercent.d.ts +97 -4
  62. package/dist/esm/types/chartType/boxPlot/zBoxPlot.d.ts +89 -2
  63. package/dist/esm/types/chartType/circlePacking/zCirclePacking.d.ts +81 -0
  64. package/dist/esm/types/chartType/column/zColumn.d.ts +97 -4
  65. package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +97 -4
  66. package/dist/esm/types/chartType/columnPercent/zColumnPercent.d.ts +97 -4
  67. package/dist/esm/types/chartType/donut/zDonut.d.ts +81 -0
  68. package/dist/esm/types/chartType/dualAxis/zDualAxis.d.ts +121 -10
  69. package/dist/esm/types/chartType/funnel/zFunnel.d.ts +81 -0
  70. package/dist/esm/types/chartType/heatmap/zHeatmap.d.ts +81 -0
  71. package/dist/esm/types/chartType/histogram/zHistogram.d.ts +97 -4
  72. package/dist/esm/types/chartType/line/zLine.d.ts +105 -6
  73. package/dist/esm/types/chartType/pie/zPie.d.ts +81 -0
  74. package/dist/esm/types/chartType/pivotTable/pivotTable.d.ts +12 -1
  75. package/dist/esm/types/chartType/pivotTable/zPivotTable.d.ts +13 -0
  76. package/dist/esm/types/chartType/pivotTable/zPivotTable.js +3 -1
  77. package/dist/esm/types/chartType/pivotTable/zPivotTable.js.map +1 -1
  78. package/dist/esm/types/chartType/raceBar/zRaceBar.d.ts +97 -4
  79. package/dist/esm/types/chartType/raceColumn/zRaceColumn.d.ts +97 -4
  80. package/dist/esm/types/chartType/raceDonut/zRaceDonut.d.ts +81 -0
  81. package/dist/esm/types/chartType/raceLine/zRaceLine.d.ts +105 -6
  82. package/dist/esm/types/chartType/racePie/zRacePie.d.ts +81 -0
  83. package/dist/esm/types/chartType/raceScatter/zRaceScatter.d.ts +97 -4
  84. package/dist/esm/types/chartType/radar/zRadar.d.ts +81 -0
  85. package/dist/esm/types/chartType/rose/zRose.d.ts +81 -0
  86. package/dist/esm/types/chartType/roseParallel/zRoseParallel.d.ts +81 -0
  87. package/dist/esm/types/chartType/scatter/zScatter.d.ts +97 -4
  88. package/dist/esm/types/chartType/sunburst/zSunburst.d.ts +81 -0
  89. package/dist/esm/types/chartType/table/table.d.ts +11 -1
  90. package/dist/esm/types/chartType/table/zTable.d.ts +7 -0
  91. package/dist/esm/types/chartType/table/zTable.js +2 -1
  92. package/dist/esm/types/chartType/table/zTable.js.map +1 -1
  93. package/dist/esm/types/chartType/treeMap/zTreeMap.d.ts +81 -0
  94. package/dist/esm/types/dataSelector/selector.d.ts +53 -29
  95. package/dist/esm/types/dataSelector/selector.js +1 -1
  96. package/dist/esm/types/dataSelector/selector.js.map +1 -1
  97. package/dist/esm/types/properties/aggregation/aggregation.d.ts +9 -0
  98. package/dist/esm/types/properties/aggregation/aggregation.js +0 -0
  99. package/dist/esm/types/properties/aggregation/index.d.ts +2 -0
  100. package/dist/esm/types/properties/aggregation/index.js +2 -0
  101. package/dist/esm/types/properties/aggregation/zAggregation.d.ts +8 -0
  102. package/dist/esm/types/properties/aggregation/zAggregation.js +11 -0
  103. package/dist/esm/types/properties/aggregation/zAggregation.js.map +1 -0
  104. package/dist/esm/types/properties/annotation/annotation.d.ts +8 -2
  105. package/dist/esm/types/properties/annotation/zAnnotationPoint.d.ts +4 -1
  106. package/dist/esm/types/properties/config/annotation/zAnnotation.d.ts +8 -2
  107. package/dist/esm/types/properties/config/area.d.ts +170 -2
  108. package/dist/esm/types/properties/config/bar.d.ts +255 -3
  109. package/dist/esm/types/properties/config/boxplot.d.ts +85 -1
  110. package/dist/esm/types/properties/config/circlePacking.d.ts +81 -0
  111. package/dist/esm/types/properties/config/column.d.ts +255 -3
  112. package/dist/esm/types/properties/config/config.d.ts +2425 -19
  113. package/dist/esm/types/properties/config/dualAxis.d.ts +85 -1
  114. package/dist/esm/types/properties/config/funnel.d.ts +81 -0
  115. package/dist/esm/types/properties/config/heatmap.d.ts +81 -0
  116. package/dist/esm/types/properties/config/histogram.d.ts +85 -1
  117. package/dist/esm/types/properties/config/label/label.d.ts +18 -1
  118. package/dist/esm/types/properties/config/label/zLabel.d.ts +81 -0
  119. package/dist/esm/types/properties/config/label/zLabel.js +3 -2
  120. package/dist/esm/types/properties/config/label/zLabel.js.map +1 -1
  121. package/dist/esm/types/properties/config/label/zPieLabel.d.ts +81 -0
  122. package/dist/esm/types/properties/config/line.d.ts +85 -1
  123. package/dist/esm/types/properties/config/pie.d.ts +243 -0
  124. package/dist/esm/types/properties/config/race.d.ts +510 -6
  125. package/dist/esm/types/properties/config/rose.d.ts +162 -0
  126. package/dist/esm/types/properties/config/scatter.d.ts +85 -1
  127. package/dist/esm/types/properties/config/sunburst.d.ts +81 -0
  128. package/dist/esm/types/properties/config/treeMap.d.ts +81 -0
  129. package/dist/esm/types/properties/index.d.ts +2 -0
  130. package/dist/esm/types/properties/index.js +2 -0
  131. package/dist/esm/types/properties/markStyle/barStyle.d.ts +4 -1
  132. package/dist/esm/types/properties/markStyle/lineStyle.d.ts +4 -1
  133. package/dist/esm/types/properties/markStyle/markStyle.d.ts +32 -8
  134. package/dist/esm/types/properties/markStyle/pointStyle.d.ts +4 -1
  135. package/dist/esm/types/properties/markStyle/zAreaStyle.d.ts +4 -1
  136. package/dist/esm/types/properties/theme/customTheme.d.ts +4850 -38
  137. package/dist/esm/types/properties/totals/index.d.ts +2 -0
  138. package/dist/esm/types/properties/totals/index.js +2 -0
  139. package/dist/esm/types/properties/totals/totals.d.ts +34 -0
  140. package/dist/esm/types/properties/totals/totals.js +0 -0
  141. package/dist/esm/types/properties/totals/zTotals.d.ts +18 -0
  142. package/dist/esm/types/properties/totals/zTotals.js +13 -0
  143. package/dist/esm/types/properties/totals/zTotals.js.map +1 -0
  144. package/dist/umd/index.js +461 -388
  145. package/dist/umd/index.js.map +1 -1
  146. package/package.json +1 -1
  147. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.d.ts +0 -2
  148. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.js +0 -19
  149. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.js.map +0 -1
  150. package/dist/esm/pipeline/advanced/table/pipes/reshape/index.d.ts +0 -1
  151. package/dist/esm/pipeline/advanced/table/pipes/reshape/index.js +0 -2
  152. package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.d.ts +0 -2
  153. package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.js +0 -32
  154. package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/advanced/table/pipes/encoding/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/advanced/table/pipes/encoding/pivotTable.ts"],"sourcesContent":["import { unique } from 'remeda'\nimport { findAllMeasures } from 'src/pipeline/utils'\nimport type { AdvancedPipe, Dimension, Dimensions, Encoding, Measure, Measures } from 'src/types'\n\nexport const encodingForPivotTable: AdvancedPipe = (advancedVSeed) => {\n const { measureTree = [], dimensionTree = [] } = advancedVSeed\n const measures = findAllMeasures(measureTree)\n\n const hasDimensionEncoding = dimensionTree.some((item: Dimension) => item.encoding)\n const hasMeasureEncoding = measures.some((item: Measure) => item.encoding)\n const encoding: Encoding = {}\n\n if (hasDimensionEncoding) {\n generateDimensionEncoding(dimensionTree, encoding)\n } else {\n generateDefaultDimensionEncoding(dimensionTree, encoding)\n }\n\n if (hasMeasureEncoding) {\n generateMeasureEncoding(measures, encoding)\n } else {\n generateDefaultMeasureEncoding(measures, encoding)\n }\n\n return { ...advancedVSeed, encoding }\n}\n\n/**\n * --------------------维度--------------------\n */\nconst generateDefaultDimensionEncoding = (dimensions: Dimensions, encoding: Encoding) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n encoding.tooltip = uniqueDimIds\n encoding.row = []\n encoding.column = []\n\n uniqueDimIds.forEach((item, index) => {\n if (index % 2 === 0) {\n encoding.column!.push(item)\n } else {\n encoding.row!.push(item)\n }\n })\n}\nconst generateDimensionEncoding = (dimensions: Dimensions, encoding: Encoding) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n encoding.tooltip = uniqueDimIds\n encoding.row = []\n encoding.column = []\n\n dimensions.forEach((dim, index) => {\n const id = dim.id\n if (dim.encoding === 'row') {\n encoding.row!.push(id)\n } else if (dim.encoding === 'column') {\n encoding.column!.push(id)\n } else {\n if (index % 2 === 0) {\n encoding.column!.push(id)\n } else {\n encoding.row!.push(id)\n }\n }\n })\n}\n\n/**\n * --------------------指标--------------------\n */\nconst generateDefaultMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.tooltip = unique(measures.map((item) => item.id))\n encoding.detail = unique(\n measures.filter((item) => item.encoding === 'detail' || !item.encoding).map((item) => item.id),\n )\n}\nconst generateMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.tooltip = measures.map((item) => item.id)\n encoding.detail = unique(\n measures.filter((item) => item.encoding === 'detail' || !item.encoding).map((item) => item.id),\n )\n}\n"],"names":["encodingForPivotTable","advancedVSeed","measureTree","dimensionTree","measures","findAllMeasures","hasDimensionEncoding","item","hasMeasureEncoding","encoding","generateDimensionEncoding","generateDefaultDimensionEncoding","generateMeasureEncoding","generateDefaultMeasureEncoding","dimensions","uniqueDimIds","unique","d","index","dim","id"],"mappings":";;AAIO,MAAMA,wBAAsC,CAACC;IAClD,MAAM,EAAEC,cAAc,EAAE,EAAEC,gBAAgB,EAAE,EAAE,GAAGF;IACjD,MAAMG,WAAWC,gBAAgBH;IAEjC,MAAMI,uBAAuBH,cAAc,IAAI,CAAC,CAACI,OAAoBA,KAAK,QAAQ;IAClF,MAAMC,qBAAqBJ,SAAS,IAAI,CAAC,CAACG,OAAkBA,KAAK,QAAQ;IACzE,MAAME,WAAqB,CAAC;IAE5B,IAAIH,sBACFI,0BAA0BP,eAAeM;SAEzCE,iCAAiCR,eAAeM;IAGlD,IAAID,oBACFI,wBAAwBR,UAAUK;SAElCI,+BAA+BT,UAAUK;IAG3C,OAAO;QAAE,GAAGR,aAAa;QAAEQ;IAAS;AACtC;AAKA,MAAME,mCAAmC,CAACG,YAAwBL;IAChE,MAAMM,eAAeC,OAAOF,WAAW,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IACtDR,SAAS,OAAO,GAAGM;IACnBN,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;IAEpBM,aAAa,OAAO,CAAC,CAACR,MAAMW;QAC1B,IAAIA,QAAQ,MAAM,GAChBT,SAAS,MAAM,CAAE,IAAI,CAACF;aAEtBE,SAAS,GAAG,CAAE,IAAI,CAACF;IAEvB;AACF;AACA,MAAMG,4BAA4B,CAACI,YAAwBL;IACzD,MAAMM,eAAeC,OAAOF,WAAW,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IACtDR,SAAS,OAAO,GAAGM;IACnBN,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;IAEpBK,WAAW,OAAO,CAAC,CAACK,KAAKD;QACvB,MAAME,KAAKD,IAAI,EAAE;QACjB,IAAIA,AAAiB,UAAjBA,IAAI,QAAQ,EACdV,SAAS,GAAG,CAAE,IAAI,CAACW;aACd,IAAID,AAAiB,aAAjBA,IAAI,QAAQ,EACrBV,SAAS,MAAM,CAAE,IAAI,CAACW;aAEtB,IAAIF,QAAQ,MAAM,GAChBT,SAAS,MAAM,CAAE,IAAI,CAACW;aAEtBX,SAAS,GAAG,CAAE,IAAI,CAACW;IAGzB;AACF;AAKA,MAAMP,iCAAiC,CAACT,UAAoBK;IAC1DA,SAAS,OAAO,GAAGO,OAAOZ,SAAS,GAAG,CAAC,CAACG,OAASA,KAAK,EAAE;IACxDE,SAAS,MAAM,GAAGO,OAChBZ,SAAS,MAAM,CAAC,CAACG,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,IAAiB,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;AAEjG;AACA,MAAMK,0BAA0B,CAACR,UAAoBK;IACnDA,SAAS,OAAO,GAAGL,SAAS,GAAG,CAAC,CAACG,OAASA,KAAK,EAAE;IACjDE,SAAS,MAAM,GAAGO,OAChBZ,SAAS,MAAM,CAAC,CAACG,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,IAAiB,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;AAEjG"}
1
+ {"version":3,"file":"pipeline/advanced/table/pipes/encoding/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/advanced/table/pipes/encoding/pivotTable.ts"],"sourcesContent":["import { unique } from 'remeda'\nimport { MeasureId, MeasureName } from 'src/dataReshape'\nimport { findAllMeasures } from 'src/pipeline/utils'\nimport type { AdvancedPipe, Dimension, Dimensions, Encoding, Measure, Measures } from 'src/types'\n\nexport const encodingForPivotTable: AdvancedPipe = (advancedVSeed) => {\n const { measureTree = [], dimensionTree = [] } = advancedVSeed\n const measures = findAllMeasures(measureTree)\n\n // 过滤掉用户输入中可能存在的虚拟指标维度(__MeaId__ / __MeaName__),\n // pivotTable 不再做 data reshape,这些虚拟维度不再需要\n const filteredDimensionTree = dimensionTree.filter((dim: Dimension) => dim.id !== MeasureId && dim.id !== MeasureName)\n\n const hasDimensionEncoding = filteredDimensionTree.some((item: Dimension) => item.encoding)\n const hasMeasureEncoding = measures.some((item: Measure) => item.encoding)\n const encoding: Encoding = {}\n\n if (hasDimensionEncoding) {\n generateDimensionEncoding(filteredDimensionTree, encoding)\n } else {\n generateDefaultDimensionEncoding(filteredDimensionTree, encoding)\n }\n\n if (hasMeasureEncoding) {\n generateMeasureEncoding(measures, encoding)\n } else {\n generateDefaultMeasureEncoding(measures, encoding)\n }\n\n return { ...advancedVSeed, dimensionTree: filteredDimensionTree, encoding }\n}\n\n/**\n * --------------------维度--------------------\n */\nconst generateDefaultDimensionEncoding = (dimensions: Dimensions, encoding: Encoding) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n encoding.tooltip = uniqueDimIds\n encoding.row = []\n encoding.column = []\n\n uniqueDimIds.forEach((item, index) => {\n if (index % 2 === 0) {\n encoding.column!.push(item)\n } else {\n encoding.row!.push(item)\n }\n })\n}\nconst generateDimensionEncoding = (dimensions: Dimensions, encoding: Encoding) => {\n const uniqueDimIds = unique(dimensions.map((d) => d.id))\n encoding.tooltip = uniqueDimIds\n encoding.row = []\n encoding.column = []\n\n dimensions.forEach((dim, index) => {\n const id = dim.id\n if (dim.encoding === 'row') {\n encoding.row!.push(id)\n } else if (dim.encoding === 'column') {\n encoding.column!.push(id)\n } else {\n if (index % 2 === 0) {\n encoding.column!.push(id)\n } else {\n encoding.row!.push(id)\n }\n }\n })\n}\n\n/**\n * --------------------指标--------------------\n */\nconst generateDefaultMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.tooltip = unique(measures.map((item) => item.id))\n encoding.detail = unique(\n measures.filter((item) => item.encoding === 'detail' || !item.encoding).map((item) => item.id),\n )\n}\nconst generateMeasureEncoding = (measures: Measures, encoding: Encoding) => {\n encoding.tooltip = measures.map((item) => item.id)\n encoding.detail = unique(\n measures.filter((item) => item.encoding === 'detail' || !item.encoding).map((item) => item.id),\n )\n}\n"],"names":["encodingForPivotTable","advancedVSeed","measureTree","dimensionTree","measures","findAllMeasures","filteredDimensionTree","dim","MeasureId","MeasureName","hasDimensionEncoding","item","hasMeasureEncoding","encoding","generateDimensionEncoding","generateDefaultDimensionEncoding","generateMeasureEncoding","generateDefaultMeasureEncoding","dimensions","uniqueDimIds","unique","d","index","id"],"mappings":";;;AAKO,MAAMA,wBAAsC,CAACC;IAClD,MAAM,EAAEC,cAAc,EAAE,EAAEC,gBAAgB,EAAE,EAAE,GAAGF;IACjD,MAAMG,WAAWC,gBAAgBH;IAIjC,MAAMI,wBAAwBH,cAAc,MAAM,CAAC,CAACI,MAAmBA,IAAI,EAAE,KAAKC,aAAaD,IAAI,EAAE,KAAKE;IAE1G,MAAMC,uBAAuBJ,sBAAsB,IAAI,CAAC,CAACK,OAAoBA,KAAK,QAAQ;IAC1F,MAAMC,qBAAqBR,SAAS,IAAI,CAAC,CAACO,OAAkBA,KAAK,QAAQ;IACzE,MAAME,WAAqB,CAAC;IAE5B,IAAIH,sBACFI,0BAA0BR,uBAAuBO;SAEjDE,iCAAiCT,uBAAuBO;IAG1D,IAAID,oBACFI,wBAAwBZ,UAAUS;SAElCI,+BAA+Bb,UAAUS;IAG3C,OAAO;QAAE,GAAGZ,aAAa;QAAE,eAAeK;QAAuBO;IAAS;AAC5E;AAKA,MAAME,mCAAmC,CAACG,YAAwBL;IAChE,MAAMM,eAAeC,OAAOF,WAAW,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IACtDR,SAAS,OAAO,GAAGM;IACnBN,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;IAEpBM,aAAa,OAAO,CAAC,CAACR,MAAMW;QAC1B,IAAIA,QAAQ,MAAM,GAChBT,SAAS,MAAM,CAAE,IAAI,CAACF;aAEtBE,SAAS,GAAG,CAAE,IAAI,CAACF;IAEvB;AACF;AACA,MAAMG,4BAA4B,CAACI,YAAwBL;IACzD,MAAMM,eAAeC,OAAOF,WAAW,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;IACtDR,SAAS,OAAO,GAAGM;IACnBN,SAAS,GAAG,GAAG,EAAE;IACjBA,SAAS,MAAM,GAAG,EAAE;IAEpBK,WAAW,OAAO,CAAC,CAACX,KAAKe;QACvB,MAAMC,KAAKhB,IAAI,EAAE;QACjB,IAAIA,AAAiB,UAAjBA,IAAI,QAAQ,EACdM,SAAS,GAAG,CAAE,IAAI,CAACU;aACd,IAAIhB,AAAiB,aAAjBA,IAAI,QAAQ,EACrBM,SAAS,MAAM,CAAE,IAAI,CAACU;aAEtB,IAAID,QAAQ,MAAM,GAChBT,SAAS,MAAM,CAAE,IAAI,CAACU;aAEtBV,SAAS,GAAG,CAAE,IAAI,CAACU;IAGzB;AACF;AAKA,MAAMN,iCAAiC,CAACb,UAAoBS;IAC1DA,SAAS,OAAO,GAAGO,OAAOhB,SAAS,GAAG,CAAC,CAACO,OAASA,KAAK,EAAE;IACxDE,SAAS,MAAM,GAAGO,OAChBhB,SAAS,MAAM,CAAC,CAACO,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,IAAiB,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;AAEjG;AACA,MAAMK,0BAA0B,CAACZ,UAAoBS;IACnDA,SAAS,OAAO,GAAGT,SAAS,GAAG,CAAC,CAACO,OAASA,KAAK,EAAE;IACjDE,SAAS,MAAM,GAAGO,OAChBhB,SAAS,MAAM,CAAC,CAACO,OAASA,AAAkB,aAAlBA,KAAK,QAAQ,IAAiB,CAACA,KAAK,QAAQ,EAAE,GAAG,CAAC,CAACA,OAASA,KAAK,EAAE;AAEjG"}
@@ -2,7 +2,6 @@ export * from './init';
2
2
  export * from './records';
3
3
  export * from './config';
4
4
  export * from './default';
5
- export * from './reshape';
6
5
  export * from './encoding';
7
6
  export * from './cellStyle';
8
7
  export * from './page';
@@ -2,7 +2,6 @@ export * from "./init/index.js";
2
2
  export * from "./records/index.js";
3
3
  export * from "./config/index.js";
4
4
  export * from "./default/index.js";
5
- export * from "./reshape/index.js";
6
5
  export * from "./encoding/index.js";
7
6
  export * from "./cellStyle/index.js";
8
7
  export * from "./page/index.js";
@@ -1,6 +1,6 @@
1
1
  import { DATUM_HIDE_KEY, createFormatter, createFormatterByMeasure, findMeasureById } from "../../../../utils/index.js";
2
2
  import { isNumber, merge, uniqueBy } from "remeda";
3
- import { selector } from "../../../../../dataSelector/index.js";
3
+ import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/index.js";
4
4
  import { MeasureId } from "../../../../../dataReshape/constant.js";
5
5
  const label_label = (spec, context)=>{
6
6
  const result = {
@@ -45,7 +45,11 @@ const buildLabel = (label, vseedMeasures = [], vseedDimensions = [], advancedVSe
45
45
  const percentFormatter = createFormatter(percentFormat);
46
46
  const result = {
47
47
  visible: enable,
48
- dataFilter: (data)=>data.filter((entry)=>entry.data?.[DATUM_HIDE_KEY] !== true && selector(entry.data, label.selector, 'Or')),
48
+ dataFilter: (data)=>data.filter((entry)=>{
49
+ if (entry.data?.[DATUM_HIDE_KEY]) return false;
50
+ const shouldApply = label.dynamicFilter ? selectorWithDynamicFilter(entry.data, label.dynamicFilter, label.selector) : selector(entry.data, label.selector, 'Or');
51
+ return shouldApply;
52
+ }),
49
53
  formatMethod: (_, datum)=>{
50
54
  const result = [];
51
55
  const dimLabels = labelDims.map((item)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/label/label.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/label.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByMeasure, DATUM_HIDE_KEY, findMeasureById } from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Formatter,\n Label,\n Measure,\n Measures,\n NumFormat,\n VChartSpecPipe,\n} from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { selector } from 'src/dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\n\nexport const label: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [foldInfo],\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nexport const generateMeasureValue = (\n value: number | string,\n measure: Measure,\n labelAutoFormat?: boolean,\n numFormat: NumFormat = {},\n) => {\n const format = merge(numFormat, measure.numFormat || measure.format)\n const mergedMeasure = { ...measure, numFormat: format, autoFormat: labelAutoFormat || measure.autoFormat }\n\n const formatter = createFormatterByMeasure(mergedMeasure)\n return formatter(value)\n}\n\nexport const generateMeasurePercent = (value: number | string, sum: number, formatter: Formatter) => {\n if (value === undefined || value === null) return String(value)\n const num = Number(value)\n if (Number.isNaN(num)) return String(value)\n\n const percentValue = num / sum\n return formatter(percentValue)\n}\n\nexport const buildLabel = (\n label: Label,\n vseedMeasures: Measures = [],\n vseedDimensions: Dimensions = [],\n advancedVSeedDimensions: Dimensions,\n advancedVSeedMeasures: Measures,\n encoding: Encoding,\n foldInfoList: (Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>)[],\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasDimLabelEncoding = vseedDimensions.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseedDimensions.filter((item) => encoding.label?.includes(item.id))\n : showDimension\n ? advancedVSeedDimensions.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseedMeasures.filter((item) => encoding.label?.includes(item.id)),\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n return entry.data?.[DATUM_HIDE_KEY] !== true && selector(entry.data as Datum, label.selector, 'Or')\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const result = []\n\n const dimLabels = labelDims.map((item: Dimension) => {\n const id = item.id\n return datum[id] as number | string\n })\n\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(datum[item.id] as number | string, item, autoFormat, numFormat),\n )\n\n result.push(...dimLabels)\n\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure) {\n const measureValueLabel = generateMeasureValue(\n datum[measureValue] as number | string,\n measure,\n autoFormat,\n numFormat,\n )\n\n if (showValue) {\n result.push(measureValueLabel)\n }\n if (showValuePercent) {\n if (isNumber(datum['__VCHART_ARC_RATIO'])) {\n // 饼图/环图需要使用实际占比数据\n result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter))\n } else if (statistics && isNumber(statistics.sum)) {\n result.push(\n generateMeasurePercent(datum[measureValue] as number | string, statistics.sum, percentFormatter),\n )\n }\n }\n }\n })\n\n result.push(...meaLabels)\n\n if (wrap) {\n return result\n }\n return result.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2 // label 边框线宽度,不设置这个会导致智能反色失败\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["label","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","buildLabel","generateMeasureValue","value","measure","labelAutoFormat","numFormat","format","merge","mergedMeasure","formatter","createFormatterByMeasure","generateMeasurePercent","sum","String","num","Number","percentValue","vseedMeasures","vseedDimensions","advancedVSeedDimensions","advancedVSeedMeasures","foldInfoList","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","selector","_","datum","dimLabels","id","meaLabels","measureId","measureValue","statistics","findMeasureById","measureValueLabel","isNumber"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/label/label.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/chart/pipes/label/label.ts"],"sourcesContent":["import type { ILineChartSpec } from '@visactor/vchart'\nimport { createFormatter, createFormatterByMeasure, DATUM_HIDE_KEY, findMeasureById } from '../../../../utils'\nimport type {\n Datum,\n Dimension,\n Dimensions,\n Encoding,\n FoldInfo,\n Formatter,\n Label,\n Measure,\n Measures,\n NumFormat,\n VChartSpecPipe,\n} from 'src/types'\nimport { isNumber, merge, uniqueBy } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\n\nexport const label: VChartSpecPipe = (spec, context) => {\n const result = { ...spec } as ILineChartSpec\n const { advancedVSeed, vseed } = context\n const { datasetReshapeInfo } = advancedVSeed\n const { chartType, encoding } = advancedVSeed\n const baseConfig = advancedVSeed.config[chartType] as { label: Label }\n const foldInfo = datasetReshapeInfo[0].foldInfo as FoldInfo\n\n const { label } = baseConfig\n result.label = buildLabel(\n label,\n vseed.measures,\n vseed.dimensions,\n advancedVSeed.dimensions!,\n advancedVSeed.measures!,\n encoding as Encoding,\n [foldInfo],\n ) as unknown as ILineChartSpec['label']\n\n return result\n}\n\nexport const generateMeasureValue = (\n value: number | string,\n measure: Measure,\n labelAutoFormat?: boolean,\n numFormat: NumFormat = {},\n) => {\n const format = merge(numFormat, measure.numFormat || measure.format)\n const mergedMeasure = { ...measure, numFormat: format, autoFormat: labelAutoFormat || measure.autoFormat }\n\n const formatter = createFormatterByMeasure(mergedMeasure)\n return formatter(value)\n}\n\nexport const generateMeasurePercent = (value: number | string, sum: number, formatter: Formatter) => {\n if (value === undefined || value === null) return String(value)\n const num = Number(value)\n if (Number.isNaN(num)) return String(value)\n\n const percentValue = num / sum\n return formatter(percentValue)\n}\n\nexport const buildLabel = (\n label: Label,\n vseedMeasures: Measures = [],\n vseedDimensions: Dimensions = [],\n advancedVSeedDimensions: Dimensions,\n advancedVSeedMeasures: Measures,\n encoding: Encoding,\n foldInfoList: (Pick<FoldInfo, 'measureId' | 'measureValue'> & Partial<Pick<FoldInfo, 'statistics'>>)[],\n) => {\n const {\n enable,\n wrap,\n showValue,\n showValuePercent,\n showDimension,\n labelOverlap,\n labelColorSmartInvert,\n labelStroke,\n labelColor,\n labelFontSize,\n labelFontWeight,\n labelBackgroundColor,\n labelPosition,\n autoFormat,\n numFormat = {},\n } = label\n\n const hasDimLabelEncoding = vseedDimensions.some((item) => encoding.label?.includes(item.id))\n\n const labelDims = uniqueBy(\n hasDimLabelEncoding\n ? vseedDimensions.filter((item) => encoding.label?.includes(item.id))\n : showDimension\n ? advancedVSeedDimensions.filter((d) => d.id !== MeasureId && d.encoding !== 'row' && d.encoding !== 'column')\n : [],\n (item: Dimension) => item.id,\n )\n\n const labelMeas = uniqueBy(\n vseedMeasures.filter((item) => encoding.label?.includes(item.id)),\n (item: Measure) => item.id,\n )\n\n const percentFormat: NumFormat = merge(numFormat, {\n type: 'percent',\n } as NumFormat)\n\n const percentFormatter = createFormatter(percentFormat)\n\n const result = {\n visible: enable,\n dataFilter: (data: Datum[]) => {\n return data.filter((entry) => {\n if (entry.data?.[DATUM_HIDE_KEY]) {\n return false\n }\n const shouldApply = label.dynamicFilter\n ? selectorWithDynamicFilter(entry.data as Datum, label.dynamicFilter, label.selector)\n : selector(entry.data as Datum, label.selector, 'Or')\n return shouldApply\n })\n },\n formatMethod: (_: unknown, datum: Datum) => {\n const result = []\n\n const dimLabels = labelDims.map((item: Dimension) => {\n const id = item.id\n return datum[id] as number | string\n })\n\n const meaLabels = labelMeas.map((item: Measure) =>\n generateMeasureValue(datum[item.id] as number | string, item, autoFormat, numFormat),\n )\n\n result.push(...dimLabels)\n\n foldInfoList.forEach((foldInfo) => {\n const { measureId, measureValue, statistics } = foldInfo\n const measure = findMeasureById(advancedVSeedMeasures, datum[measureId] as string)\n if (measure) {\n const measureValueLabel = generateMeasureValue(\n datum[measureValue] as number | string,\n measure,\n autoFormat,\n numFormat,\n )\n\n if (showValue) {\n result.push(measureValueLabel)\n }\n if (showValuePercent) {\n if (isNumber(datum['__VCHART_ARC_RATIO'])) {\n // 饼图/环图需要使用实际占比数据\n result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter))\n } else if (statistics && isNumber(statistics.sum)) {\n result.push(\n generateMeasurePercent(datum[measureValue] as number | string, statistics.sum, percentFormatter),\n )\n }\n }\n }\n })\n\n result.push(...meaLabels)\n\n if (wrap) {\n return result\n }\n return result.join(' ')\n },\n syncState: true,\n position: labelPosition,\n style: {\n stroke: labelStroke,\n fill: labelColor,\n fontSize: labelFontSize,\n fontWeight: labelFontWeight,\n background: labelBackgroundColor,\n },\n smartInvert: labelColorSmartInvert,\n }\n\n if (labelColorSmartInvert) {\n ;(result.style as any).lineWidth = 2 // label 边框线宽度,不设置这个会导致智能反色失败\n }\n\n if (labelOverlap) {\n ;(result as any).overlap = {\n hideOnHit: true,\n clampForce: true,\n }\n }\n\n return result\n}\n"],"names":["label","spec","context","result","advancedVSeed","vseed","datasetReshapeInfo","chartType","encoding","baseConfig","foldInfo","buildLabel","generateMeasureValue","value","measure","labelAutoFormat","numFormat","format","merge","mergedMeasure","formatter","createFormatterByMeasure","generateMeasurePercent","sum","String","num","Number","percentValue","vseedMeasures","vseedDimensions","advancedVSeedDimensions","advancedVSeedMeasures","foldInfoList","enable","wrap","showValue","showValuePercent","showDimension","labelOverlap","labelColorSmartInvert","labelStroke","labelColor","labelFontSize","labelFontWeight","labelBackgroundColor","labelPosition","autoFormat","hasDimLabelEncoding","item","labelDims","uniqueBy","d","MeasureId","labelMeas","percentFormat","percentFormatter","createFormatter","data","entry","DATUM_HIDE_KEY","shouldApply","selectorWithDynamicFilter","selector","_","datum","dimLabels","id","meaLabels","measureId","measureValue","statistics","findMeasureById","measureValueLabel","isNumber"],"mappings":"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"}
@@ -4,8 +4,8 @@ const pivotTableSpecPipeline = [
4
4
  initPivotTable,
5
5
  pivotColumns,
6
6
  pivotRows,
7
- titleOnDimension,
8
7
  pivotIndicators,
8
+ titleOnDimension,
9
9
  bodyStyle,
10
10
  headerStyle,
11
11
  rowHeaderStyle,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipeline/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/pivotTable.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initPivotTable,\n pivotColumns,\n pivotRows,\n pivotIndicators,\n bodyStyle,\n headerStyle,\n rowHeaderStyle,\n cornerHeaderStyle,\n tableThemeStyle,\n selectionStyle,\n titleOnDimension,\n pivotTableBodyCell,\n} from '../pipes'\nimport { dataConfig } from '../pipes/indicators/pivotDataConfig'\n\nexport const pivotTableSpecPipeline: SpecPipeline = [\n initPivotTable,\n pivotColumns,\n pivotRows,\n titleOnDimension,\n pivotIndicators,\n bodyStyle,\n headerStyle,\n rowHeaderStyle,\n cornerHeaderStyle,\n tableThemeStyle,\n selectionStyle,\n dataConfig,\n pivotTableBodyCell,\n]\n"],"names":["pivotTableSpecPipeline","initPivotTable","pivotColumns","pivotRows","titleOnDimension","pivotIndicators","bodyStyle","headerStyle","rowHeaderStyle","cornerHeaderStyle","tableThemeStyle","selectionStyle","dataConfig","pivotTableBodyCell"],"mappings":";;AAiBO,MAAMA,yBAAuC;IAClDC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;CACD"}
1
+ {"version":3,"file":"pipeline/spec/table/pipeline/pivotTable.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/pivotTable.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initPivotTable,\n pivotColumns,\n pivotRows,\n pivotIndicators,\n bodyStyle,\n headerStyle,\n rowHeaderStyle,\n cornerHeaderStyle,\n tableThemeStyle,\n selectionStyle,\n titleOnDimension,\n pivotTableBodyCell,\n} from '../pipes'\nimport { dataConfig } from '../pipes/indicators/pivotDataConfig'\n\nexport const pivotTableSpecPipeline: SpecPipeline = [\n initPivotTable,\n pivotColumns,\n pivotRows,\n pivotIndicators,\n titleOnDimension,\n bodyStyle,\n headerStyle,\n rowHeaderStyle,\n cornerHeaderStyle,\n tableThemeStyle,\n selectionStyle,\n dataConfig,\n pivotTableBodyCell,\n]\n"],"names":["pivotTableSpecPipeline","initPivotTable","pivotColumns","pivotRows","pivotIndicators","titleOnDimension","bodyStyle","headerStyle","rowHeaderStyle","cornerHeaderStyle","tableThemeStyle","selectionStyle","dataConfig","pivotTableBodyCell"],"mappings":";;AAiBO,MAAMA,yBAAuC;IAClDC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;CACD"}
@@ -1,10 +1,12 @@
1
- import { bodyStyle, dimensionTreeToColumns, headerStyle, initTable, measureTreeToColumns, selectionStyle, tableBodyCell, tableThemeStyle } from "../pipes/index.js";
1
+ import { bodyStyle, bottomFrozenStyle, columnsAggregation, dimensionTreeToColumns, headerStyle, initTable, measureTreeToColumns, selectionStyle, tableBodyCell, tableThemeStyle } from "../pipes/index.js";
2
2
  const tableSpecPipeline = [
3
3
  initTable,
4
4
  dimensionTreeToColumns,
5
5
  measureTreeToColumns,
6
+ columnsAggregation,
6
7
  bodyStyle,
7
8
  headerStyle,
9
+ bottomFrozenStyle,
8
10
  tableThemeStyle,
9
11
  selectionStyle,
10
12
  tableBodyCell
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipeline/table.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/table.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n bodyStyle,\n headerStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n} from '../pipes'\n\nexport const tableSpecPipeline: SpecPipeline = [\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n bodyStyle,\n headerStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n]\n"],"names":["tableSpecPipeline","initTable","dimensionTreeToColumns","measureTreeToColumns","bodyStyle","headerStyle","tableThemeStyle","selectionStyle","tableBodyCell"],"mappings":";AAYO,MAAMA,oBAAkC;IAC7CC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;CACD"}
1
+ {"version":3,"file":"pipeline/spec/table/pipeline/table.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipeline/table.ts"],"sourcesContent":["import type { SpecPipeline } from 'src/types'\nimport {\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n columnsAggregation,\n bodyStyle,\n headerStyle,\n bottomFrozenStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n} from '../pipes'\n\nexport const tableSpecPipeline: SpecPipeline = [\n initTable,\n dimensionTreeToColumns,\n measureTreeToColumns,\n columnsAggregation,\n bodyStyle,\n headerStyle,\n bottomFrozenStyle,\n tableThemeStyle,\n selectionStyle,\n tableBodyCell,\n]\n"],"names":["tableSpecPipeline","initTable","dimensionTreeToColumns","measureTreeToColumns","columnsAggregation","bodyStyle","headerStyle","bottomFrozenStyle","tableThemeStyle","selectionStyle","tableBodyCell"],"mappings":";AAcO,MAAMA,oBAAkC;IAC7CC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;CACD"}
@@ -1,8 +1,7 @@
1
1
  import { array } from "@visactor/vutils";
2
- import { isNullish, isString } from "remeda";
2
+ import { isString } from "remeda";
3
3
  import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/selector.js";
4
4
  import { getCellOriginalDataByDatum, pickBodyCellStyle } from "./common.js";
5
- import { FoldMeasureValue, MeasureId } from "../../../../../dataReshape/index.js";
6
5
  const pivotTableBodyCell = (spec, context)=>{
7
6
  const { advancedVSeed } = context;
8
7
  const { cellStyle } = advancedVSeed;
@@ -29,7 +28,6 @@ const pivotTableBodyCell = (spec, context)=>{
29
28
  headerPaths.forEach((path)=>{
30
29
  if (path.dimensionKey) originalDatum[path.dimensionKey] = path.value;
31
30
  });
32
- if (!isNullish(originalDatum[MeasureId]) && !isNullish(originalDatum[FoldMeasureValue])) originalDatum[originalDatum[MeasureId]] = originalDatum[FoldMeasureValue];
33
31
  const currentCellData = getCellOriginalDataByDatum(datum, hasDynamicFilter, originalDatum);
34
32
  const mergedStyle = bodyCellStyleList.reduce((result, style)=>{
35
33
  const shouldApply = style.dynamicFilter ? selectorWithDynamicFilter(currentCellData || originalDatum, style.dynamicFilter, style.selector) : selector(originalDatum, style.selector);
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/cellStyle/pivot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/cellStyle/pivot.ts"],"sourcesContent":["import type { IIndicator, PivotTableConstructorOptions } from '@visactor/vtable'\nimport { array } from '@visactor/vutils'\nimport { isNullish, isString } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector/selector'\nimport type { BodyCellStyle, Datum, PivotTableSpecPipe } from 'src/types'\nimport { getCellOriginalDataByDatum, pickBodyCellStyle } from './common'\nimport { FoldMeasureValue, MeasureId } from 'src/dataReshape'\n\nexport const pivotTableBodyCell: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { cellStyle } = advancedVSeed\n const bodyCellStyle = cellStyle?.bodyCellStyle\n\n if (!bodyCellStyle) {\n return spec as PivotTableConstructorOptions\n }\n const bodyCellStyleList = array(bodyCellStyle) as BodyCellStyle[]\n const indicators = (spec as PivotTableConstructorOptions).indicators || []\n const selectedPos: { col: number; row: number }[] = []\n const hasDynamicFilter = bodyCellStyleList.some((style) => !!style.dynamicFilter)\n\n const newIndicators = indicators.map((ind) => {\n const newInd = isString(ind)\n ? ({\n indicatorKey: ind,\n } as IIndicator)\n : ind\n\n const { indicatorKey } = newInd\n\n newInd.style = (datum: any) => {\n const { dataValue, cellHeaderPaths } = datum\n const headerPaths = [...cellHeaderPaths.colHeaderPaths, ...cellHeaderPaths.rowHeaderPaths]\n\n const originalDatum: Datum = {\n [indicatorKey]: dataValue,\n }\n\n headerPaths.forEach((path: any) => {\n if (path.dimensionKey) {\n originalDatum[path.dimensionKey] = path.value\n }\n })\n\n if (!isNullish(originalDatum[MeasureId]) && !isNullish(originalDatum[FoldMeasureValue])) {\n originalDatum[originalDatum[MeasureId]] = originalDatum[FoldMeasureValue]\n }\n const currentCellData = getCellOriginalDataByDatum(datum, hasDynamicFilter, originalDatum)\n\n const mergedStyle = bodyCellStyleList.reduce<Record<string, any>>((result, style) => {\n const shouldApply = style.dynamicFilter\n ? selectorWithDynamicFilter(currentCellData || originalDatum, style.dynamicFilter, style.selector)\n : selector(originalDatum, style.selector)\n if (shouldApply) {\n if (selectedPos.length && selectedPos[0].col === datum?.col && selectedPos[0].row === datum?.row) {\n // 说明重复进入了,清空历史\n selectedPos.length = 0\n }\n selectedPos.push({\n col: datum?.col,\n row: datum?.row,\n })\n return {\n ...result,\n ...pickBodyCellStyle(style),\n }\n }\n\n return result\n }, {})\n\n return mergedStyle\n }\n return newInd\n })\n return {\n ...spec,\n runningConfig: {\n ...((spec as any)?.runningConfig || {}),\n selectedPos,\n },\n indicators: newIndicators,\n } as PivotTableConstructorOptions\n}\n"],"names":["pivotTableBodyCell","spec","context","advancedVSeed","cellStyle","bodyCellStyle","bodyCellStyleList","array","indicators","selectedPos","hasDynamicFilter","style","newIndicators","ind","newInd","isString","indicatorKey","datum","dataValue","cellHeaderPaths","headerPaths","originalDatum","path","isNullish","MeasureId","FoldMeasureValue","currentCellData","getCellOriginalDataByDatum","mergedStyle","result","shouldApply","selectorWithDynamicFilter","selector","pickBodyCellStyle"],"mappings":";;;;;AAQO,MAAMA,qBAAyC,CAACC,MAAMC;IAC3D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,SAAS,EAAE,GAAGD;IACtB,MAAME,gBAAgBD,WAAW;IAEjC,IAAI,CAACC,eACH,OAAOJ;IAET,MAAMK,oBAAoBC,MAAMF;IAChC,MAAMG,aAAcP,KAAsC,UAAU,IAAI,EAAE;IAC1E,MAAMQ,cAA8C,EAAE;IACtD,MAAMC,mBAAmBJ,kBAAkB,IAAI,CAAC,CAACK,QAAU,CAAC,CAACA,MAAM,aAAa;IAEhF,MAAMC,gBAAgBJ,WAAW,GAAG,CAAC,CAACK;QACpC,MAAMC,SAASC,SAASF,OACnB;YACC,cAAcA;QAChB,IACAA;QAEJ,MAAM,EAAEG,YAAY,EAAE,GAAGF;QAEzBA,OAAO,KAAK,GAAG,CAACG;YACd,MAAM,EAAEC,SAAS,EAAEC,eAAe,EAAE,GAAGF;YACvC,MAAMG,cAAc;mBAAID,gBAAgB,cAAc;mBAAKA,gBAAgB,cAAc;aAAC;YAE1F,MAAME,gBAAuB;gBAC3B,CAACL,aAAa,EAAEE;YAClB;YAEAE,YAAY,OAAO,CAAC,CAACE;gBACnB,IAAIA,KAAK,YAAY,EACnBD,aAAa,CAACC,KAAK,YAAY,CAAC,GAAGA,KAAK,KAAK;YAEjD;YAEA,IAAI,CAACC,UAAUF,aAAa,CAACG,UAAU,KAAK,CAACD,UAAUF,aAAa,CAACI,iBAAiB,GACpFJ,aAAa,CAACA,aAAa,CAACG,UAAU,CAAC,GAAGH,aAAa,CAACI,iBAAiB;YAE3E,MAAMC,kBAAkBC,2BAA2BV,OAAOP,kBAAkBW;YAE5E,MAAMO,cAActB,kBAAkB,MAAM,CAAsB,CAACuB,QAAQlB;gBACzE,MAAMmB,cAAcnB,MAAM,aAAa,GACnCoB,0BAA0BL,mBAAmBL,eAAeV,MAAM,aAAa,EAAEA,MAAM,QAAQ,IAC/FqB,SAASX,eAAeV,MAAM,QAAQ;gBAC1C,IAAImB,aAAa;oBACf,IAAIrB,YAAY,MAAM,IAAIA,WAAW,CAAC,EAAE,CAAC,GAAG,KAAKQ,OAAO,OAAOR,WAAW,CAAC,EAAE,CAAC,GAAG,KAAKQ,OAAO,KAE3FR,YAAY,MAAM,GAAG;oBAEvBA,YAAY,IAAI,CAAC;wBACf,KAAKQ,OAAO;wBACZ,KAAKA,OAAO;oBACd;oBACA,OAAO;wBACL,GAAGY,MAAM;wBACT,GAAGI,kBAAkBtB,MAAM;oBAC7B;gBACF;gBAEA,OAAOkB;YACT,GAAG,CAAC;YAEJ,OAAOD;QACT;QACA,OAAOd;IACT;IACA,OAAO;QACL,GAAGb,IAAI;QACP,eAAe;YACb,GAAKA,MAAc,iBAAiB,CAAC,CAAC;YACtCQ;QACF;QACA,YAAYG;IACd;AACF"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/cellStyle/pivot.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/cellStyle/pivot.ts"],"sourcesContent":["import type { IIndicator, PivotTableConstructorOptions } from '@visactor/vtable'\nimport { array } from '@visactor/vutils'\nimport { isString } from 'remeda'\nimport { selector, selectorWithDynamicFilter } from 'src/dataSelector/selector'\nimport type { BodyCellStyle, Datum, PivotTableSpecPipe } from 'src/types'\nimport { getCellOriginalDataByDatum, pickBodyCellStyle } from './common'\n\nexport const pivotTableBodyCell: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const { cellStyle } = advancedVSeed\n const bodyCellStyle = cellStyle?.bodyCellStyle\n\n if (!bodyCellStyle) {\n return spec as PivotTableConstructorOptions\n }\n const bodyCellStyleList = array(bodyCellStyle) as BodyCellStyle[]\n const indicators = (spec as PivotTableConstructorOptions).indicators || []\n const selectedPos: { col: number; row: number }[] = []\n const hasDynamicFilter = bodyCellStyleList.some((style) => !!style.dynamicFilter)\n\n const newIndicators = indicators.map((ind) => {\n const newInd = isString(ind)\n ? ({\n indicatorKey: ind,\n } as IIndicator)\n : ind\n\n const { indicatorKey } = newInd\n\n newInd.style = (datum: any) => {\n const { dataValue, cellHeaderPaths } = datum\n const headerPaths = [...cellHeaderPaths.colHeaderPaths, ...cellHeaderPaths.rowHeaderPaths]\n\n const originalDatum: Datum = {\n [indicatorKey]: dataValue,\n }\n\n headerPaths.forEach((path: any) => {\n if (path.dimensionKey) {\n originalDatum[path.dimensionKey] = path.value\n }\n })\n\n const currentCellData = getCellOriginalDataByDatum(datum, hasDynamicFilter, originalDatum)\n\n const mergedStyle = bodyCellStyleList.reduce<Record<string, any>>((result, style) => {\n const shouldApply = style.dynamicFilter\n ? selectorWithDynamicFilter(currentCellData || originalDatum, style.dynamicFilter, style.selector)\n : selector(originalDatum, style.selector)\n if (shouldApply) {\n if (selectedPos.length && selectedPos[0].col === datum?.col && selectedPos[0].row === datum?.row) {\n // 说明重复进入了,清空历史\n selectedPos.length = 0\n }\n selectedPos.push({\n col: datum?.col,\n row: datum?.row,\n })\n return {\n ...result,\n ...pickBodyCellStyle(style),\n }\n }\n\n return result\n }, {})\n\n return mergedStyle\n }\n return newInd\n })\n return {\n ...spec,\n runningConfig: {\n ...((spec as any)?.runningConfig || {}),\n selectedPos,\n },\n indicators: newIndicators,\n } as PivotTableConstructorOptions\n}\n"],"names":["pivotTableBodyCell","spec","context","advancedVSeed","cellStyle","bodyCellStyle","bodyCellStyleList","array","indicators","selectedPos","hasDynamicFilter","style","newIndicators","ind","newInd","isString","indicatorKey","datum","dataValue","cellHeaderPaths","headerPaths","originalDatum","path","currentCellData","getCellOriginalDataByDatum","mergedStyle","result","shouldApply","selectorWithDynamicFilter","selector","pickBodyCellStyle"],"mappings":";;;;AAOO,MAAMA,qBAAyC,CAACC,MAAMC;IAC3D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAM,EAAEE,SAAS,EAAE,GAAGD;IACtB,MAAME,gBAAgBD,WAAW;IAEjC,IAAI,CAACC,eACH,OAAOJ;IAET,MAAMK,oBAAoBC,MAAMF;IAChC,MAAMG,aAAcP,KAAsC,UAAU,IAAI,EAAE;IAC1E,MAAMQ,cAA8C,EAAE;IACtD,MAAMC,mBAAmBJ,kBAAkB,IAAI,CAAC,CAACK,QAAU,CAAC,CAACA,MAAM,aAAa;IAEhF,MAAMC,gBAAgBJ,WAAW,GAAG,CAAC,CAACK;QACpC,MAAMC,SAASC,SAASF,OACnB;YACC,cAAcA;QAChB,IACAA;QAEJ,MAAM,EAAEG,YAAY,EAAE,GAAGF;QAEzBA,OAAO,KAAK,GAAG,CAACG;YACd,MAAM,EAAEC,SAAS,EAAEC,eAAe,EAAE,GAAGF;YACvC,MAAMG,cAAc;mBAAID,gBAAgB,cAAc;mBAAKA,gBAAgB,cAAc;aAAC;YAE1F,MAAME,gBAAuB;gBAC3B,CAACL,aAAa,EAAEE;YAClB;YAEAE,YAAY,OAAO,CAAC,CAACE;gBACnB,IAAIA,KAAK,YAAY,EACnBD,aAAa,CAACC,KAAK,YAAY,CAAC,GAAGA,KAAK,KAAK;YAEjD;YAEA,MAAMC,kBAAkBC,2BAA2BP,OAAOP,kBAAkBW;YAE5E,MAAMI,cAAcnB,kBAAkB,MAAM,CAAsB,CAACoB,QAAQf;gBACzE,MAAMgB,cAAchB,MAAM,aAAa,GACnCiB,0BAA0BL,mBAAmBF,eAAeV,MAAM,aAAa,EAAEA,MAAM,QAAQ,IAC/FkB,SAASR,eAAeV,MAAM,QAAQ;gBAC1C,IAAIgB,aAAa;oBACf,IAAIlB,YAAY,MAAM,IAAIA,WAAW,CAAC,EAAE,CAAC,GAAG,KAAKQ,OAAO,OAAOR,WAAW,CAAC,EAAE,CAAC,GAAG,KAAKQ,OAAO,KAE3FR,YAAY,MAAM,GAAG;oBAEvBA,YAAY,IAAI,CAAC;wBACf,KAAKQ,OAAO;wBACZ,KAAKA,OAAO;oBACd;oBACA,OAAO;wBACL,GAAGS,MAAM;wBACT,GAAGI,kBAAkBnB,MAAM;oBAC7B;gBACF;gBAEA,OAAOe;YACT,GAAG,CAAC;YAEJ,OAAOD;QACT;QACA,OAAOX;IACT;IACA,OAAO;QACL,GAAGb,IAAI;QACP,eAAe;YACb,GAAKA,MAAc,iBAAiB,CAAC,CAAC;YACtCQ;QACF;QACA,YAAYG;IACd;AACF"}
@@ -0,0 +1,8 @@
1
+ import type { ListTableSpecPipe } from '../../../../../types';
2
+ /**
3
+ * @description 为表格列添加汇总行配置
4
+ * - 只对度量列应用聚合函数
5
+ * - 在第一个维度列显示汇总标签
6
+ * - 其他维度列留空
7
+ */
8
+ export declare const columnsAggregation: ListTableSpecPipe;
@@ -0,0 +1,76 @@
1
+ import { intl } from "../../../../../i18n/index.js";
2
+ import { createFormatterByMeasure, findTreeNodesBy, isMeasure } from "../../../../utils/index.js";
3
+ import { extractLeafIds } from "./utils.js";
4
+ const columnsAggregation = (spec, context)=>{
5
+ const { vseed, advancedVSeed } = context;
6
+ const { totals } = vseed;
7
+ if (!totals) return spec;
8
+ const totalLabelMap = {
9
+ sum: intl.i18n`合计`,
10
+ avg: intl.i18n`平均`,
11
+ max: intl.i18n`最大值`,
12
+ min: intl.i18n`最小值`,
13
+ count: intl.i18n`计数`
14
+ };
15
+ const totalLabel = totalLabelMap[totals] || intl.i18n`合计`;
16
+ const vtableAggregationMap = {
17
+ sum: 'SUM',
18
+ avg: 'AVG',
19
+ max: 'MAX',
20
+ min: 'MIN',
21
+ count: 'COUNT'
22
+ };
23
+ const vtableAggregationType = vtableAggregationMap[totals] || 'SUM';
24
+ const dimensionIds = extractLeafIds(advancedVSeed.dimensionTree || []);
25
+ const measureTree = advancedVSeed.measureTree || [];
26
+ const measureIds = extractLeafIds(measureTree);
27
+ const leafMeasures = findTreeNodesBy(measureTree, ()=>true);
28
+ const measureMap = new Map();
29
+ leafMeasures.forEach((node)=>{
30
+ if (isMeasure(node)) measureMap.set(node.id, node);
31
+ });
32
+ let isFirstDimensionColumn = true;
33
+ const updatedColumns = spec.columns?.map((column)=>{
34
+ const fieldKey = column.field;
35
+ if (dimensionIds.has(fieldKey)) {
36
+ if (isFirstDimensionColumn) {
37
+ isFirstDimensionColumn = false;
38
+ return {
39
+ ...column,
40
+ aggregation: {
41
+ aggregationType: 'NONE',
42
+ formatFun: ()=>totalLabel
43
+ }
44
+ };
45
+ }
46
+ return {
47
+ ...column,
48
+ aggregation: {
49
+ aggregationType: 'NONE',
50
+ formatFun: ()=>''
51
+ }
52
+ };
53
+ }
54
+ if (measureIds.has(fieldKey)) {
55
+ const measure = measureMap.get(fieldKey);
56
+ const formatter = createFormatterByMeasure(measure);
57
+ return {
58
+ ...column,
59
+ aggregation: {
60
+ aggregationType: vtableAggregationType,
61
+ showOnTop: false,
62
+ formatFun: (value)=>formatter(value)
63
+ }
64
+ };
65
+ }
66
+ return column;
67
+ });
68
+ return {
69
+ ...spec,
70
+ columns: updatedColumns,
71
+ bottomFrozenRowCount: 1
72
+ };
73
+ };
74
+ export { columnsAggregation };
75
+
76
+ //# sourceMappingURL=columnsAggregation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/columnsAggregation.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/columnsAggregation.ts"],"sourcesContent":["import { intl } from 'src/i18n'\nimport { createFormatterByMeasure, isMeasure, findTreeNodesBy } from 'src/pipeline/utils'\nimport type { ListTableSpecPipe, Measure } from 'src/types'\nimport { extractLeafIds } from './utils'\n\n/**\n * @description 为表格列添加汇总行配置\n * - 只对度量列应用聚合函数\n * - 在第一个维度列显示汇总标签\n * - 其他维度列留空\n */\nexport const columnsAggregation: ListTableSpecPipe = (spec, context) => {\n const { vseed, advancedVSeed } = context\n const { totals } = vseed as any\n\n if (!totals) {\n return spec\n }\n\n // 映射汇总类型到 i18n 标签\n const totalLabelMap: Record<string, string> = {\n sum: intl.i18n`合计`,\n avg: intl.i18n`平均`,\n max: intl.i18n`最大值`,\n min: intl.i18n`最小值`,\n count: intl.i18n`计数`,\n }\n\n const totalLabel = totalLabelMap[totals] || intl.i18n`合计`\n\n // 映射到 VTable 的聚合类型\n const vtableAggregationMap: Record<string, string> = {\n sum: 'SUM',\n avg: 'AVG',\n max: 'MAX',\n min: 'MIN',\n count: 'COUNT',\n }\n\n const vtableAggregationType = vtableAggregationMap[totals] || 'SUM'\n\n // 从树形结构中提取所有叶子节点的ID\n const dimensionIds = extractLeafIds(advancedVSeed.dimensionTree || [])\n const measureTree = advancedVSeed.measureTree || []\n const measureIds = extractLeafIds(measureTree)\n\n // 创建 measure id 到 measure 对象的映射\n const leafMeasures = findTreeNodesBy(measureTree, () => true)\n const measureMap = new Map<string, Measure>()\n leafMeasures.forEach((node) => {\n if (isMeasure(node)) {\n measureMap.set(node.id, node as Measure)\n }\n })\n\n let isFirstDimensionColumn = true\n\n const updatedColumns = spec.columns?.map((column: any) => {\n const fieldKey = column.field\n\n // 维度列处理\n if (dimensionIds.has(fieldKey)) {\n if (isFirstDimensionColumn) {\n isFirstDimensionColumn = false\n return {\n ...column,\n aggregation: {\n aggregationType: 'NONE',\n formatFun: () => totalLabel,\n },\n }\n }\n\n // 其他维度列留空\n return {\n ...column,\n aggregation: {\n aggregationType: 'NONE',\n formatFun: () => '',\n },\n }\n }\n\n // 度量列处理 - 应用聚合函数和格式化\n if (measureIds.has(fieldKey)) {\n const measure = measureMap.get(fieldKey)\n const formatter = createFormatterByMeasure(measure)\n\n return {\n ...column,\n aggregation: {\n aggregationType: vtableAggregationType,\n showOnTop: false,\n formatFun: (value: number | string | undefined) => formatter(value),\n },\n }\n }\n\n return column\n })\n\n return {\n ...spec,\n columns: updatedColumns,\n bottomFrozenRowCount: 1,\n }\n}\n"],"names":["columnsAggregation","spec","context","vseed","advancedVSeed","totals","totalLabelMap","intl","totalLabel","vtableAggregationMap","vtableAggregationType","dimensionIds","extractLeafIds","measureTree","measureIds","leafMeasures","findTreeNodesBy","measureMap","Map","node","isMeasure","isFirstDimensionColumn","updatedColumns","column","fieldKey","measure","formatter","createFormatterByMeasure","value"],"mappings":";;;AAWO,MAAMA,qBAAwC,CAACC,MAAMC;IAC1D,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAE,GAAGF;IACjC,MAAM,EAAEG,MAAM,EAAE,GAAGF;IAEnB,IAAI,CAACE,QACH,OAAOJ;IAIT,MAAMK,gBAAwC;QAC5C,KAAKC,KAAK,IAAI,CAAC,EAAE,CAAC;QAClB,KAAKA,KAAK,IAAI,CAAC,EAAE,CAAC;QAClB,KAAKA,KAAK,IAAI,CAAC,GAAG,CAAC;QACnB,KAAKA,KAAK,IAAI,CAAC,GAAG,CAAC;QACnB,OAAOA,KAAK,IAAI,CAAC,EAAE,CAAC;IACtB;IAEA,MAAMC,aAAaF,aAAa,CAACD,OAAO,IAAIE,KAAK,IAAI,CAAC,EAAE,CAAC;IAGzD,MAAME,uBAA+C;QACnD,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,OAAO;IACT;IAEA,MAAMC,wBAAwBD,oBAAoB,CAACJ,OAAO,IAAI;IAG9D,MAAMM,eAAeC,eAAeR,cAAc,aAAa,IAAI,EAAE;IACrE,MAAMS,cAAcT,cAAc,WAAW,IAAI,EAAE;IACnD,MAAMU,aAAaF,eAAeC;IAGlC,MAAME,eAAeC,gBAAgBH,aAAa,IAAM;IACxD,MAAMI,aAAa,IAAIC;IACvBH,aAAa,OAAO,CAAC,CAACI;QACpB,IAAIC,UAAUD,OACZF,WAAW,GAAG,CAACE,KAAK,EAAE,EAAEA;IAE5B;IAEA,IAAIE,yBAAyB;IAE7B,MAAMC,iBAAiBrB,KAAK,OAAO,EAAE,IAAI,CAACsB;QACxC,MAAMC,WAAWD,OAAO,KAAK;QAG7B,IAAIZ,aAAa,GAAG,CAACa,WAAW;YAC9B,IAAIH,wBAAwB;gBAC1BA,yBAAyB;gBACzB,OAAO;oBACL,GAAGE,MAAM;oBACT,aAAa;wBACX,iBAAiB;wBACjB,WAAW,IAAMf;oBACnB;gBACF;YACF;YAGA,OAAO;gBACL,GAAGe,MAAM;gBACT,aAAa;oBACX,iBAAiB;oBACjB,WAAW,IAAM;gBACnB;YACF;QACF;QAGA,IAAIT,WAAW,GAAG,CAACU,WAAW;YAC5B,MAAMC,UAAUR,WAAW,GAAG,CAACO;YAC/B,MAAME,YAAYC,yBAAyBF;YAE3C,OAAO;gBACL,GAAGF,MAAM;gBACT,aAAa;oBACX,iBAAiBb;oBACjB,WAAW;oBACX,WAAW,CAACkB,QAAuCF,UAAUE;gBAC/D;YACF;QACF;QAEA,OAAOL;IACT;IAEA,OAAO;QACL,GAAGtB,IAAI;QACP,SAASqB;QACT,sBAAsB;IACxB;AACF"}
@@ -1,4 +1,5 @@
1
1
  import { isMeasure } from "../../../../utils/index.js";
2
+ import { treeTreeToColumns } from "./utils.js";
2
3
  const dimensionTreeToColumns = (spec, context)=>{
3
4
  const { advancedVSeed } = context;
4
5
  const dimensionTree = advancedVSeed.dimensionTree;
@@ -20,33 +21,6 @@ const dimensionTreeToColumns = (spec, context)=>{
20
21
  ]
21
22
  };
22
23
  };
23
- const treeTreeToColumns = (tree, callback)=>{
24
- const result = tree.map((item)=>{
25
- if ('children' in item && Array.isArray(item.children)) {
26
- const groupNode = item;
27
- const field = groupNode.id;
28
- const title = groupNode.alias ?? groupNode.id;
29
- const props = callback?.(groupNode) || {};
30
- return {
31
- field,
32
- title,
33
- columns: treeTreeToColumns(item.children, callback),
34
- ...props
35
- };
36
- }
37
- {
38
- const field = item.id;
39
- const title = item.alias ?? item.id;
40
- const props = callback?.(item) || {};
41
- return {
42
- field,
43
- title,
44
- ...props
45
- };
46
- }
47
- });
48
- return result || [];
49
- };
50
24
  export { dimensionTreeToColumns };
51
25
 
52
26
  //# sourceMappingURL=dimensionsToColumns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/columns/dimensionsToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/dimensionsToColumns.ts"],"sourcesContent":["import type { ColumnsDefine, ListTableConstructorOptions } from '@visactor/vtable'\nimport { isMeasure } from 'src/pipeline/utils'\nimport type { Dimension, DimensionGroup, DimensionTree, ListTableSpecPipe } from 'src/types'\n\nexport const dimensionTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const dimensionTree = (advancedVSeed as unknown as { dimensionTree: DimensionTree }).dimensionTree\n const result = { ...spec } as ListTableConstructorOptions\n const eachNode = (node: Dimension | DimensionGroup) => {\n if (isMeasure(node)) {\n return {\n width: 'auto',\n }\n }\n\n return {}\n }\n const columns = treeTreeToColumns<Dimension, DimensionGroup>(dimensionTree, eachNode)\n\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n\nconst treeTreeToColumns = <\n T extends { id: string; alias?: string },\n U extends { id: string; alias?: string; children?: (T | U)[] },\n>(\n tree: (T | U)[],\n callback?: (node: T | U) => object,\n): ColumnsDefine[] => {\n const result = tree.map((item) => {\n if ('children' in item && Array.isArray(item.children)) {\n const groupNode = item as unknown as U\n const field = groupNode.id\n const title = groupNode.alias ?? groupNode.id\n const props = callback?.(groupNode) || {}\n // group\n return {\n field,\n title,\n columns: treeTreeToColumns(item.children, callback),\n ...props,\n }\n } else {\n const field = item.id\n const title = item.alias ?? item.id\n const props = callback?.(item) || {}\n // leaf\n return {\n field,\n title,\n ...props,\n }\n }\n }) as unknown as ColumnsDefine[]\n\n return result || []\n}\n"],"names":["dimensionTreeToColumns","spec","context","advancedVSeed","dimensionTree","result","eachNode","node","isMeasure","columns","treeTreeToColumns","tree","callback","item","Array","groupNode","field","title","props"],"mappings":";AAIO,MAAMA,yBAA4C,CAACC,MAAMC;IAC9D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,gBAAiBD,cAA8D,aAAa;IAClG,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IACzB,MAAMK,WAAW,CAACC;QAChB,IAAIC,UAAUD,OACZ,OAAO;YACL,OAAO;QACT;QAGF,OAAO,CAAC;IACV;IACA,MAAME,UAAUC,kBAA6CN,eAAeE;IAE5E,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMI;SAAQ;IAClD;AACF;AAEA,MAAMC,oBAAoB,CAIxBC,MACAC;IAEA,MAAMP,SAASM,KAAK,GAAG,CAAC,CAACE;QACvB,IAAI,cAAcA,QAAQC,MAAM,OAAO,CAACD,KAAK,QAAQ,GAAG;YACtD,MAAME,YAAYF;YAClB,MAAMG,QAAQD,UAAU,EAAE;YAC1B,MAAME,QAAQF,UAAU,KAAK,IAAIA,UAAU,EAAE;YAC7C,MAAMG,QAAQN,WAAWG,cAAc,CAAC;YAExC,OAAO;gBACLC;gBACAC;gBACA,SAASP,kBAAkBG,KAAK,QAAQ,EAAED;gBAC1C,GAAGM,KAAK;YACV;QACF;QAAO;YACL,MAAMF,QAAQH,KAAK,EAAE;YACrB,MAAMI,QAAQJ,KAAK,KAAK,IAAIA,KAAK,EAAE;YACnC,MAAMK,QAAQN,WAAWC,SAAS,CAAC;YAEnC,OAAO;gBACLG;gBACAC;gBACA,GAAGC,KAAK;YACV;QACF;IACF;IAEA,OAAOb,UAAU,EAAE;AACrB"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/dimensionsToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/dimensionsToColumns.ts"],"sourcesContent":["import type { ListTableConstructorOptions } from '@visactor/vtable'\nimport { isMeasure } from 'src/pipeline/utils'\nimport type { Dimension, DimensionGroup, DimensionTree, ListTableSpecPipe } from 'src/types'\nimport { treeTreeToColumns } from './utils'\n\nexport const dimensionTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const dimensionTree = (advancedVSeed as unknown as { dimensionTree: DimensionTree }).dimensionTree\n const result = { ...spec } as ListTableConstructorOptions\n const eachNode = (node: Dimension | DimensionGroup) => {\n if (isMeasure(node)) {\n return {\n width: 'auto',\n }\n }\n\n return {}\n }\n const columns = treeTreeToColumns<Dimension, DimensionGroup>(dimensionTree, eachNode)\n\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n"],"names":["dimensionTreeToColumns","spec","context","advancedVSeed","dimensionTree","result","eachNode","node","isMeasure","columns","treeTreeToColumns"],"mappings":";;AAKO,MAAMA,yBAA4C,CAACC,MAAMC;IAC9D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,gBAAiBD,cAA8D,aAAa;IAClG,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IACzB,MAAMK,WAAW,CAACC;QAChB,IAAIC,UAAUD,OACZ,OAAO;YACL,OAAO;QACT;QAGF,OAAO,CAAC;IACV;IACA,MAAME,UAAUC,kBAA6CN,eAAeE;IAE5E,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMI;SAAQ;IAClD;AACF"}
@@ -1,3 +1,4 @@
1
1
  export * from './measuresToColumns';
2
2
  export * from './dimensionsToColumns';
3
3
  export * from './pivotColumns';
4
+ export * from './columnsAggregation';
@@ -1,3 +1,4 @@
1
1
  export * from "./measuresToColumns.js";
2
2
  export * from "./dimensionsToColumns.js";
3
3
  export * from "./pivotColumns.js";
4
+ export * from "./columnsAggregation.js";
@@ -1,4 +1,5 @@
1
1
  import { createFormatterByMeasure, isMeasure } from "../../../../utils/index.js";
2
+ import { treeTreeToColumns } from "./utils.js";
2
3
  const measureTreeToColumns = (spec, context)=>{
3
4
  const { advancedVSeed } = context;
4
5
  const measureTree = advancedVSeed.measureTree;
@@ -29,33 +30,6 @@ const fieldFormat = (node)=>{
29
30
  return formatter(value);
30
31
  };
31
32
  };
32
- const treeTreeToColumns = (tree, callback)=>{
33
- const result = tree.map((item)=>{
34
- if ('children' in item && Array.isArray(item.children)) {
35
- const groupNode = item;
36
- const field = groupNode.id;
37
- const title = groupNode.alias ?? groupNode.id;
38
- const props = callback?.(groupNode) || {};
39
- return {
40
- field,
41
- title,
42
- columns: treeTreeToColumns(item.children, callback),
43
- ...props
44
- };
45
- }
46
- {
47
- const field = item.id;
48
- const title = item.alias ?? item.id;
49
- const props = callback?.(item) || {};
50
- return {
51
- field,
52
- title,
53
- ...props
54
- };
55
- }
56
- });
57
- return result || [];
58
- };
59
33
  export { measureTreeToColumns };
60
34
 
61
35
  //# sourceMappingURL=measuresToColumns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/columns/measuresToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/measuresToColumns.ts"],"sourcesContent":["import type { ColumnsDefine, ListTableConstructorOptions } from '@visactor/vtable'\nimport { createFormatterByMeasure, isMeasure } from 'src/pipeline/utils'\nimport type { MeasureGroup, Measure, MeasureTree, ListTableSpecPipe, Datum } from 'src/types'\n\nexport const measureTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const measureTree = (advancedVSeed as unknown as { measureTree: MeasureTree }).measureTree\n const result = { ...spec } as ListTableConstructorOptions\n\n const eachNode = (node: Measure | MeasureGroup) => {\n if (isMeasure(node)) {\n return {\n width: 'auto',\n fieldFormat: fieldFormat(node),\n }\n }\n\n return {}\n }\n const columns = treeTreeToColumns<Measure, MeasureGroup>(measureTree, eachNode)\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n\nconst fieldFormat = (node: Measure) => {\n const formatter = createFormatterByMeasure(node)\n\n return (datum: Datum) => {\n const { id } = node\n const value = datum[id] as number | string | undefined\n return formatter(value)\n }\n}\nconst treeTreeToColumns = <\n T extends { id: string; alias?: string },\n U extends { id: string; alias?: string; children?: (T | U)[] },\n>(\n tree: (T | U)[],\n callback?: (node: T | U) => object,\n): ColumnsDefine[] => {\n const result = tree.map((item) => {\n if ('children' in item && Array.isArray(item.children)) {\n const groupNode = item as unknown as U\n const field = groupNode.id\n const title = groupNode.alias ?? groupNode.id\n const props = callback?.(groupNode) || {}\n // group\n return {\n field,\n title,\n columns: treeTreeToColumns(item.children, callback),\n ...props,\n }\n } else {\n const field = item.id\n const title = item.alias ?? item.id\n const props = callback?.(item) || {}\n // leaf\n return {\n field,\n title,\n ...props,\n }\n }\n }) as unknown as ColumnsDefine[]\n\n return result || []\n}\n"],"names":["measureTreeToColumns","spec","context","advancedVSeed","measureTree","result","eachNode","node","isMeasure","fieldFormat","columns","treeTreeToColumns","formatter","createFormatterByMeasure","datum","id","value","tree","callback","item","Array","groupNode","field","title","props"],"mappings":";AAIO,MAAMA,uBAA0C,CAACC,MAAMC;IAC5D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,cAAeD,cAA0D,WAAW;IAC1F,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IAEzB,MAAMK,WAAW,CAACC;QAChB,IAAIC,UAAUD,OACZ,OAAO;YACL,OAAO;YACP,aAAaE,YAAYF;QAC3B;QAGF,OAAO,CAAC;IACV;IACA,MAAMG,UAAUC,kBAAyCP,aAAaE;IACtE,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMK;SAAQ;IAClD;AACF;AAEA,MAAMD,cAAc,CAACF;IACnB,MAAMK,YAAYC,yBAAyBN;IAE3C,OAAO,CAACO;QACN,MAAM,EAAEC,EAAE,EAAE,GAAGR;QACf,MAAMS,QAAQF,KAAK,CAACC,GAAG;QACvB,OAAOH,UAAUI;IACnB;AACF;AACA,MAAML,oBAAoB,CAIxBM,MACAC;IAEA,MAAMb,SAASY,KAAK,GAAG,CAAC,CAACE;QACvB,IAAI,cAAcA,QAAQC,MAAM,OAAO,CAACD,KAAK,QAAQ,GAAG;YACtD,MAAME,YAAYF;YAClB,MAAMG,QAAQD,UAAU,EAAE;YAC1B,MAAME,QAAQF,UAAU,KAAK,IAAIA,UAAU,EAAE;YAC7C,MAAMG,QAAQN,WAAWG,cAAc,CAAC;YAExC,OAAO;gBACLC;gBACAC;gBACA,SAASZ,kBAAkBQ,KAAK,QAAQ,EAAED;gBAC1C,GAAGM,KAAK;YACV;QACF;QAAO;YACL,MAAMF,QAAQH,KAAK,EAAE;YACrB,MAAMI,QAAQJ,KAAK,KAAK,IAAIA,KAAK,EAAE;YACnC,MAAMK,QAAQN,WAAWC,SAAS,CAAC;YAEnC,OAAO;gBACLG;gBACAC;gBACA,GAAGC,KAAK;YACV;QACF;IACF;IAEA,OAAOnB,UAAU,EAAE;AACrB"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/measuresToColumns.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/measuresToColumns.ts"],"sourcesContent":["import type { ListTableConstructorOptions } from '@visactor/vtable'\nimport { createFormatterByMeasure, isMeasure } from 'src/pipeline/utils'\nimport type { MeasureGroup, Measure, MeasureTree, ListTableSpecPipe, Datum } from 'src/types'\nimport { treeTreeToColumns } from './utils'\n\nexport const measureTreeToColumns: ListTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const measureTree = (advancedVSeed as unknown as { measureTree: MeasureTree }).measureTree\n const result = { ...spec } as ListTableConstructorOptions\n\n const eachNode = (node: Measure | MeasureGroup) => {\n if (isMeasure(node)) {\n return {\n width: 'auto',\n fieldFormat: fieldFormat(node),\n }\n }\n\n return {}\n }\n const columns = treeTreeToColumns<Measure, MeasureGroup>(measureTree, eachNode)\n return {\n ...result,\n columns: [...(result.columns || []), ...columns] as ListTableConstructorOptions['columns'],\n }\n}\n\nconst fieldFormat = (node: Measure) => {\n const formatter = createFormatterByMeasure(node)\n\n return (datum: Datum) => {\n const { id } = node\n const value = datum[id] as number | string | undefined\n return formatter(value)\n }\n}\n"],"names":["measureTreeToColumns","spec","context","advancedVSeed","measureTree","result","eachNode","node","isMeasure","fieldFormat","columns","treeTreeToColumns","formatter","createFormatterByMeasure","datum","id","value"],"mappings":";;AAKO,MAAMA,uBAA0C,CAACC,MAAMC;IAC5D,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,cAAeD,cAA0D,WAAW;IAC1F,MAAME,SAAS;QAAE,GAAGJ,IAAI;IAAC;IAEzB,MAAMK,WAAW,CAACC;QAChB,IAAIC,UAAUD,OACZ,OAAO;YACL,OAAO;YACP,aAAaE,YAAYF;QAC3B;QAGF,OAAO,CAAC;IACV;IACA,MAAMG,UAAUC,kBAAyCP,aAAaE;IACtE,OAAO;QACL,GAAGD,MAAM;QACT,SAAS;eAAKA,OAAO,OAAO,IAAI,EAAE;eAAMK;SAAQ;IAClD;AACF;AAEA,MAAMD,cAAc,CAACF;IACnB,MAAMK,YAAYC,yBAAyBN;IAE3C,OAAO,CAACO;QACN,MAAM,EAAEC,EAAE,EAAE,GAAGR;QACf,MAAMS,QAAQF,KAAK,CAACC,GAAG;QACvB,OAAOH,UAAUI;IACnB;AACF"}
@@ -0,0 +1,15 @@
1
+ import type { ColumnsDefine } from '@visactor/vtable';
2
+ /**
3
+ * 从树形结构中提取所有叶子节点的ID
4
+ */
5
+ export declare function extractLeafIds<T extends {
6
+ id: string;
7
+ }>(tree: T[]): Set<string>;
8
+ export declare const treeTreeToColumns: <T extends {
9
+ id: string;
10
+ alias?: string;
11
+ }, U extends {
12
+ id: string;
13
+ alias?: string;
14
+ children?: (T | U)[];
15
+ }>(tree: (T | U)[], callback?: (node: T | U) => object) => ColumnsDefine[];
@@ -0,0 +1,35 @@
1
+ import { findTreeNodesBy } from "../../../../utils/index.js";
2
+ function extractLeafIds(tree) {
3
+ const leafNodes = findTreeNodesBy(tree, ()=>true);
4
+ return new Set(leafNodes.map((node)=>node.id));
5
+ }
6
+ const treeTreeToColumns = (tree, callback)=>{
7
+ const result = tree.map((item)=>{
8
+ if ('children' in item && Array.isArray(item.children)) {
9
+ const groupNode = item;
10
+ const field = groupNode.id;
11
+ const title = groupNode.alias ?? groupNode.id;
12
+ const props = callback?.(groupNode) || {};
13
+ return {
14
+ field,
15
+ title,
16
+ columns: treeTreeToColumns(item.children, callback),
17
+ ...props
18
+ };
19
+ }
20
+ {
21
+ const field = item.id;
22
+ const title = item.alias ?? item.id;
23
+ const props = callback?.(item) || {};
24
+ return {
25
+ field,
26
+ title,
27
+ ...props
28
+ };
29
+ }
30
+ });
31
+ return result || [];
32
+ };
33
+ export { extractLeafIds, treeTreeToColumns };
34
+
35
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline/spec/table/pipes/columns/utils.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/columns/utils.ts"],"sourcesContent":["import type { ColumnsDefine } from '@visactor/vtable'\nimport { findTreeNodesBy } from 'src/pipeline/utils'\n\n/**\n * 从树形结构中提取所有叶子节点的ID\n */\nexport function extractLeafIds<T extends { id: string }>(tree: T[]): Set<string> {\n const leafNodes = findTreeNodesBy(tree, () => true)\n return new Set(leafNodes.map((node) => node.id))\n}\n\nexport const treeTreeToColumns = <\n T extends { id: string; alias?: string },\n U extends { id: string; alias?: string; children?: (T | U)[] },\n>(\n tree: (T | U)[],\n callback?: (node: T | U) => object,\n): ColumnsDefine[] => {\n const result = tree.map((item) => {\n if ('children' in item && Array.isArray(item.children)) {\n const groupNode = item as unknown as U\n const field = groupNode.id\n const title = groupNode.alias ?? groupNode.id\n const props = callback?.(groupNode) || {}\n // group\n return {\n field,\n title,\n columns: treeTreeToColumns(item.children, callback),\n ...props,\n }\n } else {\n const field = item.id\n const title = item.alias ?? item.id\n const props = callback?.(item) || {}\n // leaf\n return {\n field,\n title,\n ...props,\n }\n }\n }) as unknown as ColumnsDefine[]\n\n return result || []\n}\n"],"names":["extractLeafIds","tree","leafNodes","findTreeNodesBy","Set","node","treeTreeToColumns","callback","result","item","Array","groupNode","field","title","props"],"mappings":";AAMO,SAASA,eAAyCC,IAAS;IAChE,MAAMC,YAAYC,gBAAgBF,MAAM,IAAM;IAC9C,OAAO,IAAIG,IAAIF,UAAU,GAAG,CAAC,CAACG,OAASA,KAAK,EAAE;AAChD;AAEO,MAAMC,oBAAoB,CAI/BL,MACAM;IAEA,MAAMC,SAASP,KAAK,GAAG,CAAC,CAACQ;QACvB,IAAI,cAAcA,QAAQC,MAAM,OAAO,CAACD,KAAK,QAAQ,GAAG;YACtD,MAAME,YAAYF;YAClB,MAAMG,QAAQD,UAAU,EAAE;YAC1B,MAAME,QAAQF,UAAU,KAAK,IAAIA,UAAU,EAAE;YAC7C,MAAMG,QAAQP,WAAWI,cAAc,CAAC;YAExC,OAAO;gBACLC;gBACAC;gBACA,SAASP,kBAAkBG,KAAK,QAAQ,EAAEF;gBAC1C,GAAGO,KAAK;YACV;QACF;QAAO;YACL,MAAMF,QAAQH,KAAK,EAAE;YACrB,MAAMI,QAAQJ,KAAK,KAAK,IAAIA,KAAK,EAAE;YACnC,MAAMK,QAAQP,WAAWE,SAAS,CAAC;YAEnC,OAAO;gBACLG;gBACAC;gBACA,GAAGC,KAAK;YACV;QACF;IACF;IAEA,OAAON,UAAU,EAAE;AACrB"}
@@ -1,9 +1,10 @@
1
1
  const titleOnDimension = (spec)=>{
2
- const { rows = [], columns = [] } = spec;
2
+ const { rows = [], columns = [], indicatorsAsCol, indicators = [] } = spec;
3
+ const rowsLength = rows.length + (indicatorsAsCol ? 0 : indicators?.length > 0 ? 1 : 0);
3
4
  return {
4
5
  ...spec,
5
6
  corner: {
6
- titleOnDimension: rows.length <= 1 && columns.length >= 1 ? 'column' : 'row'
7
+ titleOnDimension: rowsLength <= 1 && columns.length >= 1 && !indicatorsAsCol ? 'column' : 'row'
7
8
  }
8
9
  };
9
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/corner/titleOnDimension.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/corner/titleOnDimension.ts"],"sourcesContent":["import type { PivotTableSpecPipe } from 'src/types'\n\nexport const titleOnDimension: PivotTableSpecPipe = (spec) => {\n const { rows = [], columns = [] } = spec\n\n return {\n ...spec,\n corner: {\n titleOnDimension: (rows as any[]).length <= 1 && (columns as any[]).length >= 1 ? 'column' : 'row',\n },\n }\n}\n"],"names":["titleOnDimension","spec","rows","columns"],"mappings":"AAEO,MAAMA,mBAAuC,CAACC;IACnD,MAAM,EAAEC,OAAO,EAAE,EAAEC,UAAU,EAAE,EAAE,GAAGF;IAEpC,OAAO;QACL,GAAGA,IAAI;QACP,QAAQ;YACN,kBAAmBC,KAAe,MAAM,IAAI,KAAMC,QAAkB,MAAM,IAAI,IAAI,WAAW;QAC/F;IACF;AACF"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/corner/titleOnDimension.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/corner/titleOnDimension.ts"],"sourcesContent":["import type { PivotTableSpecPipe } from 'src/types'\n\nexport const titleOnDimension: PivotTableSpecPipe = (spec) => {\n const { rows = [], columns = [], indicatorsAsCol, indicators = [] } = spec\n const rowsLength = rows.length + (indicatorsAsCol ? 0 : indicators?.length > 0 ? 1 : 0)\n\n return {\n ...spec,\n corner: {\n titleOnDimension: rowsLength <= 1 && columns.length >= 1 && !indicatorsAsCol ? 'column' : 'row',\n },\n }\n}\n"],"names":["titleOnDimension","spec","rows","columns","indicatorsAsCol","indicators","rowsLength"],"mappings":"AAEO,MAAMA,mBAAuC,CAACC;IACnD,MAAM,EAAEC,OAAO,EAAE,EAAEC,UAAU,EAAE,EAAEC,eAAe,EAAEC,aAAa,EAAE,EAAE,GAAGJ;IACtE,MAAMK,aAAaJ,KAAK,MAAM,GAAIE,CAAAA,kBAAkB,IAAIC,YAAY,SAAS,IAAI,IAAI;IAErF,OAAO;QACL,GAAGJ,IAAI;QACP,QAAQ;YACN,kBAAkBK,cAAc,KAAKH,QAAQ,MAAM,IAAI,KAAK,CAACC,kBAAkB,WAAW;QAC5F;IACF;AACF"}
@@ -1,17 +1,53 @@
1
+ import { intl } from "../../../../../i18n/index.js";
1
2
  import { findAllMeasures } from "../../../../utils/index.js";
2
3
  const dataConfig = (spec, context)=>{
3
- const { advancedVSeed } = context;
4
+ const { advancedVSeed, vseed } = context;
4
5
  const measures = findAllMeasures(advancedVSeed.measureTree);
5
6
  const aggregationRules = measures.map((measure)=>({
6
7
  field: measure.id,
7
- aggregationType: 'NONE',
8
+ aggregationType: 'SUM',
8
9
  indicatorKey: measure.id
9
10
  }));
11
+ const dataConfigObj = {
12
+ aggregationRules
13
+ };
14
+ const { totals } = vseed;
15
+ if (totals) {
16
+ const grandTotalLabel = intl.i18n`总计`;
17
+ const subTotalLabel = intl.i18n`小计`;
18
+ dataConfigObj.totals = {};
19
+ if (totals.row) {
20
+ const dimensionIds = (advancedVSeed.dimensionTree || []).filter((dim)=>'row' === dim.encoding).map((dim)=>dim.id);
21
+ const rowSubDimensions = totals.row.subTotalsDimensions?.filter((dim)=>dimensionIds.includes(dim));
22
+ const normalizedRowSubDimensions = totals.row.showSubTotals && (!rowSubDimensions || 0 === rowSubDimensions.length) ? dimensionIds.length > 0 ? [
23
+ dimensionIds[0]
24
+ ] : [] : rowSubDimensions;
25
+ dataConfigObj.totals.row = {
26
+ showGrandTotals: totals.row.showGrandTotals ?? false,
27
+ showSubTotals: totals.row.showSubTotals ?? false,
28
+ subTotalsDimensions: normalizedRowSubDimensions,
29
+ grandTotalLabel,
30
+ subTotalLabel
31
+ };
32
+ }
33
+ if (totals.column) {
34
+ const dimensionIds = (advancedVSeed.dimensionTree || []).filter((dim)=>'column' === dim.encoding).map((dim)=>dim.id);
35
+ const columnSubDimensions = totals.column.subTotalsDimensions?.filter((dim)=>dimensionIds.includes(dim));
36
+ const normalizedColumnSubDimensions = totals.column.showSubTotals && (!columnSubDimensions || 0 === columnSubDimensions.length) ? dimensionIds.length > 0 ? [
37
+ dimensionIds[0]
38
+ ] : [] : columnSubDimensions;
39
+ dataConfigObj.totals.column = {
40
+ showGrandTotals: totals.column.showGrandTotals ?? false,
41
+ showSubTotals: totals.column.showSubTotals ?? false,
42
+ subTotalsDimensions: normalizedColumnSubDimensions,
43
+ grandTotalLabel,
44
+ subTotalLabel
45
+ };
46
+ }
47
+ }
10
48
  return {
11
49
  ...spec,
12
- dataConfig: {
13
- aggregationRules
14
- }
50
+ dataConfig: dataConfigObj
15
51
  };
16
52
  };
17
53
  export { dataConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/table/pipes/indicators/pivotDataConfig.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/indicators/pivotDataConfig.ts"],"sourcesContent":["import { findAllMeasures } from 'src/pipeline/utils'\nimport type { PivotTableSpecPipe } from 'src/types'\n\nexport const dataConfig: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed } = context\n const measures = findAllMeasures(advancedVSeed.measureTree)\n\n const aggregationRules = measures.map((measure) => ({\n field: measure.id,\n aggregationType: 'NONE',\n indicatorKey: measure.id,\n }))\n\n return {\n ...spec,\n dataConfig: {\n aggregationRules,\n },\n }\n}\n"],"names":["dataConfig","spec","context","advancedVSeed","measures","findAllMeasures","aggregationRules","measure"],"mappings":";AAGO,MAAMA,aAAiC,CAACC,MAAMC;IACnD,MAAM,EAAEC,aAAa,EAAE,GAAGD;IAC1B,MAAME,WAAWC,gBAAgBF,cAAc,WAAW;IAE1D,MAAMG,mBAAmBF,SAAS,GAAG,CAAC,CAACG,UAAa;YAClD,OAAOA,QAAQ,EAAE;YACjB,iBAAiB;YACjB,cAAcA,QAAQ,EAAE;QAC1B;IAEA,OAAO;QACL,GAAGN,IAAI;QACP,YAAY;YACVK;QACF;IACF;AACF"}
1
+ {"version":3,"file":"pipeline/spec/table/pipes/indicators/pivotDataConfig.js","sources":["webpack://@visactor/vseed/./src/pipeline/spec/table/pipes/indicators/pivotDataConfig.ts"],"sourcesContent":["import { intl } from 'src/i18n'\nimport { findAllMeasures } from 'src/pipeline/utils'\nimport type { Dimension, PivotTable, PivotTableSpecPipe } from 'src/types'\n\nexport const dataConfig: PivotTableSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const measures = findAllMeasures(advancedVSeed.measureTree)\n\n const aggregationRules = measures.map((measure) => ({\n field: measure.id,\n aggregationType: 'SUM',\n indicatorKey: measure.id,\n }))\n\n const dataConfigObj: any = {\n aggregationRules,\n }\n\n // 处理totals配置\n const { totals } = vseed as PivotTable\n if (totals) {\n const grandTotalLabel = intl.i18n`总计`\n const subTotalLabel = intl.i18n`小计`\n\n dataConfigObj.totals = {}\n\n // 处理行配置\n if (totals.row) {\n const dimensionIds = (advancedVSeed.dimensionTree || [])\n .filter((dim: Dimension) => dim.encoding === 'row')\n .map((dim) => dim.id)\n const rowSubDimensions = totals.row.subTotalsDimensions?.filter((dim) => dimensionIds.includes(dim))\n const normalizedRowSubDimensions =\n totals.row.showSubTotals && (!rowSubDimensions || rowSubDimensions.length === 0)\n ? dimensionIds.length > 0\n ? [dimensionIds[0]]\n : []\n : rowSubDimensions\n\n dataConfigObj.totals.row = {\n showGrandTotals: totals.row.showGrandTotals ?? false,\n showSubTotals: totals.row.showSubTotals ?? false,\n subTotalsDimensions: normalizedRowSubDimensions,\n grandTotalLabel,\n subTotalLabel,\n }\n }\n\n // 处理列配置\n if (totals.column) {\n const dimensionIds = (advancedVSeed.dimensionTree || [])\n .filter((dim: Dimension) => dim.encoding === 'column')\n .map((dim) => dim.id)\n const columnSubDimensions = totals.column.subTotalsDimensions?.filter((dim) => dimensionIds.includes(dim))\n const normalizedColumnSubDimensions =\n totals.column.showSubTotals && (!columnSubDimensions || columnSubDimensions.length === 0)\n ? dimensionIds.length > 0\n ? [dimensionIds[0]]\n : []\n : columnSubDimensions\n\n dataConfigObj.totals.column = {\n showGrandTotals: totals.column.showGrandTotals ?? false,\n showSubTotals: totals.column.showSubTotals ?? false,\n subTotalsDimensions: normalizedColumnSubDimensions,\n grandTotalLabel,\n subTotalLabel,\n }\n }\n }\n\n return {\n ...spec,\n dataConfig: dataConfigObj,\n }\n}\n"],"names":["dataConfig","spec","context","advancedVSeed","vseed","measures","findAllMeasures","aggregationRules","measure","dataConfigObj","totals","grandTotalLabel","intl","subTotalLabel","dimensionIds","dim","rowSubDimensions","normalizedRowSubDimensions","columnSubDimensions","normalizedColumnSubDimensions"],"mappings":";;AAIO,MAAMA,aAAiC,CAACC,MAAMC;IACnD,MAAM,EAAEC,aAAa,EAAEC,KAAK,EAAE,GAAGF;IACjC,MAAMG,WAAWC,gBAAgBH,cAAc,WAAW;IAE1D,MAAMI,mBAAmBF,SAAS,GAAG,CAAC,CAACG,UAAa;YAClD,OAAOA,QAAQ,EAAE;YACjB,iBAAiB;YACjB,cAAcA,QAAQ,EAAE;QAC1B;IAEA,MAAMC,gBAAqB;QACzBF;IACF;IAGA,MAAM,EAAEG,MAAM,EAAE,GAAGN;IACnB,IAAIM,QAAQ;QACV,MAAMC,kBAAkBC,KAAK,IAAI,CAAC,EAAE,CAAC;QACrC,MAAMC,gBAAgBD,KAAK,IAAI,CAAC,EAAE,CAAC;QAEnCH,cAAc,MAAM,GAAG,CAAC;QAGxB,IAAIC,OAAO,GAAG,EAAE;YACd,MAAMI,eAAgBX,AAAAA,CAAAA,cAAc,aAAa,IAAI,EAAC,EACnD,MAAM,CAAC,CAACY,MAAmBA,AAAiB,UAAjBA,IAAI,QAAQ,EACvC,GAAG,CAAC,CAACA,MAAQA,IAAI,EAAE;YACtB,MAAMC,mBAAmBN,OAAO,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAACK,MAAQD,aAAa,QAAQ,CAACC;YAC/F,MAAME,6BACJP,OAAO,GAAG,CAAC,aAAa,IAAK,EAACM,oBAAoBA,AAA4B,MAA5BA,iBAAiB,MAAM,AAAK,IAC1EF,aAAa,MAAM,GAAG,IACpB;gBAACA,YAAY,CAAC,EAAE;aAAC,GACjB,EAAE,GACJE;YAENP,cAAc,MAAM,CAAC,GAAG,GAAG;gBACzB,iBAAiBC,OAAO,GAAG,CAAC,eAAe,IAAI;gBAC/C,eAAeA,OAAO,GAAG,CAAC,aAAa,IAAI;gBAC3C,qBAAqBO;gBACrBN;gBACAE;YACF;QACF;QAGA,IAAIH,OAAO,MAAM,EAAE;YACjB,MAAMI,eAAgBX,AAAAA,CAAAA,cAAc,aAAa,IAAI,EAAC,EACnD,MAAM,CAAC,CAACY,MAAmBA,AAAiB,aAAjBA,IAAI,QAAQ,EACvC,GAAG,CAAC,CAACA,MAAQA,IAAI,EAAE;YACtB,MAAMG,sBAAsBR,OAAO,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAACK,MAAQD,aAAa,QAAQ,CAACC;YACrG,MAAMI,gCACJT,OAAO,MAAM,CAAC,aAAa,IAAK,EAACQ,uBAAuBA,AAA+B,MAA/BA,oBAAoB,MAAM,AAAK,IACnFJ,aAAa,MAAM,GAAG,IACpB;gBAACA,YAAY,CAAC,EAAE;aAAC,GACjB,EAAE,GACJI;YAENT,cAAc,MAAM,CAAC,MAAM,GAAG;gBAC5B,iBAAiBC,OAAO,MAAM,CAAC,eAAe,IAAI;gBAClD,eAAeA,OAAO,MAAM,CAAC,aAAa,IAAI;gBAC9C,qBAAqBS;gBACrBR;gBACAE;YACF;QACF;IACF;IAEA,OAAO;QACL,GAAGZ,IAAI;QACP,YAAYQ;IACd;AACF"}