Skip to content

Commit 2295598

Browse files
committed
model: Add [Reaction] class; uncomment [Message.reactions]
Related: zulip#121
1 parent 7c77e93 commit 2295598

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

lib/api/model/model.dart

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ sealed class Message {
258258
final bool isMeMessage;
259259
final int? lastEditTimestamp;
260260

261-
// final List<Reaction> reactions; // TODO handle
261+
final List<Reaction> reactions;
262262
final int recipientId;
263263
final String senderEmail;
264264
final String senderFullName;
@@ -283,6 +283,7 @@ sealed class Message {
283283
required this.id,
284284
required this.isMeMessage,
285285
this.lastEditTimestamp,
286+
required this.reactions,
286287
required this.recipientId,
287288
required this.senderEmail,
288289
required this.senderFullName,
@@ -322,6 +323,7 @@ class StreamMessage extends Message {
322323
required super.id,
323324
required super.isMeMessage,
324325
super.lastEditTimestamp,
326+
required super.reactions,
325327
required super.recipientId,
326328
required super.senderEmail,
327329
required super.senderFullName,
@@ -424,6 +426,7 @@ class DmMessage extends Message {
424426
required super.id,
425427
required super.isMeMessage,
426428
super.lastEditTimestamp,
429+
required super.reactions,
427430
required super.recipientId,
428431
required super.senderEmail,
429432
required super.senderFullName,
@@ -443,3 +446,32 @@ class DmMessage extends Message {
443446
@override
444447
Map<String, dynamic> toJson() => _$DmMessageToJson(this);
445448
}
449+
450+
@JsonSerializable(fieldRename: FieldRename.snake)
451+
class Reaction {
452+
final String emojiName;
453+
final String emojiCode;
454+
final ReactionType reactionType;
455+
final int userId;
456+
// final Map<String, dynamic> user // deprecated; ignore
457+
458+
Reaction({
459+
required this.emojiName,
460+
required this.emojiCode,
461+
required this.reactionType,
462+
required this.userId,
463+
});
464+
465+
factory Reaction.fromJson(Map<String, dynamic> json) =>
466+
_$ReactionFromJson(json);
467+
468+
Map<String, dynamic> toJson() => _$ReactionToJson(this);
469+
}
470+
471+
/// As in [Reaction.reactionType].
472+
@JsonEnum(fieldRename: FieldRename.snake)
473+
enum ReactionType {
474+
unicodeEmoji,
475+
realmEmoji,
476+
zulipExtraEmoji;
477+
}

lib/api/model/model.g.dart

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/example_data.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ StreamMessage streamMessage({
140140
..._messagePropertiesFromContent(content, contentMarkdown),
141141
'display_recipient': effectiveStream.name,
142142
'stream_id': effectiveStream.streamId,
143+
'reactions': [],
143144
'flags': [],
144145
'id': id ?? 1234567, // TODO generate example IDs
145146
'subject': topic ?? 'example topic',
@@ -167,7 +168,7 @@ DmMessage dmMessage({
167168
'display_recipient': [from, ...to]
168169
.map((u) => {'id': u.userId, 'email': u.email, 'full_name': u.fullName})
169170
.toList(growable: false),
170-
171+
'reactions': [],
171172
'flags': [],
172173
'id': id ?? 1234567, // TODO generate example IDs
173174
'subject': '',

0 commit comments

Comments
 (0)