From 98703f2c8b3cc6f4f9e39f9c7148ccc65c1d9546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asger=20Juul=20Brunsh=C3=B8j?= Date: Fri, 21 Mar 2025 13:39:19 +0100 Subject: [PATCH] refactor: user interaction signal --- crates/ascend/src/pages/wall.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/crates/ascend/src/pages/wall.rs b/crates/ascend/src/pages/wall.rs index 3962306..07c14ea 100644 --- a/crates/ascend/src/pages/wall.rs +++ b/crates/ascend/src/pages/wall.rs @@ -125,13 +125,7 @@ fn WithWall( }); let problem = crate::resources::problem_by_uid_optional(wall_uid, problem_uid.into()); - let user_interaction = Signal::derive(move || { - let Some(problem_uid) = problem_uid.get() else { - return None; - }; - let user_interactions = user_interactions.read(); - user_interactions.get(&problem_uid).cloned() - }); + let user_interaction = signals::user_interaction(user_interactions, problem_uid.into()); let fn_next_problem = move || { let problems = filtered_problems.read(); @@ -346,7 +340,6 @@ fn WithUserInteraction( let submit_attempt = ServerAction::>::new(); let submit_attempt_value = submit_attempt.value(); Effect::new(move || { - tracing::info!("flaf"); if let Some(Ok(v)) = submit_attempt_value.get() { tracing::info!("setting user interaction to action return value: {v:?}"); user_interaction.set(Some(v.into_inner())); @@ -532,6 +525,7 @@ fn Section(children: Children, #[prop(into)] title: MaybeProp) -> impl I mod signals { use crate::models; use leptos::prelude::*; + use std::collections::BTreeMap; pub fn latest_attempt(user_interaction: Signal>) -> Signal> { Signal::derive(move || user_interaction.read().as_ref().and_then(models::UserInteraction::latest_attempt)) @@ -540,4 +534,15 @@ mod signals { pub fn todays_attempt(latest_attempt: Signal>) -> Signal> { Signal::derive(move || latest_attempt.read().as_ref().and_then(models::UserInteraction::todays_attempt)) } + + pub fn user_interaction( + user_interactions: Signal>, + problem_uid: Signal>, + ) -> Signal> { + Signal::derive(move || { + let problem_uid = problem_uid.get()?; + let user_interactions = user_interactions.read(); + user_interactions.get(&problem_uid).cloned() + }) + } }