HEX
Server: LiteSpeed
System: Linux server315.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: globfdxw (6114)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/globfdxw/www/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 };
  }