All files / src/usePolling useNotifiedPollingIf.ts

100% Statements 5/5
100% Branches 2/2
100% Functions 2/2
100% Lines 5/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                            4x 4x 9x   4x   4x    
import { useCallback } from "react";
import { SubscriptionManager, useSubscription } from "../useSubscription";
import { usePollingIf } from "./usePollingIf";
 
/**
 * This is a conditional polling hook that allows a subscription that gets called when the poll completes.
 *
 */
export function useNotifiedPollingIf<T = unknown>(
  predicate: () => boolean | PromiseLike<boolean>,
  asyncFunction: () => T | PromiseLike<T>,
  intervalMs = 60000,
  immediate = true
): SubscriptionManager<T> {
  const { subscribe, notify, useSubscribeEffect } = useSubscription<T>();
  const notifyingAsyncFunction = useCallback(async () => {
    notify(await asyncFunction());
  }, [notify, asyncFunction]);
  usePollingIf(predicate, notifyingAsyncFunction, { intervalMs, immediate });
 
  return { subscribe, notify, useSubscribeEffect };
}