in src/component/toolbox/ToolboxView.ts [91:163]
function processFeature(newIndex: number, oldIndex?: number) {
const featureName = featureNames[newIndex];
const oldName = featureNames[oldIndex];
const featureOpt = featureOpts[featureName];
const featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel) as ToolboxFeatureModel;
let feature: ToolboxFeature | UserDefinedToolboxFeature;
// FIX#11236, merge feature title from MagicType newOption. TODO: consider seriesIndex ?
if (payload && payload.newTitle != null && payload.featureName === featureName) {
featureOpt.title = payload.newTitle;
}
if (featureName && !oldName) { // Create
if (isUserFeatureName(featureName)) {
feature = {
onclick: featureModel.option.onclick,
featureName: featureName
} as UserDefinedToolboxFeature;
}
else {
const Feature = getFeature(featureName);
if (!Feature) {
return;
}
feature = new Feature();
}
features[featureName] = feature;
}
else {
feature = features[oldName];
// If feature does not exist.
if (!feature) {
return;
}
}
feature.uid = getUID('toolbox-feature');
feature.model = featureModel;
feature.ecModel = ecModel;
feature.api = api;
const isToolboxFeature = feature instanceof ToolboxFeature;
if (!featureName && oldName) {
isToolboxFeature
&& (feature as ToolboxFeature).dispose
&& (feature as ToolboxFeature).dispose(ecModel, api);
return;
}
if (!featureModel.get('show') || (isToolboxFeature && (feature as ToolboxFeature).unusable)) {
isToolboxFeature
&& (feature as ToolboxFeature).remove
&& (feature as ToolboxFeature).remove(ecModel, api);
return;
}
createIconPaths(featureModel, feature, featureName);
featureModel.setIconStatus = function (this: ToolboxFeatureModel, iconName: string, status: DisplayState) {
const option = this.option;
const iconPaths = this.iconPaths;
option.iconStatus = option.iconStatus || {};
option.iconStatus[iconName] = status;
if (iconPaths[iconName]) {
(status === 'emphasis' ? enterEmphasis : leaveEmphasis)(iconPaths[iconName]);
}
};
if (feature instanceof ToolboxFeature) {
if (feature.render) {
feature.render(featureModel, ecModel, api, payload);
}
}
}