@rtbjs/use-state
Version:
`@rtbjs/use-state` is a state management tool that can act as a local state and be easily turned into a global redux state. It is an innovative approach to state management that combines the advantages of both React's useState and Redux's state management
47 lines • 1.84 kB
JavaScript
exports.__esModule = true;
exports.useDrag = void 0;
var react_1 = require("react");
var useDrag = function (x, y, onDrag) {
var _a = (0, react_1.useState)(false), dragging = _a[0], setDragging = _a[1];
var _b = (0, react_1.useState)({
initX: 0,
initY: 0,
mouseDownX: 0,
mouseDownY: 0
}), initialDragState = _b[0], setInitialDragState = _b[1];
var onMouseDown = (0, react_1.useCallback)(function (e) {
e.preventDefault();
setInitialDragState({
initX: x,
initY: y,
mouseDownX: e.clientX,
mouseDownY: e.clientY
});
setDragging(true);
}, [x, y, setDragging, setInitialDragState]);
(0, react_1.useEffect)(function () {
var onMouseMove = function (e) {
if (dragging) {
var initX = initialDragState.initX, mouseDownX = initialDragState.mouseDownX, initY = initialDragState.initY, mouseDownY = initialDragState.mouseDownY;
var dx = e.clientX - mouseDownX;
var dy = e.clientY - mouseDownY;
var x_1 = initX + dx;
var y_1 = initY + dy;
onDrag({ x: x_1, y: y_1 });
}
};
window.addEventListener('mousemove', onMouseMove, { passive: true });
return function () { return window.removeEventListener('mousemove', onMouseMove); };
}, [initialDragState, dragging, onDrag]);
(0, react_1.useEffect)(function () {
var onMouseUp = function () {
setDragging(false);
};
window.addEventListener('mouseup', onMouseUp);
return function () { return window.removeEventListener('mouseup', onMouseUp); };
}, [setDragging]);
return onMouseDown;
};
exports.useDrag = useDrag;
//# sourceMappingURL=useDrag.js.map
;