react-beautiful-dnd
Version:
Beautiful, accessible drag and drop for lists with React.js
99 lines (73 loc) • 2.46 kB
JavaScript
;
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;
};