Login required for access
In order to watch this lesson, you'll need to login to the website.
Save and Fetch Recent Messages
SwiftUI Firebase Real Time Chat
MainMessagesView.swift
class MainMessagesViewModel: ObservableObject {        @Published var errorMessage = ""    @Published var chatUser: ChatUser?    @Published var isUserCurrentlyLoggedOut = false        init() {                DispatchQueue.main.async {            self.isUserCurrentlyLoggedOut = FirebaseManager.shared.auth.currentUser?.uid == nil        }                fetchCurrentUser()                fetchRecentMessages()    }        @Published var recentMessages = [RecentMessage]()        private func fetchRecentMessages() {        guard let uid = FirebaseManager.shared.auth.currentUser?.uid else { return }                FirebaseManager.shared.firestore            .collection("recent_messages")            .document(uid)            .collection("messages")            .order(by: "timestamp")            .addSnapshotListener { querySnapshot, error in                if let error = error {                    self.errorMessage = "Failed to listen for recent messages: \(error)"                    print(error)                    return                }                                querySnapshot?.documentChanges.forEach({ change in                    let docId = change.document.documentID                                        if let index = self.recentMessages.firstIndex(where: { rm in                        return rm.documentId == docId                    }) {                        self.recentMessages.remove(at: index)                    }                                        self.recentMessages.insert(.init(documentId: docId, data: change.document.data()), at: 0)                })            }    }        func fetchCurrentUser() {        guard let uid = FirebaseManager.shared.auth.currentUser?.uid else {            self.errorMessage = "Could not find firebase uid"            return        }                FirebaseManager.shared.firestore.collection("users").document(uid).getDocument { snapshot, error in            if let error = error {                self.errorMessage = "Failed to fetch current user: \(error)"                print("Failed to fetch current user:", error)                return            }                        guard let data = snapshot?.data() else {                self.errorMessage = "No data found"                return                            }                        self.chatUser = .init(data: data)            FirebaseManager.shared.currentUser = self.chatUser        }    }        func handleSignOut() {        isUserCurrentlyLoggedOut.toggle()        try? FirebaseManager.shared.auth.signOut()    }    }

Comments (0)
HELP & SUPPORT