semi working backend (it works but not really usable)

This commit is contained in:
2025-07-13 00:38:17 +02:00
parent 5711f84172
commit c2c7454cd4
5 changed files with 61 additions and 12 deletions
+6 -1
View File
@@ -1 +1,6 @@
// use dioxus::prelude::*; use dioxus::prelude::*;
#[server]
pub async fn log_in(username: String, password: String) -> Result<String, ServerFnError> {
Ok(format!("{username}@{password}"))
}
+45 -6
View File
@@ -1,16 +1,48 @@
use dioxus::prelude::*; use dioxus::prelude::*;
use crate::Route; use crate::{backend, utils};
const LOGIN_CSS: Asset = asset!("/assets/styles/login.css"); const LOGIN_CSS: Asset = asset!("/assets/styles/login.css");
#[component] #[component]
pub fn Login() -> Element { pub fn Login() -> Element {
let username = use_signal(|| String::new());
let password = use_signal(|| String::new());
let is_disabled = {
let username = username.clone();
let password = password.clone();
move || username().is_empty() || password().is_empty()
};
let log_in = {
let username = username.clone();
let password = password.clone();
move || async move {
if username().is_empty() || password().is_empty() {
return;
}
match backend::log_in(username.read().clone(), password.read().clone()).await {
Ok(id) => {
utils::set_cookie("session_id", &id);
utils::redirect("/dashboard");
}
Err(_) => {}
}
}
};
rsx! { rsx! {
document::Link { rel: "stylesheet", href: LOGIN_CSS } document::Link { rel: "stylesheet", href: LOGIN_CSS }
div { div {
id: "login_wrapper", id: "login_wrapper",
onkeypress: move |e: Event<KeyboardData>| async move {
if e.key() == Key::Enter {
log_in().await;
}
},
tabindex: "0",
img { img {
id: "background_img", id: "background_img",
@@ -23,16 +55,23 @@ pub fn Login() -> Element {
div { div {
p { "Username" } p { "Username" }
input { class: "field" } input { onchange: {let mut username = username.clone(); move |e: Event<FormData>| {username.set(e.value())}}, class: "field" }
} }
div{ div{
p { "Password" } p { "Password" }
input { class: "field" } input {
class: "field",
onchange: {
let mut password = password.clone();
move |e: Event<FormData>| {password.set(e.value())}
},
}
} }
Link { button {
to: Route::Dashboard { }, disabled: is_disabled(),
button { "Login" } onclick: move |_| log_in(),
"Login"
} }
} }
} }
+2 -2
View File
@@ -1,9 +1,9 @@
mod backend; mod backend;
mod components; mod components;
mod cookie;
mod dashboard; mod dashboard;
mod login; mod login;
mod settings; mod settings;
mod utils;
use dioxus::prelude::*; use dioxus::prelude::*;
use web_sys::window; use web_sys::window;
@@ -38,7 +38,7 @@ fn App() -> Element {
use_effect({ use_effect({
let mut theme = theme.clone(); let mut theme = theme.clone();
move || { move || {
theme.set(cookie::get_cookie("theme").unwrap_or_default()); theme.set(utils::get_cookie("theme").unwrap_or_default());
} }
}); });
+3 -3
View File
@@ -1,6 +1,6 @@
use dioxus::prelude::*; use dioxus::prelude::*;
use crate::{components::sidebar::SideBar, cookie}; use crate::{components::sidebar::SideBar, utils};
pub enum Property { pub enum Property {
Dropdown(&'static [&'static str]), Dropdown(&'static [&'static str]),
@@ -44,10 +44,10 @@ pub fn Settings() -> Element {
} }
div { div {
id: "{name}", id: "{name}",
class: "dropdown", class: "dropdown dropdown-none",
for o in opts { for o in opts {
button { onclick: move |_| { button { onclick: move |_| {
cookie::set_cookie(name, &o); utils::set_cookie(name, &o);
if *needs_refresh { if *needs_refresh {
if let Some(win) = web_sys::window() { if let Some(win) = web_sys::window() {
win.location().reload().unwrap(); win.location().reload().unwrap();
+5
View File
@@ -1,3 +1,4 @@
use dioxus::prelude::use_navigator;
use wasm_bindgen::JsCast; use wasm_bindgen::JsCast;
use web_sys::{window, HtmlDocument}; use web_sys::{window, HtmlDocument};
@@ -35,3 +36,7 @@ pub fn get_cookie(name: &str) -> Option<String> {
} }
None None
} }
pub fn redirect(target: &str) {
use_navigator().push(target);
}