diff --git a/LexAI_iOS/LexAI_iOS/Views/ChatView.swift b/LexAI_iOS/LexAI_iOS/Views/ChatView.swift index 88764ee..25562ac 100644 --- a/LexAI_iOS/LexAI_iOS/Views/ChatView.swift +++ b/LexAI_iOS/LexAI_iOS/Views/ChatView.swift @@ -13,7 +13,11 @@ struct ChatView: View { @State private var inputText: String = "" @State private var showScanDocuments = false @State private var isAwaitingReply = false - @Binding var selectedLanguage: String + + @Binding var selectedLanguage: String // language in conversation + @EnvironmentObject var firebaseManager: FirebaseManager + @Environment(/.scenePhase) private var scenePhase // to detect app exit + private let functions = Functions.functions() var body: some View { @@ -56,6 +60,37 @@ struct ChatView: View { } #endif } + // triger 1: user leaves the view (new chat) + .onDisappear { + saveChatIfNeeded() + } + + // trigger 2: app goes to background or is killed + .onChange(of: scenePhase) { , newPhase in + if newPhase == .background || newPhase == .inactive { + saveChatIfNeeded() + } + } + } + + // MARK: - Save chat + private func saveChatIfNeeded() { + guard !messages.isEmpty else { return } + + // Build a readable transcript from the message array + let transcript = messages + .map { ($0.isFromUser ? "User" : "LexAI") + ": " + $0.text } + .joined(separator: "\n") + + let chatPrompt = FirebaseManager.ChatPrompt( + prompt: transcript, + documents: [], + location: "", + language: selectedLanguage, + user: firebaseManager.user?.uid ?? "anonymous" + ) + + firebaseManager.saveChat(prompt: chatPrompt) } private var messageList: some View { @@ -196,4 +231,5 @@ private struct MessageBubbleView: View { #Preview { @Previewable @State var selectedLanguage = "English" return ChatView(selectedLanguage: $selectedLanguage) + .environmentObject(FirebaseManager()) } diff --git a/LexAI_iOS/LexAI_iOS/Views/ContentView.swift b/LexAI_iOS/LexAI_iOS/Views/ContentView.swift index bc5abb4..64598c7 100644 --- a/LexAI_iOS/LexAI_iOS/Views/ContentView.swift +++ b/LexAI_iOS/LexAI_iOS/Views/ContentView.swift @@ -9,15 +9,16 @@ import SwiftUI struct ContentView: View { - @StateObject var authManager = FirebaseManager() + @StateObject var firebaseManager = FirebaseManager() var body: some View { Group { - if authManager.isAuthenticated { + if firebaseManager.isAuthenticated { HomeView() + .environmentObject(firebaseManager) } else { AuthView() - .environmentObject(authManager) + .environmentObject(firebaseManager) } } } diff --git a/LexAI_iOS/LexAI_iOS/Views/HomeView.swift b/LexAI_iOS/LexAI_iOS/Views/HomeView.swift index ff070ad..c541617 100644 --- a/LexAI_iOS/LexAI_iOS/Views/HomeView.swift +++ b/LexAI_iOS/LexAI_iOS/Views/HomeView.swift @@ -6,6 +6,7 @@ struct HomeView: View { @State private var showToolbar = true @AppStorage("selectedLanguage") private var selectedLanguage: String = "English" //language storing for conversational use @State private var showLanguageDropdown = false + @EnvironmentObject var firebaseManager: FirebaseManager private let languages = ["English", "Spanish", "French", "Arabic", "German"] @@ -14,6 +15,7 @@ struct HomeView: View { ZStack { VStack { ChatView(selectedLanguage: $selectedLanguage) + .environmentObject(firebaseManager) }