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 });
}