UNPKG

@antv/g2plot

Version:

G2 Plot, a market of plots built with the Grammar of Graphics'

192 lines 6.89 kB
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