+ // Left gradient chunk
+
+
+
+ // Background color gradient
+
+
+
+ // Right gradient chunk
+
+
+ }
+}
+
+/// Function header without styling
#[component]
pub fn Header(items: HeaderItems) -> impl IntoView {
let HeaderItems { left, middle, right } = items;
@@ -18,17 +64,17 @@ pub fn Header(items: HeaderItems) -> impl IntoView {
view! {
// Left side of header
-
+
// Expanding space in the middle
-
+
// Right side of header
-
@@ -37,7 +83,12 @@ pub fn Header(items: HeaderItems) -> impl IntoView {
#[component]
fn Items(items: Vec
) -> impl IntoView {
- items.into_iter().map(|item| view! { }).collect_view()
+ let items = items.into_iter().map(|item| view! { }).collect_view();
+ view! {
+
+ { items }
+
+ }
}
#[component]
diff --git a/crates/ascend/src/lib.rs b/crates/ascend/src/lib.rs
index 9ec8d65..fbc89e9 100644
--- a/crates/ascend/src/lib.rs
+++ b/crates/ascend/src/lib.rs
@@ -1,6 +1,7 @@
pub mod app;
pub mod pages {
pub mod edit_wall;
+ pub mod routes;
pub mod wall;
}
pub mod components {
diff --git a/crates/ascend/src/pages/edit_wall.rs b/crates/ascend/src/pages/edit_wall.rs
index 2b1e0b6..acdc20d 100644
--- a/crates/ascend/src/pages/edit_wall.rs
+++ b/crates/ascend/src/pages/edit_wall.rs
@@ -1,7 +1,7 @@
use crate::codec::ron::RonCodec;
-use crate::components::header::Header;
use crate::components::header::HeaderItem;
use crate::components::header::HeaderItems;
+use crate::components::header::StyledHeader;
use crate::models;
use crate::models::HoldPosition;
use crate::models::Wall;
@@ -26,7 +26,7 @@ pub fn EditWall() -> impl leptos::IntoView {
let header_items = HeaderItems {
left: vec![HeaderItem {
text: "← Ascend".to_string(),
- link: Some("/wall".to_string()),
+ link: Some("/".to_string()),
}],
middle: vec![HeaderItem {
text: "EDIT WALL".to_string(),
@@ -37,44 +37,7 @@ pub fn EditWall() -> impl leptos::IntoView {
leptos::view! {
-
- // Left gradient chunk
-
-
-
-
-
-
- // Right gradient chunk
-
-
-
- // Left gradient chunk
-
-
-
- // Background color gradient
-
-
-
- // Right gradient chunk
-
-
+
@@ -94,7 +57,7 @@ fn Ready(data: InitialData) -> impl leptos::IntoView {
holds.push(view! { });
}
- let grid_classes = format!("grid grid-rows-{} grid-cols-{} gap-2", data.wall.rows, data.wall.cols);
+ let grid_classes = format!("grid grid-rows-{} grid-cols-{} gap-3", data.wall.rows, data.wall.cols);
view! {
diff --git a/crates/ascend/src/pages/routes.rs b/crates/ascend/src/pages/routes.rs
new file mode 100644
index 0000000..85a3cda
--- /dev/null
+++ b/crates/ascend/src/pages/routes.rs
@@ -0,0 +1,85 @@
+use crate::codec::ron::RonCodec;
+use crate::components::header::HeaderItem;
+use crate::components::header::HeaderItems;
+use crate::components::header::StyledHeader;
+use leptos::prelude::*;
+use serde::Deserialize;
+use serde::Serialize;
+use std::ops::Deref;
+use std::path::PathBuf;
+
+#[component]
+pub fn Routes() -> impl leptos::IntoView {
+ let load = async move {
+ // TODO: What to do about this unwrap?
+ load_initial_data().await.unwrap()
+ };
+
+ let header_items = HeaderItems {
+ left: vec![HeaderItem {
+ text: "← Ascend".to_string(),
+ link: Some("/".to_string()),
+ }],
+ middle: vec![HeaderItem {
+ text: "ROUTES".to_string(),
+ link: None,
+ }],
+ right: vec![],
+ };
+
+ leptos::view! {
+
+ }
+}
+
+#[component]
+fn Ready(data: InitialData) -> impl leptos::IntoView {
+ tracing::debug!("ready");
+
+ // let import_from_mini_moonboard = Action::from(ServerAction::
::new());
+
+ view! {
+ // "Import problems from"
+ //
+ }
+}
+
+#[derive(Debug, Serialize, Deserialize, Clone)]
+pub struct InitialData {}
+
+#[server]
+async fn load_initial_data() -> Result, ServerFnError> {
+ // use crate::server::state::State;
+ // let state = expect_context::();
+
+ Ok(RonCodec::new(InitialData {}))
+}
+
+#[server(name = ImportFromMiniMoonboard)]
+#[tracing::instrument]
+async fn import_from_mini_moonboard() -> Result<(), ServerFnError> {
+ tracing::info!("Importing mini moonboard problems");
+
+ let file_path: PathBuf = todo!();
+
+ let problems = crate::server::import_mini_moonboard_problems(&file_path).await?;
+
+ use crate::server::state::State;
+ let state = expect_context::();
+ state
+ .persistent
+ .update(|s| {
+ s.problems.problems.extend(problems);
+ })
+ .await?;
+
+ Ok(())
+}
diff --git a/crates/ascend/src/pages/wall.rs b/crates/ascend/src/pages/wall.rs
index 0a39241..5edc607 100644
--- a/crates/ascend/src/pages/wall.rs
+++ b/crates/ascend/src/pages/wall.rs
@@ -1,7 +1,7 @@
use crate::codec::ron::RonCodec;
-use crate::components::header::Header;
use crate::components::header::HeaderItem;
use crate::components::header::HeaderItems;
+use crate::components::header::StyledHeader;
use crate::models;
use crate::models::HoldRole;
use leptos::prelude::*;
@@ -23,16 +23,23 @@ pub fn Wall() -> impl leptos::IntoView {
text: "Ascend".to_string(),
link: None,
}],
- right: vec![HeaderItem {
- text: "Edit wall".to_string(),
- link: Some("/wall/edit".to_string()),
- }],
+ right: vec![
+ HeaderItem {
+ text: "Routes".to_string(),
+ link: Some("/wall/routes".to_string()),
+ },
+ HeaderItem {
+ text: "Holds".to_string(),
+ link: Some("/wall/edit".to_string()),
+ },
+ ],
};
leptos::view! {
-
-
+
+
+
@@ -64,7 +71,7 @@ fn Ready(data: InitialData) -> impl leptos::IntoView {
cells.push(cell);
}
- let grid_classes = format!("grid grid-rows-{} grid-cols-{} gap-2", data.wall.rows, data.wall.cols);
+ let grid_classes = format!("grid grid-rows-{} grid-cols-{} gap-3", data.wall.rows, data.wall.cols);
view! {
{cells}
@@ -83,7 +90,7 @@ fn Hold(hold: models::Hold, #[prop(into)] role: Signal