Compare commits

...

2 Commits

Author SHA1 Message Date
91430f8985 problem UID in query params 2025-02-25 23:38:01 +01:00
fc96105091 rust edition 2024 2025-02-25 21:42:03 +01:00
4 changed files with 40 additions and 25 deletions

View File

@@ -1,9 +1,9 @@
[workspace] [workspace]
resolver = "2" resolver = "3"
members = ["crates/ascend", "crates/moonboard-parser"] members = ["crates/ascend", "crates/moonboard-parser"]
[workspace.package] [workspace.package]
edition = "2021" edition = "2024"
authors = ["Asger Juul Brunshøj <asgerbrunshoj@gmail.com>"] authors = ["Asger Juul Brunshøj <asgerbrunshoj@gmail.com>"]
[workspace.dependencies.moonboard-parser] [workspace.dependencies.moonboard-parser]

View File

@@ -3,7 +3,6 @@ use crate::components::header::HeaderItem;
use crate::components::header::HeaderItems; use crate::components::header::HeaderItems;
use crate::components::header::StyledHeader; use crate::components::header::StyledHeader;
use crate::models; use crate::models;
use crate::models::WallUid;
use leptos::Params; use leptos::Params;
use leptos::prelude::*; use leptos::prelude::*;
use leptos_router::params::Params; use leptos_router::params::Params;

View File

@@ -22,9 +22,12 @@ struct RouteParams {
pub fn Wall() -> impl IntoView { pub fn Wall() -> impl IntoView {
tracing::debug!("Enter"); tracing::debug!("Enter");
let params = leptos_router::hooks::use_params::<RouteParams>(); let route_params = leptos_router::hooks::use_params::<RouteParams>();
let (problem_uid, set_problem_uid) = leptos_router::hooks::query_signal::<models::ProblemUid>("problem");
let wall_uid = Signal::derive(move || { let wall_uid = Signal::derive(move || {
params route_params
.get() .get()
.expect("gets wall_uid from URL") .expect("gets wall_uid from URL")
.wall_uid .wall_uid
@@ -44,20 +47,38 @@ pub fn Wall() -> impl IntoView {
v.and_then(Result::ok) v.and_then(Result::ok)
}); });
let fn_next_problem = move |wall: &models::Wall| {
set_problem_uid.set(wall.random_problem());
};
// Set a problem when wall is set (loaded)
Effect::new(move |_prev_value| { Effect::new(move |_prev_value| {
problem_action.value().write_only().set(None); problem_action.value().write_only().set(None);
match wall.get() {
match &*wall.read() {
Some(Ok(wall)) => { Some(Ok(wall)) => {
if let Some(problem_uid) = wall.random_problem() { if problem_uid.get().is_none() {
tracing::debug!("dispatching from effect"); tracing::debug!("Setting next problem");
problem_action.dispatch((wall.uid, problem_uid)); fn_next_problem(wall);
} }
} }
Some(Err(_err)) => {} Some(Err(err)) => {
tracing::error!("Error getting wall: {err}");
}
None => {} None => {}
} }
}); });
// On change of problem UID, dispatch an action to fetch the problem
Effect::new(move |_prev_value| match problem_uid.get() {
Some(problem_uid) => {
problem_action.dispatch((wall_uid.get(), problem_uid));
}
None => {
problem_action.value().write_only().set(None);
}
});
let header_items = move || HeaderItems { let header_items = move || HeaderItems {
left: vec![], left: vec![],
middle: vec![HeaderItem { middle: vec![HeaderItem {
@@ -93,12 +114,7 @@ pub fn Wall() -> impl IntoView {
<div> <div>
<Button <Button
onclick=move |_| { onclick=move |_| fn_next_problem(&wall)
if let Some(problem_uid) = wall.random_problem() {
tracing::info!("dispatching from button click handler");
problem_action.dispatch((wall.uid, problem_uid));
}
}
text="➤ Next problem" text="➤ Next problem"
/> />

18
flake.lock generated
View File

@@ -10,11 +10,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1739793388, "lastModified": 1740139153,
"narHash": "sha256-mf0FJ7JJi5gTUFz0SyWF8bqqonxoFD2DG9D785uyYJM=", "narHash": "sha256-Xa1wCQBbsFHCaXgVBjtraZcWywuXBN+YhdqGle4nLVc=",
"owner": "plul", "owner": "plul",
"repo": "basecamp", "repo": "basecamp",
"rev": "f0f702ef6d5e8446eb8cd64e56fe1fe3cfbc677d", "rev": "0a29da733dc2f7b386dd3667b63a51c55238fbfd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -25,11 +25,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1738797219, "lastModified": 1740396192,
"narHash": "sha256-KRwX9Z1XavpgeSDVM/THdFd6uH8rNm/6R+7kIbGa+2s=", "narHash": "sha256-ATMHHrg3sG1KgpQA5x8I+zcYpp5Sf17FaFj/fN+8OoQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1da52dd49a127ad74486b135898da2cef8c62665", "rev": "d9b69c3ec2a2e2e971c534065bdd53374bd68b97",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -53,11 +53,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1738895285, "lastModified": 1740450604,
"narHash": "sha256-4Ukr4reJfQ67c6QqIxbX47wnPIGxE8BXCAEPu1C3MFM=", "narHash": "sha256-T/lqASXzCzp5lJISCUw+qwfRmImVUnhKgAhn8ymRClI=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "85f3aed5f4b8eb312c6e8fe8c476bac248aed75f", "rev": "5961ca311c85c31fc5f51925b4356899eed36221",
"type": "github" "type": "github"
}, },
"original": { "original": {