+ | {song.id} |
+
+ {editingId === song.id ? (
+ <>
+
+ setEditTitle(e.target.value)}
+ className="form-input"
+ style={{ padding: '0.25rem', marginBottom: '0.5rem', width: '100%' }}
+ placeholder="Title"
+ />
+ setEditArtist(e.target.value)}
+ className="form-input"
+ style={{ padding: '0.25rem', width: '100%' }}
+ placeholder="Artist"
+ />
+ |
+
+ setEditReleaseYear(e.target.value === '' ? '' : Number(e.target.value))}
+ className="form-input"
+ style={{ padding: '0.25rem', width: '80px' }}
+ placeholder="Year"
+ />
+ |
+
+
+ {genres.map(genre => (
+
+ ))}
+
+
+ {specials.map(special => (
+
+ ))}
+
+
+
+
+ |
+
+ {new Date(song.createdAt).toLocaleDateString('de-DE')}
+ |
+ {song.activations} |
+
+ {song.averageRating > 0 ? (
+
+ {song.averageRating.toFixed(1)} ★ ({song.ratingCount})
+
+ ) : (
+ -
+ )}
+ |
+
+
+
+
+
+ |
+ >
+ ) : (
+ <>
+
+ {song.title}
+ {song.artist}
+
+ {song.excludeFromGlobal && (
+
+
+ 🚫 No Global
+
+
+ )}
+
+ {/* Daily Puzzle Badges */}
+
+ {song.puzzles?.filter(p => p.date === new Date().toISOString().split('T')[0]).map(p => {
+ if (!p.genreId && !p.specialId) {
+ return (
+
+ 🌍 Global Daily
+
+ );
+ }
+ if (p.genreId) {
+ const genreName = genres.find(g => g.id === p.genreId)?.name;
+ return (
+
+ 🏷️ {getLocalizedValue(genreName, activeTab)} Daily
+
+ );
+ }
+ if (p.specialId) {
+ const specialName = specials.find(s => s.id === p.specialId)?.name;
+ return (
+
+ ★ {getLocalizedValue(specialName, activeTab)} Daily
+
+ );
+ }
+ return null;
+ })}
+
+ |
+
+ {song.releaseYear || '-'}
+ |
+
+
+ {song.genres?.map(g => (
+
+ {getLocalizedValue(g.name, activeTab)}
+
+ ))}
+
+
+ {song.specials?.map(s => (
+
+ {getLocalizedValue(s.name, activeTab)}
+
+ ))}
+
+ |
+
+ {new Date(song.createdAt).toLocaleDateString('de-DE')}
+ |
+ {song.activations} |
+
+ {song.averageRating > 0 ? (
+
+ {song.averageRating.toFixed(1)} ★ ({song.ratingCount})
+
+ ) : (
+ -
+ )}
+ |
+
+
+
+
+
+
+ |
+ >
+ )}
+
+ ))}
+ {paginatedSongs.length === 0 && (
+