react-beautiful-dnd
Version:
Beautiful, accessible drag and drop for lists with React.js
41 lines (35 loc) • 1.17 kB
JavaScript
// @flow
import memoizeOne from 'memoize-one';
import rafSchd from 'raf-schd';
import type { Position } from '../../../types';
import type { Callbacks } from '../drag-handle-types';
export default (callbacks: Callbacks) => {
const memoizedMove = memoizeOne((x: number, y: number) => {
const point: Position = { x, y };
callbacks.onMove(point);
});
const move = rafSchd((point: Position) => memoizedMove(point.x, point.y));
const moveForward = rafSchd(callbacks.onMoveForward);
const moveBackward = rafSchd(callbacks.onMoveBackward);
const crossAxisMoveForward = rafSchd(callbacks.onCrossAxisMoveForward);
const crossAxisMoveBackward = rafSchd(callbacks.onCrossAxisMoveBackward);
const windowScrollMove = rafSchd(callbacks.onWindowScroll);
const cancel = () => {
// cancel all of the next animation frames
move.cancel();
moveForward.cancel();
moveBackward.cancel();
crossAxisMoveForward.cancel();
crossAxisMoveBackward.cancel();
windowScrollMove.cancel();
};
return {
move,
moveForward,
moveBackward,
crossAxisMoveForward,
crossAxisMoveBackward,
windowScrollMove,
cancel,
};
};