UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

1 lines 2.62 kB
{"version":3,"file":"use-interval.cjs","names":[],"sources":["../../src/use-interval/use-interval.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseIntervalOptions {\n /** If set, the interval will start automatically when the component is mounted, `false` by default */\n autoInvoke?: boolean;\n}\n\nexport interface UseIntervalReturnValue {\n /** Starts the interval */\n start: () => void;\n\n /** Stops the interval */\n stop: () => void;\n\n /** Toggles the interval */\n toggle: () => void;\n\n /** Indicates if the interval is active */\n active: boolean;\n}\n\nexport function useInterval(\n fn: () => void,\n interval: number,\n { autoInvoke = false }: UseIntervalOptions = {}\n): UseIntervalReturnValue {\n const [active, setActive] = useState(false);\n const intervalRef = useRef<number | null>(null);\n const fnRef = useRef<() => void>(null);\n\n const start = useCallback(() => {\n setActive((old) => {\n if (!old && (!intervalRef.current || intervalRef.current === -1)) {\n intervalRef.current = window.setInterval(fnRef.current!, interval);\n }\n return true;\n });\n }, []);\n\n const stop = useCallback(() => {\n setActive(false);\n window.clearInterval(intervalRef.current || -1);\n intervalRef.current = -1;\n }, []);\n\n const toggle = useCallback(() => {\n if (active) {\n stop();\n } else {\n start();\n }\n }, [active]);\n\n useEffect(() => {\n fnRef.current = fn;\n active && start();\n return stop;\n }, [fn, active, interval]);\n\n useEffect(() => {\n if (autoInvoke) {\n start();\n }\n }, []);\n\n return { start, stop, toggle, active };\n}\n\nexport namespace useInterval {\n export type Options = UseIntervalOptions;\n export type ReturnValue = UseIntervalReturnValue;\n}\n"],"mappings":";;;AAqBA,SAAgB,YACd,IACA,UACA,EAAE,aAAa,UAA8B,EAAE,EACvB;CACxB,MAAM,CAAC,QAAQ,cAAA,GAAA,MAAA,UAAsB,MAAM;CAC3C,MAAM,eAAA,GAAA,MAAA,QAAoC,KAAK;CAC/C,MAAM,SAAA,GAAA,MAAA,QAA2B,KAAK;CAEtC,MAAM,SAAA,GAAA,MAAA,mBAA0B;AAC9B,aAAW,QAAQ;AACjB,OAAI,CAAC,QAAQ,CAAC,YAAY,WAAW,YAAY,YAAY,IAC3D,aAAY,UAAU,OAAO,YAAY,MAAM,SAAU,SAAS;AAEpE,UAAO;IACP;IACD,EAAE,CAAC;CAEN,MAAM,QAAA,GAAA,MAAA,mBAAyB;AAC7B,YAAU,MAAM;AAChB,SAAO,cAAc,YAAY,WAAW,GAAG;AAC/C,cAAY,UAAU;IACrB,EAAE,CAAC;CAEN,MAAM,UAAA,GAAA,MAAA,mBAA2B;AAC/B,MAAI,OACF,OAAM;MAEN,QAAO;IAER,CAAC,OAAO,CAAC;AAEZ,EAAA,GAAA,MAAA,iBAAgB;AACd,QAAM,UAAU;AAChB,YAAU,OAAO;AACjB,SAAO;IACN;EAAC;EAAI;EAAQ;EAAS,CAAC;AAE1B,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,WACF,QAAO;IAER,EAAE,CAAC;AAEN,QAAO;EAAE;EAAO;EAAM;EAAQ;EAAQ"}