UNPKG

hydrogen-sanity

Version:
47 lines (44 loc) 1.55 kB
import { useState, startTransition, useEffect, useCallback } from 'react'; import { useRevalidator } from 'react-router'; import { useEffectEvent } from 'use-effect-event'; function useRefresh() { const revalidator = useRevalidator(); const [revalidatorPromise, setRevalidatorPromise] = useState(null); const [revalidatorLoading, setRevalidatorLoading] = useState(false); const handleRevalidatorState = useEffectEvent(() => { if (revalidatorPromise && revalidator.state === "loading") { startTransition(() => setRevalidatorLoading(true)); } else if (revalidatorPromise && revalidatorLoading && revalidator.state === "idle") { revalidatorPromise(); startTransition(() => { setRevalidatorPromise(null); setRevalidatorLoading(false); }); } }); useEffect(() => { handleRevalidatorState(); }, [revalidator.state]); const createRefreshHandler = useCallback( (customRefresh) => { return (payload) => { function refreshDefault() { if (payload.source === "mutation" && payload.livePreviewEnabled) { return false; } return new Promise((resolve) => { revalidator.revalidate(); setRevalidatorPromise(() => resolve); }); } return customRefresh ? customRefresh(payload, refreshDefault, revalidator) : refreshDefault(); }; }, [revalidator] ); return { refreshHandler: createRefreshHandler }; } export { useRefresh }; //# sourceMappingURL=refresh.js.map