Skip to content

Commit

Permalink
Add useTransactions hook for fetching executed transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
tmjssz committed Aug 21, 2024
1 parent 04ace6a commit d844bbd
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/hooks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ export * from './useSafeInfo.js'
export * from './useSendTransaction.js'
export * from './useSignerAddress.js'
export * from './useSignerClient.js'
export * from './useTransactions.js'
4 changes: 3 additions & 1 deletion src/hooks/useSafe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -34,6 +35,7 @@ export function useSafe() {
getBalance: useBalance,
getChain: useChain,
getPendingTransactions: usePendingTransactions,
getTransactions: useTransactions,
getSafeInfo: useSafeInfo,
getSignerAddress: useSignerAddress
}
Expand Down
35 changes: 35 additions & 0 deletions src/hooks/useTransactions.ts
Original file line number Diff line number Diff line change
@@ -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<SafeConfig>
// TODO: remove any
export type UseTransactionsReturnType = UseQueryResult<any[]>

/**
* 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 })
}

0 comments on commit d844bbd

Please sign in to comment.