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]);