ios: disable reply/edit actions and deletion of live item in live mode (#1722)

This commit is contained in:
Evgeny Poberezkin
2023-01-11 13:29:09 +00:00
committed by GitHub
parent a6d7604d21
commit 2d47175f94
2 changed files with 15 additions and 9 deletions
+12 -6
View File
@@ -442,9 +442,13 @@ struct ChatView: View {
var body: some View {
let alignment: Alignment = ci.chatDir.sent ? .trailing : .leading
let uiMenu: Binding<UIMenu> = Binding(
get: { UIMenu(title: "", children: menu(live: composeState.liveMessage != nil)) },
set: { _ in }
)
ChatItemView(chatInfo: chat.chatInfo, chatItem: ci, showMember: showMember, maxWidth: maxWidth, scrollProxy: scrollProxy, revealed: $revealed)
.uiKitContextMenu(actions: menu())
.uiKitContextMenu(menu: uiMenu)
.confirmationDialog("Delete message?", isPresented: $showDeleteMessage, titleVisibility: .visible) {
Button("Delete for me", role: .destructive) {
deleteMessage(.cidmInternal)
@@ -459,10 +463,10 @@ struct ChatView: View {
.frame(minWidth: 0, maxWidth: .infinity, alignment: alignment)
}
private func menu() -> [UIAction] {
private func menu(live: Bool) -> [UIAction] {
var menu: [UIAction] = []
if let mc = ci.content.msgContent, !ci.meta.itemDeleted || revealed {
if !ci.meta.itemDeleted && !ci.isLiveDummy && composeState.liveMessage == nil {
if !ci.meta.itemDeleted && !ci.isLiveDummy && !live {
menu.append(replyUIAction())
}
menu.append(shareUIAction())
@@ -478,13 +482,15 @@ struct ChatView: View {
menu.append(saveFileAction(filePath))
}
}
if ci.meta.editable && !mc.isVoice {
if ci.meta.editable && !mc.isVoice && !live {
menu.append(editAction())
}
if revealed {
menu.append(hideUIAction())
}
menu.append(deleteUIAction())
if !live || !ci.meta.isLive {
menu.append(deleteUIAction())
}
} else if ci.meta.itemDeleted {
menu.append(revealUIAction())
menu.append(deleteUIAction())
@@ -11,10 +11,10 @@ import UIKit
import SwiftUI
extension View {
func uiKitContextMenu(title: String = "", actions: [UIAction]) -> some View {
func uiKitContextMenu(menu: Binding<UIMenu>) -> some View {
self.overlay(Color(uiColor: .systemBackground))
.overlay(
InteractionView(content: self, menu: UIMenu(title: title, children: actions))
InteractionView(content: self, menu: menu)
)
}
}
@@ -26,7 +26,7 @@ private struct InteractionConfig<Content: View> {
private struct InteractionView<Content: View>: UIViewRepresentable {
let content: Content
let menu: UIMenu
@Binding var menu: UIMenu
func makeUIView(context: Context) -> UIView {
let view = UIView()