@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
1 lines • 2.51 kB
Source Map (JSON)
{"version":3,"file":"use-spinner.cjs","names":[],"sources":["../../../../src/components/number-input/use-spinner.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useRef, useState } from \"react\"\nimport { useInterval } from \"../../hooks/use-interval\"\nimport { useUnmountEffect } from \"../../utils\"\n\nconst INTERVAL = 50\nconst DELAY = 300\n\nexport interface UseSpinnerProps {\n decrement: () => void\n increment: () => void\n}\n\nexport const useSpinner = ({ decrement, increment }: UseSpinnerProps) => {\n const [spinning, setSpinning] = useState(false)\n const [action, setAction] = useState<\"decrement\" | \"increment\" | null>(null)\n const [once, setOnce] = useState(true)\n const timeoutRef = useRef<any>(null)\n\n useInterval(\n () => {\n if (action === \"increment\") increment()\n\n if (action === \"decrement\") decrement()\n },\n spinning ? INTERVAL : null,\n )\n\n const up = useCallback(() => {\n if (once) increment()\n\n timeoutRef.current = setTimeout(() => {\n setOnce(false)\n setSpinning(true)\n setAction(\"increment\")\n }, DELAY)\n }, [increment, once])\n\n const down = useCallback(() => {\n if (once) decrement()\n\n timeoutRef.current = setTimeout(() => {\n setOnce(false)\n setSpinning(true)\n setAction(\"decrement\")\n }, DELAY)\n }, [decrement, once])\n\n const removeTimeout = useCallback(() => clearTimeout(timeoutRef.current), [])\n\n const stop = useCallback(() => {\n setOnce(true)\n setSpinning(false)\n removeTimeout()\n }, [removeTimeout])\n\n useUnmountEffect(removeTimeout)\n\n return { down, spinning, stop, up }\n}\n\nexport type UseSpinnerReturn = ReturnType<typeof useSpinner>\n"],"mappings":";;;;;;;;;;AAMA,MAAM,WAAW;AACjB,MAAM,QAAQ;AAOd,MAAa,cAAc,EAAE,WAAW,gBAAiC;CACvE,MAAM,CAAC,UAAU,mCAAwB,MAAM;CAC/C,MAAM,CAAC,QAAQ,iCAAwD,KAAK;CAC5E,MAAM,CAAC,MAAM,+BAAoB,KAAK;CACtC,MAAM,+BAAyB,KAAK;AAEpC,oDACQ;AACJ,MAAI,WAAW,YAAa,YAAW;AAEvC,MAAI,WAAW,YAAa,YAAW;IAEzC,WAAW,WAAW,KACvB;CAED,MAAM,kCAAuB;AAC3B,MAAI,KAAM,YAAW;AAErB,aAAW,UAAU,iBAAiB;AACpC,WAAQ,MAAM;AACd,eAAY,KAAK;AACjB,aAAU,YAAY;KACrB,MAAM;IACR,CAAC,WAAW,KAAK,CAAC;CAErB,MAAM,oCAAyB;AAC7B,MAAI,KAAM,YAAW;AAErB,aAAW,UAAU,iBAAiB;AACpC,WAAQ,MAAM;AACd,eAAY,KAAK;AACjB,aAAU,YAAY;KACrB,MAAM;IACR,CAAC,WAAW,KAAK,CAAC;CAErB,MAAM,6CAAkC,aAAa,WAAW,QAAQ,EAAE,EAAE,CAAC;CAE7E,MAAM,oCAAyB;AAC7B,UAAQ,KAAK;AACb,cAAY,MAAM;AAClB,iBAAe;IACd,CAAC,cAAc,CAAC;AAEnB,iCAAiB,cAAc;AAE/B,QAAO;EAAE;EAAM;EAAU;EAAM;EAAI"}