Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Review
Yapılan iş
Bu PR ile projedeki manuel ekran geçişi yapısı kaldırılarak gerçek bir navigation mimarisine geçildi. Buna ek olarak:
Navigator Yapısı Ne İşe Yarıyor
Önceden ekran geçişleri
App.tsxiçindeuseStateile yönetiliyordu. Bu yaklaşım küçük yapılarda çalışsa da proje büyüdükçe:Bu PR ile navigation aşağıdaki şekilde düzenlendi:
src/navigation/AppNavigator.tsxsrc/navigation/MainTabNavigator.tsxsrc/navigation/ProfileStackNavigator.tsxsrc/navigation/types.tsRoot navigator
AppNavigator.tsxuygulamanın ana girişini yönetir.Örnek:
Burada:
Bu bizim proje için doğru çünkü:
EventDetailhem Home hem Calendar hem My Events içinden açılıyorChatDetailChats alanından açılıyorGlobalChatayrı bir ortak ekranBottom tab navigator
MainTabNavigator.tsxiçinde ana sekmeler tanımlanır:Bu yapı sayesinde:
alanları alt tab olarak düzgün ayrılmış oldu.
Örnek olarak
Hometab içinde event detaya geçiş şu şekilde yapılıyor:Yani artık ekran geçişi state değiştirerek değil, gerçek navigation ile yapılıyor.
Profile stack
ProfileStackNavigator.tsxprofile altındaki ekranları yönetiyor:Bu yapı sayesinde profile altında yeni ekran eklemek çok kolay hale geldi.
Örnek:
My EventsApp SettingsFAQgibi alanlar artık tek ekranda modal benzeri yönetilmek yerine gerçek stack ekranı olarak çalışıyor.
Event Altındaki Remaining Bar Nasıl Çalışıyor
Bu PR ile event detail ekranına kalan süre bilgisi eklendi.
İlgili dosyalar:
src/screens/EventDetailScreen.tsxsrc/hooks/useEventCountdown.tssrc/utils/eventDate.tssrc/data/events.tsŞu an nasıl çalışıyor
Şu anda event verisi mock data üzerinden geliyor. Event objesi içinde mevcut olarak:
datetimealanları var.
Ayrıca gerçek veriye hazırlık için opsiyonel
startsAtalanı eklendi:Countdown mantığı şu:
startsAtvarsa doğrudan onu kullanırdate + timealanlarını parse ederTarih çözümleme örneği:
Event detail ekrana bağlanışı:
UI tarafında:
2d 4h 10m4h 17m 53sEvent startedGerçek data gelince nasıl değişecek
Bu yapı özellikle kolay geçiş için yazıldı.
Yarın gerçek API geldiğinde ideal veri şöyle olabilir:
Bu durumda ekran tarafında hiçbir şey değişmeyecek.
Sadece API mapper içinde gelen alan app formatına dönüştürülecek:
Yani:
Bu da mock datadan gerçek dataya geçişi çok kolaylaştırıyor.
FAQ Kısmı Nasıl Yapıldı
İlgili dosyalar:
src/screens/FAQScreen.tsxsrc/data/faqs.tssrc/screens/ProfileScreen.tsxsrc/navigation/ProfileStackNavigator.tsxProfile içine yeni bir
FAQmenü maddesi eklendi ve ayrı bir ekran açacak şekilde stack’e bağlandı.Örnek:
Ve stack tarafında:
Şu an nasıl çalışıyor
https://sarajevoexpats.com/qaassayfası kontrol edildi. Şu an yayında soru listesi görünmüyor ve sayfadaNo questions and answers found.bilgisi yer alıyor.Bu nedenle ekran şu an:
Veri ayrı dosyada tutuluyor:
Bu bilinçli yapıldı; çünkü gerçek data geldiğinde UI’yi değil yalnızca veri kaynağını değiştirmek istiyoruz.
Gerçek data gelince nasıl değişecek
Gerçek FAQ endpoint’i geldiğinde iki seçenek var:
src/data/faqs.tsyerine servis katmanından veri çekmekFaqItem[]formatına mapleyip aynı ekranı kullanmakÖrnek:
Sonrasında
FAQScreenaynı kalır; sadece statikfaqsyerine servis verisi kullanır.Bu da yine mocktan gerçeğe geçişte ekranı bozmadan ilerlememizi sağlar.
Sonuç
Bu PR ile:
En önemli nokta şu:
Bu değişiklikler sadece bugünü çözmüyor; yarın Sarajevo Expats token ve gerçek verileri geldiğinde minimum kod değişikliğiyle entegrasyon yapabilmemizi sağlıyor.