aboutsummaryrefslogtreecommitdiff
path: root/src/refreshToDos.js
diff options
context:
space:
mode:
authorAdrián Oliva <adrian.oliva@cimat.mx>2023-05-29 12:42:46 -0600
committerAdrián Oliva <adrian.oliva@cimat.mx>2023-05-29 12:42:46 -0600
commit4285674ab37c74a24b265ace4d15d4848457d375 (patch)
tree942e238649c42f8077b2933989c977584d039067 /src/refreshToDos.js
parentc95dbbbf5080cf144e07a134c3e30668085d2e41 (diff)
downloadToDo-App-FE-4285674ab37c74a24b265ace4d15d4848457d375.tar.gz
ToDo-App-FE-4285674ab37c74a24b265ace4d15d4848457d375.zip
Pagination now works on to do's list.
Only 10 to dos will be shown at a time. You can sort by priority or due date and it should work on all of our to dos. Edit and delete also works.
Diffstat (limited to 'src/refreshToDos.js')
-rw-r--r--src/refreshToDos.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/refreshToDos.js b/src/refreshToDos.js
new file mode 100644
index 0000000..c599606
--- /dev/null
+++ b/src/refreshToDos.js
@@ -0,0 +1,67 @@
+import { set_todo, empty_todos, change_page } from "./features/todo/reducer";
+
+import {
+ set_fil_sort_function,
+ get_todos_page_function,
+ get_nu_pages_function,
+} from "./api/axios_methods";
+
+export function refresh_todos(my_filters, my_sorters, my_curr_page, dispatch) {
+ // Call the API to refresh sorters and filters.
+ const set_fil_sor_api = set_fil_sort_function();
+
+ set_fil_sor_api({
+ filter: {
+ name: my_filters.name,
+ priority: my_filters.priority,
+ state: my_filters.state,
+ },
+ sort: {
+ field: my_sorters.split("/")[0],
+ order: my_sorters.split("/")[1],
+ },
+ });
+
+ // Get the total number of pages. Change the current page if necessary.
+ const get_nu_pages_api = get_nu_pages_function();
+ const total_pages_api = get_nu_pages_api();
+
+ if (total_pages_api < my_curr_page) {
+ dispatch(
+ change_page({
+ page: total_pages_api,
+ })
+ );
+ }
+
+ // Delete all current to dos we have stored and retrieve new to dos from API.
+ const get_todos_api = get_todos_page_function();
+
+ function handle_new_todos_page(todos_list) {
+ dispatch(empty_todos());
+ todos_list.map((todo) => {
+ // API stores dates in ISO format and in GMT. We have to add the
+ // timezone offset.
+ const due_date = new Date(todo.dueDate);
+ const offset = due_date.getTimezoneOffset();
+
+ dispatch(
+ set_todo({
+ id: todo.id,
+ text: todo.text,
+ due_date:
+ todo.dueDate != null
+ ? new Date(due_date - offset * 60 * 1000)
+ .toISOString()
+ .slice(0, -1)
+ : "",
+ done: todo.done,
+ priority: todo.priority,
+ creation_date: todo.creationDate,
+ })
+ );
+ });
+ }
+
+ get_todos_api(handle_new_todos_page, { page: my_curr_page });
+}