import React from "react"; import { Box, Heading } from "@chakra-ui/core"; export function Delay({ children, ms = 300 }) { const [isVisible, setIsVisible] = React.useState(false); React.useEffect(() => { const id = setTimeout(() => setIsVisible(true), ms); return () => clearTimeout(id); }, [ms, setIsVisible]); return ( {children} ); } export function Heading1({ children, ...props }) { return ( {children} ); } export function Heading2({ children, ...props }) { return ( {children} ); } // From https://usehooks.com/useDebounce/ export function useDebounce(value, delay, { waitForFirstPause = false } = {}) { // State and setters for debounced value const initialValue = waitForFirstPause ? null : value; const [debouncedValue, setDebouncedValue] = React.useState(initialValue); React.useEffect( () => { // Update debounced value after delay const handler = setTimeout(() => { setDebouncedValue(value); }, delay); // Cancel the timeout if value changes (also on delay change or unmount) // This is how we prevent debounced value from updating if value is changed ... // .. within the delay period. Timeout gets cleared and restarted. return () => { clearTimeout(handler); }; }, [value, delay] // Only re-call effect if value or delay changes ); return debouncedValue; }