Defined Participants and first step to implement surrealdb
This commit is contained in:
parent
3cdbfe78f9
commit
3d1a2e6117
@ -13,6 +13,7 @@ leptos_router = { version = "0.6", features = ["csr"] }
|
|||||||
console_log = "1"
|
console_log = "1"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
console_error_panic_hook = "0.1"
|
console_error_panic_hook = "0.1"
|
||||||
|
leptos-use = "0.10.2"
|
||||||
|
|
||||||
# utils
|
# utils
|
||||||
# strum = { version = "0.25", features = ["derive", "strum_macros"] }
|
# strum = { version = "0.25", features = ["derive", "strum_macros"] }
|
||||||
|
@ -5,6 +5,7 @@ use leptos_router::*;
|
|||||||
// Modules
|
// Modules
|
||||||
mod components;
|
mod components;
|
||||||
mod pages;
|
mod pages;
|
||||||
|
mod util;
|
||||||
|
|
||||||
// Top-Level pages
|
// Top-Level pages
|
||||||
use crate::pages::home::Home;
|
use crate::pages::home::Home;
|
||||||
@ -17,6 +18,11 @@ use crate::pages::times;
|
|||||||
pub fn App() -> impl IntoView {
|
pub fn App() -> impl IntoView {
|
||||||
// Provides context that manages stylesheets, titles, meta tags, etc.
|
// Provides context that manages stylesheets, titles, meta tags, etc.
|
||||||
provide_meta_context();
|
provide_meta_context();
|
||||||
|
util::surrealdb::init_surrealdb();
|
||||||
|
|
||||||
|
let websocket = expect_context::<util::surrealdb::SurrealContext>();
|
||||||
|
let participants = use_context::<util::surrealdb::ParticipantsContext>()
|
||||||
|
.expect("Could not find participants context");
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
|
|
||||||
@ -52,6 +58,9 @@ pub fn App() -> impl IntoView {
|
|||||||
>
|
>
|
||||||
<Router>
|
<Router>
|
||||||
<components::navbar::Navbar />
|
<components::navbar::Navbar />
|
||||||
|
<p>{websocket.message}</p>
|
||||||
|
<p>{ format!("{:?}", participants.0.get() )}</p>
|
||||||
|
<button on:click=move |_| { websocket.send("BOE!") }>"Test Message"</button>
|
||||||
<main>
|
<main>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" view=Home />
|
<Route path="/" view=Home />
|
||||||
|
1
application/src/util/mod.rs
Normal file
1
application/src/util/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod surrealdb;
|
68
application/src/util/surrealdb.rs
Normal file
68
application/src/util/surrealdb.rs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
use leptos::*;
|
||||||
|
use leptos_use::{core::ConnectionReadyState, use_websocket, UseWebsocketReturn};
|
||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub enum HourKind {
|
||||||
|
A,
|
||||||
|
B,
|
||||||
|
C,
|
||||||
|
D,
|
||||||
|
Z,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct GroupKind {
|
||||||
|
hour: HourKind,
|
||||||
|
lane: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct Participant {
|
||||||
|
name: String,
|
||||||
|
group: GroupKind,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct ParticipantsContext(pub ReadSignal<Vec<Participant>>);
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct SurrealContext {
|
||||||
|
pub message: Signal<Option<String>>,
|
||||||
|
send: Rc<dyn Fn(&str)>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SurrealContext {
|
||||||
|
pub fn new(message: Signal<Option<String>>, send: Rc<dyn Fn(&str)>) -> Self {
|
||||||
|
Self { message, send }
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn send(&self, message: &str) {
|
||||||
|
(self.send)(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init_surrealdb() {
|
||||||
|
let UseWebsocketReturn {
|
||||||
|
ready_state,
|
||||||
|
message,
|
||||||
|
send,
|
||||||
|
..
|
||||||
|
} = use_websocket("wss://echo.websocket.events/");
|
||||||
|
|
||||||
|
let (participants, _set_participants) = create_signal::<Vec<Participant>>(vec![Participant {
|
||||||
|
name: "User1".to_string(),
|
||||||
|
group: GroupKind {
|
||||||
|
hour: HourKind::A,
|
||||||
|
lane: 1,
|
||||||
|
},
|
||||||
|
}]);
|
||||||
|
|
||||||
|
provide_context(SurrealContext::new(message, Rc::new(send.clone())));
|
||||||
|
provide_context(ParticipantsContext(participants));
|
||||||
|
|
||||||
|
let _status = move || ready_state.get().to_string();
|
||||||
|
|
||||||
|
let _connected = move || ready_state.get() == ConnectionReadyState::Open;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user