78 lines
2.6 KiB
Swift
78 lines
2.6 KiB
Swift
import SwiftUI
|
|
|
|
struct ForwardPickerView: View {
|
|
let message: Message
|
|
let appState: AppState
|
|
|
|
@Environment(\.dismiss) private var dismiss
|
|
@State private var conversations: [Conversation] = []
|
|
@State private var isLoading = true
|
|
@State private var isSending = false
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
Group {
|
|
if isLoading {
|
|
ProgressView("Loading conversations...")
|
|
} else if conversations.isEmpty {
|
|
Text("No conversations available")
|
|
.foregroundStyle(.secondary)
|
|
} else {
|
|
List(conversations) { conv in
|
|
Button {
|
|
forwardTo(conv)
|
|
} label: {
|
|
HStack {
|
|
CircularAvatarView(
|
|
name: conv.displayName(currentUserId: appState.currentUser?.id ?? ""),
|
|
size: 36,
|
|
isGroup: conv.isGroup
|
|
)
|
|
Text(conv.displayName(currentUserId: appState.currentUser?.id ?? ""))
|
|
Spacer()
|
|
}
|
|
}
|
|
.disabled(isSending)
|
|
}
|
|
}
|
|
}
|
|
.navigationTitle("Forward to...")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .cancellationAction) {
|
|
Button("Cancel") { dismiss() }
|
|
}
|
|
}
|
|
}
|
|
.task {
|
|
conversations = await appState.chatClient.listConversations()
|
|
isLoading = false
|
|
}
|
|
}
|
|
|
|
private func forwardTo(_ conv: Conversation) {
|
|
isSending = true
|
|
Task {
|
|
let forwardPayload: [String: Any] = [
|
|
"forwarded_from": [
|
|
"sender": message.senderUsername,
|
|
"conversation_id": message.conversationId,
|
|
"message_id": message.id,
|
|
] as [String: Any]
|
|
]
|
|
let (success, _, _) = await appState.chatClient.sendMessage(
|
|
convId: conv.id,
|
|
text: message.text ?? "",
|
|
members: conv.members,
|
|
extraPayload: forwardPayload
|
|
)
|
|
await MainActor.run {
|
|
isSending = false
|
|
if success {
|
|
dismiss()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|