Line data Source code
1 : import 'package:chatwoot_client_sdk/chatwoot_client_sdk.dart';
2 : import 'package:chatwoot_client_sdk/data/local/local_storage.dart';
3 : import 'package:equatable/equatable.dart';
4 : import 'package:hive/hive.dart';
5 : import 'package:json_annotation/json_annotation.dart';
6 :
7 : part 'chatwoot_event.g.dart';
8 :
9 : @JsonSerializable(explicitToJson: true)
10 : class ChatwootEvent {
11 : @JsonKey(toJson: eventTypeToJson, fromJson: eventTypeFromJson)
12 : final ChatwootEventType? type;
13 :
14 : @JsonKey()
15 : final String? identifier;
16 :
17 : @JsonKey(fromJson: eventMessageFromJson)
18 : final ChatwootEventMessage? message;
19 :
20 1 : ChatwootEvent({this.type, this.message, this.identifier});
21 :
22 1 : factory ChatwootEvent.fromJson(Map<String, dynamic> json) =>
23 1 : _$ChatwootEventFromJson(json);
24 :
25 0 : Map<String, dynamic> toJson() => _$ChatwootEventToJson(this);
26 : }
27 :
28 1 : ChatwootEventMessage? eventMessageFromJson(value) {
29 : if (value == null) {
30 : return null;
31 1 : } else if (value is num) {
32 1 : return ChatwootEventMessage();
33 1 : } else if (value is String) {
34 0 : return ChatwootEventMessage();
35 : } else {
36 1 : return ChatwootEventMessage.fromJson(value as Map<String, dynamic>);
37 : }
38 : }
39 :
40 : @JsonSerializable(explicitToJson: true)
41 : class ChatwootEventMessage {
42 : @JsonKey()
43 : final ChatwootEventMessageData? data;
44 :
45 : @JsonKey(toJson: eventMessageTypeToJson, fromJson: eventMessageTypeFromJson)
46 : final ChatwootEventMessageType? event;
47 :
48 1 : ChatwootEventMessage({this.data, this.event});
49 :
50 1 : factory ChatwootEventMessage.fromJson(Map<String, dynamic> json) =>
51 1 : _$ChatwootEventMessageFromJson(json);
52 :
53 0 : Map<String, dynamic> toJson() => _$ChatwootEventMessageToJson(this);
54 : }
55 :
56 : @JsonSerializable(explicitToJson: true)
57 : class ChatwootEventMessageData {
58 : @JsonKey(name: "account_id")
59 : final int? accountId;
60 :
61 : @JsonKey()
62 : final String? content;
63 :
64 : @JsonKey(name: "content_attributes")
65 : final dynamic contentAttributes;
66 :
67 : @JsonKey(name: "content_type")
68 : final String? contentType;
69 :
70 : @JsonKey(name: "conversation_id")
71 : final int? conversationId;
72 :
73 : @JsonKey(name: "created_at")
74 : final dynamic createdAt;
75 :
76 : @JsonKey(name: "echo_id")
77 : final String? echoId;
78 :
79 : @JsonKey(name: "external_source_ids")
80 : final dynamic externalSourceIds;
81 :
82 : @JsonKey()
83 : final int? id;
84 :
85 : @JsonKey(name: "inbox_id")
86 : final int? inboxId;
87 :
88 : @JsonKey(name: "message_type")
89 : final int? messageType;
90 :
91 : @JsonKey(name: "private")
92 : final bool? private;
93 :
94 : @JsonKey()
95 : final ChatwootEventMessageUser? sender;
96 :
97 : @JsonKey(name: "sender_id")
98 : final int? senderId;
99 :
100 : @JsonKey(name: "source_id")
101 : final String? sourceId;
102 :
103 : @JsonKey()
104 : final String? status;
105 :
106 : @JsonKey(name: "updated_at")
107 : final dynamic updatedAt;
108 :
109 : @JsonKey()
110 : final dynamic conversation;
111 :
112 : @JsonKey()
113 : final ChatwootEventMessageUser? user;
114 :
115 : @JsonKey()
116 : final dynamic users;
117 :
118 1 : ChatwootEventMessageData(
119 : {this.id,
120 : this.user,
121 : this.conversation,
122 : this.echoId,
123 : this.sender,
124 : this.conversationId,
125 : this.createdAt,
126 : this.contentAttributes,
127 : this.contentType,
128 : this.messageType,
129 : this.content,
130 : this.inboxId,
131 : this.sourceId,
132 : this.updatedAt,
133 : this.status,
134 : this.accountId,
135 : this.externalSourceIds,
136 : this.private,
137 : this.senderId,
138 : this.users});
139 :
140 1 : factory ChatwootEventMessageData.fromJson(Map<String, dynamic> json) =>
141 1 : _$ChatwootEventMessageDataFromJson(json);
142 :
143 2 : Map<String, dynamic> toJson() => _$ChatwootEventMessageDataToJson(this);
144 :
145 1 : getMessage() {
146 2 : return ChatwootMessage.fromJson(toJson());
147 : }
148 : }
149 :
150 : /// {@category FlutterClientSdk}
151 : @HiveType(typeId: CHATWOOT_EVENT_USER_HIVE_TYPE_ID)
152 : @JsonSerializable(explicitToJson: true)
153 : class ChatwootEventMessageUser extends Equatable {
154 : @JsonKey(name: "avatar_url")
155 : @HiveField(0)
156 : final String? avatarUrl;
157 :
158 : @JsonKey()
159 : @HiveField(1)
160 : final int? id;
161 :
162 : @JsonKey()
163 : @HiveField(2)
164 : final String? name;
165 :
166 : @JsonKey()
167 : @HiveField(3)
168 : final String? thumbnail;
169 :
170 4 : ChatwootEventMessageUser(
171 : {this.id, this.avatarUrl, this.name, this.thumbnail});
172 :
173 4 : factory ChatwootEventMessageUser.fromJson(Map<String, dynamic> json) =>
174 4 : _$ChatwootEventMessageUserFromJson(json);
175 :
176 0 : Map<String, dynamic> toJson() => _$ChatwootEventMessageUserToJson(this);
177 :
178 1 : @override
179 5 : List<Object?> get props => [id, avatarUrl, name, thumbnail];
180 : }
181 :
182 15 : enum ChatwootEventType { welcome, ping, confirm_subscription }
183 :
184 0 : String? eventTypeToJson(ChatwootEventType? actionType) {
185 0 : return actionType.toString();
186 : }
187 :
188 1 : ChatwootEventType? eventTypeFromJson(String? value) {
189 : switch (value) {
190 1 : case "welcome":
191 : return ChatwootEventType.welcome;
192 1 : case "ping":
193 : return ChatwootEventType.ping;
194 1 : case "confirm_subscription":
195 : return ChatwootEventType.confirm_subscription;
196 : default:
197 : return null;
198 : }
199 : }
200 :
201 15 : enum ChatwootEventMessageType {
202 : presence_update,
203 : message_created,
204 : conversation_typing_off,
205 : conversation_typing_on
206 : }
207 :
208 0 : String? eventMessageTypeToJson(ChatwootEventMessageType? actionType) {
209 : switch (actionType) {
210 0 : case null:
211 : return null;
212 0 : case ChatwootEventMessageType.conversation_typing_on:
213 : return "conversation.typing_on";
214 0 : case ChatwootEventMessageType.conversation_typing_off:
215 : return "conversation.typing_off";
216 0 : case ChatwootEventMessageType.presence_update:
217 : return "presence.update";
218 0 : case ChatwootEventMessageType.message_created:
219 : return "message.created";
220 : default:
221 0 : return actionType.toString();
222 : }
223 : }
224 :
225 1 : ChatwootEventMessageType? eventMessageTypeFromJson(String? value) {
226 : switch (value) {
227 1 : case "presence.update":
228 : return ChatwootEventMessageType.presence_update;
229 1 : case "message.created":
230 : return ChatwootEventMessageType.message_created;
231 1 : case "conversation.typing_on":
232 : return ChatwootEventMessageType.conversation_typing_on;
233 1 : case "conversation.typing_off":
234 : return ChatwootEventMessageType.conversation_typing_off;
235 : default:
236 : return null;
237 : }
238 : }
|