@antv/g2plot
Version:
An interactive and responsive charting library
187 lines • 5.45 kB
JavaScript
import { __spreadArray } from "tslib";
import { each, isNil, isObject } from '@antv/util';
import { AXIS_META_CONFIG_KEYS } from '../constant';
import { addViewAnimation, deepAssign, pick } from '../utils';
/**
* 通用 legend 配置, 适用于带 colorField 或 seriesField 的图表
* @param params
*/
export function legend(params) {
var chart = params.chart, options = params.options;
var legend = options.legend, colorField = options.colorField, seriesField = options.seriesField;
if (legend === false) {
chart.legend(false);
}
else if (colorField || seriesField) {
chart.legend(colorField || seriesField, legend);
}
return params;
}
/**
* 通用 tooltip 配置
* @param params
*/
export function tooltip(params) {
var chart = params.chart, options = params.options;
var tooltip = options.tooltip;
if (tooltip !== undefined) {
chart.tooltip(tooltip);
}
return params;
}
/**
* Interaction 配置
* @param params
*/
export function interaction(params) {
var chart = params.chart, options = params.options;
var interactions = options.interactions;
each(interactions, function (i) {
if (i.enable === false) {
chart.removeInteraction(i.type);
}
else {
chart.interaction(i.type, i.cfg || {});
}
});
return params;
}
/**
* 动画
* @param params
*/
export function animation(params) {
var chart = params.chart, options = params.options;
var animation = options.animation;
// 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)
addViewAnimation(chart, animation);
return params;
}
/**
* 设置全局主题配置
* @param params
*/
export function theme(params) {
var chart = params.chart, options = params.options;
var theme = options.theme;
// 存在主题才设置主题
if (theme) {
chart.theme(theme);
}
return params;
}
/**
* 状态 state 配置
* @param params
*/
export function state(params) {
var chart = params.chart, options = params.options;
var state = options.state;
if (state) {
each(chart.geometries, function (geometry) {
geometry.state(state);
});
}
return params;
}
/**
* 处理缩略轴的 adaptor
* @param params
*/
export function slider(params) {
var chart = params.chart, options = params.options;
var slider = options.slider;
chart.option('slider', slider);
return params;
}
/**
* 处理缩略轴的 adaptor
* @param params
*/
export function scrollbar(params) {
var chart = params.chart, options = params.options;
var scrollbar = options.scrollbar;
chart.option('scrollbar', scrollbar);
return params;
}
/**
* scale 的 adaptor
* @param axes
*/
export function scale(axes, meta) {
return function (params) {
var chart = params.chart, options = params.options;
// 1. 轴配置中的 scale 信息
var scales = {};
each(axes, function (axis, field) {
scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);
});
// 2. meta 直接是 scale 的信息
scales = deepAssign({}, meta, options.meta, scales);
chart.scale(scales);
return params;
};
}
/**
* annotation 配置
* @param params
*/
export function annotation(annotationOptions) {
return function (params) {
var chart = params.chart, options = params.options;
var annotationController = chart.getController('annotation');
/** 自定义 annotation */
each(__spreadArray(__spreadArray([], (options.annotations || []), true), (annotationOptions || []), true), function (annotationOption) {
// @ts-ignore
annotationController.annotation(annotationOption);
});
return params;
};
}
/**
* 自动设置 limitInPlot
* @param params
*/
export function limitInPlot(params) {
var chart = params.chart, options = params.options;
var yAxis = options.yAxis, limitInPlot = options.limitInPlot;
var value = limitInPlot;
// 用户没有设置 limitInPlot,则自动根据 yAxis 是否有 min/max 来设置 limitInPlot
if (isObject(yAxis) && isNil(limitInPlot)) {
if (Object.values(pick(yAxis, ['min', 'max', 'minLimit', 'maxLimit'])).some(function (value) { return !isNil(value); })) {
value = true;
}
else {
value = false;
}
}
chart.limitInPlot = value;
return params;
}
/**
* 坐标系转换
*/
export function transformations(coordinateType) {
if (coordinateType === void 0) { coordinateType = 'rect'; }
return function (params) {
var chart = params.chart, options = params.options;
var coordinate = options.coordinate;
var actions = Array.from(coordinate || [])
.map(function (cfg) {
if (cfg.type === 'reflectX')
return ['reflect', 'x'];
if (cfg.type === 'reflectY')
return ['reflect', 'y'];
if (cfg.type === 'transpose')
return ['transpose'];
return null;
})
.filter(function (d) { return !!d; });
if (actions.length !== 0) {
chart.coordinate({ type: coordinateType, actions: actions });
}
return params;
};
}
export { pattern } from './pattern';
//# sourceMappingURL=common.js.map