UNPKG

bigblocks

Version:

Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React

56 lines (55 loc) 2.18 kB
// useFetchTransaction Hook - Generic transaction fetcher for any BSV transaction import { useQuery } from "@tanstack/react-query"; import { ApiError } from "../../../lib/api-error.js"; import { useApiClient } from "./useApiClient.js"; /** * Generic hook for fetching any BSV transaction with social protocol data * Useful for getting full transaction details after performing social actions */ export function useFetchTransaction({ txid, enabled = true, type = "auto", }) { const apiClient = useApiClient(); const { data: transaction = null, isLoading, error, refetch, } = useQuery({ queryKey: ["transaction", txid, type], queryFn: async () => { if (!txid) return null; try { // If specific type is requested, use dedicated endpoint if (type === "follow") { return await apiClient.transactions.follow(txid); } if (type === "unfollow") { return await apiClient.transactions.unfollow(txid); } // For 'auto' type, use generic transaction fetcher // Note: The API returns BaseTransaction, but we need to cast it to our specific types const tx = await apiClient.transactions.single(txid); return tx; } catch (error) { throw ApiError.fromError(error, "NETWORK_ERROR"); } }, enabled: enabled && !!txid, staleTime: 1000 * 60 * 5, // 5 minutes - transactions are immutable refetchOnWindowFocus: false, // No need to refetch immutable data }); return { transaction, isLoading, error: error || null, refetch, }; } /** * Hook specifically for fetching follow transactions */ export function useFetchFollowTransaction(txid, enabled = true) { return useFetchTransaction({ txid, type: "follow", enabled }); } /** * Hook specifically for fetching unfollow transactions */ export function useFetchUnfollowTransaction(txid, enabled = true) { return useFetchTransaction({ txid, type: "unfollow", enabled }); }