out of menu to contextMenu

This commit is contained in:
Avently
2025-03-09 03:27:48 +07:00
parent 3f30137975
commit 7493f1f2f8
+25 -28
View File
@@ -1535,7 +1535,31 @@ struct ChatView: View {
.environment(\.revealed, revealed)
.environment(\.showTimestamp, itemSeparation.timestamp)
.modifier(ChatItemClipped(ci, tailVisible: itemSeparation.largeGap && (ci.meta.itemDeleted == nil || revealed)))
.contextMenu { menu(ci, range, live: composeState.liveMessage != nil) }
.contextMenu {
if case let .group(gInfo) = chat.chatInfo, ci.isReport, ci.meta.itemDeleted == nil {
menuReport(ci, gInfo)
} else if let mc = ci.content.msgContent, !ci.isReport, ci.meta.itemDeleted == nil || revealed {
menuContent1(ci, mc, composeState.liveMessage != nil)
menuContent2(ci, composeState.liveMessage != nil)
menuContentModerate(ci, composeState.liveMessage != nil)
} else if ci.meta.itemDeleted != nil {
menuDeleted(ci, range)
} else if ci.isDeletedContent {
viewInfoButton(ci)
deleteButton(ci)
} else if ci.mergeCategory != nil && ((range?.count ?? 0) > 1 || revealed) {
if revealed { shrinkButton() } else { expandButton() }
deleteButton(ci)
} else if ci.showLocalDelete {
deleteButton(ci)
} else {
EmptyView()
}
if selectedChatItems == nil && ci.canBeDeletedForSelf {
Divider()
selectButton(ci)
}
}
.accessibilityLabel("")
if !ci.chatDir.sent {
goToItemButton(false)
@@ -1638,33 +1662,6 @@ struct ChatView: View {
}
}
@ViewBuilder
private func menu(_ ci: ChatItem, _ range: ClosedRange<Int>?, live: Bool) -> some View {
if case let .group(gInfo) = chat.chatInfo, ci.isReport, ci.meta.itemDeleted == nil {
menuReport(ci, gInfo)
} else if let mc = ci.content.msgContent, !ci.isReport, ci.meta.itemDeleted == nil || revealed {
menuContent1(ci, mc, live)
menuContent2(ci, live)
menuContentModerate(ci, live)
} else if ci.meta.itemDeleted != nil {
menuDeleted(ci, range)
} else if ci.isDeletedContent {
viewInfoButton(ci)
deleteButton(ci)
} else if ci.mergeCategory != nil && ((range?.count ?? 0) > 1 || revealed) {
if revealed { shrinkButton() } else { expandButton() }
deleteButton(ci)
} else if ci.showLocalDelete {
deleteButton(ci)
} else {
EmptyView()
}
if selectedChatItems == nil && ci.canBeDeletedForSelf {
Divider()
selectButton(ci)
}
}
@ViewBuilder func menuReport(_ ci: ChatItem, _ gInfo: GroupInfo) -> some View {
if ci.chatDir != .groupSnd, gInfo.membership.memberRole >= .moderator {
archiveReportButton(ci)