diff options
Diffstat (limited to 'src/refreshToDos.js')
-rw-r--r-- | src/refreshToDos.js | 67 |
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 }); +} |