Models/MapInteractionMode.js

"use strict";

/*global require*/
var defaultValue = require("terriajs-cesium/Source/Core/defaultValue").default;
var knockout = require("terriajs-cesium/Source/ThirdParty/knockout").default;

/**
 * A mode for interacting with the map.
 *
 * @alias MapInteractionMode
 * @constructor
 *
 * @param {Object} [options] Object with the following properties:
 * @param {Function} [options.onCancel] The function to invoke if the user cancels the interaction mode.  The cancel button will
 *                                      only appear if this property is specified.
 * @param {String} [options.message] The message to display over the map while the interaction mode is active.
 **/
function MapInteractionMode(options) {
  /**
   * Gets or sets a callback that is invoked when the user cancels the interaction mode.  If this property is undefined,
   * the interaction mode cannot be canceled.
   * @type {Function}
   */
  this.onCancel = options.onCancel;

  /**
   * Gets or sets the details of a custom user interface for this map interaction mode. This property is not used by
   * the `MapInteractionMode` itself, so it can be anything that is suitable for the user interface. In the standard
   * React-based user interface included with TerriaJS, this property is a function that is called with no parameters
   * and is expected to return a React component.
   * @type {Any}
   */
  this.customUi = defaultValue(options.customUi, undefined);

  /**
   * Gets or sets the html formatted message displayed on the map when in this mode.
   * @type {Function}
   */
  this.message = function() {
    return options.message;
  };

  /**
   * Set the text of the button for the dialog the message is displayed on.
   * @type {String}
   */
  this.buttonText = defaultValue(options.buttonText, "Cancel");

  /**
   * Gets or sets the features that are currently picked.
   * @type {PickedFeatures}
   */
  this.pickedFeatures = undefined;

  /**
   * Determines whether a rectangle will be requested from the user rather than a set of pickedFeatures.
   * @type {Boolean}
   */
  this.drawRectangle = defaultValue(options.drawRectangle, false);

  knockout.track(this, ["message", "pickedFeatures", "customUi"]);
}

module.exports = MapInteractionMode;