summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-11-14 19:49:52 -0500
committerKjetil Orbekk <kj@orbekk.com>2022-11-14 19:49:52 -0500
commit4c0109a8c40012f75e3d0d900c0ef41893cfb4bb (patch)
treee0bf12ffbf5038963f6116250f04f9e820ff8927
parentd4650a3160d52d289686fb59efbf8f0a436b71eb (diff)
Fetch table state from server
-rw-r--r--protocol/src/lib.rs4
-rw-r--r--server/src/main.rs12
-rw-r--r--webapp/src/components/app_context_provider.rs6
-rw-r--r--webapp/src/components/table.rs22
-rw-r--r--webapp/src/main.rs38
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 }
+ </>
}
}