mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 20:05:19 +00:00
Add message action sheet for user interactions
- Tap any message to show action sheet with user options - Actions include: private message, hug, slap, and block - Only appears for messages from other users (not system or self) - Integrates with existing chat commands (/hug, /slap, /block)
This commit is contained in:
@@ -22,6 +22,9 @@ struct ContentView: View {
|
|||||||
@State private var commandSuggestions: [String] = []
|
@State private var commandSuggestions: [String] = []
|
||||||
@State private var backSwipeOffset: CGFloat = 0
|
@State private var backSwipeOffset: CGFloat = 0
|
||||||
@State private var showPrivateChat = false
|
@State private var showPrivateChat = false
|
||||||
|
@State private var showMessageActions = false
|
||||||
|
@State private var selectedMessageSender: String?
|
||||||
|
@State private var selectedMessageSenderID: String?
|
||||||
|
|
||||||
private var backgroundColor: Color {
|
private var backgroundColor: Color {
|
||||||
colorScheme == .dark ? Color.black : Color.white
|
colorScheme == .dark ? Color.black : Color.white
|
||||||
@@ -120,6 +123,41 @@ struct ContentView: View {
|
|||||||
FingerprintView(viewModel: viewModel, peerID: peerID)
|
FingerprintView(viewModel: viewModel, peerID: peerID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.confirmationDialog(
|
||||||
|
selectedMessageSender.map { "@\($0)" } ?? "Actions",
|
||||||
|
isPresented: $showMessageActions,
|
||||||
|
titleVisibility: .visible
|
||||||
|
) {
|
||||||
|
Button("private message") {
|
||||||
|
if let peerID = selectedMessageSenderID {
|
||||||
|
viewModel.startPrivateChat(with: peerID)
|
||||||
|
withAnimation(.spring(response: 0.3, dampingFraction: 0.8)) {
|
||||||
|
showSidebar = false
|
||||||
|
sidebarDragOffset = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button("hug") {
|
||||||
|
if let sender = selectedMessageSender {
|
||||||
|
viewModel.sendMessage("/hug @\(sender)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button("slap") {
|
||||||
|
if let sender = selectedMessageSender {
|
||||||
|
viewModel.sendMessage("/slap @\(sender)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button("BLOCK", role: .destructive) {
|
||||||
|
if let sender = selectedMessageSender {
|
||||||
|
viewModel.sendMessage("/block \(sender)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button("cancel", role: .cancel) {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func messagesView(privatePeer: String?) -> some View {
|
private func messagesView(privatePeer: String?) -> some View {
|
||||||
@@ -188,6 +226,15 @@ struct ContentView: View {
|
|||||||
.padding(.horizontal, 12)
|
.padding(.horizontal, 12)
|
||||||
.padding(.vertical, 2)
|
.padding(.vertical, 2)
|
||||||
.id(message.id)
|
.id(message.id)
|
||||||
|
.contentShape(Rectangle())
|
||||||
|
.onTapGesture {
|
||||||
|
// Only show actions for messages from other users (not system or self)
|
||||||
|
if message.sender != "system" && message.sender != viewModel.nickname {
|
||||||
|
selectedMessageSender = message.sender
|
||||||
|
selectedMessageSenderID = message.senderPeerID
|
||||||
|
showMessageActions = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding(.vertical, 8)
|
.padding(.vertical, 8)
|
||||||
|
|||||||
Reference in New Issue
Block a user