@visactor/vseed 0.1.4 → 0.1.6
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 +2 -2
- package/dist/index.cjs +851 -703
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +851 -703
- package/dist/index.js.map +1 -1
- package/dist/pipeline/advanced/chart/pipes/{init/autoDimensions.d.ts → default/defaultDimensions.d.ts} +1 -1
- package/dist/pipeline/advanced/chart/pipes/default/defaultMeasureName.d.ts +2 -0
- package/dist/pipeline/advanced/chart/pipes/default/defaultMeasures.d.ts +5 -0
- package/dist/pipeline/advanced/chart/pipes/default/index.d.ts +3 -0
- package/dist/pipeline/advanced/chart/pipes/encoding/column.d.ts +19 -0
- package/dist/pipeline/advanced/chart/pipes/encoding/line.d.ts +17 -0
- package/dist/pipeline/advanced/chart/pipes/index.d.ts +1 -0
- package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +0 -2
- package/dist/pipeline/advanced/chart/pipes/measures/utils.d.ts +3 -18
- package/dist/pipeline/advanced/table/pipes/reshape/index.d.ts +1 -0
- package/dist/pipeline/advanced/table/pipes/reshape/reshapePivotTable.d.ts +2 -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 +2 -0
- package/dist/types/chartType/area/area.d.ts +20 -3
- package/dist/types/chartType/area/zArea.d.ts +2 -0
- package/dist/types/chartType/areaPercent/areaPercent.d.ts +16 -0
- package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +2 -0
- package/dist/types/chartType/bar/zBar.d.ts +2 -0
- package/dist/types/chartType/barParallel/zBarParallel.d.ts +2 -0
- package/dist/types/chartType/barPercent/zBarPercent.d.ts +2 -0
- package/dist/types/chartType/column/column.d.ts +17 -1
- package/dist/types/chartType/column/zColumn.d.ts +2 -0
- package/dist/types/chartType/columnParallel/columnParallel.d.ts +17 -0
- package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +2 -0
- package/dist/types/chartType/columnPercent/columnPercent.d.ts +17 -1
- package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +2 -0
- package/dist/types/chartType/donut/zDonut.d.ts +2 -0
- package/dist/types/chartType/dualAxis/zDualAxis.d.ts +10 -0
- package/dist/types/chartType/funnel/zFunnel.d.ts +2 -0
- package/dist/types/chartType/heatmap/zHeatmap.d.ts +2 -0
- package/dist/types/chartType/line/line.d.ts +16 -0
- package/dist/types/chartType/line/zLine.d.ts +2 -0
- package/dist/types/chartType/pie/zPie.d.ts +2 -0
- package/dist/types/chartType/pivotTable/zPivotTable.d.ts +2 -0
- package/dist/types/chartType/radar/zRadar.d.ts +2 -0
- package/dist/types/chartType/rose/zRose.d.ts +2 -0
- package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +2 -0
- package/dist/types/chartType/scatter/zScatter.d.ts +10 -0
- package/dist/types/chartType/table/zTable.d.ts +2 -0
- package/dist/types/properties/measures/measures.d.ts +3 -1
- package/dist/types/properties/measures/zDualMeasures.d.ts +16 -0
- package/dist/types/properties/measures/zMeasures.d.ts +6 -0
- package/dist/types/properties/measures/zScatterMeasures.d.ts +16 -0
- package/dist/types/zVseed.d.ts +56 -0
- package/dist/umd/index.js +872 -724
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +0 -2
package/dist/index.js
CHANGED
@@ -190,7 +190,8 @@ const autoMeasures = (advancedVSeed, context)=>{
|
|
190
190
|
void 0
|
191
191
|
].includes(key)).map((measure)=>({
|
192
192
|
id: measure,
|
193
|
-
alias: measure
|
193
|
+
alias: measure,
|
194
|
+
encoding: 'column'
|
194
195
|
}));
|
195
196
|
return result;
|
196
197
|
};
|
@@ -274,7 +275,7 @@ const autoDimensions = (advancedVSeed, context)=>{
|
|
274
275
|
].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
|
275
276
|
id: dim,
|
276
277
|
alias: dim,
|
277
|
-
|
278
|
+
encoding: 'column'
|
278
279
|
}));
|
279
280
|
return result;
|
280
281
|
};
|
@@ -709,10 +710,27 @@ const autoPivotMeasures = (advancedVSeed, context)=>{
|
|
709
710
|
void 0
|
710
711
|
].includes(key)).map((measure)=>({
|
711
712
|
id: measure,
|
712
|
-
alias: measure
|
713
|
+
alias: measure,
|
714
|
+
encoding: 'detail'
|
713
715
|
}));
|
714
716
|
return result;
|
715
717
|
};
|
718
|
+
const ORIGINAL_DATA = '__OriginalData__';
|
719
|
+
const Separator = '-';
|
720
|
+
const FoldMeasureName = '__MeaName__';
|
721
|
+
const FoldMeasureId = '__MeaId__';
|
722
|
+
const FoldMeasureValue = '__MeaValue__';
|
723
|
+
const MeasureName = FoldMeasureName;
|
724
|
+
const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
|
725
|
+
const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
|
726
|
+
const FoldXMeasureValue = '__MeaXValue__';
|
727
|
+
const FoldYMeasureValue = '__MeaYValue__';
|
728
|
+
const XEncoding = '__Dim_X__';
|
729
|
+
const YEncoding = '__Dim_Y__';
|
730
|
+
const AngleEncoding = '__Dim_Angle__';
|
731
|
+
const DetailEncoding = '__Dim_Detail__';
|
732
|
+
const ColorEncoding = '__Dim_Color__';
|
733
|
+
const ColorIdEncoding = '__Dim_ColorId__';
|
716
734
|
const findAllDimensions = (dimensions = [])=>{
|
717
735
|
if (!dimensions) return [];
|
718
736
|
const result = [];
|
@@ -729,15 +747,21 @@ const autoPivotDimensions = (advancedVSeed, context)=>{
|
|
729
747
|
const { vseed } = context;
|
730
748
|
const { dimensions, dataset } = vseed;
|
731
749
|
const measures = findAllMeasures(advancedVSeed.measures);
|
750
|
+
const MeaName = {
|
751
|
+
id: MeasureName,
|
752
|
+
alias: intl.i18n`指标名称`
|
753
|
+
};
|
732
754
|
if (!dataset) throw new Error('dataset is required');
|
733
755
|
if (0 === dataset.length) return result;
|
734
756
|
if (dimensions) {
|
735
757
|
const newDimensions = findAllDimensions(dimensions);
|
758
|
+
if (!newDimensions.some((dim)=>dim.id === MeasureName)) newDimensions.push(MeaName);
|
736
759
|
result.dimensions = newDimensions.map((item, index)=>{
|
760
|
+
if ('row' === item.encoding || 'column' === item.encoding) return item;
|
737
761
|
if ('rowDimension' === item.location || 'columnDimension' === item.location) return item;
|
738
762
|
return {
|
739
763
|
...item,
|
740
|
-
|
764
|
+
encoding: index % 2 === 0 ? 'column' : 'row'
|
741
765
|
};
|
742
766
|
});
|
743
767
|
return result;
|
@@ -747,15 +771,19 @@ const autoPivotDimensions = (advancedVSeed, context)=>{
|
|
747
771
|
...prev,
|
748
772
|
...cur
|
749
773
|
}), {});
|
750
|
-
|
751
|
-
result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
|
774
|
+
const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
|
752
775
|
'',
|
753
776
|
null,
|
754
777
|
void 0
|
755
|
-
].includes(key) && !measures.some((measure)=>measure.id === key))
|
778
|
+
].includes(key) && !measures.some((measure)=>measure.id === key));
|
779
|
+
result.dimensions = newDimensions.map((dim)=>({
|
756
780
|
id: dim,
|
757
|
-
alias: dim
|
758
|
-
|
781
|
+
alias: dim
|
782
|
+
}));
|
783
|
+
result.dimensions.push(MeaName);
|
784
|
+
result.dimensions = result.dimensions.map((dim, index)=>({
|
785
|
+
...dim,
|
786
|
+
encoding: index % 2 === 0 ? 'column' : 'row'
|
759
787
|
}));
|
760
788
|
return result;
|
761
789
|
};
|
@@ -786,11 +814,89 @@ const pivotTableConfig = (advancedVSeed, context)=>{
|
|
786
814
|
};
|
787
815
|
return result;
|
788
816
|
};
|
817
|
+
const foldMeasures = (dataset, measures, options)=>{
|
818
|
+
const { measureId, measureName, measureValue, colorMeasureId } = options || {};
|
819
|
+
const foldInfo = {
|
820
|
+
measureId,
|
821
|
+
measureName,
|
822
|
+
measureValue,
|
823
|
+
colorRange: [
|
824
|
+
0,
|
825
|
+
1
|
826
|
+
],
|
827
|
+
measureRange: [
|
828
|
+
0,
|
829
|
+
1
|
830
|
+
],
|
831
|
+
foldMap: {}
|
832
|
+
};
|
833
|
+
const result = new Array(dataset.length * measures.length);
|
834
|
+
let index = 0;
|
835
|
+
const ids = measures.map((d)=>d.id);
|
836
|
+
for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
|
837
|
+
const datum = omit({
|
838
|
+
...dataset[i]
|
839
|
+
}, ids);
|
840
|
+
datum[ORIGINAL_DATA] = dataset[i];
|
841
|
+
const measure = measures[j];
|
842
|
+
const { id, alias } = measure;
|
843
|
+
datum[id] = dataset[i][id];
|
844
|
+
datum[measureId] = id;
|
845
|
+
datum[measureName] = alias || id;
|
846
|
+
datum[measureValue] = dataset[i][id];
|
847
|
+
if (colorMeasureId) {
|
848
|
+
const value = datum[ORIGINAL_DATA][colorMeasureId];
|
849
|
+
datum[ColorEncoding] = value;
|
850
|
+
datum[ColorIdEncoding] = colorMeasureId;
|
851
|
+
foldInfo.colorRange = [
|
852
|
+
Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
|
853
|
+
Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
|
854
|
+
];
|
855
|
+
}
|
856
|
+
foldInfo.measureRange = [
|
857
|
+
Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
|
858
|
+
Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
|
859
|
+
];
|
860
|
+
foldInfo.foldMap[id] = alias;
|
861
|
+
result[index++] = datum;
|
862
|
+
}
|
863
|
+
return {
|
864
|
+
dataset: result,
|
865
|
+
foldInfo
|
866
|
+
};
|
867
|
+
};
|
868
|
+
const reshapePivotTable = (advancedVSeed, context)=>{
|
869
|
+
const result = {
|
870
|
+
...advancedVSeed
|
871
|
+
};
|
872
|
+
const { vseed } = context;
|
873
|
+
const { dataset, chartType } = vseed;
|
874
|
+
const { dimensions, measures } = advancedVSeed;
|
875
|
+
const { dataset: newDatasets, foldInfo } = foldMeasures(dataset, findAllMeasures(measures), {
|
876
|
+
measureId: FoldMeasureId,
|
877
|
+
measureName: FoldMeasureName,
|
878
|
+
measureValue: FoldMeasureValue
|
879
|
+
});
|
880
|
+
const datasetReshapeInfo = [
|
881
|
+
{
|
882
|
+
id: String(chartType),
|
883
|
+
index: 0,
|
884
|
+
foldInfo
|
885
|
+
}
|
886
|
+
];
|
887
|
+
return {
|
888
|
+
...result,
|
889
|
+
dataset: newDatasets,
|
890
|
+
datasetReshapeInfo: datasetReshapeInfo,
|
891
|
+
dimensions,
|
892
|
+
measures
|
893
|
+
};
|
894
|
+
};
|
789
895
|
const pivotTableAdvancedPipeline = [
|
790
896
|
initAdvancedVSeed,
|
791
897
|
autoPivotMeasures,
|
792
898
|
autoPivotDimensions,
|
793
|
-
|
899
|
+
reshapePivotTable,
|
794
900
|
pivotTableConfig,
|
795
901
|
theme_theme
|
796
902
|
];
|
@@ -837,7 +943,7 @@ const initPivotTable = (spec, context)=>{
|
|
837
943
|
const pivotColumns = (spec, context)=>{
|
838
944
|
const { advancedVSeed } = context;
|
839
945
|
const dimensions = advancedVSeed.dimensions;
|
840
|
-
const columns = dimensions.filter((item)=>'columnDimension' === item['location']);
|
946
|
+
const columns = dimensions.filter((item)=>'columnDimension' === item['location'] || 'column' === item['encoding']);
|
841
947
|
return {
|
842
948
|
...spec,
|
843
949
|
columns: columns.map((item)=>({
|
@@ -850,7 +956,7 @@ const pivotColumns = (spec, context)=>{
|
|
850
956
|
const pivotRows = (spec, context)=>{
|
851
957
|
const { advancedVSeed } = context;
|
852
958
|
const dimensions = advancedVSeed.dimensions;
|
853
|
-
const rows = dimensions.filter((item)=>'rowDimension' === item['location']);
|
959
|
+
const rows = dimensions.filter((item)=>'rowDimension' === item['location'] || 'row' === item['encoding']);
|
854
960
|
return {
|
855
961
|
...spec,
|
856
962
|
rows: rows.map((item)=>({
|
@@ -862,25 +968,31 @@ const pivotRows = (spec, context)=>{
|
|
862
968
|
};
|
863
969
|
const pivotIndicators = (spec, context)=>{
|
864
970
|
const { advancedVSeed } = context;
|
865
|
-
const { locale } = advancedVSeed;
|
866
|
-
const
|
971
|
+
const { locale, measures, datasetReshapeInfo } = advancedVSeed;
|
972
|
+
const { foldInfo } = datasetReshapeInfo[0];
|
867
973
|
return {
|
868
974
|
...spec,
|
869
975
|
indicatorsAsCol: true,
|
870
976
|
indicatorTitle: intl.i18n`指标名称`,
|
871
|
-
|
872
|
-
|
977
|
+
hideIndicatorName: true,
|
978
|
+
indicators: [
|
979
|
+
{
|
873
980
|
cellType: 'text',
|
874
|
-
indicatorKey:
|
875
|
-
title:
|
981
|
+
indicatorKey: foldInfo.measureValue,
|
982
|
+
title: 'indicator',
|
876
983
|
width: 'auto',
|
877
|
-
format: pivotIndicators_fieldFormat(
|
878
|
-
}
|
879
|
-
|
880
|
-
})
|
984
|
+
format: pivotIndicators_fieldFormat(measures, foldInfo, locale)
|
985
|
+
}
|
986
|
+
]
|
881
987
|
};
|
882
988
|
};
|
883
|
-
const pivotIndicators_fieldFormat = (
|
989
|
+
const pivotIndicators_fieldFormat = (measures, foldInfo, locale)=>(value, col, row, table)=>{
|
990
|
+
if (!isNumber(col) || !isNumber(row) || !table) return value;
|
991
|
+
const datum = table.getCellOriginRecord(col, row);
|
992
|
+
const { measureId: foldMeasureId } = foldInfo;
|
993
|
+
const measureId = datum[0][foldMeasureId];
|
994
|
+
const node = findMeasureById(measures, measureId);
|
995
|
+
if (!node) return value;
|
884
996
|
const { format = {}, autoFormat = true } = node;
|
885
997
|
if (!external_remeda_isEmpty(format)) {
|
886
998
|
const formatter = createFormatter(format);
|
@@ -1036,95 +1148,81 @@ const initAdvancedVSeed_initAdvancedVSeed = (advancedVSeed, context)=>{
|
|
1036
1148
|
locale: locale || 'zh-CN'
|
1037
1149
|
};
|
1038
1150
|
};
|
1039
|
-
const
|
1040
|
-
const
|
1041
|
-
const
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
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
|
-
encoding: 'detail'
|
1151
|
+
const defaultMeasures_defaultMeasures = (advancedVSeed, context)=>{
|
1152
|
+
const { vseed } = context;
|
1153
|
+
const { measures, dataset } = vseed;
|
1154
|
+
if (measures && measures.length > 0) return {
|
1155
|
+
...advancedVSeed,
|
1156
|
+
measures
|
1061
1157
|
};
|
1062
1158
|
if (!dataset) throw new Error('dataset is required');
|
1063
|
-
if (0 === dataset.length) return
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
...dim
|
1068
|
-
}));
|
1069
|
-
if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
|
1070
|
-
basicDimensions.push(MeaName);
|
1071
|
-
return basicDimensions;
|
1072
|
-
}
|
1159
|
+
if (0 === dataset.length) return {
|
1160
|
+
...advancedVSeed,
|
1161
|
+
measures: []
|
1162
|
+
};
|
1073
1163
|
const top100dataset = dataset.slice(0, 100);
|
1074
1164
|
const sample = top100dataset.reduce((prev, cur)=>({
|
1075
1165
|
...prev,
|
1076
1166
|
...cur
|
1077
1167
|
}), {});
|
1078
|
-
const
|
1168
|
+
const defaultMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
|
1079
1169
|
'',
|
1080
1170
|
null,
|
1081
1171
|
void 0
|
1082
|
-
].includes(key)).map((
|
1083
|
-
id:
|
1084
|
-
alias:
|
1085
|
-
location: 'dimension'
|
1172
|
+
].includes(key)).map((measure)=>({
|
1173
|
+
id: measure,
|
1174
|
+
alias: measure
|
1086
1175
|
}));
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
const { dataset, measures } = vseed;
|
1092
|
-
if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
|
1093
|
-
return measures;
|
1176
|
+
return {
|
1177
|
+
...advancedVSeed,
|
1178
|
+
measures: defaultMeasures
|
1179
|
+
};
|
1094
1180
|
};
|
1095
|
-
const
|
1181
|
+
const defaultDimensions = (advancedVSeed, context)=>{
|
1182
|
+
const result = {
|
1183
|
+
...advancedVSeed
|
1184
|
+
};
|
1185
|
+
const { vseed } = context;
|
1186
|
+
const { dimensions, dataset } = vseed;
|
1187
|
+
if (dimensions && dimensions.length > 0) return {
|
1188
|
+
...result,
|
1189
|
+
dimensions
|
1190
|
+
};
|
1096
1191
|
if (!dataset) throw new Error('dataset is required');
|
1097
|
-
if (0 === dataset.length) return
|
1192
|
+
if (0 === dataset.length) return result;
|
1193
|
+
const measures = findAllMeasures(advancedVSeed.measures);
|
1098
1194
|
const top100dataset = dataset.slice(0, 100);
|
1099
1195
|
const sample = top100dataset.reduce((prev, cur)=>({
|
1100
1196
|
...prev,
|
1101
1197
|
...cur
|
1102
1198
|
}), {});
|
1103
|
-
const
|
1199
|
+
const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
|
1104
1200
|
'',
|
1105
1201
|
null,
|
1106
1202
|
void 0
|
1107
|
-
].includes(key)).map((
|
1108
|
-
id:
|
1109
|
-
alias:
|
1203
|
+
].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
|
1204
|
+
id: dim,
|
1205
|
+
alias: dim
|
1110
1206
|
}));
|
1111
|
-
return
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
if (!measures) return false;
|
1116
|
-
return measures.some((measure)=>'children' in measure);
|
1207
|
+
return {
|
1208
|
+
...result,
|
1209
|
+
dimensions: newDimensions
|
1210
|
+
};
|
1117
1211
|
};
|
1118
|
-
const
|
1119
|
-
const
|
1120
|
-
|
1121
|
-
|
1212
|
+
const defaultMeasureName = (advancedVSeed)=>{
|
1213
|
+
const result = {
|
1214
|
+
...advancedVSeed
|
1215
|
+
};
|
1216
|
+
const MeaName = {
|
1217
|
+
id: MeasureName,
|
1218
|
+
alias: intl.i18n`指标名称`
|
1219
|
+
};
|
1220
|
+
if (!result.dimensions?.some((dim)=>dim.id === MeasureName)) result.dimensions?.push(MeaName);
|
1221
|
+
return result;
|
1122
1222
|
};
|
1123
|
-
const encodingForLine = (advancedVSeed
|
1124
|
-
const {
|
1125
|
-
const
|
1126
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
1127
|
-
const dimensions = getBasicDimensions(vseed);
|
1223
|
+
const encodingForLine = (advancedVSeed)=>{
|
1224
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
1225
|
+
const measures = findAllMeasures(vseedMeasures);
|
1128
1226
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
1129
1227
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
1130
1228
|
const encoding = {};
|
@@ -1137,36 +1235,46 @@ const encodingForLine = (advancedVSeed, context)=>{
|
|
1137
1235
|
encoding
|
1138
1236
|
};
|
1139
1237
|
};
|
1140
|
-
const generateDefaultMeasureEncoding = (measures, encoding)=>{
|
1141
|
-
encoding.tooltip = unique(measures.map((item)=>item.id));
|
1142
|
-
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
1143
|
-
};
|
1144
1238
|
const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
1145
|
-
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
1146
1239
|
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
1147
1240
|
encoding.x = uniqueDimIds.slice(0, 1);
|
1148
|
-
encoding.color = uniqueDimIds.slice(
|
1149
|
-
encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
1241
|
+
encoding.color = uniqueDimIds.slice(1);
|
1150
1242
|
encoding.tooltip = uniqueDimIds;
|
1243
|
+
encoding.detail = [];
|
1151
1244
|
encoding.label = [];
|
1152
1245
|
encoding.row = [];
|
1153
1246
|
encoding.column = [];
|
1154
1247
|
};
|
1155
|
-
const generateMeasureEncoding = (measures, encoding)=>{
|
1156
|
-
encoding.tooltip = measures.map((item)=>item.id);
|
1157
|
-
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
1158
|
-
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
1159
|
-
if (color.length > 0) encoding.color = color;
|
1160
|
-
};
|
1161
1248
|
const generateDimensionEncoding = (dimensions, encoding)=>{
|
1162
|
-
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding
|
1249
|
+
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
|
1163
1250
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
1164
1251
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
1165
1252
|
if (0 === encoding.x.length) encoding.x = [
|
1166
1253
|
dimensions[0].id
|
1167
1254
|
];
|
1168
|
-
if (0 === encoding.color.length) encoding.color =
|
1169
|
-
|
1255
|
+
if (0 === encoding.color.length) encoding.color = [
|
1256
|
+
MeasureName
|
1257
|
+
];
|
1258
|
+
};
|
1259
|
+
const generateDefaultMeasureEncoding = (measures, encoding)=>{
|
1260
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
1261
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
1262
|
+
};
|
1263
|
+
const generateMeasureEncoding = (measures, encoding)=>{
|
1264
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
1265
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
1266
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
1267
|
+
if (color.length > 0) encoding.color = color;
|
1268
|
+
};
|
1269
|
+
const isMeasureTreeWithChildren = (vseed)=>{
|
1270
|
+
const { measures } = vseed;
|
1271
|
+
if (!measures) return false;
|
1272
|
+
return measures.some((measure)=>'children' in measure);
|
1273
|
+
};
|
1274
|
+
const isMeasureTreeWithParentId = (vseed)=>{
|
1275
|
+
const { measures } = vseed;
|
1276
|
+
if (!measures) return false;
|
1277
|
+
return measures.some((measure)=>'parentId' in measure);
|
1170
1278
|
};
|
1171
1279
|
const measureDepth = (measures = [])=>{
|
1172
1280
|
if (!measures) return 0;
|
@@ -1226,9 +1334,7 @@ const buildMeasures = (advancedVSeed, context)=>{
|
|
1226
1334
|
advancedVSeed.measures = generateMeasuresByParentId(vseed.measures);
|
1227
1335
|
return advancedVSeed;
|
1228
1336
|
}
|
1229
|
-
|
1230
|
-
if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(basicMeasures);
|
1231
|
-
else advancedVSeed.measures = basicMeasures;
|
1337
|
+
if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(advancedVSeed.measures);
|
1232
1338
|
return advancedVSeed;
|
1233
1339
|
};
|
1234
1340
|
const generateMeasuresByParentId = (measures)=>{
|
@@ -1259,102 +1365,12 @@ const basicMeasuresToMeasureTree = (measures)=>{
|
|
1259
1365
|
}
|
1260
1366
|
];
|
1261
1367
|
};
|
1262
|
-
const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
|
1263
|
-
const result = {
|
1264
|
-
...advancedVSeed
|
1265
|
-
};
|
1266
|
-
const { vseed } = context;
|
1267
|
-
const { dimensions, dataset } = vseed;
|
1268
|
-
const measures = findAllMeasures(advancedVSeed.measures);
|
1269
|
-
const MeaName = {
|
1270
|
-
id: MeasureName,
|
1271
|
-
alias: intl.i18n`指标名称`
|
1272
|
-
};
|
1273
|
-
if (!dataset) throw new Error('dataset is required');
|
1274
|
-
if (0 === dataset.length) return result;
|
1275
|
-
if (dimensions) {
|
1276
|
-
result.dimensions = dimensions.map((dim)=>({
|
1277
|
-
location: 'dimension',
|
1278
|
-
...dim
|
1279
|
-
}));
|
1280
|
-
if (result.dimensions.some((dim)=>dim.id === MeasureName)) return result;
|
1281
|
-
result.dimensions.push(MeaName);
|
1282
|
-
return result;
|
1283
|
-
}
|
1284
|
-
const top100dataset = dataset.slice(0, 100);
|
1285
|
-
const sample = top100dataset.reduce((prev, cur)=>({
|
1286
|
-
...prev,
|
1287
|
-
...cur
|
1288
|
-
}), {});
|
1289
|
-
result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
|
1290
|
-
'',
|
1291
|
-
null,
|
1292
|
-
void 0
|
1293
|
-
].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
|
1294
|
-
id: dim,
|
1295
|
-
alias: dim,
|
1296
|
-
location: 'dimension'
|
1297
|
-
}));
|
1298
|
-
result.dimensions.push(MeaName);
|
1299
|
-
return result;
|
1300
|
-
};
|
1301
1368
|
const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
|
1302
1369
|
const { vseed } = context;
|
1303
1370
|
const usePivotChart = isPivotChart(vseed);
|
1304
1371
|
if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
|
1305
1372
|
return execPipeline(pipeline, context, advancedVSeed);
|
1306
1373
|
};
|
1307
|
-
const foldMeasures = (dataset, measures, options)=>{
|
1308
|
-
const { measureId, measureName, measureValue, colorMeasureId } = options || {};
|
1309
|
-
const foldInfo = {
|
1310
|
-
measureId,
|
1311
|
-
measureName,
|
1312
|
-
measureValue,
|
1313
|
-
colorRange: [
|
1314
|
-
0,
|
1315
|
-
1
|
1316
|
-
],
|
1317
|
-
measureRange: [
|
1318
|
-
0,
|
1319
|
-
1
|
1320
|
-
],
|
1321
|
-
foldMap: {}
|
1322
|
-
};
|
1323
|
-
const result = new Array(dataset.length * measures.length);
|
1324
|
-
let index = 0;
|
1325
|
-
const ids = measures.map((d)=>d.id);
|
1326
|
-
for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
|
1327
|
-
const datum = omit({
|
1328
|
-
...dataset[i]
|
1329
|
-
}, ids);
|
1330
|
-
datum[ORIGINAL_DATA] = dataset[i];
|
1331
|
-
const measure = measures[j];
|
1332
|
-
const { id, alias } = measure;
|
1333
|
-
datum[id] = dataset[i][id];
|
1334
|
-
datum[measureId] = id;
|
1335
|
-
datum[measureName] = alias || id;
|
1336
|
-
datum[measureValue] = dataset[i][id];
|
1337
|
-
if (colorMeasureId) {
|
1338
|
-
const value = datum[ORIGINAL_DATA][colorMeasureId];
|
1339
|
-
datum[ColorEncoding] = value;
|
1340
|
-
datum[ColorIdEncoding] = colorMeasureId;
|
1341
|
-
foldInfo.colorRange = [
|
1342
|
-
Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
|
1343
|
-
Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
|
1344
|
-
];
|
1345
|
-
}
|
1346
|
-
foldInfo.measureRange = [
|
1347
|
-
Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
|
1348
|
-
Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
|
1349
|
-
];
|
1350
|
-
foldInfo.foldMap[id] = alias;
|
1351
|
-
result[index++] = datum;
|
1352
|
-
}
|
1353
|
-
return {
|
1354
|
-
dataset: result,
|
1355
|
-
foldInfo
|
1356
|
-
};
|
1357
|
-
};
|
1358
1374
|
const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
|
1359
1375
|
const { foldMeasureId, separator, colorItemAsId } = options;
|
1360
1376
|
const unfoldInfo = {
|
@@ -1449,7 +1465,9 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
|
|
1449
1465
|
const { dimensions, measures, encoding } = advancedVSeed;
|
1450
1466
|
if (!measures || !dimensions || !dataset || !encoding) return result;
|
1451
1467
|
if (0 === measures.length) throw new Error('measures can not be empty');
|
1468
|
+
const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
|
1452
1469
|
const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(findAllMeasures(measures), (item)=>item.id), encoding, {
|
1470
|
+
colorItemAsId: hasEncoding,
|
1453
1471
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
1454
1472
|
});
|
1455
1473
|
return {
|
@@ -1480,6 +1498,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
|
|
1480
1498
|
if (measures) measures.forEach((measure)=>{
|
1481
1499
|
if (measure.children && measure.children.length > 0) measureGroups.push(measure);
|
1482
1500
|
});
|
1501
|
+
const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
|
1483
1502
|
const datasets = [];
|
1484
1503
|
const datasetReshapeInfo = [];
|
1485
1504
|
measureGroups.forEach((measureGroup, index)=>{
|
@@ -1487,6 +1506,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
|
|
1487
1506
|
if (!measures) return;
|
1488
1507
|
const groupId = measureGroup.id;
|
1489
1508
|
const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(measures, (item)=>item.id), encoding, {
|
1509
|
+
colorItemAsId: hasEncoding,
|
1490
1510
|
foldMeasureValue: `${FoldMeasureValue}${groupId}`,
|
1491
1511
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
1492
1512
|
});
|
@@ -1695,9 +1715,11 @@ const annotation_annotation = (advancedVSeed, context)=>{
|
|
1695
1715
|
};
|
1696
1716
|
const lineAdvancedPipeline = [
|
1697
1717
|
initAdvancedVSeed_initAdvancedVSeed,
|
1718
|
+
defaultMeasures_defaultMeasures,
|
1719
|
+
defaultDimensions,
|
1720
|
+
defaultMeasureName,
|
1698
1721
|
encodingForLine,
|
1699
1722
|
buildMeasures,
|
1700
|
-
autoDimensions_autoDimensions,
|
1701
1723
|
pivotAdapter([
|
1702
1724
|
reshapeWithEncoding
|
1703
1725
|
], [
|
@@ -2044,129 +2066,18 @@ const yLinear = (spec, context)=>{
|
|
2044
2066
|
domainLine: {
|
2045
2067
|
visible: line?.visible,
|
2046
2068
|
style: {
|
2047
|
-
lineWidth: line?.lineWidth,
|
2048
|
-
stroke: line?.lineColor
|
2049
|
-
}
|
2050
|
-
},
|
2051
|
-
innerOffset: {
|
2052
|
-
top: LINEAR_AXIS_INNER_OFFSET_TOP
|
2053
|
-
}
|
2054
|
-
};
|
2055
|
-
result.axes = [
|
2056
|
-
...result.axes,
|
2057
|
-
linearAxis
|
2058
|
-
];
|
2059
|
-
return result;
|
2060
|
-
};
|
2061
|
-
const label_label = (spec, context)=>{
|
2062
|
-
const result = {
|
2063
|
-
...spec
|
2064
|
-
};
|
2065
|
-
const { advancedVSeed } = context;
|
2066
|
-
const { measures, datasetReshapeInfo, locale } = advancedVSeed;
|
2067
|
-
const { chartType } = advancedVSeed;
|
2068
|
-
const baseConfig = advancedVSeed.config[chartType];
|
2069
|
-
if (!baseConfig || !baseConfig.label) return result;
|
2070
|
-
const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
|
2071
|
-
const { label } = baseConfig;
|
2072
|
-
const { enable } = label;
|
2073
|
-
result.label = {
|
2074
|
-
visible: enable,
|
2075
|
-
formatMethod: (value, datum)=>{
|
2076
|
-
const result = [];
|
2077
|
-
const formatValue = (value)=>{
|
2078
|
-
const id = datum[measureId];
|
2079
|
-
const measure = findMeasureById(measures, id);
|
2080
|
-
if (!measure) return value;
|
2081
|
-
const { format = {}, autoFormat = true } = measure;
|
2082
|
-
if (!external_remeda_isEmpty(format)) {
|
2083
|
-
const formatter = createFormatter(format);
|
2084
|
-
return formatter(value);
|
2085
|
-
}
|
2086
|
-
if (autoFormat) return autoFormatter(value, locale);
|
2087
|
-
return String(value);
|
2088
|
-
};
|
2089
|
-
result.push(formatValue(datum[measureValue]));
|
2090
|
-
return result.join(' ');
|
2091
|
-
}
|
2092
|
-
};
|
2093
|
-
return result;
|
2094
|
-
};
|
2095
|
-
const tooltip_tooltip = (spec, context)=>{
|
2096
|
-
const result = {
|
2097
|
-
...spec
|
2098
|
-
};
|
2099
|
-
const { advancedVSeed } = context;
|
2100
|
-
const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
|
2101
|
-
const baseConfig = advancedVSeed.config[chartType];
|
2102
|
-
const { tooltip = {
|
2103
|
-
enable: true
|
2104
|
-
} } = baseConfig;
|
2105
|
-
const { enable } = tooltip;
|
2106
|
-
const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
|
2107
|
-
const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
|
2108
|
-
result.tooltip = {
|
2109
|
-
visible: enable,
|
2110
|
-
mark: {
|
2111
|
-
title: {
|
2112
|
-
visible: true
|
2113
|
-
},
|
2114
|
-
content: [
|
2115
|
-
...dimensions.map((item)=>({
|
2116
|
-
visible: true,
|
2117
|
-
hasShape: true,
|
2118
|
-
shapeType: 'rectRound',
|
2119
|
-
key: (datum)=>{
|
2120
|
-
if (item.alias || item.id) return item.alias || item.id;
|
2121
|
-
return datum && datum[item.id];
|
2122
|
-
},
|
2123
|
-
value: (datum)=>datum && datum[item.id]
|
2124
|
-
})),
|
2125
|
-
{
|
2126
|
-
visible: true,
|
2127
|
-
hasShape: true,
|
2128
|
-
key: (datum)=>datum && datum[measureName || colorName] || '',
|
2129
|
-
value: (datum)=>{
|
2130
|
-
if (!datum) return '';
|
2131
|
-
const value = datum[measureValue];
|
2132
|
-
const id = datum[measureId];
|
2133
|
-
const measure = findMeasureById(measures, id);
|
2134
|
-
if (!measure) return String(value);
|
2135
|
-
const { format = {}, autoFormat = true } = measure;
|
2136
|
-
if (!external_remeda_isEmpty(format)) {
|
2137
|
-
const formatter = createFormatter(format);
|
2138
|
-
return formatter(value);
|
2139
|
-
}
|
2140
|
-
if (autoFormat) return autoFormatter(value, locale);
|
2141
|
-
return String(value);
|
2142
|
-
}
|
2143
|
-
}
|
2144
|
-
]
|
2069
|
+
lineWidth: line?.lineWidth,
|
2070
|
+
stroke: line?.lineColor
|
2071
|
+
}
|
2145
2072
|
},
|
2146
|
-
|
2147
|
-
|
2148
|
-
{
|
2149
|
-
visible: true,
|
2150
|
-
key: (datum)=>datum && datum[colorName] || '',
|
2151
|
-
value: (datum)=>{
|
2152
|
-
if (!datum) return '';
|
2153
|
-
const value = datum[measureValue];
|
2154
|
-
const id = datum[measureId];
|
2155
|
-
const measure = findMeasureById(measures, id);
|
2156
|
-
if (!measure) return String(value);
|
2157
|
-
const { format = {}, autoFormat = true } = measure;
|
2158
|
-
if (!external_remeda_isEmpty(format)) {
|
2159
|
-
const formatter = createFormatter(format);
|
2160
|
-
return formatter(value);
|
2161
|
-
}
|
2162
|
-
if (autoFormat) return autoFormatter(value, locale);
|
2163
|
-
return String(value);
|
2164
|
-
},
|
2165
|
-
shapeType: 'rectRound'
|
2166
|
-
}
|
2167
|
-
]
|
2073
|
+
innerOffset: {
|
2074
|
+
top: LINEAR_AXIS_INNER_OFFSET_TOP
|
2168
2075
|
}
|
2169
2076
|
};
|
2077
|
+
result.axes = [
|
2078
|
+
...result.axes,
|
2079
|
+
linearAxis
|
2080
|
+
];
|
2170
2081
|
return result;
|
2171
2082
|
};
|
2172
2083
|
const verticalCrosshairLine = (spec, context)=>{
|
@@ -2677,6 +2588,117 @@ const lineStyle_lineStyle = (spec, context)=>{
|
|
2677
2588
|
}
|
2678
2589
|
};
|
2679
2590
|
};
|
2591
|
+
const label_label = (spec, context)=>{
|
2592
|
+
const result = {
|
2593
|
+
...spec
|
2594
|
+
};
|
2595
|
+
const { advancedVSeed } = context;
|
2596
|
+
const { measures, datasetReshapeInfo, locale } = advancedVSeed;
|
2597
|
+
const { chartType } = advancedVSeed;
|
2598
|
+
const baseConfig = advancedVSeed.config[chartType];
|
2599
|
+
if (!baseConfig || !baseConfig.label) return result;
|
2600
|
+
const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
|
2601
|
+
const { label } = baseConfig;
|
2602
|
+
const { enable } = label;
|
2603
|
+
result.label = {
|
2604
|
+
visible: enable,
|
2605
|
+
formatMethod: (value, datum)=>{
|
2606
|
+
const result = [];
|
2607
|
+
const formatValue = (value)=>{
|
2608
|
+
const id = datum[measureId];
|
2609
|
+
const measure = findMeasureById(measures, id);
|
2610
|
+
if (!measure) return value;
|
2611
|
+
const { format = {}, autoFormat = true } = measure;
|
2612
|
+
if (!external_remeda_isEmpty(format)) {
|
2613
|
+
const formatter = createFormatter(format);
|
2614
|
+
return formatter(value);
|
2615
|
+
}
|
2616
|
+
if (autoFormat) return autoFormatter(value, locale);
|
2617
|
+
return String(value);
|
2618
|
+
};
|
2619
|
+
result.push(formatValue(datum[measureValue]));
|
2620
|
+
return result.join(' ');
|
2621
|
+
}
|
2622
|
+
};
|
2623
|
+
return result;
|
2624
|
+
};
|
2625
|
+
const tooltip_tooltip = (spec, context)=>{
|
2626
|
+
const result = {
|
2627
|
+
...spec
|
2628
|
+
};
|
2629
|
+
const { advancedVSeed } = context;
|
2630
|
+
const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
|
2631
|
+
const baseConfig = advancedVSeed.config[chartType];
|
2632
|
+
const { tooltip = {
|
2633
|
+
enable: true
|
2634
|
+
} } = baseConfig;
|
2635
|
+
const { enable } = tooltip;
|
2636
|
+
const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
|
2637
|
+
const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
|
2638
|
+
result.tooltip = {
|
2639
|
+
visible: enable,
|
2640
|
+
mark: {
|
2641
|
+
title: {
|
2642
|
+
visible: true
|
2643
|
+
},
|
2644
|
+
content: [
|
2645
|
+
...dimensions.map((item)=>({
|
2646
|
+
visible: true,
|
2647
|
+
hasShape: true,
|
2648
|
+
shapeType: 'rectRound',
|
2649
|
+
key: (datum)=>{
|
2650
|
+
if (item.alias || item.id) return item.alias || item.id;
|
2651
|
+
return datum && datum[item.id];
|
2652
|
+
},
|
2653
|
+
value: (datum)=>datum && datum[item.id]
|
2654
|
+
})),
|
2655
|
+
{
|
2656
|
+
visible: true,
|
2657
|
+
hasShape: true,
|
2658
|
+
key: (datum)=>datum && datum[measureName || colorName] || '',
|
2659
|
+
value: (datum)=>{
|
2660
|
+
if (!datum) return '';
|
2661
|
+
const value = datum[measureValue];
|
2662
|
+
const id = datum[measureId];
|
2663
|
+
const measure = findMeasureById(measures, id);
|
2664
|
+
if (!measure) return String(value);
|
2665
|
+
const { format = {}, autoFormat = true } = measure;
|
2666
|
+
if (!external_remeda_isEmpty(format)) {
|
2667
|
+
const formatter = createFormatter(format);
|
2668
|
+
return formatter(value);
|
2669
|
+
}
|
2670
|
+
if (autoFormat) return autoFormatter(value, locale);
|
2671
|
+
return String(value);
|
2672
|
+
}
|
2673
|
+
}
|
2674
|
+
]
|
2675
|
+
},
|
2676
|
+
dimension: {
|
2677
|
+
content: [
|
2678
|
+
{
|
2679
|
+
visible: true,
|
2680
|
+
key: (datum)=>datum && datum[colorName] || '',
|
2681
|
+
value: (datum)=>{
|
2682
|
+
if (!datum) return '';
|
2683
|
+
const value = datum[measureValue];
|
2684
|
+
const id = datum[measureId];
|
2685
|
+
const measure = findMeasureById(measures, id);
|
2686
|
+
if (!measure) return String(value);
|
2687
|
+
const { format = {}, autoFormat = true } = measure;
|
2688
|
+
if (!external_remeda_isEmpty(format)) {
|
2689
|
+
const formatter = createFormatter(format);
|
2690
|
+
return formatter(value);
|
2691
|
+
}
|
2692
|
+
if (autoFormat) return autoFormatter(value, locale);
|
2693
|
+
return String(value);
|
2694
|
+
},
|
2695
|
+
shapeType: 'rectRound'
|
2696
|
+
}
|
2697
|
+
]
|
2698
|
+
}
|
2699
|
+
};
|
2700
|
+
return result;
|
2701
|
+
};
|
2680
2702
|
const isSubset = (sub, obj)=>Object.entries(sub).every(([key, value])=>{
|
2681
2703
|
if ('string' == typeof value) return obj[key] === value;
|
2682
2704
|
if ('number' == typeof value) return obj[key] === value;
|
@@ -3293,7 +3315,7 @@ const pivotRowDimensions = (spec, context)=>{
|
|
3293
3315
|
const { advancedVSeed } = context;
|
3294
3316
|
const dimensions = advancedVSeed.dimensions;
|
3295
3317
|
if (!dimensions) return result;
|
3296
|
-
const rowDimensions = dimensions.filter((dim)=>'rowDimension' === dim.location);
|
3318
|
+
const rowDimensions = dimensions.filter((dim)=>'rowDimension' === dim.location || 'row' === dim.encoding);
|
3297
3319
|
const rows = rowDimensions.map((dim)=>({
|
3298
3320
|
dimensionKey: dim.id,
|
3299
3321
|
title: dim.alias || dim.id
|
@@ -3310,17 +3332,132 @@ const pivotColumnDimensions = (spec, context)=>{
|
|
3310
3332
|
const { advancedVSeed } = context;
|
3311
3333
|
const dimensions = advancedVSeed.dimensions;
|
3312
3334
|
if (!dimensions) return result;
|
3313
|
-
const columnDimensions = dimensions.filter((dim)=>'columnDimension' === dim.location);
|
3335
|
+
const columnDimensions = dimensions.filter((dim)=>'columnDimension' === dim.location || 'column' === dim.encoding);
|
3314
3336
|
const columns = columnDimensions.map((dim)=>({
|
3315
3337
|
dimensionKey: dim.id,
|
3316
3338
|
title: dim.alias || dim.id
|
3317
3339
|
}));
|
3318
3340
|
return {
|
3319
3341
|
...result,
|
3320
|
-
columns: columns
|
3342
|
+
columns: columns
|
3343
|
+
};
|
3344
|
+
};
|
3345
|
+
const pivotDiscreteLegend = (spec, context)=>{
|
3346
|
+
const result = {
|
3347
|
+
...spec
|
3348
|
+
};
|
3349
|
+
const { advancedVSeed } = context;
|
3350
|
+
const { chartType } = advancedVSeed;
|
3351
|
+
const baseConfig = advancedVSeed.config[chartType];
|
3352
|
+
if (!baseConfig || !baseConfig.legend) return result;
|
3353
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
3354
|
+
const colorItems = unique(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
|
3355
|
+
const colorIdMap = datasetReshapeInfo.reduce((prev, cur)=>({
|
3356
|
+
...prev,
|
3357
|
+
...cur.unfoldInfo.colorIdMap
|
3358
|
+
}), {});
|
3359
|
+
const { legend, color } = baseConfig;
|
3360
|
+
const { colorScheme, colorMapping } = color;
|
3361
|
+
const colorSpecified = createSpecifiedForColorMapping(colorMapping, colorIdMap, colorItems);
|
3362
|
+
const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400, maxSize = 1, border, shapeType = 'rectRound' } = legend || {};
|
3363
|
+
const orient = [
|
3364
|
+
'bottom',
|
3365
|
+
'bottomLeft',
|
3366
|
+
'bottomRight',
|
3367
|
+
'bl',
|
3368
|
+
'br'
|
3369
|
+
].includes(position) ? 'bottom' : [
|
3370
|
+
'top',
|
3371
|
+
'topLeft',
|
3372
|
+
'topRight',
|
3373
|
+
'tl',
|
3374
|
+
'tr'
|
3375
|
+
].includes(position) ? 'top' : [
|
3376
|
+
'left',
|
3377
|
+
'leftTop',
|
3378
|
+
'leftBottom',
|
3379
|
+
'lt',
|
3380
|
+
'lb'
|
3381
|
+
].includes(position) ? 'left' : 'right';
|
3382
|
+
const legendPosition = [
|
3383
|
+
'topLeft',
|
3384
|
+
'bottomLeft',
|
3385
|
+
'leftTop',
|
3386
|
+
'rightTop',
|
3387
|
+
'lt',
|
3388
|
+
'rt',
|
3389
|
+
'tl',
|
3390
|
+
'bl'
|
3391
|
+
].includes(position) ? 'start' : [
|
3392
|
+
'topRight',
|
3393
|
+
'bottomRight',
|
3394
|
+
'leftBottom',
|
3395
|
+
'rightBottom',
|
3396
|
+
'lb',
|
3397
|
+
'rb',
|
3398
|
+
'rt',
|
3399
|
+
'br'
|
3400
|
+
].includes(position) ? 'end' : 'middle';
|
3401
|
+
const legends = {
|
3402
|
+
visible: enable,
|
3403
|
+
type: 'discrete',
|
3404
|
+
orient,
|
3405
|
+
position: legendPosition,
|
3406
|
+
maxCol: Math.max(1, maxSize),
|
3407
|
+
maxRow: Math.max(1, maxSize),
|
3408
|
+
data: colorItems.map((d, index)=>{
|
3409
|
+
const color = colorSpecified?.[d] ?? colorScheme?.[index % colorScheme.length];
|
3410
|
+
return {
|
3411
|
+
label: d,
|
3412
|
+
shape: {
|
3413
|
+
outerBorder: border ? {
|
3414
|
+
stroke: color,
|
3415
|
+
distance: 3,
|
3416
|
+
lineWidth: 1
|
3417
|
+
} : void 0,
|
3418
|
+
fill: color
|
3419
|
+
}
|
3420
|
+
};
|
3421
|
+
}),
|
3422
|
+
item: {
|
3423
|
+
focus: true,
|
3424
|
+
maxWidth: '30%',
|
3425
|
+
focusIconStyle: {
|
3426
|
+
size: labelFontSize + 2,
|
3427
|
+
fill: labelFontColor,
|
3428
|
+
fontWeight: labelFontWeight
|
3429
|
+
},
|
3430
|
+
shape: {
|
3431
|
+
space: border ? 6 : 4,
|
3432
|
+
style: {
|
3433
|
+
symbolType: shapeType,
|
3434
|
+
size: border ? 8 : 10
|
3435
|
+
}
|
3436
|
+
},
|
3437
|
+
label: {
|
3438
|
+
formatMethod: (value)=>colorIdMap[value] ?? value,
|
3439
|
+
style: {
|
3440
|
+
fontSize: labelFontSize,
|
3441
|
+
fill: labelFontColor,
|
3442
|
+
fontWeight: labelFontWeight
|
3443
|
+
}
|
3444
|
+
},
|
3445
|
+
background: {
|
3446
|
+
state: {
|
3447
|
+
selectedHover: {
|
3448
|
+
fill: labelFontColor,
|
3449
|
+
fillOpacity: 0.05
|
3450
|
+
}
|
3451
|
+
}
|
3452
|
+
}
|
3453
|
+
}
|
3454
|
+
};
|
3455
|
+
return {
|
3456
|
+
...result,
|
3457
|
+
legends
|
3321
3458
|
};
|
3322
3459
|
};
|
3323
|
-
const
|
3460
|
+
const pivotColorLegend = (spec, context)=>{
|
3324
3461
|
const result = {
|
3325
3462
|
...spec
|
3326
3463
|
};
|
@@ -3329,15 +3466,11 @@ const pivotDiscreteLegend = (spec, context)=>{
|
|
3329
3466
|
const baseConfig = advancedVSeed.config[chartType];
|
3330
3467
|
if (!baseConfig || !baseConfig.legend) return result;
|
3331
3468
|
const { datasetReshapeInfo } = advancedVSeed;
|
3332
|
-
const
|
3333
|
-
const
|
3334
|
-
...prev,
|
3335
|
-
...cur.unfoldInfo.colorIdMap
|
3336
|
-
}), {});
|
3469
|
+
const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
|
3470
|
+
const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
|
3337
3471
|
const { legend, color } = baseConfig;
|
3338
|
-
const { colorScheme,
|
3339
|
-
const
|
3340
|
-
const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400, maxSize = 1, border, shapeType = 'rectRound' } = legend || {};
|
3472
|
+
const { colorScheme, linearColorScheme } = color;
|
3473
|
+
const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
|
3341
3474
|
const orient = [
|
3342
3475
|
'bottom',
|
3343
3476
|
'bottomLeft',
|
@@ -3378,55 +3511,31 @@ const pivotDiscreteLegend = (spec, context)=>{
|
|
3378
3511
|
].includes(position) ? 'end' : 'middle';
|
3379
3512
|
const legends = {
|
3380
3513
|
visible: enable,
|
3381
|
-
type: '
|
3514
|
+
type: 'color',
|
3382
3515
|
orient,
|
3383
3516
|
position: legendPosition,
|
3384
|
-
|
3385
|
-
|
3386
|
-
|
3387
|
-
|
3388
|
-
|
3389
|
-
|
3390
|
-
|
3391
|
-
|
3392
|
-
|
3393
|
-
|
3394
|
-
|
3395
|
-
} : void 0,
|
3396
|
-
fill: color
|
3397
|
-
}
|
3398
|
-
};
|
3399
|
-
}),
|
3400
|
-
item: {
|
3401
|
-
focus: true,
|
3402
|
-
maxWidth: '30%',
|
3403
|
-
focusIconStyle: {
|
3404
|
-
size: labelFontSize + 2,
|
3517
|
+
colors: linearColorScheme || colorScheme || [],
|
3518
|
+
value: [
|
3519
|
+
min,
|
3520
|
+
max
|
3521
|
+
],
|
3522
|
+
min: min,
|
3523
|
+
max: max,
|
3524
|
+
maxWidth: '30%',
|
3525
|
+
startText: {
|
3526
|
+
visible: true,
|
3527
|
+
style: {
|
3405
3528
|
fill: labelFontColor,
|
3529
|
+
fontSize: labelFontSize,
|
3530
|
+
fontWeight: labelFontWeight
|
3531
|
+
}
|
3532
|
+
},
|
3533
|
+
endText: {
|
3534
|
+
visible: true,
|
3535
|
+
style: {
|
3536
|
+
fill: labelFontColor,
|
3537
|
+
fontSize: labelFontSize,
|
3406
3538
|
fontWeight: labelFontWeight
|
3407
|
-
},
|
3408
|
-
shape: {
|
3409
|
-
space: border ? 6 : 4,
|
3410
|
-
style: {
|
3411
|
-
symbolType: shapeType,
|
3412
|
-
size: border ? 8 : 10
|
3413
|
-
}
|
3414
|
-
},
|
3415
|
-
label: {
|
3416
|
-
formatMethod: (value)=>colorIdMap[value] ?? value,
|
3417
|
-
style: {
|
3418
|
-
fontSize: labelFontSize,
|
3419
|
-
fill: labelFontColor,
|
3420
|
-
fontWeight: labelFontWeight
|
3421
|
-
}
|
3422
|
-
},
|
3423
|
-
background: {
|
3424
|
-
state: {
|
3425
|
-
selectedHover: {
|
3426
|
-
fill: labelFontColor,
|
3427
|
-
fillOpacity: 0.05
|
3428
|
-
}
|
3429
|
-
}
|
3430
3539
|
}
|
3431
3540
|
}
|
3432
3541
|
};
|
@@ -3449,13 +3558,13 @@ const line_line = [
|
|
3449
3558
|
progressive,
|
3450
3559
|
xBand,
|
3451
3560
|
yLinear,
|
3452
|
-
label_label,
|
3453
|
-
tooltip_tooltip,
|
3454
3561
|
verticalCrosshairLine,
|
3455
3562
|
colorAdapter(discreteLegend, colorLegend),
|
3456
3563
|
colorPointStyleFill(pointStyle_pointStyle),
|
3457
3564
|
pointStateDimensionHover,
|
3458
3565
|
colorLineStyleFill(lineStyle_lineStyle),
|
3566
|
+
label_label,
|
3567
|
+
tooltip_tooltip,
|
3459
3568
|
annotationPoint_annotationPoint,
|
3460
3569
|
annotationVerticalLine_annotationVerticalLine,
|
3461
3570
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -3468,18 +3577,18 @@ const pivotLine = [
|
|
3468
3577
|
datasetPivot,
|
3469
3578
|
pivotIndicators_pivotIndicators([
|
3470
3579
|
initLine,
|
3471
|
-
color_color,
|
3580
|
+
colorAdapter(color_color, linearColor),
|
3472
3581
|
background_backgroundColor,
|
3473
3582
|
datasetXY,
|
3474
3583
|
progressive,
|
3475
3584
|
xBand,
|
3476
3585
|
yLinear,
|
3477
|
-
label_label,
|
3478
|
-
tooltip_tooltip,
|
3479
3586
|
verticalCrosshairLine,
|
3480
|
-
pointStyle_pointStyle,
|
3587
|
+
colorPointStyleFill(pointStyle_pointStyle),
|
3481
3588
|
pointStateDimensionHover,
|
3482
|
-
lineStyle_lineStyle,
|
3589
|
+
colorLineStyleFill(lineStyle_lineStyle),
|
3590
|
+
label_label,
|
3591
|
+
tooltip_tooltip,
|
3483
3592
|
annotationPoint_annotationPoint,
|
3484
3593
|
annotationVerticalLine_annotationVerticalLine,
|
3485
3594
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -3487,7 +3596,7 @@ const pivotLine = [
|
|
3487
3596
|
]),
|
3488
3597
|
pivotRowDimensions,
|
3489
3598
|
pivotColumnDimensions,
|
3490
|
-
pivotDiscreteLegend
|
3599
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
3491
3600
|
];
|
3492
3601
|
const lineSpecPipeline = [
|
3493
3602
|
pivotAdapter_pivotAdapter(line_line, pivotLine)
|
@@ -3496,11 +3605,9 @@ const registerLine = ()=>{
|
|
3496
3605
|
Builder._advancedPipelineMap.line = lineAdvancedPipeline;
|
3497
3606
|
Builder._specPipelineMap.line = lineSpecPipeline;
|
3498
3607
|
};
|
3499
|
-
const encodingForColumn = (advancedVSeed
|
3500
|
-
const {
|
3501
|
-
const
|
3502
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
3503
|
-
const dimensions = getBasicDimensions(vseed);
|
3608
|
+
const encodingForColumn = (advancedVSeed)=>{
|
3609
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
3610
|
+
const measures = findAllMeasures(vseedMeasures);
|
3504
3611
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
3505
3612
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
3506
3613
|
const encoding = {};
|
@@ -3513,10 +3620,6 @@ const encodingForColumn = (advancedVSeed, context)=>{
|
|
3513
3620
|
encoding
|
3514
3621
|
};
|
3515
3622
|
};
|
3516
|
-
const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
3517
|
-
encoding.tooltip = unique(measures.map((item)=>item.id));
|
3518
|
-
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
3519
|
-
};
|
3520
3623
|
const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
3521
3624
|
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
3522
3625
|
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
@@ -3528,28 +3631,35 @@ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
|
3528
3631
|
encoding.row = [];
|
3529
3632
|
encoding.column = [];
|
3530
3633
|
};
|
3531
|
-
const column_generateMeasureEncoding = (measures, encoding)=>{
|
3532
|
-
encoding.tooltip = measures.map((item)=>item.id);
|
3533
|
-
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
3534
|
-
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
3535
|
-
if (color.length > 0) encoding.color = color;
|
3536
|
-
return encoding;
|
3537
|
-
};
|
3538
3634
|
const column_generateDimensionEncoding = (dimensions, encoding)=>{
|
3539
|
-
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding
|
3635
|
+
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
|
3540
3636
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
3541
3637
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
3542
3638
|
if (0 === encoding.x.length) encoding.x = [
|
3543
3639
|
dimensions[0].id
|
3544
3640
|
];
|
3545
|
-
if (0 === encoding.color.length) encoding.color =
|
3546
|
-
|
3641
|
+
if (0 === encoding.color.length) encoding.color = [
|
3642
|
+
MeasureName
|
3643
|
+
];
|
3644
|
+
};
|
3645
|
+
const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
3646
|
+
encoding.tooltip = unique(measures.map((item)=>item.id));
|
3647
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
3648
|
+
};
|
3649
|
+
const column_generateMeasureEncoding = (measures, encoding)=>{
|
3650
|
+
encoding.tooltip = measures.map((item)=>item.id);
|
3651
|
+
encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
|
3652
|
+
const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
3653
|
+
if (color.length > 0) encoding.color = color;
|
3654
|
+
return encoding;
|
3547
3655
|
};
|
3548
3656
|
const columnAdvancedPipeline = [
|
3549
3657
|
initAdvancedVSeed_initAdvancedVSeed,
|
3658
|
+
defaultMeasures_defaultMeasures,
|
3659
|
+
defaultDimensions,
|
3660
|
+
defaultMeasureName,
|
3550
3661
|
encodingForColumn,
|
3551
3662
|
buildMeasures,
|
3552
|
-
autoDimensions_autoDimensions,
|
3553
3663
|
pivotAdapter([
|
3554
3664
|
reshapeWithEncoding
|
3555
3665
|
], [
|
@@ -3852,93 +3962,6 @@ const annotationAreaBand = (spec, context)=>{
|
|
3852
3962
|
markArea: markArea
|
3853
3963
|
};
|
3854
3964
|
};
|
3855
|
-
const pivotColorLegend = (spec, context)=>{
|
3856
|
-
const result = {
|
3857
|
-
...spec
|
3858
|
-
};
|
3859
|
-
const { advancedVSeed } = context;
|
3860
|
-
const { chartType } = advancedVSeed;
|
3861
|
-
const baseConfig = advancedVSeed.config[chartType];
|
3862
|
-
if (!baseConfig || !baseConfig.legend) return result;
|
3863
|
-
const { datasetReshapeInfo } = advancedVSeed;
|
3864
|
-
const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
|
3865
|
-
const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
|
3866
|
-
const { legend, color } = baseConfig;
|
3867
|
-
const { colorScheme, linearColorScheme } = color;
|
3868
|
-
const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
|
3869
|
-
const orient = [
|
3870
|
-
'bottom',
|
3871
|
-
'bottomLeft',
|
3872
|
-
'bottomRight',
|
3873
|
-
'bl',
|
3874
|
-
'br'
|
3875
|
-
].includes(position) ? 'bottom' : [
|
3876
|
-
'top',
|
3877
|
-
'topLeft',
|
3878
|
-
'topRight',
|
3879
|
-
'tl',
|
3880
|
-
'tr'
|
3881
|
-
].includes(position) ? 'top' : [
|
3882
|
-
'left',
|
3883
|
-
'leftTop',
|
3884
|
-
'leftBottom',
|
3885
|
-
'lt',
|
3886
|
-
'lb'
|
3887
|
-
].includes(position) ? 'left' : 'right';
|
3888
|
-
const legendPosition = [
|
3889
|
-
'topLeft',
|
3890
|
-
'bottomLeft',
|
3891
|
-
'leftTop',
|
3892
|
-
'rightTop',
|
3893
|
-
'lt',
|
3894
|
-
'rt',
|
3895
|
-
'tl',
|
3896
|
-
'bl'
|
3897
|
-
].includes(position) ? 'start' : [
|
3898
|
-
'topRight',
|
3899
|
-
'bottomRight',
|
3900
|
-
'leftBottom',
|
3901
|
-
'rightBottom',
|
3902
|
-
'lb',
|
3903
|
-
'rb',
|
3904
|
-
'rt',
|
3905
|
-
'br'
|
3906
|
-
].includes(position) ? 'end' : 'middle';
|
3907
|
-
const legends = {
|
3908
|
-
visible: enable,
|
3909
|
-
type: 'color',
|
3910
|
-
orient,
|
3911
|
-
position: legendPosition,
|
3912
|
-
colors: linearColorScheme || colorScheme || [],
|
3913
|
-
value: [
|
3914
|
-
min,
|
3915
|
-
max
|
3916
|
-
],
|
3917
|
-
min: min,
|
3918
|
-
max: max,
|
3919
|
-
maxWidth: '30%',
|
3920
|
-
startText: {
|
3921
|
-
visible: true,
|
3922
|
-
style: {
|
3923
|
-
fill: labelFontColor,
|
3924
|
-
fontSize: labelFontSize,
|
3925
|
-
fontWeight: labelFontWeight
|
3926
|
-
}
|
3927
|
-
},
|
3928
|
-
endText: {
|
3929
|
-
visible: true,
|
3930
|
-
style: {
|
3931
|
-
fill: labelFontColor,
|
3932
|
-
fontSize: labelFontSize,
|
3933
|
-
fontWeight: labelFontWeight
|
3934
|
-
}
|
3935
|
-
}
|
3936
|
-
};
|
3937
|
-
return {
|
3938
|
-
...result,
|
3939
|
-
legends
|
3940
|
-
};
|
3941
|
-
};
|
3942
3965
|
const column = [
|
3943
3966
|
initColumn,
|
3944
3967
|
stackCornerRadius_stackCornerRadius,
|
@@ -3996,9 +4019,11 @@ const registerColumn = ()=>{
|
|
3996
4019
|
};
|
3997
4020
|
const columnParallelAdvancedPipeline = [
|
3998
4021
|
initAdvancedVSeed_initAdvancedVSeed,
|
4022
|
+
defaultMeasures_defaultMeasures,
|
4023
|
+
defaultDimensions,
|
4024
|
+
defaultMeasureName,
|
3999
4025
|
encodingForColumn,
|
4000
4026
|
buildMeasures,
|
4001
|
-
autoDimensions_autoDimensions,
|
4002
4027
|
pivotAdapter([
|
4003
4028
|
reshapeWithEncoding
|
4004
4029
|
], [
|
@@ -4093,9 +4118,11 @@ const registerColumnParallel = ()=>{
|
|
4093
4118
|
};
|
4094
4119
|
const columnPercentAdvancedPipeline = [
|
4095
4120
|
initAdvancedVSeed_initAdvancedVSeed,
|
4121
|
+
defaultMeasures_defaultMeasures,
|
4122
|
+
defaultDimensions,
|
4123
|
+
defaultMeasureName,
|
4096
4124
|
encodingForColumn,
|
4097
4125
|
buildMeasures,
|
4098
|
-
autoDimensions_autoDimensions,
|
4099
4126
|
pivotAdapter([
|
4100
4127
|
reshapeWithEncoding
|
4101
4128
|
], [
|
@@ -4172,11 +4199,9 @@ const registerColumnPercent = ()=>{
|
|
4172
4199
|
Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
|
4173
4200
|
Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
|
4174
4201
|
};
|
4175
|
-
const encodingForBar = (advancedVSeed
|
4176
|
-
const {
|
4177
|
-
const
|
4178
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
4179
|
-
const dimensions = getBasicDimensions(vseed);
|
4202
|
+
const encodingForBar = (advancedVSeed)=>{
|
4203
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
4204
|
+
const measures = findAllMeasures(vseedMeasures);
|
4180
4205
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
4181
4206
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
4182
4207
|
const encoding = {};
|
@@ -4212,13 +4237,15 @@ const bar_generateMeasureEncoding = (measures, encoding)=>{
|
|
4212
4237
|
return encoding;
|
4213
4238
|
};
|
4214
4239
|
const bar_generateDimensionEncoding = (dimensions, encoding)=>{
|
4215
|
-
encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding
|
4240
|
+
encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
|
4216
4241
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
4217
4242
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
4218
4243
|
if (0 === encoding.y.length) encoding.y = [
|
4219
4244
|
dimensions[0].id
|
4220
4245
|
];
|
4221
|
-
if (0 === encoding.color.length) encoding.color =
|
4246
|
+
if (0 === encoding.color.length) encoding.color = [
|
4247
|
+
MeasureName
|
4248
|
+
];
|
4222
4249
|
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
|
4223
4250
|
};
|
4224
4251
|
const sortYBandAxis = (advancedVSeed, context)=>{
|
@@ -4239,9 +4266,11 @@ const sortYBandAxis = (advancedVSeed, context)=>{
|
|
4239
4266
|
};
|
4240
4267
|
const barAdvancedPipeline = [
|
4241
4268
|
initAdvancedVSeed_initAdvancedVSeed,
|
4269
|
+
defaultMeasures_defaultMeasures,
|
4270
|
+
defaultDimensions,
|
4271
|
+
defaultMeasureName,
|
4242
4272
|
encodingForBar,
|
4243
4273
|
buildMeasures,
|
4244
|
-
autoDimensions_autoDimensions,
|
4245
4274
|
pivotAdapter([
|
4246
4275
|
reshapeWithEncoding
|
4247
4276
|
], [
|
@@ -4592,9 +4621,11 @@ const registerBar = ()=>{
|
|
4592
4621
|
};
|
4593
4622
|
const barParallelAdvancedPipeline = [
|
4594
4623
|
initAdvancedVSeed_initAdvancedVSeed,
|
4595
|
-
|
4596
|
-
|
4624
|
+
defaultMeasures_defaultMeasures,
|
4625
|
+
defaultDimensions,
|
4626
|
+
defaultMeasureName,
|
4597
4627
|
encodingForBar,
|
4628
|
+
buildMeasures,
|
4598
4629
|
pivotAdapter([
|
4599
4630
|
reshapeWithEncoding
|
4600
4631
|
], [
|
@@ -4688,9 +4719,11 @@ const registerBarParallel = ()=>{
|
|
4688
4719
|
};
|
4689
4720
|
const barPercentAdvancedPipeline = [
|
4690
4721
|
initAdvancedVSeed_initAdvancedVSeed,
|
4691
|
-
|
4692
|
-
|
4722
|
+
defaultMeasures_defaultMeasures,
|
4723
|
+
defaultDimensions,
|
4724
|
+
defaultMeasureName,
|
4693
4725
|
encodingForBar,
|
4726
|
+
buildMeasures,
|
4694
4727
|
pivotAdapter([
|
4695
4728
|
reshapeWithEncoding
|
4696
4729
|
], [
|
@@ -4759,9 +4792,11 @@ const registerBarPercent = ()=>{
|
|
4759
4792
|
};
|
4760
4793
|
const areaAdvancedPipeline = [
|
4761
4794
|
initAdvancedVSeed_initAdvancedVSeed,
|
4762
|
-
|
4795
|
+
defaultMeasures_defaultMeasures,
|
4796
|
+
defaultDimensions,
|
4797
|
+
defaultMeasureName,
|
4798
|
+
encodingForLine,
|
4763
4799
|
buildMeasures,
|
4764
|
-
autoDimensions_autoDimensions,
|
4765
4800
|
pivotAdapter([
|
4766
4801
|
reshapeWithEncoding
|
4767
4802
|
], [
|
@@ -4917,9 +4952,11 @@ const registerArea = ()=>{
|
|
4917
4952
|
};
|
4918
4953
|
const areaPercentAdvancedPipeline = [
|
4919
4954
|
initAdvancedVSeed_initAdvancedVSeed,
|
4920
|
-
|
4955
|
+
defaultMeasures_defaultMeasures,
|
4956
|
+
defaultDimensions,
|
4957
|
+
defaultMeasureName,
|
4958
|
+
encodingForLine,
|
4921
4959
|
buildMeasures,
|
4922
|
-
autoDimensions_autoDimensions,
|
4923
4960
|
pivotAdapter([
|
4924
4961
|
reshapeWithEncoding
|
4925
4962
|
], [
|
@@ -4993,11 +5030,9 @@ const registerAreaPercent = ()=>{
|
|
4993
5030
|
Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
|
4994
5031
|
Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
|
4995
5032
|
};
|
4996
|
-
const encodingForScatter = (advancedVSeed
|
4997
|
-
const {
|
4998
|
-
const
|
4999
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
5000
|
-
const dimensions = getBasicDimensions(vseed);
|
5033
|
+
const encodingForScatter = (advancedVSeed)=>{
|
5034
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
5035
|
+
const measures = findAllMeasures(vseedMeasures);
|
5001
5036
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
5002
5037
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
5003
5038
|
const encoding = {};
|
@@ -5033,7 +5068,9 @@ const scatter_generateMeasureEncoding = (measures, encoding)=>{
|
|
5033
5068
|
const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
|
5034
5069
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
5035
5070
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
5036
|
-
if (0 === encoding.color.length) encoding.color =
|
5071
|
+
if (0 === encoding.color.length) encoding.color = [
|
5072
|
+
MeasureName
|
5073
|
+
];
|
5037
5074
|
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
5038
5075
|
};
|
5039
5076
|
const buildMeasuresForScatter = (advancedVSeed, context)=>{
|
@@ -5046,8 +5083,7 @@ const buildMeasuresForScatter = (advancedVSeed, context)=>{
|
|
5046
5083
|
advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(vseed.measures);
|
5047
5084
|
return advancedVSeed;
|
5048
5085
|
}
|
5049
|
-
const
|
5050
|
-
const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(basicMeasures);
|
5086
|
+
const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(advancedVSeed.measures || []);
|
5051
5087
|
advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
|
5052
5088
|
return advancedVSeed;
|
5053
5089
|
};
|
@@ -5266,9 +5302,11 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
|
|
5266
5302
|
};
|
5267
5303
|
const scatterAdvancedPipeline = [
|
5268
5304
|
initAdvancedVSeed_initAdvancedVSeed,
|
5305
|
+
defaultMeasures_defaultMeasures,
|
5306
|
+
defaultDimensions,
|
5307
|
+
defaultMeasureName,
|
5269
5308
|
encodingForScatter,
|
5270
5309
|
buildMeasuresForScatter,
|
5271
|
-
autoDimensions_autoDimensions,
|
5272
5310
|
pivotAdapter([
|
5273
5311
|
reshapeWithScatterEncoding
|
5274
5312
|
], [
|
@@ -5404,7 +5442,7 @@ const pivotScatter = [
|
|
5404
5442
|
]),
|
5405
5443
|
pivotRowDimensions,
|
5406
5444
|
pivotColumnDimensions,
|
5407
|
-
pivotDiscreteLegend
|
5445
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
5408
5446
|
];
|
5409
5447
|
const scatterSpecPipeline = [
|
5410
5448
|
pivotAdapter_pivotAdapter(scatter, pivotScatter)
|
@@ -5413,11 +5451,9 @@ const registerScatter = ()=>{
|
|
5413
5451
|
Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
|
5414
5452
|
Builder._specPipelineMap.scatter = scatterSpecPipeline;
|
5415
5453
|
};
|
5416
|
-
const encodingForDualAxis = (advancedVSeed
|
5417
|
-
const {
|
5418
|
-
const
|
5419
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
5420
|
-
const dimensions = getBasicDimensions(vseed);
|
5454
|
+
const encodingForDualAxis = (advancedVSeed)=>{
|
5455
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
5456
|
+
const measures = findAllMeasures(vseedMeasures);
|
5421
5457
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
5422
5458
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
5423
5459
|
const encoding = {};
|
@@ -5453,13 +5489,15 @@ const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
|
|
5453
5489
|
return encoding;
|
5454
5490
|
};
|
5455
5491
|
const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
|
5456
|
-
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding
|
5492
|
+
encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
|
5457
5493
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
5458
5494
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
5459
5495
|
if (0 === encoding.x.length) encoding.x = [
|
5460
5496
|
dimensions[0].id
|
5461
5497
|
];
|
5462
|
-
if (0 === encoding.color.length) encoding.color =
|
5498
|
+
if (0 === encoding.color.length) encoding.color = [
|
5499
|
+
MeasureName
|
5500
|
+
];
|
5463
5501
|
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
5464
5502
|
};
|
5465
5503
|
const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
|
@@ -5472,8 +5510,7 @@ const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
|
|
5472
5510
|
advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(vseed.measures);
|
5473
5511
|
return advancedVSeed;
|
5474
5512
|
}
|
5475
|
-
const
|
5476
|
-
const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(basicMeasures);
|
5513
|
+
const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(advancedVSeed.measures || []);
|
5477
5514
|
advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
|
5478
5515
|
return advancedVSeed;
|
5479
5516
|
};
|
@@ -5577,8 +5614,10 @@ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
|
|
5577
5614
|
const datasets = [];
|
5578
5615
|
const primaryMeasures = measures[0];
|
5579
5616
|
const secondaryMeasures = measures[1] || [];
|
5617
|
+
const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
|
5580
5618
|
if (primaryMeasures && primaryMeasures.children) {
|
5581
5619
|
const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
|
5620
|
+
colorItemAsId: hasEncoding,
|
5582
5621
|
foldMeasureValue: FoldPrimaryMeasureValue,
|
5583
5622
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
5584
5623
|
});
|
@@ -5625,6 +5664,7 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
|
|
5625
5664
|
const { dataset } = vseed;
|
5626
5665
|
const { dimensions, measures, encoding, chartType } = advancedVSeed;
|
5627
5666
|
if (!measures || !dimensions || !dataset || !encoding) return result;
|
5667
|
+
const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
|
5628
5668
|
const datasetList = [];
|
5629
5669
|
const datasetReshapeInfo = [];
|
5630
5670
|
const measureGroups = [];
|
@@ -5643,6 +5683,7 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
|
|
5643
5683
|
const secondaryMeasures = measures[1] || [];
|
5644
5684
|
if (primaryMeasures && primaryMeasures.children) {
|
5645
5685
|
const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
|
5686
|
+
colorItemAsId: hasEncoding,
|
5646
5687
|
foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
|
5647
5688
|
colorMeasureId: getColorMeasureId(advancedVSeed)
|
5648
5689
|
});
|
@@ -5711,9 +5752,11 @@ const dualAxisConfig = (advancedVSeed, context)=>{
|
|
5711
5752
|
};
|
5712
5753
|
const dualAxisAdvancedPipeline = [
|
5713
5754
|
initAdvancedVSeed_initAdvancedVSeed,
|
5755
|
+
defaultMeasures_defaultMeasures,
|
5756
|
+
defaultDimensions,
|
5757
|
+
defaultMeasureName,
|
5714
5758
|
encodingForDualAxis,
|
5715
5759
|
buildMeasuresForDualAxis,
|
5716
|
-
autoDimensions_autoDimensions,
|
5717
5760
|
pivotAdapter([
|
5718
5761
|
reshapeWithDualEncoding
|
5719
5762
|
], [
|
@@ -6546,11 +6589,9 @@ const registerDualAxis = ()=>{
|
|
6546
6589
|
Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
|
6547
6590
|
Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
|
6548
6591
|
};
|
6549
|
-
const encodingForPie = (advancedVSeed
|
6550
|
-
const {
|
6551
|
-
const
|
6552
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
6553
|
-
const dimensions = getBasicDimensions(vseed);
|
6592
|
+
const encodingForPie = (advancedVSeed)=>{
|
6593
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
6594
|
+
const measures = findAllMeasures(vseedMeasures);
|
6554
6595
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
6555
6596
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
6556
6597
|
const encoding = {};
|
@@ -6585,14 +6626,18 @@ const pie_generateMeasureEncoding = (measures, encoding)=>{
|
|
6585
6626
|
const pie_generateDimensionEncoding = (dimensions, encoding)=>{
|
6586
6627
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
6587
6628
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
6588
|
-
if (0 === encoding.color.length) encoding.color =
|
6629
|
+
if (0 === encoding.color.length) encoding.color = [
|
6630
|
+
MeasureName
|
6631
|
+
];
|
6589
6632
|
if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
|
6590
6633
|
};
|
6591
6634
|
const pieAdvancedPipeline = [
|
6592
6635
|
initAdvancedVSeed_initAdvancedVSeed,
|
6636
|
+
defaultMeasures_defaultMeasures,
|
6637
|
+
defaultDimensions,
|
6638
|
+
defaultMeasureName,
|
6593
6639
|
encodingForPie,
|
6594
6640
|
buildMeasures,
|
6595
|
-
autoDimensions_autoDimensions,
|
6596
6641
|
pivotAdapter([
|
6597
6642
|
reshapeWithEncoding
|
6598
6643
|
], [
|
@@ -6607,44 +6652,70 @@ const initPie = (spec, context)=>{
|
|
6607
6652
|
...spec
|
6608
6653
|
};
|
6609
6654
|
const { advancedVSeed } = context;
|
6610
|
-
const { datasetReshapeInfo
|
6655
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
6611
6656
|
const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
|
6657
|
+
result.type = 'pie';
|
6658
|
+
result.outerRadius = 0.8;
|
6659
|
+
result.innerRadius = 0;
|
6660
|
+
result.valueField = foldInfo.measureValue;
|
6661
|
+
result.categoryField = unfoldInfo.encodingColorId;
|
6662
|
+
result.padding = 0;
|
6663
|
+
result.region = [
|
6664
|
+
{
|
6665
|
+
clip: true
|
6666
|
+
}
|
6667
|
+
];
|
6668
|
+
result.animation = true;
|
6669
|
+
return result;
|
6670
|
+
};
|
6671
|
+
const colorPieStyleFill = (stylePipe)=>(spec, context)=>{
|
6672
|
+
const result = stylePipe(spec, context);
|
6673
|
+
const { advancedVSeed } = context;
|
6674
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
6675
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
6676
|
+
if (isLinearColor(advancedVSeed)) {
|
6677
|
+
if (result?.pie?.style) result.pie.style.fill = {
|
6678
|
+
field: unfoldInfo.encodingColor,
|
6679
|
+
scale: 'color'
|
6680
|
+
};
|
6681
|
+
}
|
6682
|
+
return result;
|
6683
|
+
};
|
6684
|
+
const pieStyle = (spec, context)=>{
|
6685
|
+
const { advancedVSeed } = context;
|
6686
|
+
const { dataset } = advancedVSeed;
|
6612
6687
|
const showStroke = dataset.length <= 30;
|
6613
|
-
result
|
6614
|
-
|
6615
|
-
|
6616
|
-
|
6617
|
-
result.categoryField = unfoldInfo.encodingColorId;
|
6618
|
-
result.padding = 0;
|
6619
|
-
result.region = [
|
6620
|
-
{
|
6621
|
-
clip: true
|
6688
|
+
const result = {
|
6689
|
+
...spec,
|
6690
|
+
pie: {
|
6691
|
+
style: {}
|
6622
6692
|
}
|
6623
|
-
|
6624
|
-
|
6625
|
-
|
6626
|
-
|
6627
|
-
|
6628
|
-
|
6629
|
-
|
6630
|
-
|
6631
|
-
|
6632
|
-
|
6693
|
+
};
|
6694
|
+
return {
|
6695
|
+
...result,
|
6696
|
+
pie: {
|
6697
|
+
style: {
|
6698
|
+
stroke: '#ffffff',
|
6699
|
+
lineWidth: showStroke ? 1 : 0
|
6700
|
+
},
|
6701
|
+
state: {
|
6702
|
+
hover: {
|
6703
|
+
outerRadius: 1.1 * result.outerRadius
|
6704
|
+
}
|
6633
6705
|
}
|
6634
6706
|
}
|
6635
6707
|
};
|
6636
|
-
result.animation = true;
|
6637
|
-
return result;
|
6638
6708
|
};
|
6639
6709
|
const pie = [
|
6640
6710
|
initPie,
|
6641
|
-
color_color,
|
6711
|
+
colorAdapter(color_color, linearColor),
|
6642
6712
|
background_backgroundColor,
|
6643
6713
|
datasetXY,
|
6644
6714
|
progressive,
|
6715
|
+
colorPieStyleFill(pieStyle),
|
6716
|
+
colorAdapter(discreteLegend, colorLegend),
|
6645
6717
|
label_label,
|
6646
6718
|
tooltip_tooltip,
|
6647
|
-
discreteLegend,
|
6648
6719
|
annotationPoint_annotationPoint,
|
6649
6720
|
annotationVerticalLine_annotationVerticalLine,
|
6650
6721
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -6657,10 +6728,11 @@ const pivotPie = [
|
|
6657
6728
|
datasetPivot,
|
6658
6729
|
pivotIndicators_pivotIndicators([
|
6659
6730
|
initPie,
|
6660
|
-
color_color,
|
6731
|
+
colorAdapter(color_color, linearColor),
|
6661
6732
|
background_backgroundColor,
|
6662
6733
|
datasetXY,
|
6663
6734
|
progressive,
|
6735
|
+
colorPieStyleFill(pieStyle),
|
6664
6736
|
label_label,
|
6665
6737
|
tooltip_tooltip,
|
6666
6738
|
annotationPoint_annotationPoint,
|
@@ -6670,7 +6742,7 @@ const pivotPie = [
|
|
6670
6742
|
]),
|
6671
6743
|
pivotRowDimensions,
|
6672
6744
|
pivotColumnDimensions,
|
6673
|
-
pivotDiscreteLegend
|
6745
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
6674
6746
|
];
|
6675
6747
|
const pieSpecPipeline = [
|
6676
6748
|
pivotAdapter_pivotAdapter(pie, pivotPie)
|
@@ -6681,8 +6753,10 @@ const registerPie = ()=>{
|
|
6681
6753
|
};
|
6682
6754
|
const donutAdvancedPipeline = [
|
6683
6755
|
initAdvancedVSeed_initAdvancedVSeed,
|
6756
|
+
defaultMeasures_defaultMeasures,
|
6757
|
+
defaultDimensions,
|
6758
|
+
defaultMeasureName,
|
6684
6759
|
buildMeasures,
|
6685
|
-
autoDimensions_autoDimensions,
|
6686
6760
|
encodingForPie,
|
6687
6761
|
pivotAdapter([
|
6688
6762
|
reshapeWithEncoding
|
@@ -6698,9 +6772,8 @@ const initDonut = (spec, context)=>{
|
|
6698
6772
|
...spec
|
6699
6773
|
};
|
6700
6774
|
const { advancedVSeed } = context;
|
6701
|
-
const { datasetReshapeInfo
|
6775
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
6702
6776
|
const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
|
6703
|
-
const showStroke = dataset.length <= 30;
|
6704
6777
|
result.type = 'pie';
|
6705
6778
|
result.outerRadius = 0.8;
|
6706
6779
|
result.innerRadius = 0.8 * result.outerRadius;
|
@@ -6712,29 +6785,19 @@ const initDonut = (spec, context)=>{
|
|
6712
6785
|
clip: true
|
6713
6786
|
}
|
6714
6787
|
];
|
6715
|
-
result.pie = {
|
6716
|
-
style: {
|
6717
|
-
stroke: '#ffffff',
|
6718
|
-
lineWidth: showStroke ? 1 : 0
|
6719
|
-
},
|
6720
|
-
state: {
|
6721
|
-
hover: {
|
6722
|
-
outerRadius: 1.1 * result.outerRadius
|
6723
|
-
}
|
6724
|
-
}
|
6725
|
-
};
|
6726
6788
|
result.animation = true;
|
6727
6789
|
return result;
|
6728
6790
|
};
|
6729
6791
|
const donut = [
|
6730
6792
|
initDonut,
|
6731
|
-
color_color,
|
6793
|
+
colorAdapter(color_color, linearColor),
|
6732
6794
|
background_backgroundColor,
|
6733
6795
|
datasetXY,
|
6734
6796
|
progressive,
|
6735
6797
|
label_label,
|
6798
|
+
colorPieStyleFill(pieStyle),
|
6799
|
+
colorAdapter(discreteLegend, colorLegend),
|
6736
6800
|
tooltip_tooltip,
|
6737
|
-
discreteLegend,
|
6738
6801
|
annotationPoint_annotationPoint,
|
6739
6802
|
annotationVerticalLine_annotationVerticalLine,
|
6740
6803
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -6747,11 +6810,12 @@ const pivotDonut = [
|
|
6747
6810
|
datasetPivot,
|
6748
6811
|
pivotIndicators_pivotIndicators([
|
6749
6812
|
initDonut,
|
6750
|
-
color_color,
|
6813
|
+
colorAdapter(color_color, linearColor),
|
6751
6814
|
background_backgroundColor,
|
6752
6815
|
datasetXY,
|
6753
6816
|
progressive,
|
6754
6817
|
label_label,
|
6818
|
+
colorPieStyleFill(pieStyle),
|
6755
6819
|
tooltip_tooltip,
|
6756
6820
|
annotationPoint_annotationPoint,
|
6757
6821
|
annotationVerticalLine_annotationVerticalLine,
|
@@ -6760,7 +6824,7 @@ const pivotDonut = [
|
|
6760
6824
|
]),
|
6761
6825
|
pivotRowDimensions,
|
6762
6826
|
pivotColumnDimensions,
|
6763
|
-
pivotDiscreteLegend
|
6827
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
6764
6828
|
];
|
6765
6829
|
const donutSpecPipeline = [
|
6766
6830
|
pivotAdapter_pivotAdapter(donut, pivotDonut)
|
@@ -6769,11 +6833,9 @@ const registerDonut = ()=>{
|
|
6769
6833
|
Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
|
6770
6834
|
Builder._specPipelineMap.donut = donutSpecPipeline;
|
6771
6835
|
};
|
6772
|
-
const encodingForRose = (advancedVSeed
|
6773
|
-
const {
|
6774
|
-
const
|
6775
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
6776
|
-
const dimensions = getBasicDimensions(vseed);
|
6836
|
+
const encodingForRose = (advancedVSeed)=>{
|
6837
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
6838
|
+
const measures = findAllMeasures(vseedMeasures);
|
6777
6839
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
6778
6840
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
6779
6841
|
const encoding = {};
|
@@ -6808,20 +6870,24 @@ const rose_generateMeasureEncoding = (measures, encoding)=>{
|
|
6808
6870
|
if (color.length > 0) encoding.color = color;
|
6809
6871
|
};
|
6810
6872
|
const rose_generateDimensionEncoding = (dimensions, encoding)=>{
|
6811
|
-
encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding
|
6873
|
+
encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
|
6812
6874
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
6813
6875
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
6814
6876
|
if (0 === encoding.angle.length) encoding.angle = [
|
6815
6877
|
dimensions[0].id
|
6816
6878
|
];
|
6817
|
-
if (0 === encoding.color.length) encoding.color =
|
6879
|
+
if (0 === encoding.color.length) encoding.color = [
|
6880
|
+
MeasureName
|
6881
|
+
];
|
6818
6882
|
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
|
6819
6883
|
};
|
6820
6884
|
const roseAdvancedPipeline = [
|
6821
6885
|
initAdvancedVSeed_initAdvancedVSeed,
|
6886
|
+
defaultMeasures_defaultMeasures,
|
6887
|
+
defaultDimensions,
|
6888
|
+
defaultMeasureName,
|
6822
6889
|
encodingForRose,
|
6823
6890
|
buildMeasures,
|
6824
|
-
autoDimensions_autoDimensions,
|
6825
6891
|
pivotAdapter([
|
6826
6892
|
reshapeWithEncoding
|
6827
6893
|
], [
|
@@ -6848,18 +6914,6 @@ const initRose = (spec, context)=>{
|
|
6848
6914
|
result.innerRadius = 0;
|
6849
6915
|
const hasNegativeValue = dataset.flat().find((d)=>d[foldInfo.measureValue] < 0);
|
6850
6916
|
if (hasNegativeValue) result.innerRadius = 0.05;
|
6851
|
-
result.rose = {
|
6852
|
-
style: {
|
6853
|
-
stroke: '#ffffff',
|
6854
|
-
lineWidth: 1
|
6855
|
-
},
|
6856
|
-
state: {
|
6857
|
-
hover: {
|
6858
|
-
lineWidth: 1,
|
6859
|
-
fillOpacity: 0.6
|
6860
|
-
}
|
6861
|
-
}
|
6862
|
-
};
|
6863
6917
|
result.region = [
|
6864
6918
|
{
|
6865
6919
|
clip: true
|
@@ -6868,7 +6922,7 @@ const initRose = (spec, context)=>{
|
|
6868
6922
|
result.animation = true;
|
6869
6923
|
return result;
|
6870
6924
|
};
|
6871
|
-
const
|
6925
|
+
const angleAxis = (spec, context)=>{
|
6872
6926
|
const result = {
|
6873
6927
|
...spec
|
6874
6928
|
};
|
@@ -6880,26 +6934,37 @@ const radiusAxis = (spec, context)=>{
|
|
6880
6934
|
const showAxis = !(is0D || is1M1D);
|
6881
6935
|
if (!result.axes) result.axes = [];
|
6882
6936
|
result.axes.push({
|
6883
|
-
orient: '
|
6937
|
+
orient: 'angle',
|
6884
6938
|
visible: showAxis,
|
6885
6939
|
zero: true,
|
6886
6940
|
nice: !!showAxis,
|
6941
|
+
paddingInner: showAxis ? [
|
6942
|
+
0.15,
|
6943
|
+
0.1
|
6944
|
+
] : [
|
6945
|
+
0,
|
6946
|
+
0
|
6947
|
+
],
|
6948
|
+
paddingOuter: showAxis ? [
|
6949
|
+
0.075,
|
6950
|
+
0.1
|
6951
|
+
] : [
|
6952
|
+
0,
|
6953
|
+
0
|
6954
|
+
],
|
6887
6955
|
grid: {
|
6888
6956
|
visible: showAxis
|
6889
6957
|
},
|
6890
|
-
|
6891
|
-
visible: showAxis
|
6892
|
-
},
|
6893
|
-
label: {
|
6958
|
+
domainLine: {
|
6894
6959
|
visible: showAxis
|
6895
6960
|
},
|
6896
|
-
|
6961
|
+
tick: {
|
6897
6962
|
visible: showAxis
|
6898
6963
|
}
|
6899
6964
|
});
|
6900
6965
|
return result;
|
6901
6966
|
};
|
6902
|
-
const
|
6967
|
+
const radiusAxis = (spec, context)=>{
|
6903
6968
|
const result = {
|
6904
6969
|
...spec
|
6905
6970
|
};
|
@@ -6911,50 +6976,79 @@ const angleAxis = (spec, context)=>{
|
|
6911
6976
|
const showAxis = !(is0D || is1M1D);
|
6912
6977
|
if (!result.axes) result.axes = [];
|
6913
6978
|
result.axes.push({
|
6914
|
-
orient: '
|
6979
|
+
orient: 'radius',
|
6915
6980
|
visible: showAxis,
|
6916
6981
|
zero: true,
|
6917
6982
|
nice: !!showAxis,
|
6918
|
-
paddingInner: showAxis ? [
|
6919
|
-
0.15,
|
6920
|
-
0.1
|
6921
|
-
] : [
|
6922
|
-
0,
|
6923
|
-
0
|
6924
|
-
],
|
6925
|
-
paddingOuter: showAxis ? [
|
6926
|
-
0.075,
|
6927
|
-
0.1
|
6928
|
-
] : [
|
6929
|
-
0,
|
6930
|
-
0
|
6931
|
-
],
|
6932
6983
|
grid: {
|
6933
6984
|
visible: showAxis
|
6934
6985
|
},
|
6935
|
-
|
6986
|
+
tick: {
|
6936
6987
|
visible: showAxis
|
6937
6988
|
},
|
6938
|
-
|
6989
|
+
label: {
|
6990
|
+
visible: showAxis
|
6991
|
+
},
|
6992
|
+
domainLine: {
|
6939
6993
|
visible: showAxis
|
6940
6994
|
}
|
6941
6995
|
});
|
6942
6996
|
return result;
|
6943
6997
|
};
|
6998
|
+
const colorRoseStyleFill = (stylePipe)=>(spec, context)=>{
|
6999
|
+
const result = stylePipe(spec, context);
|
7000
|
+
const { advancedVSeed } = context;
|
7001
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
7002
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
7003
|
+
if (isLinearColor(advancedVSeed)) {
|
7004
|
+
if (result?.rose?.style) result.rose.style.fill = {
|
7005
|
+
field: unfoldInfo.encodingColor,
|
7006
|
+
scale: 'color'
|
7007
|
+
};
|
7008
|
+
}
|
7009
|
+
return result;
|
7010
|
+
};
|
7011
|
+
const roseStyle = (spec, context)=>{
|
7012
|
+
const { advancedVSeed } = context;
|
7013
|
+
const { dataset } = advancedVSeed;
|
7014
|
+
const showStroke = dataset.length <= 30;
|
7015
|
+
const result = {
|
7016
|
+
...spec,
|
7017
|
+
rose: {
|
7018
|
+
style: {}
|
7019
|
+
}
|
7020
|
+
};
|
7021
|
+
return {
|
7022
|
+
...result,
|
7023
|
+
rose: {
|
7024
|
+
style: {
|
7025
|
+
stroke: '#ffffff',
|
7026
|
+
lineWidth: showStroke ? 1 : 0
|
7027
|
+
},
|
7028
|
+
state: {
|
7029
|
+
hover: {
|
7030
|
+
lineWidth: 1,
|
7031
|
+
fillOpacity: 0.6
|
7032
|
+
}
|
7033
|
+
}
|
7034
|
+
}
|
7035
|
+
};
|
7036
|
+
};
|
6944
7037
|
const rose = [
|
6945
7038
|
initRose,
|
6946
7039
|
stackCornerRadius_stackCornerRadius,
|
6947
7040
|
stackInverse,
|
6948
|
-
color_color,
|
7041
|
+
colorAdapter(color_color, linearColor),
|
6949
7042
|
background_backgroundColor,
|
6950
7043
|
datasetXY,
|
6951
7044
|
progressive,
|
6952
|
-
radiusAxis,
|
6953
7045
|
angleAxis,
|
6954
|
-
|
6955
|
-
tooltip_tooltip,
|
7046
|
+
radiusAxis,
|
6956
7047
|
verticalCrosshairRect,
|
6957
|
-
|
7048
|
+
colorRoseStyleFill(roseStyle),
|
7049
|
+
colorAdapter(discreteLegend, colorLegend),
|
7050
|
+
label_label,
|
7051
|
+
tooltip_tooltip
|
6958
7052
|
];
|
6959
7053
|
const pivotRose = [
|
6960
7054
|
initPivot,
|
@@ -6965,19 +7059,20 @@ const pivotRose = [
|
|
6965
7059
|
initRose,
|
6966
7060
|
stackCornerRadius_stackCornerRadius,
|
6967
7061
|
stackInverse,
|
6968
|
-
color_color,
|
7062
|
+
colorAdapter(color_color, linearColor),
|
6969
7063
|
background_backgroundColor,
|
6970
7064
|
datasetXY,
|
6971
7065
|
progressive,
|
6972
7066
|
radiusAxis,
|
6973
7067
|
angleAxis,
|
7068
|
+
verticalCrosshairRect,
|
7069
|
+
colorRoseStyleFill(roseStyle),
|
6974
7070
|
label_label,
|
6975
|
-
tooltip_tooltip
|
6976
|
-
verticalCrosshairRect
|
7071
|
+
tooltip_tooltip
|
6977
7072
|
]),
|
6978
7073
|
pivotRowDimensions,
|
6979
7074
|
pivotColumnDimensions,
|
6980
|
-
pivotDiscreteLegend
|
7075
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
6981
7076
|
];
|
6982
7077
|
const roseSpecPipeline = [
|
6983
7078
|
pivotAdapter_pivotAdapter(rose, pivotRose)
|
@@ -6988,9 +7083,11 @@ const registerRose = ()=>{
|
|
6988
7083
|
};
|
6989
7084
|
const roseParallelAdvancedPipeline = [
|
6990
7085
|
initAdvancedVSeed_initAdvancedVSeed,
|
7086
|
+
defaultMeasures_defaultMeasures,
|
7087
|
+
defaultDimensions,
|
7088
|
+
defaultMeasureName,
|
6991
7089
|
encodingForRose,
|
6992
7090
|
buildMeasures,
|
6993
|
-
autoDimensions_autoDimensions,
|
6994
7091
|
pivotAdapter([
|
6995
7092
|
reshapeWithEncoding
|
6996
7093
|
], [
|
@@ -7046,15 +7143,16 @@ const initRoseParallel = (spec, context)=>{
|
|
7046
7143
|
const roseParallel = [
|
7047
7144
|
initRoseParallel,
|
7048
7145
|
stackCornerRadius_stackCornerRadius,
|
7049
|
-
color_color,
|
7146
|
+
colorAdapter(color_color, linearColor),
|
7050
7147
|
background_backgroundColor,
|
7051
7148
|
datasetXY,
|
7052
7149
|
progressive,
|
7053
7150
|
radiusAxis,
|
7054
7151
|
angleAxis,
|
7152
|
+
colorRoseStyleFill(roseStyle),
|
7153
|
+
colorAdapter(discreteLegend, colorLegend),
|
7055
7154
|
label_label,
|
7056
7155
|
tooltip_tooltip,
|
7057
|
-
discreteLegend,
|
7058
7156
|
verticalCrosshairRect,
|
7059
7157
|
annotationPoint_annotationPoint,
|
7060
7158
|
annotationVerticalLine_annotationVerticalLine,
|
@@ -7069,15 +7167,16 @@ const pivotRoseParallel = [
|
|
7069
7167
|
pivotIndicators_pivotIndicators([
|
7070
7168
|
initRoseParallel,
|
7071
7169
|
stackCornerRadius_stackCornerRadius,
|
7072
|
-
color_color,
|
7170
|
+
colorAdapter(color_color, linearColor),
|
7073
7171
|
background_backgroundColor,
|
7074
7172
|
datasetXY,
|
7075
7173
|
progressive,
|
7076
7174
|
radiusAxis,
|
7077
7175
|
angleAxis,
|
7176
|
+
verticalCrosshairRect,
|
7177
|
+
colorRoseStyleFill(roseStyle),
|
7078
7178
|
label_label,
|
7079
7179
|
tooltip_tooltip,
|
7080
|
-
verticalCrosshairRect,
|
7081
7180
|
annotationPoint_annotationPoint,
|
7082
7181
|
annotationVerticalLine_annotationVerticalLine,
|
7083
7182
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -7085,7 +7184,7 @@ const pivotRoseParallel = [
|
|
7085
7184
|
]),
|
7086
7185
|
pivotRowDimensions,
|
7087
7186
|
pivotColumnDimensions,
|
7088
|
-
pivotDiscreteLegend
|
7187
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
7089
7188
|
];
|
7090
7189
|
const roseParallelSpecPipeline = [
|
7091
7190
|
pivotAdapter_pivotAdapter(roseParallel, pivotRoseParallel)
|
@@ -7094,11 +7193,9 @@ const registerRoseParallel = ()=>{
|
|
7094
7193
|
Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
|
7095
7194
|
Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
|
7096
7195
|
};
|
7097
|
-
const encodingForRadar = (advancedVSeed
|
7098
|
-
const {
|
7099
|
-
const
|
7100
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
7101
|
-
const dimensions = getBasicDimensions(vseed);
|
7196
|
+
const encodingForRadar = (advancedVSeed)=>{
|
7197
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
7198
|
+
const measures = findAllMeasures(vseedMeasures);
|
7102
7199
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
7103
7200
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
7104
7201
|
const encoding = {};
|
@@ -7116,12 +7213,11 @@ const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
|
|
7116
7213
|
encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
|
7117
7214
|
};
|
7118
7215
|
const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
|
7119
|
-
const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
|
7120
7216
|
const uniqueDimIds = unique(dimensions.map((d)=>d.id));
|
7121
7217
|
encoding.angle = uniqueDimIds.slice(0, 1);
|
7122
|
-
encoding.color = uniqueDimIds.slice(
|
7123
|
-
encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
|
7218
|
+
encoding.color = uniqueDimIds.slice(1);
|
7124
7219
|
encoding.tooltip = uniqueDimIds;
|
7220
|
+
encoding.detail = [];
|
7125
7221
|
encoding.label = [];
|
7126
7222
|
encoding.row = [];
|
7127
7223
|
encoding.column = [];
|
@@ -7133,20 +7229,23 @@ const radar_generateMeasureEncoding = (measures, encoding)=>{
|
|
7133
7229
|
if (color.length > 0) encoding.color = color;
|
7134
7230
|
};
|
7135
7231
|
const radar_generateDimensionEncoding = (dimensions, encoding)=>{
|
7136
|
-
encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding
|
7232
|
+
encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
|
7137
7233
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7138
|
-
encoding.detail =
|
7234
|
+
encoding.detail = [];
|
7139
7235
|
if (0 === encoding.angle.length) encoding.angle = [
|
7140
7236
|
dimensions[0].id
|
7141
7237
|
];
|
7142
|
-
if (0 === encoding.color.length) encoding.color =
|
7143
|
-
|
7238
|
+
if (0 === encoding.color.length) encoding.color = [
|
7239
|
+
MeasureName
|
7240
|
+
];
|
7144
7241
|
};
|
7145
7242
|
const radarAdvancedPipeline = [
|
7146
7243
|
initAdvancedVSeed_initAdvancedVSeed,
|
7244
|
+
defaultMeasures_defaultMeasures,
|
7245
|
+
defaultDimensions,
|
7246
|
+
defaultMeasureName,
|
7147
7247
|
encodingForRadar,
|
7148
7248
|
buildMeasures,
|
7149
|
-
autoDimensions_autoDimensions,
|
7150
7249
|
pivotAdapter([
|
7151
7250
|
reshapeWithEncoding
|
7152
7251
|
], [
|
@@ -7280,11 +7379,9 @@ const registerRadar = ()=>{
|
|
7280
7379
|
Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
|
7281
7380
|
Builder._specPipelineMap.radar = radarSpecPipeline;
|
7282
7381
|
};
|
7283
|
-
const encodingForFunnel = (advancedVSeed
|
7284
|
-
const {
|
7285
|
-
const
|
7286
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
7287
|
-
const dimensions = getBasicDimensions(vseed);
|
7382
|
+
const encodingForFunnel = (advancedVSeed)=>{
|
7383
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
7384
|
+
const measures = findAllMeasures(vseedMeasures);
|
7288
7385
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
7289
7386
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
7290
7387
|
const encoding = {};
|
@@ -7319,14 +7416,18 @@ const funnel_generateMeasureEncoding = (measures, encoding)=>{
|
|
7319
7416
|
const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
|
7320
7417
|
encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
|
7321
7418
|
encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
|
7322
|
-
if (0 === encoding.color.length) encoding.color =
|
7419
|
+
if (0 === encoding.color.length) encoding.color = [
|
7420
|
+
MeasureName
|
7421
|
+
];
|
7323
7422
|
if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
|
7324
7423
|
};
|
7325
7424
|
const funnelAdvancedPipeline = [
|
7326
7425
|
initAdvancedVSeed_initAdvancedVSeed,
|
7426
|
+
defaultMeasures_defaultMeasures,
|
7427
|
+
defaultDimensions,
|
7428
|
+
defaultMeasureName,
|
7327
7429
|
encodingForFunnel,
|
7328
7430
|
buildMeasures,
|
7329
|
-
autoDimensions_autoDimensions,
|
7330
7431
|
pivotAdapter([
|
7331
7432
|
reshapeWithEncoding
|
7332
7433
|
], [
|
@@ -7356,34 +7457,55 @@ const initFunnel = (spec, context)=>{
|
|
7356
7457
|
clip: true
|
7357
7458
|
}
|
7358
7459
|
];
|
7359
|
-
result.funnel = {
|
7360
|
-
style: {
|
7361
|
-
cornerRadius: 4,
|
7362
|
-
fill: {
|
7363
|
-
field: unfoldInfo.encodingColorId,
|
7364
|
-
scale: 'color'
|
7365
|
-
}
|
7366
|
-
},
|
7367
|
-
state: {
|
7368
|
-
hover: {
|
7369
|
-
fillOpacity: 0.6
|
7370
|
-
}
|
7371
|
-
}
|
7372
|
-
};
|
7373
7460
|
result.transformLabel = {
|
7374
7461
|
visible: true
|
7375
7462
|
};
|
7376
7463
|
result.animation = true;
|
7377
7464
|
return result;
|
7378
7465
|
};
|
7466
|
+
const colorFunnelStyleFill = (stylePipe)=>(spec, context)=>{
|
7467
|
+
const result = stylePipe(spec, context);
|
7468
|
+
const { advancedVSeed } = context;
|
7469
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
7470
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
7471
|
+
if (isLinearColor(advancedVSeed)) {
|
7472
|
+
if (result?.funnel?.style) result.funnel.style.fill = {
|
7473
|
+
field: unfoldInfo.encodingColor,
|
7474
|
+
scale: 'color'
|
7475
|
+
};
|
7476
|
+
}
|
7477
|
+
return result;
|
7478
|
+
};
|
7479
|
+
const funnelStyle = (spec)=>{
|
7480
|
+
const result = {
|
7481
|
+
...spec,
|
7482
|
+
funnel: {
|
7483
|
+
style: {}
|
7484
|
+
}
|
7485
|
+
};
|
7486
|
+
return {
|
7487
|
+
...result,
|
7488
|
+
funnel: {
|
7489
|
+
style: {
|
7490
|
+
cornerRadius: 4
|
7491
|
+
},
|
7492
|
+
state: {
|
7493
|
+
hover: {
|
7494
|
+
fillOpacity: 0.6
|
7495
|
+
}
|
7496
|
+
}
|
7497
|
+
}
|
7498
|
+
};
|
7499
|
+
};
|
7379
7500
|
const funnel = [
|
7380
7501
|
initFunnel,
|
7381
7502
|
background_backgroundColor,
|
7382
7503
|
datasetXY,
|
7383
|
-
color_color,
|
7504
|
+
colorAdapter(color_color, linearColor),
|
7384
7505
|
label_label,
|
7506
|
+
colorAdapter(discreteLegend, colorLegend),
|
7507
|
+
colorFunnelStyleFill(funnelStyle),
|
7385
7508
|
tooltip_tooltip,
|
7386
|
-
discreteLegend,
|
7387
7509
|
annotationPoint_annotationPoint,
|
7388
7510
|
annotationVerticalLine_annotationVerticalLine,
|
7389
7511
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -7398,17 +7520,18 @@ const pivotFunnel = [
|
|
7398
7520
|
initFunnel,
|
7399
7521
|
background_backgroundColor,
|
7400
7522
|
datasetXY,
|
7401
|
-
color_color,
|
7523
|
+
colorAdapter(color_color, linearColor),
|
7402
7524
|
label_label,
|
7403
7525
|
tooltip_tooltip,
|
7404
|
-
|
7526
|
+
colorFunnelStyleFill(funnelStyle),
|
7405
7527
|
annotationPoint_annotationPoint,
|
7406
7528
|
annotationVerticalLine_annotationVerticalLine,
|
7407
7529
|
annotationHorizontalLine_annotationHorizontalLine,
|
7408
7530
|
annotationArea_annotationArea
|
7409
7531
|
]),
|
7410
7532
|
pivotRowDimensions,
|
7411
|
-
pivotColumnDimensions
|
7533
|
+
pivotColumnDimensions,
|
7534
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
7412
7535
|
];
|
7413
7536
|
const funnelSpecPipeline = [
|
7414
7537
|
pivotAdapter_pivotAdapter(funnel, pivotFunnel)
|
@@ -7417,11 +7540,9 @@ const registerFunnel = ()=>{
|
|
7417
7540
|
Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
|
7418
7541
|
Builder._specPipelineMap.funnel = funnelSpecPipeline;
|
7419
7542
|
};
|
7420
|
-
const encodingForHeatmap = (advancedVSeed
|
7421
|
-
const {
|
7422
|
-
const
|
7423
|
-
const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
|
7424
|
-
const dimensions = getBasicDimensions(vseed);
|
7543
|
+
const encodingForHeatmap = (advancedVSeed)=>{
|
7544
|
+
const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
|
7545
|
+
const measures = findAllMeasures(vseedMeasures);
|
7425
7546
|
const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
|
7426
7547
|
const hasMeasureEncoding = measures.some((item)=>item.encoding);
|
7427
7548
|
const encoding = {};
|
@@ -7466,14 +7587,18 @@ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
|
|
7466
7587
|
];
|
7467
7588
|
if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
|
7468
7589
|
else encoding.y = dimensions.slice(0).map((item)=>item.id);
|
7469
|
-
if (0 === encoding.color.length) encoding.color =
|
7590
|
+
if (0 === encoding.color.length) encoding.color = [
|
7591
|
+
MeasureName
|
7592
|
+
];
|
7470
7593
|
if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
|
7471
7594
|
};
|
7472
7595
|
const heatmapAdvancedPipeline = [
|
7473
7596
|
initAdvancedVSeed_initAdvancedVSeed,
|
7597
|
+
defaultMeasures_defaultMeasures,
|
7598
|
+
defaultDimensions,
|
7599
|
+
defaultMeasureName,
|
7474
7600
|
encodingForHeatmap,
|
7475
7601
|
buildMeasures,
|
7476
|
-
autoDimensions_autoDimensions,
|
7477
7602
|
pivotAdapter([
|
7478
7603
|
reshapeWithEncoding
|
7479
7604
|
], [
|
@@ -7495,6 +7620,37 @@ const labelColorInversion = (spec)=>{
|
|
7495
7620
|
};
|
7496
7621
|
return result;
|
7497
7622
|
};
|
7623
|
+
const colorCellStyleFill = (stylePipe)=>(spec, context)=>{
|
7624
|
+
const result = stylePipe(spec, context);
|
7625
|
+
const { advancedVSeed } = context;
|
7626
|
+
const { datasetReshapeInfo } = advancedVSeed;
|
7627
|
+
const { unfoldInfo } = datasetReshapeInfo[0];
|
7628
|
+
if (isLinearColor(advancedVSeed)) {
|
7629
|
+
if (result?.cell?.style) result.cell.style.fill = {
|
7630
|
+
field: unfoldInfo.encodingColor,
|
7631
|
+
scale: 'color'
|
7632
|
+
};
|
7633
|
+
}
|
7634
|
+
return result;
|
7635
|
+
};
|
7636
|
+
const cellStyle = (spec)=>{
|
7637
|
+
const result = {
|
7638
|
+
...spec,
|
7639
|
+
cell: {
|
7640
|
+
style: {}
|
7641
|
+
}
|
7642
|
+
};
|
7643
|
+
return {
|
7644
|
+
...result,
|
7645
|
+
cell: {
|
7646
|
+
style: {
|
7647
|
+
shape: 'rect',
|
7648
|
+
stroke: '#ffffff',
|
7649
|
+
lineWidth: 1
|
7650
|
+
}
|
7651
|
+
}
|
7652
|
+
};
|
7653
|
+
};
|
7498
7654
|
const initHeatmap = (spec, context)=>{
|
7499
7655
|
const result = {
|
7500
7656
|
...spec
|
@@ -7509,13 +7665,6 @@ const initHeatmap = (spec, context)=>{
|
|
7509
7665
|
result.seriesField = unfoldInfo.encodingColorId;
|
7510
7666
|
result.valueField = foldInfo.measureValue;
|
7511
7667
|
result.padding = 0;
|
7512
|
-
result.cell = {
|
7513
|
-
style: {
|
7514
|
-
shape: 'rect',
|
7515
|
-
stroke: '#ffffff',
|
7516
|
-
lineWidth: 1
|
7517
|
-
}
|
7518
|
-
};
|
7519
7668
|
result.axes = [
|
7520
7669
|
{
|
7521
7670
|
type: 'band',
|
@@ -7540,14 +7689,12 @@ const heatmap = [
|
|
7540
7689
|
initHeatmap,
|
7541
7690
|
background_backgroundColor,
|
7542
7691
|
datasetXY,
|
7543
|
-
color_color,
|
7692
|
+
colorAdapter(color_color, linearColor),
|
7544
7693
|
label_label,
|
7545
7694
|
labelColorInversion,
|
7546
|
-
discreteLegend,
|
7695
|
+
colorAdapter(discreteLegend, colorLegend),
|
7696
|
+
colorCellStyleFill(cellStyle),
|
7547
7697
|
tooltip_tooltip,
|
7548
|
-
pointStyle_pointStyle,
|
7549
|
-
pointStateDimensionHover,
|
7550
|
-
lineStyle_lineStyle,
|
7551
7698
|
annotationPoint_annotationPoint,
|
7552
7699
|
annotationVerticalLine_annotationVerticalLine,
|
7553
7700
|
annotationHorizontalLine_annotationHorizontalLine,
|
@@ -7562,21 +7709,20 @@ const pivotHeatmap = [
|
|
7562
7709
|
initHeatmap,
|
7563
7710
|
background_backgroundColor,
|
7564
7711
|
datasetXY,
|
7565
|
-
color_color,
|
7712
|
+
colorAdapter(color_color, linearColor),
|
7566
7713
|
label_label,
|
7567
7714
|
labelColorInversion,
|
7568
7715
|
discreteLegend,
|
7569
7716
|
tooltip_tooltip,
|
7570
|
-
|
7571
|
-
pointStateDimensionHover,
|
7572
|
-
lineStyle_lineStyle,
|
7717
|
+
colorCellStyleFill(cellStyle),
|
7573
7718
|
annotationPoint_annotationPoint,
|
7574
7719
|
annotationVerticalLine_annotationVerticalLine,
|
7575
7720
|
annotationHorizontalLine_annotationHorizontalLine,
|
7576
7721
|
annotationArea_annotationArea
|
7577
7722
|
]),
|
7578
7723
|
pivotRowDimensions,
|
7579
|
-
pivotColumnDimensions
|
7724
|
+
pivotColumnDimensions,
|
7725
|
+
colorAdapter(pivotDiscreteLegend, pivotColorLegend)
|
7580
7726
|
];
|
7581
7727
|
const heatmapSpecPipeline = [
|
7582
7728
|
pivotAdapter_pivotAdapter(heatmap, pivotHeatmap)
|
@@ -8360,7 +8506,9 @@ const zMeasure = z.object({
|
|
8360
8506
|
'size',
|
8361
8507
|
'color',
|
8362
8508
|
'label',
|
8363
|
-
'tooltip'
|
8509
|
+
'tooltip',
|
8510
|
+
'detail',
|
8511
|
+
'column'
|
8364
8512
|
]).optional(),
|
8365
8513
|
parentId: z.string().optional()
|
8366
8514
|
});
|