Fix carousel reset on data refresh - preserve index
The carousel was resetting to index 0 every 10 seconds when the dashboard refreshed data from the API. This caused the carousel to show: - 0s: test 2 (index 0) - 5s: test again (index 1) - 10s: DATA REFRESH → reset to test 2 (index 0) ❌ Fixed by: - Preserving currentUpcomingIndex across renderEvents() calls - Only reset index if it's out of range for new data - Render the currently active event instead of always starting at 0 - Added logging to show index preservation Now the carousel cycles continuously through all 4 events without resetting when the page refreshes data every 10 seconds. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -867,18 +867,26 @@
|
|||||||
// Store for carousel
|
// Store for carousel
|
||||||
upcomingEvents = sortedUpcoming;
|
upcomingEvents = sortedUpcoming;
|
||||||
|
|
||||||
|
// Preserve current index if it's still valid, otherwise reset
|
||||||
|
if (currentUpcomingIndex >= sortedUpcoming.length) {
|
||||||
|
console.log(`Carousel: Index ${currentUpcomingIndex} out of range, resetting to 0`);
|
||||||
|
currentUpcomingIndex = 0;
|
||||||
|
} else {
|
||||||
|
console.log(`Carousel: Preserving index ${currentUpcomingIndex} across refresh`);
|
||||||
|
}
|
||||||
|
|
||||||
html += '<div class="events-section">';
|
html += '<div class="events-section">';
|
||||||
html += '<div class="section-title upcoming">UPCOMING (Next 72 Hours)</div>';
|
html += '<div class="section-title upcoming">UPCOMING (Next 72 Hours)</div>';
|
||||||
html += '<div class="upcoming-carousel-container">';
|
html += '<div class="upcoming-carousel-container">';
|
||||||
html += '<div class="upcoming-carousel-wrapper" id="upcomingCarousel">';
|
html += '<div class="upcoming-carousel-wrapper" id="upcomingCarousel">';
|
||||||
|
|
||||||
// Render all upcoming events (only first will be visible)
|
// Render all upcoming events (preserve current active index)
|
||||||
sortedUpcoming.forEach((event, index) => {
|
sortedUpcoming.forEach((event, index) => {
|
||||||
const borderColor = getColorFromType(event.typecolor);
|
const borderColor = getColorFromType(event.typecolor);
|
||||||
const ticketBadge = event.ticketnumber
|
const ticketBadge = event.ticketnumber
|
||||||
? `<a href="${getServiceNowUrl(event.ticketnumber)}" target="_blank" class="event-ticket">${escapeHtml(event.ticketnumber)}</a>`
|
? `<a href="${getServiceNowUrl(event.ticketnumber)}" target="_blank" class="event-ticket">${escapeHtml(event.ticketnumber)}</a>`
|
||||||
: '';
|
: '';
|
||||||
const activeClass = index === 0 ? 'active' : 'enter-down';
|
const activeClass = index === currentUpcomingIndex ? 'active' : 'enter-down';
|
||||||
html += `
|
html += `
|
||||||
<div class="event-card upcoming carousel-item ${activeClass}" data-index="${index}" style="border-left-color: ${borderColor};">
|
<div class="event-card upcoming carousel-item ${activeClass}" data-index="${index}" style="border-left-color: ${borderColor};">
|
||||||
<div>${ticketBadge}</div>
|
<div>${ticketBadge}</div>
|
||||||
@@ -896,9 +904,6 @@
|
|||||||
html += '</div>'; // Close carousel wrapper
|
html += '</div>'; // Close carousel wrapper
|
||||||
html += '</div>'; // Close carousel container
|
html += '</div>'; // Close carousel container
|
||||||
html += '</div>'; // Close section
|
html += '</div>'; // Close section
|
||||||
|
|
||||||
// Reset carousel index
|
|
||||||
currentUpcomingIndex = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// No events message
|
// No events message
|
||||||
|
|||||||
Reference in New Issue
Block a user