Skip to content

Commit 8a1dc23

Browse files
Implemented muting of users
2 parents 55dcbb2 + 8e50027 commit 8a1dc23

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,31 @@ extension MessageAction {
6666
)
6767

6868
messageActions.append(flagAction)
69+
70+
let author = message.author
71+
let currentUser = chatClient.currentUserController().currentUser
72+
let isMuted = currentUser?.mutedUsers.contains(message.author) ?? false
73+
if isMuted {
74+
let unmuteAction = unmuteAction(
75+
for: message,
76+
channel: channel,
77+
chatClient: chatClient,
78+
userToUnmute: author,
79+
onFinish: onFinish,
80+
onError: onError
81+
)
82+
messageActions.append(unmuteAction)
83+
} else {
84+
let muteAction = muteAction(
85+
for: message,
86+
channel: channel,
87+
chatClient: chatClient,
88+
userToMute: author,
89+
onFinish: onFinish,
90+
onError: onError
91+
)
92+
messageActions.append(muteAction)
93+
}
6994
}
7095

7196
return messageActions
@@ -224,4 +249,74 @@ extension MessageAction {
224249

225250
return flagMessage
226251
}
252+
253+
private static func muteAction(
254+
for message: ChatMessage,
255+
channel: ChatChannel,
256+
chatClient: ChatClient,
257+
userToMute: ChatUser,
258+
onFinish: @escaping (MessageActionInfo) -> Void,
259+
onError: @escaping (Error) -> Void
260+
) -> MessageAction {
261+
let muteController = chatClient.userController(userId: userToMute.id)
262+
let muteAction = {
263+
muteController.mute { error in
264+
if let error = error {
265+
onError(error)
266+
} else {
267+
onFinish(
268+
MessageActionInfo(
269+
message: message,
270+
identifier: "mute"
271+
)
272+
)
273+
}
274+
}
275+
}
276+
277+
let muteUser = MessageAction(
278+
title: L10n.Message.Actions.userMute,
279+
iconName: "speaker.slash",
280+
action: muteAction,
281+
confirmationPopup: nil,
282+
isDestructive: false
283+
)
284+
285+
return muteUser
286+
}
287+
288+
private static func unmuteAction(
289+
for message: ChatMessage,
290+
channel: ChatChannel,
291+
chatClient: ChatClient,
292+
userToUnmute: ChatUser,
293+
onFinish: @escaping (MessageActionInfo) -> Void,
294+
onError: @escaping (Error) -> Void
295+
) -> MessageAction {
296+
let unmuteController = chatClient.userController(userId: userToUnmute.id)
297+
let unmuteAction = {
298+
unmuteController.unmute { error in
299+
if let error = error {
300+
onError(error)
301+
} else {
302+
onFinish(
303+
MessageActionInfo(
304+
message: message,
305+
identifier: "unmute"
306+
)
307+
)
308+
}
309+
}
310+
}
311+
312+
let unmuteUser = MessageAction(
313+
title: L10n.Message.Actions.userUnmute,
314+
iconName: "speaker.wave.1",
315+
action: unmuteAction,
316+
confirmationPopup: nil,
317+
isDestructive: false
318+
)
319+
320+
return unmuteUser
321+
}
227322
}
Loading

0 commit comments

Comments
 (0)