@antv/g2plot
Version:
An interactive and responsive charting library
64 lines • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.conversionTagComponent = exports.transformData = exports.CONVERSION_TAG_NAME = void 0;
var tslib_1 = require("tslib");
var util_1 = require("@antv/util");
var constant_1 = require("../constant");
exports.CONVERSION_TAG_NAME = 'CONVERSION_TAG_NAME';
/**
* 漏斗图 transform
* @param geometry
*/
function transformData(data, originData, options) {
var formatData = [];
var yField = options.yField, maxSize = options.maxSize, minSize = options.minSize;
var maxYFieldValue = (0, util_1.get)((0, util_1.maxBy)(originData, yField), [yField]);
var max = (0, util_1.isNumber)(maxSize) ? maxSize : 1;
var min = (0, util_1.isNumber)(minSize) ? minSize : 0;
// format 数据
formatData = (0, util_1.map)(data, function (row, index) {
var percent = (row[yField] || 0) / maxYFieldValue;
row[constant_1.FUNNEL_PERCENT] = percent;
row[constant_1.FUNNEL_MAPPING_VALUE] = (max - min) * percent + min;
// 转化率数据存储前后数据
row[constant_1.FUNNEL_CONVERSATION] = [(0, util_1.get)(data, [index - 1, yField]), row[yField]];
return row;
});
return formatData;
}
exports.transformData = transformData;
/**
* 漏斗图通用转化率组件
* @param getLineCoordinate 用于获取特定的 line 的位置及配置
*/
function conversionTagComponent(getLineCoordinate) {
return function (params) {
var chart = params.chart, options = params.options;
// @ts-ignore
var conversionTag = options.conversionTag, filteredData = options.filteredData;
var data = filteredData || chart.getOptions().data;
if (conversionTag) {
var formatter_1 = conversionTag.formatter;
data.forEach(function (obj, index) {
if (index <= 0 || Number.isNaN(obj[constant_1.FUNNEL_MAPPING_VALUE]))
return;
var lineOption = getLineCoordinate(obj, index, data, {
top: true,
name: exports.CONVERSION_TAG_NAME,
text: {
content: (0, util_1.isFunction)(formatter_1) ? formatter_1(obj, data) : formatter_1,
offsetX: conversionTag.offsetX,
offsetY: conversionTag.offsetY,
position: 'end',
autoRotate: false,
style: tslib_1.__assign({ textAlign: 'start', textBaseline: 'middle' }, conversionTag.style),
},
});
chart.annotation().line(lineOption);
});
}
return params;
};
}
exports.conversionTagComponent = conversionTagComponent;
//# sourceMappingURL=common.js.map