First try of making reactive state external using UseRw

This commit is contained in:
2023-08-09 22:54:32 +02:00
parent 2bbee1633f
commit 22ef914304
4 changed files with 60 additions and 36 deletions

View File

@@ -1,20 +1,27 @@
use dioxus::prelude::*;
use std::str::FromStr;
use std::sync::Arc;
use crate::app_settings::AppSettings;
use dioxus::prelude::*;
use dioxus_std::utils::rw::UseRw;
use crate::base::{AppSettings, Store};
use crate::components::avatar_selector::AvatarSelector;
use crate::components::header::Header;
use crate::matrix_client::{LoginStyle, MatrixClient};
turf::style_sheet!("src/components/login.scss");
pub fn Login(cx: Scope) -> Element {
let app_context = use_shared_state::<AppSettings>(cx).unwrap();
#[derive(Props)]
pub struct LoginProps<'a> {
pub store: &'a mut UseRw<Store>,
}
pub fn Login<'a>(cx: Scope<'a, LoginProps<'a>>) -> Element<'a> {
let app_context = use_shared_state::<AppSettings>(cx).unwrap();
let invalid_login = use_state(cx, || false);
let login = use_ref(cx, || Login::new());
let invalid_login = use_state(cx, || false);
let store = cx.props.store.clone();
let empty_placeholder = String::from("");
@@ -26,22 +33,19 @@ pub fn Login(cx: Scope) -> Element {
let run_matrix_client = move |_| {
cx.spawn({
to_owned![app_context, invalid_login, login];
to_owned![app_context, invalid_login, login, store];
let homeserver_url = login.read().homeserver_url.clone().unwrap();
let username = login.read().email.clone().unwrap();
let password = login.read().password.clone().unwrap();
async move {
let mut context = app_context.write();
let requester = MatrixClient::spawn(homeserver_url).await;
let requester = MatrixClient::spawn(homeserver_url, store).await;
requester.init();
match requester.login(LoginStyle::Password(username, password)) {
Ok(_) => {
println!("successfully logged");
context.store.is_logged = true;
}
Err(err) => {
println!("Error during login: {err}");
@@ -49,7 +53,7 @@ pub fn Login(cx: Scope) -> Element {
}
}
context.requester = Some(Arc::new(requester));
app_context.write().requester = Some(Arc::new(requester));
}
});
};