All files / src/hooks useCIADataProvider.ts

81.57% Statements 31/38
75% Branches 3/4
100% Functions 1/1
81.57% Lines 31/38

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 45 46 47 48 49 50 51 52 53 54 551x               1x 122x 122x 122x 122x 122x     122x 60x 60x 60x     60x 60x 60x     60x 60x 60x               60x 60x 60x 122x     122x 59x 122x   122x 122x 122x 122x 122x 122x 122x  
import { useCallback, useEffect, useState } from "react";
import { CIADataProvider } from "../types/cia-services";
 
/**
 * Hook that provides access to the CIA data provider
 *
 * @returns An object containing the data provider, loading state, and error
 */
export const useCIADataProvider = () => {
  const [dataProvider, setDataProvider] = useState<CIADataProvider | null>(
    null
  );
  const [error, setError] = useState<Error | null>(null);
  const [isLoading, setIsLoading] = useState<boolean>(true);
 
  // Initialize the data provider
  const initDataProvider = useCallback(async () => {
    try {
      setIsLoading(true);
      setError(null);
 
      // Import the createDefaultDataProvider dynamically to avoid circular dependencies
      const { createDefaultDataProvider } = await import(
        "../services/dataProviders"
      );
 
      // Create a default data provider
      const provider = createDefaultDataProvider();
      setDataProvider(provider);
    } catch (err) {
      console.error("Error initializing CIA data provider:", err);
      setError(
        err instanceof Error
          ? err
          : new Error("Failed to initialize data provider")
      );
      setDataProvider(null);
    } finally {
      setIsLoading(false);
    }
  }, []);
 
  // Initialize the data provider when the component using this hook mounts
  useEffect(() => {
    initDataProvider();
  }, [initDataProvider]);
 
  return {
    dataProvider,
    error,
    isLoading,
    refreshDataProvider: initDataProvider,
  };
};