summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-11-05 18:06:54 -0400
committerKjetil Orbekk <kj@orbekk.com>2022-11-05 18:37:09 -0400
commit50d6ef8ad0f344c9b510c6752119fa5983629d95 (patch)
treefedf2e0569750353a352500ac0ad85034828930d
parent2d9d37bd5e4770a05cae780f2113266f3fdd0915 (diff)
Add table view and go to table automatically
-rw-r--r--server/src/main.rs17
-rw-r--r--webapp/src/components.rs2
-rw-r--r--webapp/src/components/table.rs20
-rw-r--r--webapp/src/main.rs16
4 files changed, 52 insertions, 3 deletions
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! {
+ <>
+ <p>{ format!("This is table {}", props.table.id) }</p>
+ </>
+ }
+}
+
+#[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::<Rc<AppContext>>().unwrap();
+ info!("User: {:#?}", ctx.user);
+
let user = match &ctx.user {
Some(userinfo) => html! {
<p>{ format!("Logged in as {}", userinfo.username) }</p>
@@ -54,6 +58,11 @@ fn home() -> Html {
None => html! { <p><a href="/api/login">{ "Log in" }</a></p> },
};
+ 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! {
<div class="game-layout"><Game /></div>
},
+ Route::Table { id } => html! {
+ <Table table={ protocol::Table { id: *id } } />
+ },
}
}