Modifying series/indicator settings modal

This tutorial will show how we can modify items listed in a settings modal that opens when you click series/indicator gear icon in its legend.

Setting up an event

To modify the list of settings, we will use SettingsModal event: initstarted. It kicks in when settings modal is invoked, just before its contents are generated.

stockChart.getPrivate("settingsModal").events.on("initstarted", function(ev) {
  // Do our stuff here
});
stockChart.getPrivate("settingsModal").events.on("initstarted", function(ev) {
  // Do our stuff here
});

The event object contains most of the stuff that we need:

  • settings - a list of settings items that we can modify.
  • settingsTarget - a series or an indicator that settings modal is being opened for.

Identifying the target

The event will kick in for all targets. Unless we want to add a super universal setting that applies to all types of series and indicators, we will need to constrain our code to specific type of target:

stockChart.getPrivate("settingsModal").events.on("initstarted", function(ev) {
  if (ev.settingsTarget.isType("LineSeries")) {
    // Only show for LineSeries
  }
});
stockChart.getPrivate("settingsModal").events.on("initstarted", function(ev) {
  if (ev.settingsTarget.isType("LineSeries")) {
    // Only show for LineSeries
  }
});

The above will ensure that we're adding a custom setting for LineSeries only, ignoring all the rest.

Adding settings

Now, to add a setting we will need to push an object into settings array of the event object.

stockChart.getPrivate("settingsModal").events.on("initstarted", function(ev) {
  if (ev.settingsTarget.isType("LineSeries")) {
    let series = ev.settingsTarget;
    ev.settings.push({
      key: "fillOpacity",
      name: "Fill opacity",
      type: "dropdown",
      options: ["0", "0.5", "1"],
      currentValue: series.fills.template.get("fillOpacity", 0),
      target: series.fills.template,
      invalidateTarget: series
    });
  }
});
stockChart.getPrivate("settingsModal").events.on("initstarted", function(ev) {
  if (ev.settingsTarget.isType("LineSeries")) {
    var series = ev.settingsTarget;
    ev.settings.push({
      key: "fillOpacity",
      name: "Fill opacity",
      type: "dropdown",
      options: ["0", "0.5", "1"],
      currentValue: series.fills.template.get("fillOpacity", 0),
      target: series.fills.template,
      invalidateTarget: series
    });
  }
});

The settings object can have the following items:

KeyComment
keyThe setting key to be set.
nameLabel to be displayed next to the setting.
typeAvailable options: "text", "checkbox", "color", "number", "dropdown".
optionsAn array of options in case type: "dropdown"
currentValueCurrent value.
targetThe target the new value will bet set on.
invalidateTargetA target that needs to be invalidated after change, in case it should be different than the target.

Example

See the Pen Stock Chart by amCharts team (@amcharts) on CodePen.