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,
}
})
}).collect::>()
};
view! {
{ row_player_view }
{ column_player_view }
{ entry_view }
}
}