Muzibu Frontend - Kalp İkonları Yükleme Sorunu
Muzibu'da şarkı, albüm veya playlist kartlarının üzerine geldiğinizde (hover) sağ üstte iki ikon çıkıyor:
Kullanıcı deneyimi açısından kötü görünüyor: "Bu şarkı favorimde mi değil mi?" sorusu yanıtsız kalıyor.
Sistem favori listesini yüklemeyi unutuyor!
Şu anki durum (Yanlış):
Sistem açılırken otomatik olarak favori listesini yükleyeceğiz:
Düzeltme sonrası (Doğru):
Sonuç: 3 nokta ve kalp ikonu aynı anda, anında görünecek!
favorites.js dosyasında
loadFavorites() metodu tanımlanmış ama
hiçbir zaman çağrılmıyor!
📁 public/themes/muzibu/js/player/features/favorites.js:140-158
async loadFavorites() {
try {
const response = await fetch('/api/favorites/list', {
headers: {
'Accept': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name=csrf-token]')?.getAttribute('content') || ''
}
});
if (response.ok) {
const data = await response.json();
if (data.success && Array.isArray(data.data)) {
this.favorites = data.data; // ← Buraya gelmiyor!
}
}
} catch (error) {
console.error('Failed to load favorites:', error);
}
}
Sorun:
favorites: [] boş array ile başlıyorloadFavorites() metodu hiçbir event listener veya init fonksiyonunda çağrılmıyor$store.favorites.isFavorite() çağrıldığında her zaman false dönüyorSayfa yükleniyor
Alpine.js initialize oluyor
Favorites store oluşturuluyor
⚠️ favorites: [] boş array
Blade template render ediliyor
Card'larda x-bind:class="$store.favorites.isFavorite(...)" çalışıyor
İkonlar render ediliyor
❌ Tüm kalpler far fa-heart (boş) olarak render ediliyor
loadFavorites() asla çağrılmıyor!
Store'da favorites sonsuza kadar boş kalıyor
📁 resources/views/components/muzibu/song-card.blade.php:119-126
<!-- Favorite Button -->
<button x-on:click.stop.prevent="$store.favorites.toggle('song', {{ $song->id }})"
class="w-8 h-8 bg-black/60 hover:bg-black/80 rounded-full"
x-bind:class="$store.favorites.isFavorite('song', {{ $song->id }}) ? 'text-muzibu-coral' : ''">
<i class="text-sm"
x-bind:class="$store.favorites.isFavorite('song', {{ $song->id }}) ? 'fas fa-heart' : 'far fa-heart'"></i>
</button>
$store.favorites.isFavorite() her zaman false dönüyor çünkü favorites array'i boş!
📁 public/themes/muzibu/js/player/features/favorites.js:8-10
Alpine.store('favorites', {
favorites: [], // ← BOŞ başlıyor, hiç dolmuyor!
loading: false,
// ...
});
📁 public/themes/muzibu/js/player/features/favorites.js:91-93
isFavorite(type, id) {
return this.favorites.includes(`${type}-${id}`);
// favorites = [] → Her zaman false!
}
Alpine.js store initialize olduktan hemen sonra
loadFavorites() metodunu çağırmalıyız.
✅ Düzeltilmiş Kod (favorites.js sonuna eklenecek)
// Alpine.js initialized sonrası favori listesini otomatik yükle
document.addEventListener('alpine:initialized', () => {
const favoritesStore = Alpine.store('favorites');
// Auth user varsa favorileri yükle
if (window.muzibuPlayerConfig?.isLoggedIn) {
favoritesStore.loadFavorites();
}
});
Neden Bu Çözüm?
alpine:initialized eventi ile Alpine.js tamamen hazır olduktan sonra çalışıyorSayfa yükleniyor
Alpine.js initialize oluyor
Favorites store oluşturuluyor
favorites: [] boş başlıyor
Alpine initialized eventi
✅ loadFavorites() otomatik çağrılıyor!
API'den favori listesi geldi
✅ favorites = ['song-123', 'album-45', ...]
Alpine reactivity devrede
✅ İkonlar otomatik güncelleniyor (dolu/boş kalp)
Kullanıcı hover yapıyor
✅ Kalp ikonları DOĞRU durumda anında görünüyor!
public/themes/muzibu/js/player/features/favorites.js
Dosyanın sonuna alpine:initialized event listener eklenecek