Added surrealDB connection and signin; #1
This commit is contained in:
parent
3d1a2e6117
commit
8bb1f62352
@ -14,6 +14,8 @@ 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"
|
leptos-use = "0.10.2"
|
||||||
|
serde = "1.0.196"
|
||||||
|
serde_json = "1.0.113"
|
||||||
|
|
||||||
# utils
|
# utils
|
||||||
# strum = { version = "0.25", features = ["derive", "strum_macros"] }
|
# strum = { version = "0.25", features = ["derive", "strum_macros"] }
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
|
use crate::util;
|
||||||
use leptos::*;
|
use leptos::*;
|
||||||
use leptos_router::*;
|
use leptos_router::*;
|
||||||
|
|
||||||
/// Navigation bar
|
/// Navigation bar
|
||||||
#[component]
|
#[component]
|
||||||
pub fn Navbar() -> impl IntoView {
|
pub fn Navbar() -> impl IntoView {
|
||||||
|
let websocket = expect_context::<util::surrealdb::SurrealContext>();
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
<div class="navbar">
|
<div class="navbar">
|
||||||
|
<p>{ move || websocket.ready_state.get().to_string()}</p>
|
||||||
<A href="/" active_class="route-active">Home</A>
|
<A href="/" active_class="route-active">Home</A>
|
||||||
<A href="/participants" active_class="route-active">Deelnemers</A>
|
<A href="/participants" active_class="route-active">Deelnemers</A>
|
||||||
<A href="/times" active_class="route-active">Tijden</A>
|
<A href="/times" active_class="route-active">Tijden</A>
|
||||||
|
@ -21,6 +21,7 @@ pub fn App() -> impl IntoView {
|
|||||||
util::surrealdb::init_surrealdb();
|
util::surrealdb::init_surrealdb();
|
||||||
|
|
||||||
let websocket = expect_context::<util::surrealdb::SurrealContext>();
|
let websocket = expect_context::<util::surrealdb::SurrealContext>();
|
||||||
|
let websocket2 = websocket.clone();
|
||||||
let participants = use_context::<util::surrealdb::ParticipantsContext>()
|
let participants = use_context::<util::surrealdb::ParticipantsContext>()
|
||||||
.expect("Could not find participants context");
|
.expect("Could not find participants context");
|
||||||
|
|
||||||
@ -59,8 +60,9 @@ pub fn App() -> impl IntoView {
|
|||||||
<Router>
|
<Router>
|
||||||
<components::navbar::Navbar />
|
<components::navbar::Navbar />
|
||||||
<p>{websocket.message}</p>
|
<p>{websocket.message}</p>
|
||||||
<p>{ format!("{:?}", participants.0.get() )}</p>
|
<p>{ move || format!("{:?}", participants.0.get() )}</p>
|
||||||
<button on:click=move |_| { websocket.send("BOE!") }>"Test Message"</button>
|
<button on:click=move |_| { websocket.signin() }>"Test Message"</button>
|
||||||
|
<button on:click=move |_| { websocket2.send("{ \"id\": 1, \"method\": \"create\", \"params\": [ \"person\", { \"name\": \"Mary Doe\" } ] }") }>"Test Message"</button>
|
||||||
<main>
|
<main>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" view=Home />
|
<Route path="/" view=Home />
|
||||||
|
@ -1,7 +1,30 @@
|
|||||||
use leptos::*;
|
use leptos::*;
|
||||||
use leptos_use::{core::ConnectionReadyState, use_websocket, UseWebsocketReturn};
|
use leptos_use::{core::ConnectionReadyState, use_websocket, UseWebsocketReturn};
|
||||||
|
use serde::Serialize;
|
||||||
|
use serde_json::json;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct SurrealRequest {
|
||||||
|
id: u32,
|
||||||
|
method: String,
|
||||||
|
params: Vec<SurrealParams>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
enum SurrealParams {
|
||||||
|
Participant,
|
||||||
|
SigninParam(SigninParam),
|
||||||
|
String(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct SigninParam {
|
||||||
|
user: String,
|
||||||
|
pass: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub enum HourKind {
|
pub enum HourKind {
|
||||||
A,
|
A,
|
||||||
@ -30,17 +53,50 @@ pub struct ParticipantsContext(pub ReadSignal<Vec<Participant>>);
|
|||||||
pub struct SurrealContext {
|
pub struct SurrealContext {
|
||||||
pub message: Signal<Option<String>>,
|
pub message: Signal<Option<String>>,
|
||||||
send: Rc<dyn Fn(&str)>,
|
send: Rc<dyn Fn(&str)>,
|
||||||
|
pub ready_state: Signal<ConnectionReadyState>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SurrealContext {
|
impl SurrealContext {
|
||||||
pub fn new(message: Signal<Option<String>>, send: Rc<dyn Fn(&str)>) -> Self {
|
pub fn new(
|
||||||
Self { message, send }
|
message: Signal<Option<String>>,
|
||||||
|
send: Rc<dyn Fn(&str)>,
|
||||||
|
ready_state: Signal<ConnectionReadyState>,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
message,
|
||||||
|
send,
|
||||||
|
ready_state,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn send(&self, message: &str) {
|
pub fn send(&self, message: &str) {
|
||||||
(self.send)(message)
|
(self.send)(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn signin(&self) {
|
||||||
|
let request = SurrealRequest {
|
||||||
|
id: 1,
|
||||||
|
method: String::from("signin"),
|
||||||
|
params: vec![SurrealParams::SigninParam(SigninParam {
|
||||||
|
user: String::from("root"),
|
||||||
|
pass: String::from("root"),
|
||||||
|
})],
|
||||||
|
};
|
||||||
|
|
||||||
|
self.send(&json!(request).to_string());
|
||||||
|
|
||||||
|
let request = SurrealRequest {
|
||||||
|
id: 1,
|
||||||
|
method: String::from("use"),
|
||||||
|
params: vec![
|
||||||
|
SurrealParams::String(String::from("wrb")),
|
||||||
|
SurrealParams::String(String::from("timings")),
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
self.send(&json!(request).to_string())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init_surrealdb() {
|
pub fn init_surrealdb() {
|
||||||
@ -49,7 +105,7 @@ pub fn init_surrealdb() {
|
|||||||
message,
|
message,
|
||||||
send,
|
send,
|
||||||
..
|
..
|
||||||
} = use_websocket("wss://echo.websocket.events/");
|
} = use_websocket("ws://localhost:80/rpc");
|
||||||
|
|
||||||
let (participants, _set_participants) = create_signal::<Vec<Participant>>(vec![Participant {
|
let (participants, _set_participants) = create_signal::<Vec<Participant>>(vec![Participant {
|
||||||
name: "User1".to_string(),
|
name: "User1".to_string(),
|
||||||
@ -59,10 +115,10 @@ pub fn init_surrealdb() {
|
|||||||
},
|
},
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
provide_context(SurrealContext::new(message, Rc::new(send.clone())));
|
provide_context(SurrealContext::new(
|
||||||
|
message,
|
||||||
|
Rc::new(send.clone()),
|
||||||
|
ready_state,
|
||||||
|
));
|
||||||
provide_context(ParticipantsContext(participants));
|
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