Compare commits
2 Commits
a6942156e4
...
91430f8985
| Author | SHA1 | Date | |
|---|---|---|---|
| 91430f8985 | |||
| fc96105091 |
@@ -1,9 +1,9 @@
|
||||
[workspace]
|
||||
resolver = "2"
|
||||
resolver = "3"
|
||||
members = ["crates/ascend", "crates/moonboard-parser"]
|
||||
|
||||
[workspace.package]
|
||||
edition = "2021"
|
||||
edition = "2024"
|
||||
authors = ["Asger Juul Brunshøj <asgerbrunshoj@gmail.com>"]
|
||||
|
||||
[workspace.dependencies.moonboard-parser]
|
||||
|
||||
@@ -3,7 +3,6 @@ use crate::components::header::HeaderItem;
|
||||
use crate::components::header::HeaderItems;
|
||||
use crate::components::header::StyledHeader;
|
||||
use crate::models;
|
||||
use crate::models::WallUid;
|
||||
use leptos::Params;
|
||||
use leptos::prelude::*;
|
||||
use leptos_router::params::Params;
|
||||
|
||||
@@ -22,9 +22,12 @@ struct RouteParams {
|
||||
pub fn Wall() -> impl IntoView {
|
||||
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 || {
|
||||
params
|
||||
route_params
|
||||
.get()
|
||||
.expect("gets wall_uid from URL")
|
||||
.wall_uid
|
||||
@@ -44,20 +47,38 @@ pub fn Wall() -> impl IntoView {
|
||||
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| {
|
||||
problem_action.value().write_only().set(None);
|
||||
match wall.get() {
|
||||
|
||||
match &*wall.read() {
|
||||
Some(Ok(wall)) => {
|
||||
if let Some(problem_uid) = wall.random_problem() {
|
||||
tracing::debug!("dispatching from effect");
|
||||
problem_action.dispatch((wall.uid, problem_uid));
|
||||
if problem_uid.get().is_none() {
|
||||
tracing::debug!("Setting next problem");
|
||||
fn_next_problem(wall);
|
||||
}
|
||||
}
|
||||
Some(Err(_err)) => {}
|
||||
Some(Err(err)) => {
|
||||
tracing::error!("Error getting wall: {err}");
|
||||
}
|
||||
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 {
|
||||
left: vec![],
|
||||
middle: vec![HeaderItem {
|
||||
@@ -93,12 +114,7 @@ pub fn Wall() -> impl IntoView {
|
||||
|
||||
<div>
|
||||
<Button
|
||||
onclick=move |_| {
|
||||
if let Some(problem_uid) = wall.random_problem() {
|
||||
tracing::info!("dispatching from button click handler");
|
||||
problem_action.dispatch((wall.uid, problem_uid));
|
||||
}
|
||||
}
|
||||
onclick=move |_| fn_next_problem(&wall)
|
||||
text="➤ Next problem"
|
||||
/>
|
||||
|
||||
|
||||
18
flake.lock
generated
18
flake.lock
generated
@@ -10,11 +10,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1739793388,
|
||||
"narHash": "sha256-mf0FJ7JJi5gTUFz0SyWF8bqqonxoFD2DG9D785uyYJM=",
|
||||
"lastModified": 1740139153,
|
||||
"narHash": "sha256-Xa1wCQBbsFHCaXgVBjtraZcWywuXBN+YhdqGle4nLVc=",
|
||||
"owner": "plul",
|
||||
"repo": "basecamp",
|
||||
"rev": "f0f702ef6d5e8446eb8cd64e56fe1fe3cfbc677d",
|
||||
"rev": "0a29da733dc2f7b386dd3667b63a51c55238fbfd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -25,11 +25,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1738797219,
|
||||
"narHash": "sha256-KRwX9Z1XavpgeSDVM/THdFd6uH8rNm/6R+7kIbGa+2s=",
|
||||
"lastModified": 1740396192,
|
||||
"narHash": "sha256-ATMHHrg3sG1KgpQA5x8I+zcYpp5Sf17FaFj/fN+8OoQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1da52dd49a127ad74486b135898da2cef8c62665",
|
||||
"rev": "d9b69c3ec2a2e2e971c534065bdd53374bd68b97",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -53,11 +53,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1738895285,
|
||||
"narHash": "sha256-4Ukr4reJfQ67c6QqIxbX47wnPIGxE8BXCAEPu1C3MFM=",
|
||||
"lastModified": 1740450604,
|
||||
"narHash": "sha256-T/lqASXzCzp5lJISCUw+qwfRmImVUnhKgAhn8ymRClI=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "85f3aed5f4b8eb312c6e8fe8c476bac248aed75f",
|
||||
"rev": "5961ca311c85c31fc5f51925b4356899eed36221",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
Reference in New Issue
Block a user