import { useCallback } from 'react';
import { usePersSDK } from '../providers/PersSDKProvider';
import type { DonationTypeDTO, PaginatedResponseDTO } from '@explorins/pers-sdk';
/**
* React hook for donation operations in the PERS SDK
*
* Provides methods for managing donations and donation types within the platform.
* Supports retrieving available donation categories and types.
*
* @returns Donation hook with methods for donation management
*
* @example
* ```typescript
* function DonationsComponent() {
* const { getDonationTypes } = useDonations();
*
* const loadDonationTypes = async () => {
* try {
* const types = await getDonationTypes();
* console.log('Available donation types:', types);
* } catch (error) {
* console.error('Failed to load donation types:', error);
* }
* };
*
* return ;
* }
* ```
*/
export const useDonations = () => {
const { sdk, isInitialized } = usePersSDK();
/**
* Retrieves all available donation types in the system
*
* @returns Promise resolving to array of donation types
* @throws Error if SDK is not initialized
*
* @example
* ```typescript
* const { getDonationTypes } = useDonations();
* const types = await getDonationTypes();
* console.log('Donation types:', types.map(t => t.name));
* ```
*/
const getDonationTypes = useCallback(async (): Promise> => {
if (!isInitialized || !sdk) {
throw new Error('SDK not initialized. Call initialize() first.');
}
try {
const result = await sdk.donations.getDonationTypes();
return result;
} catch (error) {
console.error('Failed to fetch donation types:', error);
throw error;
}
}, [sdk, isInitialized]);
return {
getDonationTypes,
isAvailable: isInitialized && !!sdk?.donations,
};
};
export type DonationHook = ReturnType;