trying one method for navigating and on to the next

This commit is contained in:
talksik
2021-12-19 18:36:53 -08:00
parent 4dc7b422e9
commit c8b383449e
5 changed files with 27 additions and 35 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ import NavigationStack
struct ContentView: View {
var body: some View {
NavigationStackView {
RouterView()
RouterView()
}
}
}
+1 -1
View File
@@ -9,7 +9,7 @@ import Foundation
import FirebaseFirestoreSwift
struct Messages: Identifiable, Codable {
@DocumentID var id: String? = UUID().uuidString
@DocumentID var id: String?
var senderId: String
var receiverId: String
+1 -1
View File
@@ -9,7 +9,7 @@ import Foundation
import FirebaseFirestoreSwift
struct User: Identifiable, Codable {
@DocumentID var id: String? = UUID().uuidString
@DocumentID var id: String?
var nickname: String?
var phoneNumber: String?
var emailAddress:String?
+12 -19
View File
@@ -121,17 +121,22 @@ final class AuthSessionStore: ObservableObject, SessionStore {
guard let self = self else { return }
self.sessionState = user == nil ? SessionState.isLoggedOut : SessionState.isAuthenticated
// get the user from the auth table in firebase auth
if let user = user {
if let uid = user?.uid {
// if we have a user, create a new user model
print("auth listener: Got user: \(user.uid)")
print("auth listener: phone number: \(user.phoneNumber!)")
print("auth listener: Got user: \(uid)")
print("auth listener: phone number: \(user?.phoneNumber)")
// TODO: go to firestore and get full user document for the current authenticated user
// and have this in environment for all pages to access without having to fetch all the time
self.getAndSetEnvironmentUserDetails(userId: user.uid)
// get user from firestore and store in environment
self.firestoreService.getUser(userId: uid) {[weak self] firestoreUser in
// if we get a user back, then set this to our authsessionstore for our views
print("user from firestore in auth listener: \(firestoreUser)")
if firestoreUser != nil {
self?.user = firestoreUser
}
}
self.sessionState = .isAuthenticated
} else {
@@ -141,18 +146,6 @@ final class AuthSessionStore: ObservableObject, SessionStore {
}
}
}
private func getAndSetEnvironmentUserDetails(userId: String) {
self.firestoreService.getUser(userId: userId) {firestoreUser in
// if we get a user back, then set this to our instance to allow UI to get published with all user details
if firestoreUser != nil {
// TODO: prolly useless since we never set up a background thread for the rest of this code before
DispatchQueue.main.async {
self.user = firestoreUser
}
}
}
}
}
extension UIApplication {
+12 -13
View File
@@ -31,21 +31,20 @@ struct RouterView: View {
var body: some View {
SplashView()
.onAppear() {
print(authSessionStore)
print("figuring out where to send the user based on \(self.authSessionStore)")
if authSessionStore.sessionState == SessionState.isAuthenticated {
if let user = authSessionStore.user {
// evaluate where the user should go based on how much data he has
// user is authenticated but has never picked a username or avatar
if user.nickname != nil && user.avatar != nil {
self.navigationStack.push(OnboardingTrioView())
} else {// user is existing user for a year -> signs in is pushed nicely right to hub
self.navigationStack.push(InnerCircleView())
}
.onReceive(self.authSessionStore.$user) {updatedUserFromAuth in // observing user because takes longer to get the user details than see updates to sessionstate and we need the user for the logic below
print("figuring out where to send the user based on state: \(self.authSessionStore.sessionState)")
if self.authSessionStore.sessionState == SessionState.isAuthenticated && updatedUserFromAuth != nil {
print("user stored in authsession store: \(updatedUserFromAuth)")
// evaluate where the user should go based on how much data he has
// user is authenticated but has never picked a username or avatar
if updatedUserFromAuth?.nickname != nil && updatedUserFromAuth?.avatar != nil {
self.navigationStack.push(OnboardingTrioView())
} else {// user is existing user/up and running user -> signs in is pushed nicely right to hub
self.navigationStack.push(InnerCircleView())
}
} else {
print("sending user to welcome view")
// go to welcome page at which point they can go and follow the programmatic
// line to the sigin and so on and so forth
self.navigationStack.push(WelcomeView())