From 946d004c79212ef1cda7dc2cd2b026330795a8a8 Mon Sep 17 00:00:00 2001 From: "courtmanr@gmail.com" Date: Thu, 8 May 2025 11:27:15 +0100 Subject: [PATCH] Refactor(ui/storage): Extract storage row creation to helper function --- src/public/js/ui/storage.js | 69 +++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/public/js/ui/storage.js b/src/public/js/ui/storage.js index c3d8dfc4e..a0735bd28 100644 --- a/src/public/js/ui/storage.js +++ b/src/public/js/ui/storage.js @@ -138,39 +138,9 @@ PulseApp.ui.storage = (() => { } const sortedNodeStorageData = sortNodeStorageData(nodeStorageData); - sortedNodeStorageData.forEach(store => { - const row = document.createElement('tr'); - const isDisabled = store.enabled === 0 || store.active === 0; - row.className = `transition-all duration-150 ease-out hover:bg-gray-100 dark:hover:bg-gray-700/60 hover:shadow-md hover:-translate-y-px ${isDisabled ? 'opacity-50 grayscale-[50%]' : ''}`; - - const usagePercent = store.total > 0 ? (store.used / store.total) * 100 : 0; - const usageTooltipText = `${PulseApp.utils.formatBytes(store.used)} / ${PulseApp.utils.formatBytes(store.total)} (${usagePercent.toFixed(1)}%)`; - - const usageColorClass = PulseApp.utils.getUsageColor(usagePercent); - const sharedIconTooltip = store.shared === 1 ? 'Shared across cluster' : 'Local to node'; - const sharedIcon = store.shared === 1 ? `` - : ``; - - const contentTypes = (store.content || '').split(',').map(ct => ct.trim()).filter(ct => ct); - contentTypes.sort(); - const contentBadges = contentTypes.map(ct => { - const details = getContentBadgeDetails(ct); - return `${ct}`; - }).join(''); - - const usageBarHTML = PulseApp.utils.createProgressTextBarHTML(usagePercent, usageTooltipText, usageColorClass); - - row.innerHTML = ` - ${store.storage || 'N/A'} - ${contentBadges || '-'} - ${store.type || 'N/A'} - ${sharedIcon} - ${usageBarHTML} - ${PulseApp.utils.formatBytes(store.avail)} - ${PulseApp.utils.formatBytes(store.total)} - `; - tbody.appendChild(row); + const row = _createStorageRow(store); + tbody.appendChild(row); }); }); @@ -179,7 +149,40 @@ PulseApp.ui.storage = (() => { contentDiv.appendChild(table); } + function _createStorageRow(store) { + const row = document.createElement('tr'); + const isDisabled = store.enabled === 0 || store.active === 0; + row.className = `transition-all duration-150 ease-out hover:bg-gray-100 dark:hover:bg-gray-700/60 hover:shadow-md hover:-translate-y-px ${isDisabled ? 'opacity-50 grayscale-[50%]' : ''}`; + + const usagePercent = store.total > 0 ? (store.used / store.total) * 100 : 0; + const usageTooltipText = `${PulseApp.utils.formatBytes(store.used)} / ${PulseApp.utils.formatBytes(store.total)} (${usagePercent.toFixed(1)}%)`; + const usageColorClass = PulseApp.utils.getUsageColor(usagePercent); + const usageBarHTML = PulseApp.utils.createProgressTextBarHTML(usagePercent, usageTooltipText, usageColorClass); + + const sharedIconTooltip = store.shared === 1 ? 'Shared across cluster' : 'Local to node'; + const sharedIcon = store.shared === 1 ? `` + : ``; + + const contentTypes = (store.content || '').split(',').map(ct => ct.trim()).filter(ct => ct); + contentTypes.sort(); + const contentBadges = contentTypes.map(ct => { + const details = getContentBadgeDetails(ct); + return `${ct}`; + }).join(''); + + row.innerHTML = ` + ${store.storage || 'N/A'} + ${contentBadges || '-'} + ${store.type || 'N/A'} + ${sharedIcon} + ${usageBarHTML} + ${PulseApp.utils.formatBytes(store.avail)} + ${PulseApp.utils.formatBytes(store.total)} + `; + return row; + } + return { updateStorageInfo }; -})(); \ No newline at end of file +})();