use leptos::*; use leptos::Suspense; #[leptos::component] pub fn head_to_head() -> impl leptos::IntoView { let head_to_head_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/headtohead", id)) .send() .await .unwrap(); res.json::() .await .unwrap() }); let style = stylers::style! { "Head-to-Head-root", div { display: grid; } }; let matrix_view = move || head_to_head_resource.get().map(|r| view! { }); view! { class=style, Loading Head-to-Head data...

}>
{ matrix_view }
} } #[leptos::component] fn matrix(data: common::demo_analysis::HeadToHead) -> impl leptos::IntoView { let row_player_view = move || { data.row_players.iter().enumerate().map(|(idx, name)| { view! { {name} } }).collect::>() }; let column_player_view = move || { data.column_players.iter().enumerate().map(|(idx, name)| { view! { {name} } }).collect::>() }; let style = stylers::style! { "Head-to-Head-Matrix-Cell", .cell { display: grid; } .cell_back { grid-row: 1/3; grid-column: 1/3; background-color: var(--color-surface-a0); background-image: linear-gradient(to right top, var(--color-surface-a0) 50%, var(--color-surface-a10) 50%); } }; let entry_view = move || { data.entries.iter().enumerate().flat_map(|(row, row_data)| { row_data.iter().enumerate().map(move |(column, &(row_kills, column_kills))| { let entry = move || view! {
{ row_kills }
{ column_kills }
}; view! { class = style,
{ entry }
} }) }).collect::>() }; view! { { row_player_view } { column_player_view } { entry_view } } }