diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-11-14 19:49:52 -0500 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-11-14 19:49:52 -0500 |
commit | 4c0109a8c40012f75e3d0d900c0ef41893cfb4bb (patch) | |
tree | e0bf12ffbf5038963f6116250f04f9e820ff8927 | |
parent | d4650a3160d52d289686fb59efbf8f0a436b71eb (diff) |
Fetch table state from server
-rw-r--r-- | protocol/src/lib.rs | 4 | ||||
-rw-r--r-- | server/src/main.rs | 12 | ||||
-rw-r--r-- | webapp/src/components/app_context_provider.rs | 6 | ||||
-rw-r--r-- | webapp/src/components/table.rs | 22 | ||||
-rw-r--r-- | webapp/src/main.rs | 38 |
5 files changed, 60 insertions, 22 deletions
diff --git a/protocol/src/lib.rs b/protocol/src/lib.rs index 4b1bb06..4294e17 100644 --- a/protocol/src/lib.rs +++ b/protocol/src/lib.rs @@ -11,3 +11,7 @@ pub struct UserInfo { pub struct Table { pub id: Uuid, } + +#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug)] +pub struct TableView { +} diff --git a/server/src/main.rs b/server/src/main.rs index 3f464ac..9761afe 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -3,7 +3,7 @@ use uuid::Uuid; use auth::AuthenticatedSession; use axum::{ - extract::{Extension, Query}, + extract::{Extension, Query, Path}, response::Redirect, routing::{delete, get, post}, Json, Router, @@ -61,6 +61,7 @@ async fn main() { .route("/api/user/info", get(user_info)) .route("/api/table", post(create_table)) .route("/api/table", delete(leave_table)) + .route("/api/table/:id", get(get_table_state)) // .route("/api/user/table", get(user_table)) .route("/api/login", get(login)) .route(auth::LOGIN_CALLBACK, get(login_callback)) @@ -74,6 +75,15 @@ async fn main() { .unwrap(); } +async fn get_table_state( + session: AuthenticatedSession, + extension: ContextExtension, + Path(id): Path<Uuid> +) -> Result<(), BridgeError> { + info!("Getting table state for table {id:}"); + Ok(()) +} + async fn leave_table( session: AuthenticatedSession, extension: ContextExtension, diff --git a/webapp/src/components/app_context_provider.rs b/webapp/src/components/app_context_provider.rs index 19e7611..0b490fc 100644 --- a/webapp/src/components/app_context_provider.rs +++ b/webapp/src/components/app_context_provider.rs @@ -1,3 +1,4 @@ +use log::error; use crate::routing::Route; use gloo_net::http::Request; use log::info; @@ -26,13 +27,14 @@ pub struct AppContext { } impl AppContext { - fn spawn_async<F>(&self, f: F) + pub fn spawn_async<F>(&self, f: F) where F: Future<Output = Result<(), anyhow::Error>> + 'static, { let error = self.state.error.clone(); spawn_local(async move { if let Err(err) = f.await { + error!("Error occurred: {err:?}"); error.set(Some(ErrorInfoProperties { message: format!("Some error occured: {:?}", err), })); @@ -47,7 +49,7 @@ impl AppContext { pub fn error(&self) -> Option<&ErrorInfoProperties> { self.state.error.as_ref() } - + pub fn create_table(&self) { let user = self.state.user.clone(); let history = self.history.clone(); diff --git a/webapp/src/components/table.rs b/webapp/src/components/table.rs index 829441e..b8da804 100644 --- a/webapp/src/components/table.rs +++ b/webapp/src/components/table.rs @@ -1,3 +1,4 @@ +use log::info; use yew::prelude::*; use yew_router::prelude::*; @@ -6,21 +7,30 @@ use crate::use_app_context; #[function_component(Table)] pub fn table(props: &TableProps) -> Html { let ctx = use_app_context(); - let history = use_history().unwrap(); + + let table_state: UseStateHandle<Option<protocol::TableView>> = use_state(|| None); + { + let table_state = table_state.clone(); + let ctx = ctx.clone(); + ctx.spawn_async(async move { + info!("Getting table state"); + Err(anyhow::anyhow!("Not implemented yet")) + }); + } let leave_table = { let ctx = ctx.clone(); Callback::from(move |_| { - ctx.leave_table(); - }) + ctx.leave_table(); + }) }; html! { <> <p>{ format!("This is table {}", props.table.id) }</p> - <button onclick={leave_table}> - { "Leave table" } - </button> + <button onclick={leave_table}> + { "Leave table" } + </button> </> } } diff --git a/webapp/src/main.rs b/webapp/src/main.rs index 577b720..35e69fd 100644 --- a/webapp/src/main.rs +++ b/webapp/src/main.rs @@ -11,7 +11,7 @@ use components::{AppContext, AppContextProvider, ErrorInfo, Game, Table}; use gloo_net::http::Request; extern crate wee_alloc; pub mod routing; -use crate::{routing::Route, components::use_app_context}; +use crate::{components::use_app_context, routing::Route}; use uuid::Uuid; // Use `wee_alloc` as the global allocator. @@ -41,8 +41,6 @@ pub fn app() -> Html { fn home() -> Html { let ctx = use_app_context(); - info!("User: {:#?}", ctx.user()); - let user = match &ctx.user() { Some(userinfo) => html! { <p>{ format!("Logged in as {}", userinfo.username) }</p> @@ -56,28 +54,35 @@ fn home() -> Html { } let create_table = { - let ctx = ctx.clone(); - Callback::from(move |_| { - ctx.create_table(); - }) + let ctx = ctx.clone(); + Callback::from(move |_| { + ctx.create_table(); + }) }; + info!("home(): Error is {:?}", ctx.error()); + html! { - <> - if let Some(error) = &ctx.error() { - <ErrorInfo ..(*error).clone()/> - } <ul> <li>{ user }</li> <li><Link<Route> to={Route::Playground}>{ "Playground" }</Link<Route>></li> <li><button onclick={create_table}>{ "Create table" }</button></li> </ul> - </> + } +} + +#[function_component(Header)] +fn header() -> Html { + let ctx = use_app_context(); + html! { + if let Some(error) = &ctx.error() { + <ErrorInfo ..(*error).clone()/> + } } } fn switch(routes: &Route) -> Html { - match routes { + let main = match routes { Route::Home => html! { <Home/> }, Route::Playground => html! { <div class="game-layout"><Game /></div> @@ -85,6 +90,13 @@ fn switch(routes: &Route) -> Html { Route::Table { id } => html! { <Table table={ protocol::Table { id: *id } } /> }, + }; + + html! { + <> + <Header/> + { main } + </> } } |