From 62472b07ff5c035c2b7cf355091b529cf49ab643 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 4 Apr 2023 19:03:05 +0300 Subject: [PATCH] Add pagination to expenses --- lib/data/repositories/expense_repository.dart | 7 ++++--- lib/redux/expense/expense_actions.dart | 3 ++- lib/redux/expense/expense_middleware.dart | 19 ++++++++++++++----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/data/repositories/expense_repository.dart b/lib/data/repositories/expense_repository.dart index 91ce3125f..3c8be73dc 100644 --- a/lib/data/repositories/expense_repository.dart +++ b/lib/data/repositories/expense_repository.dart @@ -36,9 +36,10 @@ class ExpenseRepository { return expenseResponse.data; } - Future> loadList( - Credentials credentials, int createdAt, bool filterDeleted) async { - final url = credentials.url + '/expenses?created_at=$createdAt'; + Future> loadList(Credentials credentials, int page, + int createdAt, bool filterDeleted) async { + final url = credentials.url + + '/expenses?per_page=$kMaxRecordsPerPage&page=$page&created_at=$createdAt'; /* Server is incorrect if client isn't set if (filterDeleted) { diff --git a/lib/redux/expense/expense_actions.dart b/lib/redux/expense/expense_actions.dart index 0f53bde9b..99df9decc 100644 --- a/lib/redux/expense/expense_actions.dart +++ b/lib/redux/expense/expense_actions.dart @@ -67,9 +67,10 @@ class LoadExpenseActivity { } class LoadExpenses { - LoadExpenses({this.completer}); + LoadExpenses({this.completer, this.page = 1}); final Completer completer; + final int page; } class LoadExpenseRequest implements StartLoading {} diff --git a/lib/redux/expense/expense_middleware.dart b/lib/redux/expense/expense_middleware.dart index 64751aa51..9e47fdd6b 100644 --- a/lib/redux/expense/expense_middleware.dart +++ b/lib/redux/expense/expense_middleware.dart @@ -1,6 +1,7 @@ // Flutter imports: import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; +import 'package:invoiceninja_flutter/constants.dart'; // Package imports: import 'package:redux/redux.dart'; @@ -229,14 +230,22 @@ Middleware _loadExpenses(ExpenseRepository repository) { store.dispatch(LoadExpensesRequest()); repository - .loadList( - state.credentials, state.createdAtLimit, state.filterDeletedClients) + .loadList(state.credentials, action.page, state.createdAtLimit, + state.filterDeletedClients) .then((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) { print(error); store.dispatch(LoadExpensesFailure(error));