Fix server and username pre-population on login page

- Save credentials to LocalStorage on successful login when remember checkboxes are checked
- Save credentials immediately when input values change and remember is enabled
- Fix closure ownership issues with checkbox state in submit handler
- Ensure remembered values persist and pre-populate correctly on subsequent visits
- Address issue where values weren't saved if checkboxes defaulted to checked state

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Connor Johnstone
2025-09-13 18:19:16 -04:00
parent fad03f94f9
commit 9d84c380d1

View File

@@ -30,17 +30,31 @@ pub fn Login(props: &LoginProps) -> Html {
let on_server_url_change = {
let server_url = server_url.clone();
let remember_server = remember_server.clone();
Callback::from(move |e: Event| {
let target = e.target_unchecked_into::<HtmlInputElement>();
server_url.set(target.value());
let new_value = target.value();
server_url.set(new_value.clone());
// Save to localStorage immediately if remember is checked
if *remember_server {
let _ = LocalStorage::set("remembered_server_url", new_value);
}
})
};
let on_username_change = {
let username = username.clone();
let remember_username = remember_username.clone();
Callback::from(move |e: Event| {
let target = e.target_unchecked_into::<HtmlInputElement>();
username.set(target.value());
let new_value = target.value();
username.set(new_value.clone());
// Save to localStorage immediately if remember is checked
if *remember_username {
let _ = LocalStorage::set("remembered_username", new_value);
}
})
};
@@ -90,6 +104,8 @@ pub fn Login(props: &LoginProps) -> Html {
let password = password.clone();
let error_message = error_message.clone();
let is_loading = is_loading.clone();
let remember_server = remember_server.clone();
let remember_username = remember_username.clone();
let on_login = props.on_login.clone();
Callback::from(move |e: SubmitEvent| {
@@ -100,6 +116,8 @@ pub fn Login(props: &LoginProps) -> Html {
let password = (*password).clone();
let error_message = error_message.clone();
let is_loading = is_loading.clone();
let remember_server_value = *remember_server;
let remember_username_value = *remember_username;
let on_login = on_login.clone();
// Basic client-side validation
@@ -140,6 +158,14 @@ pub fn Login(props: &LoginProps) -> Html {
let _ = LocalStorage::set("user_preferences", &prefs_json);
}
// Save server URL and username to LocalStorage if remember checkboxes are checked
if remember_server_value {
let _ = LocalStorage::set("remembered_server_url", server_url.clone());
}
if remember_username_value {
let _ = LocalStorage::set("remembered_username", username.clone());
}
is_loading.set(false);
on_login.emit(token);
}