use leptos::*; use leptos_router::{Outlet, A}; #[leptos::component] pub fn demo() -> impl leptos::IntoView { let params = leptos_router::use_params_map(); let id = move || params.with(|params| params.get("id").cloned().unwrap_or_default()); let demo_info = create_resource( || (), move |_| async move { let res = reqwasm::http::Request::get(&format!("/api/demos/{}/info", id())) .send() .await .unwrap(); res.json::().await.unwrap() }, ); let rerun_analysis = create_action(move |_: &()| { async move { let _ = reqwasm::http::Request::get(&format!("/api/demos/{}/reanalyse", id())).send().await; } }); let map = move || match demo_info.get() { Some(v) => v.map.clone(), None => String::new(), }; let selected_tab = move || { let loc = leptos_router::use_location(); let loc_path = loc.pathname.get(); let trailing = loc_path.split('/').last(); trailing.unwrap_or("/").to_owned() }; let style = stylers::style! { "Demo", .analysis_bar { display: grid; grid-template-columns: auto 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; } }; view! {class = style,

Demo - { id } - { map }

} } #[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 team_display_func = |team: &[common::demo_analysis::ScoreBoardPlayer]| { team.iter() .map(|player| { view! { { player.name.clone() } { player.kills } { player.assists } { player.deaths } { player.damage } } }) .collect::>() }; view! {

Scoreboard

Loading Scoreboard data

} >

Team 1

{ move || { scoreboard_resource.get().map(|s| { let team = s.team1; team_display_func(&team) }) } }
Name Kills Assists Deaths Damage

Team 2

{ move || { scoreboard_resource.get().map(|s| { let team = s.team2; team_display_func(&team) }) } }
Name Kills Assists Deaths Damage
} } #[leptos::component] pub fn per_round() -> impl leptos::IntoView { view! {

Per Round

} }