**Motivations :** - Erreur de redéclaration des variables 'attempts' et 'maxAttempts' dans birthday-setup.ts - Cela causait une erreur 500 lors du chargement du fichier TypeScript **Modifications :** - Renommage des variables dans la deuxième boucle d'attente pour éviter les conflits - Utilisation de 'blockHeightAttempts' et 'blockHeightMaxAttempts' pour la boucle d'attente de la hauteur de bloc **Pages affectées :** - src/pages/birthday-setup/birthday-setup.ts (correction des variables redéclarées)
145 lines
5.8 KiB
TypeScript
145 lines
5.8 KiB
TypeScript
/**
|
|
* Page de configuration de la date anniversaire
|
|
* Mise à jour de la date anniversaire et scan des blocs
|
|
*/
|
|
|
|
document.addEventListener('DOMContentLoaded', async () => {
|
|
console.log('🎂 Birthday setup page loaded');
|
|
|
|
const status = document.getElementById('status') as HTMLDivElement;
|
|
const progressBar = document.getElementById('progressBar') as HTMLDivElement;
|
|
const continueBtn = document.getElementById('continueBtn') as HTMLButtonElement;
|
|
|
|
try {
|
|
// Étape 1: Connexion aux relais
|
|
updateStatus('🌐 Connexion aux relais...', 'loading');
|
|
updateProgress(20);
|
|
|
|
try {
|
|
console.log('🔄 Importing services...');
|
|
const serviceModule = await import('../../services/service');
|
|
console.log('✅ Service module imported:', Object.keys(serviceModule));
|
|
|
|
// La classe Services est exportée par défaut
|
|
const Services = serviceModule.default;
|
|
|
|
if (!Services) {
|
|
throw new Error('Services class not found in default export');
|
|
}
|
|
console.log('🔄 Waiting for services to be ready...');
|
|
|
|
// Attendre que les services soient initialisés
|
|
let attempts = 0;
|
|
const maxAttempts = 30;
|
|
const delayMs = 2000;
|
|
|
|
let services;
|
|
while (attempts < maxAttempts) {
|
|
try {
|
|
console.log(`🔄 Attempting to get services (attempt ${attempts + 1}/${maxAttempts})...`);
|
|
services = await Services.getInstance();
|
|
console.log('✅ Services initialized successfully');
|
|
break;
|
|
} catch (error) {
|
|
console.log(`⏳ Services not ready yet (attempt ${attempts + 1}/${maxAttempts}):`, (error as Error).message);
|
|
attempts++;
|
|
if (attempts >= maxAttempts) {
|
|
throw new Error(`Services failed to initialize after ${maxAttempts} attempts.`);
|
|
}
|
|
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
}
|
|
}
|
|
|
|
if (!services) {
|
|
throw new Error('Services not initialized');
|
|
}
|
|
|
|
// Connexion aux relais
|
|
await services.connectAllRelays();
|
|
console.log('✅ Relays connected successfully');
|
|
|
|
// Étape 2: Mise à jour de la date anniversaire
|
|
updateStatus('🎂 Mise à jour de la date anniversaire...', 'loading');
|
|
updateProgress(40);
|
|
|
|
// Les relais sont déjà prêts après connectAllRelays
|
|
console.log('✅ Communication handshake completed');
|
|
|
|
// Attendre que la hauteur de bloc soit définie avant de mettre à jour la date anniversaire
|
|
updateStatus('⏳ Attente de la synchronisation avec le réseau...', 'loading');
|
|
let blockHeightAttempts = 0;
|
|
const blockHeightMaxAttempts = 30;
|
|
while (blockHeightAttempts < blockHeightMaxAttempts) {
|
|
const blockHeight = services.getCurrentBlockHeight();
|
|
if (blockHeight !== -1) {
|
|
console.log(`✅ Block height set: ${blockHeight}`);
|
|
break;
|
|
}
|
|
console.log(`⏳ Waiting for block height (attempt ${blockHeightAttempts + 1}/${blockHeightMaxAttempts})...`);
|
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
blockHeightAttempts++;
|
|
}
|
|
|
|
if (services.getCurrentBlockHeight() === -1) {
|
|
throw new Error('Failed to get block height from relay');
|
|
}
|
|
|
|
// Mettre à jour la date anniversaire du wallet
|
|
await services.updateDeviceBlockHeight();
|
|
console.log('✅ Birthday updated successfully');
|
|
|
|
// Étape 3: Scan des blocs
|
|
updateStatus('🔍 Scan des blocs en cours...', 'loading');
|
|
updateProgress(60);
|
|
|
|
// Effectuer le scan initial des blocs
|
|
await services.ensureCompleteInitialScan();
|
|
console.log('✅ Initial block scan completed');
|
|
|
|
// Étape 4: Synchronisation des processus
|
|
updateStatus('🔄 Synchronisation des processus...', 'loading');
|
|
updateProgress(80);
|
|
|
|
// Restaurer les processus depuis la base de données
|
|
await services.restoreProcessesFromDB();
|
|
console.log('✅ Process synchronization completed');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Services not available:', error);
|
|
updateStatus('❌ Erreur: Services non disponibles', 'error');
|
|
throw error;
|
|
}
|
|
|
|
// Étape 5: Finalisation
|
|
updateStatus('✅ Configuration terminée avec succès!', 'success');
|
|
updateProgress(100);
|
|
|
|
// Activer le bouton continuer
|
|
continueBtn.disabled = false;
|
|
|
|
console.log('🎉 Birthday setup completed successfully');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Error during birthday setup:', error);
|
|
updateStatus('❌ Erreur lors de la configuration de la date anniversaire', 'error');
|
|
}
|
|
|
|
// Gestion du bouton continuer
|
|
continueBtn.addEventListener('click', async () => {
|
|
console.log('🏠 Redirecting to main application...');
|
|
// Rediriger vers l'application principale
|
|
console.log('🎂 Birthday setup completed, checking storage state...');
|
|
const { checkStorageStateAndNavigate } = await import('../../router');
|
|
await checkStorageStateAndNavigate();
|
|
});
|
|
|
|
function updateStatus(message: string, type: 'loading' | 'success' | 'error') {
|
|
status.textContent = message;
|
|
status.className = `status ${type}`;
|
|
}
|
|
|
|
function updateProgress(percent: number) {
|
|
progressBar.style.width = `${percent}%`;
|
|
}
|
|
});
|