ios_client
This commit is contained in:
77
ios_client 0.8.5/Kecalek/Views/Chat/ForwardPickerView.swift
Normal file
77
ios_client 0.8.5/Kecalek/Views/Chat/ForwardPickerView.swift
Normal file
@@ -0,0 +1,77 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user