Proje: Okul B2B App · Hub: Okul B2B App — Conventions
Leads Ekranı Pattern
app/(tabs)/leads.tsx — Başvuru listesi ekranı.
Temel Özellikler
FlatListile infinite scroll pagination- Pull-to-refresh (
RefreshControl) useLocalSearchParams()ile deep linkleadIdparametresi- Lead tıklandığında
LeadDetailModalaçı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:
schoolAnsweredLeadStatus(meeting status) — yeşil/mavi/kırmızı kategoriinteraction_status.text— API’den gelen renk ve metin (inline style)- İkisi de yoksa badge gösterilmez
Meeting Status Kategorileri
| Kategori | Renk | Örnek Statüler |
|---|---|---|
| success | Yeşil (#D1FAE5/#065F46) | Kayıt gerçekleşti, Randevu verildi |
| neutral | Mavi (#DBEAFE/#1E40AF) | Telefonla görüşüldü, Düşünme aşamasında |
| reject | Kı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);
}
});Related
- leads-basvu-yonetimi — lead domain
- icerik-ekreni-pattern — benzer tab+pagination pattern