react-beautiful-dnd-next
Version:
Beautiful and accessible drag and drop for lists with React
40 lines (32 loc) • 1.04 kB
JavaScript
// @flow
import { type DistanceThresholds } from './get-distance-thresholds';
import getValueFromDistance from './get-value-from-distance';
import dampenValueByTime from './dampen-value-by-time';
import minScroll from './min-scroll';
type Args = {|
distanceToEdge: number,
thresholds: DistanceThresholds,
dragStartTime: number,
shouldUseTimeDampening: boolean,
|};
export default ({
distanceToEdge,
thresholds,
dragStartTime,
shouldUseTimeDampening,
}: Args): number => {
const scroll: number = getValueFromDistance(distanceToEdge, thresholds);
// not enough distance to trigger a minimum scroll
// we can bail here
if (scroll === 0) {
return 0;
}
// Dampen an auto scroll speed based on duration of drag
if (!shouldUseTimeDampening) {
return scroll;
}
// Once we know an auto scroll should occur based on distance,
// we must let at least 1px through to trigger a scroll event an
// another auto scroll call
return Math.max(dampenValueByTime(scroll, dragStartTime), minScroll);
};