# 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
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 `