diff --git a/web/templates/storage.html b/web/templates/storage.html index 5370da5..9dd2cae 100644 --- a/web/templates/storage.html +++ b/web/templates/storage.html @@ -84,13 +84,63 @@
Loading disk information...
+Loading...
+Loading...
+ + +Loading...
+Error: ${err.error || 'Failed to load disks'}
`; + document.getElementById('disks-visual').innerHTML = `Error: ${err.error || 'Failed to load disks'}
`; return; } const disks = await res.json(); const listEl = document.getElementById('disks-list'); + const visualEl = document.getElementById('disks-visual'); + const summaryEl = document.getElementById('disks-summary'); if (!Array.isArray(disks)) { listEl.innerHTML = 'Error: Invalid response format
'; + visualEl.innerHTML = 'Error: Invalid response format
'; return; } if (disks.length === 0) { listEl.innerHTML = 'No disks found
'; + visualEl.innerHTML = 'No disks found
'; + summaryEl.textContent = 'No disks available'; return; } - listEl.innerHTML = disks.map(disk => ` -Size: ${disk.size}
` : ''} - ${disk.model ? `Model: ${disk.model}
` : ''} + // Update summary + summaryEl.textContent = `Disk: ${disks.length}`; + + // Visual disk blocks (like QNAP) + visualEl.innerHTML = disks.map((disk, index) => { + // Available disks = green (since ListDisks only returns available disks) + const statusColor = 'bg-green-500'; + const statusBorder = 'border-green-400'; + + return ` +Error: ${err.message}
`; + document.getElementById('disks-visual').innerHTML = `Error: ${err.message}
`; + } +} + +function selectDisk(diskName) { + // Scroll to disk in detailed list + const diskElement = document.querySelector(`[data-disk-name="${diskName}"]`); + if (diskElement) { + diskElement.scrollIntoView({ behavior: 'smooth', block: 'center' }); + diskElement.classList.add('ring-2', 'ring-blue-500'); + setTimeout(() => { + diskElement.classList.remove('ring-2', 'ring-blue-500'); + }, 2000); + } +} + +function useDiskForPool(diskPath) { + // Open create pool modal and pre-fill with this disk + showCreatePoolModal(); + const vdevsInput = document.querySelector('#create-pool-form input[name="vdevs"]'); + if (vdevsInput) { + const currentValue = vdevsInput.value.trim(); + if (currentValue) { + vdevsInput.value = currentValue + ',' + diskPath; + } else { + vdevsInput.value = diskPath; + } + vdevsInput.focus(); } }