feat: Ajout d'une animation de connexion avec spinner et feedback visuel
- Modal de progression pendant l'authentification SignalR - Messages dynamiques selon le contexte (connexion normale ou forcée) - Design cohérent avec la modal de déconnexion - Transitions fluides entre les étapes du processus - Amélioration de l'expérience utilisateur avec feedback continu
This commit is contained in:
56
renderer.js
56
renderer.js
@@ -150,11 +150,17 @@ async function handleLogin(e) {
|
||||
// Sauvegarder le terminal sélectionné pour la prochaine fois
|
||||
localStorage.setItem('last-terminal', terminal);
|
||||
|
||||
// Afficher la modal de progression de connexion
|
||||
showLoginProgress(forceDisconnect);
|
||||
|
||||
// Désactiver le bouton pendant la connexion
|
||||
loginBtn.disabled = true;
|
||||
loginBtn.textContent = forceDisconnect ? 'Reconnexion...' : 'Connexion en cours...';
|
||||
errorDiv.textContent = '';
|
||||
|
||||
// Attendre un peu pour que l'animation soit visible
|
||||
await new Promise(resolve => setTimeout(resolve, 300));
|
||||
|
||||
try {
|
||||
// Préparer les credentials pour SignalR
|
||||
const credentials = {
|
||||
@@ -172,14 +178,27 @@ async function handleLogin(e) {
|
||||
currentCentres = result.centres;
|
||||
errorDiv.textContent = '';
|
||||
console.log('Connexion réussie:', currentAgent.name, 'sur le poste', terminal);
|
||||
|
||||
// Mettre à jour le message de progression
|
||||
updateLoginProgress('Chargement de vos centres...', 'Préparation de l\'interface...');
|
||||
|
||||
// Attendre encore un peu pour une transition fluide
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
|
||||
// Masquer la modal et afficher la page principale
|
||||
hideLoginProgress();
|
||||
showMainPage();
|
||||
} else {
|
||||
// Masquer la modal en cas d'échec
|
||||
hideLoginProgress();
|
||||
errorDiv.textContent = result.message || 'Identifiants incorrects';
|
||||
loginBtn.disabled = false;
|
||||
loginBtn.textContent = 'Se connecter';
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la connexion:', error);
|
||||
// Masquer la modal en cas d'erreur
|
||||
hideLoginProgress();
|
||||
errorDiv.textContent = 'Erreur de connexion. Veuillez réessayer.';
|
||||
loginBtn.disabled = false;
|
||||
loginBtn.textContent = 'Se connecter';
|
||||
@@ -294,6 +313,43 @@ function hideLogoutProgress() {
|
||||
buttons.style.display = 'flex';
|
||||
}
|
||||
|
||||
// Afficher l'animation de progression de connexion
|
||||
function showLoginProgress(isForceDisconnect = false) {
|
||||
const modal = document.getElementById('loginModal');
|
||||
const title = document.getElementById('loginTitle');
|
||||
const text = document.getElementById('loginText');
|
||||
const subtitle = document.getElementById('loginSubtitle');
|
||||
|
||||
// Afficher la modal
|
||||
modal.classList.add('active');
|
||||
|
||||
// Adapter les textes selon le type de connexion
|
||||
if (isForceDisconnect) {
|
||||
title.textContent = 'Reconnexion en cours...';
|
||||
text.textContent = 'Déconnexion de la session précédente';
|
||||
subtitle.textContent = 'Puis authentification...';
|
||||
} else {
|
||||
title.textContent = 'Connexion en cours...';
|
||||
text.textContent = 'Authentification auprès du serveur';
|
||||
subtitle.textContent = 'Veuillez patienter...';
|
||||
}
|
||||
}
|
||||
|
||||
// Mettre à jour le texte de progression de connexion
|
||||
function updateLoginProgress(text, subtitle) {
|
||||
const textElement = document.getElementById('loginText');
|
||||
const subtitleElement = document.getElementById('loginSubtitle');
|
||||
|
||||
if (textElement) textElement.textContent = text;
|
||||
if (subtitleElement) subtitleElement.textContent = subtitle;
|
||||
}
|
||||
|
||||
// Masquer l'animation de progression de connexion
|
||||
function hideLoginProgress() {
|
||||
const modal = document.getElementById('loginModal');
|
||||
modal.classList.remove('active');
|
||||
}
|
||||
|
||||
// === GESTION DES PAGES ===
|
||||
function showLoginPage() {
|
||||
document.getElementById('loginPage').classList.add('active');
|
||||
|
||||
Reference in New Issue
Block a user