# Plan de Refactoring Frontend ## ✅ Action 3.1 - Extraction des fonctions communes (EN COURS) ### Fichiers créés - ✅ `frontend/js/hardware-renderer.js` - Module commun de rendu hardware - ✅ Intégré dans `devices.html` et `device_detail.html` ### Fonctions disponibles dans `HardwareRenderer` Le module `window.HardwareRenderer` expose les fonctions suivantes : - `renderMotherboardDetails(snapshot)` - Carte mère - `renderCPUDetails(snapshot)` - Processeur (avec multi-CPU) - `renderMemoryDetails(snapshot, deviceData)` - Mémoire (barres + slots) - `renderStorageDetails(snapshot)` - Stockage - `renderGPUDetails(snapshot)` - Carte graphique - `renderNetworkDetails(snapshot)` - Réseau - `renderOSDetails(snapshot)` - Système d'exploitation - `renderProxmoxDetails(snapshot)` - Proxmox (nouveau) - `renderAudioDetails(snapshot)` - Audio (nouveau) ### Prochaines étapes #### Option 1 : Refactorisation progressive (RECOMMANDÉ) **Étape 1** : Modifier `device_detail.js` pour utiliser `HardwareRenderer` - Remplacer chaque `renderXxxDetails()` locale par un appel à `HardwareRenderer.renderXxxDetails()` - Exemple : ```javascript // AVANT function renderMotherboardDetails() { const snapshot = currentDevice.last_hardware_snapshot; const container = document.getElementById('motherboardDetails'); // ... 25 lignes de code ... container.innerHTML = html; } // APRÈS function renderMotherboardDetails() { const snapshot = currentDevice.last_hardware_snapshot; const container = document.getElementById('motherboardDetails'); container.innerHTML = HardwareRenderer.renderMotherboardDetails(snapshot); } ``` **Étape 2** : Modifier `devices.js` pour utiliser `HardwareRenderer` - Même principe : remplacer les fonctions locales par des appels au module - Les fonctions `renderXxxDetails()` dans devices.js retournent déjà du HTML (pas de changement majeur) **Étape 3** : Supprimer les fonctions dupliquées - Une fois les deux fichiers migrés, supprimer les anciennes implémentations #### Option 2 : Migration immédiate (RISQUÉ) Remplacer toutes les fonctions d'un coup dans les deux fichiers. Risque d'introduire des bugs. --- ## Modifications à apporter dans `device_detail.js` ### Fonctions à remplacer Ligne | Fonction actuelle | Action ------|------------------|-------- 91 | `renderMotherboardDetails()` | Appeler `HardwareRenderer.renderMotherboardDetails(snapshot)` 127 | `renderCPUDetails()` | Appeler `HardwareRenderer.renderCPUDetails(snapshot)` 185 | `renderMemoryDetails()` | Appeler `HardwareRenderer.renderMemoryDetails(snapshot, currentDevice)` 260 | `renderStorageDetails()` | Appeler `HardwareRenderer.renderStorageDetails(snapshot)` 454 | `renderGPUDetails()` | Appeler `HardwareRenderer.renderGPUDetails(snapshot)` 612 | `renderNetworkDetails()` | Appeler `HardwareRenderer.renderNetworkDetails(snapshot)` 513 | `renderOSDetails()` | Appeler `HardwareRenderer.renderOSDetails(snapshot)` ### Nouvelles fonctions à ajouter ```javascript function renderProxmoxDetails() { const snapshot = currentDevice.last_hardware_snapshot; const container = document.getElementById('proxmoxDetails'); if (!container) return; container.innerHTML = HardwareRenderer.renderProxmoxDetails(snapshot); } function renderAudioDetails() { const snapshot = currentDevice.last_hardware_snapshot; const container = document.getElementById('audioDetails'); if (!container) return; container.innerHTML = HardwareRenderer.renderAudioDetails(snapshot); } ``` Puis ajouter les sections dans le HTML : ```html
🔊 Audio
Chargement...
``` --- ## Modifications à apporter dans `devices.js` ### Fonctions à remplacer Ligne | Fonction actuelle | Action ------|------------------|-------- 649 | `renderMotherboardDetails(snapshot)` | Appeler `HardwareRenderer.renderMotherboardDetails(snapshot)` 681 | `renderCPUDetails(snapshot)` | Appeler `HardwareRenderer.renderCPUDetails(snapshot)` 735 | `renderMemoryDetails(snapshot)` | Adapter appel `HardwareRenderer.renderMemoryDetails(snapshot, currentDevice)` 791 | `renderStorageDetails(snapshot)` | Appeler `HardwareRenderer.renderStorageDetails(snapshot)` 915 | `renderGPUDetails(snapshot)` | Appeler `HardwareRenderer.renderGPUDetails(snapshot)` 942 | `renderOSDetails(snapshot)` | Appeler `HardwareRenderer.renderOSDetails(snapshot)` 1525 | `renderNetworkBlock(snapshot, bench)` | Adapter pour utiliser `HardwareRenderer.renderNetworkDetails(snapshot)` ### Exemple de remplacement ```javascript // AVANT (ligne 649) function renderMotherboardDetails(snapshot) { if (!snapshot) { return '

Aucune information disponible

'; } const cleanValue = (val) => { if (!val || (typeof val === 'string' && val.trim() === '')) return 'N/A'; return val; }; const items = [ { label: 'Fabricant', value: cleanValue(snapshot.motherboard_vendor) }, // ... 20 lignes ... ]; return `
...
`; } // APRÈS function renderMotherboardDetails(snapshot) { return HardwareRenderer.renderMotherboardDetails(snapshot); } ``` **Gain** : 649 → 681 (32 lignes) deviennent **3 lignes** --- ## Estimation du gain de lignes Fichier | Lignes actuelles | Lignes après refacto | Gain --------|-----------------|---------------------|----- `devices.js` | 1953 | ~1600 | -353 `device_detail.js` | 1003 | ~700 | -303 **TOTAL** | **2956** | **2300** | **-656 lignes** --- ## Tests à effectuer après refactoring ### Tests visuels (devices.html) 1. Ouvrir devices.html 2. Sélectionner un device 3. Vérifier chaque section : - ✅ Motherboard : affiche bien fabricant, modèle, BIOS, etc. - ✅ CPU : affiche modèle, cores, threads, caches, flags - ✅ Mémoire : barres RAM/SWAP + slots avec détails - ✅ Stockage : liste des disques avec SMART - ✅ GPU : fabricant, modèle, VRAM - ✅ Réseau : liste des interfaces - ✅ OS : nom, version, kernel, uptime - ✅ Proxmox : affiche si détecté (host/guest) - ✅ Audio : matériel + logiciels ### Tests visuels (device_detail.html) 1. Ouvrir device_detail.html?id=X 2. Vérifier les mêmes sections 3. Vérifier que les popups/tooltips fonctionnent ### Tests fonctionnels 1. Édition des champs (hostname, description, etc.) 2. Upload d'images/PDFs 3. Ajout/suppression de tags 4. Ajout/suppression de liens 5. Suppression de device ### Tests de régression 1. Vérifier que le score global s'affiche (étoiles) 2. Vérifier que les images s'affichent en grid 3. Vérifier que les barres mémoire ont les bons % 4. Vérifier le multi-CPU (si disponible) --- ## 🎯 Recommandation **Je recommande de faire la migration progressive (Option 1)** : 1. ✅ Créer `hardware-renderer.js` (FAIT) 2. ✅ Intégrer dans les HTML (FAIT) 3. **SUIVANT** : Migrer `device_detail.js` (plus simple, fichier plus petit) 4. **APRÈS** : Migrer `devices.js` 5. **TESTER** chaque étape Cette approche réduit les risques et permet de valider chaque changement avant de passer au suivant. --- **Dernière mise à jour** : 2026-01-11