All files / Rindu/hooks useCancellablePromises.ts

7.69% Statements 1/13
100% Branches 0/0
0% Functions 0/6
8.33% Lines 1/12

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 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 4519x                                                                                        
import { useRef } from "react";
 
export function useCancellablePromises(): {
  appendPendingPromise: (promise: {
    promise: Promise<unknown>;
    cancel: () => boolean;
  }) => void;
  removePendingPromise: (promise: {
    promise: Promise<unknown>;
    cancel: () => boolean;
  }) => void;
  clearPendingPromises: () => boolean[];
} {
  const pendingPromises = useRef<
    { promise: Promise<unknown>; cancel: () => boolean }[]
  >([]);
 
  const appendPendingPromise = (promise: {
    promise: Promise<unknown>;
    cancel: () => boolean;
  }) => {
    pendingPromises.current = [...pendingPromises.current, promise];
  };
 
  const removePendingPromise = (promise: {
    promise: Promise<unknown>;
    cancel: () => boolean;
  }) => {
    pendingPromises.current = pendingPromises.current.filter(
      (p) => p !== promise
    );
  };
 
  const clearPendingPromises = () =>
    pendingPromises.current.map((p) => p.cancel());
 
  const api = {
    appendPendingPromise,
    removePendingPromise,
    clearPendingPromises,
  };
 
  return api;
}