Skip to content

Commit 2fd0c4c

Browse files
committed
model: Add [Reaction] class; uncomment [Message.reactions]
Related: #121
1 parent edb8820 commit 2fd0c4c

File tree

3 files changed

+64
-2
lines changed

3 files changed

+64
-2
lines changed

lib/api/model/model.dart

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ sealed class Message {
258258
bool isMeMessage;
259259
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;
@@ -282,6 +282,7 @@ sealed class Message {
282282
required this.id,
283283
required this.isMeMessage,
284284
this.lastEditTimestamp,
285+
required this.reactions,
285286
required this.recipientId,
286287
required this.senderEmail,
287288
required this.senderFullName,
@@ -320,6 +321,7 @@ class StreamMessage extends Message {
320321
required super.id,
321322
required super.isMeMessage,
322323
super.lastEditTimestamp,
324+
required super.reactions,
323325
required super.recipientId,
324326
required super.senderEmail,
325327
required super.senderFullName,
@@ -421,6 +423,7 @@ class DmMessage extends Message {
421423
required super.id,
422424
required super.isMeMessage,
423425
super.lastEditTimestamp,
426+
required super.reactions,
424427
required super.recipientId,
425428
required super.senderEmail,
426429
required super.senderFullName,
@@ -440,3 +443,33 @@ class DmMessage extends Message {
440443
@override
441444
Map<String, dynamic> toJson() => _$DmMessageToJson(this);
442445
}
446+
447+
/// As in [Message.reactions].
448+
@JsonSerializable(fieldRename: FieldRename.snake)
449+
class Reaction {
450+
final String emojiName;
451+
final String emojiCode;
452+
final ReactionType reactionType;
453+
final int userId;
454+
// final Map<String, dynamic> user; // deprecated; ignore
455+
456+
Reaction({
457+
required this.emojiName,
458+
required this.emojiCode,
459+
required this.reactionType,
460+
required this.userId,
461+
});
462+
463+
factory Reaction.fromJson(Map<String, dynamic> json) =>
464+
_$ReactionFromJson(json);
465+
466+
Map<String, dynamic> toJson() => _$ReactionToJson(this);
467+
}
468+
469+
/// As in [Reaction.reactionType].
470+
@JsonEnum(fieldRename: FieldRename.snake)
471+
enum ReactionType {
472+
unicodeEmoji,
473+
realmEmoji,
474+
zulipExtraEmoji;
475+
}

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
@@ -146,6 +146,7 @@ StreamMessage streamMessage({
146146
..._messagePropertiesFromContent(content, contentMarkdown),
147147
'display_recipient': effectiveStream.name,
148148
'stream_id': effectiveStream.streamId,
149+
'reactions': [],
149150
'flags': flags ?? [],
150151
'id': id ?? 1234567, // TODO generate example IDs
151152
'last_edit_timestamp': lastEditTimestamp,
@@ -176,7 +177,7 @@ DmMessage dmMessage({
176177
'display_recipient': [from, ...to]
177178
.map((u) => {'id': u.userId, 'email': u.email, 'full_name': u.fullName})
178179
.toList(growable: false),
179-
180+
'reactions': [],
180181
'flags': flags ?? [],
181182
'id': id ?? 1234567, // TODO generate example IDs
182183
'last_edit_timestamp': lastEditTimestamp,

0 commit comments

Comments
 (0)