sessions
This commit is contained in:
+30
-4
@@ -3,6 +3,8 @@ use std::str::FromStr;
|
||||
use wasm_bindgen::JsCast;
|
||||
use web_sys::{window, HtmlDocument};
|
||||
|
||||
use crate::{backend, components::server::Server};
|
||||
|
||||
pub fn set_cookie(name: &str, value: &str) {
|
||||
let Some(document) = window().and_then(|w| w.document()) else {
|
||||
return;
|
||||
@@ -38,10 +40,7 @@ pub fn get_cookie(name: &str) -> Option<String> {
|
||||
None
|
||||
}
|
||||
|
||||
pub fn use_cookie<T: FromStr + Default + std::fmt::Display + 'static>(
|
||||
name: &str,
|
||||
default: fn() -> T,
|
||||
) -> Signal<T> {
|
||||
pub fn use_cookie<T: FromStr + 'static>(name: &str, default: fn() -> T) -> Signal<T> {
|
||||
let name = name.to_string();
|
||||
let signal = use_signal(default);
|
||||
|
||||
@@ -66,3 +65,30 @@ pub fn redirect(target: &str) {
|
||||
.set_href(target)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
pub struct Session(Signal<String>);
|
||||
|
||||
pub fn use_session() -> Session {
|
||||
Session(use_cookie("session_id", || String::new()))
|
||||
}
|
||||
|
||||
impl Session {
|
||||
pub fn use_servers(&self) -> (Signal<Vec<Server>>, Signal<String>) {
|
||||
let query = use_signal(|| String::new());
|
||||
let servers = use_signal(|| Vec::new());
|
||||
let id = self.0.clone();
|
||||
|
||||
use_effect(move || {
|
||||
let query_value = query.read().clone();
|
||||
let mut servers = servers.clone();
|
||||
|
||||
spawn(async move {
|
||||
if let Ok(v) = backend::get_servers(id.read().clone(), query_value).await {
|
||||
servers.set(v);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
(servers, query)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user