Skip to content

Commit 41eca7c

Browse files
committed
Channel Info: Add Check for update-channel-members permission before showing "Add Users" button
1 parent ad2b081 commit 41eca7c

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public struct ChatChannelInfoView: View, KeyboardReadable {
137137
}
138138

139139
ToolbarItem(placement: .navigationBarTrailing) {
140-
viewModel.channel.isDirectMessageChannel ? nil :
140+
if viewModel.shouldShowAddUserButton {
141141
Button {
142142
viewModel.addUsersShown = true
143143
} label: {
@@ -148,6 +148,7 @@ public struct ChatChannelInfoView: View, KeyboardReadable {
148148
.background(colors.tintColor)
149149
.clipShape(Circle())
150150
}
151+
}
151152
}
152153
}
153154
.onReceive(keyboardWillChangePublisher) { visible in

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@ public class ChatChannelInfoViewModel: ObservableObject, ChatChannelControllerDe
4848
channel.ownCapabilities.contains(.updateChannel)
4949
}
5050

51+
public var shouldShowAddUserButton: Bool {
52+
if channel.isDirectMessageChannel {
53+
return false
54+
} else {
55+
return channel.ownCapabilities.contains(.updateChannelMembers)
56+
}
57+
}
58+
59+
5160
var channelController: ChatChannelController!
5261
private var memberListController: ChatChannelMemberListController!
5362
private var loadingUsers = false

StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/ChatChannelInfoViewModel_Tests.swift

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,42 @@ class ChatChannelInfoViewModel_Tests: StreamChatTestCase {
262262
XCTAssert(leaveButton == false)
263263
}
264264

265+
func test_chatChannelInfoVM_addUserButtonShownInGroup() {
266+
// Given
267+
let channel = mockGroup(with: 5)
268+
let viewModel = ChatChannelInfoViewModel(channel: channel)
269+
270+
// When
271+
let leaveButton = viewModel.shouldShowAddUserButton
272+
273+
// Then
274+
XCTAssert(leaveButton == true)
275+
}
276+
277+
func test_chatChannelInfoVM_addUserButtonHiddenInGroup() {
278+
// Given
279+
let channel = mockGroup(with: 5, updateCapabilities: false)
280+
let viewModel = ChatChannelInfoViewModel(channel: channel)
281+
282+
// When
283+
let leaveButton = viewModel.shouldShowAddUserButton
284+
285+
// Then
286+
XCTAssert(leaveButton == false)
287+
}
288+
289+
func test_chatChannelInfoVM_addUserButtonHiddenInDM() {
290+
// Given
291+
let channel = ChatChannel.mockDMChannel()
292+
let viewModel = ChatChannelInfoViewModel(channel: channel)
293+
294+
// When
295+
let leaveButton = viewModel.shouldShowAddUserButton
296+
297+
// Then
298+
XCTAssert(leaveButton == false)
299+
}
300+
265301
// MARK: - private
266302

267303
private func mockGroup(with memberCount: Int, updateCapabilities: Bool = true) -> ChatChannel {
@@ -275,6 +311,7 @@ class ChatChannelInfoViewModel_Tests: StreamChatTestCase {
275311
capabilities.insert(.updateChannel)
276312
capabilities.insert(.deleteChannel)
277313
capabilities.insert(.leaveChannel)
314+
capabilities.insert(.updateChannelMembers)
278315
}
279316
let channel = ChatChannel.mock(
280317
cid: cid,

0 commit comments

Comments
 (0)