All files / src/hooks useSecurityMetricsService.ts

82.5% Statements 33/40
83.33% Branches 5/6
100% Functions 1/1
82.5% Lines 33/40

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 57 58 59 60 611x 1x       1x             1x 116x 116x 116x 116x     116x     116x 58x 58x 58x     58x 2x 56x   58x 58x               58x 58x 58x 116x     116x 58x 116x   116x 116x 116x 116x 116x 116x 116x   1x  
import { useCallback, useEffect, useState } from "react";
import {
  createSecurityMetricsService,
  SecurityMetricsService,
} from "../services/securityMetricsService";
import { useCIADataProvider } from "./useCIADataProvider";
 
/**
 * Hook for accessing the SecurityMetricsService
 *
 * @returns An object containing the SecurityMetricsService instance, loading state, and error
 */
export const useSecurityMetricsService = () => {
  const [securityMetricsService, setSecurityMetricsService] =
    useState<SecurityMetricsService | null>(null);
  const [error, setError] = useState<Error | null>(null);
  const [isLoading, setIsLoading] = useState<boolean>(true);
 
  // Use the data provider if available
  const { dataProvider } = useCIADataProvider();
 
  // Initialize the security metrics service
  const initService = useCallback(async () => {
    try {
      setIsLoading(true);
      setError(null);
 
      // Create a new security metrics service with the data provider
      const service = dataProvider
        ? createSecurityMetricsService(dataProvider)
        : createSecurityMetricsService();
 
      setSecurityMetricsService(service);
    } catch (err) {
      console.error("Error initializing security metrics service:", err);
      setError(
        err instanceof Error
          ? err
          : new Error("Failed to initialize security metrics service")
      );
      setSecurityMetricsService(null);
    } finally {
      setIsLoading(false);
    }
  }, [dataProvider]);
 
  // Initialize the service when the component using this hook mounts
  useEffect(() => {
    initService();
  }, [initService]);
 
  return {
    securityMetricsService,
    error,
    isLoading,
    refreshService: initService,
  };
};
 
export default useSecurityMetricsService;