| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | import defaultValue from "../Core/defaultValue.js";import defined from "../Core/defined.js";import DeveloperError from "../Core/DeveloperError.js";import Event from "../Core/Event.js";import knockout from "../ThirdParty/knockout.js";/** * Create a Command from a given function, for use with ViewModels. * * A Command is a function with an extra <code>canExecute</code> observable property to determine * whether the command can be executed.  When executed, a Command function will check the * value of <code>canExecute</code> and throw if false.  It also provides events for when * a command has been or is about to be executed. * * @function * * @param {Function} func The function to execute. * @param {Boolean} [canExecute=true] A boolean indicating whether the function can currently be executed. */function createCommand(func, canExecute) {  //>>includeStart('debug', pragmas.debug);  if (!defined(func)) {    throw new DeveloperError("func is required.");  }  //>>includeEnd('debug');  canExecute = defaultValue(canExecute, true);  const beforeExecute = new Event();  const afterExecute = new Event();  function command() {    //>>includeStart('debug', pragmas.debug);    if (!command.canExecute) {      throw new DeveloperError("Cannot execute command, canExecute is false.");    }    //>>includeEnd('debug');    const commandInfo = {      args: arguments,      cancel: false,    };    let result;    beforeExecute.raiseEvent(commandInfo);    if (!commandInfo.cancel) {      result = func.apply(null, arguments);      afterExecute.raiseEvent(result);    }    return result;  }  command.canExecute = canExecute;  knockout.track(command, ["canExecute"]);  Object.defineProperties(command, {    beforeExecute: {      value: beforeExecute,    },    afterExecute: {      value: afterExecute,    },  });  return command;}export default createCommand;
 |