UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

221 lines (220 loc) 8.11 kB
import { __extends } from "../../../../tslib/tslib.es6.mjs"; import { extend, retrieve3 } from "../../../../zrender/lib/core/util.mjs"; import { setStatesStylesFromModel, toggleHoverEmphasis } from "../../util/states.mjs"; import ChartView from "../../view/Chart.mjs"; import pieLabelLayout from "./labelLayout.mjs"; import { setLabelLineStyle, getLabelLineStatesModels } from "../../label/labelGuideHelper.mjs"; import { setLabelStyle, getLabelStatesModels } from "../../label/labelStyle.mjs"; import { getSectorCornerRadius } from "../helper/pieHelper.mjs"; import { initProps, updateProps, saveOldStyle, removeElementWithFadeOut } from "../../animation/basicTransition.mjs"; import { getBasicPieLayout } from "./pieLayout.mjs"; import ZRText from "../../../../zrender/lib/graphic/Text.mjs"; import Polyline from "../../../../zrender/lib/graphic/shape/Polyline.mjs"; import Sector from "../../../../zrender/lib/graphic/shape/Sector.mjs"; var PiePiece = function(_super) { __extends(PiePiece2, _super); function PiePiece2(data, idx, startAngle) { var _this = _super.call(this) || this; _this.z2 = 2; var text = new ZRText(); _this.setTextContent(text); _this.updateData(data, idx, startAngle, true); return _this; } PiePiece2.prototype.updateData = function(data, idx, startAngle, firstCreate) { var sector = this; var seriesModel = data.hostModel; var itemModel = data.getItemModel(idx); var emphasisModel = itemModel.getModel("emphasis"); var layout = data.getItemLayout(idx); var sectorShape = extend(getSectorCornerRadius(itemModel.getModel("itemStyle"), layout, true), layout); if (isNaN(sectorShape.startAngle)) { sector.setShape(sectorShape); return; } if (firstCreate) { sector.setShape(sectorShape); var animationType = seriesModel.getShallow("animationType"); if (seriesModel.ecModel.ssr) { initProps(sector, { scaleX: 0, scaleY: 0 }, seriesModel, { dataIndex: idx, isFrom: true }); sector.originX = sectorShape.cx; sector.originY = sectorShape.cy; } else if (animationType === "scale") { sector.shape.r = layout.r0; initProps(sector, { shape: { r: layout.r } }, seriesModel, idx); } else { if (startAngle != null) { sector.setShape({ startAngle, endAngle: startAngle }); initProps(sector, { shape: { startAngle: layout.startAngle, endAngle: layout.endAngle } }, seriesModel, idx); } else { sector.shape.endAngle = layout.startAngle; updateProps(sector, { shape: { endAngle: layout.endAngle } }, seriesModel, idx); } } } else { saveOldStyle(sector); updateProps(sector, { shape: sectorShape }, seriesModel, idx); } sector.useStyle(data.getItemVisual(idx, "style")); setStatesStylesFromModel(sector, itemModel); var midAngle = (layout.startAngle + layout.endAngle) / 2; var offset = seriesModel.get("selectedOffset"); var dx = Math.cos(midAngle) * offset; var dy = Math.sin(midAngle) * offset; var cursorStyle = itemModel.getShallow("cursor"); cursorStyle && sector.attr("cursor", cursorStyle); this._updateLabel(seriesModel, data, idx); sector.ensureState("emphasis").shape = extend({ r: layout.r + (emphasisModel.get("scale") ? emphasisModel.get("scaleSize") || 0 : 0) }, getSectorCornerRadius(emphasisModel.getModel("itemStyle"), layout)); extend(sector.ensureState("select"), { x: dx, y: dy, shape: getSectorCornerRadius(itemModel.getModel(["select", "itemStyle"]), layout) }); extend(sector.ensureState("blur"), { shape: getSectorCornerRadius(itemModel.getModel(["blur", "itemStyle"]), layout) }); var labelLine = sector.getTextGuideLine(); var labelText = sector.getTextContent(); labelLine && extend(labelLine.ensureState("select"), { x: dx, y: dy }); extend(labelText.ensureState("select"), { x: dx, y: dy }); toggleHoverEmphasis(this, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }; PiePiece2.prototype._updateLabel = function(seriesModel, data, idx) { var sector = this; var itemModel = data.getItemModel(idx); var labelLineModel = itemModel.getModel("labelLine"); var style = data.getItemVisual(idx, "style"); var visualColor = style && style.fill; var visualOpacity = style && style.opacity; setLabelStyle(sector, getLabelStatesModels(itemModel), { labelFetcher: data.hostModel, labelDataIndex: idx, inheritColor: visualColor, defaultOpacity: visualOpacity, defaultText: seriesModel.getFormattedLabel(idx, "normal") || data.getName(idx) }); var labelText = sector.getTextContent(); sector.setTextConfig({ position: null, rotation: null }); labelText.attr({ z2: 10 }); var labelPosition = seriesModel.get(["label", "position"]); if (labelPosition !== "outside" && labelPosition !== "outer") { sector.removeTextGuideLine(); } else { var polyline = this.getTextGuideLine(); if (!polyline) { polyline = new Polyline(); this.setTextGuideLine(polyline); } setLabelLineStyle(this, getLabelLineStatesModels(itemModel), { stroke: visualColor, opacity: retrieve3(labelLineModel.get(["lineStyle", "opacity"]), visualOpacity, 1) }); } }; return PiePiece2; }(Sector); var PieView = function(_super) { __extends(PieView2, _super); function PieView2() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.ignoreLabelLineUpdate = true; return _this; } PieView2.prototype.render = function(seriesModel, ecModel, api, payload) { var data = seriesModel.getData(); var oldData = this._data; var group = this.group; var startAngle; if (!oldData && data.count() > 0) { var shape = data.getItemLayout(0); for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) { shape = data.getItemLayout(s); } if (shape) { startAngle = shape.startAngle; } } if (this._emptyCircleSector) { group.remove(this._emptyCircleSector); } if (data.count() === 0 && seriesModel.get("showEmptyCircle")) { var sector = new Sector({ shape: getBasicPieLayout(seriesModel, api) }); sector.useStyle(seriesModel.getModel("emptyCircleStyle").getItemStyle()); this._emptyCircleSector = sector; group.add(sector); } data.diff(oldData).add(function(idx) { var piePiece = new PiePiece(data, idx, startAngle); data.setItemGraphicEl(idx, piePiece); group.add(piePiece); }).update(function(newIdx, oldIdx) { var piePiece = oldData.getItemGraphicEl(oldIdx); piePiece.updateData(data, newIdx, startAngle); piePiece.off("click"); group.add(piePiece); data.setItemGraphicEl(newIdx, piePiece); }).remove(function(idx) { var piePiece = oldData.getItemGraphicEl(idx); removeElementWithFadeOut(piePiece, seriesModel, idx); }).execute(); pieLabelLayout(seriesModel); if (seriesModel.get("animationTypeUpdate") !== "expansion") { this._data = data; } }; PieView2.prototype.dispose = function() { }; PieView2.prototype.containPoint = function(point, seriesModel) { var data = seriesModel.getData(); var itemLayout = data.getItemLayout(0); if (itemLayout) { var dx = point[0] - itemLayout.cx; var dy = point[1] - itemLayout.cy; var radius = Math.sqrt(dx * dx + dy * dy); return radius <= itemLayout.r && radius >= itemLayout.r0; } }; PieView2.type = "pie"; return PieView2; }(ChartView); var PieView$1 = PieView; export { PieView$1 as default };