cards/client/src/components/game.rs

64 lines
2 KiB
Rust
Raw Normal View History

2024-08-26 02:37:09 -04:00
use crate::components::game::header::*;
2024-08-28 22:39:25 -04:00
use crate::components::game::views::judging::*;
use crate::components::game::views::playing::*;
2024-08-17 21:55:15 -04:00
use crate::components::websocket::WebSocketContext;
2024-08-09 01:21:04 -04:00
use leptos::*;
2024-08-21 22:25:33 -04:00
use leptos_use::core::ConnectionReadyState;
2024-08-09 02:57:27 -04:00
use lib::*;
2024-08-27 18:37:04 -04:00
pub mod cards;
2024-08-26 02:37:09 -04:00
pub mod header;
2024-08-28 22:39:25 -04:00
pub mod views;
2024-08-09 01:21:04 -04:00
#[component]
pub fn Game() -> impl IntoView {
2024-08-26 02:37:09 -04:00
// Websocket stuff
2024-08-17 21:55:15 -04:00
let websocket = expect_context::<WebSocketContext>();
2024-08-28 22:39:25 -04:00
let connected = move || websocket.ready_state.get() == ConnectionReadyState::Open;
2024-08-26 02:37:09 -04:00
// Incoming
2024-08-14 00:16:54 -04:00
let game_meta = expect_context::<ReadSignal<Option<GameStateMeta>>>();
2024-08-28 21:01:56 -04:00
let user_update = expect_context::<ReadSignal<Option<UserUpdate>>>();
2024-08-09 02:57:27 -04:00
2024-08-26 20:25:46 -04:00
// Signals //
let (judging, set_judging) = create_signal(false);
2024-08-20 22:25:39 -04:00
2024-08-28 21:01:56 -04:00
// Determine judging
create_effect(move |_| {
user_update.with(move |user_meta| {
if let Some(user_meta) = user_meta {
if let Some(game_meta) = game_meta() {
if user_meta.username == game_meta.czar {
set_judging(true);
} else {
set_judging(false);
}
}
}
})
});
2024-08-09 01:21:04 -04:00
view! {
<div class="my-2">
2024-08-26 02:37:09 -04:00
<h2 class="text-2xl">Game</h2>
2024-08-28 00:06:59 -04:00
<Show when=move || { connected() } fallback=|| view! { <p>"Disconnected."</p> }>
<Show
when=move || game_meta.get().is_some() && connected()
fallback=|| view! { "You are not in a game" }
>
2024-08-28 22:39:25 -04:00
<Header />
2024-08-28 00:06:59 -04:00
</Show>
2024-08-26 02:37:09 -04:00
2024-08-28 00:06:59 -04:00
// Judging view //
2024-08-28 21:13:26 -04:00
<Show when=move || { judging() && connected() && game_meta().is_some() }>
2024-08-28 22:39:25 -04:00
<JudgingView />
2024-08-28 00:06:59 -04:00
</Show>
2024-08-26 02:37:09 -04:00
2024-08-28 00:06:59 -04:00
// Playing view //
<Show when=move || game_meta.get().is_some() && connected() && !judging()>
2024-08-28 22:39:25 -04:00
<PlayingView />
2024-08-28 00:06:59 -04:00
</Show>
2024-08-26 02:37:09 -04:00
</Show>
2024-08-09 01:21:04 -04:00
</div>
}
}