Add pagination to expenses

This commit is contained in:
Hillel Coren 2023-04-04 19:03:05 +03:00
parent 64bbe895ce
commit 62472b07ff
3 changed files with 20 additions and 9 deletions

View File

@ -36,9 +36,10 @@ class ExpenseRepository {
return expenseResponse.data; return expenseResponse.data;
} }
Future<BuiltList<ExpenseEntity>> loadList( Future<BuiltList<ExpenseEntity>> loadList(Credentials credentials, int page,
Credentials credentials, int createdAt, bool filterDeleted) async { int createdAt, bool filterDeleted) async {
final url = credentials.url + '/expenses?created_at=$createdAt'; final url = credentials.url +
'/expenses?per_page=$kMaxRecordsPerPage&page=$page&created_at=$createdAt';
/* Server is incorrect if client isn't set /* Server is incorrect if client isn't set
if (filterDeleted) { if (filterDeleted) {

View File

@ -67,9 +67,10 @@ class LoadExpenseActivity {
} }
class LoadExpenses { class LoadExpenses {
LoadExpenses({this.completer}); LoadExpenses({this.completer, this.page = 1});
final Completer completer; final Completer completer;
final int page;
} }
class LoadExpenseRequest implements StartLoading {} class LoadExpenseRequest implements StartLoading {}

View File

@ -1,6 +1,7 @@
// Flutter imports: // Flutter imports:
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:invoiceninja_flutter/constants.dart';
// Package imports: // Package imports:
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
@ -229,14 +230,22 @@ Middleware<AppState> _loadExpenses(ExpenseRepository repository) {
store.dispatch(LoadExpensesRequest()); store.dispatch(LoadExpensesRequest());
repository repository
.loadList( .loadList(state.credentials, action.page, state.createdAtLimit,
state.credentials, state.createdAtLimit, state.filterDeletedClients) state.filterDeletedClients)
.then((data) { .then((data) {
store.dispatch(LoadExpensesSuccess(data)); store.dispatch(LoadExpensesSuccess(data));
if (action.completer != null) {
action.completer.complete(null); if (data.length == kMaxRecordsPerPage) {
store.dispatch(LoadExpenses(
completer: action.completer,
page: action.page + 1,
));
} else {
if (action.completer != null) {
action.completer.complete(null);
}
store.dispatch(LoadRecurringExpenses());
} }
store.dispatch(LoadRecurringExpenses());
}).catchError((Object error) { }).catchError((Object error) {
print(error); print(error);
store.dispatch(LoadExpensesFailure(error)); store.dispatch(LoadExpensesFailure(error));