"use strict";

Liferay.Loader.define("sharing-web$dnd-core@11.1.3/dist/cjs/actions/dragDrop/hover", ['module', 'exports', 'require', '@sharing-web$react-dnd/invariant', '../../utils/matchesType', './types'], function (module, exports, require) {
  var define = undefined;
  var global = window;
  {
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.createHover = createHover;

    var _invariant = require("@sharing-web$react-dnd/invariant");

    var _matchesType = require("../../utils/matchesType");

    var _types = require("./types");

    function createHover(manager) {
      return function hover(targetIdsArg) {
        var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
            clientOffset = _ref.clientOffset;

        verifyTargetIdsIsArray(targetIdsArg);
        var targetIds = targetIdsArg.slice(0);
        var monitor = manager.getMonitor();
        var registry = manager.getRegistry();
        checkInvariants(targetIds, monitor, registry);
        var draggedItemType = monitor.getItemType();
        removeNonMatchingTargetIds(targetIds, registry, draggedItemType);
        hoverAllTargets(targetIds, monitor, registry);
        return {
          type: _types.HOVER,
          payload: {
            targetIds: targetIds,
            clientOffset: clientOffset || null
          }
        };
      };
    }

    function verifyTargetIdsIsArray(targetIdsArg) {
      (0, _invariant.invariant)(Array.isArray(targetIdsArg), 'Expected targetIds to be an array.');
    }

    function checkInvariants(targetIds, monitor, registry) {
      (0, _invariant.invariant)(monitor.isDragging(), 'Cannot call hover while not dragging.');
      (0, _invariant.invariant)(!monitor.didDrop(), 'Cannot call hover after drop.');

      for (var i = 0; i < targetIds.length; i++) {
        var targetId = targetIds[i];
        (0, _invariant.invariant)(targetIds.lastIndexOf(targetId) === i, 'Expected targetIds to be unique in the passed array.');
        var target = registry.getTarget(targetId);
        (0, _invariant.invariant)(target, 'Expected targetIds to be registered.');
      }
    }

    function removeNonMatchingTargetIds(targetIds, registry, draggedItemType) {
      // Remove those targetIds that don't match the targetType.  This
      // fixes shallow isOver which would only be non-shallow because of
      // non-matching targets.
      for (var i = targetIds.length - 1; i >= 0; i--) {
        var targetId = targetIds[i];
        var targetType = registry.getTargetType(targetId);

        if (!(0, _matchesType.matchesType)(targetType, draggedItemType)) {
          targetIds.splice(i, 1);
        }
      }
    }

    function hoverAllTargets(targetIds, monitor, registry) {
      // Finally call hover on all matching targets.
      targetIds.forEach(function (targetId) {
        var target = registry.getTarget(targetId);
        target.hover(monitor, targetId);
      });
    }
  }
});
//# sourceMappingURL=hover.js.map