UNPKG

react-beautiful-dnd

Version:

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

108 lines (79 loc) 2.98 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _getDraggablesInsideDroppable = require('../get-draggables-inside-droppable'); var _getDraggablesInsideDroppable2 = _interopRequireDefault(_getDraggablesInsideDroppable); var _isWithinVisibleBoundsOfDroppable = require('../is-within-visible-bounds-of-droppable'); var _position = require('../position'); var _moveToEdge = require('../move-to-edge'); var _moveToEdge2 = _interopRequireDefault(_moveToEdge); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = function (_ref) { var isMovingForward = _ref.isMovingForward, draggableId = _ref.draggableId, impact = _ref.impact, droppable = _ref.droppable, draggables = _ref.draggables; if (!impact.destination) { console.error('cannot move to next index when there is not previous destination'); return null; } var location = impact.destination; var draggable = draggables[draggableId]; var axis = droppable.axis; var insideForeignDroppable = (0, _getDraggablesInsideDroppable2.default)(droppable, draggables); var currentIndex = location.index; var proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1; var lastIndex = insideForeignDroppable.length - 1; if (proposedIndex > insideForeignDroppable.length) { return null; } if (proposedIndex < 0) { return null; } var movingRelativeTo = insideForeignDroppable[Math.min(proposedIndex, lastIndex)]; var isMovingPastLastIndex = proposedIndex > lastIndex; var sourceEdge = 'start'; var destinationEdge = function () { if (isMovingPastLastIndex) { return 'end'; } return 'start'; }(); var newCenter = (0, _moveToEdge2.default)({ source: draggable.page.withoutMargin, sourceEdge: sourceEdge, destination: movingRelativeTo.page.withMargin, destinationEdge: destinationEdge, destinationAxis: droppable.axis }); var isVisible = function () { if (isMovingPastLastIndex) { return true; } return (0, _isWithinVisibleBoundsOfDroppable.isPointWithinDroppable)(droppable)(newCenter); }(); if (!isVisible) { return null; } var moved = isMovingForward ? impact.movement.draggables.slice(1, impact.movement.draggables.length) : [movingRelativeTo.id].concat((0, _toConsumableArray3.default)(impact.movement.draggables)); var newImpact = { movement: { draggables: moved, amount: (0, _position.patch)(axis.line, draggable.page.withMargin[axis.size]), isBeyondStartPosition: false }, destination: { droppableId: droppable.id, index: proposedIndex }, direction: droppable.axis.direction }; return { pageCenter: newCenter, impact: newImpact }; };