UNPKG

rn-inkpad

Version:

<img src="https://res.cloudinary.com/fercloudinary/image/upload/v1715452841/packages/inkpad-banner_acl0xl.png" />

69 lines (68 loc) 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useLongPressButton = void 0; const react_1 = require("react"); const useAnimation_1 = require("./useAnimation"); const useLongPressButton = (longPressTime = 2000, onFinish) => { const [number, setNumber] = (0, react_1.useState)(0); const [intervalId, setIntervalId] = (0, react_1.useState)(null); const { scale, scaleValue } = (0, useAnimation_1.useAnimation)(); const alignSelf = { 'left-to-right': 'flex-start', 'right-to-left': 'flex-end', 'center-to-ends': 'center', }; const handlePressIn = () => { scale(1, 0.9); clearInterval(intervalId); startCounting(); }; const handlePressOut = () => { scale(0.9, 1); clearInterval(intervalId); decreaseCount(); }; const startCounting = () => { const speed = 100 / (longPressTime / 1000); const interval = 100 / speed; const id = setInterval(() => { setNumber(prevNumber => { if (prevNumber < 100) { return prevNumber + 1; } else { clearInterval(id); scale(0.9, 1); setNumber(0); if (!!onFinish) { onFinish(); } return prevNumber; } }); }, interval); setIntervalId(id); }; const decreaseCount = () => { const id = setInterval(() => { setNumber(prevNumber => { if (prevNumber > 0) { return prevNumber - 1; } else { clearInterval(id); return prevNumber; } }); }, 10); setIntervalId(id); }; return { alignSelf, handlePressIn, handlePressOut, number, scaleValue, }; }; exports.useLongPressButton = useLongPressButton;