@visactor/vseed 0.1.3 → 0.1.5
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.
- package/dist/builder/builder/builder.d.ts +4 -2
- package/dist/dataReshape/foldMeasures.d.ts +2 -2
- package/dist/index.cjs +1001 -765
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1014 -778
- package/dist/index.js.map +1 -1
- package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +1 -0
- package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +2 -0
- package/dist/pipeline/advanced/chart/pipes/measures/index.d.ts +1 -0
- package/dist/pipeline/spec/chart/pipes/color/colorCellStyleFill.d.ts +2 -0
- package/dist/pipeline/spec/chart/pipes/color/colorFunnelStyleFill.d.ts +2 -0
- package/dist/pipeline/spec/chart/pipes/color/colorPieStyleFill.d.ts +2 -0
- package/dist/pipeline/spec/chart/pipes/color/colorRoseStyleFill.d.ts +2 -0
- package/dist/pipeline/spec/chart/pipes/color/index.d.ts +4 -0
- package/dist/pipeline/spec/chart/pipes/markStyle/cellStyle.d.ts +2 -0
- package/dist/pipeline/spec/chart/pipes/markStyle/funnelStyle.d.ts +2 -0
- package/dist/pipeline/spec/chart/pipes/markStyle/index.d.ts +5 -1
- package/dist/pipeline/spec/chart/pipes/markStyle/pieStyle.d.ts +2 -0
- package/dist/pipeline/spec/chart/pipes/markStyle/roseStyle.d.ts +2 -0
- package/dist/types/advancedVSeed.d.ts +16 -5
- package/dist/types/chartType/area/zArea.d.ts +16 -5
- package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +16 -5
- package/dist/types/chartType/bar/zBar.d.ts +16 -5
- package/dist/types/chartType/barParallel/zBarParallel.d.ts +16 -5
- package/dist/types/chartType/barPercent/zBarPercent.d.ts +16 -5
- package/dist/types/chartType/column/zColumn.d.ts +16 -5
- package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +16 -5
- package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +16 -5
- package/dist/types/chartType/donut/zDonut.d.ts +16 -5
- package/dist/types/chartType/dualAxis/zDualAxis.d.ts +36 -25
- package/dist/types/chartType/funnel/zFunnel.d.ts +16 -5
- package/dist/types/chartType/heatmap/zHeatmap.d.ts +16 -5
- package/dist/types/chartType/line/zLine.d.ts +16 -5
- package/dist/types/chartType/pie/zPie.d.ts +16 -5
- package/dist/types/chartType/pivotTable/zPivotTable.d.ts +16 -5
- package/dist/types/chartType/radar/zRadar.d.ts +16 -5
- package/dist/types/chartType/rose/zRose.d.ts +16 -5
- package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +16 -5
- package/dist/types/chartType/scatter/zScatter.d.ts +36 -25
- package/dist/types/chartType/table/zTable.d.ts +16 -5
- package/dist/types/properties/dimensions/dimensions.d.ts +16 -0
- package/dist/types/properties/dimensions/zDimensions.d.ts +33 -0
- package/dist/types/properties/measures/zDualMeasures.d.ts +40 -40
- package/dist/types/properties/measures/zMeasures.d.ts +15 -15
- package/dist/types/properties/measures/zScatterMeasures.d.ts +40 -40
- package/dist/types/zVseed.d.ts +360 -140
- package/dist/umd/index.js +953 -703
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { clone, groupBy, isArray, isEmpty, isNullish, isNumber, isObjectType, isString, merge, mergeDeep, omit, pick, sort, unique } from "remeda";
|
1
|
+
import { clone, groupBy, isArray, isEmpty as external_remeda_isEmpty, isNullish, isNumber, isObjectType, isString, merge, mergeDeep, omit, pick, sort, unique, uniqueBy } from "remeda";
|
2
2
|
import { z } from "zod";
|
3
3
|
const execPipeline = (pipeline, context, initialValue = {})=>{
|
4
4
|
const result = pipeline.reduce((prev, cur)=>cur(prev, context), initialValue);
|
@@ -519,7 +519,7 @@ const measureTreeToColumns = (spec, context)=>{
|
|
519
519
|
const fieldFormat = (node, locale)=>(datum)=>{
|
520
520
|
const { format = {}, autoFormat = true, id } = node;
|
521
521
|
const value = datum[id];
|
522
|
-
if (!
|
522
|
+
if (!external_remeda_isEmpty(format)) {
|
523
523
|
const formatter = createFormatter(format);
|
524
524
|
return formatter(value);
|
525
525
|
}
|
@@ -882,7 +882,7 @@ const pivotIndicators = (spec, context)=>{
|
|
882
882
|
};
|
883
883
|
const pivotIndicators_fieldFormat = (node, locale)=>(value)=>{
|
884
884
|
const { format = {}, autoFormat = true } = node;
|
885
|
-
if (!
|
885
|
+
if (!external_remeda_isEmpty(format)) {
|
886
886
|
const formatter = createFormatter(format);
|
887
887
|
return formatter(value);
|
888
888
|
}
|
@@ -1036,6 +1036,56 @@ const initAdvancedVSeed_initAdvancedVSeed = (advancedVSeed, context)=>{
|
|
1036
1036
|
locale: locale || 'zh-CN'
|
1037
1037
|
};
|
1038
1038
|
};
|
1039
|
+
const ORIGINAL_DATA = '__OriginalData__';
|
1040
|
+
const Separator = '-';
|
1041
|
+
const FoldMeasureName = '__MeaName__';
|
1042
|
+
const FoldMeasureId = '__MeaId__';
|
1043
|
+
const FoldMeasureValue = '__MeaValue__';
|
1044
|
+
const MeasureName = FoldMeasureName;
|
1045
|
+
const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
|
1046
|
+
const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
|
1047
|
+
const FoldXMeasureValue = '__MeaXValue__';
|
1048
|
+
const FoldYMeasureValue = '__MeaYValue__';
|
1049
|
+
const XEncoding = '__Dim_X__';
|
1050
|
+
const YEncoding = '__Dim_Y__';
|
1051
|
+
const AngleEncoding = '__Dim_Angle__';
|
1052
|
+
const DetailEncoding = '__Dim_Detail__';
|
1053
|
+
const ColorEncoding = '__Dim_Color__';
|
1054
|
+
const ColorIdEncoding = '__Dim_ColorId__';
|
1055
|
+
const getBasicDimensions = (vseed)=>{
|
1056
|
+
const { dimensions, dataset } = vseed;
|
1057
|
+
const MeaName = {
|
1058
|
+
id: MeasureName,
|
1059
|
+
alias: intl.i18n`指标名称`
|
1060
|
+
};
|
1061
|
+
if (!dataset) throw new Error('dataset is required');
|
1062
|
+
if (0 === dataset.length) return [];
|
1063
|
+
if (dimensions) {
|
1064
|
+
const basicDimensions = dimensions.map((dim)=>({
|
1065
|
+
location: 'dimension',
|
1066
|
+
...dim
|
1067
|
+
}));
|
1068
|
+
if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
|
1069
|
+
basicDimensions.push(MeaName);
|
1070
|
+
return basicDimensions;
|
1071
|
+
}
|
1072
|
+
const top100dataset = dataset.slice(0, 100);
|
1073
|
+
const sample = top100dataset.reduce((prev, cur)=>({
|
1074
|
+
...prev,
|
1075
|
+
...cur
|
1076
|
+
}), {});
|
1077
|
+
const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
|
1078
|
+
'',
|
1079
|
+
null,
|
1080
|
+
void 0
|
1081
|
+
].includes(key)).map((dim)=>({
|
1082
|
+
id: dim,
|
1083
|
+
alias: dim,
|
1084
|
+
location: 'dimension'
|
1085
|
+
}));
|
1086
|
+
basicDimensions.push(MeaName);
|
1087
|
+
return basicDimensions;
|
1088
|
+
};
|
1039
1089
|
const getBasicMeasures = (vseed)=>{
|
1040
1090
|
const { dataset, measures } = vseed;
|
1041
1091
|
if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
|
@@ -1069,6 +1119,52 @@ const isMeasureTreeWithParentId = (vseed)=>{
|
|
1069
1119
|
if (!measures) return false;
|
1070
1120
|
return measures.some((measure)=>'parentId' in measure);
|
1071
1121
|
};
|
1122
|
+
const encodingForLine = (advancedVSeed, context)=>{
|
1123
|
+
const { vseed } = context;
|
1124
|
+
const { measures: vseedMeasures = [] } = vseed;
|
1125
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
1126
|
+
const dimensions = getBasicDimensions(vseed);
|
1127
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
1128
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
1129
|
+
const encoding = {};
|
1130
|
+
if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
|
1131
|
+
else generateDefaultDimensionEncoding(dimensions, encoding);
|
1132
|
+
if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
|
1133
|
+
else generateDefaultMeasureEncoding(measures, encoding);
|
1134
|
+
return {
|
1135
|
+
...advancedVSeed,
|
1136
|
+
encoding
|
1137
|
+
};
|
1138
|
+
};
|
1139
|
+
const generateDefaultMeasureEncoding = (measures, encoding)=>{
|
1140
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
1141
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
1142
|
+
};
|
1143
|
+
const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
1144
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
1145
|
+
encoding.x = uniqueDimIds.slice(0, 1);
|
1146
|
+
encoding.color = uniqueDimIds.slice(1);
|
1147
|
+
encoding.tooltip = uniqueDimIds;
|
1148
|
+
encoding.detail = [];
|
1149
|
+
encoding.label = [];
|
1150
|
+
encoding.row = [];
|
1151
|
+
encoding.column = [];
|
1152
|
+
};
|
1153
|
+
const generateMeasureEncoding = (measures, encoding)=>{
|
1154
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
1155
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
1156
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
1157
|
+
if (color.length > 0) encoding.color = color;
|
1158
|
+
};
|
1159
|
+
const generateDimensionEncoding = (dimensions, encoding)=>{
|
1160
|
+
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
|
1161
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
1162
|
+
encoding.detail = [];
|
1163
|
+
if (0 === encoding.x.length) encoding.x = [
|
1164
|
+
dimensions[0].id
|
1165
|
+
];
|
1166
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
1167
|
+
};
|
1072
1168
|
const measureDepth = (measures = [])=>{
|
1073
1169
|
if (!measures) return 0;
|
1074
1170
|
let depth = 1;
|
@@ -1089,7 +1185,7 @@ const isPivotChart = (vseed)=>{
|
|
1089
1185
|
if (isVTable(vseed)) return false;
|
1090
1186
|
if (isMeasureTreeWithParentId(vseed)) {
|
1091
1187
|
const parentIds = vseed.measures?.map((measure)=>measure.parentId);
|
1092
|
-
return parentIds && parentIds.length > 1;
|
1188
|
+
return parentIds && unique(parentIds).length > 1;
|
1093
1189
|
}
|
1094
1190
|
if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
|
1095
1191
|
const { dimensions = [] } = vseed;
|
@@ -1160,22 +1256,6 @@ const basicMeasuresToMeasureTree = (measures)=>{
|
|
1160
1256
|
}
|
1161
1257
|
];
|
1162
1258
|
};
|
1163
|
-
const ORIGINAL_DATA = '__OriginalData__';
|
1164
|
-
const Separator = '-';
|
1165
|
-
const FoldMeasureName = '__MeaName__';
|
1166
|
-
const FoldMeasureId = '__MeaId__';
|
1167
|
-
const FoldMeasureValue = '__MeaValue__';
|
1168
|
-
const MeasureName = FoldMeasureName;
|
1169
|
-
const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
|
1170
|
-
const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
|
1171
|
-
const FoldXMeasureValue = '__MeaXValue__';
|
1172
|
-
const FoldYMeasureValue = '__MeaYValue__';
|
1173
|
-
const XEncoding = '__Dim_X__';
|
1174
|
-
const YEncoding = '__Dim_Y__';
|
1175
|
-
const AngleEncoding = '__Dim_Angle__';
|
1176
|
-
const DetailEncoding = '__Dim_Detail__';
|
1177
|
-
const ColorEncoding = '__Dim_Color__';
|
1178
|
-
const ColorIdEncoding = '__Dim_ColorId__';
|
1179
1259
|
const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
|
1180
1260
|
const result = {
|
1181
1261
|
...advancedVSeed
|
@@ -1215,52 +1295,13 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
|
|
1215
1295
|
result.dimensions.push(MeaName);
|
1216
1296
|
return result;
|
1217
1297
|
};
|
1218
|
-
const encodingForLine = (advancedVSeed, context)=>{
|
1219
|
-
const { vseed } = context;
|
1220
|
-
const { dimensions } = advancedVSeed;
|
1221
|
-
if (!dimensions) return advancedVSeed;
|
1222
|
-
const encoding = vseed.encoding;
|
1223
|
-
if (encoding) {
|
1224
|
-
const x = encoding.x || [
|
1225
|
-
dimensions[0].id
|
1226
|
-
];
|
1227
|
-
const color = encoding.color || [
|
1228
|
-
(dimensions[1] || dimensions[0]).id
|
1229
|
-
];
|
1230
|
-
const detail = encoding.detail || [];
|
1231
|
-
const mergedDetail = 0 === detail.length ? dimensions.map((d)=>d.id).filter((id)=>!x.includes(id)) : encoding.detail;
|
1232
|
-
return {
|
1233
|
-
...advancedVSeed,
|
1234
|
-
encoding: {
|
1235
|
-
...encoding,
|
1236
|
-
x,
|
1237
|
-
color,
|
1238
|
-
detail: mergedDetail
|
1239
|
-
}
|
1240
|
-
};
|
1241
|
-
}
|
1242
|
-
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
1243
|
-
const mergedEncoding = {
|
1244
|
-
x: dimensions.slice(0, 1).map((item)=>item.id),
|
1245
|
-
color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
1246
|
-
detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
1247
|
-
tooltip: dimensions.map((item)=>item.id),
|
1248
|
-
label: [],
|
1249
|
-
row: [],
|
1250
|
-
column: []
|
1251
|
-
};
|
1252
|
-
return {
|
1253
|
-
...advancedVSeed,
|
1254
|
-
encoding: mergedEncoding
|
1255
|
-
};
|
1256
|
-
};
|
1257
1298
|
const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
|
1258
1299
|
const { vseed } = context;
|
1259
1300
|
const usePivotChart = isPivotChart(vseed);
|
1260
1301
|
if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
|
1261
1302
|
return execPipeline(pipeline, context, advancedVSeed);
|
1262
1303
|
};
|
1263
|
-
const foldMeasures = (dataset, measures,
|
1304
|
+
const foldMeasures = (dataset, measures, options)=>{
|
1264
1305
|
const { measureId, measureName, measureValue, colorMeasureId } = options || {};
|
1265
1306
|
const foldInfo = {
|
1266
1307
|
measureId,
|
@@ -1361,7 +1402,7 @@ const applyEncoding = (encoding, dimensions, datum, separator)=>{
|
|
1361
1402
|
};
|
1362
1403
|
const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
|
1363
1404
|
const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false, colorMeasureId } = options || {};
|
1364
|
-
const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures,
|
1405
|
+
const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, {
|
1365
1406
|
measureId: foldMeasureId,
|
1366
1407
|
measureName: foldMeasureName,
|
1367
1408
|
measureValue: foldMeasureValue,
|
@@ -1405,7 +1446,7 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
|
|
1405
1446
|
const { dimensions, measures, encoding } = advancedVSeed;
|
1406
1447
|
if (!measures || !dimensions || !dataset || !encoding) return result;
|
1407
1448
|
if (0 === measures.length) throw new Error('measures can not be empty');
|
1408
|
-
const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
|
1449
|
+
const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(findAllMeasures(measures), (item)=>item.id), encoding, {
|
1409
1450
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
1410
1451
|
});
|
1411
1452
|
return {
|
@@ -1442,7 +1483,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
|
|
1442
1483
|
const measures = measureGroup.children;
|
1443
1484
|
if (!measures) return;
|
1444
1485
|
const groupId = measureGroup.id;
|
1445
|
-
const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
|
1486
|
+
const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(measures, (item)=>item.id), encoding, {
|
1446
1487
|
foldMeasureValue: `${FoldMeasureValue}${groupId}`,
|
1447
1488
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
1448
1489
|
});
|
@@ -1651,9 +1692,9 @@ const annotation_annotation = (advancedVSeed, context)=>{
|
|
1651
1692
|
};
|
1652
1693
|
const lineAdvancedPipeline = [
|
1653
1694
|
initAdvancedVSeed_initAdvancedVSeed,
|
1695
|
+
encodingForLine,
|
1654
1696
|
buildMeasures,
|
1655
1697
|
autoDimensions_autoDimensions,
|
1656
|
-
encodingForLine,
|
1657
1698
|
pivotAdapter([
|
1658
1699
|
reshapeWithEncoding
|
1659
1700
|
], [
|
@@ -2014,117 +2055,6 @@ const yLinear = (spec, context)=>{
|
|
2014
2055
|
];
|
2015
2056
|
return result;
|
2016
2057
|
};
|
2017
|
-
const label_label = (spec, context)=>{
|
2018
|
-
const result = {
|
2019
|
-
...spec
|
2020
|
-
};
|
2021
|
-
const { advancedVSeed } = context;
|
2022
|
-
const { measures, datasetReshapeInfo, locale } = advancedVSeed;
|
2023
|
-
const { chartType } = advancedVSeed;
|
2024
|
-
const baseConfig = advancedVSeed.config[chartType];
|
2025
|
-
if (!baseConfig || !baseConfig.label) return result;
|
2026
|
-
const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
|
2027
|
-
const { label } = baseConfig;
|
2028
|
-
const { enable } = label;
|
2029
|
-
result.label = {
|
2030
|
-
visible: enable,
|
2031
|
-
formatMethod: (value, datum)=>{
|
2032
|
-
const result = [];
|
2033
|
-
const formatValue = (value)=>{
|
2034
|
-
const id = datum[measureId];
|
2035
|
-
const measure = findMeasureById(measures, id);
|
2036
|
-
if (!measure) return value;
|
2037
|
-
const { format = {}, autoFormat = true } = measure;
|
2038
|
-
if (!isEmpty(format)) {
|
2039
|
-
const formatter = createFormatter(format);
|
2040
|
-
return formatter(value);
|
2041
|
-
}
|
2042
|
-
if (autoFormat) return autoFormatter(value, locale);
|
2043
|
-
return String(value);
|
2044
|
-
};
|
2045
|
-
result.push(formatValue(datum[measureValue]));
|
2046
|
-
return result.join(' ');
|
2047
|
-
}
|
2048
|
-
};
|
2049
|
-
return result;
|
2050
|
-
};
|
2051
|
-
const tooltip_tooltip = (spec, context)=>{
|
2052
|
-
const result = {
|
2053
|
-
...spec
|
2054
|
-
};
|
2055
|
-
const { advancedVSeed } = context;
|
2056
|
-
const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
|
2057
|
-
const baseConfig = advancedVSeed.config[chartType];
|
2058
|
-
const { tooltip = {
|
2059
|
-
enable: true
|
2060
|
-
} } = baseConfig;
|
2061
|
-
const { enable } = tooltip;
|
2062
|
-
const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
|
2063
|
-
const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
|
2064
|
-
result.tooltip = {
|
2065
|
-
visible: enable,
|
2066
|
-
mark: {
|
2067
|
-
title: {
|
2068
|
-
visible: true
|
2069
|
-
},
|
2070
|
-
content: [
|
2071
|
-
...dimensions.map((item)=>({
|
2072
|
-
visible: true,
|
2073
|
-
hasShape: true,
|
2074
|
-
shapeType: 'rectRound',
|
2075
|
-
key: (datum)=>{
|
2076
|
-
if (item.alias || item.id) return item.alias || item.id;
|
2077
|
-
return datum && datum[item.id];
|
2078
|
-
},
|
2079
|
-
value: (datum)=>datum && datum[item.id]
|
2080
|
-
})),
|
2081
|
-
{
|
2082
|
-
visible: true,
|
2083
|
-
hasShape: true,
|
2084
|
-
key: (datum)=>datum && datum[measureName || colorName] || '',
|
2085
|
-
value: (datum)=>{
|
2086
|
-
if (!datum) return '';
|
2087
|
-
const value = datum[measureValue];
|
2088
|
-
const id = datum[measureId];
|
2089
|
-
const measure = findMeasureById(measures, id);
|
2090
|
-
if (!measure) return String(value);
|
2091
|
-
const { format = {}, autoFormat = true } = measure;
|
2092
|
-
if (!isEmpty(format)) {
|
2093
|
-
const formatter = createFormatter(format);
|
2094
|
-
return formatter(value);
|
2095
|
-
}
|
2096
|
-
if (autoFormat) return autoFormatter(value, locale);
|
2097
|
-
return String(value);
|
2098
|
-
}
|
2099
|
-
}
|
2100
|
-
]
|
2101
|
-
},
|
2102
|
-
dimension: {
|
2103
|
-
content: [
|
2104
|
-
{
|
2105
|
-
visible: true,
|
2106
|
-
key: (datum)=>datum && datum[colorName] || '',
|
2107
|
-
value: (datum)=>{
|
2108
|
-
if (!datum) return '';
|
2109
|
-
const value = datum[measureValue];
|
2110
|
-
const id = datum[measureId];
|
2111
|
-
const measure = findMeasureById(measures, id);
|
2112
|
-
if (!measure) return String(value);
|
2113
|
-
const { format = {}, autoFormat = true } = measure;
|
2114
|
-
if (!isEmpty(format)) {
|
2115
|
-
const formatter = createFormatter(format);
|
2116
|
-
return formatter(value);
|
2117
|
-
}
|
2118
|
-
if (autoFormat) return autoFormatter(value, locale);
|
2119
|
-
return String(value);
|
2120
|
-
},
|
2121
|
-
shapeType: 'rectRound'
|
2122
|
-
}
|
2123
|
-
]
|
2124
|
-
}
|
2125
|
-
};
|
2126
|
-
return result;
|
2127
|
-
};
|
2128
2058
|
const verticalCrosshairLine = (spec, context)=>{
|
2129
2059
|
const result = {
|
2130
2060
|
...spec
|
@@ -2633,72 +2563,183 @@ const lineStyle_lineStyle = (spec, context)=>{
|
|
2633
2563
|
}
|
2634
2564
|
};
|
2635
2565
|
};
|
2636
|
-
const
|
2637
|
-
|
2638
|
-
|
2639
|
-
|
2640
|
-
});
|
2641
|
-
const annotationPoint_annotationPoint = (spec, context)=>{
|
2566
|
+
const label_label = (spec, context)=>{
|
2567
|
+
const result = {
|
2568
|
+
...spec
|
2569
|
+
};
|
2642
2570
|
const { advancedVSeed } = context;
|
2643
|
-
const {
|
2644
|
-
|
2645
|
-
const
|
2646
|
-
|
2647
|
-
|
2648
|
-
|
2649
|
-
const
|
2650
|
-
|
2651
|
-
|
2652
|
-
|
2653
|
-
|
2654
|
-
|
2655
|
-
|
2656
|
-
|
2657
|
-
|
2658
|
-
|
2659
|
-
|
2660
|
-
|
2661
|
-
|
2662
|
-
|
2663
|
-
|
2664
|
-
|
2665
|
-
|
2666
|
-
|
2667
|
-
|
2668
|
-
|
2669
|
-
|
2670
|
-
|
2671
|
-
|
2672
|
-
|
2673
|
-
|
2674
|
-
|
2675
|
-
|
2676
|
-
|
2677
|
-
|
2678
|
-
|
2679
|
-
|
2680
|
-
|
2681
|
-
|
2682
|
-
|
2683
|
-
|
2684
|
-
|
2685
|
-
|
2686
|
-
|
2687
|
-
|
2688
|
-
|
2689
|
-
|
2690
|
-
|
2691
|
-
|
2692
|
-
|
2693
|
-
|
2694
|
-
|
2695
|
-
|
2696
|
-
|
2697
|
-
|
2698
|
-
|
2699
|
-
|
2700
|
-
|
2701
|
-
|
2571
|
+
const { measures, datasetReshapeInfo, locale } = advancedVSeed;
|
2572
|
+
const { chartType } = advancedVSeed;
|
2573
|
+
const baseConfig = advancedVSeed.config[chartType];
|
2574
|
+
if (!baseConfig || !baseConfig.label) return result;
|
2575
|
+
const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
|
2576
|
+
const { label } = baseConfig;
|
2577
|
+
const { enable } = label;
|
2578
|
+
result.label = {
|
2579
|
+
visible: enable,
|
2580
|
+
formatMethod: (value, datum)=>{
|
2581
|
+
const result = [];
|
2582
|
+
const formatValue = (value)=>{
|
2583
|
+
const id = datum[measureId];
|
2584
|
+
const measure = findMeasureById(measures, id);
|
2585
|
+
if (!measure) return value;
|
2586
|
+
const { format = {}, autoFormat = true } = measure;
|
2587
|
+
if (!external_remeda_isEmpty(format)) {
|
2588
|
+
const formatter = createFormatter(format);
|
2589
|
+
return formatter(value);
|
2590
|
+
}
|
2591
|
+
if (autoFormat) return autoFormatter(value, locale);
|
2592
|
+
return String(value);
|
2593
|
+
};
|
2594
|
+
result.push(formatValue(datum[measureValue]));
|
2595
|
+
return result.join(' ');
|
2596
|
+
}
|
2597
|
+
};
|
2598
|
+
return result;
|
2599
|
+
};
|
2600
|
+
const tooltip_tooltip = (spec, context)=>{
|
2601
|
+
const result = {
|
2602
|
+
...spec
|
2603
|
+
};
|
2604
|
+
const { advancedVSeed } = context;
|
2605
|
+
const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
|
2606
|
+
const baseConfig = advancedVSeed.config[chartType];
|
2607
|
+
const { tooltip = {
|
2608
|
+
enable: true
|
2609
|
+
} } = baseConfig;
|
2610
|
+
const { enable } = tooltip;
|
2611
|
+
const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
|
2612
|
+
const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
|
2613
|
+
result.tooltip = {
|
2614
|
+
visible: enable,
|
2615
|
+
mark: {
|
2616
|
+
title: {
|
2617
|
+
visible: true
|
2618
|
+
},
|
2619
|
+
content: [
|
2620
|
+
...dimensions.map((item)=>({
|
2621
|
+
visible: true,
|
2622
|
+
hasShape: true,
|
2623
|
+
shapeType: 'rectRound',
|
2624
|
+
key: (datum)=>{
|
2625
|
+
if (item.alias || item.id) return item.alias || item.id;
|
2626
|
+
return datum && datum[item.id];
|
2627
|
+
},
|
2628
|
+
value: (datum)=>datum && datum[item.id]
|
2629
|
+
})),
|
2630
|
+
{
|
2631
|
+
visible: true,
|
2632
|
+
hasShape: true,
|
2633
|
+
key: (datum)=>datum && datum[measureName || colorName] || '',
|
2634
|
+
value: (datum)=>{
|
2635
|
+
if (!datum) return '';
|
2636
|
+
const value = datum[measureValue];
|
2637
|
+
const id = datum[measureId];
|
2638
|
+
const measure = findMeasureById(measures, id);
|
2639
|
+
if (!measure) return String(value);
|
2640
|
+
const { format = {}, autoFormat = true } = measure;
|
2641
|
+
if (!external_remeda_isEmpty(format)) {
|
2642
|
+
const formatter = createFormatter(format);
|
2643
|
+
return formatter(value);
|
2644
|
+
}
|
2645
|
+
if (autoFormat) return autoFormatter(value, locale);
|
2646
|
+
return String(value);
|
2647
|
+
}
|
2648
|
+
}
|
2649
|
+
]
|
2650
|
+
},
|
2651
|
+
dimension: {
|
2652
|
+
content: [
|
2653
|
+
{
|
2654
|
+
visible: true,
|
2655
|
+
key: (datum)=>datum && datum[colorName] || '',
|
2656
|
+
value: (datum)=>{
|
2657
|
+
if (!datum) return '';
|
2658
|
+
const value = datum[measureValue];
|
2659
|
+
const id = datum[measureId];
|
2660
|
+
const measure = findMeasureById(measures, id);
|
2661
|
+
if (!measure) return String(value);
|
2662
|
+
const { format = {}, autoFormat = true } = measure;
|
2663
|
+
if (!external_remeda_isEmpty(format)) {
|
2664
|
+
const formatter = createFormatter(format);
|
2665
|
+
return formatter(value);
|
2666
|
+
}
|
2667
|
+
if (autoFormat) return autoFormatter(value, locale);
|
2668
|
+
return String(value);
|
2669
|
+
},
|
2670
|
+
shapeType: 'rectRound'
|
2671
|
+
}
|
2672
|
+
]
|
2673
|
+
}
|
2674
|
+
};
|
2675
|
+
return result;
|
2676
|
+
};
|
2677
|
+
const isSubset = (sub, obj)=>Object.entries(sub).every(([key, value])=>{
|
2678
|
+
if ('string' == typeof value) return obj[key] === value;
|
2679
|
+
if ('number' == typeof value) return obj[key] === value;
|
2680
|
+
return true;
|
2681
|
+
});
|
2682
|
+
const annotationPoint_annotationPoint = (spec, context)=>{
|
2683
|
+
const { advancedVSeed } = context;
|
2684
|
+
const { annotation } = advancedVSeed;
|
2685
|
+
if (!annotation || !annotation.annotationPoint) return spec;
|
2686
|
+
const { annotationPoint } = annotation;
|
2687
|
+
const annotationPointList = Array.isArray(annotationPoint) ? annotationPoint : [
|
2688
|
+
annotationPoint
|
2689
|
+
];
|
2690
|
+
const markPoint = annotationPointList.flatMap((annotationPoint)=>{
|
2691
|
+
const { selector: selectorPoint, text = '', textColor = '#ffffff', textFontSize = 12, textFontWeight = 400, textAlign = 'center', textBaseline = 'top', textBackgroundBorderColor, textBackgroundBorderRadius = 4, textBackgroundBorderWidth = 1, textBackgroundColor = '#212121', textBackgroundPadding = 2, textBackgroundVisible = true, offsetX = 0, offsetY = 0 } = annotationPoint;
|
2692
|
+
const dataset = advancedVSeed.dataset.flat();
|
2693
|
+
const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
|
2694
|
+
return selectedData.map((datum)=>({
|
2695
|
+
zIndex: ANNOTATION_Z_INDEX,
|
2696
|
+
regionRelative: true,
|
2697
|
+
position: (data, context)=>{
|
2698
|
+
const targetDatum = data.find((item)=>isSubset(datum, item));
|
2699
|
+
if (targetDatum) {
|
2700
|
+
const { x, y } = context.dataToPosition(targetDatum);
|
2701
|
+
return {
|
2702
|
+
x,
|
2703
|
+
y
|
2704
|
+
};
|
2705
|
+
}
|
2706
|
+
},
|
2707
|
+
itemLine: {
|
2708
|
+
visible: false
|
2709
|
+
},
|
2710
|
+
itemContent: {
|
2711
|
+
offsetY,
|
2712
|
+
offsetX,
|
2713
|
+
text: {
|
2714
|
+
text: text,
|
2715
|
+
style: {
|
2716
|
+
visible: true,
|
2717
|
+
textAlign: textAlign,
|
2718
|
+
textBaseline: textBaseline,
|
2719
|
+
fill: textColor,
|
2720
|
+
stroke: textBackgroundColor,
|
2721
|
+
lineWidth: 1,
|
2722
|
+
fontSize: textFontSize,
|
2723
|
+
fontWeight: textFontWeight,
|
2724
|
+
dy: textFontSize
|
2725
|
+
},
|
2726
|
+
labelBackground: {
|
2727
|
+
visible: textBackgroundVisible,
|
2728
|
+
padding: textBackgroundPadding,
|
2729
|
+
style: {
|
2730
|
+
cornerRadius: textBackgroundBorderRadius ?? 4,
|
2731
|
+
fill: textBackgroundColor,
|
2732
|
+
stroke: textBackgroundBorderColor,
|
2733
|
+
lineWidth: textBackgroundBorderWidth,
|
2734
|
+
dy: textFontSize
|
2735
|
+
}
|
2736
|
+
}
|
2737
|
+
}
|
2738
|
+
}
|
2739
|
+
}));
|
2740
|
+
});
|
2741
|
+
return {
|
2742
|
+
...spec,
|
2702
2743
|
markPoint
|
2703
2744
|
};
|
2704
2745
|
};
|
@@ -3391,6 +3432,93 @@ const pivotDiscreteLegend = (spec, context)=>{
|
|
3391
3432
|
legends
|
3392
3433
|
};
|
3393
3434
|
};
|
3435
|
+
const pivotColorLegend = (spec, context)=>{
|
3436
|
+
const result = {
|
3437
|
+
...spec
|
3438
|
+
};
|
3439
|
+
const { advancedVSeed } = context;
|
3440
|
+
const { chartType } = advancedVSeed;
|
3441
|
+
const baseConfig = advancedVSeed.config[chartType];
|
3442
|
+
if (!baseConfig || !baseConfig.legend) return result;
|
3443
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
3444
|
+
const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
|
3445
|
+
const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
|
3446
|
+
const { legend, color } = baseConfig;
|
3447
|
+
const { colorScheme, linearColorScheme } = color;
|
3448
|
+
const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
|
3449
|
+
const orient = [
|
3450
|
+
'bottom',
|
3451
|
+
'bottomLeft',
|
3452
|
+
'bottomRight',
|
3453
|
+
'bl',
|
3454
|
+
'br'
|
3455
|
+
].includes(position) ? 'bottom' : [
|
3456
|
+
'top',
|
3457
|
+
'topLeft',
|
3458
|
+
'topRight',
|
3459
|
+
'tl',
|
3460
|
+
'tr'
|
3461
|
+
].includes(position) ? 'top' : [
|
3462
|
+
'left',
|
3463
|
+
'leftTop',
|
3464
|
+
'leftBottom',
|
3465
|
+
'lt',
|
3466
|
+
'lb'
|
3467
|
+
].includes(position) ? 'left' : 'right';
|
3468
|
+
const legendPosition = [
|
3469
|
+
'topLeft',
|
3470
|
+
'bottomLeft',
|
3471
|
+
'leftTop',
|
3472
|
+
'rightTop',
|
3473
|
+
'lt',
|
3474
|
+
'rt',
|
3475
|
+
'tl',
|
3476
|
+
'bl'
|
3477
|
+
].includes(position) ? 'start' : [
|
3478
|
+
'topRight',
|
3479
|
+
'bottomRight',
|
3480
|
+
'leftBottom',
|
3481
|
+
'rightBottom',
|
3482
|
+
'lb',
|
3483
|
+
'rb',
|
3484
|
+
'rt',
|
3485
|
+
'br'
|
3486
|
+
].includes(position) ? 'end' : 'middle';
|
3487
|
+
const legends = {
|
3488
|
+
visible: enable,
|
3489
|
+
type: 'color',
|
3490
|
+
orient,
|
3491
|
+
position: legendPosition,
|
3492
|
+
colors: linearColorScheme || colorScheme || [],
|
3493
|
+
value: [
|
3494
|
+
min,
|
3495
|
+
max
|
3496
|
+
],
|
3497
|
+
min: min,
|
3498
|
+
max: max,
|
3499
|
+
maxWidth: '30%',
|
3500
|
+
startText: {
|
3501
|
+
visible: true,
|
3502
|
+
style: {
|
3503
|
+
fill: labelFontColor,
|
3504
|
+
fontSize: labelFontSize,
|
3505
|
+
fontWeight: labelFontWeight
|
3506
|
+
}
|
3507
|
+
},
|
3508
|
+
endText: {
|
3509
|
+
visible: true,
|
3510
|
+
style: {
|
3511
|
+
fill: labelFontColor,
|
3512
|
+
fontSize: labelFontSize,
|
3513
|
+
fontWeight: labelFontWeight
|
3514
|
+
}
|
3515
|
+
}
|
3516
|
+
};
|
3517
|
+
return {
|
3518
|
+
...result,
|
3519
|
+
legends
|
3520
|
+
};
|
3521
|
+
};
|
3394
3522
|
const pivotAdapter_pivotAdapter = (pipeline, pivotPipeline)=>(spec, context)=>{
|
3395
3523
|
const { vseed } = context;
|
3396
3524
|
const usePivotChart = isPivotChart(vseed);
|
@@ -3405,13 +3533,13 @@ const line_line = [
|
|
3405
3533
|
progressive,
|
3406
3534
|
xBand,
|
3407
3535
|
yLinear,
|
3408
|
-
label_label,
|
3409
|
-
tooltip_tooltip,
|
3410
3536
|
verticalCrosshairLine,
|
3411
3537
|
colorAdapter(discreteLegend, colorLegend),
|
3412
3538
|
colorPointStyleFill(pointStyle_pointStyle),
|
3413
3539
|
pointStateDimensionHover,
|
3414
3540
|
colorLineStyleFill(lineStyle_lineStyle),
|
3541
|
+
label_label,
|
3542
|
+
tooltip_tooltip,
|
3415
3543
|
annotationPoint_annotationPoint,
|
3416
3544
|
annotationVerticalLine_annotationVerticalLine,
|
3417
3545
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -3424,18 +3552,18 @@ const pivotLine = [
|
|
3424
3552
|
datasetPivot,
|
3425
3553
|
pivotIndicators_pivotIndicators([
|
3426
3554
|
initLine,
|
3427
|
-
color_color,
|
3555
|
+
colorAdapter(color_color, linearColor),
|
3428
3556
|
background_backgroundColor,
|
3429
3557
|
datasetXY,
|
3430
3558
|
progressive,
|
3431
3559
|
xBand,
|
3432
3560
|
yLinear,
|
3433
|
-
label_label,
|
3434
|
-
tooltip_tooltip,
|
3435
3561
|
verticalCrosshairLine,
|
3436
|
-
pointStyle_pointStyle,
|
3562
|
+
colorPointStyleFill(pointStyle_pointStyle),
|
3437
3563
|
pointStateDimensionHover,
|
3438
|
-
lineStyle_lineStyle,
|
3564
|
+
colorLineStyleFill(lineStyle_lineStyle),
|
3565
|
+
label_label,
|
3566
|
+
tooltip_tooltip,
|
3439
3567
|
annotationPoint_annotationPoint,
|
3440
3568
|
annotationVerticalLine_annotationVerticalLine,
|
3441
3569
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -3443,7 +3571,7 @@ const pivotLine = [
|
|
3443
3571
|
]),
|
3444
3572
|
pivotRowDimensions,
|
3445
3573
|
pivotColumnDimensions,
|
3446
|
-
pivotDiscreteLegend
|
3574
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
3447
3575
|
];
|
3448
3576
|
const lineSpecPipeline = [
|
3449
3577
|
pivotAdapter_pivotAdapter(line_line, pivotLine)
|
@@ -3454,51 +3582,58 @@ const registerLine = ()=>{
|
|
3454
3582
|
};
|
3455
3583
|
const encodingForColumn = (advancedVSeed, context)=>{
|
3456
3584
|
const { vseed } = context;
|
3457
|
-
const {
|
3458
|
-
|
3459
|
-
const
|
3460
|
-
|
3461
|
-
|
3462
|
-
|
3463
|
-
|
3464
|
-
|
3465
|
-
|
3466
|
-
|
3467
|
-
const detail = encoding.detail || [];
|
3468
|
-
const mergedDetail = 0 === detail.length ? unique([
|
3469
|
-
...color,
|
3470
|
-
...detail
|
3471
|
-
]) : detail;
|
3472
|
-
return {
|
3473
|
-
...advancedVSeed,
|
3474
|
-
encoding: {
|
3475
|
-
...encoding,
|
3476
|
-
x,
|
3477
|
-
color,
|
3478
|
-
detail: mergedDetail
|
3479
|
-
}
|
3480
|
-
};
|
3481
|
-
}
|
3482
|
-
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
3483
|
-
const mergedEncoding = {
|
3484
|
-
x: dimensions.slice(0, 1).map((item)=>item.id),
|
3485
|
-
color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
3486
|
-
detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
3487
|
-
tooltip: dimensions.map((item)=>item.id),
|
3488
|
-
label: [],
|
3489
|
-
row: [],
|
3490
|
-
column: []
|
3491
|
-
};
|
3585
|
+
const { measures: vseedMeasures = [] } = vseed;
|
3586
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
3587
|
+
const dimensions = getBasicDimensions(vseed);
|
3588
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
3589
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
3590
|
+
const encoding = {};
|
3591
|
+
if (hasDimensionEncoding) column_generateDimensionEncoding(dimensions, encoding);
|
3592
|
+
else column_generateDefaultDimensionEncoding(dimensions, encoding);
|
3593
|
+
if (hasMeasureEncoding) column_generateMeasureEncoding(measures, encoding);
|
3594
|
+
else column_generateDefaultMeasureEncoding(measures, encoding);
|
3492
3595
|
return {
|
3493
3596
|
...advancedVSeed,
|
3494
|
-
encoding
|
3597
|
+
encoding
|
3495
3598
|
};
|
3496
3599
|
};
|
3600
|
+
const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
3601
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
3602
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
3603
|
+
};
|
3604
|
+
const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
3605
|
+
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
3606
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
3607
|
+
encoding.x = uniqueDimIds.slice(0, 1);
|
3608
|
+
encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
3609
|
+
encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
3610
|
+
encoding.tooltip = uniqueDimIds;
|
3611
|
+
encoding.label = [];
|
3612
|
+
encoding.row = [];
|
3613
|
+
encoding.column = [];
|
3614
|
+
};
|
3615
|
+
const column_generateMeasureEncoding = (measures, encoding)=>{
|
3616
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
3617
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
3618
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
3619
|
+
if (color.length > 0) encoding.color = color;
|
3620
|
+
return encoding;
|
3621
|
+
};
|
3622
|
+
const column_generateDimensionEncoding = (dimensions, encoding)=>{
|
3623
|
+
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
|
3624
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
3625
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
3626
|
+
if (0 === encoding.x.length) encoding.x = [
|
3627
|
+
dimensions[0].id
|
3628
|
+
];
|
3629
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
3630
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
3631
|
+
};
|
3497
3632
|
const columnAdvancedPipeline = [
|
3498
3633
|
initAdvancedVSeed_initAdvancedVSeed,
|
3634
|
+
encodingForColumn,
|
3499
3635
|
buildMeasures,
|
3500
3636
|
autoDimensions_autoDimensions,
|
3501
|
-
encodingForColumn,
|
3502
3637
|
pivotAdapter([
|
3503
3638
|
reshapeWithEncoding
|
3504
3639
|
], [
|
@@ -3801,93 +3936,6 @@ const annotationAreaBand = (spec, context)=>{
|
|
3801
3936
|
markArea: markArea
|
3802
3937
|
};
|
3803
3938
|
};
|
3804
|
-
const pivotColorLegend = (spec, context)=>{
|
3805
|
-
const result = {
|
3806
|
-
...spec
|
3807
|
-
};
|
3808
|
-
const { advancedVSeed } = context;
|
3809
|
-
const { chartType } = advancedVSeed;
|
3810
|
-
const baseConfig = advancedVSeed.config[chartType];
|
3811
|
-
if (!baseConfig || !baseConfig.legend) return result;
|
3812
|
-
const { datasetReshapeInfo } = advancedVSeed;
|
3813
|
-
const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
|
3814
|
-
const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
|
3815
|
-
const { legend, color } = baseConfig;
|
3816
|
-
const { colorScheme, linearColorScheme } = color;
|
3817
|
-
const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
|
3818
|
-
const orient = [
|
3819
|
-
'bottom',
|
3820
|
-
'bottomLeft',
|
3821
|
-
'bottomRight',
|
3822
|
-
'bl',
|
3823
|
-
'br'
|
3824
|
-
].includes(position) ? 'bottom' : [
|
3825
|
-
'top',
|
3826
|
-
'topLeft',
|
3827
|
-
'topRight',
|
3828
|
-
'tl',
|
3829
|
-
'tr'
|
3830
|
-
].includes(position) ? 'top' : [
|
3831
|
-
'left',
|
3832
|
-
'leftTop',
|
3833
|
-
'leftBottom',
|
3834
|
-
'lt',
|
3835
|
-
'lb'
|
3836
|
-
].includes(position) ? 'left' : 'right';
|
3837
|
-
const legendPosition = [
|
3838
|
-
'topLeft',
|
3839
|
-
'bottomLeft',
|
3840
|
-
'leftTop',
|
3841
|
-
'rightTop',
|
3842
|
-
'lt',
|
3843
|
-
'rt',
|
3844
|
-
'tl',
|
3845
|
-
'bl'
|
3846
|
-
].includes(position) ? 'start' : [
|
3847
|
-
'topRight',
|
3848
|
-
'bottomRight',
|
3849
|
-
'leftBottom',
|
3850
|
-
'rightBottom',
|
3851
|
-
'lb',
|
3852
|
-
'rb',
|
3853
|
-
'rt',
|
3854
|
-
'br'
|
3855
|
-
].includes(position) ? 'end' : 'middle';
|
3856
|
-
const legends = {
|
3857
|
-
visible: enable,
|
3858
|
-
type: 'color',
|
3859
|
-
orient,
|
3860
|
-
position: legendPosition,
|
3861
|
-
colors: linearColorScheme || colorScheme || [],
|
3862
|
-
value: [
|
3863
|
-
min,
|
3864
|
-
max
|
3865
|
-
],
|
3866
|
-
min: min,
|
3867
|
-
max: max,
|
3868
|
-
maxWidth: '30%',
|
3869
|
-
startText: {
|
3870
|
-
visible: true,
|
3871
|
-
style: {
|
3872
|
-
fill: labelFontColor,
|
3873
|
-
fontSize: labelFontSize,
|
3874
|
-
fontWeight: labelFontWeight
|
3875
|
-
}
|
3876
|
-
},
|
3877
|
-
endText: {
|
3878
|
-
visible: true,
|
3879
|
-
style: {
|
3880
|
-
fill: labelFontColor,
|
3881
|
-
fontSize: labelFontSize,
|
3882
|
-
fontWeight: labelFontWeight
|
3883
|
-
}
|
3884
|
-
}
|
3885
|
-
};
|
3886
|
-
return {
|
3887
|
-
...result,
|
3888
|
-
legends
|
3889
|
-
};
|
3890
|
-
};
|
3891
3939
|
const column = [
|
3892
3940
|
initColumn,
|
3893
3941
|
stackCornerRadius_stackCornerRadius,
|
@@ -3945,9 +3993,9 @@ const registerColumn = ()=>{
|
|
3945
3993
|
};
|
3946
3994
|
const columnParallelAdvancedPipeline = [
|
3947
3995
|
initAdvancedVSeed_initAdvancedVSeed,
|
3996
|
+
encodingForColumn,
|
3948
3997
|
buildMeasures,
|
3949
3998
|
autoDimensions_autoDimensions,
|
3950
|
-
encodingForColumn,
|
3951
3999
|
pivotAdapter([
|
3952
4000
|
reshapeWithEncoding
|
3953
4001
|
], [
|
@@ -4042,9 +4090,9 @@ const registerColumnParallel = ()=>{
|
|
4042
4090
|
};
|
4043
4091
|
const columnPercentAdvancedPipeline = [
|
4044
4092
|
initAdvancedVSeed_initAdvancedVSeed,
|
4093
|
+
encodingForColumn,
|
4045
4094
|
buildMeasures,
|
4046
4095
|
autoDimensions_autoDimensions,
|
4047
|
-
encodingForColumn,
|
4048
4096
|
pivotAdapter([
|
4049
4097
|
reshapeWithEncoding
|
4050
4098
|
], [
|
@@ -4123,46 +4171,53 @@ const registerColumnPercent = ()=>{
|
|
4123
4171
|
};
|
4124
4172
|
const encodingForBar = (advancedVSeed, context)=>{
|
4125
4173
|
const { vseed } = context;
|
4126
|
-
const {
|
4127
|
-
|
4128
|
-
const
|
4129
|
-
|
4130
|
-
|
4131
|
-
|
4132
|
-
|
4133
|
-
|
4134
|
-
|
4135
|
-
|
4136
|
-
const detail = encoding.detail || [];
|
4137
|
-
const mergedDetail = 0 === detail.length ? unique([
|
4138
|
-
...color,
|
4139
|
-
...detail
|
4140
|
-
]) : detail;
|
4141
|
-
return {
|
4142
|
-
...advancedVSeed,
|
4143
|
-
encoding: {
|
4144
|
-
...encoding,
|
4145
|
-
y,
|
4146
|
-
color,
|
4147
|
-
detail: mergedDetail
|
4148
|
-
}
|
4149
|
-
};
|
4150
|
-
}
|
4151
|
-
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
4152
|
-
const mergedEncoding = {
|
4153
|
-
y: dimensions.slice(0, 1).map((item)=>item.id),
|
4154
|
-
color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
4155
|
-
detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
4156
|
-
tooltip: dimensions.map((item)=>item.id),
|
4157
|
-
label: [],
|
4158
|
-
row: [],
|
4159
|
-
column: []
|
4160
|
-
};
|
4174
|
+
const { measures: vseedMeasures = [] } = vseed;
|
4175
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
4176
|
+
const dimensions = getBasicDimensions(vseed);
|
4177
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
4178
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
4179
|
+
const encoding = {};
|
4180
|
+
if (hasDimensionEncoding) bar_generateDimensionEncoding(dimensions, encoding);
|
4181
|
+
else bar_generateDefaultDimensionEncoding(dimensions, encoding);
|
4182
|
+
if (hasMeasureEncoding) bar_generateMeasureEncoding(measures, encoding);
|
4183
|
+
else bar_generateDefaultMeasureEncoding(measures, encoding);
|
4161
4184
|
return {
|
4162
4185
|
...advancedVSeed,
|
4163
|
-
encoding
|
4186
|
+
encoding
|
4164
4187
|
};
|
4165
4188
|
};
|
4189
|
+
const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
4190
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
4191
|
+
encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
4192
|
+
};
|
4193
|
+
const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
4194
|
+
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
4195
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
4196
|
+
encoding.y = uniqueDimIds.slice(0, 1);
|
4197
|
+
encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
4198
|
+
encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
4199
|
+
encoding.tooltip = uniqueDimIds;
|
4200
|
+
encoding.label = [];
|
4201
|
+
encoding.row = [];
|
4202
|
+
encoding.column = [];
|
4203
|
+
};
|
4204
|
+
const bar_generateMeasureEncoding = (measures, encoding)=>{
|
4205
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
4206
|
+
encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
4207
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
4208
|
+
if (color.length > 0) encoding.color = color;
|
4209
|
+
return encoding;
|
4210
|
+
};
|
4211
|
+
const bar_generateDimensionEncoding = (dimensions, encoding)=>{
|
4212
|
+
encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
|
4213
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
4214
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
4215
|
+
if (0 === encoding.y.length) encoding.y = [
|
4216
|
+
dimensions[0].id
|
4217
|
+
];
|
4218
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
|
4219
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
|
4220
|
+
};
|
4166
4221
|
const sortYBandAxis = (advancedVSeed, context)=>{
|
4167
4222
|
const result = {
|
4168
4223
|
...advancedVSeed
|
@@ -4181,9 +4236,9 @@ const sortYBandAxis = (advancedVSeed, context)=>{
|
|
4181
4236
|
};
|
4182
4237
|
const barAdvancedPipeline = [
|
4183
4238
|
initAdvancedVSeed_initAdvancedVSeed,
|
4239
|
+
encodingForBar,
|
4184
4240
|
buildMeasures,
|
4185
4241
|
autoDimensions_autoDimensions,
|
4186
|
-
encodingForBar,
|
4187
4242
|
pivotAdapter([
|
4188
4243
|
reshapeWithEncoding
|
4189
4244
|
], [
|
@@ -4701,9 +4756,9 @@ const registerBarPercent = ()=>{
|
|
4701
4756
|
};
|
4702
4757
|
const areaAdvancedPipeline = [
|
4703
4758
|
initAdvancedVSeed_initAdvancedVSeed,
|
4759
|
+
encodingForLine,
|
4704
4760
|
buildMeasures,
|
4705
4761
|
autoDimensions_autoDimensions,
|
4706
|
-
encodingForColumn,
|
4707
4762
|
pivotAdapter([
|
4708
4763
|
reshapeWithEncoding
|
4709
4764
|
], [
|
@@ -4859,9 +4914,9 @@ const registerArea = ()=>{
|
|
4859
4914
|
};
|
4860
4915
|
const areaPercentAdvancedPipeline = [
|
4861
4916
|
initAdvancedVSeed_initAdvancedVSeed,
|
4917
|
+
encodingForLine,
|
4862
4918
|
buildMeasures,
|
4863
4919
|
autoDimensions_autoDimensions,
|
4864
|
-
encodingForColumn,
|
4865
4920
|
pivotAdapter([
|
4866
4921
|
reshapeWithEncoding
|
4867
4922
|
], [
|
@@ -4935,6 +4990,49 @@ const registerAreaPercent = ()=>{
|
|
4935
4990
|
Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
|
4936
4991
|
Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
|
4937
4992
|
};
|
4993
|
+
const encodingForScatter = (advancedVSeed, context)=>{
|
4994
|
+
const { vseed } = context;
|
4995
|
+
const { measures: vseedMeasures = [] } = vseed;
|
4996
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
4997
|
+
const dimensions = getBasicDimensions(vseed);
|
4998
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
4999
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
5000
|
+
const encoding = {};
|
5001
|
+
if (hasDimensionEncoding) scatter_generateDimensionEncoding(dimensions, encoding);
|
5002
|
+
else scatter_generateDefaultDimensionEncoding(dimensions, encoding);
|
5003
|
+
if (hasMeasureEncoding) scatter_generateMeasureEncoding(measures, encoding);
|
5004
|
+
else scatter_generateDefaultMeasureEncoding(measures, encoding);
|
5005
|
+
return {
|
5006
|
+
...advancedVSeed,
|
5007
|
+
encoding
|
5008
|
+
};
|
5009
|
+
};
|
5010
|
+
const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
5011
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
5012
|
+
encoding.y = unique(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
5013
|
+
};
|
5014
|
+
const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
5015
|
+
const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
|
5016
|
+
const uniqueDimIds = unique(dimensionsWithoutMeasureName.map((d)=>d.id));
|
5017
|
+
encoding.color = uniqueDimIds.slice(0);
|
5018
|
+
encoding.detail = uniqueDimIds.slice(0);
|
5019
|
+
encoding.tooltip = uniqueDimIds;
|
5020
|
+
encoding.label = [];
|
5021
|
+
encoding.row = [];
|
5022
|
+
encoding.column = [];
|
5023
|
+
};
|
5024
|
+
const scatter_generateMeasureEncoding = (measures, encoding)=>{
|
5025
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
5026
|
+
encoding.y = unique(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
5027
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
5028
|
+
if (color.length > 0) encoding.color = color;
|
5029
|
+
};
|
5030
|
+
const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
|
5031
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
5032
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
5033
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
5034
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
5035
|
+
};
|
4938
5036
|
const buildMeasuresForScatter = (advancedVSeed, context)=>{
|
4939
5037
|
const { vseed } = context;
|
4940
5038
|
if (isMeasureTreeWithChildren(vseed)) {
|
@@ -5025,52 +5123,16 @@ const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
|
|
5025
5123
|
const encoding = Array.isArray(item.encoding) ? item.encoding : [
|
5026
5124
|
item.encoding
|
5027
5125
|
];
|
5028
|
-
const isY = encoding.includes('yAxis');
|
5029
5126
|
const isX = encoding.includes('xAxis');
|
5127
|
+
const isY = encoding.includes('yAxis');
|
5128
|
+
const isEmpty = !encoding.length;
|
5030
5129
|
if (isY) scatterChart.yMeasures.push(item);
|
5031
5130
|
else if (isX) scatterChart.xMeasures.push(item);
|
5032
|
-
else if (
|
5131
|
+
else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
|
5033
5132
|
else scatterChart.xMeasures.push(item);
|
5034
5133
|
});
|
5035
5134
|
return scatterMeasuresToMeasureTree(scatterMeasures);
|
5036
5135
|
};
|
5037
|
-
const encodingForScatter = (advancedVSeed, context)=>{
|
5038
|
-
const { vseed } = context;
|
5039
|
-
const { dimensions } = advancedVSeed;
|
5040
|
-
if (!dimensions) return advancedVSeed;
|
5041
|
-
const encoding = vseed.encoding;
|
5042
|
-
if (encoding) {
|
5043
|
-
const detail = encoding.detail || [];
|
5044
|
-
const color = encoding.color || [
|
5045
|
-
(dimensions[1] || dimensions[0]).id
|
5046
|
-
];
|
5047
|
-
const mergedDetail = 0 === detail.length ? unique([
|
5048
|
-
...color,
|
5049
|
-
...detail
|
5050
|
-
]) : detail;
|
5051
|
-
return {
|
5052
|
-
...advancedVSeed,
|
5053
|
-
encoding: {
|
5054
|
-
...encoding,
|
5055
|
-
color,
|
5056
|
-
detail: mergedDetail
|
5057
|
-
}
|
5058
|
-
};
|
5059
|
-
}
|
5060
|
-
const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
|
5061
|
-
const mergedEncoding = {
|
5062
|
-
color: dimensions.slice(0).map((item)=>item.id),
|
5063
|
-
detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
|
5064
|
-
tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
|
5065
|
-
label: [],
|
5066
|
-
row: [],
|
5067
|
-
column: []
|
5068
|
-
};
|
5069
|
-
return {
|
5070
|
-
...advancedVSeed,
|
5071
|
-
encoding: mergedEncoding
|
5072
|
-
};
|
5073
|
-
};
|
5074
5136
|
const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
|
5075
5137
|
const result = {
|
5076
5138
|
...advancedVSeed
|
@@ -5087,7 +5149,7 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
|
|
5087
5149
|
const xMeasures = measures[0];
|
5088
5150
|
const yMeasures = measures[1] || xMeasures;
|
5089
5151
|
if (xMeasures && xMeasures.children) {
|
5090
|
-
const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
|
5152
|
+
const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (d)=>d.id), uniqueBy(xMeasures.children, (d)=>d.id), encoding, {
|
5091
5153
|
foldMeasureValue: FoldXMeasureValue,
|
5092
5154
|
colorItemAsId: true,
|
5093
5155
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
@@ -5097,7 +5159,7 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
|
|
5097
5159
|
unfoldInfoList.push(unfoldInfo);
|
5098
5160
|
}
|
5099
5161
|
if (yMeasures && yMeasures.children) {
|
5100
|
-
const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
|
5162
|
+
const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], uniqueBy(dimensions, (d)=>d.id), uniqueBy(yMeasures.children, (d)=>d.id), encoding, {
|
5101
5163
|
foldMeasureValue: FoldYMeasureValue,
|
5102
5164
|
colorItemAsId: true,
|
5103
5165
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
@@ -5201,9 +5263,9 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
|
|
5201
5263
|
};
|
5202
5264
|
const scatterAdvancedPipeline = [
|
5203
5265
|
initAdvancedVSeed_initAdvancedVSeed,
|
5266
|
+
encodingForScatter,
|
5204
5267
|
buildMeasuresForScatter,
|
5205
5268
|
autoDimensions_autoDimensions,
|
5206
|
-
encodingForScatter,
|
5207
5269
|
pivotAdapter([
|
5208
5270
|
reshapeWithScatterEncoding
|
5209
5271
|
], [
|
@@ -5339,7 +5401,7 @@ const pivotScatter = [
|
|
5339
5401
|
]),
|
5340
5402
|
pivotRowDimensions,
|
5341
5403
|
pivotColumnDimensions,
|
5342
|
-
pivotDiscreteLegend
|
5404
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
5343
5405
|
];
|
5344
5406
|
const scatterSpecPipeline = [
|
5345
5407
|
pivotAdapter_pivotAdapter(scatter, pivotScatter)
|
@@ -5348,6 +5410,55 @@ const registerScatter = ()=>{
|
|
5348
5410
|
Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
|
5349
5411
|
Builder._specPipelineMap.scatter = scatterSpecPipeline;
|
5350
5412
|
};
|
5413
|
+
const encodingForDualAxis = (advancedVSeed, context)=>{
|
5414
|
+
const { vseed } = context;
|
5415
|
+
const { measures: vseedMeasures = [] } = vseed;
|
5416
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
5417
|
+
const dimensions = getBasicDimensions(vseed);
|
5418
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
5419
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
5420
|
+
const encoding = {};
|
5421
|
+
if (hasDimensionEncoding) dualAxis_generateDimensionEncoding(dimensions, encoding);
|
5422
|
+
else dualAxis_generateDefaultDimensionEncoding(dimensions, encoding);
|
5423
|
+
if (hasMeasureEncoding) dualAxis_generateMeasureEncoding(measures, encoding);
|
5424
|
+
else dualAxis_generateDefaultMeasureEncoding(measures, encoding);
|
5425
|
+
return {
|
5426
|
+
...advancedVSeed,
|
5427
|
+
encoding
|
5428
|
+
};
|
5429
|
+
};
|
5430
|
+
const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
5431
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
5432
|
+
encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
5433
|
+
};
|
5434
|
+
const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
5435
|
+
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
5436
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
5437
|
+
encoding.x = uniqueDimIds.slice(0, 1);
|
5438
|
+
encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
5439
|
+
encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
5440
|
+
encoding.tooltip = uniqueDimIds;
|
5441
|
+
encoding.label = [];
|
5442
|
+
encoding.row = [];
|
5443
|
+
encoding.column = [];
|
5444
|
+
};
|
5445
|
+
const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
|
5446
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
5447
|
+
encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
5448
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
5449
|
+
if (color.length > 0) encoding.color = color;
|
5450
|
+
return encoding;
|
5451
|
+
};
|
5452
|
+
const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
|
5453
|
+
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
|
5454
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
5455
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
5456
|
+
if (0 === encoding.x.length) encoding.x = [
|
5457
|
+
dimensions[0].id
|
5458
|
+
];
|
5459
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
5460
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
5461
|
+
};
|
5351
5462
|
const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
|
5352
5463
|
const { vseed } = context;
|
5353
5464
|
if (isMeasureTreeWithChildren(vseed)) {
|
@@ -5440,54 +5551,14 @@ const buildMeasuresForDualAxis_generateMeasuresByParentId = (measures)=>{
|
|
5440
5551
|
];
|
5441
5552
|
const isPrimary = encoding.includes('primaryYAxis');
|
5442
5553
|
const isSecondary = encoding.includes('secondaryYAxis');
|
5554
|
+
const isEmpty = !item.encoding;
|
5443
5555
|
if (isPrimary) dualChart.primaryMeasures.push(item);
|
5444
5556
|
else if (isSecondary) dualChart.secondaryMeasures.push(item);
|
5445
|
-
else if (
|
5557
|
+
else if (isEmpty) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
|
5446
5558
|
else dualChart.secondaryMeasures.push(item);
|
5447
5559
|
});
|
5448
5560
|
return dualMeasuresToMeasureTree(dualMeasures);
|
5449
5561
|
};
|
5450
|
-
const encodingForDualAxis = (advancedVSeed, context)=>{
|
5451
|
-
const { vseed } = context;
|
5452
|
-
const { dimensions } = advancedVSeed;
|
5453
|
-
if (!dimensions) return advancedVSeed;
|
5454
|
-
const encoding = vseed.encoding;
|
5455
|
-
if (encoding) {
|
5456
|
-
const x = encoding.x || [
|
5457
|
-
dimensions[0].id
|
5458
|
-
];
|
5459
|
-
const color = encoding.color || [
|
5460
|
-
(dimensions[1] || dimensions[0]).id
|
5461
|
-
];
|
5462
|
-
const detail = encoding.detail || [];
|
5463
|
-
const mergedDetail = 0 === detail.length ? unique([
|
5464
|
-
...color,
|
5465
|
-
...detail
|
5466
|
-
]) : detail;
|
5467
|
-
return {
|
5468
|
-
...advancedVSeed,
|
5469
|
-
encoding: {
|
5470
|
-
...encoding,
|
5471
|
-
x,
|
5472
|
-
color,
|
5473
|
-
detail: mergedDetail
|
5474
|
-
}
|
5475
|
-
};
|
5476
|
-
}
|
5477
|
-
const mergedEncoding = {
|
5478
|
-
x: dimensions.slice(0, 1).map((item)=>item.id),
|
5479
|
-
color: dimensions.slice(1).map((item)=>item.id),
|
5480
|
-
detail: dimensions.slice(1).map((item)=>item.id),
|
5481
|
-
tooltip: dimensions.map((item)=>item.id),
|
5482
|
-
label: [],
|
5483
|
-
row: [],
|
5484
|
-
column: []
|
5485
|
-
};
|
5486
|
-
return {
|
5487
|
-
...advancedVSeed,
|
5488
|
-
encoding: mergedEncoding
|
5489
|
-
};
|
5490
|
-
};
|
5491
5562
|
const reshapeWithDualEncoding = (advancedVSeed, context)=>{
|
5492
5563
|
const result = {
|
5493
5564
|
...advancedVSeed
|
@@ -5637,9 +5708,9 @@ const dualAxisConfig = (advancedVSeed, context)=>{
|
|
5637
5708
|
};
|
5638
5709
|
const dualAxisAdvancedPipeline = [
|
5639
5710
|
initAdvancedVSeed_initAdvancedVSeed,
|
5711
|
+
encodingForDualAxis,
|
5640
5712
|
buildMeasuresForDualAxis,
|
5641
5713
|
autoDimensions_autoDimensions,
|
5642
|
-
encodingForDualAxis,
|
5643
5714
|
pivotAdapter([
|
5644
5715
|
reshapeWithDualEncoding
|
5645
5716
|
], [
|
@@ -5942,7 +6013,7 @@ const labelPrimary = (spec, context)=>{
|
|
5942
6013
|
const measure = findMeasureById(measures, id);
|
5943
6014
|
if (!measure) return value;
|
5944
6015
|
const { format = {}, autoFormat = true } = measure;
|
5945
|
-
if (!
|
6016
|
+
if (!external_remeda_isEmpty(format)) {
|
5946
6017
|
const formatter = createFormatter(format);
|
5947
6018
|
return formatter(value);
|
5948
6019
|
}
|
@@ -5978,7 +6049,7 @@ const labelSecondary = (spec, context)=>{
|
|
5978
6049
|
const measure = findMeasureById(measures, id);
|
5979
6050
|
if (!measure) return value;
|
5980
6051
|
const { format = {}, autoFormat = true } = measure;
|
5981
|
-
if (!
|
6052
|
+
if (!external_remeda_isEmpty(format)) {
|
5982
6053
|
const formatter = createFormatter(format);
|
5983
6054
|
return formatter(value);
|
5984
6055
|
}
|
@@ -6034,7 +6105,7 @@ const tooltipPrimary = (spec, context)=>{
|
|
6034
6105
|
const measure = findMeasureById(measures, id);
|
6035
6106
|
if (!measure) return String(value);
|
6036
6107
|
const { format = {}, autoFormat = true } = measure;
|
6037
|
-
if (!
|
6108
|
+
if (!external_remeda_isEmpty(format)) {
|
6038
6109
|
const formatter = createFormatter(format);
|
6039
6110
|
return formatter(value);
|
6040
6111
|
}
|
@@ -6056,7 +6127,7 @@ const tooltipPrimary = (spec, context)=>{
|
|
6056
6127
|
const measure = findMeasureById(measures, id);
|
6057
6128
|
if (!measure) return String(value);
|
6058
6129
|
const { format = {}, autoFormat = true } = measure;
|
6059
|
-
if (!
|
6130
|
+
if (!external_remeda_isEmpty(format)) {
|
6060
6131
|
const formatter = createFormatter(format);
|
6061
6132
|
return formatter(value);
|
6062
6133
|
}
|
@@ -6114,7 +6185,7 @@ const tooltipSecondary = (spec, context)=>{
|
|
6114
6185
|
const measure = findMeasureById(measures, id);
|
6115
6186
|
if (!measure) return String(value);
|
6116
6187
|
const { format = {}, autoFormat = true } = measure;
|
6117
|
-
if (!
|
6188
|
+
if (!external_remeda_isEmpty(format)) {
|
6118
6189
|
const formatter = createFormatter(format);
|
6119
6190
|
return formatter(value);
|
6120
6191
|
}
|
@@ -6136,7 +6207,7 @@ const tooltipSecondary = (spec, context)=>{
|
|
6136
6207
|
const measure = findMeasureById(measures, id);
|
6137
6208
|
if (!measure) return String(value);
|
6138
6209
|
const { format = {}, autoFormat = true } = measure;
|
6139
|
-
if (!
|
6210
|
+
if (!external_remeda_isEmpty(format)) {
|
6140
6211
|
const formatter = createFormatter(format);
|
6141
6212
|
return formatter(value);
|
6142
6213
|
}
|
@@ -6162,7 +6233,7 @@ const yLinearPrimary = (spec, context)=>{
|
|
6162
6233
|
const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
|
6163
6234
|
const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
|
6164
6235
|
const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
|
6165
|
-
if (foldInfoList?.[0] &&
|
6236
|
+
if (foldInfoList?.[0] && external_remeda_isEmpty(foldInfoList[0].foldMap)) return result;
|
6166
6237
|
const id = `${reshapeInfoId}-primary-axis`;
|
6167
6238
|
const seriesIds = [
|
6168
6239
|
`${reshapeInfoId}-primary-series`,
|
@@ -6474,33 +6545,51 @@ const registerDualAxis = ()=>{
|
|
6474
6545
|
};
|
6475
6546
|
const encodingForPie = (advancedVSeed, context)=>{
|
6476
6547
|
const { vseed } = context;
|
6477
|
-
const {
|
6478
|
-
|
6479
|
-
const
|
6480
|
-
|
6481
|
-
|
6482
|
-
|
6483
|
-
|
6484
|
-
|
6485
|
-
|
6486
|
-
|
6487
|
-
color: dimensions.slice(0).map((item)=>item.id),
|
6488
|
-
detail: dimensions.slice(0).map((item)=>item.id),
|
6489
|
-
tooltip: dimensions.map((item)=>item.id),
|
6490
|
-
label: [],
|
6491
|
-
row: [],
|
6492
|
-
column: []
|
6493
|
-
};
|
6548
|
+
const { measures: vseedMeasures = [] } = vseed;
|
6549
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
6550
|
+
const dimensions = getBasicDimensions(vseed);
|
6551
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
6552
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
6553
|
+
const encoding = {};
|
6554
|
+
if (hasDimensionEncoding) pie_generateDimensionEncoding(dimensions, encoding);
|
6555
|
+
else pie_generateDefaultDimensionEncoding(dimensions, encoding);
|
6556
|
+
if (hasMeasureEncoding) pie_generateMeasureEncoding(measures, encoding);
|
6557
|
+
else pie_generateDefaultMeasureEncoding(measures, encoding);
|
6494
6558
|
return {
|
6495
6559
|
...advancedVSeed,
|
6496
|
-
encoding
|
6497
|
-
};
|
6560
|
+
encoding
|
6561
|
+
};
|
6562
|
+
};
|
6563
|
+
const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
6564
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
6565
|
+
encoding.angle = unique(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
|
6566
|
+
};
|
6567
|
+
const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
6568
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
6569
|
+
encoding.color = uniqueDimIds.slice(0);
|
6570
|
+
encoding.detail = uniqueDimIds.slice(0);
|
6571
|
+
encoding.tooltip = uniqueDimIds;
|
6572
|
+
encoding.label = [];
|
6573
|
+
encoding.row = [];
|
6574
|
+
encoding.column = [];
|
6575
|
+
};
|
6576
|
+
const pie_generateMeasureEncoding = (measures, encoding)=>{
|
6577
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
6578
|
+
encoding.angle = unique(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
|
6579
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
6580
|
+
if (color.length > 0) encoding.color = color;
|
6581
|
+
};
|
6582
|
+
const pie_generateDimensionEncoding = (dimensions, encoding)=>{
|
6583
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
6584
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
6585
|
+
if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
|
6586
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
|
6498
6587
|
};
|
6499
6588
|
const pieAdvancedPipeline = [
|
6500
6589
|
initAdvancedVSeed_initAdvancedVSeed,
|
6590
|
+
encodingForPie,
|
6501
6591
|
buildMeasures,
|
6502
6592
|
autoDimensions_autoDimensions,
|
6503
|
-
encodingForPie,
|
6504
6593
|
pivotAdapter([
|
6505
6594
|
reshapeWithEncoding
|
6506
6595
|
], [
|
@@ -6515,9 +6604,8 @@ const initPie = (spec, context)=>{
|
|
6515
6604
|
...spec
|
6516
6605
|
};
|
6517
6606
|
const { advancedVSeed } = context;
|
6518
|
-
const { datasetReshapeInfo
|
6607
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
6519
6608
|
const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
|
6520
|
-
const showStroke = dataset.length <= 30;
|
6521
6609
|
result.type = 'pie';
|
6522
6610
|
result.outerRadius = 0.8;
|
6523
6611
|
result.innerRadius = 0;
|
@@ -6529,30 +6617,57 @@ const initPie = (spec, context)=>{
|
|
6529
6617
|
clip: true
|
6530
6618
|
}
|
6531
6619
|
];
|
6532
|
-
result.
|
6533
|
-
|
6534
|
-
|
6535
|
-
|
6536
|
-
|
6537
|
-
}
|
6538
|
-
|
6539
|
-
|
6540
|
-
|
6620
|
+
result.animation = true;
|
6621
|
+
return result;
|
6622
|
+
};
|
6623
|
+
const colorPieStyleFill = (stylePipe)=>(spec, context)=>{
|
6624
|
+
const result = stylePipe(spec, context);
|
6625
|
+
const { advancedVSeed } = context;
|
6626
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
6627
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
6628
|
+
if (isLinearColor(advancedVSeed)) {
|
6629
|
+
if (result?.pie?.style) result.pie.style.fill = {
|
6630
|
+
field: unfoldInfo.encodingColor,
|
6631
|
+
scale: 'color'
|
6632
|
+
};
|
6633
|
+
}
|
6634
|
+
return result;
|
6635
|
+
};
|
6636
|
+
const pieStyle = (spec, context)=>{
|
6637
|
+
const { advancedVSeed } = context;
|
6638
|
+
const { dataset } = advancedVSeed;
|
6639
|
+
const showStroke = dataset.length <= 30;
|
6640
|
+
const result = {
|
6641
|
+
...spec,
|
6642
|
+
pie: {
|
6643
|
+
style: {}
|
6644
|
+
}
|
6645
|
+
};
|
6646
|
+
return {
|
6647
|
+
...result,
|
6648
|
+
pie: {
|
6649
|
+
style: {
|
6650
|
+
stroke: '#ffffff',
|
6651
|
+
lineWidth: showStroke ? 1 : 0
|
6652
|
+
},
|
6653
|
+
state: {
|
6654
|
+
hover: {
|
6655
|
+
outerRadius: 1.1 * result.outerRadius
|
6656
|
+
}
|
6541
6657
|
}
|
6542
6658
|
}
|
6543
6659
|
};
|
6544
|
-
result.animation = true;
|
6545
|
-
return result;
|
6546
6660
|
};
|
6547
6661
|
const pie = [
|
6548
6662
|
initPie,
|
6549
|
-
color_color,
|
6663
|
+
colorAdapter(color_color, linearColor),
|
6550
6664
|
background_backgroundColor,
|
6551
6665
|
datasetXY,
|
6552
6666
|
progressive,
|
6667
|
+
colorPieStyleFill(pieStyle),
|
6668
|
+
colorAdapter(discreteLegend, colorLegend),
|
6553
6669
|
label_label,
|
6554
6670
|
tooltip_tooltip,
|
6555
|
-
discreteLegend,
|
6556
6671
|
annotationPoint_annotationPoint,
|
6557
6672
|
annotationVerticalLine_annotationVerticalLine,
|
6558
6673
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -6565,10 +6680,11 @@ const pivotPie = [
|
|
6565
6680
|
datasetPivot,
|
6566
6681
|
pivotIndicators_pivotIndicators([
|
6567
6682
|
initPie,
|
6568
|
-
color_color,
|
6683
|
+
colorAdapter(color_color, linearColor),
|
6569
6684
|
background_backgroundColor,
|
6570
6685
|
datasetXY,
|
6571
6686
|
progressive,
|
6687
|
+
colorPieStyleFill(pieStyle),
|
6572
6688
|
label_label,
|
6573
6689
|
tooltip_tooltip,
|
6574
6690
|
annotationPoint_annotationPoint,
|
@@ -6578,7 +6694,7 @@ const pivotPie = [
|
|
6578
6694
|
]),
|
6579
6695
|
pivotRowDimensions,
|
6580
6696
|
pivotColumnDimensions,
|
6581
|
-
pivotDiscreteLegend
|
6697
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
6582
6698
|
];
|
6583
6699
|
const pieSpecPipeline = [
|
6584
6700
|
pivotAdapter_pivotAdapter(pie, pivotPie)
|
@@ -6606,43 +6722,32 @@ const initDonut = (spec, context)=>{
|
|
6606
6722
|
...spec
|
6607
6723
|
};
|
6608
6724
|
const { advancedVSeed } = context;
|
6609
|
-
const { datasetReshapeInfo
|
6725
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
6610
6726
|
const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
|
6611
|
-
const showStroke = dataset.length <= 30;
|
6612
6727
|
result.type = 'pie';
|
6613
6728
|
result.outerRadius = 0.8;
|
6614
6729
|
result.innerRadius = 0.8 * result.outerRadius;
|
6615
6730
|
result.valueField = foldInfo.measureValue;
|
6616
6731
|
result.categoryField = unfoldInfo.encodingColorId;
|
6617
6732
|
result.padding = 0;
|
6618
|
-
result.region = [
|
6619
|
-
{
|
6620
|
-
clip: true
|
6621
|
-
}
|
6622
|
-
];
|
6623
|
-
result.pie = {
|
6624
|
-
style: {
|
6625
|
-
stroke: '#ffffff',
|
6626
|
-
lineWidth: showStroke ? 1 : 0
|
6627
|
-
},
|
6628
|
-
state: {
|
6629
|
-
hover: {
|
6630
|
-
outerRadius: 1.1 * result.outerRadius
|
6631
|
-
}
|
6733
|
+
result.region = [
|
6734
|
+
{
|
6735
|
+
clip: true
|
6632
6736
|
}
|
6633
|
-
|
6737
|
+
];
|
6634
6738
|
result.animation = true;
|
6635
6739
|
return result;
|
6636
6740
|
};
|
6637
6741
|
const donut = [
|
6638
6742
|
initDonut,
|
6639
|
-
color_color,
|
6743
|
+
colorAdapter(color_color, linearColor),
|
6640
6744
|
background_backgroundColor,
|
6641
6745
|
datasetXY,
|
6642
6746
|
progressive,
|
6643
6747
|
label_label,
|
6748
|
+
colorPieStyleFill(pieStyle),
|
6749
|
+
colorAdapter(discreteLegend, colorLegend),
|
6644
6750
|
tooltip_tooltip,
|
6645
|
-
discreteLegend,
|
6646
6751
|
annotationPoint_annotationPoint,
|
6647
6752
|
annotationVerticalLine_annotationVerticalLine,
|
6648
6753
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -6655,11 +6760,12 @@ const pivotDonut = [
|
|
6655
6760
|
datasetPivot,
|
6656
6761
|
pivotIndicators_pivotIndicators([
|
6657
6762
|
initDonut,
|
6658
|
-
color_color,
|
6763
|
+
colorAdapter(color_color, linearColor),
|
6659
6764
|
background_backgroundColor,
|
6660
6765
|
datasetXY,
|
6661
6766
|
progressive,
|
6662
6767
|
label_label,
|
6768
|
+
colorPieStyleFill(pieStyle),
|
6663
6769
|
tooltip_tooltip,
|
6664
6770
|
annotationPoint_annotationPoint,
|
6665
6771
|
annotationVerticalLine_annotationVerticalLine,
|
@@ -6668,7 +6774,7 @@ const pivotDonut = [
|
|
6668
6774
|
]),
|
6669
6775
|
pivotRowDimensions,
|
6670
6776
|
pivotColumnDimensions,
|
6671
|
-
pivotDiscreteLegend
|
6777
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
6672
6778
|
];
|
6673
6779
|
const donutSpecPipeline = [
|
6674
6780
|
pivotAdapter_pivotAdapter(donut, pivotDonut)
|
@@ -6679,51 +6785,57 @@ const registerDonut = ()=>{
|
|
6679
6785
|
};
|
6680
6786
|
const encodingForRose = (advancedVSeed, context)=>{
|
6681
6787
|
const { vseed } = context;
|
6682
|
-
const {
|
6683
|
-
|
6684
|
-
const
|
6685
|
-
|
6686
|
-
|
6687
|
-
|
6688
|
-
|
6689
|
-
|
6690
|
-
|
6691
|
-
|
6692
|
-
const detail = encoding.detail || [];
|
6693
|
-
const mergedDetail = 0 === detail.length ? unique([
|
6694
|
-
...color,
|
6695
|
-
...detail
|
6696
|
-
]) : detail;
|
6697
|
-
return {
|
6698
|
-
...advancedVSeed,
|
6699
|
-
encoding: {
|
6700
|
-
...encoding,
|
6701
|
-
angle,
|
6702
|
-
color,
|
6703
|
-
detail: mergedDetail
|
6704
|
-
}
|
6705
|
-
};
|
6706
|
-
}
|
6707
|
-
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
6708
|
-
const mergedEncoding = {
|
6709
|
-
angle: dimensions.slice(0, 1).map((item)=>item.id),
|
6710
|
-
color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
6711
|
-
detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
6712
|
-
tooltip: dimensions.map((item)=>item.id),
|
6713
|
-
label: [],
|
6714
|
-
row: [],
|
6715
|
-
column: []
|
6716
|
-
};
|
6788
|
+
const { measures: vseedMeasures = [] } = vseed;
|
6789
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
6790
|
+
const dimensions = getBasicDimensions(vseed);
|
6791
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
6792
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
6793
|
+
const encoding = {};
|
6794
|
+
if (hasDimensionEncoding) rose_generateDimensionEncoding(dimensions, encoding);
|
6795
|
+
else rose_generateDefaultDimensionEncoding(dimensions, encoding);
|
6796
|
+
if (hasMeasureEncoding) rose_generateMeasureEncoding(measures, encoding);
|
6797
|
+
else rose_generateDefaultMeasureEncoding(measures, encoding);
|
6717
6798
|
return {
|
6718
6799
|
...advancedVSeed,
|
6719
|
-
encoding
|
6800
|
+
encoding
|
6720
6801
|
};
|
6721
6802
|
};
|
6803
|
+
const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
6804
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
6805
|
+
encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
|
6806
|
+
};
|
6807
|
+
const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
6808
|
+
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
6809
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
6810
|
+
encoding.angle = uniqueDimIds.slice(0, 1);
|
6811
|
+
encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
6812
|
+
encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
6813
|
+
encoding.tooltip = uniqueDimIds;
|
6814
|
+
encoding.label = [];
|
6815
|
+
encoding.row = [];
|
6816
|
+
encoding.column = [];
|
6817
|
+
};
|
6818
|
+
const rose_generateMeasureEncoding = (measures, encoding)=>{
|
6819
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
6820
|
+
encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
|
6821
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
6822
|
+
if (color.length > 0) encoding.color = color;
|
6823
|
+
};
|
6824
|
+
const rose_generateDimensionEncoding = (dimensions, encoding)=>{
|
6825
|
+
encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
|
6826
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
6827
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
6828
|
+
if (0 === encoding.angle.length) encoding.angle = [
|
6829
|
+
dimensions[0].id
|
6830
|
+
];
|
6831
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
|
6832
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
|
6833
|
+
};
|
6722
6834
|
const roseAdvancedPipeline = [
|
6723
6835
|
initAdvancedVSeed_initAdvancedVSeed,
|
6836
|
+
encodingForRose,
|
6724
6837
|
buildMeasures,
|
6725
6838
|
autoDimensions_autoDimensions,
|
6726
|
-
encodingForRose,
|
6727
6839
|
pivotAdapter([
|
6728
6840
|
reshapeWithEncoding
|
6729
6841
|
], [
|
@@ -6750,18 +6862,6 @@ const initRose = (spec, context)=>{
|
|
6750
6862
|
result.innerRadius = 0;
|
6751
6863
|
const hasNegativeValue = dataset.flat().find((d)=>d[foldInfo.measureValue] < 0);
|
6752
6864
|
if (hasNegativeValue) result.innerRadius = 0.05;
|
6753
|
-
result.rose = {
|
6754
|
-
style: {
|
6755
|
-
stroke: '#ffffff',
|
6756
|
-
lineWidth: 1
|
6757
|
-
},
|
6758
|
-
state: {
|
6759
|
-
hover: {
|
6760
|
-
lineWidth: 1,
|
6761
|
-
fillOpacity: 0.6
|
6762
|
-
}
|
6763
|
-
}
|
6764
|
-
};
|
6765
6865
|
result.region = [
|
6766
6866
|
{
|
6767
6867
|
clip: true
|
@@ -6770,7 +6870,7 @@ const initRose = (spec, context)=>{
|
|
6770
6870
|
result.animation = true;
|
6771
6871
|
return result;
|
6772
6872
|
};
|
6773
|
-
const
|
6873
|
+
const angleAxis = (spec, context)=>{
|
6774
6874
|
const result = {
|
6775
6875
|
...spec
|
6776
6876
|
};
|
@@ -6782,26 +6882,37 @@ const radiusAxis = (spec, context)=>{
|
|
6782
6882
|
const showAxis = !(is0D || is1M1D);
|
6783
6883
|
if (!result.axes) result.axes = [];
|
6784
6884
|
result.axes.push({
|
6785
|
-
orient: '
|
6885
|
+
orient: 'angle',
|
6786
6886
|
visible: showAxis,
|
6787
6887
|
zero: true,
|
6788
6888
|
nice: !!showAxis,
|
6889
|
+
paddingInner: showAxis ? [
|
6890
|
+
0.15,
|
6891
|
+
0.1
|
6892
|
+
] : [
|
6893
|
+
0,
|
6894
|
+
0
|
6895
|
+
],
|
6896
|
+
paddingOuter: showAxis ? [
|
6897
|
+
0.075,
|
6898
|
+
0.1
|
6899
|
+
] : [
|
6900
|
+
0,
|
6901
|
+
0
|
6902
|
+
],
|
6789
6903
|
grid: {
|
6790
6904
|
visible: showAxis
|
6791
6905
|
},
|
6792
|
-
|
6793
|
-
visible: showAxis
|
6794
|
-
},
|
6795
|
-
label: {
|
6906
|
+
domainLine: {
|
6796
6907
|
visible: showAxis
|
6797
6908
|
},
|
6798
|
-
|
6909
|
+
tick: {
|
6799
6910
|
visible: showAxis
|
6800
6911
|
}
|
6801
6912
|
});
|
6802
6913
|
return result;
|
6803
6914
|
};
|
6804
|
-
const
|
6915
|
+
const radiusAxis = (spec, context)=>{
|
6805
6916
|
const result = {
|
6806
6917
|
...spec
|
6807
6918
|
};
|
@@ -6813,50 +6924,79 @@ const angleAxis = (spec, context)=>{
|
|
6813
6924
|
const showAxis = !(is0D || is1M1D);
|
6814
6925
|
if (!result.axes) result.axes = [];
|
6815
6926
|
result.axes.push({
|
6816
|
-
orient: '
|
6927
|
+
orient: 'radius',
|
6817
6928
|
visible: showAxis,
|
6818
6929
|
zero: true,
|
6819
6930
|
nice: !!showAxis,
|
6820
|
-
paddingInner: showAxis ? [
|
6821
|
-
0.15,
|
6822
|
-
0.1
|
6823
|
-
] : [
|
6824
|
-
0,
|
6825
|
-
0
|
6826
|
-
],
|
6827
|
-
paddingOuter: showAxis ? [
|
6828
|
-
0.075,
|
6829
|
-
0.1
|
6830
|
-
] : [
|
6831
|
-
0,
|
6832
|
-
0
|
6833
|
-
],
|
6834
6931
|
grid: {
|
6835
6932
|
visible: showAxis
|
6836
6933
|
},
|
6837
|
-
|
6934
|
+
tick: {
|
6838
6935
|
visible: showAxis
|
6839
6936
|
},
|
6840
|
-
|
6937
|
+
label: {
|
6938
|
+
visible: showAxis
|
6939
|
+
},
|
6940
|
+
domainLine: {
|
6841
6941
|
visible: showAxis
|
6842
6942
|
}
|
6843
6943
|
});
|
6844
6944
|
return result;
|
6845
6945
|
};
|
6946
|
+
const colorRoseStyleFill = (stylePipe)=>(spec, context)=>{
|
6947
|
+
const result = stylePipe(spec, context);
|
6948
|
+
const { advancedVSeed } = context;
|
6949
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
6950
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
6951
|
+
if (isLinearColor(advancedVSeed)) {
|
6952
|
+
if (result?.rose?.style) result.rose.style.fill = {
|
6953
|
+
field: unfoldInfo.encodingColor,
|
6954
|
+
scale: 'color'
|
6955
|
+
};
|
6956
|
+
}
|
6957
|
+
return result;
|
6958
|
+
};
|
6959
|
+
const roseStyle = (spec, context)=>{
|
6960
|
+
const { advancedVSeed } = context;
|
6961
|
+
const { dataset } = advancedVSeed;
|
6962
|
+
const showStroke = dataset.length <= 30;
|
6963
|
+
const result = {
|
6964
|
+
...spec,
|
6965
|
+
rose: {
|
6966
|
+
style: {}
|
6967
|
+
}
|
6968
|
+
};
|
6969
|
+
return {
|
6970
|
+
...result,
|
6971
|
+
rose: {
|
6972
|
+
style: {
|
6973
|
+
stroke: '#ffffff',
|
6974
|
+
lineWidth: showStroke ? 1 : 0
|
6975
|
+
},
|
6976
|
+
state: {
|
6977
|
+
hover: {
|
6978
|
+
lineWidth: 1,
|
6979
|
+
fillOpacity: 0.6
|
6980
|
+
}
|
6981
|
+
}
|
6982
|
+
}
|
6983
|
+
};
|
6984
|
+
};
|
6846
6985
|
const rose = [
|
6847
6986
|
initRose,
|
6848
6987
|
stackCornerRadius_stackCornerRadius,
|
6849
6988
|
stackInverse,
|
6850
|
-
color_color,
|
6989
|
+
colorAdapter(color_color, linearColor),
|
6851
6990
|
background_backgroundColor,
|
6852
6991
|
datasetXY,
|
6853
6992
|
progressive,
|
6854
|
-
radiusAxis,
|
6855
6993
|
angleAxis,
|
6856
|
-
|
6857
|
-
tooltip_tooltip,
|
6994
|
+
radiusAxis,
|
6858
6995
|
verticalCrosshairRect,
|
6859
|
-
|
6996
|
+
colorRoseStyleFill(roseStyle),
|
6997
|
+
colorAdapter(discreteLegend, colorLegend),
|
6998
|
+
label_label,
|
6999
|
+
tooltip_tooltip
|
6860
7000
|
];
|
6861
7001
|
const pivotRose = [
|
6862
7002
|
initPivot,
|
@@ -6867,19 +7007,20 @@ const pivotRose = [
|
|
6867
7007
|
initRose,
|
6868
7008
|
stackCornerRadius_stackCornerRadius,
|
6869
7009
|
stackInverse,
|
6870
|
-
color_color,
|
7010
|
+
colorAdapter(color_color, linearColor),
|
6871
7011
|
background_backgroundColor,
|
6872
7012
|
datasetXY,
|
6873
7013
|
progressive,
|
6874
7014
|
radiusAxis,
|
6875
7015
|
angleAxis,
|
7016
|
+
verticalCrosshairRect,
|
7017
|
+
colorRoseStyleFill(roseStyle),
|
6876
7018
|
label_label,
|
6877
|
-
tooltip_tooltip
|
6878
|
-
verticalCrosshairRect
|
7019
|
+
tooltip_tooltip
|
6879
7020
|
]),
|
6880
7021
|
pivotRowDimensions,
|
6881
7022
|
pivotColumnDimensions,
|
6882
|
-
pivotDiscreteLegend
|
7023
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
6883
7024
|
];
|
6884
7025
|
const roseSpecPipeline = [
|
6885
7026
|
pivotAdapter_pivotAdapter(rose, pivotRose)
|
@@ -6890,9 +7031,9 @@ const registerRose = ()=>{
|
|
6890
7031
|
};
|
6891
7032
|
const roseParallelAdvancedPipeline = [
|
6892
7033
|
initAdvancedVSeed_initAdvancedVSeed,
|
7034
|
+
encodingForRose,
|
6893
7035
|
buildMeasures,
|
6894
7036
|
autoDimensions_autoDimensions,
|
6895
|
-
encodingForRose,
|
6896
7037
|
pivotAdapter([
|
6897
7038
|
reshapeWithEncoding
|
6898
7039
|
], [
|
@@ -6948,15 +7089,16 @@ const initRoseParallel = (spec, context)=>{
|
|
6948
7089
|
const roseParallel = [
|
6949
7090
|
initRoseParallel,
|
6950
7091
|
stackCornerRadius_stackCornerRadius,
|
6951
|
-
color_color,
|
7092
|
+
colorAdapter(color_color, linearColor),
|
6952
7093
|
background_backgroundColor,
|
6953
7094
|
datasetXY,
|
6954
7095
|
progressive,
|
6955
7096
|
radiusAxis,
|
6956
7097
|
angleAxis,
|
7098
|
+
colorRoseStyleFill(roseStyle),
|
7099
|
+
colorAdapter(discreteLegend, colorLegend),
|
6957
7100
|
label_label,
|
6958
7101
|
tooltip_tooltip,
|
6959
|
-
discreteLegend,
|
6960
7102
|
verticalCrosshairRect,
|
6961
7103
|
annotationPoint_annotationPoint,
|
6962
7104
|
annotationVerticalLine_annotationVerticalLine,
|
@@ -6971,15 +7113,16 @@ const pivotRoseParallel = [
|
|
6971
7113
|
pivotIndicators_pivotIndicators([
|
6972
7114
|
initRoseParallel,
|
6973
7115
|
stackCornerRadius_stackCornerRadius,
|
6974
|
-
color_color,
|
7116
|
+
colorAdapter(color_color, linearColor),
|
6975
7117
|
background_backgroundColor,
|
6976
7118
|
datasetXY,
|
6977
7119
|
progressive,
|
6978
7120
|
radiusAxis,
|
6979
7121
|
angleAxis,
|
7122
|
+
verticalCrosshairRect,
|
7123
|
+
colorRoseStyleFill(roseStyle),
|
6980
7124
|
label_label,
|
6981
7125
|
tooltip_tooltip,
|
6982
|
-
verticalCrosshairRect,
|
6983
7126
|
annotationPoint_annotationPoint,
|
6984
7127
|
annotationVerticalLine_annotationVerticalLine,
|
6985
7128
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -6987,7 +7130,7 @@ const pivotRoseParallel = [
|
|
6987
7130
|
]),
|
6988
7131
|
pivotRowDimensions,
|
6989
7132
|
pivotColumnDimensions,
|
6990
|
-
pivotDiscreteLegend
|
7133
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
6991
7134
|
];
|
6992
7135
|
const roseParallelSpecPipeline = [
|
6993
7136
|
pivotAdapter_pivotAdapter(roseParallel, pivotRoseParallel)
|
@@ -6998,50 +7141,55 @@ const registerRoseParallel = ()=>{
|
|
6998
7141
|
};
|
6999
7142
|
const encodingForRadar = (advancedVSeed, context)=>{
|
7000
7143
|
const { vseed } = context;
|
7001
|
-
const {
|
7002
|
-
|
7003
|
-
const
|
7004
|
-
|
7005
|
-
|
7006
|
-
|
7007
|
-
|
7008
|
-
|
7009
|
-
|
7010
|
-
|
7011
|
-
const detail = encoding.detail || [];
|
7012
|
-
const mergedDetail = 0 === detail.length ? unique([
|
7013
|
-
...color,
|
7014
|
-
...detail
|
7015
|
-
]) : detail;
|
7016
|
-
return {
|
7017
|
-
...advancedVSeed,
|
7018
|
-
encoding: {
|
7019
|
-
...encoding,
|
7020
|
-
angle,
|
7021
|
-
color,
|
7022
|
-
detail: mergedDetail
|
7023
|
-
}
|
7024
|
-
};
|
7025
|
-
}
|
7026
|
-
const mergedEncoding = {
|
7027
|
-
angle: dimensions.slice(0, 1).map((item)=>item.id),
|
7028
|
-
color: dimensions.slice(1).map((item)=>item.id),
|
7029
|
-
detail: dimensions.slice(1).map((item)=>item.id),
|
7030
|
-
tooltip: dimensions.map((item)=>item.id),
|
7031
|
-
label: [],
|
7032
|
-
row: [],
|
7033
|
-
column: []
|
7034
|
-
};
|
7144
|
+
const { measures: vseedMeasures = [] } = vseed;
|
7145
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
7146
|
+
const dimensions = getBasicDimensions(vseed);
|
7147
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
7148
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
7149
|
+
const encoding = {};
|
7150
|
+
if (hasDimensionEncoding) radar_generateDimensionEncoding(dimensions, encoding);
|
7151
|
+
else radar_generateDefaultDimensionEncoding(dimensions, encoding);
|
7152
|
+
if (hasMeasureEncoding) radar_generateMeasureEncoding(measures, encoding);
|
7153
|
+
else radar_generateDefaultMeasureEncoding(measures, encoding);
|
7035
7154
|
return {
|
7036
7155
|
...advancedVSeed,
|
7037
|
-
encoding
|
7038
|
-
};
|
7156
|
+
encoding
|
7157
|
+
};
|
7158
|
+
};
|
7159
|
+
const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
7160
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
7161
|
+
encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
|
7162
|
+
};
|
7163
|
+
const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
7164
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
7165
|
+
encoding.angle = uniqueDimIds.slice(0, 1);
|
7166
|
+
encoding.color = uniqueDimIds.slice(1);
|
7167
|
+
encoding.tooltip = uniqueDimIds;
|
7168
|
+
encoding.detail = [];
|
7169
|
+
encoding.label = [];
|
7170
|
+
encoding.row = [];
|
7171
|
+
encoding.column = [];
|
7172
|
+
};
|
7173
|
+
const radar_generateMeasureEncoding = (measures, encoding)=>{
|
7174
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
7175
|
+
encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
|
7176
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7177
|
+
if (color.length > 0) encoding.color = color;
|
7178
|
+
};
|
7179
|
+
const radar_generateDimensionEncoding = (dimensions, encoding)=>{
|
7180
|
+
encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
|
7181
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7182
|
+
encoding.detail = [];
|
7183
|
+
if (0 === encoding.angle.length) encoding.angle = [
|
7184
|
+
dimensions[0].id
|
7185
|
+
];
|
7186
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
|
7039
7187
|
};
|
7040
7188
|
const radarAdvancedPipeline = [
|
7041
7189
|
initAdvancedVSeed_initAdvancedVSeed,
|
7190
|
+
encodingForRadar,
|
7042
7191
|
buildMeasures,
|
7043
7192
|
autoDimensions_autoDimensions,
|
7044
|
-
encodingForRadar,
|
7045
7193
|
pivotAdapter([
|
7046
7194
|
reshapeWithEncoding
|
7047
7195
|
], [
|
@@ -7177,33 +7325,51 @@ const registerRadar = ()=>{
|
|
7177
7325
|
};
|
7178
7326
|
const encodingForFunnel = (advancedVSeed, context)=>{
|
7179
7327
|
const { vseed } = context;
|
7180
|
-
const {
|
7181
|
-
|
7182
|
-
const
|
7183
|
-
|
7184
|
-
|
7185
|
-
|
7186
|
-
|
7187
|
-
|
7188
|
-
|
7189
|
-
|
7190
|
-
color: dimensions.slice(0).map((item)=>item.id),
|
7191
|
-
detail: dimensions.slice(0).map((item)=>item.id),
|
7192
|
-
tooltip: dimensions.map((item)=>item.id),
|
7193
|
-
label: [],
|
7194
|
-
row: [],
|
7195
|
-
column: []
|
7196
|
-
};
|
7328
|
+
const { measures: vseedMeasures = [] } = vseed;
|
7329
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
7330
|
+
const dimensions = getBasicDimensions(vseed);
|
7331
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
7332
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
7333
|
+
const encoding = {};
|
7334
|
+
if (hasDimensionEncoding) funnel_generateDimensionEncoding(dimensions, encoding);
|
7335
|
+
else funnel_generateDefaultDimensionEncoding(dimensions, encoding);
|
7336
|
+
if (hasMeasureEncoding) funnel_generateMeasureEncoding(measures, encoding);
|
7337
|
+
else funnel_generateDefaultMeasureEncoding(measures, encoding);
|
7197
7338
|
return {
|
7198
7339
|
...advancedVSeed,
|
7199
|
-
encoding
|
7200
|
-
};
|
7340
|
+
encoding
|
7341
|
+
};
|
7342
|
+
};
|
7343
|
+
const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
7344
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
7345
|
+
encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
|
7346
|
+
};
|
7347
|
+
const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
7348
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
7349
|
+
encoding.color = uniqueDimIds.slice(0);
|
7350
|
+
encoding.detail = uniqueDimIds.slice(0);
|
7351
|
+
encoding.tooltip = uniqueDimIds;
|
7352
|
+
encoding.label = [];
|
7353
|
+
encoding.row = [];
|
7354
|
+
encoding.column = [];
|
7355
|
+
};
|
7356
|
+
const funnel_generateMeasureEncoding = (measures, encoding)=>{
|
7357
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
7358
|
+
encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
|
7359
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7360
|
+
if (color.length > 0) encoding.color = color;
|
7361
|
+
};
|
7362
|
+
const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
|
7363
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7364
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
7365
|
+
if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
|
7366
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
|
7201
7367
|
};
|
7202
7368
|
const funnelAdvancedPipeline = [
|
7203
7369
|
initAdvancedVSeed_initAdvancedVSeed,
|
7370
|
+
encodingForFunnel,
|
7204
7371
|
buildMeasures,
|
7205
7372
|
autoDimensions_autoDimensions,
|
7206
|
-
encodingForFunnel,
|
7207
7373
|
pivotAdapter([
|
7208
7374
|
reshapeWithEncoding
|
7209
7375
|
], [
|
@@ -7233,34 +7399,55 @@ const initFunnel = (spec, context)=>{
|
|
7233
7399
|
clip: true
|
7234
7400
|
}
|
7235
7401
|
];
|
7236
|
-
result.funnel = {
|
7237
|
-
style: {
|
7238
|
-
cornerRadius: 4,
|
7239
|
-
fill: {
|
7240
|
-
field: unfoldInfo.encodingColorId,
|
7241
|
-
scale: 'color'
|
7242
|
-
}
|
7243
|
-
},
|
7244
|
-
state: {
|
7245
|
-
hover: {
|
7246
|
-
fillOpacity: 0.6
|
7247
|
-
}
|
7248
|
-
}
|
7249
|
-
};
|
7250
7402
|
result.transformLabel = {
|
7251
7403
|
visible: true
|
7252
7404
|
};
|
7253
7405
|
result.animation = true;
|
7254
7406
|
return result;
|
7255
7407
|
};
|
7408
|
+
const colorFunnelStyleFill = (stylePipe)=>(spec, context)=>{
|
7409
|
+
const result = stylePipe(spec, context);
|
7410
|
+
const { advancedVSeed } = context;
|
7411
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
7412
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
7413
|
+
if (isLinearColor(advancedVSeed)) {
|
7414
|
+
if (result?.funnel?.style) result.funnel.style.fill = {
|
7415
|
+
field: unfoldInfo.encodingColor,
|
7416
|
+
scale: 'color'
|
7417
|
+
};
|
7418
|
+
}
|
7419
|
+
return result;
|
7420
|
+
};
|
7421
|
+
const funnelStyle = (spec)=>{
|
7422
|
+
const result = {
|
7423
|
+
...spec,
|
7424
|
+
funnel: {
|
7425
|
+
style: {}
|
7426
|
+
}
|
7427
|
+
};
|
7428
|
+
return {
|
7429
|
+
...result,
|
7430
|
+
funnel: {
|
7431
|
+
style: {
|
7432
|
+
cornerRadius: 4
|
7433
|
+
},
|
7434
|
+
state: {
|
7435
|
+
hover: {
|
7436
|
+
fillOpacity: 0.6
|
7437
|
+
}
|
7438
|
+
}
|
7439
|
+
}
|
7440
|
+
};
|
7441
|
+
};
|
7256
7442
|
const funnel = [
|
7257
7443
|
initFunnel,
|
7258
7444
|
background_backgroundColor,
|
7259
7445
|
datasetXY,
|
7260
|
-
color_color,
|
7446
|
+
colorAdapter(color_color, linearColor),
|
7261
7447
|
label_label,
|
7448
|
+
colorAdapter(discreteLegend, colorLegend),
|
7449
|
+
colorFunnelStyleFill(funnelStyle),
|
7262
7450
|
tooltip_tooltip,
|
7263
|
-
discreteLegend,
|
7264
7451
|
annotationPoint_annotationPoint,
|
7265
7452
|
annotationVerticalLine_annotationVerticalLine,
|
7266
7453
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -7275,17 +7462,18 @@ const pivotFunnel = [
|
|
7275
7462
|
initFunnel,
|
7276
7463
|
background_backgroundColor,
|
7277
7464
|
datasetXY,
|
7278
|
-
color_color,
|
7465
|
+
colorAdapter(color_color, linearColor),
|
7279
7466
|
label_label,
|
7280
7467
|
tooltip_tooltip,
|
7281
|
-
|
7468
|
+
colorFunnelStyleFill(funnelStyle),
|
7282
7469
|
annotationPoint_annotationPoint,
|
7283
7470
|
annotationVerticalLine_annotationVerticalLine,
|
7284
7471
|
annotationHorizontalLine_annotationHorizontalLine,
|
7285
7472
|
annotationArea_annotationArea
|
7286
7473
|
]),
|
7287
7474
|
pivotRowDimensions,
|
7288
|
-
pivotColumnDimensions
|
7475
|
+
pivotColumnDimensions,
|
7476
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
7289
7477
|
];
|
7290
7478
|
const funnelSpecPipeline = [
|
7291
7479
|
pivotAdapter_pivotAdapter(funnel, pivotFunnel)
|
@@ -7296,45 +7484,61 @@ const registerFunnel = ()=>{
|
|
7296
7484
|
};
|
7297
7485
|
const encodingForHeatmap = (advancedVSeed, context)=>{
|
7298
7486
|
const { vseed } = context;
|
7299
|
-
const {
|
7300
|
-
|
7301
|
-
const
|
7302
|
-
|
7303
|
-
|
7304
|
-
|
7305
|
-
|
7306
|
-
|
7307
|
-
|
7308
|
-
|
7309
|
-
return {
|
7310
|
-
...advancedVSeed,
|
7311
|
-
encoding: {
|
7312
|
-
x,
|
7313
|
-
y,
|
7314
|
-
...encoding
|
7315
|
-
}
|
7316
|
-
};
|
7317
|
-
}
|
7318
|
-
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
7319
|
-
const mergedEncoding = {
|
7320
|
-
x: dimensions.slice(0, 1).map((item)=>item.id),
|
7321
|
-
y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
|
7322
|
-
color: dimensions.slice(0).map((item)=>item.id),
|
7323
|
-
tooltip: dimensions.map((item)=>item.id),
|
7324
|
-
label: [],
|
7325
|
-
row: [],
|
7326
|
-
column: []
|
7327
|
-
};
|
7487
|
+
const { measures: vseedMeasures = [] } = vseed;
|
7488
|
+
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
7489
|
+
const dimensions = getBasicDimensions(vseed);
|
7490
|
+
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
7491
|
+
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
7492
|
+
const encoding = {};
|
7493
|
+
if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding);
|
7494
|
+
else heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
|
7495
|
+
if (hasMeasureEncoding) heatmap_generateMeasureEncoding(measures, encoding);
|
7496
|
+
else heatmap_generateDefaultMeasureEncoding(measures, encoding);
|
7328
7497
|
return {
|
7329
7498
|
...advancedVSeed,
|
7330
|
-
encoding
|
7499
|
+
encoding
|
7331
7500
|
};
|
7332
7501
|
};
|
7502
|
+
const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
7503
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
7504
|
+
encoding.color = unique(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
|
7505
|
+
};
|
7506
|
+
const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
7507
|
+
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
7508
|
+
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
7509
|
+
encoding.x = uniqueDimIds.slice(0, 1);
|
7510
|
+
encoding.y = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
7511
|
+
encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
7512
|
+
encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
7513
|
+
encoding.tooltip = uniqueDimIds;
|
7514
|
+
encoding.label = [];
|
7515
|
+
encoding.row = [];
|
7516
|
+
encoding.column = [];
|
7517
|
+
};
|
7518
|
+
const heatmap_generateMeasureEncoding = (measures, encoding)=>{
|
7519
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
7520
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7521
|
+
if (color.length > 0) encoding.color = color;
|
7522
|
+
return encoding;
|
7523
|
+
};
|
7524
|
+
const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
|
7525
|
+
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
|
7526
|
+
encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
|
7527
|
+
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7528
|
+
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
7529
|
+
if (0 === encoding.x.length) encoding.x = [
|
7530
|
+
dimensions[0].id
|
7531
|
+
];
|
7532
|
+
if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
|
7533
|
+
else encoding.y = dimensions.slice(0).map((item)=>item.id);
|
7534
|
+
if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
7535
|
+
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
7536
|
+
};
|
7333
7537
|
const heatmapAdvancedPipeline = [
|
7334
7538
|
initAdvancedVSeed_initAdvancedVSeed,
|
7539
|
+
encodingForHeatmap,
|
7335
7540
|
buildMeasures,
|
7336
7541
|
autoDimensions_autoDimensions,
|
7337
|
-
encodingForHeatmap,
|
7338
7542
|
pivotAdapter([
|
7339
7543
|
reshapeWithEncoding
|
7340
7544
|
], [
|
@@ -7356,6 +7560,37 @@ const labelColorInversion = (spec)=>{
|
|
7356
7560
|
};
|
7357
7561
|
return result;
|
7358
7562
|
};
|
7563
|
+
const colorCellStyleFill = (stylePipe)=>(spec, context)=>{
|
7564
|
+
const result = stylePipe(spec, context);
|
7565
|
+
const { advancedVSeed } = context;
|
7566
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
7567
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
7568
|
+
if (isLinearColor(advancedVSeed)) {
|
7569
|
+
if (result?.cell?.style) result.cell.style.fill = {
|
7570
|
+
field: unfoldInfo.encodingColor,
|
7571
|
+
scale: 'color'
|
7572
|
+
};
|
7573
|
+
}
|
7574
|
+
return result;
|
7575
|
+
};
|
7576
|
+
const cellStyle = (spec)=>{
|
7577
|
+
const result = {
|
7578
|
+
...spec,
|
7579
|
+
cell: {
|
7580
|
+
style: {}
|
7581
|
+
}
|
7582
|
+
};
|
7583
|
+
return {
|
7584
|
+
...result,
|
7585
|
+
cell: {
|
7586
|
+
style: {
|
7587
|
+
shape: 'rect',
|
7588
|
+
stroke: '#ffffff',
|
7589
|
+
lineWidth: 1
|
7590
|
+
}
|
7591
|
+
}
|
7592
|
+
};
|
7593
|
+
};
|
7359
7594
|
const initHeatmap = (spec, context)=>{
|
7360
7595
|
const result = {
|
7361
7596
|
...spec
|
@@ -7370,13 +7605,6 @@ const initHeatmap = (spec, context)=>{
|
|
7370
7605
|
result.seriesField = unfoldInfo.encodingColorId;
|
7371
7606
|
result.valueField = foldInfo.measureValue;
|
7372
7607
|
result.padding = 0;
|
7373
|
-
result.cell = {
|
7374
|
-
style: {
|
7375
|
-
shape: 'rect',
|
7376
|
-
stroke: '#ffffff',
|
7377
|
-
lineWidth: 1
|
7378
|
-
}
|
7379
|
-
};
|
7380
7608
|
result.axes = [
|
7381
7609
|
{
|
7382
7610
|
type: 'band',
|
@@ -7401,14 +7629,12 @@ const heatmap = [
|
|
7401
7629
|
initHeatmap,
|
7402
7630
|
background_backgroundColor,
|
7403
7631
|
datasetXY,
|
7404
|
-
color_color,
|
7632
|
+
colorAdapter(color_color, linearColor),
|
7405
7633
|
label_label,
|
7406
7634
|
labelColorInversion,
|
7407
|
-
discreteLegend,
|
7635
|
+
colorAdapter(discreteLegend, colorLegend),
|
7636
|
+
colorCellStyleFill(cellStyle),
|
7408
7637
|
tooltip_tooltip,
|
7409
|
-
pointStyle_pointStyle,
|
7410
|
-
pointStateDimensionHover,
|
7411
|
-
lineStyle_lineStyle,
|
7412
7638
|
annotationPoint_annotationPoint,
|
7413
7639
|
annotationVerticalLine_annotationVerticalLine,
|
7414
7640
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -7423,21 +7649,20 @@ const pivotHeatmap = [
|
|
7423
7649
|
initHeatmap,
|
7424
7650
|
background_backgroundColor,
|
7425
7651
|
datasetXY,
|
7426
|
-
color_color,
|
7652
|
+
colorAdapter(color_color, linearColor),
|
7427
7653
|
label_label,
|
7428
7654
|
labelColorInversion,
|
7429
7655
|
discreteLegend,
|
7430
7656
|
tooltip_tooltip,
|
7431
|
-
|
7432
|
-
pointStateDimensionHover,
|
7433
|
-
lineStyle_lineStyle,
|
7657
|
+
colorCellStyleFill(cellStyle),
|
7434
7658
|
annotationPoint_annotationPoint,
|
7435
7659
|
annotationVerticalLine_annotationVerticalLine,
|
7436
7660
|
annotationHorizontalLine_annotationHorizontalLine,
|
7437
7661
|
annotationArea_annotationArea
|
7438
7662
|
]),
|
7439
7663
|
pivotRowDimensions,
|
7440
|
-
pivotColumnDimensions
|
7664
|
+
pivotColumnDimensions,
|
7665
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
7441
7666
|
];
|
7442
7667
|
const heatmapSpecPipeline = [
|
7443
7668
|
pivotAdapter_pivotAdapter(heatmap, pivotHeatmap)
|
@@ -8154,7 +8379,18 @@ const zDimension = z.object({
|
|
8154
8379
|
'dimension',
|
8155
8380
|
'rowDimension',
|
8156
8381
|
'columnDimension'
|
8157
|
-
]).default('dimension')
|
8382
|
+
]).default('dimension'),
|
8383
|
+
encoding: z["enum"]([
|
8384
|
+
'xAxis',
|
8385
|
+
'yAxis',
|
8386
|
+
'angle',
|
8387
|
+
'color',
|
8388
|
+
'detail',
|
8389
|
+
'tooltip',
|
8390
|
+
'label',
|
8391
|
+
'row',
|
8392
|
+
'column'
|
8393
|
+
]).optional()
|
8158
8394
|
});
|
8159
8395
|
const zDimensionGroup = z.object({
|
8160
8396
|
id: z.string(),
|