UNPKG

@darwish/hooks-core

Version:

51 lines (50 loc) 1.88 kB
"use strict"; 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;