fix: task completion and sorting (#106)
This commit is contained in:
@@ -19,7 +19,7 @@ pub(crate) fn CategoryCalendarTaskList() -> Element {
|
||||
date: today_date,
|
||||
reoccurrence: None,
|
||||
time: None,
|
||||
})?();
|
||||
})?;
|
||||
|
||||
rsx! {
|
||||
div {
|
||||
|
||||
@@ -17,7 +17,7 @@ pub(crate) fn CategoryTodayTaskList() -> Element {
|
||||
date: today_date,
|
||||
reoccurrence: None,
|
||||
time: None,
|
||||
})?();
|
||||
})?;
|
||||
let today_tasks = calendar_tasks
|
||||
.iter()
|
||||
.filter(|task| {
|
||||
@@ -40,7 +40,7 @@ pub(crate) fn CategoryTodayTaskList() -> Element {
|
||||
})
|
||||
.cloned()
|
||||
.collect::<Vec<TaskWithSubtasks>>();
|
||||
let long_term_tasks = use_tasks_with_subtasks_in_category(Category::LongTerm)?();
|
||||
let long_term_tasks = use_tasks_with_subtasks_in_category(Category::LongTerm)?;
|
||||
|
||||
rsx! {
|
||||
div {
|
||||
|
||||
@@ -3,7 +3,7 @@ use dioxus::prelude::*;
|
||||
|
||||
#[component]
|
||||
pub(crate) fn ProjectList() -> Element {
|
||||
let projects = use_projects()?();
|
||||
let projects = use_projects()?;
|
||||
let mut project_being_edited = use_context::<Signal<Option<Project>>>();
|
||||
|
||||
rsx! {
|
||||
|
||||
@@ -6,7 +6,7 @@ use dioxus_i18n::t;
|
||||
|
||||
#[component]
|
||||
pub(crate) fn ProjectSelect(initial_selected_id: Option<i32>) -> Element {
|
||||
let projects = use_projects()?();
|
||||
let projects = use_projects()?;
|
||||
rsx! {
|
||||
select {
|
||||
name: "project_id",
|
||||
|
||||
@@ -8,7 +8,7 @@ use dioxus::prelude::*;
|
||||
|
||||
#[component]
|
||||
pub(crate) fn SubtasksForm(task: Task) -> Element {
|
||||
let subtasks = use_subtasks_of_task(task.id)?();
|
||||
let subtasks = use_subtasks_of_task(task.id)?;
|
||||
let mut new_title = use_signal(String::new);
|
||||
rsx! {
|
||||
form {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::components::task_list_item::TaskListItem;
|
||||
use crate::models::category::Category;
|
||||
use crate::models::task::{Task, TaskWithSubtasks};
|
||||
use crate::server::tasks::complete_task;
|
||||
use dioxus::core_macro::rsx;
|
||||
use dioxus::dioxus_core::Element;
|
||||
use dioxus::prelude::*;
|
||||
@@ -48,6 +49,9 @@ pub(crate) fn TaskList(tasks: Vec<TaskWithSubtasks>, class: Option<&'static str>
|
||||
move |event: Event<MouseData>| {
|
||||
// To prevent editing the task.
|
||||
event.stop_propagation();
|
||||
async move {
|
||||
let _ = complete_task(task.task.id).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -13,6 +13,17 @@ use crate::{
|
||||
},
|
||||
};
|
||||
|
||||
#[allow(clippy::result_large_err)]
|
||||
fn sort_loader_result<T: Ord + Clone>(
|
||||
result: Result<Loader<Vec<T>>, Loading>,
|
||||
) -> Result<Vec<T>, Loading> {
|
||||
result.map(|loader| {
|
||||
let mut items_sorted = loader();
|
||||
items_sorted.sort();
|
||||
items_sorted
|
||||
})
|
||||
}
|
||||
|
||||
#[allow(clippy::result_large_err)]
|
||||
fn use_loader_with_update_subscription<F, T, E>(
|
||||
mut future: impl FnMut() -> F + 'static,
|
||||
@@ -40,22 +51,23 @@ where
|
||||
}
|
||||
|
||||
#[allow(clippy::result_large_err)]
|
||||
pub(crate) fn use_projects() -> Result<Loader<Vec<Project>>, Loading> {
|
||||
use_loader_with_update_subscription(get_projects).inspect(|projects| projects().sort())
|
||||
pub(crate) fn use_projects() -> Result<Vec<Project>, Loading> {
|
||||
let result = use_loader_with_update_subscription(get_projects);
|
||||
sort_loader_result(result)
|
||||
}
|
||||
|
||||
#[allow(clippy::result_large_err)]
|
||||
pub(crate) fn use_tasks_with_subtasks_in_category(
|
||||
filtered_category: Category,
|
||||
) -> Result<Loader<Vec<TaskWithSubtasks>>, Loading> {
|
||||
use_loader_with_update_subscription(move || {
|
||||
) -> Result<Vec<TaskWithSubtasks>, Loading> {
|
||||
let result = use_loader_with_update_subscription(move || {
|
||||
get_tasks_with_subtasks_in_category(filtered_category.clone())
|
||||
})
|
||||
.inspect(|tasks| tasks().sort())
|
||||
});
|
||||
sort_loader_result(result)
|
||||
}
|
||||
|
||||
#[allow(clippy::result_large_err)]
|
||||
pub(crate) fn use_subtasks_of_task(task_id: i32) -> Result<Loader<Vec<Subtask>>, Loading> {
|
||||
use_loader_with_update_subscription(move || get_subtasks_of_task(task_id))
|
||||
.inspect(|subtasks| subtasks().sort())
|
||||
pub(crate) fn use_subtasks_of_task(task_id: i32) -> Result<Vec<Subtask>, Loading> {
|
||||
let result = use_loader_with_update_subscription(move || get_subtasks_of_task(task_id));
|
||||
sort_loader_result(result)
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ use dioxus::prelude::*;
|
||||
|
||||
#[component]
|
||||
pub(crate) fn CategoryPage(category: Category) -> Element {
|
||||
let tasks = use_tasks_with_subtasks_in_category(category)?();
|
||||
let tasks = use_tasks_with_subtasks_in_category(category)?;
|
||||
|
||||
rsx! {
|
||||
TaskList {
|
||||
|
||||
Reference in New Issue
Block a user