HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpmuhibbah/wp-content/plugins/give/src/Donors/resources/hooks/useDonorStatistics.ts
import {useEntityRecord} from '@wordpress/core-data';
import {useState, useEffect} from 'react';
import apiFetch from '@wordpress/api-fetch';

/**
 * @since 4.4.0
 */
export interface DonorStatistics {
    donations: {
        lifetimeAmount: number;
        highestAmount: number;
        averageAmount: number;
        count: number;
        first: {
            amount: string;
            date: string;
        } | null;
        last: {
            amount: string;
            date: string;
        } | null;
    };
    donorType: string;
    preferredPaymentMethod: string;
}

/**
 * @since 4.4.0
 */
export function useDonorStatistics(donorId: number, mode: 'live' | 'test' = 'live') {
    const [statistics, setStatistics] = useState<DonorStatistics | null>(null);
    const [error, setError] = useState<Error | null>(null);
    const [isResolving, setIsResolving] = useState<boolean>(false);
    const [hasResolved, setHasResolved] = useState<boolean>(false);

    useEffect(() => {
      if (!donorId) return;

      setIsResolving(true);
      setHasResolved(false);
      setError(null);

      apiFetch({
        path: `/givewp/v3/donors/${donorId}/statistics?mode=${mode}`,
        method: 'GET',
      })
        .then((data: DonorStatistics) => {
          setStatistics(data);
          setHasResolved(true);
        })
        .catch((err: Error) => {
          setError(err);
          setHasResolved(true);
        })
        .finally(() => {
          setIsResolving(false);
        });
    }, [donorId, mode]);

    return { statistics, error, isResolving, hasResolved };
  }