@playbooks/hooks
Version:
A collection of React hooks for Playbooks.
54 lines (53 loc) • 1.36 kB
JavaScript
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
};