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
JavaScript
;
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;