From 48f97ed24c23a32263396a13cbf3af1fe1ab305f Mon Sep 17 00:00:00 2001 From: andersonid Date: Thu, 16 Oct 2025 14:45:33 -0300 Subject: [PATCH] feat: improve loading feedback UX with enhanced spinner, progress bar and contextual messages --- app/static/index.html | 92 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 4 deletions(-) diff --git a/app/static/index.html b/app/static/index.html index 27b9db9..7af6f28 100644 --- a/app/static/index.html +++ b/app/static/index.html @@ -877,6 +877,58 @@ padding: 20px; } + /* Improved loading feedback */ + .loading-container { + display: flex; + flex-direction: column; + align-items: center; + padding: 40px 20px; + text-align: center; + } + + .loading-spinner-enhanced { + width: 40px; + height: 40px; + border: 3px solid var(--pf-global--BorderColor--200); + border-top: 3px solid var(--pf-global--primary-color--100); + border-radius: 50%; + animation: spin 1s linear infinite; + margin-bottom: 16px; + } + + .loading-text { + color: var(--pf-global--Color--200); + font-size: 16px; + margin-bottom: 8px; + } + + .loading-subtext { + color: var(--pf-global--Color--300); + font-size: 14px; + } + + .loading-progress { + width: 200px; + height: 4px; + background-color: var(--pf-global--BackgroundColor--300); + border-radius: 2px; + margin-top: 12px; + overflow: hidden; + } + + .loading-progress-bar { + height: 100%; + background: linear-gradient(90deg, var(--pf-global--primary-color--100), var(--pf-global--info-color--100)); + border-radius: 2px; + transition: width 0.3s ease; + animation: pulse 2s ease-in-out infinite; + } + + @keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.7; } + } + .workload-issues-list { display: flex; flex-direction: column; @@ -2328,16 +2380,48 @@ return; } - // If data not available, show loading + // If data not available, show enhanced loading with progress + showEnhancedLoading(container, namespace); + } + + function showEnhancedLoading(container, namespace) { + const totalPods = namespace.pods ? namespace.pods.size : 0; + const totalIssues = namespace.validations ? namespace.validations.length : 0; + container.innerHTML = ` -
-
- Loading issues... +
+
+
Loading workload issues...
+
Analyzing ${namespace.namespace} namespace (${totalPods} pods, ${totalIssues} issues)
+
+
+
`; + + // Simulate progress update + let progress = 60; + const progressInterval = setInterval(() => { + progress += Math.random() * 10; + if (progress > 90) progress = 90; + + const progressBar = container.querySelector('.loading-progress-bar'); + if (progressBar) { + progressBar.style.width = `${progress}%`; + } + }, 500); + + // Store interval for cleanup + container._progressInterval = progressInterval; } function displayWorkloadIssues(container, data, namespace) { + // Clean up progress interval if exists + if (container._progressInterval) { + clearInterval(container._progressInterval); + container._progressInterval = null; + } + if (!data.validations || data.validations.length === 0) { container.innerHTML = `