From 50d6ef8ad0f344c9b510c6752119fa5983629d95 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sat, 5 Nov 2022 18:06:54 -0400 Subject: Add table view and go to table automatically --- server/src/main.rs | 17 ++++++++++++++++- webapp/src/components.rs | 2 ++ webapp/src/components/table.rs | 20 ++++++++++++++++++++ webapp/src/main.rs | 16 ++++++++++++++-- 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 webapp/src/components/table.rs diff --git a/server/src/main.rs b/server/src/main.rs index eaf1379..3f464ac 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -5,7 +5,7 @@ use auth::AuthenticatedSession; use axum::{ extract::{Extension, Query}, response::Redirect, - routing::{get, post}, + routing::{delete, get, post}, Json, Router, }; use protocol::{Table, UserInfo}; @@ -60,6 +60,7 @@ async fn main() { let app = Router::new() .route("/api/user/info", get(user_info)) .route("/api/table", post(create_table)) + .route("/api/table", delete(leave_table)) // .route("/api/user/table", get(user_table)) .route("/api/login", get(login)) .route(auth::LOGIN_CALLBACK, get(login_callback)) @@ -73,6 +74,20 @@ async fn main() { .unwrap(); } +async fn leave_table( + session: AuthenticatedSession, + extension: ContextExtension, +) -> Result<(), BridgeError> { + sqlx::query!( + r#" + delete from table_players where player_id = $1 + "#, session.player_id + ) + .execute(&extension.db) + .await?; + Ok(()) +} + async fn create_table( session: AuthenticatedSession, extension: ContextExtension, diff --git a/webapp/src/components.rs b/webapp/src/components.rs index 60c310e..0326c09 100644 --- a/webapp/src/components.rs +++ b/webapp/src/components.rs @@ -11,6 +11,7 @@ mod hand; mod show_bid; mod trick_in_play; mod tricks_played; +mod table; pub use self::app_context_provider::*; pub use self::bidding::*; @@ -23,6 +24,7 @@ pub use self::show_bid::*; pub use self::trick_in_play::*; pub use self::tricks_played::*; pub use self::error_info::*; +pub use self::table::*; pub fn suit_css_class(suit: Suit) -> &'static str { match suit { diff --git a/webapp/src/components/table.rs b/webapp/src/components/table.rs new file mode 100644 index 0000000..8e8b5c8 --- /dev/null +++ b/webapp/src/components/table.rs @@ -0,0 +1,20 @@ +use yew::prelude::*; + +#[function_component(Table)] +pub fn table(props: &TableProps) -> Html { + // let leave_table = { + // Callback::from(move |_| { + // }); + // }; + + html! { + <> +

{ format!("This is table {}", props.table.id) }

+ + } +} + +#[derive(PartialEq, Properties, Clone)] +pub struct TableProps { + pub table: protocol::Table, +} diff --git a/webapp/src/main.rs b/webapp/src/main.rs index 4ba8e5f..b275b49 100644 --- a/webapp/src/main.rs +++ b/webapp/src/main.rs @@ -8,7 +8,7 @@ use yew_router::prelude::*; pub mod bridge_engine; pub mod card; pub mod components; -use components::{AppContextProvider, AppContext, Game, ErrorInfo}; +use components::{AppContextProvider, AppContext, Game, ErrorInfo, Table}; use gloo_net::http::Request; extern crate wee_alloc; @@ -16,12 +16,14 @@ extern crate wee_alloc; #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; #[derive(Clone, Routable, PartialEq)] - + enum Route { #[at("/")] Home, #[at("/playground")] Playground, + #[at("/table/:id")] + Table { id: Uuid, }, } fn main() { @@ -47,6 +49,8 @@ pub fn app() -> Html { fn home() -> Html { let ctx = use_context::>().unwrap(); + info!("User: {:#?}", ctx.user); + let user = match &ctx.user { Some(userinfo) => html! {

{ format!("Logged in as {}", userinfo.username) }

@@ -54,6 +58,11 @@ fn home() -> Html { None => html! {

{ "Log in" }

}, }; + if let Some(table) = ctx.user.as_ref().and_then(|u| u.table.as_ref() ) { + let history = use_history().unwrap(); + history.push(Route::Table { id: table.id }); + } + let create_table = Callback::from(|_| { wasm_bindgen_futures::spawn_local(async move { let response = Request::post("/api/table").send().await.unwrap(); @@ -82,6 +91,9 @@ fn switch(routes: &Route) -> Html { Route::Playground => html! {
}, + Route::Table { id } => html! { + + }, } } -- cgit v1.2.3