Proje: Okul B2B App · Hub: Okul B2B App — Conventions
İçerik Detay ve Kart Bileşenleri
ContentDetailModal
components/school-content/ContentDetailModal.tsx
presentationStyle="pageSheet"→ iOS’ta yarım ekran açılır- Medya carousel:
allMedia(single + medias birleştirilir, duplikat kontrol) getMediaUrl()ile CDN URL dönüşümü- Tarih:
new Date(dateStr).toLocaleDateString('tr-TR', { day, month, year }) - Edit / Delete aksiyonları
ContentCard
components/school-content/ContentCard.tsx — Liste öğesi kartı.
- Görsel thumbnail
- Başlık + kısa metin
- Aktif/pasif rozeti
- Tarih bilgisi
ContentListView
components/school-content/ContentListView.tsx — FlatList tabanlı içerik listesi. Pagination destekli.
allMedia Birleştirme Pattern
const allMedia = useMemo(() => {
const media = [];
// single media ekle
if (item.media) media.push({ id, url });
// medias dizisi ekle (duplicate check ile)
item.medias?.forEach(m => {
if (!media.find(e => e.id === m.id)) media.push({ id, url });
});
return media;
}, [item]);Related
- okul-icerikleri — içerik domain
- icerik-ekreni-pattern — tab pattern
- icerik-form-modal-pattern — form modal