@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
34 lines (33 loc) • 1.12 kB
JavaScript
import { useEffect, useRef } from "react";
const useDelayedPrefetchController = ()=>{
const timeoutsRef = useRef(new Map());
useEffect(()=>{
const timeouts = timeoutsRef.current;
return ()=>{
for (const timeout of timeouts.values())clearTimeout(timeout);
timeouts.clear();
};
}, []);
const schedulePrefetch = (execute, prefetchId, delay)=>{
const existing = timeoutsRef.current.get(prefetchId);
if (existing) clearTimeout(existing);
const timeoutId = setTimeout(()=>{
timeoutsRef.current.delete(prefetchId);
Promise.resolve().then(execute).catch(()=>{});
}, delay);
timeoutsRef.current.set(prefetchId, timeoutId);
return prefetchId;
};
const cancelPrefetch = (prefetchId)=>{
const timeout = timeoutsRef.current.get(prefetchId);
if (timeout) {
clearTimeout(timeout);
timeoutsRef.current.delete(prefetchId);
}
};
return {
schedulePrefetch,
cancelPrefetch
};
};
export { useDelayedPrefetchController };