Component Nedir?
Basit Anlatım:
Component = Birden fazla yerde kullanılan hazır parça.
Mesela "albüm kartı" anasayfada da var, albümler sayfasında da var, favorilerde de var.
Bunu 3 yerde ayrı ayrı yazmak yerine → 1 component yap, 3 yerde kullan.
✅ Component Olmalı
- • Albüm kartı → Anasayfa, albümler sayfası, favoriler (3 yer)
- • Şarkı satırı → Albüm detay, playlist detay, favoriler (3 yer)
- • Sağ tık menü → Her yerde kullanılıyor
❌ Component Olmamalı
- • Albüm detay sayfası → Sadece 1 sayfa (albums/show.blade.php)
- • Playlist detay sayfası → Sadece 1 sayfa (playlists/show.blade.php)
- • Detay sayfaları zaten hazır, component'e gerek yok!
📊 Özet
Toplam Component
Kart Component
Universal
Modal
ŞARKI COMPONENTS (4 adet)
1. song-row
📍 Nerede Kullanılır?
- ✓ albums/show.blade.php (şarkı listesi)
- ✓ playlists/show.blade.php (şarkı listesi)
- ✓ favorites/index.blade.php (liste modu)
- ✓ genres/show.blade.php (top songs)
💻 Kod
<x-muzibu.song-row
:song="$song"
:index="1"
:showCover="true"
:showArtist="true"
/>
2. song-card
📍 Nerede Kullanılır?
- ✓ home.blade.php (popüler şarkılar grid)
- ✓ favorites/index.blade.php (grid modu)
- ✓ search results (songs section)
💻 Kod
<x-muzibu.song-card
:song="$song"
/>
3. song-queue-item
📍 Nerede Kullanılır?
- ✓ queue-overlay.blade.php (çalma sırası)
- • Tek yerde ama drag & drop olduğu için component
💻 Kod
<x-muzibu.song-queue-item
:song="$song"
:isPlaying="false"
/>
4. song-sidebar-item
📍 Nerede Kullanılır?
- ✓ sidebar-right.blade.php (preview track list)
- • Playlist/Album preview için
💻 Kod
<x-muzibu.song-sidebar-item
:song="$song"
:index="1"
/>
KART COMPONENTS (7 adet)
Albüm, Playlist, Sanatçı, Tür, Sektör, Radyo
5. album-card
📍 Kullanım:
- • home.blade.php (featured)
- • albums/index.blade.php
- • favorites/index.blade.php
- • artists/show.blade.php
<x-muzibu.album-card
:album="$album"
/>
6. playlist-card
📍 Kullanım:
- • home.blade.php (featured)
- • playlists/index.blade.php
- • playlists/my-playlists.blade.php
- • favorites/index.blade.php
<x-muzibu.playlist-card
:playlist="$playlist"
/>
7. playlist-quick-card
📍 Kullanım:
- • home.blade.php (2x4 grid)
- • Yatay kart (Spotify tarzı)
<x-muzibu.playlist-quick-card
:playlist="$playlist"
/>
8. artist-card
📍 Kullanım:
- • artists/index.blade.php
- • search results
- • Yuvarlak foto
<x-muzibu.artist-card
:artist="$artist"
/>
9. genre-card
📍 Kullanım:
- • home.blade.php
- • genres/index.blade.php
- • Gradient + emoji
<x-muzibu.genre-card
:genre="$genre"
/>
10. sector-card
📍 Kullanım:
- • sectors/index.blade.php
- • Gradient + ikon
<x-muzibu.sector-card
:sector="$sector"
/>
11. radio-card
📍 Kullanım:
- • radios/index.blade.php
- • Tıklayınca direkt çalar
<x-muzibu.radio-card
:radio="$radio"
/>
UNIVERSAL COMPONENTS (3 adet)
Her yerde kullanılan genel parçalar
12. context-menu
📍 Kullanım:
- ✓ Tüm kartlarda
- ✓ Tüm satırlarda
- ✓ Sağ tık + mobil long-press
@contextmenu.prevent="
openMenu($event, 'song', $song)
"
13. empty-state
📍 Kullanım:
- ✓ Tüm liste sayfalarında
- ✓ Boş favoriler
- ✓ Boş queue
<x-muzibu.empty-state
icon="heart"
title="Boş"
message="Favori yok"
/>
14. loading-skeleton
📍 Kullanım:
- ✓ Lazy loading grid
- ✓ Sidebar preview
- ✓ Liste yükleme
<x-muzibu.loading-skeleton
type="card"
count="6"
/>
MODAL COMPONENTS (3 adet)
Popup pencereler
15. rating-modal
Şarkıya puan verme (1-5 yıldız)
<x-muzibu.rating-modal
:song="$song"
/>
16. playlist-select-modal
Hangi playlist'e eklenecek seç
<x-muzibu.playlist-select-modal
:song="$song"
/>
17. create-playlist-modal
Yeni playlist oluştur
<x-muzibu.create-playlist-modal
/>
❌ DETAY SAYFALARI (Component DEĞİL!)
Bunlar zaten birer sayfa - direkt düzenlenecek, component yapılmayacak
Direkt Düzenlenecek Sayfalar:
-
albums/show.blade.php -
playlists/show.blade.php -
artists/show.blade.php -
genres/show.blade.php -
sectors/show.blade.php
Neden Component Değil?
- Her biri sadece 1 yerde kullanılıyor
- Zaten hazır sayfa dosyaları var
- Component yapmak gereksiz karmaşıklık olur
- Direkt sayfayı düzenlemek daha kolay
Bu Sayfalarda İçinde Kullanılacak Component'ler:
• albums/show.blade.php içinde → <x-muzibu.song-row /> kullanılacak
• playlists/show.blade.php içinde → <x-muzibu.song-row /> kullanılacak
• artists/show.blade.php içinde → <x-muzibu.album-card /> + <x-muzibu.song-row /> kullanılacak
HANGİ SIRADA YAPILACAK?
FAZ 1: En Çok Kullanılanlar (3-4 gün)
- ✓ song-row → En çok kullanılan!
- ✓ song-card
- ✓ album-card
- ✓ playlist-card
- ✓ playlist-quick-card
- ✓ context-menu → Universal
FAZ 2: Diğer Kartlar (2 gün)
- ✓ artist-card
- ✓ genre-card
- ✓ sector-card
- ✓ radio-card
FAZ 3: Özel Parçalar (2-3 gün)
- ✓ song-queue-item
- ✓ song-sidebar-item
- ✓ empty-state
- ✓ loading-skeleton
- ✓ rating-modal
- ✓ playlist-select-modal
- ✓ create-playlist-modal
TOPLAM SÜRE
17 component yapılacak
HEMEN BAŞLAMAK İÇİN
Git Branch
git checkout -b feature/muzibu-components
Klasör Oluştur
resources/views/components/muzibu/
İlk Component
song-row.blade.php ile başla
<!-- song-row.blade.php -->
<div class="flex items-center gap-3 p-2 hover:bg-white/5 rounded group">
<span class="w-6 text-center">{{ $index }}</span>
<img src="{{ $song->cover }}" class="w-10 h-10 rounded">
<div class="flex-1">
<div class="text-white">{{ $song->title }}</div>
<div class="text-slate-400 text-sm">{{ $song->artist->name }}</div>
</div>
<span class="text-slate-500">{{ $song->duration }}</span>
</div>
Test Et
albums/show.blade.php içinde kullan:
<x-muzibu.song-row :song="$song" :index="$loop->iteration" />