@antv/g2plot
Version:
An interactive and responsive charting library
174 lines • 6.09 kB
JavaScript
import { __assign } from "tslib";
import { get, isFunction } from '@antv/util';
import { animation, interaction, scale, theme, tooltip } from '../../adaptor/common';
import { interval, point } from '../../adaptor/geometries';
import { deepAssign, flow, transformLabel } from '../../utils';
import { transformData } from './utils';
/**
* geometry 处理
* @param params
*/
function geometry(params) {
var chart = params.chart, options = params.options;
var bulletStyle = options.bulletStyle, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField, color = options.color, layout = options.layout, size = options.size, label = options.label;
// 处理数据
var _a = transformData(options), min = _a.min, max = _a.max, ds = _a.ds;
chart.data(ds);
// rangeGeometry
var r = deepAssign({}, params, {
options: {
xField: xField,
yField: rangeField,
seriesField: 'rKey',
isStack: true,
label: get(label, 'range'),
interval: {
color: get(color, 'range'),
style: get(bulletStyle, 'range'),
size: get(size, 'range'),
},
},
});
interval(r);
// 范围值的 tooltip 隐藏掉
chart.geometries[0].tooltip(false);
// measureGeometry
var m = deepAssign({}, params, {
options: {
xField: xField,
yField: measureField,
seriesField: 'mKey',
isStack: true,
label: get(label, 'measure'),
interval: {
color: get(color, 'measure'),
style: get(bulletStyle, 'measure'),
size: get(size, 'measure'),
},
},
});
interval(m);
// targetGeometry
var t = deepAssign({}, params, {
options: {
xField: xField,
yField: targetField,
seriesField: 'tKey',
label: get(label, 'target'),
point: {
color: get(color, 'target'),
style: get(bulletStyle, 'target'),
size: isFunction(get(size, 'target'))
? function (data) { return get(size, 'target')(data) / 2; }
: get(size, 'target') / 2,
shape: layout === 'horizontal' ? 'line' : 'hyphen',
},
},
});
point(t);
// 水平的时候,要转换坐标轴
if (layout === 'horizontal') {
chart.coordinate().transpose();
}
return __assign(__assign({}, params), { ext: { data: { min: min, max: max } } });
}
/**
* meta 配置
* @param params
*/
export function meta(params) {
var _a, _b;
var options = params.options, ext = params.ext;
var xAxis = options.xAxis, yAxis = options.yAxis, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField;
var extData = ext.data;
return flow(scale((_a = {},
_a[xField] = xAxis,
_a[measureField] = yAxis,
_a), (_b = {},
_b[measureField] = { min: extData === null || extData === void 0 ? void 0 : extData.min, max: extData === null || extData === void 0 ? void 0 : extData.max, sync: true },
_b[targetField] = {
sync: "".concat(measureField),
},
_b[rangeField] = {
sync: "".concat(measureField),
},
_b)))(params);
}
/**
* axis 配置
* @param params
*/
function axis(params) {
var chart = params.chart, options = params.options;
var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField;
chart.axis("".concat(rangeField), false);
chart.axis("".concat(targetField), false);
// 为 false 则是不显示轴
if (xAxis === false) {
chart.axis("".concat(xField), false);
}
else {
chart.axis("".concat(xField), xAxis);
}
if (yAxis === false) {
chart.axis("".concat(measureField), false);
}
else {
chart.axis("".concat(measureField), yAxis);
}
return params;
}
/**
* legend 配置
* @param params
*/
function legend(params) {
var chart = params.chart, options = params.options;
var legend = options.legend;
chart.removeInteraction('legend-filter');
// @TODO 后续看是否内部自定义一个 legend
chart.legend(legend);
// 默认关闭掉所在 color 字段的 legend, 从而不影响自定义的legend
chart.legend('rKey', false);
chart.legend('mKey', false);
chart.legend('tKey', false);
return params;
}
/**
* label 配置
* @param params
*/
function label(params) {
var chart = params.chart, options = params.options;
var label = options.label, measureField = options.measureField, targetField = options.targetField, rangeField = options.rangeField;
var _a = chart.geometries, rangeGeometry = _a[0], measureGeometry = _a[1], targetGeometry = _a[2];
if (get(label, 'range')) {
rangeGeometry.label("".concat(rangeField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.range)));
}
else {
rangeGeometry.label(false);
}
if (get(label, 'measure')) {
measureGeometry.label("".concat(measureField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.measure)));
}
else {
measureGeometry.label(false);
}
if (get(label, 'target')) {
targetGeometry.label("".concat(targetField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.target)));
}
else {
targetGeometry.label(false);
}
return params;
}
/**
* 子弹图适配器
* @param chart
* @param options
*/
export function adaptor(params) {
// flow 的方式处理所有的配置到 G2 API
flow(geometry, meta, axis, legend, theme, label, tooltip, interaction, animation)(params);
}
//# sourceMappingURL=adaptor.js.map