diff --git a/src/components/pages/projects_page.rs b/src/components/pages/projects_page.rs index 5b18b05..028181c 100644 --- a/src/components/pages/projects_page.rs +++ b/src/components/pages/projects_page.rs @@ -20,13 +20,11 @@ pub(crate) fn ProjectsPage() -> Element { key: "{project.id()}", class: format!( "px-8 py-4 select-none {}", - if project_being_edited().map(|p| p.id()) == Some(project.id()) { + if project_being_edited().is_some_and(|p| p.id() == project.id()) { "bg-zinc-700" } else { "" } ), - onclick: move |_| { - project_being_edited.set(Some(project.clone())); - }, + onclick: move |_| project_being_edited.set(Some(project.clone())), {project.title()} } } diff --git a/src/components/project_form.rs b/src/components/project_form.rs index 5efb58b..ee71abc 100644 --- a/src/components/project_form.rs +++ b/src/components/project_form.rs @@ -10,24 +10,20 @@ use crate::query::{QueryErrors, QueryKey, QueryValue}; pub(crate) fn ProjectForm(project: Option, on_successful_submit: EventHandler<()>) -> Element { let query_client = use_query_client::(); - let project_for_submit = project.clone(); - + rsx! { form { onsubmit: move |event| { - let project_clone = project_for_submit.clone(); + let project = project_for_submit.clone(); async move { let new_project = NewProject::new( event.values().get("title").unwrap().as_value() ); - match project_clone { - Some(project) => { - let _ = edit_project(project.id(), new_project).await; - } - None => { - let _ = create_project(new_project).await; - } + if let Some(project) = project { + let _ = edit_project(project.id(), new_project).await; + } else { + let _ = create_project(new_project).await; } query_client.invalidate_queries(&[ QueryKey::Projects diff --git a/src/errors/mod.rs b/src/errors/mod.rs index a0ca9ed..3eeb29b 100644 --- a/src/errors/mod.rs +++ b/src/errors/mod.rs @@ -1,4 +1,4 @@ pub(crate) mod error; pub(crate) mod error_vec; -pub(crate) mod project_create_error; -pub(crate) mod task_create_error; +pub(crate) mod project_error; +pub(crate) mod task_error; diff --git a/src/errors/project_create_error.rs b/src/errors/project_error.rs similarity index 91% rename from src/errors/project_create_error.rs rename to src/errors/project_error.rs index 8531ca4..f93283f 100644 --- a/src/errors/project_create_error.rs +++ b/src/errors/project_error.rs @@ -34,6 +34,12 @@ impl From for ErrorVec { } } +impl From for ProjectError { + fn from(_: diesel::result::Error) -> Self { + ProjectError::Error(Error::ServerInternal) + } +} + // Has to be implemented for Dioxus server functions. impl Display for ProjectError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { diff --git a/src/server/projects.rs b/src/server/projects.rs index 0d6f623..94ac3f9 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -1,6 +1,6 @@ use crate::errors::error::Error; use crate::errors::error_vec::ErrorVec; -use crate::errors::project_create_error::ProjectError; +use crate::errors::project_error::ProjectError; use crate::models::project::{NewProject, Project}; use crate::server::database_connection::establish_database_connection; use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper}; @@ -24,9 +24,7 @@ pub(crate) async fn create_project(new_project: NewProject) .values(&new_project) .returning(Project::as_returning()) .get_result(&mut connection) - .map_err::, _>( - |_| vec![ProjectError::Error(Error::ServerInternal)].into() - )?; + .map_err::, _>(|error| vec![error.into()].into())?; Ok(new_project) } @@ -69,9 +67,7 @@ pub(crate) async fn edit_project(project_id: i32, new_project: NewProject) .set(title.eq(new_project.title)) .returning(Project::as_returning()) .get_result(&mut connection) - .map_err::, _>( - |_| vec![ProjectError::Error(Error::ServerInternal)].into() - )?; + .map_err::, _>(|error| vec![error.into()].into())?; Ok(updated_project) }