All files / src/hooks useCIAContentService.ts

100% Statements 20/20
100% Branches 0/0
100% Functions 4/4
100% Lines 20/20

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 55 56                      9x 335x   335x 335x   335x 243x 243x   243x   243x 242x 242x   1x 1x   243x         335x   1x 1x     335x 242x     335x                    
import { useEffect, useState } from "react";
import {
  CIAContentService,
  createCIAContentService,
} from "../services/ciaContentService";
import { toErrorObject } from "../utils";
 
/**
 * Hook to access the CIA content service with loading and error states
 * @returns Object containing the CIA content service, loading state, and error state
 */
export const useCIAContentService = () => {
  const [ciaContentService, setCIAContentService] =
    useState<CIAContentService | null>(null);
  const [isLoading, setIsLoading] = useState<boolean>(true);
  const [error, setError] = useState<Error | null>(null);
 
  const initService = async () => {
    try {
      setIsLoading(true);
      // Create the service using the createCIAContentService factory function
      const service = createCIAContentService();
      // Wait for any async initialization to complete
      await service.initialize();
      setCIAContentService(service);
      setError(null);
    } catch (err) {
      setCIAContentService(null);
      setError(toErrorObject(err));
    } finally {
      setIsLoading(false);
    }
  };
 
  // Refresh function to retry initialization if needed
  const refresh = () => {
    // Make sure we set isLoading immediately, not after the async part
    setIsLoading(true);
    initService();
  };
 
  useEffect(() => {
    initService();
  }, []);
 
  return {
    ciaContentService,
    isLoading,
    error,
    refresh,
  };
};
 
// Keep the default export for backward compatibility
export default useCIAContentService;