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
| Name |
Kills |
Assists |
Deaths |
Damage |
{
move || {
scoreboard_resource.get().map(|s| {
let team = s.team1;
team_display_func(&team)
})
}
}
Team 2
| Name |
Kills |
Assists |
Deaths |
Damage |
{
move || {
scoreboard_resource.get().map(|s| {
let team = s.team2;
team_display_func(&team)
})
}
}
}
}
#[leptos::component]
pub fn per_round() -> impl leptos::IntoView {
view! {
Per Round
}
}