fix: volume slider disappearing + theme overlapping favorites

- SSE handler now distinguishes per-guild events (single NowPlaying)
  from snapshots (Record<string, NowPlaying>) to prevent state corruption
- Theme selector moved left (right: 72px) to not overlap favorites button

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Daniel 2026-03-06 09:39:27 +01:00
parent bac2e3b17f
commit 2c0cb7a67a
2 changed files with 15 additions and 2 deletions

View file

@ -100,7 +100,20 @@ export default function RadioTab({ data }: { data: any }) {
// ── Handle SSE data ── // ── Handle SSE data ──
useEffect(() => { useEffect(() => {
if (data?.playing) setNowPlaying(data.playing); if (data?.guildId && 'playing' in data) {
// Per-guild SSE event (broadcastState): playing is single NowPlaying | null
setNowPlaying(prev => {
if (data.playing) {
return { ...prev, [data.guildId]: data.playing };
}
const next = { ...prev };
delete next[data.guildId];
return next;
});
} else if (data?.playing) {
// Snapshot: playing is Record<string, NowPlaying>
setNowPlaying(data.playing);
}
if (data?.favorites) setFavorites(data.favorites); if (data?.favorites) setFavorites(data.favorites);
// Volume from snapshot or radio_volume event // Volume from snapshot or radio_volume event
if (data?.volumes && selectedGuild && data.volumes[selectedGuild] != null) { if (data?.volumes && selectedGuild && data.volumes[selectedGuild] != null) {

View file

@ -972,7 +972,7 @@ html, body {
.radio-theme { .radio-theme {
position: absolute; position: absolute;
top: 16px; top: 16px;
right: 16px; right: 72px;
z-index: 25; z-index: 25;
display: flex; display: flex;
align-items: center; align-items: center;