UNPKG

@playbooks/hooks

Version:

A collection of React hooks for Playbooks.

54 lines (53 loc) 1.36 kB
import { useState, useEffect, useRef } from "react"; const useDebounce = (value, delay) => { const [debounce, setDebounce] = useState(value); useEffect(() => { const handler = setTimeout(() => setDebounce(value), delay); return () => clearTimeout(handler); }, [value, delay]); return debounce; }; const useDelay = (method, listeners = []) => { const [active, setActive] = useState(false); useEffect(() => { setTimeout(() => { method(); setActive(true); }, listeners[0]); }, [...listeners]); return active; }; const useFocus = (listeners = []) => { const ref = useRef(null); useEffect(() => { ref.current?.focus(); }, [...listeners]); return ref; }; const useInterval = (method, listeners = []) => { useEffect(() => { setTimeout(() => method(), listeners[0]); }, [...listeners]); }; const useLoaded = (method = null, listeners = []) => { const [loaded, setLoaded] = useState(false); useEffect(() => { loaded && method ? method() : setLoaded(true); }, [loaded, ...listeners]); return loaded; }; const useMounted = (method, listeners = []) => { const [loaded, setLoaded] = useState(false); useEffect(() => { loaded ? method() : setLoaded(true); }, [...listeners]); return loaded; }; export { useDebounce, useDelay, useFocus, useInterval, useLoaded, useMounted };