bigblocks
Version:
Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React
56 lines (55 loc) • 2.18 kB
JavaScript
// 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 });
}