show method

This commit is contained in:
Asger Juul Brunshøj 2025-02-19 21:49:34 +01:00
parent bf8e79b88c
commit aebd30c1c2
5 changed files with 68 additions and 17 deletions

27
Cargo.lock generated
View File

@ -156,7 +156,7 @@ dependencies = [
"codee", "codee",
"confik", "confik",
"console_error_panic_hook", "console_error_panic_hook",
"derive_more", "derive_more 2.0.1",
"error_reporter", "error_reporter",
"getrandom 0.3.1", "getrandom 0.3.1",
"http 1.2.0", "http 1.2.0",
@ -776,7 +776,16 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
dependencies = [ dependencies = [
"derive_more-impl", "derive_more-impl 1.0.0",
]
[[package]]
name = "derive_more"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678"
dependencies = [
"derive_more-impl 2.0.1",
] ]
[[package]] [[package]]
@ -791,6 +800,18 @@ dependencies = [
"unicode-xid", "unicode-xid",
] ]
[[package]]
name = "derive_more-impl"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3"
dependencies = [
"proc-macro2",
"quote",
"syn",
"unicode-xid",
]
[[package]] [[package]]
name = "displaydoc" name = "displaydoc"
version = "0.2.5" version = "0.2.5"
@ -2113,7 +2134,7 @@ dependencies = [
name = "moonboard-parser" name = "moonboard-parser"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"derive_more", "derive_more 1.0.0",
"serde", "serde",
"serde_json", "serde_json",
"tokio", "tokio",

View File

@ -15,7 +15,7 @@ chrono = { version = "0.4.39", features = ["now", "serde"] }
clap = { version = "4.5.7", features = ["derive"] } clap = { version = "4.5.7", features = ["derive"] }
confik = { version = "0.12", optional = true, features = ["camino"] } confik = { version = "0.12", optional = true, features = ["camino"] }
console_error_panic_hook = "0.1" console_error_panic_hook = "0.1"
derive_more = { version = "1", features = [ derive_more = { version = "2", features = [
"display", "display",
"error", "error",
"from", "from",

View File

@ -17,10 +17,12 @@ pub use v2::WallUid;
pub mod v2 { pub mod v2 {
use super::v1; use super::v1;
use derive_more::Display;
use serde::Deserialize; use serde::Deserialize;
use serde::Serialize; use serde::Serialize;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::collections::BTreeSet; use std::collections::BTreeSet;
use std::fmt::Display;
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
pub struct Root { pub struct Root {
@ -78,10 +80,15 @@ pub mod v2 {
} }
} }
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Display)]
pub enum Method { pub enum Method {
#[display("Feet follow hands")]
FeetFollowHands, FeetFollowHands,
#[display("Footless")]
Footless, Footless,
#[display("Footless plus kickboard")]
FootlessPlusKickboard, FootlessPlusKickboard,
} }

View File

@ -1,3 +1,5 @@
// TODO: Put current problem UID in url
use crate::codec::ron::RonEncoded; use crate::codec::ron::RonEncoded;
use crate::components::button::Button; use crate::components::button::Button;
use crate::components::header::HeaderItem; use crate::components::header::HeaderItem;
@ -38,7 +40,6 @@ pub fn Wall() -> impl IntoView {
}); });
let problem_signal = Signal::derive(move || { let problem_signal = Signal::derive(move || {
let v = problem_action.value().read_only().get(); let v = problem_action.value().read_only().get();
tracing::debug!("val: {:?}", v);
v.and_then(Result::ok) v.and_then(Result::ok)
}); });
@ -75,7 +76,7 @@ pub fn Wall() -> impl IntoView {
}; };
leptos::view! { leptos::view! {
<div class="min-w-screen min-h-screen bg-slate-900"> <div class="min-w-screen min-h-screen bg-neutral-950">
<StyledHeader items=Signal::derive(header_items) /> <StyledHeader items=Signal::derive(header_items) />
<div class="m-2"> <div class="m-2">
@ -90,15 +91,6 @@ pub fn Wall() -> impl IntoView {
<Grid wall=wall.clone() problem=problem_signal /> <Grid wall=wall.clone() problem=problem_signal />
<div> <div>
<div>
<p>
{move || problem_signal.get().map(|p| p.name.clone())}
</p>
<p>
{move || problem_signal.get().map(|p| p.set_by.clone())}
</p>
</div>
<Button <Button
onclick=move |_| { onclick=move |_| {
if let Some(problem_uid) = wall.random_problem() { if let Some(problem_uid) = wall.random_problem() {
@ -108,6 +100,10 @@ pub fn Wall() -> impl IntoView {
} }
text="➤ Next problem" text="➤ Next problem"
/> />
<div class="m-4"/>
{move || problem_signal.get().map(|problem| view! { <ProblemInfo problem /> })}
</div> </div>
</div> </div>
}; };
@ -142,6 +138,7 @@ fn Grid(wall: models::Wall, problem: Signal<Option<models::Problem>>) -> impl In
} }
} }
// TODO: refactor this to use the Problem component
#[component] #[component]
#[tracing::instrument(skip_all)] #[tracing::instrument(skip_all)]
fn Hold(hold: models::Hold, role: Signal<Option<HoldRole>>) -> impl IntoView { fn Hold(hold: models::Hold, role: Signal<Option<HoldRole>>) -> impl IntoView {
@ -171,3 +168,30 @@ fn Hold(hold: models::Hold, role: Signal<Option<HoldRole>>) -> impl IntoView {
tracing::trace!("view"); tracing::trace!("view");
view! { <div class=class>{img}</div> } view! { <div class=class>{img}</div> }
} }
#[component]
#[tracing::instrument(skip_all)]
fn ProblemInfo(problem: models::Problem) -> impl IntoView {
tracing::trace!("Enter problem info");
let name = problem.name;
let set_by = problem.set_by;
let method = problem.method;
view! {
<div class="grid grid-cols-[auto,1fr] gap-2">
<NameValue name="Name:" value=name />
<NameValue name="Method:" value=method.to_string() />
<NameValue name="Set By:" value=set_by />
</div>
}
}
#[component]
#[tracing::instrument(skip_all)]
fn NameValue(#[prop(into)] name: String, #[prop(into)] value: String) -> impl IntoView {
view! {
<p class="text-orange-300">{name}</p>
<p class="text-white">{value}</p>
}
}

View File

@ -17,7 +17,6 @@ serve:
# cargo leptos build --release -vv # cargo leptos build --release -vv
# cp target/release/ascend dist/ # cp target/release/ascend dist/
# cp -r target/site dist/ # cp -r target/site dist/
# run-release: # run-release:
# #!/usr/bin/env bash # #!/usr/bin/env bash
# cd dist # cd dist