@lifi/widget
Version:
LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
59 lines • 2.38 kB
JavaScript
import { getTransactionHistory } from '@lifi/sdk';
import { useAccount } from '@lifi/wallet-management';
import { useQueries } from '@tanstack/react-query';
import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js';
import { getQueryKey } from '../utils/queries.js';
export const useTransactionHistory = () => {
const { accounts } = useAccount();
const { keyPrefix } = useWidgetConfig();
const { data, isLoading } = useQueries({
queries: accounts.map((account) => ({
queryKey: [
getQueryKey('transaction-history', keyPrefix),
account.address,
],
queryFn: (async ({ queryKey: [, accountAddress], signal }) => {
if (!accountAddress) {
return [];
}
const date = new Date();
date.setFullYear(date.getFullYear() - 10);
const response = await getTransactionHistory({
wallet: accountAddress,
fromTimestamp: Math.floor(date.getTime() / 1000),
toTimestamp: Math.floor(Date.now() / 1000),
}, { signal });
return response.transfers;
}),
refetchInterval: 300000,
enabled: Boolean(account.address),
})),
combine: (results) => {
const uniqueTransactions = new Map();
results.forEach((result) => {
if (result.data) {
result.data.forEach((transaction) => {
if (transaction?.transactionId &&
transaction?.receiving?.chainId &&
transaction?.sending.chainId) {
uniqueTransactions.set(transaction.transactionId, transaction);
}
});
}
});
const data = Array.from(uniqueTransactions.values()).sort((a, b) => {
return ((b?.sending?.timestamp ?? 0) -
(a?.sending?.timestamp ?? 0));
});
return {
data: data,
isLoading: results.some((result) => result.isLoading),
};
},
});
return {
data,
isLoading,
};
};
//# sourceMappingURL=useTransactionHistory.js.map