Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion LexAI_iOS/LexAI_iOS/Views/ChatView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -196,4 +231,5 @@ private struct MessageBubbleView: View {
#Preview {
@Previewable @State var selectedLanguage = "English"
return ChatView(selectedLanguage: $selectedLanguage)
.environmentObject(FirebaseManager())
}
7 changes: 4 additions & 3 deletions LexAI_iOS/LexAI_iOS/Views/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions LexAI_iOS/LexAI_iOS/Views/HomeView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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"]

Expand All @@ -14,6 +15,7 @@ struct HomeView: View {
ZStack {
VStack {
ChatView(selectedLanguage: $selectedLanguage)
.environmentObject(firebaseManager)
}


Expand Down
Loading