@darwish/hooks-core
Version:
46 lines (45 loc) • 1.62 kB
JavaScript
import { cloneElement, useEffect } from 'react';
import useSetState from './useSetState';
var usePress = function (pressedView, callback, pressTime) {
if (pressTime === void 0) { pressTime = 300; }
var element = typeof pressedView === 'function' ? pressedView() : pressedView;
var _a = useSetState({
startTime: -1,
spendTime: -1,
}), times = _a[0], setTimes = _a[1];
var onMouseDown = function () {
if (element.props && 'onMouseDown' in element.props) {
element.props.onMouseEnter();
}
setTimes({ startTime: new Date().getTime(), spendTime: 0 });
};
var onMouseUp = function () {
if (element.props && 'onMouseUp' in element.props) {
element.props.onMouseLeave();
}
setTimes({
spendTime: new Date().getTime() - times.startTime,
});
};
useEffect(function () {
if (times.spendTime >= pressTime) {
/**
* 有可能两次相同的花费时间,所以需要判断是否已经执行过
* 如果已经执行过,startTime 会被重置为 -1
* 如果没有执行过,startTime 一定是 0
* 因为在onMouseDown中,spendTime 会被赋值为 0
*/
if (times.startTime === 0) {
callback();
setTimes({ spendTime: -1 });
}
}
}, [times.spendTime]);
return function () {
return cloneElement(element, {
onMouseDown: onMouseDown,
onMouseUp: onMouseUp,
});
};
};
export default usePress;