File size: 820 Bytes
68f7925
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { useCallback } from 'react';
import { useStateStore } from '@/store/state';

export function useApiStatusTracker() {
  const { updateApiStatus } = useStateStore();

  const trackApi = useCallback(
    async <T>(apiName: string, apiCall: () => Promise<T>): Promise<T> => {
      const startTime = Date.now();
      updateApiStatus(apiName, { status: 'loading', duration: 0 });

      try {
        const result = await apiCall();
        const duration = (Date.now() - startTime) / 1000;
        updateApiStatus(apiName, { status: 'success', duration });
        return result;
      } catch (error) {
        const duration = (Date.now() - startTime) / 1000;
        updateApiStatus(apiName, { status: 'error', duration });
        throw error;
      }
    },
    [updateApiStatus]
  );

  return { trackApi };
}