@@ -42,17 +42,17 @@ The reactions overlay view (shown on long press of a message), also provides acc
42
42
public func supportedMessageActions (
43
43
for message : ChatMessage,
44
44
channel : ChatChannel,
45
- onDismiss : @escaping () -> Void ,
45
+ onFinish : @escaping (MessageActionInfo ) -> Void ,
46
46
onError : @escaping (Error ) -> Void
47
47
) -> [MessageAction] {
48
48
MessageAction.defaultActions (
49
- factory : self ,
50
- for : message,
51
- channel : channel,
52
- chatClient : chatClient,
53
- onDismiss : onDismiss ,
54
- onError : onError
55
- )
49
+ factory : self ,
50
+ for : message,
51
+ channel : channel,
52
+ chatClient : chatClient,
53
+ onFinish : onFinish ,
54
+ onError : onError
55
+ )
56
56
}
57
57
58
58
extension MessageAction {
@@ -61,23 +61,24 @@ extension MessageAction {
61
61
for message : ChatMessage,
62
62
channel : ChatChannel,
63
63
chatClient : ChatClient,
64
- onDismiss : @escaping () -> Void ,
64
+ onFinish : @escaping (MessageActionInfo ) -> Void ,
65
65
onError : @escaping (Error ) -> Void
66
66
) -> [MessageAction] {
67
67
var messageActions = [MessageAction]()
68
68
69
+ let replyAction = replyAction (
70
+ for : message,
71
+ channel : channel,
72
+ onFinish : onFinish
73
+ )
74
+ messageActions.append (replyAction)
75
+
69
76
if ! message.isPartOfThread {
70
- var replyThread = MessageAction (
71
- title : L10n.Message .Actions .threadReply ,
72
- iconName : " icn_thread_reply" ,
73
- action : onDismiss,
74
- confirmationPopup : nil ,
75
- isDestructive : false
77
+ let replyThread = threadReplyAction (
78
+ factory : factory,
79
+ for : message,
80
+ channel : channel
76
81
)
77
-
78
- let destination = factory.makeMessageThreadDestination ()
79
- replyThread.navigationDestination = AnyView (destination (channel, message))
80
-
81
82
messageActions.append (replyThread)
82
83
}
83
84
@@ -86,7 +87,7 @@ extension MessageAction {
86
87
for : message,
87
88
channel : channel,
88
89
chatClient : chatClient,
89
- onDismiss : onDismiss ,
90
+ onFinish : onFinish ,
90
91
onError : onError
91
92
)
92
93
@@ -96,7 +97,7 @@ extension MessageAction {
96
97
for : message,
97
98
channel : channel,
98
99
chatClient : chatClient,
99
- onDismiss : onDismiss ,
100
+ onFinish : onFinish ,
100
101
onError : onError
101
102
)
102
103
@@ -106,11 +107,54 @@ extension MessageAction {
106
107
return messageActions
107
108
}
108
109
110
+ // MARK: - private
111
+
112
+ private static func replyAction (
113
+ for message : ChatMessage,
114
+ channel : ChatChannel,
115
+ onFinish : @escaping (MessageActionInfo) -> Void
116
+ ) -> MessageAction {
117
+ let replyAction = MessageAction (
118
+ title : L10n.Message .Actions .inlineReply ,
119
+ iconName : " icn_inline_reply" ,
120
+ action : {
121
+ onFinish (
122
+ MessageActionInfo (
123
+ message : message,
124
+ identifier : " inlineReply"
125
+ )
126
+ )
127
+ },
128
+ confirmationPopup : nil ,
129
+ isDestructive : false
130
+ )
131
+
132
+ return replyAction
133
+ }
134
+
135
+ private static func threadReplyAction <Factory : ViewFactory >(
136
+ factory : Factory,
137
+ for message : ChatMessage,
138
+ channel : ChatChannel
139
+ ) -> MessageAction {
140
+ var replyThread = MessageAction (
141
+ title : L10n.Message .Actions .threadReply ,
142
+ iconName : " icn_thread_reply" ,
143
+ action : {},
144
+ confirmationPopup : nil ,
145
+ isDestructive : false
146
+ )
147
+
148
+ let destination = factory.makeMessageThreadDestination ()
149
+ replyThread.navigationDestination = AnyView (destination (channel, message))
150
+ return replyThread
151
+ }
152
+
109
153
private static func deleteMessageAction (
110
154
for message : ChatMessage,
111
155
channel : ChatChannel,
112
156
chatClient : ChatClient,
113
- onDismiss : @escaping () -> Void ,
157
+ onFinish : @escaping (MessageActionInfo ) -> Void ,
114
158
onError : @escaping (Error ) -> Void
115
159
) -> MessageAction {
116
160
let messageController = chatClient.messageController (
@@ -123,7 +167,12 @@ extension MessageAction {
123
167
if let error = error {
124
168
onError (error)
125
169
} else {
126
- onDismiss ()
170
+ onFinish (
171
+ MessageActionInfo (
172
+ message : message,
173
+ identifier : " delete"
174
+ )
175
+ )
127
176
}
128
177
}
129
178
}
@@ -149,7 +198,7 @@ extension MessageAction {
149
198
for message : ChatMessage,
150
199
channel : ChatChannel,
151
200
chatClient : ChatClient,
152
- onDismiss : @escaping () -> Void ,
201
+ onFinish : @escaping (MessageActionInfo ) -> Void ,
153
202
onError : @escaping (Error ) -> Void
154
203
) -> MessageAction {
155
204
let messageController = chatClient.messageController (
@@ -162,7 +211,12 @@ extension MessageAction {
162
211
if let error = error {
163
212
onError (error)
164
213
} else {
165
- onDismiss ()
214
+ onFinish (
215
+ MessageActionInfo (
216
+ message : message,
217
+ identifier : " flag"
218
+ )
219
+ )
166
220
}
167
221
}
168
222
}
@@ -183,24 +237,25 @@ extension MessageAction {
183
237
184
238
return flagMessage
185
239
}
240
+ }
186
241
```
187
242
188
243
Alternatively, you can swap the whole ` MessageActionsView ` with your own implementation, by implementing the ` makeMessageActionsView ` method in the ` ViewFactory ` .
189
244
190
245
``` swift
191
246
public func makeMessageActionsView (
192
- for message : ChatMessage,
193
- channel : ChatChannel,
194
- onDismiss : @escaping () -> Void ,
195
- onError : @escaping (Error ) -> Void
247
+ for message : ChatMessage,
248
+ channel : ChatChannel,
249
+ onFinish : @escaping (MessageActionInfo ) -> Void ,
250
+ onError : @escaping (Error ) -> Void
196
251
) -> some View {
197
252
let messageActions = supportedMessageActions (
198
253
for : message,
199
254
channel : channel,
200
- onDismiss : onDismiss ,
255
+ onFinish : onFinish ,
201
256
onError : onError
202
257
)
203
-
258
+
204
259
return MessageActionsView (messageActions : messageActions)
205
260
}
206
261
```
@@ -209,17 +264,19 @@ Additionally, you can swap the whole `ReactionsOverlayView` with your own implem
209
264
210
265
``` swift
211
266
public func makeReactionsOverlayView (
212
- channel : ChatChannel,
213
- currentSnapshot : UIImage,
214
- messageDisplayInfo : MessageDisplayInfo,
215
- onBackgroundTap : @escaping () -> Void
267
+ channel : ChatChannel,
268
+ currentSnapshot : UIImage,
269
+ messageDisplayInfo : MessageDisplayInfo,
270
+ onBackgroundTap : @escaping () -> Void ,
271
+ onActionExecuted : @escaping (MessageActionInfo) -> Void
216
272
) -> some View {
217
273
ReactionsOverlayView (
218
274
factory : self ,
219
275
channel : channel,
220
276
currentSnapshot : currentSnapshot,
221
277
messageDisplayInfo : messageDisplayInfo,
222
- onBackgroundTap : onBackgroundTap
278
+ onBackgroundTap : onBackgroundTap,
279
+ onActionExecuted : onActionExecuted
223
280
)
224
281
}
225
282
```
0 commit comments