From d844bbd40af0e163a4c96a2024016c6f4671136b Mon Sep 17 00:00:00 2001 From: Tim Schwarz <4171783+tmjssz@users.noreply.github.com> Date: Wed, 21 Aug 2024 18:17:57 +0200 Subject: [PATCH] Add `useTransactions` hook for fetching executed transactions --- src/hooks/index.ts | 1 + src/hooks/useSafe.ts | 4 +++- src/hooks/useTransactions.ts | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/hooks/useTransactions.ts diff --git a/src/hooks/index.ts b/src/hooks/index.ts index ff56c83..928b151 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -10,3 +10,4 @@ export * from './useSafeInfo.js' export * from './useSendTransaction.js' export * from './useSignerAddress.js' export * from './useSignerClient.js' +export * from './useTransactions.js' diff --git a/src/hooks/useSafe.ts b/src/hooks/useSafe.ts index 7781665..12bce7e 100644 --- a/src/hooks/useSafe.ts +++ b/src/hooks/useSafe.ts @@ -5,7 +5,8 @@ import { useChain, usePendingTransactions, useSafeInfo, - useSignerAddress + useSignerAddress, + useTransactions } from '@/hooks/index.js' import type { ConfigParam, SafeConfig } from '@/types/index.js' import { MissingSafeProviderError } from '@/errors/MissingSafeProviderError.js' @@ -34,6 +35,7 @@ export function useSafe() { getBalance: useBalance, getChain: useChain, getPendingTransactions: usePendingTransactions, + getTransactions: useTransactions, getSafeInfo: useSafeInfo, getSignerAddress: useSignerAddress } diff --git a/src/hooks/useTransactions.ts b/src/hooks/useTransactions.ts new file mode 100644 index 0000000..1969513 --- /dev/null +++ b/src/hooks/useTransactions.ts @@ -0,0 +1,35 @@ +import { useCallback, useMemo } from 'react' +import { useQuery, type UseQueryResult } from '@tanstack/react-query' +import { useConfig } from '@/hooks/useConfig.js' +import { usePublicClient } from '@/hooks/usePublicClient.js' +import type { ConfigParam, SafeConfig } from '@/types/index.js' +import { useSafeInfo } from './useSafeInfo.js' + +export type UseTransactionsParams = ConfigParam +// TODO: remove any +export type UseTransactionsReturnType = UseQueryResult + +/** + * Hook to get all executed transactions for the connected Safe. + * @param params Parameters to customize the hook behavior. + * @param params.config SafeConfig to use instead of the one provided by `SafeProvider`. + * @returns Query result object containing the list of executed transactions. + */ +export function useTransactions(params: UseTransactionsParams = {}): UseTransactionsReturnType { + const [config] = useConfig({ config: params.config }) + const { data: { address } = {} } = useSafeInfo({ config: params.config }) + const safeClient = usePublicClient({ config: params.config }) + + const getTransactions = useCallback(async () => { + if (!safeClient || !address) { + throw new Error('SafeClient not initialized') + } + + const response = await safeClient.apiKit.getAllTransactions(address) + return response.results + }, [safeClient]) + + const queryKey = useMemo(() => ['getTransactions', config], [config]) + + return useQuery({ queryKey, queryFn: getTransactions }) +}