feat: create a module for Dioxus query
This commit is contained in:
		| @@ -4,6 +4,7 @@ mod models; | ||||
| mod route; | ||||
| mod schema; | ||||
| mod server; | ||||
| mod query; | ||||
|  | ||||
| use components::app::App; | ||||
| use dioxus::prelude::*; | ||||
|   | ||||
							
								
								
									
										22
									
								
								src/query/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/query/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| use crate::errors::error::Error; | ||||
| use crate::errors::error_vec::ErrorVec; | ||||
| use crate::models::category::Category; | ||||
| use crate::models::task::Task; | ||||
|  | ||||
| pub(crate) mod tasks; | ||||
|  | ||||
| #[derive(PartialEq, Debug)] | ||||
| pub(crate) enum QueryValue { | ||||
|     Tasks(Vec<Task>), | ||||
| } | ||||
|  | ||||
| #[derive(Debug)] | ||||
| pub(crate) enum QueryErrors { | ||||
|     Error(ErrorVec<Error>), | ||||
| } | ||||
|  | ||||
| #[derive(PartialEq, Eq, Hash, Clone, Debug)] | ||||
| pub(crate) enum QueryKey { | ||||
|     Tasks, | ||||
|     TasksInCategory(Category), | ||||
| } | ||||
							
								
								
									
										24
									
								
								src/query/tasks.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/query/tasks.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| use dioxus::prelude::ServerFnError; | ||||
| use dioxus_query::prelude::{use_get_query, QueryResult, UseQuery}; | ||||
| use crate::models::category::Category; | ||||
| use crate::query::{QueryErrors, QueryKey, QueryValue}; | ||||
| use crate::server::tasks::get_tasks_in_category; | ||||
|  | ||||
|  | ||||
|  | ||||
| pub(crate) fn use_tasks_in_category_query(category: Category) | ||||
|                                           -> UseQuery<QueryValue, QueryErrors, QueryKey> { | ||||
|     use_get_query([QueryKey::TasksInCategory(category), QueryKey::Tasks], fetch_tasks_in_category) | ||||
| } | ||||
|  | ||||
| async fn fetch_tasks_in_category(keys: Vec<QueryKey>) -> QueryResult<QueryValue, QueryErrors> { | ||||
|     if let Some(QueryKey::TasksInCategory(category)) = keys.first() { | ||||
|         match get_tasks_in_category(category.clone()).await {  | ||||
|             Ok(tasks) => Ok(QueryValue::Tasks(tasks)), | ||||
|             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), | ||||
|             Err(error) => panic!("Unexpected error: {:?}", error) | ||||
|         }.into() | ||||
|     } else { | ||||
|         panic!("Unexpected query keys: {:?}", keys); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user