diff --git a/frontend/src/demo.rs b/frontend/src/demo.rs
index 72642a4..f99b701 100644
--- a/frontend/src/demo.rs
+++ b/frontend/src/demo.rs
@@ -79,13 +79,62 @@ pub fn demo() -> impl leptos::IntoView {
Demo - { id } - { map }
-
+
}
}
+
+#[leptos::component]
+pub fn tab_bar(prefix: P, parts: &'static [(&'static str, &'static str)]) -> impl leptos::IntoView where P: Fn() -> String + Copy + 'static {
+ let selected_tab = move || {
+ let prefix = prefix();
+ let loc = leptos_router::use_location();
+ let loc_path = loc.pathname.get();
+ let trailing = loc_path.strip_prefix(&prefix).unwrap_or(&loc_path).split('/').filter(|l| !l.is_empty()).next();
+ trailing.or(parts.first().map(|p| p.0)).unwrap_or("").to_owned()
+ };
+
+ let style = stylers::style! {
+ "Demo",
+ .analysis_bar {
+ display: grid;
+ grid-template-columns: repeat(var(--rows), auto);
+ column-gap: 20px;
+
+ background-color: #2d2d2d;
+ }
+
+ .analysis_selector {
+ display: inline-block;
+ }
+
+ span {
+ display: inline-block;
+
+ padding: 1vw 1vh;
+ color: #d5d5d5;
+ background-color: #4d4d4d;
+ }
+ .current {
+ background-color: #5d5d5d;
+ }
+ };
+
+ let tabs = move || parts.into_iter().map(|(routename, name)| {
+ view! {class=style,
+
+ }
+ }).collect::>();
+
+ view! {class = style,
+
+ { tabs }
+
+ }
+}
diff --git a/frontend/src/demo/scoreboard.rs b/frontend/src/demo/scoreboard.rs
index 48633e5..9d4af0a 100644
--- a/frontend/src/demo/scoreboard.rs
+++ b/frontend/src/demo/scoreboard.rs
@@ -1,46 +1,20 @@
use leptos::*;
+use leptos_router::Outlet;
+
+pub mod general;
+pub mod utility;
+
+use crate::demo::TabBar;
#[leptos::component]
pub fn scoreboard() -> impl leptos::IntoView {
- use leptos::Suspense;
-
- let scoreboard_resource =
- create_resource(leptos_router::use_params_map(), |params| async move {
- let id = params.get("id").unwrap();
-
- let res =
- reqwasm::http::Request::get(&format!("/api/demos/{}/analysis/scoreboard", id))
- .send()
- .await
- .unwrap();
- res.json::()
- .await
- .unwrap()
- });
-
- let (ordering, set_ordering) = create_signal::(orderings::DAMAGE);
-
- let scoreboards = move || {
- scoreboard_resource
- .get()
- .into_iter()
- .flat_map(|v| v.teams.into_iter())
- .map(|team| {
- view! {
-
- }
- })
- .collect::>()
- };
+ let params = leptos_router::use_params_map();
+ let id = move || params.with(|params| params.get("id").cloned().unwrap_or_default());
view! {
- Scoreboard
+
- Loading Scoreboard data }
- >
- { scoreboards }
-
+
}
}
diff --git a/frontend/src/demo/scoreboard/general.rs b/frontend/src/demo/scoreboard/general.rs
new file mode 100644
index 0000000..f549ea1
--- /dev/null
+++ b/frontend/src/demo/scoreboard/general.rs
@@ -0,0 +1,45 @@
+use leptos::*;
+
+use super::*;
+
+#[leptos::component]
+pub fn general() -> impl leptos::IntoView {
+ use leptos::Suspense;
+
+ let scoreboard_resource =
+ create_resource(leptos_router::use_params_map(), |params| async move {
+ let id = params.get("id").unwrap();
+
+ let res =
+ reqwasm::http::Request::get(&format!("/api/demos/{}/analysis/scoreboard", id))
+ .send()
+ .await
+ .unwrap();
+ res.json::()
+ .await
+ .unwrap()
+ });
+
+ let (ordering, set_ordering) = create_signal::(orderings::DAMAGE);
+
+ let scoreboards = move || {
+ scoreboard_resource
+ .get()
+ .into_iter()
+ .flat_map(|v| v.teams.into_iter())
+ .map(|team| {
+ view! {
+
+ }
+ })
+ .collect::>()
+ };
+
+ view! {
+ Loading Scoreboard data }
+ >
+ { scoreboards }
+
+ }
+}
diff --git a/frontend/src/demo/scoreboard/utility.rs b/frontend/src/demo/scoreboard/utility.rs
new file mode 100644
index 0000000..e673cd4
--- /dev/null
+++ b/frontend/src/demo/scoreboard/utility.rs
@@ -0,0 +1,8 @@
+use leptos::*;
+
+#[leptos::component]
+pub fn utility() -> impl leptos::IntoView {
+ view! {
+ Utility
+ }
+}
diff --git a/frontend/src/main.rs b/frontend/src/main.rs
index 4abea73..093c858 100644
--- a/frontend/src/main.rs
+++ b/frontend/src/main.rs
@@ -20,8 +20,12 @@ fn main() {
} />
+
+
+
+
+
-