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

Context State Yönetimi Mimarisi

Bu projede Redux, Zustand veya MobX kullanılmaz. Tüm global state React Context API ile yönetilir.

Provider Ağacı

_layout.tsx (Root)
  ThemeProvider                    ← Tema (light/dark/system)
    MainApp (font + auth state)
      CompanyProvider              ← Firma seçimi ve verisi
        TermsGuard                 ← Kullanım şartları gate
          AuthenticatedApp
            SchoolProvider         ← Okul seçimi ve verisi
              NotificationProvider ← Bildirim state
                Stack Navigator    ← Ekranlar

Neden Sadece Context?

B2B uygulama için global state ihtiyacı sınırlı:

  • Firma ve okul seçimi → CompanyContext + SchoolContext
  • Tema → ThemeContext
  • Bildirimler → NotificationContext

Karmaşık redux store gerektiren real-time sync veya çok sayıda kullanıcı akışı yok.

CompanyProvider Remount Pattern

Login her tamamlandığında CompanyProvider zorla remount edilir:

<CompanyProvider key={`auth-${authKey}`}>

Bu, önceki firma verisini temizler. authKey her login’de artar.

isReady Pattern

CompanyProvider.isReady: firma yükleme tamamlandığında true. Ekranlar isReady olana kadar LoadingScreen gösterir.

Logout Event Pattern

Otomatik logout için event subscription:

AuthService.onLogout(() => setIsAuthenticated(false));

Bu, 30 saniyelik periodic check’i beklemeden anında logout UI güncellemesi sağlar.