Proje: Okul B2B App · Hub: Okul B2B App — Conventions

Leads Ekranı Pattern

app/(tabs)/leads.tsx — Başvuru listesi ekranı.

Temel Özellikler

  • FlatList ile infinite scroll pagination
  • Pull-to-refresh (RefreshControl)
  • useLocalSearchParams() ile deep link leadId parametresi
  • Lead tıklandığında LeadDetailModal açılır (navigation yok)
  • AppState change’de arka plandan dönünce refresh

StatusBadge Önceliği

Lead satırında gösterilen badge şu sıraya göre seçilir:

  1. schoolAnsweredLeadStatus (meeting status) — yeşil/mavi/kırmızı kategori
  2. interaction_status.text — API’den gelen renk ve metin (inline style)
  3. İkisi de yoksa badge gösterilmez

Meeting Status Kategorileri

KategoriRenkÖrnek Statüler
successYeşil (#D1FAE5/#065F46)Kayıt gerçekleşti, Randevu verildi
neutralMavi (#DBEAFE/#1E40AF)Telefonla görüşüldü, Düşünme aşamasında
rejectKırmızı (#FEE2E2/#991B1B)Anlaşma gerçekleşmedi

Cached Interaction Status

Lead detay güncellendikten sonra list’e dönünce badge anında güncellenmesi için cachedInteractionStatus state kullanılır. Modal kapandığında güncellenen status cache’e yazılır, FlatList yeniden render beklemeden badge güncellenir.

AppState Refresh

AppState.addEventListener('change', (nextState) => {
  if (nextState === 'active' && wasInBackground) {
    // Arka plandan dönünce leads listesini yenile
    fetchLeads(1, true);
  }
});