react-beautiful-dnd
Version:
Beautiful, accessible drag and drop for lists with React.js
114 lines (91 loc) • 2.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _moveToEdge = require('../../move-to-edge');
var _moveToEdge2 = _interopRequireDefault(_moveToEdge);
var _getViewport = require('../../visibility/get-viewport');
var _getViewport2 = _interopRequireDefault(_getViewport);
var _getDisplacement = require('../../get-displacement');
var _getDisplacement2 = _interopRequireDefault(_getDisplacement);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (_ref) {
var amount = _ref.amount,
originalIndex = _ref.originalIndex,
target = _ref.target,
insideDroppable = _ref.insideDroppable,
draggable = _ref.draggable,
droppable = _ref.droppable,
previousImpact = _ref.previousImpact;
if (!target) {
console.error('there will always be a target in the original list');
return null;
}
var axis = droppable.axis;
var targetIndex = insideDroppable.indexOf(target);
if (targetIndex === -1) {
console.error('unable to find target in destination droppable');
return null;
}
if (targetIndex === originalIndex) {
var _newCenter = draggable.page.withoutMargin.center;
var _newImpact = {
movement: {
displaced: [],
amount: amount,
isBeyondStartPosition: false
},
direction: droppable.axis.direction,
destination: {
droppableId: droppable.descriptor.id,
index: originalIndex
}
};
return {
pageCenter: _newCenter,
impact: _newImpact
};
}
var isMovingPastOriginalIndex = targetIndex > originalIndex;
var edge = isMovingPastOriginalIndex ? 'end' : 'start';
var newCenter = (0, _moveToEdge2.default)({
source: draggable.page.withoutMargin,
sourceEdge: edge,
destination: isMovingPastOriginalIndex ? target.page.withoutMargin : target.page.withMargin,
destinationEdge: edge,
destinationAxis: axis
});
var modified = function () {
if (!isMovingPastOriginalIndex) {
return insideDroppable.slice(targetIndex, originalIndex);
}
var from = originalIndex + 1;
var to = targetIndex + 1;
return insideDroppable.slice(from, to).reverse();
}();
var viewport = (0, _getViewport2.default)();
var displaced = modified.map(function (dimension) {
return (0, _getDisplacement2.default)({
draggable: dimension,
destination: droppable,
previousImpact: previousImpact,
viewport: viewport
});
});
var newImpact = {
movement: {
displaced: displaced,
amount: amount,
isBeyondStartPosition: isMovingPastOriginalIndex
},
direction: axis.direction,
destination: {
droppableId: droppable.descriptor.id,
index: targetIndex
}
};
return {
pageCenter: newCenter,
impact: newImpact
};
};