From d7f283a65ded3e009f1a67f8e0b5a4a6559a7fe4 Mon Sep 17 00:00:00 2001 From: Ben Pollman Date: Tue, 12 Nov 2024 04:28:56 +1100 Subject: [PATCH 1/4] Channel Info: Add Check for `update-channel-members` permission before showing "Add Users" button (#650) --- .../ChannelInfo/ChatChannelInfoView.swift | 3 +- .../ChatChannelInfoViewModel.swift | 9 +++++ .../ChatChannelInfoViewModel_Tests.swift | 37 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoView.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoView.swift index f9e1de480..d6438a3a5 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoView.swift @@ -137,7 +137,7 @@ public struct ChatChannelInfoView: View, KeyboardReadable { } ToolbarItem(placement: .navigationBarTrailing) { - viewModel.channel.isDirectMessageChannel ? nil : + if viewModel.shouldShowAddUserButton { Button { viewModel.addUsersShown = true } label: { @@ -148,6 +148,7 @@ public struct ChatChannelInfoView: View, KeyboardReadable { .background(colors.tintColor) .clipShape(Circle()) } + } } } .onReceive(keyboardWillChangePublisher) { visible in diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift index 7e3bd71c9..fe2a508bd 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift @@ -48,6 +48,15 @@ public class ChatChannelInfoViewModel: ObservableObject, ChatChannelControllerDe channel.ownCapabilities.contains(.updateChannel) } + public var shouldShowAddUserButton: Bool { + if channel.isDirectMessageChannel { + return false + } else { + return channel.ownCapabilities.contains(.updateChannelMembers) + } + } + + var channelController: ChatChannelController! private var memberListController: ChatChannelMemberListController! private var loadingUsers = false diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoViewModel_Tests.swift index f11ea200e..5625ba95c 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoViewModel_Tests.swift @@ -262,6 +262,42 @@ class ChatChannelInfoViewModel_Tests: StreamChatTestCase { XCTAssert(leaveButton == false) } + func test_chatChannelInfoVM_addUserButtonShownInGroup() { + // Given + let channel = mockGroup(with: 5) + let viewModel = ChatChannelInfoViewModel(channel: channel) + + // When + let leaveButton = viewModel.shouldShowAddUserButton + + // Then + XCTAssert(leaveButton == true) + } + + func test_chatChannelInfoVM_addUserButtonHiddenInGroup() { + // Given + let channel = mockGroup(with: 5, updateCapabilities: false) + let viewModel = ChatChannelInfoViewModel(channel: channel) + + // When + let leaveButton = viewModel.shouldShowAddUserButton + + // Then + XCTAssert(leaveButton == false) + } + + func test_chatChannelInfoVM_addUserButtonHiddenInDM() { + // Given + let channel = ChatChannel.mockDMChannel() + let viewModel = ChatChannelInfoViewModel(channel: channel) + + // When + let leaveButton = viewModel.shouldShowAddUserButton + + // Then + XCTAssert(leaveButton == false) + } + // MARK: - private private func mockGroup(with memberCount: Int, updateCapabilities: Bool = true) -> ChatChannel { @@ -275,6 +311,7 @@ class ChatChannelInfoViewModel_Tests: StreamChatTestCase { capabilities.insert(.updateChannel) capabilities.insert(.deleteChannel) capabilities.insert(.leaveChannel) + capabilities.insert(.updateChannelMembers) } let channel = ChatChannel.mock( cid: cid, From a820204d244f9f5276f1d54c20c8b9fe3517a286 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 11 Nov 2024 17:32:47 +0000 Subject: [PATCH 2/4] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 777ae29b9..8a2d01eae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### 🔄 Changed - Message composer now uses `.uploadFile` capability when showing attachment picker icon [#646](https://github.com/GetStream/stream-chat-swiftui/pull/646) +- `ChannelInfoView` now uses `.updateChannelMembers` capability to show "Add Users" button [#651](https://github.com/GetStream/stream-chat-swiftui/pull/651) # [4.66.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.66.0) _November 06, 2024_ From 5919daceb9251c05c492b477fa31fe765efc97f6 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 11 Nov 2024 17:52:00 +0000 Subject: [PATCH 3/4] Fix swiftformat --- .../ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift index fe2a508bd..e28333e65 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift @@ -56,7 +56,6 @@ public class ChatChannelInfoViewModel: ObservableObject, ChatChannelControllerDe } } - var channelController: ChatChannelController! private var memberListController: ChatChannelMemberListController! private var loadingUsers = false From c70c30e9fbecaeb27204febc6ad1d0765de682f9 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Mon, 11 Nov 2024 20:30:16 +0000 Subject: [PATCH 4/4] Fix test on channel info view --- .../ChatChannel/ChannelInfo/ChatChannelInfoView_Tests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoView_Tests.swift index cd581ac97..359d34d2a 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoView_Tests.swift @@ -151,7 +151,7 @@ class ChatChannelInfoView_Tests: StreamChatTestCase { let group = ChatChannel.mock( cid: .unique, name: "Test Group", - ownCapabilities: [.updateChannel, .leaveChannel], + ownCapabilities: [.updateChannel, .leaveChannel, .updateChannelMembers], lastActiveMembers: members, memberCount: members.count )