probably the last change until i move to nextjs
This commit is contained in:
@@ -251,8 +251,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.search-container button {
|
.search-container button {
|
||||||
background-color: transparent;
|
border: 0;
|
||||||
border: 1px solid currentColor;
|
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
outline: none;
|
outline: none;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|||||||
@@ -114,6 +114,11 @@
|
|||||||
gap: 6px;
|
gap: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.All {
|
||||||
|
color: var(--fg);
|
||||||
|
background-color: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
.Online {
|
.Online {
|
||||||
color: var(--online);
|
color: var(--online);
|
||||||
background-color: var(--online-bg);
|
background-color: var(--online-bg);
|
||||||
|
|||||||
@@ -62,3 +62,8 @@ pub async fn validate_session(id: String) -> bool {
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[server]
|
||||||
|
pub async fn check_validate_session(id: String) -> Result<bool, ServerFnError> {
|
||||||
|
Ok(validate_session(id).await)
|
||||||
|
}
|
||||||
|
|||||||
+5
-5
@@ -98,11 +98,11 @@ pub fn Dashboard() -> Element {
|
|||||||
|
|
||||||
placeholder: "Search servers by name, location, or IP..." }
|
placeholder: "Search servers by name, location, or IP..." }
|
||||||
}
|
}
|
||||||
button { class: "fg", "All (4)" }
|
button { class: "All", "All (4)" }
|
||||||
button { class: "online", "Online (3)" }
|
button { class: "Online", "Online (3)" }
|
||||||
button { class: "issues", "Warning (1)" }
|
button { class: "Warning", "Warning (1)" }
|
||||||
button { class: "ram", "Offline (1)" }
|
button { class: "Offline", "Offline (1)" }
|
||||||
button { class: "cpu", "Maintenance (1)" }
|
button { class: "Maintenance", "Maintenance (1)" }
|
||||||
}
|
}
|
||||||
|
|
||||||
div { class: "server-container",
|
div { class: "server-container",
|
||||||
|
|||||||
+22
-1
@@ -1,6 +1,9 @@
|
|||||||
use dioxus::prelude::*;
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
use crate::{backend, utils};
|
use crate::{
|
||||||
|
backend::{self},
|
||||||
|
utils::{self},
|
||||||
|
};
|
||||||
|
|
||||||
const LOGIN_CSS: Asset = asset!("/assets/styles/login.css");
|
const LOGIN_CSS: Asset = asset!("/assets/styles/login.css");
|
||||||
|
|
||||||
@@ -9,6 +12,24 @@ pub fn Login() -> Element {
|
|||||||
let username = use_signal(|| String::new());
|
let username = use_signal(|| String::new());
|
||||||
let password = use_signal(|| String::new());
|
let password = use_signal(|| String::new());
|
||||||
let error: Signal<Option<String>> = use_signal(|| None);
|
let error: Signal<Option<String>> = use_signal(|| None);
|
||||||
|
let session = utils::use_session();
|
||||||
|
|
||||||
|
// Check for existing session on mount
|
||||||
|
use_effect({
|
||||||
|
let session = session.clone();
|
||||||
|
move || {
|
||||||
|
let session = session.clone();
|
||||||
|
spawn(async move {
|
||||||
|
// Optional: verify with the server if session is actually valid
|
||||||
|
if backend::auth::check_validate_session(session.get_id())
|
||||||
|
.await
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
utils::redirect("/dashboard");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let is_disabled = {
|
let is_disabled = {
|
||||||
let username = username.clone();
|
let username = username.clone();
|
||||||
|
|||||||
+23
-1
@@ -66,6 +66,7 @@ pub fn redirect(target: &str) {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Session(Signal<String>);
|
pub struct Session(Signal<String>);
|
||||||
|
|
||||||
pub fn use_session() -> Session {
|
pub fn use_session() -> Session {
|
||||||
@@ -73,6 +74,10 @@ pub fn use_session() -> Session {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Session {
|
impl Session {
|
||||||
|
pub fn get_id(&self) -> String {
|
||||||
|
self.0.read().clone()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn use_servers(&self) -> (Signal<Vec<Server>>, Signal<String>) {
|
pub fn use_servers(&self) -> (Signal<Vec<Server>>, Signal<String>) {
|
||||||
let query = use_signal(|| String::new());
|
let query = use_signal(|| String::new());
|
||||||
let servers = use_signal(|| Vec::new());
|
let servers = use_signal(|| Vec::new());
|
||||||
@@ -83,7 +88,7 @@ impl Session {
|
|||||||
let mut servers = servers.clone();
|
let mut servers = servers.clone();
|
||||||
|
|
||||||
spawn(async move {
|
spawn(async move {
|
||||||
if let Ok(v) = backend::get_servers(id.read().clone(), query_value).await {
|
if let Ok(v) = request(backend::get_servers(id.read().clone(), query_value).await) {
|
||||||
servers.set(v);
|
servers.set(v);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -92,3 +97,20 @@ impl Session {
|
|||||||
(servers, query)
|
(servers, query)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn request<T>(o: Result<T, ServerFnError>) -> Result<T, ServerFnError> {
|
||||||
|
match o {
|
||||||
|
Err(e) => match e {
|
||||||
|
ServerFnError::ServerError(e) => {
|
||||||
|
if e == "Invalid session" {
|
||||||
|
redirect("/");
|
||||||
|
Err(ServerFnError::ServerError(e))
|
||||||
|
} else {
|
||||||
|
Err(ServerFnError::ServerError(e))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => Err(e),
|
||||||
|
},
|
||||||
|
_ => o,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user