UNPKG

react-beautiful-dnd

Version:

Beautiful, accessible drag and drop for lists with React.js

99 lines (73 loc) 2.46 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _position = require('../position'); var _getDisplacement = require('../get-displacement'); var _getDisplacement2 = _interopRequireDefault(_getDisplacement); var _getViewport = require('../visibility/get-viewport'); var _getViewport2 = _interopRequireDefault(_getViewport); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = function (_ref) { var pageCenter = _ref.pageCenter, draggable = _ref.draggable, home = _ref.home, insideHome = _ref.insideHome, previousImpact = _ref.previousImpact; var viewport = (0, _getViewport2.default)(); var axis = home.axis; var originalCenter = draggable.page.withoutMargin.center; var homeScrollDiff = home.viewport.frameScroll.diff.value; var currentCenter = (0, _position.add)(pageCenter, homeScrollDiff); var isBeyondStartPosition = currentCenter[axis.line] - originalCenter[axis.line] > 0; var amount = (0, _position.patch)(axis.line, draggable.client.withMargin[axis.size]); var displaced = insideHome.filter(function (child) { if (child === draggable) { return false; } var area = child.page.withoutMargin; if (isBeyondStartPosition) { if (area.center[axis.line] < originalCenter[axis.line]) { return false; } return currentCenter[axis.line] > area[axis.start]; } if (originalCenter[axis.line] < area.center[axis.line]) { return false; } return currentCenter[axis.line] < area[axis.end]; }).map(function (dimension) { return (0, _getDisplacement2.default)({ draggable: dimension, destination: home, previousImpact: previousImpact, viewport: viewport }); }); var ordered = isBeyondStartPosition ? displaced.reverse() : displaced; var index = function () { var startIndex = insideHome.indexOf(draggable); var length = ordered.length; if (!length) { return startIndex; } if (isBeyondStartPosition) { return startIndex + length; } return startIndex - length; }(); var movement = { amount: amount, displaced: ordered, isBeyondStartPosition: isBeyondStartPosition }; var impact = { movement: movement, direction: axis.direction, destination: { droppableId: home.descriptor.id, index: index } }; return impact; };