Skip to content
Snippets Groups Projects
Unverified Commit 417f5805 authored by Joel Jeremy Marquez's avatar Joel Jeremy Marquez Committed by GitHub
Browse files

[Mobile] Add loading indicator on mobile transactions list (#2831)

* Add loading indicator on mobile transactions list

* Release notes
parent 094f0b8a
No related branches found
No related tags found
No related merge requests found
...@@ -144,6 +144,7 @@ const getSchedulesTransform = memoizeOne(id => { ...@@ -144,6 +144,7 @@ const getSchedulesTransform = memoizeOne(id => {
function TransactionListWithPreviews({ account }) { function TransactionListWithPreviews({ account }) {
const [currentQuery, setCurrentQuery] = useState(); const [currentQuery, setCurrentQuery] = useState();
const [isSearching, setIsSearching] = useState(false); const [isSearching, setIsSearching] = useState(false);
const [isLoading, setIsLoading] = useState(true);
const [transactions, setTransactions] = useState([]); const [transactions, setTransactions] = useState([]);
const prependTransactions = usePreviewTransactions(); const prependTransactions = usePreviewTransactions();
const allTransactions = useMemo( const allTransactions = useMemo(
...@@ -170,10 +171,14 @@ function TransactionListWithPreviews({ account }) { ...@@ -170,10 +171,14 @@ function TransactionListWithPreviews({ account }) {
const updateQuery = useCallback(query => { const updateQuery = useCallback(query => {
paged.current?.unsubscribe(); paged.current?.unsubscribe();
setIsLoading(true);
paged.current = pagedQuery( paged.current = pagedQuery(
query.options({ splits: 'none' }).select('*'), query.options({ splits: 'none' }).select('*'),
data => setTransactions(data), data => {
{ pageCount: 10 }, setTransactions(data);
setIsLoading(false);
},
{ pageCount: 50 },
); );
}, []); }, []);
...@@ -267,6 +272,7 @@ function TransactionListWithPreviews({ account }) { ...@@ -267,6 +272,7 @@ function TransactionListWithPreviews({ account }) {
return ( return (
<TransactionListWithBalances <TransactionListWithBalances
isLoading={isLoading}
transactions={allTransactions} transactions={allTransactions}
balance={balance} balance={balance}
balanceCleared={balanceCleared} balanceCleared={balanceCleared}
......
...@@ -24,6 +24,7 @@ import { TransactionListWithBalances } from '../transactions/TransactionListWith ...@@ -24,6 +24,7 @@ import { TransactionListWithBalances } from '../transactions/TransactionListWith
export function CategoryTransactions({ category, month }) { export function CategoryTransactions({ category, month }) {
const dispatch = useDispatch(); const dispatch = useDispatch();
const navigate = useNavigate(); const navigate = useNavigate();
const [isLoading, setIsLoading] = useState(true);
const [currentQuery, setCurrentQuery] = useState(); const [currentQuery, setCurrentQuery] = useState();
const [transactions, setTransactions] = useState([]); const [transactions, setTransactions] = useState([]);
...@@ -42,10 +43,14 @@ export function CategoryTransactions({ category, month }) { ...@@ -42,10 +43,14 @@ export function CategoryTransactions({ category, month }) {
const updateQuery = useCallback(query => { const updateQuery = useCallback(query => {
paged.current?.unsubscribe(); paged.current?.unsubscribe();
setIsLoading(true);
paged.current = pagedQuery( paged.current = pagedQuery(
query.options({ splits: 'inline' }).select('*'), query.options({ splits: 'inline' }).select('*'),
data => setTransactions(data), data => {
{ pageCount: 10 }, setTransactions(data);
setIsLoading(false);
},
{ pageCount: 50 },
); );
}, []); }, []);
...@@ -136,6 +141,7 @@ export function CategoryTransactions({ category, month }) { ...@@ -136,6 +141,7 @@ export function CategoryTransactions({ category, month }) {
padding={0} padding={0}
> >
<TransactionListWithBalances <TransactionListWithBalances
isLoading={isLoading}
transactions={transactions} transactions={transactions}
balance={balance} balance={balance}
balanceCleared={balanceCleared} balanceCleared={balanceCleared}
......
...@@ -5,15 +5,18 @@ import { Item, Section } from '@react-stately/collections'; ...@@ -5,15 +5,18 @@ import { Item, Section } from '@react-stately/collections';
import * as monthUtils from 'loot-core/src/shared/months'; import * as monthUtils from 'loot-core/src/shared/months';
import { isPreviewId } from 'loot-core/src/shared/transactions'; import { isPreviewId } from 'loot-core/src/shared/transactions';
import { AnimatedLoading } from '../../../icons/AnimatedLoading';
import { theme } from '../../../style'; import { theme } from '../../../style';
import { Text } from '../../common/Text'; import { Text } from '../../common/Text';
import { View } from '../../common/View';
import { ListBox } from './ListBox'; import { ListBox } from './ListBox';
import { Transaction } from './Transaction'; import { Transaction } from './Transaction';
export function TransactionList({ export function TransactionList({
isLoading,
transactions, transactions,
isNew, isNewTransaction,
onSelect, onSelect,
scrollProps = {}, scrollProps = {},
onLoadMore, onLoadMore,
...@@ -46,6 +49,20 @@ export function TransactionList({ ...@@ -46,6 +49,20 @@ export function TransactionList({
return sections; return sections;
}, [transactions]); }, [transactions]);
if (isLoading) {
return (
<View
style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
}}
>
<AnimatedLoading width={25} height={25} />
</View>
);
}
return ( return (
<> <>
{scrollProps.ListHeaderComponent} {scrollProps.ListHeaderComponent}
...@@ -92,7 +109,7 @@ export function TransactionList({ ...@@ -92,7 +109,7 @@ export function TransactionList({
> >
<Transaction <Transaction
transaction={transaction} transaction={transaction}
added={isNew(transaction.id)} added={isNewTransaction(transaction.id)}
onSelect={onSelect} onSelect={onSelect}
/> />
</Item> </Item>
......
...@@ -56,6 +56,7 @@ function TransactionSearchInput({ placeholder, onSearch }) { ...@@ -56,6 +56,7 @@ function TransactionSearchInput({ placeholder, onSearch }) {
} }
export function TransactionListWithBalances({ export function TransactionListWithBalances({
isLoading,
transactions, transactions,
balance, balance,
balanceCleared, balanceCleared,
...@@ -154,8 +155,9 @@ export function TransactionListWithBalances({ ...@@ -154,8 +155,9 @@ export function TransactionListWithBalances({
</View> </View>
<PullToRefresh isPullable={!!onRefresh} onRefresh={onRefresh}> <PullToRefresh isPullable={!!onRefresh} onRefresh={onRefresh}>
<TransactionList <TransactionList
isLoading={isLoading}
transactions={transactions} transactions={transactions}
isNew={isNewTransaction} isNewTransaction={isNewTransaction}
onLoadMore={onLoadMore} onLoadMore={onLoadMore}
onSelect={onSelectTransaction} onSelect={onSelectTransaction}
/> />
......
---
category: Enhancements
authors: [joel-jeremy]
---
Add loading indicator on mobile transactions list.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment