@antv/g2plot
Version:
G2 Plot, a market of plots built with the Grammar of Graphics'
192 lines • 6.89 kB
JavaScript
import { __assign, __extends } from "tslib";
import * as _ from '@antv/util';
import { registerPlotType } from '../../base/global';
import ViewLayer from '../../base/view-layer';
import { getComponent } from '../../components/factory';
import { getGeom } from '../../geoms/factory';
import SpiderLabel from './component/label/spider-label';
import './component/label/outer-label';
import './component/label/inner-label';
import './component/label/outer-center-label';
import * as EventParser from './event';
import './theme';
var G2_GEOM_MAP = {
pie: 'interval',
};
var PLOT_GEOM_MAP = {
pie: 'column',
};
var PieLayer = /** @class */ (function (_super) {
__extends(PieLayer, _super);
function PieLayer() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = 'pie';
return _this;
}
PieLayer.getDefaultOptions = function () {
return _.deepMix({}, _super.getDefaultOptions.call(this), {
width: 400,
height: 400,
title: {
visible: false,
},
description: {
visible: false,
},
forceFit: true,
padding: 'auto',
radius: 0.8,
label: {
visible: true,
type: 'inner',
autoRotate: false,
allowOverlap: false,
line: {
smooth: true,
},
},
legend: {
visible: true,
position: 'right-center',
},
tooltip: {
visible: true,
shared: false,
crosshairs: null,
},
pieStyle: {
stroke: 'white',
lineWidth: 1,
},
});
};
PieLayer.prototype.getOptions = function (props) {
// @ts-ignore
var defaultOptions = this.constructor.getDefaultOptions();
var options = _.deepMix({}, _super.prototype.getOptions.call(this, props), defaultOptions, props);
options.label = this.adjustLabelDefaultOptions(options);
return options;
};
PieLayer.prototype.afterInit = function () {
_super.prototype.afterInit.call(this);
var props = this.options;
/** 蜘蛛布局label */
if (props.label && props.label.visible) {
var labelConfig = props.label;
if (labelConfig.type === 'spider') {
var spiderLabel = new SpiderLabel({
view: this.view,
fields: props.colorField ? [props.angleField, props.colorField] : [props.angleField],
style: labelConfig.style ? labelConfig.style : {},
formatter: props.label.formatter ? props.label.formatter : false,
offsetX: props.label.offsetX,
offsetY: props.label.offsetY,
});
this.spiderLabel = spiderLabel;
}
}
};
PieLayer.prototype.geometryParser = function (dim, type) {
if (dim === 'g2') {
return G2_GEOM_MAP[type];
}
return PLOT_GEOM_MAP[type];
};
PieLayer.prototype.scale = function () {
var props = this.options;
var scales = {};
scales[props.angleField] = {};
scales[props.colorField] = { type: 'cat' };
this.setConfig('scales', scales);
};
PieLayer.prototype.processData = function (data) {
var key = this.options.angleField;
return data.map(function (item) {
var _a;
return (__assign(__assign({}, item), (_a = {}, _a[key] = typeof item[key] === 'string' ? Number.parseFloat(item[key]) : item[key], _a)));
});
};
PieLayer.prototype.axis = function () { };
PieLayer.prototype.coord = function () {
var props = this.options;
var coordConfig = {
type: 'theta',
cfg: {
radius: props.radius,
// @ts-ignore 业务定制,不开放配置
innerRadius: props.innerRadius || 0,
},
};
this.setConfig('coord', coordConfig);
};
PieLayer.prototype.addGeometry = function () {
var props = this.options;
var pie = getGeom('interval', 'main', {
plot: this,
positionFields: [props.angleField],
});
pie.adjust = [{ type: 'stack' }];
this.pie = pie;
if (props.label) {
this.label();
}
this.setConfig('element', pie);
};
PieLayer.prototype.animation = function () {
_super.prototype.animation.call(this);
var props = this.options;
if (props.animation === false) {
/** 关闭动画 */
this.pie.animate = false;
}
};
PieLayer.prototype.annotation = function () { };
PieLayer.prototype.parseEvents = function (eventParser) {
_super.prototype.parseEvents.call(this, EventParser);
};
PieLayer.prototype.label = function () {
var props = this.options;
var labelConfig = __assign({}, props.label);
if (!this.showLabel()) {
this.pie.label = false;
return;
}
if (labelConfig.type === 'inner') {
// @ts-ignore
labelConfig.labelLine = false;
}
else {
// @ts-ignore
labelConfig.labelLine = true;
}
// 此处做个 hack 操作, 防止g2 controller层找不到未注册的inner,outter,和spider Label
var labelType = labelConfig.type;
if (['spider'].indexOf(labelType) !== -1) {
labelType = null;
}
this.pie.label = getComponent('label', __assign({ plot: this, labelType: labelType, fields: props.colorField ? [props.angleField, props.colorField] : [props.angleField] }, labelConfig));
};
PieLayer.prototype.showLabel = function () {
var props = this.options;
return props.label && props.label.visible === true && props.label.type !== 'spider';
};
/** 调整 label 默认 options */
PieLayer.prototype.adjustLabelDefaultOptions = function (options) {
var labelConfig = __assign({}, options.label);
if (labelConfig && labelConfig.type === 'inner') {
var labelStyleConfig = (labelConfig.style || {});
if (!labelStyleConfig.textAlign) {
labelStyleConfig.textAlign = 'center';
}
labelConfig.style = labelStyleConfig;
if (!labelConfig.offset) {
labelConfig.offset = (-1 / 3) * 100 + "%";
}
}
return labelConfig;
};
return PieLayer;
}(ViewLayer));
export default PieLayer;
registerPlotType('pie', PieLayer);
//# sourceMappingURL=layer.js.map