feat: improve loading feedback UX with enhanced spinner, progress bar and contextual messages

This commit is contained in:
2025-10-16 14:45:33 -03:00
parent 1518bb9f2c
commit 48f97ed24c

View File

@@ -877,6 +877,58 @@
padding: 20px; 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 { .workload-issues-list {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -2328,16 +2380,48 @@
return; 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 = ` container.innerHTML = `
<div class="loading-spinner"> <div class="loading-container">
<div class="spinner"></div> <div class="loading-spinner-enhanced"></div>
Loading issues... <div class="loading-text">Loading workload issues...</div>
<div class="loading-subtext">Analyzing ${namespace.namespace} namespace (${totalPods} pods, ${totalIssues} issues)</div>
<div class="loading-progress">
<div class="loading-progress-bar" style="width: 60%"></div>
</div>
</div> </div>
`; `;
// 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) { 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) { if (!data.validations || data.validations.length === 0) {
container.innerHTML = ` container.innerHTML = `
<div style="text-align: center; padding: 20px; color: var(--pf-global--Color--300);"> <div style="text-align: center; padding: 20px; color: var(--pf-global--Color--300);">