diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 2f231752a0..9ad5efddd6 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -1538,96 +1538,586 @@ struct ChatView: View { .contextMenu { if case let .group(gInfo) = chat.chatInfo, ci.isReport, ci.meta.itemDeleted == nil { if ci.chatDir != .groupSnd, gInfo.membership.memberRole >= .moderator { - archiveReportButton(ci) + //archiveReportButton(ci) + Button { + archivingReports = [ci.id] + showArchivingReports = true + } label: { + Label("Archive report", systemImage: "archivebox") + } + } + //deleteButton(ci, label: "Delete report") + Button(role: .destructive) { + if !revealed, + let currIndex = m.getChatItemIndex(ci), + let ciCategory = ci.mergeCategory { + let (prevHidden, _) = m.getPrevShownChatItem(currIndex, ciCategory) + if let range = itemsRange(currIndex, prevHidden) { + var itemIds: [Int64] = [] + for i in range { + itemIds.append(ItemsModel.shared.reversedChatItems[i].id) + } + showDeleteMessages = true + deletingItems = itemIds + } else { + showDeleteMessage = true + deletingItem = ci + } + } else { + showDeleteMessage = true + deletingItem = ci + } + } label: { + Label("Delete report", systemImage: "trash") } - deleteButton(ci, label: "Delete report") } else if let mc = ci.content.msgContent, !ci.isReport, ci.meta.itemDeleted == nil || revealed { - let rs = availableReactions() + //let rs = availableReactions() + let rs = MsgReaction.values + .filter { reaction in + !chatItem.reactions.contains { + $0.userReacted && $0.reaction == reaction + } + } if chat.chatInfo.featureEnabled(.reactions) && ci.allowAddReaction, rs.count > 0 { - reactionsGroup(rs) + //reactionsGroup(rs) + if #available(iOS 16.4, *) { + ControlGroup { + if rs.count > 4 { + ForEach(rs[0..<3]) { reaction in + Button(reaction.text) { + setReaction(chatItem, add: true, reaction: reaction) + } + } + Menu { + ForEach(rs[3.. 1 || revealed) { - if revealed { shrinkButton() } else { expandButton() } - deleteButton(ci) + if revealed { + //shrinkButton() + Button { + withConditionalAnimation { + reveal(false) + } + } label: { + Label ( + NSLocalizedString("Hide", comment: "chat item action"), + systemImage: "arrow.down.and.line.horizontal.and.arrow.up" + ) + } + } else { + //expandButton() + Button { + withConditionalAnimation { + reveal(true) + } + } label: { + Label( + NSLocalizedString("Expand", comment: "chat item action"), + systemImage: "arrow.up.and.line.horizontal.and.arrow.down" + ) + } + } + //deleteButton(ci) + Button(role: .destructive) { + if !revealed, + let currIndex = m.getChatItemIndex(ci), + let ciCategory = ci.mergeCategory { + let (prevHidden, _) = m.getPrevShownChatItem(currIndex, ciCategory) + if let range = itemsRange(currIndex, prevHidden) { + var itemIds: [Int64] = [] + for i in range { + itemIds.append(ItemsModel.shared.reversedChatItems[i].id) + } + showDeleteMessages = true + deletingItems = itemIds + } else { + showDeleteMessage = true + deletingItem = ci + } + } else { + showDeleteMessage = true + deletingItem = ci + } + } label: { + Label("Delete", systemImage: "trash") + } } else if ci.showLocalDelete { - deleteButton(ci) + //deleteButton(ci) + Button(role: .destructive) { + if !revealed, + let currIndex = m.getChatItemIndex(ci), + let ciCategory = ci.mergeCategory { + let (prevHidden, _) = m.getPrevShownChatItem(currIndex, ciCategory) + if let range = itemsRange(currIndex, prevHidden) { + var itemIds: [Int64] = [] + for i in range { + itemIds.append(ItemsModel.shared.reversedChatItems[i].id) + } + showDeleteMessages = true + deletingItems = itemIds + } else { + showDeleteMessage = true + deletingItem = ci + } + } else { + showDeleteMessage = true + deletingItem = ci + } + } label: { + Label("Delete", systemImage: "trash") + } } else { EmptyView() } if selectedChatItems == nil && ci.canBeDeletedForSelf { Divider() - selectButton(ci) + //selectButton(ci) + Button { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + withAnimation { + selectUnselectChatItem(select: true, ci) + } + } + } label: { + Label( + NSLocalizedString("Select", comment: "chat item action"), + systemImage: "checkmark.circle" + ) + } } } .accessibilityLabel("")