import { useEffect, useRef, useState } from "react"; import { extractDomain, faviconUrl } from "~/utils/favicon"; function resolve(input: string, size: number): string | null { const domain = extractDomain(input); return domain && domain.includes(".") ? faviconUrl(domain, size) : null; } export function useFaviconUrl(urlInput: string, size: number = 64) { const [url, setUrl] = useState(() => resolve(urlInput, size)); const timeoutRef = useRef>(); useEffect(() => { if (timeoutRef.current) clearTimeout(timeoutRef.current); timeoutRef.current = setTimeout(() => { setUrl(resolve(urlInput, size)); }, 400); return () => { if (timeoutRef.current) clearTimeout(timeoutRef.current); }; }, [urlInput, size]); return url; }