feat: add input sanitizer and character constraints hint for offline username
This commit is contained in:
parent
c603d59908
commit
8ff958743c
1 changed files with 24 additions and 12 deletions
|
|
@ -72,12 +72,7 @@ impl Component for OnboardingAccount {
|
||||||
.primary()
|
.primary()
|
||||||
.large()
|
.large()
|
||||||
.on_press(move |_| {
|
.on_press(move |_| {
|
||||||
let name_val = offline_name_read.read().trim().to_string();
|
let target = sanitize_offline_username(&offline_name_read.read());
|
||||||
let target = if name_val.is_empty() {
|
|
||||||
"Player".to_string()
|
|
||||||
} else {
|
|
||||||
name_val
|
|
||||||
};
|
|
||||||
add_offline_click.mutate(AddOfflineAccountKeys {
|
add_offline_click.mutate(AddOfflineAccountKeys {
|
||||||
username: target,
|
username: target,
|
||||||
});
|
});
|
||||||
|
|
@ -85,6 +80,12 @@ impl Component for OnboardingAccount {
|
||||||
})
|
})
|
||||||
.text("Set & Play"),
|
.text("Set & Play"),
|
||||||
),
|
),
|
||||||
|
)
|
||||||
|
.child(
|
||||||
|
label()
|
||||||
|
.text("3–16 characters (letters, numbers, underscore)")
|
||||||
|
.font_size(11.)
|
||||||
|
.color(colors::fg_secondary()),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.child(
|
.child(
|
||||||
|
|
@ -135,12 +136,7 @@ impl Component for OnboardingAccount {
|
||||||
|
|
||||||
let on_next = move |_| {
|
let on_next = move |_| {
|
||||||
if account_clone.is_none() || *is_editing_nav.read() {
|
if account_clone.is_none() || *is_editing_nav.read() {
|
||||||
let name_val = offline_name_nav.read().trim().to_string();
|
let target = sanitize_offline_username(&offline_name_nav.read());
|
||||||
let target = if name_val.is_empty() {
|
|
||||||
"Player".to_string()
|
|
||||||
} else {
|
|
||||||
name_val
|
|
||||||
};
|
|
||||||
add_offline_nav.mutate(AddOfflineAccountKeys {
|
add_offline_nav.mutate(AddOfflineAccountKeys {
|
||||||
username: target,
|
username: target,
|
||||||
});
|
});
|
||||||
|
|
@ -262,3 +258,19 @@ fn sign_in_card(
|
||||||
}))
|
}))
|
||||||
.into_element()
|
.into_element()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn sanitize_offline_username(input: &str) -> String {
|
||||||
|
let trimmed = input.trim();
|
||||||
|
let sanitized: String = trimmed
|
||||||
|
.chars()
|
||||||
|
.filter(|c| c.is_ascii_alphanumeric() || *c == '_')
|
||||||
|
.collect();
|
||||||
|
if sanitized.len() < 3 {
|
||||||
|
"Player".to_string()
|
||||||
|
} else if sanitized.len() > 16 {
|
||||||
|
sanitized[..16].to_string()
|
||||||
|
} else {
|
||||||
|
sanitized
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue