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,