Proje: OkulUp · Hub: OkulUp — Decisions

Karar: Custom TabBar ve Custom Drawer

Karar

Expo Router’ın built-in Tabs Navigator ve Drawer Navigator yerine:

  • Custom TabBar component (src/components/layout/TabBar.tsx)
  • Custom Drawer component (src/components/modules/drawer/Drawer.tsx)

Tab layout: (tabs)/_layout.tsx sadece <Slot /> + <TabBar /> içeriyor.

Why: Hem tab hem drawer içerikleri kullanıcı rolüne ve mobileConfig’e göre dinamik olarak belirleniyor. getTabItems() ve getDrawerItems() fonksiyonları context’e göre farklı item listeleri döndürüyor. Expo’nun default navigator’ları statik route tanımı gerektiriyor — dinamik visibility bu şekilde sağlanamaz.

Ayrıca TabBar’da badge count’ları (unreadTotal, unreadConversations, unreadAnnouncements) gösteriliyor ve Drawer’da ThemeToggle var — bunlar default navigator’a entegre edilemez kolayca.

How to apply: Yeni navigation item eklerken:

  1. NavigationItemId union’a ekle
  2. NAVIGATION_ITEMS map’e tanım ekle (surfaces, isVisible)
  3. canSeeNavigationItem switch’e ekle
  4. Route dosyasını app/(tabs)/ veya uygun yere ekle