use leptos::*; #[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() }); view! {

Scoreboard

Loading Scoreboard data

} >
} } fn damage_sorting(p1: &common::demo_analysis::ScoreBoardPlayer, p2: &common::demo_analysis::ScoreBoardPlayer) -> core::cmp::Ordering { p2.damage.cmp(&p1.damage) } fn kill_sorting(p1: &common::demo_analysis::ScoreBoardPlayer, p2: &common::demo_analysis::ScoreBoardPlayer) -> core::cmp::Ordering { p2.kills.cmp(&p1.kills) } fn assists_sorting(p1: &common::demo_analysis::ScoreBoardPlayer, p2: &common::demo_analysis::ScoreBoardPlayer) -> core::cmp::Ordering { p2.assists.cmp(&p1.assists) } fn deaths_sorting(p1: &common::demo_analysis::ScoreBoardPlayer, p2: &common::demo_analysis::ScoreBoardPlayer) -> core::cmp::Ordering { p2.deaths.cmp(&p1.deaths) } #[leptos::component] fn team_scoreboard(info: Resource, team_name: String, part: fn(common::demo_analysis::ScoreBoard) -> Vec) -> impl IntoView { let (ordering, set_ordering) = create_signal:: core::cmp::Ordering>(damage_sorting); let style = stylers::style! { "Team-Scoreboard", tr:nth-child(even) { background-color: #dddddd; } th { padding-left: 10px; padding-right: 10px; } th:nth-child(1) { width: 200px; } }; view! { class = style,

{ team_name }

{ move || { let value = info.get().map(|v| part(v)); let mut players: Vec<_> = value.into_iter().flat_map(|v| v).collect(); let sorting = ordering.get(); players.sort_unstable_by(|p1, p2| sorting(p1, p2)); players.into_iter().map(|s| { view! { class=style, } }).collect::>() } }
Name Kills Assists Deaths Damage
{ s.name }{ s.kills }{ s.assists }{ s.deaths }{ s.damage }
} }