/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { __extends } from "tslib"; import * as graphic from '../../util/graphic.js'; import { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js'; import ChartView from '../../view/Chart.js'; import { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper.js'; import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js'; import { saveOldStyle } from '../../animation/basicTransition.js'; var opacityAccessPath = ['itemStyle', 'opacity']; /** * Piece of pie including Sector, Label, LabelLine */ var FunnelPiece = /** @class */function (_super) { __extends(FunnelPiece, _super); function FunnelPiece(data, idx) { var _this = _super.call(this) || this; var polygon = _this; var labelLine = new graphic.Polyline(); var text = new graphic.Text(); polygon.setTextContent(text); _this.setTextGuideLine(labelLine); _this.updateData(data, idx, true); return _this; } FunnelPiece.prototype.updateData = function (data, idx, firstCreate) { var polygon = this; var seriesModel = data.hostModel; var itemModel = data.getItemModel(idx); var layout = data.getItemLayout(idx); var emphasisModel = itemModel.getModel('emphasis'); var opacity = itemModel.get(opacityAccessPath); opacity = opacity == null ? 1 : opacity; if (!firstCreate) { saveOldStyle(polygon); } // Update common style polygon.useStyle(data.getItemVisual(idx, 'style')); polygon.style.lineJoin = 'round'; if (firstCreate) { polygon.setShape({ points: layout.points }); polygon.style.opacity = 0; graphic.initProps(polygon, { style: { opacity: opacity } }, seriesModel, idx); } else { graphic.updateProps(polygon, { style: { opacity: opacity }, shape: { points: layout.points } }, seriesModel, idx); } setStatesStylesFromModel(polygon, itemModel); this._updateLabel(data, idx); toggleHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled')); }; FunnelPiece.prototype._updateLabel = function (data, idx) { var polygon = this; var labelLine = this.getTextGuideLine(); var labelText = polygon.getTextContent(); var seriesModel = data.hostModel; var itemModel = data.getItemModel(idx); var layout = data.getItemLayout(idx); var labelLayout = layout.label; var style = data.getItemVisual(idx, 'style'); var visualColor = style.fill; setLabelStyle( // position will not be used in setLabelStyle labelText, getLabelStatesModels(itemModel), { labelFetcher: data.hostModel, labelDataIndex: idx, defaultOpacity: style.opacity, defaultText: data.getName(idx) }, { normal: { align: labelLayout.textAlign, verticalAlign: labelLayout.verticalAlign } }); polygon.setTextConfig({ local: true, inside: !!labelLayout.inside, insideStroke: visualColor, // insideFill: 'auto', outsideFill: visualColor }); var linePoints = labelLayout.linePoints; labelLine.setShape({ points: linePoints }); polygon.textGuideLineConfig = { anchor: linePoints ? new graphic.Point(linePoints[0][0], linePoints[0][1]) : null }; // Make sure update style on labelText after setLabelStyle. // Because setLabelStyle will replace a new style on it. graphic.updateProps(labelText, { style: { x: labelLayout.x, y: labelLayout.y } }, seriesModel, idx); labelText.attr({ rotation: labelLayout.rotation, originX: labelLayout.x, originY: labelLayout.y, z2: 10 }); setLabelLineStyle(polygon, getLabelLineStatesModels(itemModel), { // Default use item visual color stroke: visualColor }); }; return FunnelPiece; }(graphic.Polygon); var FunnelView = /** @class */function (_super) { __extends(FunnelView, _super); function FunnelView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = FunnelView.type; _this.ignoreLabelLineUpdate = true; return _this; } FunnelView.prototype.render = function (seriesModel, ecModel, api) { var data = seriesModel.getData(); var oldData = this._data; var group = this.group; data.diff(oldData).add(function (idx) { var funnelPiece = new FunnelPiece(data, idx); data.setItemGraphicEl(idx, funnelPiece); group.add(funnelPiece); }).update(function (newIdx, oldIdx) { var piece = oldData.getItemGraphicEl(oldIdx); piece.updateData(data, newIdx); group.add(piece); data.setItemGraphicEl(newIdx, piece); }).remove(function (idx) { var piece = oldData.getItemGraphicEl(idx); graphic.removeElementWithFadeOut(piece, seriesModel, idx); }).execute(); this._data = data; }; FunnelView.prototype.remove = function () { this.group.removeAll(); this._data = null; }; FunnelView.prototype.dispose = function () {}; FunnelView.type = 'funnel'; return FunnelView; }(ChartView); export default FunnelView;