@@ -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 optionIndex}) =>
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' },$optionIndex ' ;
165
180
166
181
factory PollEventSubmessage .fromJson (Map <String , Object ?> json) {
@@ -177,6 +192,8 @@ sealed class PollEventSubmessage extends SubmessageData {
177
192
}
178
193
179
194
/// A poll event when an option is added.
195
+ ///
196
+ /// See: https://github.com/zulip/zulip/blob/40f59a05c/web/shared/src/poll_data.ts#L112-L159
180
197
@JsonSerializable (fieldRename: FieldRename .snake)
181
198
class PollNewOptionEventSubmessage extends PollEventSubmessage {
182
199
@override
@@ -199,6 +216,8 @@ class PollNewOptionEventSubmessage extends PollEventSubmessage {
199
216
}
200
217
201
218
/// A poll event when the question has been edited.
219
+ ///
220
+ /// See: https://github.com/zulip/zulip/blob/40f59a05c/web/shared/src/poll_data.ts#L161-186
202
221
@JsonSerializable (fieldRename: FieldRename .snake)
203
222
class PollQuestionEventSubmessage extends PollEventSubmessage {
204
223
@override
@@ -218,6 +237,8 @@ class PollQuestionEventSubmessage extends PollEventSubmessage {
218
237
}
219
238
220
239
/// A poll event when a vote has been cast or removed.
240
+ ///
241
+ /// See: https://github.com/zulip/zulip/blob/40f59a05c/web/shared/src/poll_data.ts#L188-234
221
242
@JsonSerializable (fieldRename: FieldRename .snake)
222
243
class PollVoteEventSubmessage extends PollEventSubmessage {
223
244
@override
0 commit comments