@@ -57,6 +57,14 @@ enum SubmessageType {
57
57
unknown,
58
58
}
59
59
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.
60
68
sealed class SubmessageData {}
61
69
62
70
/// The data encoded in a submessage to make the message a Zulip widget.
@@ -86,6 +94,8 @@ sealed class WidgetData extends SubmessageData {
86
94
@JsonEnum (alwaysCreate: true )
87
95
enum WidgetType {
88
96
poll,
97
+ // todo, // TODO(#882)
98
+ // zform, // This exists in web but is more a demo than a real feature.
89
99
unknown;
90
100
91
101
static WidgetType fromRawString (String raw) => _byRawString[raw] ?? unknown;
@@ -94,7 +104,9 @@ enum WidgetType {
94
104
.map ((key, value) => MapEntry (value, key));
95
105
}
96
106
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] .
98
110
@JsonSerializable (fieldRename: FieldRename .snake)
99
111
class PollWidgetData extends WidgetData {
100
112
@override
@@ -148,7 +160,9 @@ class UnsupportedWidgetData extends WidgetData {
148
160
Object ? toJson () => json;
149
161
}
150
162
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] .
152
166
sealed class PollEventSubmessage extends SubmessageData {
153
167
PollEventSubmessageType get type;
154
168
@@ -160,7 +174,8 @@ sealed class PollEventSubmessage extends SubmessageData {
160
174
/// For options that are a part of the initial [PollWidgetData] , the
161
175
/// [senderId] should be `null` .
162
176
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
164
179
'${senderId ?? 'canned' },$idx ' ;
165
180
166
181
factory PollEventSubmessage .fromJson (Map <String , Object ?> json) {
@@ -191,6 +206,8 @@ enum PollEventSubmessageType {
191
206
}
192
207
193
208
/// 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
194
211
@JsonSerializable (fieldRename: FieldRename .snake)
195
212
class PollNewOptionEventSubmessage extends PollEventSubmessage {
196
213
@override
@@ -215,6 +232,8 @@ class PollNewOptionEventSubmessage extends PollEventSubmessage {
215
232
}
216
233
217
234
/// 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
218
237
@JsonSerializable (fieldRename: FieldRename .snake)
219
238
class PollQuestionEventSubmessage extends PollEventSubmessage {
220
239
@override
@@ -234,6 +253,8 @@ class PollQuestionEventSubmessage extends PollEventSubmessage {
234
253
}
235
254
236
255
/// 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
237
258
@JsonSerializable (fieldRename: FieldRename .snake)
238
259
class PollVoteEventSubmessage extends PollEventSubmessage {
239
260
@override
0 commit comments