cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
221 lines (220 loc) • 8.11 kB
JavaScript
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 };