@darwish/hooks-core
Version:
51 lines (50 loc) • 1.88 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var useSetState_1 = __importDefault(require("./useSetState"));
var usePress = function (pressedView, callback, pressTime) {
if (pressTime === void 0) { pressTime = 300; }
var element = typeof pressedView === 'function' ? pressedView() : pressedView;
var _a = (0, useSetState_1.default)({
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,
});
};
(0, react_1.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 (0, react_1.cloneElement)(element, {
onMouseDown: onMouseDown,
onMouseUp: onMouseUp,
});
};
};
exports.default = usePress;