Radyo çalarken sağ sütundaki favori butonunun çalışmaması sorunu
Bir radyo çalmaya başladığında, ekranın sağ tarafında radyo bilgilerinin gösterildiği bir bölüm açılıyor. Bu bölümün sağ üst köşesinde bir kalp ikonu (favorilere ekle butonu) var. Bu butona tıklandığında:
Buton tıklandığında bir mesaj (event) gönderiyordu ama bu mesajı dinleyen kimse yoktu. Yani buton "favorilere ekle!" diye bağırıyordu ama dinleyen yoktu.
Ayrıca butonun ikonu (kalp dolu/boş) değişmiyordu çünkü yanlış veriyi kontrol ediyordu.
Artık bir radyo çaldığında, sağ sütundaki favori butonuna tıklayınca:
sidebar-right.blade.php:196
@click="$dispatch('toggle-favorite-entity', { type: ..., id: ... })"
Event dispatch ediliyor ancak listener yok.
sidebar-right.blade.php:198-199
:class="$store.sidebar.previewInfo?.is_favorite ? ... : ..."
Static değer kontrol ediliyor, reactive değil.
📁 resources/views/themes/muzibu/layouts/app.blade.php
❌ Önce:
@play-all-playlists.window="..."
✅ Sonra:
@play-all-playlists.window="..."
@toggle-favorite-entity.window="
if ($event.detail?.type && $event.detail?.id && $store.favorites) {
$store.favorites.toggle($event.detail.type, $event.detail.id);
}
"
Açıklama: Window seviyesinde event listener eklendi. Bu listener tüm toggle-favorite-entity event'lerini yakalar ve $store.favorites.toggle() fonksiyonunu çağırır.
📁 resources/views/themes/muzibu/components/sidebar-right.blade.php:196-199
❌ Önce (Static):
:class="$store.sidebar.previewInfo?.is_favorite ? 'text-muzibu-coral' : 'text-white'"
✅ Sonra (Reactive):
:class="$store.favorites?.isFavorite($store.sidebar.previewInfo?.type?.toLowerCase(), $store.sidebar.previewInfo?.id) ? 'text-muzibu-coral' : 'text-white'"
Açıklama: Buton artık $store.favorites.isFavorite() reactive fonksiyonunu kontrol ediyor. Bu fonksiyon favoriler array'i değiştiğinde otomatik güncellenir.
📁 resources/views/themes/muzibu/components/sidebar-right.blade.php:730-733
❌ Önce (Static):
:class="$store.sidebar.entityInfo?.is_favorite ? 'text-muzibu-coral' : 'text-white'"
✅ Sonra (Reactive):
:class="$store.favorites?.isFavorite($store.sidebar.entityInfo?.type?.toLowerCase(), $store.sidebar.entityInfo?.id) ? 'text-muzibu-coral' : 'text-white'"
Açıklama: Detail page için de aynı düzeltme uygulandı.
resources/views/themes/muzibu/layouts/app.blade.php
resources/views/themes/muzibu/components/sidebar-right.blade.php
Alpine.js Reactivity: $store.favorites array'i Alpine.js tarafından reactive yapılır. isFavorite() fonksiyonu her çağrıldığında güncel array state'ini kontrol eder.
Event-Driven Architecture: Alpine.js event system kullanılarak component'ler arası loose coupling sağlandı. Sidebar component event dispatch eder, app layout listener ile yakalayıp store'u günceller.
Backward Compatibility: Player bar'daki favori butonu (şarkılar için) değiştirilmedi. Sadece sidebar'daki radyo favori butonu düzeltildi.
29 Ocak 2026 • Muzibu.com.tr