diff --git a/application/src/pages/times/add.rs b/application/src/pages/times/add.rs index 4e33e7e..35730be 100644 --- a/application/src/pages/times/add.rs +++ b/application/src/pages/times/add.rs @@ -1,3 +1,4 @@ +use crate::util::surrealdb; use leptos::{ev::keydown, *}; use leptos_use::*; use strsim::normalized_damerau_levenshtein; @@ -33,6 +34,18 @@ fn sort_participants(participants: Vec, search: String) -> Vec) -> impl IntoView { + view! { + + } +} + /// Navigation bar #[component] pub fn Add() -> impl IntoView { @@ -40,9 +53,14 @@ pub fn Add() -> impl IntoView { let participants = expect_context::(); let container_ref: NodeRef = create_node_ref(); + let name_ref: NodeRef = create_node_ref(); let (name, set_name) = create_signal(String::from("")); + let (event, set_event) = create_signal(String::from("lifesaver")); let (error, set_error) = create_signal(String::from("")); + let (minutes, set_minutes) = create_signal::(0); + let (seconds, set_seconds) = create_signal::(0); + let (miliseconds, set_miliseconds) = create_signal::(0); let (selected, set_selected) = create_signal::(0); let participants_sorted = @@ -79,20 +97,49 @@ pub fn Add() -> impl IntoView { let on_submit = move |ev: leptos::ev::SubmitEvent| { ev.prevent_default(); set_error.set(String::from("")); - /* - match websocket.add_person(name.get(), group.get()) { - Ok(_) => set_name.set(String::from("")), + + let person = &participants_sorted.get()[selected.get()]; + + match websocket.add_time( + surrealdb::CreateTimeParam::new( + person.clone().id, + minutes.get(), + seconds.get(), + miliseconds.get(), + ), + event.get(), + ) { + Ok(_) => { + set_name.set(String::from("")); + set_minutes.set(0); + set_seconds.set(0); + set_miliseconds.set(0); + + let _ = name_ref.get().unwrap().focus(); + } Err(err) => set_error.set(err), } - */ }; view! {

"Tijd toevoegen"

+
+ "Onderdeel:" + +
impl IntoView {
"Tijd:" - - - + (); + match x { + Ok(x) => set_minutes.set(x), + Err(_) => set_minutes.set(0), + } + } + prop:value=minutes + /> + (); + match x { + Ok(x) => set_seconds.set(x), + Err(_) => set_seconds.set(0), + } + } + prop:value=seconds + /> + (); + match x { + Ok(x) => set_miliseconds.set(x), + Err(_) => set_miliseconds.set(0), + } + } + prop:value=miliseconds + />
diff --git a/application/src/util/surrealdb.rs b/application/src/util/surrealdb.rs index 8cfb3f0..555e66e 100644 --- a/application/src/util/surrealdb.rs +++ b/application/src/util/surrealdb.rs @@ -3,7 +3,7 @@ use leptos::*; use leptos_use::{core::ConnectionReadyState, use_websocket, UseWebsocketReturn}; use serde::{Deserialize, Serialize}; use serde_json::json; -use std::{alloc::handle_alloc_error, rc::Rc}; +use std::{alloc::handle_alloc_error, rc::Rc, time::Duration}; #[derive(Serialize)] #[serde(untagged)] @@ -25,6 +25,7 @@ enum SurrealParams { Participant, SigninParam(SigninParam), CreatePersonParam(CreatePersonParam), + CreateTimeParam(CreateTimeParam), String(String), } @@ -40,9 +41,24 @@ struct CreatePersonParam { group: String, } +#[derive(Serialize)] +pub struct CreateTimeParam { + person_id: String, + time: u64, +} + +impl CreateTimeParam { + pub fn new(person_id: String, minutes: u64, seconds: u64, miliseconds: u64) -> Self { + Self { + person_id, + time: minutes * 60 * 1000 + seconds * 1000 + miliseconds * 10, + } + } +} + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct Participant { - id: String, + pub id: String, pub name: String, pub group: String, } @@ -142,6 +158,19 @@ impl SurrealContext { Ok(self.send(&json!(request).to_string())) } + + pub fn add_time(&self, body: CreateTimeParam, event: String) -> Result<(), String> { + let request = SurrealRequest { + id: SurrealId::Integer(20), + method: String::from("create"), + params: vec![ + SurrealParams::String(event), + SurrealParams::CreateTimeParam(body), + ], + }; + + Ok(self.send(&json!(request).to_string())) + } } pub fn init_surrealdb() {