feat(login): field-specific validation errors instead of generic message
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+17
-1
@@ -79,8 +79,17 @@ export async function render(container) {
|
|||||||
const username = form.username.value.trim();
|
const username = form.username.value.trim();
|
||||||
const password = form.password.value;
|
const password = form.password.value;
|
||||||
|
|
||||||
|
const usernameInput = form.querySelector('#username');
|
||||||
|
const passwordInput = form.querySelector('#password');
|
||||||
|
const usernameGroup = usernameInput.closest('.form-group');
|
||||||
|
const passwordGroup = passwordInput.closest('.form-group');
|
||||||
|
|
||||||
|
usernameGroup.classList.toggle('form-group--error', !username);
|
||||||
|
passwordGroup.classList.toggle('form-group--error', !password);
|
||||||
|
|
||||||
if (!username || !password) {
|
if (!username || !password) {
|
||||||
showError(errorEl, t('common.allFieldsRequired'));
|
if (!username) usernameInput.focus();
|
||||||
|
else passwordInput.focus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,6 +116,13 @@ export async function render(container) {
|
|||||||
spinner.remove();
|
spinner.remove();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
form.querySelector('#username').addEventListener('input', () => {
|
||||||
|
form.querySelector('#username').closest('.form-group').classList.remove('form-group--error');
|
||||||
|
});
|
||||||
|
form.querySelector('#password').addEventListener('input', () => {
|
||||||
|
form.querySelector('#password').closest('.form-group').classList.remove('form-group--error');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function showError(el, message) {
|
function showError(el, message) {
|
||||||
|
|||||||
@@ -68,6 +68,16 @@
|
|||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Feld-Fehler-Zustand */
|
||||||
|
.form-group--error .input {
|
||||||
|
border-color: var(--color-danger);
|
||||||
|
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-danger) 20%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-group--error .label {
|
||||||
|
color: var(--color-danger);
|
||||||
|
}
|
||||||
|
|
||||||
.login-spinner {
|
.login-spinner {
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
|
|||||||
Reference in New Issue
Block a user