Source: src/controllers/VisualisationManager.js

/**
 * @class
 * @classdesc container class for the visualisations
 * @memberof Managers
 */
class VisualizationManager {
  /**
   * Singleton instance
   */
  static instance;

  /**
   * Private constructor to enforce singleton pattern
   * @private
   * @returns {VisualizationManager}
   */
  constructor() {
    if (!VisualizationManager.instance) {
      VisualizationManager.instance = this;
    }
    return VisualizationManager.instance;
  }

  /**
   * Array to store available visualizations
   * @type {Visualization[]}
   */
  visuals = [];

  /**
   * currently selected vis. set to null until vis loaded in
   * @type {Visualization|null}
   */
  selectedVisual = null;

  /**
   * add a new visualisation to the array
   * @param {Visualization} vis
   */
  add(vis) {
    this.visuals.push(vis);
    //if selectedVisual is null set the new visual as the
    //current visualiation
    if (this.selectedVisual == null) {
      this.selectVisual(vis.name);
    }
  }

  /**
   * select a visualisation using it name property
   * @param {string} visName
   */
  selectVisual(visName) {
    for (var i = 0; i < this.visuals.length; i++) {
      if (visName == this.visuals[i].name) {
        this.selectedVisual = this.visuals[i];
      }
    }
  }
}

/**
 * Create a single instance of the Visualizations
 * @type {VisualizationManager}
 */
const visualManager = new VisualizationManager();
export default visualManager;