Skip to content

Commit 06ce603

Browse files
committed
api [nfc]: Expand comments on SubmessageData and subclasses
1 parent 9938b27 commit 06ce603

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

lib/api/model/submessage.dart

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ enum SubmessageType {
5757
unknown,
5858
}
5959

60+
/// The data encoded in a submessage at [Submessage.content].
61+
///
62+
/// For widgets (the only existing use of submessages), the submessages
63+
/// on a [Message] consist of:
64+
/// * One submessage with content [WidgetData]; then
65+
/// * Zero or more submessages with content [PollEventSubmessage] if the
66+
/// message is a poll (i.e. if the first submessage was a [PollWidgetData]),
67+
/// and similarly for other types of widgets.
6068
sealed class SubmessageData {}
6169

6270
/// The data encoded in a submessage to make the message a Zulip widget.
@@ -86,6 +94,8 @@ sealed class WidgetData extends SubmessageData {
8694
@JsonEnum(alwaysCreate: true)
8795
enum WidgetType {
8896
poll,
97+
// todo, // TODO(#882)
98+
// zform, // This exists in web but is more a demo than a real feature.
8999
unknown;
90100

91101
static WidgetType fromRawString(String raw) => _byRawString[raw] ?? unknown;
@@ -94,7 +104,9 @@ enum WidgetType {
94104
.map((key, value) => MapEntry(value, key));
95105
}
96106

97-
/// The data encoded in a submessage to make the message a poll widget.
107+
/// The data in the first submessage on a poll widget message.
108+
///
109+
/// Subsequent submessages on the same message will be [PollEventSubmessage].
98110
@JsonSerializable(fieldRename: FieldRename.snake)
99111
class PollWidgetData extends WidgetData {
100112
@override
@@ -148,7 +160,9 @@ class UnsupportedWidgetData extends WidgetData {
148160
Object? toJson() => json;
149161
}
150162

151-
/// The data encoded in a submessage that acts on a poll.
163+
/// The data in a submessage that acts on a poll.
164+
///
165+
/// The first submessage on the message should be a [PollWidgetData].
152166
sealed class PollEventSubmessage extends SubmessageData {
153167
PollEventSubmessageType get type;
154168

@@ -160,7 +174,8 @@ sealed class PollEventSubmessage extends SubmessageData {
160174
/// For options that are a part of the initial [PollWidgetData], the
161175
/// [senderId] should be `null`.
162176
static String optionKey({required int? senderId, required int idx}) =>
163-
// "canned" is a canonical constant coined by the web client.
177+
// "canned" is a canonical constant coined by the web client:
178+
// https://github.com/zulip/zulip/blob/40f59a05c/web/shared/src/poll_data.ts#L238
164179
'${senderId ?? 'canned'},$idx';
165180

166181
factory PollEventSubmessage.fromJson(Map<String, Object?> json) {
@@ -191,6 +206,8 @@ enum PollEventSubmessageType {
191206
}
192207

193208
/// A poll event when an option is added.
209+
///
210+
/// See: https://github.com/zulip/zulip/blob/40f59a05c/web/shared/src/poll_data.ts#L112-L159
194211
@JsonSerializable(fieldRename: FieldRename.snake)
195212
class PollNewOptionEventSubmessage extends PollEventSubmessage {
196213
@override
@@ -215,6 +232,8 @@ class PollNewOptionEventSubmessage extends PollEventSubmessage {
215232
}
216233

217234
/// A poll event when the question has been edited.
235+
///
236+
/// See: https://github.com/zulip/zulip/blob/40f59a05c/web/shared/src/poll_data.ts#L161-186
218237
@JsonSerializable(fieldRename: FieldRename.snake)
219238
class PollQuestionEventSubmessage extends PollEventSubmessage {
220239
@override
@@ -234,6 +253,8 @@ class PollQuestionEventSubmessage extends PollEventSubmessage {
234253
}
235254

236255
/// A poll event when a vote has been cast or removed.
256+
///
257+
/// See: https://github.com/zulip/zulip/blob/40f59a05c/web/shared/src/poll_data.ts#L188-234
237258
@JsonSerializable(fieldRename: FieldRename.snake)
238259
class PollVoteEventSubmessage extends PollEventSubmessage {
239260
@override

0 commit comments

Comments
 (0)