From fc7a8c849c43ea56e1d488230427c57d9cee5c25 Mon Sep 17 00:00:00 2001 From: danidfra Date: Tue, 25 Mar 2025 18:14:13 -0300 Subject: [PATCH] Update loading more transactions --- .../wallet/components/wallet-transactions.tsx | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/features/wallet/components/wallet-transactions.tsx b/src/features/wallet/components/wallet-transactions.tsx index d0301745a..af9ec6116 100644 --- a/src/features/wallet/components/wallet-transactions.tsx +++ b/src/features/wallet/components/wallet-transactions.tsx @@ -1,8 +1,8 @@ -import moreIcon from '@tabler/icons/outline/dots-circle-horizontal.svg'; +import { useEffect, useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import Button from 'soapbox/components/ui/button.tsx'; import { Column } from 'soapbox/components/ui/column.tsx'; +import Spinner from 'soapbox/components/ui/spinner.tsx'; import Transactions from 'soapbox/features/wallet/components/transactions.tsx'; import { useTransactions } from 'soapbox/features/zap/hooks/useHooks.ts'; @@ -15,17 +15,35 @@ const messages = defineMessages({ const WalletTransactions = () => { const intl = useIntl(); const { isLoading, expandTransactions } = useTransactions(); + const observerRef = useRef(null); + const [showSpinner, setShowSpinner] = useState(false); + + useEffect(() => { + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting) { + setShowSpinner(true); + if (!isLoading) expandTransactions(); + } + }, + { rootMargin: '100px' }, + ); + + if (observerRef.current) { + observer.observe(observerRef.current); + } + + return () => observer.disconnect(); + }, [expandTransactions, isLoading]); return ( - + -
- +
+ {showSpinner && isLoading && }
); }; -export default WalletTransactions; +export default WalletTransactions; \ No newline at end of file