@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
55 lines (51 loc) • 1.69 kB
JavaScript
"use client";
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
const require_effect = require('../../utils/effect.cjs');
const require_hooks_use_interval_index = require('../../hooks/use-interval/index.cjs');
let react = require("react");
react = require_rolldown_runtime.__toESM(react);
//#region src/components/number-input/use-spinner.ts
const INTERVAL = 50;
const DELAY = 300;
const useSpinner = ({ decrement, increment }) => {
const [spinning, setSpinning] = (0, react.useState)(false);
const [action, setAction] = (0, react.useState)(null);
const [once, setOnce] = (0, react.useState)(true);
const timeoutRef = (0, react.useRef)(null);
require_hooks_use_interval_index.useInterval(() => {
if (action === "increment") increment();
if (action === "decrement") decrement();
}, spinning ? INTERVAL : null);
const up = (0, react.useCallback)(() => {
if (once) increment();
timeoutRef.current = setTimeout(() => {
setOnce(false);
setSpinning(true);
setAction("increment");
}, DELAY);
}, [increment, once]);
const down = (0, react.useCallback)(() => {
if (once) decrement();
timeoutRef.current = setTimeout(() => {
setOnce(false);
setSpinning(true);
setAction("decrement");
}, DELAY);
}, [decrement, once]);
const removeTimeout = (0, react.useCallback)(() => clearTimeout(timeoutRef.current), []);
const stop = (0, react.useCallback)(() => {
setOnce(true);
setSpinning(false);
removeTimeout();
}, [removeTimeout]);
require_effect.useUnmountEffect(removeTimeout);
return {
down,
spinning,
stop,
up
};
};
//#endregion
exports.useSpinner = useSpinner;
//# sourceMappingURL=use-spinner.cjs.map