cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
183 lines (182 loc) • 7.29 kB
JavaScript
import { __extends } from "../../../../tslib/tslib.es6.mjs";
import { extend, each, isNumber } from "../../../../zrender/lib/core/util.mjs";
import { SPECIAL_STATES, toggleHoverEmphasis, DISPLAY_STATES } from "../../util/states.mjs";
import { createTextStyle } from "../../label/labelStyle.mjs";
import { getECData } from "../../util/innerStore.mjs";
import { getSectorCornerRadius } from "../helper/pieHelper.mjs";
import { createOrUpdatePatternFromDecal } from "../../util/decal.mjs";
import { updateProps, saveOldStyle } from "../../animation/basicTransition.mjs";
import ZRText from "../../../../zrender/lib/graphic/Text.mjs";
import Sector from "../../../../zrender/lib/graphic/shape/Sector.mjs";
var DEFAULT_SECTOR_Z = 2;
var DEFAULT_TEXT_Z = 4;
var SunburstPiece = function(_super) {
__extends(SunburstPiece2, _super);
function SunburstPiece2(node, seriesModel, ecModel, api) {
var _this = _super.call(this) || this;
_this.z2 = DEFAULT_SECTOR_Z;
_this.textConfig = {
inside: true
};
getECData(_this).seriesIndex = seriesModel.seriesIndex;
var text = new ZRText({
z2: DEFAULT_TEXT_Z,
silent: node.getModel().get(["label", "silent"])
});
_this.setTextContent(text);
_this.updateData(true, node, seriesModel, ecModel, api);
return _this;
}
SunburstPiece2.prototype.updateData = function(firstCreate, node, seriesModel, ecModel, api) {
this.node = node;
node.piece = this;
seriesModel = seriesModel || this._seriesModel;
ecModel = ecModel || this._ecModel;
var sector = this;
getECData(sector).dataIndex = node.dataIndex;
var itemModel = node.getModel();
var emphasisModel = itemModel.getModel("emphasis");
var layout = node.getLayout();
var sectorShape = extend({}, layout);
sectorShape.label = null;
var normalStyle = node.getVisual("style");
normalStyle.lineJoin = "bevel";
var decal = node.getVisual("decal");
if (decal) {
normalStyle.decal = createOrUpdatePatternFromDecal(decal, api);
}
var cornerRadius = getSectorCornerRadius(itemModel.getModel("itemStyle"), sectorShape, true);
extend(sectorShape, cornerRadius);
each(SPECIAL_STATES, function(stateName) {
var state = sector.ensureState(stateName);
var itemStyleModel = itemModel.getModel([stateName, "itemStyle"]);
state.style = itemStyleModel.getItemStyle();
var cornerRadius2 = getSectorCornerRadius(itemStyleModel, sectorShape);
if (cornerRadius2) {
state.shape = cornerRadius2;
}
});
if (firstCreate) {
sector.setShape(sectorShape);
sector.shape.r = layout.r0;
updateProps(sector, {
shape: {
r: layout.r
}
}, seriesModel, node.dataIndex);
} else {
updateProps(sector, {
shape: sectorShape
}, seriesModel);
saveOldStyle(sector);
}
sector.useStyle(normalStyle);
this._updateLabel(seriesModel);
var cursorStyle = itemModel.getShallow("cursor");
cursorStyle && sector.attr("cursor", cursorStyle);
this._seriesModel = seriesModel || this._seriesModel;
this._ecModel = ecModel || this._ecModel;
var focus = emphasisModel.get("focus");
var focusOrIndices = focus === "ancestor" ? node.getAncestorsIndices() : focus === "descendant" ? node.getDescendantIndices() : focus;
toggleHoverEmphasis(this, focusOrIndices, emphasisModel.get("blurScope"), emphasisModel.get("disabled"));
};
SunburstPiece2.prototype._updateLabel = function(seriesModel) {
var _this = this;
var itemModel = this.node.getModel();
var normalLabelModel = itemModel.getModel("label");
var layout = this.node.getLayout();
var angle = layout.endAngle - layout.startAngle;
var midAngle = (layout.startAngle + layout.endAngle) / 2;
var dx = Math.cos(midAngle);
var dy = Math.sin(midAngle);
var sector = this;
var label = sector.getTextContent();
var dataIndex = this.node.dataIndex;
var labelMinAngle = normalLabelModel.get("minAngle") / 180 * Math.PI;
var isNormalShown = normalLabelModel.get("show") && !(labelMinAngle != null && Math.abs(angle) < labelMinAngle);
label.ignore = !isNormalShown;
each(DISPLAY_STATES, function(stateName) {
var labelStateModel = stateName === "normal" ? itemModel.getModel("label") : itemModel.getModel([stateName, "label"]);
var isNormal = stateName === "normal";
var state = isNormal ? label : label.ensureState(stateName);
var text = seriesModel.getFormattedLabel(dataIndex, stateName);
if (isNormal) {
text = text || _this.node.name;
}
state.style = createTextStyle(labelStateModel, {}, null, stateName !== "normal", true);
if (text) {
state.style.text = text;
}
var isShown = labelStateModel.get("show");
if (isShown != null && !isNormal) {
state.ignore = !isShown;
}
var labelPosition = getLabelAttr(labelStateModel, "position");
var sectorState = isNormal ? sector : sector.states[stateName];
var labelColor = sectorState.style.fill;
sectorState.textConfig = {
outsideFill: labelStateModel.get("color") === "inherit" ? labelColor : null,
inside: labelPosition !== "outside"
};
var r;
var labelPadding = getLabelAttr(labelStateModel, "distance") || 0;
var textAlign = getLabelAttr(labelStateModel, "align");
if (labelPosition === "outside") {
r = layout.r + labelPadding;
textAlign = midAngle > Math.PI / 2 ? "right" : "left";
} else {
if (!textAlign || textAlign === "center") {
if (angle === 2 * Math.PI && layout.r0 === 0) {
r = 0;
} else {
r = (layout.r + layout.r0) / 2;
}
textAlign = "center";
} else if (textAlign === "left") {
r = layout.r0 + labelPadding;
if (midAngle > Math.PI / 2) {
textAlign = "right";
}
} else if (textAlign === "right") {
r = layout.r - labelPadding;
if (midAngle > Math.PI / 2) {
textAlign = "left";
}
}
}
state.style.align = textAlign;
state.style.verticalAlign = getLabelAttr(labelStateModel, "verticalAlign") || "middle";
state.x = r * dx + layout.cx;
state.y = r * dy + layout.cy;
var rotateType = getLabelAttr(labelStateModel, "rotate");
var rotate = 0;
if (rotateType === "radial") {
rotate = -midAngle;
if (rotate < -Math.PI / 2) {
rotate += Math.PI;
}
} else if (rotateType === "tangential") {
rotate = Math.PI / 2 - midAngle;
if (rotate > Math.PI / 2) {
rotate -= Math.PI;
} else if (rotate < -Math.PI / 2) {
rotate += Math.PI;
}
} else if (isNumber(rotateType)) {
rotate = rotateType * Math.PI / 180;
}
state.rotation = rotate;
});
function getLabelAttr(model, name) {
var stateAttr = model.get(name);
if (stateAttr == null) {
return normalLabelModel.get(name);
}
return stateAttr;
}
label.dirtyStyle();
};
return SunburstPiece2;
}(Sector);
var SunburstPiece$1 = SunburstPiece;
export { SunburstPiece$1 as default };