198 lines
6.7 KiB
JavaScript
198 lines
6.7 KiB
JavaScript
|
|
/*
|
|
* 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; |