mirror of
https://github.com/MarekWo/mc-webui.git
synced 2026-08-07 09:12:57 +02:00
feat: Implement intelligent refresh and multi-channel notifications
Replaces the blind 60-second refresh with a smart polling system that only updates the UI when new messages actually arrive. Key improvements: - Lightweight update checks every 10 seconds (vs full refresh every 60s) - Chat view refreshes only when new messages appear on active channel - Notification bell with global unread count across all channels - Per-channel unread badges in channel selector (e.g., "Malopolska (3)") - Last-seen timestamp tracking per channel with localStorage persistence - Bell ring animation when new messages arrive Backend changes: - New /api/messages/updates endpoint for efficient update polling - Returns per-channel update status and unread counts Frontend changes: - Smart auto-refresh mechanism with conditional UI updates - Unread message tracking system with localStorage - Notification bell UI component with badge - Channel selector badges for unread messages - CSS animations for bell ring effect This dramatically reduces network traffic and server load while providing better UX through instant notifications about activity on other channels. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -253,3 +253,51 @@ main {
|
||||
margin-bottom: 1rem;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Notification Bell Badge */
|
||||
.notification-badge {
|
||||
position: absolute;
|
||||
top: -8px;
|
||||
right: -8px;
|
||||
background-color: #dc3545;
|
||||
color: white;
|
||||
border-radius: 10px;
|
||||
padding: 2px 6px;
|
||||
font-size: 0.65rem;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
min-width: 18px;
|
||||
text-align: center;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
/* Bell Ring Animation */
|
||||
@keyframes bell-ring {
|
||||
0% { transform: rotate(0deg); }
|
||||
10% { transform: rotate(14deg); }
|
||||
20% { transform: rotate(-8deg); }
|
||||
30% { transform: rotate(14deg); }
|
||||
40% { transform: rotate(-4deg); }
|
||||
50% { transform: rotate(10deg); }
|
||||
60% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(0deg); }
|
||||
}
|
||||
|
||||
.bell-ring {
|
||||
animation: bell-ring 1s ease-in-out;
|
||||
transform-origin: 50% 4px;
|
||||
}
|
||||
|
||||
/* Notification Bell Container */
|
||||
#notificationBell {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#notificationBell:hover .notification-badge {
|
||||
transform: scale(1.1);
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user