Code coverage report for dnd-core/modules/DragDropMonitor.js

Statements: 97.14% (68 / 70)      Branches: 93.33% (28 / 30)      Functions: 94.44% (17 / 18)      Lines: 98.51% (66 / 67)      Ignored: none     

All files » dnd-core/modules/ » DragDropMonitor.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125    2   50   1   1   1 55 7 12     48       1 1 50   50 50     1 2     1       1 71 68   67 12     55     1 76 76   76 21     55 55 55     1 285 285 261     24 24 24 4     20 20 2     18     1 34   34 34 8     26 26 13   13       1 84     1 17     1 35     1 74     1 38     1 69     1     1  
"use strict";
 
var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
 
var _classCallCheck = function (instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
 
var invariant = _interopRequire(require("invariant"));
 
var isArray = _interopRequire(require("lodash/lang/isArray"));
 
function matchesType(targetType, draggedItemType) {
  if (isArray(targetType)) {
    return targetType.some(function (t) {
      return t === draggedItemType;
    });
  } else {
    return targetType === draggedItemType;
  }
}
 
var DragDropMonitor = (function () {
  function DragDropMonitor(flux, registry) {
    _classCallCheck(this, DragDropMonitor);
 
    this.dragOperationStore = flux.dragOperationStore;
    this.registry = registry;
  }
 
  DragDropMonitor.prototype.addChangeListener = function addChangeListener(listener, context) {
    this.dragOperationStore.addListener("change", listener, context);
  };
 
  DragDropMonitor.prototype.removeChangeListener = function removeChangeListener(listener, context) {
    this.dragOperationStore.removeListener("change", listener, context);
  };
 
  DragDropMonitor.prototype.canDrag = function canDrag(sourceHandle) {
    var source = this.registry.getSource(sourceHandle);
    invariant(source, "Expected to find a valid source.");
 
    if (this.isDragging()) {
      return false;
    }
 
    return source.canDrag(this, sourceHandle);
  };
 
  DragDropMonitor.prototype.canDrop = function canDrop(targetHandle) {
    var target = this.registry.getTarget(targetHandle);
    invariant(target, "Expected to find a valid target.");
 
    if (!this.isDragging() || this.didDrop()) {
      return false;
    }
 
    var targetType = this.registry.getTargetType(targetHandle);
    var draggedItemType = this.getItemType();
    return matchesType(targetType, draggedItemType) && target.canDrop(this, targetHandle);
  };
 
  DragDropMonitor.prototype.isDragging = function isDragging(sourceHandle) {
    var isDragging = this.dragOperationStore.isDragging();
    if (!isDragging || typeof sourceHandle === "undefined") {
      return isDragging;
    }
 
    var sourceType = this.registry.getSourceType(sourceHandle);
    var draggedItemType = this.getItemType();
    if (sourceType !== draggedItemType) {
      return false;
    }
 
    var source = this.registry.getSource(sourceHandle, true);
    if (!source) {
      return false;
    }
 
    return source.isDragging(this, sourceHandle);
  };
 
  DragDropMonitor.prototype.isOver = function isOver(targetHandle) {
    var shallow = arguments[1] === undefined ? false : arguments[1];
 
    var targetHandles = this.getTargetHandles();
    if (!targetHandles.length) {
      return false;
    }
 
    var index = targetHandles.indexOf(targetHandle);
    if (shallow) {
      return index === targetHandles.length - 1;
    } else {
      return index > -1;
    }
  };
 
  DragDropMonitor.prototype.getItemType = function getItemType() {
    return this.dragOperationStore.getItemType();
  };
 
  DragDropMonitor.prototype.getItem = function getItem() {
    return this.dragOperationStore.getItem();
  };
 
  DragDropMonitor.prototype.getSourceHandle = function getSourceHandle() {
    return this.dragOperationStore.getSourceHandle();
  };
 
  DragDropMonitor.prototype.getTargetHandles = function getTargetHandles() {
    return this.dragOperationStore.getTargetHandles();
  };
 
  DragDropMonitor.prototype.getDropResult = function getDropResult() {
    return this.dragOperationStore.getDropResult();
  };
 
  DragDropMonitor.prototype.didDrop = function didDrop() {
    return this.dragOperationStore.didDrop();
  };
 
  return DragDropMonitor;
})();
 
module.exports = DragDropMonitor;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYW4vRG9jdW1lbnRzL1Byb2plY3RzL2RuZC1jb3JlL21vZHVsZXMvRHJhZ0Ryb3BNb25pdG9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFPLFNBQVMsMkJBQU0sV0FBVzs7SUFDMUIsT0FBTywyQkFBTSxxQkFBcUI7O0FBRXpDLFNBQVMsV0FBVyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUU7QUFDaEQsTUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDdkIsV0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQzthQUFJLENBQUMsS0FBSyxlQUFlO0tBQUEsQ0FBQyxDQUFDO0dBQ3BELE1BQU07QUFDTCxXQUFPLFVBQVUsS0FBSyxlQUFlLENBQUM7R0FDdkM7Q0FDRjs7SUFFb0IsZUFBZTtBQUN2QixXQURRLGVBQWUsQ0FDdEIsSUFBSSxFQUFFLFFBQVEsRUFBRTswQkFEVCxlQUFlOztBQUVoQyxRQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQ2xELFFBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0dBQzFCOztBQUprQixpQkFBZSxXQU1sQyxpQkFBaUIsR0FBQSwyQkFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFO0FBQ25DLFFBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNsRTs7QUFSa0IsaUJBQWUsV0FVbEMsb0JBQW9CLEdBQUEsOEJBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRTtBQUN0QyxRQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7R0FDckU7O0FBWmtCLGlCQUFlLFdBY2xDLE9BQU8sR0FBQSxpQkFBQyxZQUFZLEVBQUU7QUFDcEIsUUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMs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QWUsRUFBRSxDQUFDO0dBQ2xEOztBQW5Ga0IsaUJBQWUsV0FxRmxDLGdCQUFnQixHQUFBLDRCQUFHO0FBQ2pCLFdBQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLENBQUM7R0FDbkQ7O0FBdkZrQixpQkFBZSxXQXlGbEMsYUFBYSxHQUFBLHlCQUFHO0FBQ2QsV0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7R0FDaEQ7O0FBM0ZrQixpQkFBZSxXQTZGbEMsT0FBTyxHQUFBLG1CQUFHO0FBQ1IsV0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7R0FDMUM7O1NBL0ZrQixlQUFlOzs7aUJBQWYsZUFBZSIsImZpbGUiOiIvVXNlcnMvZGFuL0RvY3VtZW50cy9Qcm9qZWN0cy9kbmQtY29yZS9tb2R1bGVzL0RyYWdEcm9wTW9uaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBpc0FycmF5IGZyb20gJ2xvZGFzaC9sYW5nL2lzQXJyYXknO1xuXG5mdW5jdGlvbiBtYXRjaGVzVHlwZSh0YXJnZXRUeXBlLCBkcmFnZ2VkSXRlbVR5cGUpIHtcbiAgaWYgKGlzQXJyYXkodGFyZ2V0VHlwZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0VHlwZS5zb21lKHQgPT4gdCA9PT0gZHJhZ2dlZEl0ZW1UeXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGFyZ2V0VHlwZSA9PT0gZHJhZ2dlZEl0ZW1UeXBlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWdEcm9wTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKGZsdXgsIHJlZ2lzdHJ5KSB7XG4gICAgdGhpcy5kcmFnT3BlcmF0aW9uU3RvcmUgPSBmbHV4LmRyYWdPcGVyYXRpb25TdG9yZTtcbiAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gIH1cblxuICBhZGRDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lciwgY29udGV4dCkge1xuICAgIHRoaXMuZHJhZ09wZXJhdGlvblN0b3JlLmFkZExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lciwgY29udGV4dCk7XG4gIH1cblxuICByZW1vdmVDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lciwgY29udGV4dCkge1xuICAgIHRoaXMuZHJhZ09wZXJhdGlvblN0b3JlLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lciwgY29udGV4dCk7XG4gIH1cblxuICBjYW5EcmFnKHNvdXJjZUhhbmRsZSkge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVnaXN0cnkuZ2V0U291cmNlKHNvdXJjZUhhbmRsZSk7XG4gICAgaW52YXJpYW50KHNvdXJjZSwgJ0V4cGVjdGVkIHRvIGZpbmQgYSB2YWxpZCBzb3VyY2UuJyk7XG5cbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlLmNhbkRyYWcodGhpcywgc291cmNlSGFuZGxlKTtcbiAgfVxuXG4gIGNhbkRyb3AodGFyZ2V0SGFuZGxlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZWdpc3RyeS5nZXRUYXJnZXQodGFyZ2V0SGFuZGxlKTtcbiAgICBpbnZhcmlhbnQodGFyZ2V0LCAnRXhwZWN0ZWQgdG8gZmluZCBhIHZhbGlkIHRhcmdldC4nKTtcblxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkgfHwgdGhpcy5kaWREcm9wKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRUeXBlID0gdGhpcy5yZWdpc3RyeS5nZXRUYXJnZXRUeXBlKHRhcmdldEhhbmRsZSk7XG4gICAgY29uc3QgZHJhZ2dlZEl0ZW1UeXBlID0gdGhpcy5nZXRJdGVtVHlwZSgpO1xuICAgIHJldHVybiBtYXRjaGVzVHlwZSh0YXJnZXRUeXBlLCBkcmFnZ2VkSXRlbVR5cGUpICYmXG4gICAgICAgICAgIHRhcmdldC5jYW5Ecm9wKHRoaXMsIHRhcmdldEhhbmRsZSk7XG4gIH1cblxuICBpc0RyYWdnaW5nKHNvdXJjZUhhbmRsZSkge1xuICAgIGNvbnN0IGlzRHJhZ2dpbmcgPSB0aGlzLmRyYWdPcGVyYXRpb25TdG9yZS5pc0RyYWdnaW5nKCk7XG4gICAgaWYgKCFpc0RyYWdnaW5nIHx8IHR5cGVvZiBzb3VyY2VIYW5kbGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gaXNEcmFnZ2luZztcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VUeXBlID0gdGhpcy5yZWdpc3RyeS5nZXRTb3VyY2VUeXBlKHNvdXJjZUhhbmRsZSk7XG4gICAgY29uc3QgZHJhZ2dlZEl0ZW1UeXBlID0gdGhpcy5nZXRJdGVtVHlwZSgpO1xuICAgIGlmIChzb3VyY2VUeXBlICE9PSBkcmFnZ2VkSXRlbVR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgc291cmNlID0gdGhpcy5yZWdpc3RyeS5nZXRTb3VyY2Uoc291cmNlSGFuZGxlLCB0cnVlKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2UuaXNEcmFnZ2luZyh0aGlzLCBzb3VyY2VIYW5kbGUpO1xuICB9XG5cbiAgaXNPdmVyKHRhcmdldEhhbmRsZSwgc2hhbGxvdyA9IGZhbHNlKSB7XG4gICAgY29uc3QgdGFyZ2V0SGFuZGxlcyA9IHRoaXMuZ2V0VGFyZ2V0SGFuZGxlcygpO1xuICAgIGlmICghdGFyZ2V0SGFuZGxlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRhcmdldEhhbmRsZXMuaW5kZXhPZih0YXJnZXRIYW5kbGUpO1xuICAgIGlmIChzaGFsbG93KSB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IHRhcmdldEhhbmRsZXMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGluZGV4ID4gLTE7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXRlbVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ09wZXJhdGlvblN0b3JlLmdldEl0ZW1UeXBlKCk7XG4gIH1cblxuICBnZXRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmRyYWdPcGVyYXRpb25TdG9yZS5nZXRJdGVtKCk7XG4gIH1cblxuICBnZXRTb3VyY2VIYW5kbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ09wZXJhdGlvblN0b3JlLmdldFNvdXJjZUhhbmRsZSgpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0SGFuZGxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnT3BlcmF0aW9uU3RvcmUuZ2V0VGFyZ2V0SGFuZGxlcygpO1xuICB9XG5cbiAgZ2V0RHJvcFJlc3VsdCgpIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnT3BlcmF0aW9uU3RvcmUuZ2V0RHJvcFJlc3VsdCgpO1xuICB9XG5cbiAgZGlkRHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnT3BlcmF0aW9uU3RvcmUuZGlkRHJvcCgpO1xuICB9XG59Il19