@visactor/vmind
Version:
<div align="center"> <a href="https://github.com/VisActor#gh-light-mode-only" target="_blank"> <img alt="VisActor Logo" width="200" src="https://github.com/VisActor/.github/blob/main/profile/logo_500_200_light.svg"/> </a> <a href="https://githu
115 lines (111 loc) • 5.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.BaseStatistics = void 0;
const vutils_1 = require("@visactor/vutils"), types_1 = require("../../../../types"), type_1 = require("../../type"), utils_1 = require("../../utils"), getMinMaxAvg = data => {
const min = {
index: -1,
value: 1 / 0
}, max = {
index: -1,
value: -1 / 0
};
let sum = 0, validCount = 0;
return data.forEach(((value, index) => {
(0, vutils_1.isValidNumber)(value) && (sum += value, validCount++, value < min.value && (min.index = index,
min.value = value), value > max.value && (max.index = index, max.value = value));
})), {
min: min,
max: max,
avg: sum / validCount
};
}, getBaseInsightByDataset = context => {
const {xField: xField, measureId: measureId, dataset: dataset, isStack: isStack, dimensionValues: dimensionValues, dimensionStackSumMap: dimensionStackSumMap, axisTitle: axisTitle = [], isAxesArea: isAxesArea = !1, axesDirection: axesDirection, seriesId: seriesId, seriesIndex: seriesIndex} = context, dataList = dataset.map(((d, index) => ({
index: index,
dataItem: d
}))), result = [], yField = (0, vutils_1.isArray)(measureId) ? measureId[0] : measureId, valueList = isStack ? dimensionStackSumMap[yField] : dataList.map((d => Number(d.dataItem[yField]))), {min: min, max: max, avg: avg} = getMinMaxAvg(valueList), titleName = ((0,
vutils_1.isArray)(axisTitle) ? null == axisTitle ? void 0 : axisTitle[0] : axisTitle) || "";
return -1 !== min.index && result.push({
name: "min",
type: type_1.InsightType.Min,
fieldId: yField,
value: min.value,
significant: 1,
data: isStack ? dataList.filter((d => d.dataItem[xField] === dimensionValues[min.index])) : [ {
index: min.index,
dataItem: dataList[min.index].dataItem
} ],
info: {
seriesId: seriesId,
seriesIndex: seriesIndex,
isAxesArea: isAxesArea,
titleName: titleName,
isGroup: isStack,
dimValue: isStack ? dimensionValues[min.index] : dataList[min.index].dataItem[xField]
}
}), -1 !== max.index && result.push({
name: "max",
type: type_1.InsightType.Max,
fieldId: yField,
value: max.value,
significant: 1,
data: isStack ? dataList.filter((d => d.dataItem[xField] === dimensionValues[max.index])) : [ {
index: max.index,
dataItem: dataList[max.index].dataItem
} ],
info: {
isAxesArea: isAxesArea,
titleName: titleName,
seriesId: seriesId,
seriesIndex: seriesIndex,
isGroup: isStack,
dimValue: isStack ? dimensionValues[max.index] : dataList[max.index].dataItem[xField]
}
}), (0, vutils_1.isValidNumber)(avg) && result.push({
name: "avg",
type: type_1.InsightType.Avg,
fieldId: yField,
value: avg,
significant: 1,
data: [],
info: {
seriesId: seriesId,
seriesIndex: seriesIndex,
isAxesArea: isAxesArea,
titleName: titleName,
axesDirection: axesDirection
}
}), result;
}, BaseStatisticsFunction = (context, options) => {
const result = [], {spec: spec, chartType: chartType, cell: cell, leftAxesDataList: leftAxesDataList, rightAxesDataList: rightAxesDataList} = context, {y: celly, x: cellx} = cell, xField = (0,
vutils_1.isArray)(cellx) ? cellx[0] : cellx, yField = (0, vutils_1.isArray)(celly) ? celly[0] : celly, baseInfo = Object.assign(Object.assign({}, context), {
xField: xField,
measureId: yField
});
return leftAxesDataList && result.push(...getBaseInsightByDataset(Object.assign(Object.assign(Object.assign({}, baseInfo), leftAxesDataList), {
isAxesArea: !0,
measureId: null == leftAxesDataList ? void 0 : leftAxesDataList.yField,
axisTitle: leftAxesDataList.axisTitle || (null == options ? void 0 : options.defaultLeftAxisName),
isStack: (0, utils_1.isStackChartInAxes)(leftAxesDataList.series, chartType),
axesDirection: "left"
}))), rightAxesDataList && result.push(...getBaseInsightByDataset(Object.assign(Object.assign(Object.assign({}, baseInfo), rightAxesDataList), {
isAxesArea: !0,
measureId: null == rightAxesDataList ? void 0 : rightAxesDataList.yField,
axisTitle: rightAxesDataList.axisTitle || (null == options ? void 0 : options.defaultRightAxisName),
isStack: (0, utils_1.isStackChartInAxes)(rightAxesDataList.series, chartType),
axesDirection: "right"
}))), !leftAxesDataList && !rightAxesDataList && result.push(...getBaseInsightByDataset(Object.assign(Object.assign({}, baseInfo), {
axisTitle: "",
seriesId: "",
seriesIndex: null,
isStack: (0, utils_1.isStackChart)(spec, chartType, cell)
}))), result;
};
exports.BaseStatistics = {
name: "base",
forceChartType: [ types_1.ChartType.DualAxisChart, types_1.ChartType.LineChart, types_1.ChartType.BarChart, types_1.ChartType.AreaChart ],
insightType: type_1.InsightType.Min,
supportPercent: !1,
algorithmFunction: BaseStatisticsFunction
};
//# sourceMappingURL=baseStatistics.js.map