JJ Colocate

This commit is contained in:
2025-06-30 14:23:20 -04:00
parent 360fa53439
commit 24abf5607f
77 changed files with 5700 additions and 5700 deletions

View File

@@ -1,12 +1,12 @@
use crate::components::{MediaGrid, Search};
use dioxus::prelude::*;
#[component]
pub fn Home() -> Element {
let query = use_signal(|| "".to_string());
rsx! {
Search { query }
MediaGrid { query: query.cloned() }
}
}
use crate::components::{MediaGrid, Search};
use dioxus::prelude::*;
#[component]
pub fn Home() -> Element {
let query = use_signal(|| "".to_string());
rsx! {
Search { query }
MediaGrid { query: query.cloned() }
}
}

View File

@@ -1,78 +1,78 @@
use dioxus::prelude::*;
use tonic::IntoRequest;
use crate::{
components::{basic::Input, Notif, NotifType},
contexts::AuthContext,
rpc::{aoba::Credentials, get_auth_rpc_client},
};
#[component]
pub fn Login() -> Element {
let username = use_signal(|| "".to_string());
let password = use_signal(|| "".to_string());
let mut error: Signal<Option<String>> = use_signal(|| None);
let mut auth_context = use_context::<AuthContext>();
let login = move |e: Event<MouseData>| {
e.prevent_default();
if username.cloned().is_empty() || password.cloned().is_empty() {
error.set(Some("Username and Password are required".into()));
return;
}
spawn(async move {
let mut auth = get_auth_rpc_client();
let result = auth
.login(
Credentials {
user: username.cloned(),
password: password.cloned(),
}
.into_request(),
)
.await;
match result {
Ok(res) => {
match res.into_inner().result.unwrap() {
crate::rpc::aoba::login_response::Result::Jwt(jwt) => {
auth_context.login(jwt.token);
}
crate::rpc::aoba::login_response::Result::Error(login_error) => {
auth_context.logout();
error.set(Some(login_error.message));
}
};
}
Err(_err) => {
auth_context.logout();
}
}
});
};
rsx! {
div { id: "centralModal",
if let Some(err) = error.cloned() {
Notif { r#type: NotifType::Error, message: err }
}
form {
Input {
r#type: "text",
name: "username",
label: "Username",
value: username,
required: true,
}
Input {
r#type: "password",
name: "password",
label: "Password",
value: password,
required: true,
}
button { onclick: login, "Login!" }
}
}
}
}
use dioxus::prelude::*;
use tonic::IntoRequest;
use crate::{
components::{basic::Input, Notif, NotifType},
contexts::AuthContext,
rpc::{aoba::Credentials, get_auth_rpc_client},
};
#[component]
pub fn Login() -> Element {
let username = use_signal(|| "".to_string());
let password = use_signal(|| "".to_string());
let mut error: Signal<Option<String>> = use_signal(|| None);
let mut auth_context = use_context::<AuthContext>();
let login = move |e: Event<MouseData>| {
e.prevent_default();
if username.cloned().is_empty() || password.cloned().is_empty() {
error.set(Some("Username and Password are required".into()));
return;
}
spawn(async move {
let mut auth = get_auth_rpc_client();
let result = auth
.login(
Credentials {
user: username.cloned(),
password: password.cloned(),
}
.into_request(),
)
.await;
match result {
Ok(res) => {
match res.into_inner().result.unwrap() {
crate::rpc::aoba::login_response::Result::Jwt(jwt) => {
auth_context.login(jwt.token);
}
crate::rpc::aoba::login_response::Result::Error(login_error) => {
auth_context.logout();
error.set(Some(login_error.message));
}
};
}
Err(_err) => {
auth_context.logout();
}
}
});
};
rsx! {
div { id: "centralModal",
if let Some(err) = error.cloned() {
Notif { r#type: NotifType::Error, message: err }
}
form {
Input {
r#type: "text",
name: "username",
label: "Username",
value: username,
required: true,
}
Input {
r#type: "password",
name: "password",
label: "Password",
value: password,
required: true,
}
button { onclick: login, "Login!" }
}
}
}
}

View File

@@ -1,7 +1,7 @@
mod home;
mod login;
pub use home::*;
pub use login::*;
mod settings;
pub use settings::Settings;
mod home;
mod login;
pub use home::*;
pub use login::*;
mod settings;
pub use settings::Settings;

View File

@@ -1,31 +1,31 @@
use dioxus::prelude::*;
use crate::rpc::get_rpc_client;
#[component]
pub fn Settings() -> Element {
let dst = use_resource(async move || {
let result = get_rpc_client().get_share_x_destination(()).await;
if let Ok(d) = result {
if let Some(r) = d.into_inner().dst_result {
return match r {
crate::rpc::aoba::share_x_response::DstResult::Destination(json) => json,
crate::rpc::aoba::share_x_response::DstResult::Error(err) => err,
};
}
return "No Result".to_string();
}
let err = result.err().unwrap();
let status = err.message();
return format!("Failed to load config: {status}").to_string();
});
let d = dst.cloned().unwrap_or("".to_string());
rsx! {
"this is settings"
div {
pre { class: "codeSelect", "{d}" }
}
}
}
use dioxus::prelude::*;
use crate::rpc::get_rpc_client;
#[component]
pub fn Settings() -> Element {
let dst = use_resource(async move || {
let result = get_rpc_client().get_share_x_destination(()).await;
if let Ok(d) = result {
if let Some(r) = d.into_inner().dst_result {
return match r {
crate::rpc::aoba::share_x_response::DstResult::Destination(json) => json,
crate::rpc::aoba::share_x_response::DstResult::Error(err) => err,
};
}
return "No Result".to_string();
}
let err = result.err().unwrap();
let status = err.message();
return format!("Failed to load config: {status}").to_string();
});
let d = dst.cloned().unwrap_or("".to_string());
rsx! {
"this is settings"
div {
pre { class: "codeSelect", "{d}" }
}
}
}