From 764255e6c64a7bc12f632015c93b3b92c9b0b567 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Fri, 17 Mar 2023 14:54:25 +0200 Subject: [PATCH] Add pagination to tasks --- lib/data/repositories/task_repository.dart | 7 ++++--- lib/redux/task/task_actions.dart | 3 ++- lib/redux/task/task_middleware.dart | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/data/repositories/task_repository.dart b/lib/data/repositories/task_repository.dart index 32b8cbb98e7..50001ee4b4d 100644 --- a/lib/data/repositories/task_repository.dart +++ b/lib/data/repositories/task_repository.dart @@ -35,9 +35,10 @@ class TaskRepository { return taskResponse.data; } - Future> loadList( - Credentials credentials, int createdAt, bool filterDeleted) async { - final url = credentials.url + '/tasks?created_at=$createdAt'; + Future> loadList(Credentials credentials, int page, + int createdAt, bool filterDeleted) async { + final url = credentials.url + + '/tasks?per_page=$kMaxRecordsPerPage&page=$page&created_at=$createdAt'; /* Server is incorrect if client isn't set if (filterDeleted) { diff --git a/lib/redux/task/task_actions.dart b/lib/redux/task/task_actions.dart index b5e078a2992..7d4eabffb88 100644 --- a/lib/redux/task/task_actions.dart +++ b/lib/redux/task/task_actions.dart @@ -73,9 +73,10 @@ class LoadTaskActivity { } class LoadTasks { - LoadTasks({this.completer}); + LoadTasks({this.completer, this.page = 1}); final Completer completer; + final int page; } class LoadTaskRequest implements StartLoading {} diff --git a/lib/redux/task/task_middleware.dart b/lib/redux/task/task_middleware.dart index d3d0e7d2346..8dfe8f1d2c2 100644 --- a/lib/redux/task/task_middleware.dart +++ b/lib/redux/task/task_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'; @@ -284,16 +285,24 @@ Middleware _loadTasks(TaskRepository repository) { repository .loadList( state.credentials, + action.page, state.createdAtLimit, state.filterDeletedClients, ) .then((data) { store.dispatch(LoadTasksSuccess(data)); - if (action.completer != null) { - action.completer.complete(null); + if (data.length == kMaxRecordsPerPage) { + store.dispatch(LoadTasks( + completer: action.completer, + page: action.page + 1, + )); + } else { + if (action.completer != null) { + action.completer.complete(null); + } + store.dispatch(LoadVendors()); } - store.dispatch(LoadVendors()); }).catchError((Object error) { print(error); store.dispatch(LoadTasksFailure(error));