@nyaruka/temba-components 0.136.1 → 0.137.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/demo/components/webchat/example.html +2 -2
- package/dist/temba-components.js +487 -551
- package/dist/temba-components.js.map +1 -1
- package/out-tsc/src/display/Chat.js +123 -44
- package/out-tsc/src/display/Chat.js.map +1 -1
- package/out-tsc/src/events/eventRenderers.js +442 -0
- package/out-tsc/src/events/eventRenderers.js.map +1 -0
- package/out-tsc/src/flow/Editor.js +3 -2
- package/out-tsc/src/flow/Editor.js.map +1 -1
- package/out-tsc/src/flow/NodeEditor.js +0 -1
- package/out-tsc/src/flow/NodeEditor.js.map +1 -1
- package/out-tsc/src/list/ShortcutList.js +1 -1
- package/out-tsc/src/list/ShortcutList.js.map +1 -1
- package/out-tsc/src/live/ContactChat.js +12 -321
- package/out-tsc/src/live/ContactChat.js.map +1 -1
- package/out-tsc/src/simulator/Simulator.js +428 -571
- package/out-tsc/src/simulator/Simulator.js.map +1 -1
- package/out-tsc/test/temba-simulator.test.js +51 -32
- package/out-tsc/test/temba-simulator.test.js.map +1 -1
- package/package.json +1 -1
- package/screenshots/truth/contacts/chat-failure.png +0 -0
- package/screenshots/truth/contacts/chat-for-archived-contact.png +0 -0
- package/screenshots/truth/contacts/chat-for-blocked-contact.png +0 -0
- package/screenshots/truth/contacts/chat-for-stopped-contact.png +0 -0
- package/screenshots/truth/contacts/chat-sends-attachments-only.png +0 -0
- package/screenshots/truth/contacts/chat-sends-text-and-attachments.png +0 -0
- package/screenshots/truth/contacts/chat-sends-text-only.png +0 -0
- package/screenshots/truth/nodes/split_by_llm_categorize/editor/feedback-categorization.png +0 -0
- package/screenshots/truth/simulator/after-message-sent.png +0 -0
- package/screenshots/truth/simulator/after-reset.png +0 -0
- package/screenshots/truth/simulator/attachment-menu.png +0 -0
- package/screenshots/truth/simulator/context-expanded.png +0 -0
- package/screenshots/truth/simulator/context-explorer-open.png +0 -0
- package/screenshots/truth/simulator/event-info.png +0 -0
- package/screenshots/truth/simulator/image-attachment.png +0 -0
- package/screenshots/truth/simulator/open-initial.png +0 -0
- package/screenshots/truth/simulator/quick-replies.png +0 -0
- package/src/display/Chat.ts +123 -44
- package/src/events/eventRenderers.ts +527 -0
- package/src/flow/Editor.ts +3 -2
- package/src/flow/NodeEditor.ts +0 -1
- package/src/list/ShortcutList.ts +1 -1
- package/src/live/ContactChat.ts +17 -376
- package/src/simulator/Simulator.ts +487 -612
- package/test/temba-simulator.test.ts +64 -34
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import { oxfordFn } from '../utils';
|
|
3
|
+
export var Events;
|
|
4
|
+
(function (Events) {
|
|
5
|
+
Events["AIRTIME_TRANSFERRED"] = "airtime_transferred";
|
|
6
|
+
Events["BROADCAST_CREATED"] = "broadcast_created";
|
|
7
|
+
Events["CALL_CREATED"] = "call_created";
|
|
8
|
+
Events["CALL_MISSED"] = "call_missed";
|
|
9
|
+
Events["CALL_RECEIVED"] = "call_received";
|
|
10
|
+
Events["CHAT_STARTED"] = "chat_started";
|
|
11
|
+
Events["CONTACT_FIELD_CHANGED"] = "contact_field_changed";
|
|
12
|
+
Events["CONTACT_GROUPS_CHANGED"] = "contact_groups_changed";
|
|
13
|
+
Events["CONTACT_LANGUAGE_CHANGED"] = "contact_language_changed";
|
|
14
|
+
Events["CONTACT_NAME_CHANGED"] = "contact_name_changed";
|
|
15
|
+
Events["CONTACT_STATUS_CHANGED"] = "contact_status_changed";
|
|
16
|
+
Events["CONTACT_URNS_CHANGED"] = "contact_urns_changed";
|
|
17
|
+
Events["EMAIL_CREATED"] = "email_created";
|
|
18
|
+
Events["EMAIL_SENT"] = "email_sent";
|
|
19
|
+
Events["ERROR"] = "error";
|
|
20
|
+
Events["FAILURE"] = "failure";
|
|
21
|
+
Events["FLOW_ENTERED"] = "flow_entered";
|
|
22
|
+
Events["INPUT_LABELS_ADDED"] = "input_labels_added";
|
|
23
|
+
Events["IVR_CREATED"] = "ivr_created";
|
|
24
|
+
Events["MSG_CREATED"] = "msg_created";
|
|
25
|
+
Events["MSG_RECEIVED"] = "msg_received";
|
|
26
|
+
Events["OPTIN_REQUESTED"] = "optin_requested";
|
|
27
|
+
Events["OPTIN_STARTED"] = "optin_started";
|
|
28
|
+
Events["OPTIN_STOPPED"] = "optin_stopped";
|
|
29
|
+
Events["RESTHOOK_CALLED"] = "resthook_called";
|
|
30
|
+
Events["RUN_ENDED"] = "run_ended";
|
|
31
|
+
Events["RUN_RESULT_CHANGED"] = "run_result_changed";
|
|
32
|
+
Events["RUN_STARTED"] = "run_started";
|
|
33
|
+
Events["SERVICE_CALLED"] = "service_called";
|
|
34
|
+
Events["SESSION_TRIGGERED"] = "session_triggered";
|
|
35
|
+
Events["TICKET_ASSIGNEE_CHANGED"] = "ticket_assignee_changed";
|
|
36
|
+
Events["TICKET_CLOSED"] = "ticket_closed";
|
|
37
|
+
Events["TICKET_NOTE_ADDED"] = "ticket_note_added";
|
|
38
|
+
Events["TICKET_OPENED"] = "ticket_opened";
|
|
39
|
+
Events["TICKET_REOPENED"] = "ticket_reopened";
|
|
40
|
+
Events["TICKET_TOPIC_CHANGED"] = "ticket_topic_changed";
|
|
41
|
+
Events["WARNING"] = "warning";
|
|
42
|
+
Events["WEBHOOK_CALLED"] = "webhook_called";
|
|
43
|
+
})(Events || (Events = {}));
|
|
44
|
+
const renderInfoList = (singular, plural, items) => {
|
|
45
|
+
if (items.length === 1) {
|
|
46
|
+
return html `<div>${singular} <strong>${items[0].name}</strong></div>`;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const list = items.map((item) => item.name);
|
|
50
|
+
if (list.length === 2) {
|
|
51
|
+
return html `<div>
|
|
52
|
+
${plural} <strong>${list[0]}</strong> and <strong>${list[1]}</strong>
|
|
53
|
+
</div>`;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const last = list.pop();
|
|
57
|
+
const middle = list.map((name, index) => html `<strong>${name}</strong>${index < list.length - 1 ? ', ' : ''}`);
|
|
58
|
+
return html `<div>${plural} ${middle}, and <strong>${last}</strong></div>`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
export const renderRunEvent = (event) => {
|
|
63
|
+
let verb = 'Started';
|
|
64
|
+
if (event.type === Events.RUN_ENDED) {
|
|
65
|
+
if (event.status === 'completed') {
|
|
66
|
+
verb = 'Completed';
|
|
67
|
+
}
|
|
68
|
+
else if (event.status === 'expired') {
|
|
69
|
+
verb = 'Expired from';
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
verb = 'Interrupted';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return html `<div>
|
|
76
|
+
${verb}
|
|
77
|
+
<a href="/flow/editor/${event.flow.uuid}/"
|
|
78
|
+
><strong>${event.flow.name}</strong></a
|
|
79
|
+
>
|
|
80
|
+
</div>`;
|
|
81
|
+
};
|
|
82
|
+
export const renderChatStartedEvent = (event) => {
|
|
83
|
+
if (event.params) {
|
|
84
|
+
return html `<div>Chat referral</div>`;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return html `<div>Chat started</div>`;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
export const renderUpdateEvent = (event) => {
|
|
91
|
+
return event.value
|
|
92
|
+
? html `<div>
|
|
93
|
+
Updated <strong>${event.field.name}</strong> to
|
|
94
|
+
<strong>${event.value.text}</strong>
|
|
95
|
+
</div>`
|
|
96
|
+
: html `<div>Cleared <strong>${event.field.name}</strong></div>`;
|
|
97
|
+
};
|
|
98
|
+
export const renderNameChanged = (event) => {
|
|
99
|
+
return html `<div>
|
|
100
|
+
Updated <strong>name</strong> to <strong>${event.name}</strong>
|
|
101
|
+
</div>`;
|
|
102
|
+
};
|
|
103
|
+
export const renderContactURNsChanged = (event) => {
|
|
104
|
+
return html `<div>
|
|
105
|
+
Updated <strong>URNs</strong> to
|
|
106
|
+
${oxfordFn(event.urns, (urn) => html `<strong>${urn.split(':')[1].split('?')[0]}</strong>`)}
|
|
107
|
+
</div>`;
|
|
108
|
+
};
|
|
109
|
+
export const renderTicketAction = (event, action) => {
|
|
110
|
+
var _a;
|
|
111
|
+
const ticketUUID = ((_a = event.ticket) === null || _a === void 0 ? void 0 : _a.uuid) || event.ticket_uuid;
|
|
112
|
+
const actionNote = event.note
|
|
113
|
+
? html `<div
|
|
114
|
+
style="width:85%; background: #fffac3; padding: 1em;margin-bottom: 1em;margin-top:1em; border: 1px solid #ffe97f;border-radius: var(--curvature);line-height: 1.2em; word-break: break-word;"
|
|
115
|
+
>
|
|
116
|
+
<div style="color: #8e830fff; font-size: 1em;margin-bottom:0.25em; ">
|
|
117
|
+
<strong>${event._user ? event._user.name : 'Someone'}</strong> added a
|
|
118
|
+
note
|
|
119
|
+
<temba-date
|
|
120
|
+
value=${event.created_on.toISOString()}
|
|
121
|
+
display="relative"
|
|
122
|
+
></temba-date>
|
|
123
|
+
</div>
|
|
124
|
+
<div style="white-space: pre-wrap;">${event.note}</div>
|
|
125
|
+
</div>`
|
|
126
|
+
: null;
|
|
127
|
+
if (action === 'noted') {
|
|
128
|
+
return html `${actionNote}`;
|
|
129
|
+
}
|
|
130
|
+
const description = event._user
|
|
131
|
+
? html `<div>
|
|
132
|
+
<strong>${event._user.name}</strong> ${action} a
|
|
133
|
+
<strong><a href="/ticket/all/closed/${ticketUUID}/">ticket</a></strong>
|
|
134
|
+
</div>`
|
|
135
|
+
: html `<div>
|
|
136
|
+
A
|
|
137
|
+
<strong><a href="/ticket/all/closed/${ticketUUID}/">ticket</a></strong>
|
|
138
|
+
was <strong>${action}</strong>
|
|
139
|
+
</div>`;
|
|
140
|
+
return html `<div style="${actionNote ? 'margin-bottom: 1em;' : ''}">
|
|
141
|
+
${description}
|
|
142
|
+
</div>
|
|
143
|
+
${actionNote}`;
|
|
144
|
+
};
|
|
145
|
+
export const renderTicketAssigneeChanged = (event) => {
|
|
146
|
+
if (event._user) {
|
|
147
|
+
if (event.assignee) {
|
|
148
|
+
return html `<div>
|
|
149
|
+
<strong>${event._user.name}</strong> assigned this ticket to
|
|
150
|
+
<strong>${event.assignee.name}</strong>
|
|
151
|
+
</div>`;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
return html `<div>
|
|
155
|
+
<strong>${event._user.name}</strong> unassigned this ticket
|
|
156
|
+
</div>`;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
if (event.assignee) {
|
|
161
|
+
return html `<div>
|
|
162
|
+
This ticket was assigned to <strong>${event.assignee.name}</strong>
|
|
163
|
+
</div>`;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return html `<div>This ticket was unassigned</div>`;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
export const renderTicketOpened = (event) => {
|
|
171
|
+
return html `<div>${event.ticket.topic.name} ticket was opened</div>`;
|
|
172
|
+
};
|
|
173
|
+
export const renderContactGroupsEvent = (event) => {
|
|
174
|
+
const groupsEvent = event;
|
|
175
|
+
if (groupsEvent.groups_added) {
|
|
176
|
+
return renderInfoList('Added to group', 'Added to groups', groupsEvent.groups_added);
|
|
177
|
+
}
|
|
178
|
+
else if (groupsEvent.groups_removed) {
|
|
179
|
+
return renderInfoList('Removed from group', 'Removed from groups', groupsEvent.groups_removed);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
export const renderAirtimeTransferredEvent = (event) => {
|
|
183
|
+
if (parseFloat(event.amount) === 0) {
|
|
184
|
+
return html `<div>Airtime transfer failed</div>`;
|
|
185
|
+
}
|
|
186
|
+
return html `<div>
|
|
187
|
+
Transferred <strong>${event.amount}</strong> ${event.currency} of airtime
|
|
188
|
+
</div>`;
|
|
189
|
+
};
|
|
190
|
+
export const renderContactLanguageChangedEvent = (event) => {
|
|
191
|
+
return html `<div>
|
|
192
|
+
Language updated to <strong>${event.language}</strong>
|
|
193
|
+
</div>`;
|
|
194
|
+
};
|
|
195
|
+
export const renderContactStatusChangedEvent = (event) => {
|
|
196
|
+
return html `<div>Status updated to <strong>${event.status}</strong></div>`;
|
|
197
|
+
};
|
|
198
|
+
export const renderCallEvent = (event) => {
|
|
199
|
+
if (event.type === Events.CALL_CREATED) {
|
|
200
|
+
return html `<div>Call started</div>`;
|
|
201
|
+
}
|
|
202
|
+
else if (event.type === Events.CALL_MISSED) {
|
|
203
|
+
return html `<div>Call missed</div>`;
|
|
204
|
+
}
|
|
205
|
+
else if (event.type === Events.CALL_RECEIVED) {
|
|
206
|
+
return html `<div>Call answered</div>`;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
export const renderOptInEvent = (event) => {
|
|
210
|
+
if (event.type === Events.OPTIN_REQUESTED) {
|
|
211
|
+
return html `<div>
|
|
212
|
+
Requested opt-in for <strong>${event.optin.name}</strong>
|
|
213
|
+
</div>`;
|
|
214
|
+
}
|
|
215
|
+
else if (event.type === Events.OPTIN_STARTED) {
|
|
216
|
+
return html `<div>Opted in to <strong>${event.optin.name}</strong></div>`;
|
|
217
|
+
}
|
|
218
|
+
else if (event.type === Events.OPTIN_STOPPED) {
|
|
219
|
+
return html `<div>Opted out of <strong>${event.optin.name}</strong></div>`;
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
export const renderDiagnosticEvent = (event, _isSimulation = false) => {
|
|
223
|
+
if (event.text) {
|
|
224
|
+
let icon = '⚠️';
|
|
225
|
+
let bgColor = '#fff3cd';
|
|
226
|
+
let textColor = '#856404';
|
|
227
|
+
if (event.type === 'error') {
|
|
228
|
+
icon = '❗';
|
|
229
|
+
bgColor = '#fee3e3';
|
|
230
|
+
textColor = '#c01829';
|
|
231
|
+
}
|
|
232
|
+
else if (event.type === 'failure') {
|
|
233
|
+
icon = '💥';
|
|
234
|
+
bgColor = '#fee3e3';
|
|
235
|
+
textColor = '#c01829';
|
|
236
|
+
}
|
|
237
|
+
return html `<div
|
|
238
|
+
style="display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: ${bgColor}; color: ${textColor}; border-radius: 12px; margin: 4px 18px;"
|
|
239
|
+
>
|
|
240
|
+
<span style="font-size: 16px; line-height: 1.4;">${icon}</span>
|
|
241
|
+
<span style="flex: 1; line-height: 1.4;">${event.text}</span>
|
|
242
|
+
</div>`;
|
|
243
|
+
}
|
|
244
|
+
return null;
|
|
245
|
+
};
|
|
246
|
+
export const renderRunResultChanged = (event, isSimulation = false) => {
|
|
247
|
+
const val = String(event.value);
|
|
248
|
+
const MAX_LEN = isSimulation ? 30 : 100;
|
|
249
|
+
if (val.length > MAX_LEN) {
|
|
250
|
+
const displayVal = val.substring(0, MAX_LEN) + '...';
|
|
251
|
+
return html `<div>
|
|
252
|
+
Set result <strong>${event.name}</strong> to "<span
|
|
253
|
+
title="${val}"
|
|
254
|
+
style="cursor: help; border-bottom: 1px dotted #999;"
|
|
255
|
+
>${displayVal}</span
|
|
256
|
+
>"
|
|
257
|
+
</div>`;
|
|
258
|
+
}
|
|
259
|
+
return html `<div>Set result <strong>${event.name}</strong> to "${val}"</div>`;
|
|
260
|
+
};
|
|
261
|
+
export const renderInputLabelsAdded = (event) => {
|
|
262
|
+
const labels = event.labels || [];
|
|
263
|
+
if (labels.length > 0) {
|
|
264
|
+
const labelList = labels.map((l) => l.name);
|
|
265
|
+
if (labelList.length === 1) {
|
|
266
|
+
return html `<div>
|
|
267
|
+
Message labeled with <strong>${labelList[0]}</strong>
|
|
268
|
+
</div>`;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
const last = labelList.pop();
|
|
272
|
+
return html `<div>
|
|
273
|
+
Message labeled with
|
|
274
|
+
${labelList.map((name, index) => html `<strong>${name}</strong>${index < labelList.length - 1
|
|
275
|
+
? ', '
|
|
276
|
+
: ''}`)}
|
|
277
|
+
and <strong>${last}</strong>
|
|
278
|
+
</div>`;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return null;
|
|
282
|
+
};
|
|
283
|
+
export const renderEmailSent = (event) => {
|
|
284
|
+
const recipients = event.to || event.addresses || [];
|
|
285
|
+
const subject = event.subject;
|
|
286
|
+
if (recipients.length > 0) {
|
|
287
|
+
const recipientList = recipients.join(', ');
|
|
288
|
+
return html `<div>
|
|
289
|
+
Sent email to <strong>${recipientList}</strong> with subject "${subject}"
|
|
290
|
+
</div>`;
|
|
291
|
+
}
|
|
292
|
+
return null;
|
|
293
|
+
};
|
|
294
|
+
export const renderBroadcastCreated = (event) => {
|
|
295
|
+
const translations = event.translations;
|
|
296
|
+
const baseLanguage = event.base_language;
|
|
297
|
+
if (translations && translations[baseLanguage]) {
|
|
298
|
+
return html `<div>
|
|
299
|
+
Sent broadcast: "${translations[baseLanguage].text}"
|
|
300
|
+
</div>`;
|
|
301
|
+
}
|
|
302
|
+
return html `<div>Sent broadcast</div>`;
|
|
303
|
+
};
|
|
304
|
+
export const renderSessionTriggered = (event) => {
|
|
305
|
+
const flow = event.flow;
|
|
306
|
+
if (flow) {
|
|
307
|
+
return html `<div>
|
|
308
|
+
Started somebody else in <strong>${flow.name}</strong>
|
|
309
|
+
</div>`;
|
|
310
|
+
}
|
|
311
|
+
return null;
|
|
312
|
+
};
|
|
313
|
+
export const renderResthookCalled = (event) => {
|
|
314
|
+
return html `<div>
|
|
315
|
+
Triggered flow event <strong>${event.resthook}</strong>
|
|
316
|
+
</div>`;
|
|
317
|
+
};
|
|
318
|
+
export const renderWebhookCalled = (event) => {
|
|
319
|
+
return html `<div>Called <strong>${event.url}</strong></div>`;
|
|
320
|
+
};
|
|
321
|
+
export const renderServiceCalled = (event) => {
|
|
322
|
+
const service = event.service;
|
|
323
|
+
if (service === 'classifier') {
|
|
324
|
+
return html `<div>Called classifier</div>`;
|
|
325
|
+
}
|
|
326
|
+
return html `<div>Called <strong>${service}</strong></div>`;
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* Unified event renderer that handles both simulation and contact chat contexts.
|
|
330
|
+
* @param event - The event to render
|
|
331
|
+
* @param isSimulation - Whether this is for simulation (true) or contact chat (false)
|
|
332
|
+
* @returns A template result or null if the event cannot be rendered
|
|
333
|
+
*/
|
|
334
|
+
export const renderEvent = (event, isSimulation) => {
|
|
335
|
+
let content = null;
|
|
336
|
+
switch (event.type) {
|
|
337
|
+
case Events.ERROR:
|
|
338
|
+
case Events.FAILURE:
|
|
339
|
+
case Events.WARNING:
|
|
340
|
+
content = renderDiagnosticEvent(event, isSimulation);
|
|
341
|
+
break;
|
|
342
|
+
case Events.AIRTIME_TRANSFERRED:
|
|
343
|
+
content = renderAirtimeTransferredEvent(event);
|
|
344
|
+
break;
|
|
345
|
+
case Events.CALL_CREATED:
|
|
346
|
+
case Events.CALL_MISSED:
|
|
347
|
+
case Events.CALL_RECEIVED:
|
|
348
|
+
content = renderCallEvent(event);
|
|
349
|
+
break;
|
|
350
|
+
case Events.CHAT_STARTED:
|
|
351
|
+
content = renderChatStartedEvent(event);
|
|
352
|
+
break;
|
|
353
|
+
case Events.CONTACT_FIELD_CHANGED:
|
|
354
|
+
content = renderUpdateEvent(event);
|
|
355
|
+
break;
|
|
356
|
+
case Events.CONTACT_GROUPS_CHANGED:
|
|
357
|
+
content = renderContactGroupsEvent(event);
|
|
358
|
+
break;
|
|
359
|
+
case Events.CONTACT_LANGUAGE_CHANGED:
|
|
360
|
+
content = renderContactLanguageChangedEvent(event);
|
|
361
|
+
break;
|
|
362
|
+
case Events.CONTACT_NAME_CHANGED:
|
|
363
|
+
content = renderNameChanged(event);
|
|
364
|
+
break;
|
|
365
|
+
case Events.CONTACT_STATUS_CHANGED:
|
|
366
|
+
content = renderContactStatusChangedEvent(event);
|
|
367
|
+
break;
|
|
368
|
+
case Events.CONTACT_URNS_CHANGED:
|
|
369
|
+
content = renderContactURNsChanged(event);
|
|
370
|
+
break;
|
|
371
|
+
case Events.INPUT_LABELS_ADDED:
|
|
372
|
+
content = renderInputLabelsAdded(event);
|
|
373
|
+
break;
|
|
374
|
+
case Events.RUN_RESULT_CHANGED:
|
|
375
|
+
content = renderRunResultChanged(event, isSimulation);
|
|
376
|
+
break;
|
|
377
|
+
case Events.OPTIN_REQUESTED:
|
|
378
|
+
case Events.OPTIN_STARTED:
|
|
379
|
+
case Events.OPTIN_STOPPED:
|
|
380
|
+
content = renderOptInEvent(event);
|
|
381
|
+
break;
|
|
382
|
+
case Events.RUN_STARTED:
|
|
383
|
+
case Events.RUN_ENDED:
|
|
384
|
+
case Events.FLOW_ENTERED:
|
|
385
|
+
content = renderRunEvent(event);
|
|
386
|
+
break;
|
|
387
|
+
case Events.EMAIL_CREATED:
|
|
388
|
+
case Events.EMAIL_SENT:
|
|
389
|
+
content = renderEmailSent(event);
|
|
390
|
+
break;
|
|
391
|
+
case Events.BROADCAST_CREATED:
|
|
392
|
+
content = renderBroadcastCreated(event);
|
|
393
|
+
break;
|
|
394
|
+
case Events.SESSION_TRIGGERED:
|
|
395
|
+
content = renderSessionTriggered(event);
|
|
396
|
+
break;
|
|
397
|
+
case Events.RESTHOOK_CALLED:
|
|
398
|
+
content = renderResthookCalled(event);
|
|
399
|
+
break;
|
|
400
|
+
case Events.WEBHOOK_CALLED:
|
|
401
|
+
content = renderWebhookCalled(event);
|
|
402
|
+
break;
|
|
403
|
+
case Events.SERVICE_CALLED:
|
|
404
|
+
content = renderServiceCalled(event);
|
|
405
|
+
break;
|
|
406
|
+
case Events.TICKET_ASSIGNEE_CHANGED:
|
|
407
|
+
content = renderTicketAssigneeChanged(event);
|
|
408
|
+
break;
|
|
409
|
+
case Events.TICKET_CLOSED:
|
|
410
|
+
content = renderTicketAction(event, 'closed');
|
|
411
|
+
break;
|
|
412
|
+
case Events.TICKET_OPENED:
|
|
413
|
+
content = renderTicketAction(event, 'opened');
|
|
414
|
+
break;
|
|
415
|
+
case Events.TICKET_NOTE_ADDED:
|
|
416
|
+
content = renderTicketAction(event, 'noted');
|
|
417
|
+
break;
|
|
418
|
+
case Events.TICKET_REOPENED:
|
|
419
|
+
content = renderTicketAction(event, 'reopened');
|
|
420
|
+
break;
|
|
421
|
+
case Events.TICKET_TOPIC_CHANGED:
|
|
422
|
+
content = html `<div>
|
|
423
|
+
Topic changed to <strong>${event.topic.name}</strong>
|
|
424
|
+
</div>`;
|
|
425
|
+
break;
|
|
426
|
+
default:
|
|
427
|
+
return null;
|
|
428
|
+
}
|
|
429
|
+
if (content === null) {
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
// wrap in a div with appropriate font size
|
|
433
|
+
const fontSize = isSimulation ? '11px' : '14px';
|
|
434
|
+
return html `<div style="font-size: ${fontSize}">${content}</div>`;
|
|
435
|
+
};
|
|
436
|
+
/**
|
|
437
|
+
* @deprecated Use renderEvent(event, true) instead
|
|
438
|
+
*/
|
|
439
|
+
export const renderSimulatorEvent = (event) => {
|
|
440
|
+
return renderEvent(event, true);
|
|
441
|
+
};
|
|
442
|
+
//# sourceMappingURL=eventRenderers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventRenderers.js","sourceRoot":"","sources":["../../../src/events/eventRenderers.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from 'lit';\nimport {\n AirtimeTransferredEvent,\n CallEvent,\n ChatStartedEvent,\n ContactGroupsEvent,\n ContactLanguageChangedEvent,\n ContactStatusChangedEvent,\n NameChangedEvent,\n OptInEvent,\n RunEvent,\n TicketEvent,\n UpdateFieldEvent,\n URNsChangedEvent\n} from '../events';\nimport { oxfordFn } from '../utils';\n\nexport enum Events {\n AIRTIME_TRANSFERRED = 'airtime_transferred',\n BROADCAST_CREATED = 'broadcast_created',\n CALL_CREATED = 'call_created',\n CALL_MISSED = 'call_missed',\n CALL_RECEIVED = 'call_received',\n CHAT_STARTED = 'chat_started',\n CONTACT_FIELD_CHANGED = 'contact_field_changed',\n CONTACT_GROUPS_CHANGED = 'contact_groups_changed',\n CONTACT_LANGUAGE_CHANGED = 'contact_language_changed',\n CONTACT_NAME_CHANGED = 'contact_name_changed',\n CONTACT_STATUS_CHANGED = 'contact_status_changed',\n CONTACT_URNS_CHANGED = 'contact_urns_changed',\n EMAIL_CREATED = 'email_created',\n EMAIL_SENT = 'email_sent',\n ERROR = 'error',\n FAILURE = 'failure',\n FLOW_ENTERED = 'flow_entered',\n INPUT_LABELS_ADDED = 'input_labels_added',\n IVR_CREATED = 'ivr_created',\n MSG_CREATED = 'msg_created',\n MSG_RECEIVED = 'msg_received',\n OPTIN_REQUESTED = 'optin_requested',\n OPTIN_STARTED = 'optin_started',\n OPTIN_STOPPED = 'optin_stopped',\n RESTHOOK_CALLED = 'resthook_called',\n RUN_ENDED = 'run_ended',\n RUN_RESULT_CHANGED = 'run_result_changed',\n RUN_STARTED = 'run_started',\n SERVICE_CALLED = 'service_called',\n SESSION_TRIGGERED = 'session_triggered',\n TICKET_ASSIGNEE_CHANGED = 'ticket_assignee_changed',\n TICKET_CLOSED = 'ticket_closed',\n TICKET_NOTE_ADDED = 'ticket_note_added',\n TICKET_OPENED = 'ticket_opened',\n TICKET_REOPENED = 'ticket_reopened',\n TICKET_TOPIC_CHANGED = 'ticket_topic_changed',\n WARNING = 'warning',\n WEBHOOK_CALLED = 'webhook_called'\n}\n\nconst renderInfoList = (\n singular: string,\n plural: string,\n items: any[]\n): TemplateResult => {\n if (items.length === 1) {\n return html`<div>${singular} <strong>${items[0].name}</strong></div>`;\n } else {\n const list = items.map((item) => item.name);\n if (list.length === 2) {\n return html`<div>\n ${plural} <strong>${list[0]}</strong> and <strong>${list[1]}</strong>\n </div>`;\n } else {\n const last = list.pop();\n const middle = list.map(\n (name, index) =>\n html`<strong>${name}</strong>${index < list.length - 1 ? ', ' : ''}`\n );\n return html`<div>${plural} ${middle}, and <strong>${last}</strong></div>`;\n }\n }\n};\n\nexport const renderRunEvent = (event: RunEvent): TemplateResult => {\n let verb = 'Started';\n if (event.type === Events.RUN_ENDED) {\n if (event.status === 'completed') {\n verb = 'Completed';\n } else if (event.status === 'expired') {\n verb = 'Expired from';\n } else {\n verb = 'Interrupted';\n }\n }\n\n return html`<div>\n ${verb}\n <a href=\"/flow/editor/${event.flow.uuid}/\"\n ><strong>${event.flow.name}</strong></a\n >\n </div>`;\n};\n\nexport const renderChatStartedEvent = (\n event: ChatStartedEvent\n): TemplateResult => {\n if (event.params) {\n return html`<div>Chat referral</div>`;\n } else {\n return html`<div>Chat started</div>`;\n }\n};\n\nexport const renderUpdateEvent = (event: UpdateFieldEvent): TemplateResult => {\n return event.value\n ? html`<div>\n Updated <strong>${event.field.name}</strong> to\n <strong>${event.value.text}</strong>\n </div>`\n : html`<div>Cleared <strong>${event.field.name}</strong></div>`;\n};\n\nexport const renderNameChanged = (event: NameChangedEvent): TemplateResult => {\n return html`<div>\n Updated <strong>name</strong> to <strong>${event.name}</strong>\n </div>`;\n};\n\nexport const renderContactURNsChanged = (\n event: URNsChangedEvent\n): TemplateResult => {\n return html`<div>\n Updated <strong>URNs</strong> to\n ${oxfordFn(\n event.urns,\n (urn: string) => html`<strong>${urn.split(':')[1].split('?')[0]}</strong>`\n )}\n </div>`;\n};\n\nexport const renderTicketAction = (\n event: TicketEvent,\n action: string\n): TemplateResult => {\n const ticketUUID = event.ticket?.uuid || event.ticket_uuid;\n\n const actionNote = event.note\n ? html`<div\n style=\"width:85%; background: #fffac3; padding: 1em;margin-bottom: 1em;margin-top:1em; border: 1px solid #ffe97f;border-radius: var(--curvature);line-height: 1.2em; word-break: break-word;\"\n >\n <div style=\"color: #8e830fff; font-size: 1em;margin-bottom:0.25em; \">\n <strong>${event._user ? event._user.name : 'Someone'}</strong> added a\n note\n <temba-date\n value=${event.created_on.toISOString()}\n display=\"relative\"\n ></temba-date>\n </div>\n <div style=\"white-space: pre-wrap;\">${event.note}</div>\n </div>`\n : null;\n\n if (action === 'noted') {\n return html`${actionNote}`;\n }\n\n const description = event._user\n ? html`<div>\n <strong>${event._user.name}</strong> ${action} a\n <strong><a href=\"/ticket/all/closed/${ticketUUID}/\">ticket</a></strong>\n </div>`\n : html`<div>\n A\n <strong><a href=\"/ticket/all/closed/${ticketUUID}/\">ticket</a></strong>\n was <strong>${action}</strong>\n </div>`;\n\n return html`<div style=\"${actionNote ? 'margin-bottom: 1em;' : ''}\">\n ${description}\n </div>\n ${actionNote}`;\n};\n\nexport const renderTicketAssigneeChanged = (\n event: TicketEvent\n): TemplateResult => {\n if (event._user) {\n if (event.assignee) {\n return html`<div>\n <strong>${event._user.name}</strong> assigned this ticket to\n <strong>${event.assignee.name}</strong>\n </div>`;\n } else {\n return html`<div>\n <strong>${event._user.name}</strong> unassigned this ticket\n </div>`;\n }\n } else {\n if (event.assignee) {\n return html`<div>\n This ticket was assigned to <strong>${event.assignee.name}</strong>\n </div>`;\n } else {\n return html`<div>This ticket was unassigned</div>`;\n }\n }\n};\n\nexport const renderTicketOpened = (event: TicketEvent): TemplateResult => {\n return html`<div>${event.ticket.topic.name} ticket was opened</div>`;\n};\n\nexport const renderContactGroupsEvent = (\n event: ContactGroupsEvent\n): TemplateResult => {\n const groupsEvent = event as ContactGroupsEvent;\n if (groupsEvent.groups_added) {\n return renderInfoList(\n 'Added to group',\n 'Added to groups',\n groupsEvent.groups_added\n );\n } else if (groupsEvent.groups_removed) {\n return renderInfoList(\n 'Removed from group',\n 'Removed from groups',\n groupsEvent.groups_removed\n );\n }\n};\n\nexport const renderAirtimeTransferredEvent = (\n event: AirtimeTransferredEvent\n): TemplateResult => {\n if (parseFloat(event.amount) === 0) {\n return html`<div>Airtime transfer failed</div>`;\n }\n return html`<div>\n Transferred <strong>${event.amount}</strong> ${event.currency} of airtime\n </div>`;\n};\n\nexport const renderContactLanguageChangedEvent = (\n event: ContactLanguageChangedEvent\n): TemplateResult => {\n return html`<div>\n Language updated to <strong>${event.language}</strong>\n </div>`;\n};\n\nexport const renderContactStatusChangedEvent = (\n event: ContactStatusChangedEvent\n): TemplateResult => {\n return html`<div>Status updated to <strong>${event.status}</strong></div>`;\n};\n\nexport const renderCallEvent = (event: CallEvent): TemplateResult => {\n if (event.type === Events.CALL_CREATED) {\n return html`<div>Call started</div>`;\n } else if (event.type === Events.CALL_MISSED) {\n return html`<div>Call missed</div>`;\n } else if (event.type === Events.CALL_RECEIVED) {\n return html`<div>Call answered</div>`;\n }\n};\n\nexport const renderOptInEvent = (event: OptInEvent): TemplateResult => {\n if (event.type === Events.OPTIN_REQUESTED) {\n return html`<div>\n Requested opt-in for <strong>${event.optin.name}</strong>\n </div>`;\n } else if (event.type === Events.OPTIN_STARTED) {\n return html`<div>Opted in to <strong>${event.optin.name}</strong></div>`;\n } else if (event.type === Events.OPTIN_STOPPED) {\n return html`<div>Opted out of <strong>${event.optin.name}</strong></div>`;\n }\n};\n\nexport const renderDiagnosticEvent = (\n event: any,\n _isSimulation: boolean = false\n): TemplateResult | null => {\n if (event.text) {\n let icon = '⚠️';\n let bgColor = '#fff3cd';\n let textColor = '#856404';\n\n if (event.type === 'error') {\n icon = '❗';\n bgColor = '#fee3e3';\n textColor = '#c01829';\n } else if (event.type === 'failure') {\n icon = '💥';\n bgColor = '#fee3e3';\n textColor = '#c01829';\n }\n\n return html`<div\n style=\"display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: ${bgColor}; color: ${textColor}; border-radius: 12px; margin: 4px 18px;\"\n >\n <span style=\"font-size: 16px; line-height: 1.4;\">${icon}</span>\n <span style=\"flex: 1; line-height: 1.4;\">${event.text}</span>\n </div>`;\n }\n return null;\n};\n\nexport const renderRunResultChanged = (\n event: any,\n isSimulation: boolean = false\n): TemplateResult | null => {\n const val = String(event.value);\n const MAX_LEN = isSimulation ? 30 : 100;\n\n if (val.length > MAX_LEN) {\n const displayVal = val.substring(0, MAX_LEN) + '...';\n return html`<div>\n Set result <strong>${event.name}</strong> to \"<span\n title=\"${val}\"\n style=\"cursor: help; border-bottom: 1px dotted #999;\"\n >${displayVal}</span\n >\"\n </div>`;\n }\n return html`<div>Set result <strong>${event.name}</strong> to \"${val}\"</div>`;\n};\n\nexport const renderInputLabelsAdded = (event: any): TemplateResult | null => {\n const labels = event.labels || [];\n if (labels.length > 0) {\n const labelList = labels.map((l: any) => l.name);\n if (labelList.length === 1) {\n return html`<div>\n Message labeled with <strong>${labelList[0]}</strong>\n </div>`;\n } else {\n const last = labelList.pop();\n return html`<div>\n Message labeled with\n ${labelList.map(\n (name: string, index: number) =>\n html`<strong>${name}</strong>${index < labelList.length - 1\n ? ', '\n : ''}`\n )}\n and <strong>${last}</strong>\n </div>`;\n }\n }\n return null;\n};\n\nexport const renderEmailSent = (event: any): TemplateResult | null => {\n const recipients = event.to || event.addresses || [];\n const subject = event.subject;\n if (recipients.length > 0) {\n const recipientList = recipients.join(', ');\n return html`<div>\n Sent email to <strong>${recipientList}</strong> with subject \"${subject}\"\n </div>`;\n }\n return null;\n};\n\nexport const renderBroadcastCreated = (event: any): TemplateResult | null => {\n const translations = event.translations;\n const baseLanguage = event.base_language;\n if (translations && translations[baseLanguage]) {\n return html`<div>\n Sent broadcast: \"${translations[baseLanguage].text}\"\n </div>`;\n }\n return html`<div>Sent broadcast</div>`;\n};\n\nexport const renderSessionTriggered = (event: any): TemplateResult | null => {\n const flow = event.flow;\n if (flow) {\n return html`<div>\n Started somebody else in <strong>${flow.name}</strong>\n </div>`;\n }\n return null;\n};\n\nexport const renderResthookCalled = (event: any): TemplateResult | null => {\n return html`<div>\n Triggered flow event <strong>${event.resthook}</strong>\n </div>`;\n};\n\nexport const renderWebhookCalled = (event: any): TemplateResult | null => {\n return html`<div>Called <strong>${event.url}</strong></div>`;\n};\n\nexport const renderServiceCalled = (event: any): TemplateResult | null => {\n const service = event.service;\n if (service === 'classifier') {\n return html`<div>Called classifier</div>`;\n }\n return html`<div>Called <strong>${service}</strong></div>`;\n};\n\n/**\n * Unified event renderer that handles both simulation and contact chat contexts.\n * @param event - The event to render\n * @param isSimulation - Whether this is for simulation (true) or contact chat (false)\n * @returns A template result or null if the event cannot be rendered\n */\nexport const renderEvent = (\n event: any,\n isSimulation: boolean\n): TemplateResult | null => {\n let content: TemplateResult | null = null;\n\n switch (event.type) {\n case Events.ERROR:\n case Events.FAILURE:\n case Events.WARNING:\n content = renderDiagnosticEvent(event, isSimulation);\n break;\n case Events.AIRTIME_TRANSFERRED:\n content = renderAirtimeTransferredEvent(event as AirtimeTransferredEvent);\n break;\n case Events.CALL_CREATED:\n case Events.CALL_MISSED:\n case Events.CALL_RECEIVED:\n content = renderCallEvent(event as CallEvent);\n break;\n case Events.CHAT_STARTED:\n content = renderChatStartedEvent(event as ChatStartedEvent);\n break;\n case Events.CONTACT_FIELD_CHANGED:\n content = renderUpdateEvent(event as UpdateFieldEvent);\n break;\n case Events.CONTACT_GROUPS_CHANGED:\n content = renderContactGroupsEvent(event as ContactGroupsEvent);\n break;\n case Events.CONTACT_LANGUAGE_CHANGED:\n content = renderContactLanguageChangedEvent(\n event as ContactLanguageChangedEvent\n );\n break;\n case Events.CONTACT_NAME_CHANGED:\n content = renderNameChanged(event as NameChangedEvent);\n break;\n case Events.CONTACT_STATUS_CHANGED:\n content = renderContactStatusChangedEvent(\n event as ContactStatusChangedEvent\n );\n break;\n case Events.CONTACT_URNS_CHANGED:\n content = renderContactURNsChanged(event as URNsChangedEvent);\n break;\n case Events.INPUT_LABELS_ADDED:\n content = renderInputLabelsAdded(event);\n break;\n case Events.RUN_RESULT_CHANGED:\n content = renderRunResultChanged(event, isSimulation);\n break;\n case Events.OPTIN_REQUESTED:\n case Events.OPTIN_STARTED:\n case Events.OPTIN_STOPPED:\n content = renderOptInEvent(event as OptInEvent);\n break;\n case Events.RUN_STARTED:\n case Events.RUN_ENDED:\n case Events.FLOW_ENTERED:\n content = renderRunEvent(event as RunEvent);\n break;\n case Events.EMAIL_CREATED:\n case Events.EMAIL_SENT:\n content = renderEmailSent(event);\n break;\n case Events.BROADCAST_CREATED:\n content = renderBroadcastCreated(event);\n break;\n case Events.SESSION_TRIGGERED:\n content = renderSessionTriggered(event);\n break;\n case Events.RESTHOOK_CALLED:\n content = renderResthookCalled(event);\n break;\n case Events.WEBHOOK_CALLED:\n content = renderWebhookCalled(event);\n break;\n case Events.SERVICE_CALLED:\n content = renderServiceCalled(event);\n break;\n case Events.TICKET_ASSIGNEE_CHANGED:\n content = renderTicketAssigneeChanged(event as TicketEvent);\n break;\n case Events.TICKET_CLOSED:\n content = renderTicketAction(event as TicketEvent, 'closed');\n break;\n case Events.TICKET_OPENED:\n content = renderTicketAction(event as TicketEvent, 'opened');\n break;\n case Events.TICKET_NOTE_ADDED:\n content = renderTicketAction(event as TicketEvent, 'noted');\n break;\n case Events.TICKET_REOPENED:\n content = renderTicketAction(event as TicketEvent, 'reopened');\n break;\n case Events.TICKET_TOPIC_CHANGED:\n content = html`<div>\n Topic changed to <strong>${(event as TicketEvent).topic.name}</strong>\n </div>`;\n break;\n default:\n return null;\n }\n\n if (content === null) {\n return null;\n }\n\n // wrap in a div with appropriate font size\n const fontSize = isSimulation ? '11px' : '14px';\n return html`<div style=\"font-size: ${fontSize}\">${content}</div>`;\n};\n\n/**\n * @deprecated Use renderEvent(event, true) instead\n */\nexport const renderSimulatorEvent = (event: any): TemplateResult | null => {\n return renderEvent(event, true);\n};\n"]}
|
|
@@ -90,6 +90,7 @@ export class Editor extends RapidElement {
|
|
|
90
90
|
background-position: 10px 10px;
|
|
91
91
|
width: 100%;
|
|
92
92
|
display: flex;
|
|
93
|
+
padding-top: 20px;
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
#canvas {
|
|
@@ -190,13 +191,13 @@ export class Editor extends RapidElement {
|
|
|
190
191
|
background: #3498db;
|
|
191
192
|
border: 1px solid #2980b9;
|
|
192
193
|
border-radius: 12px;
|
|
193
|
-
padding: 3px
|
|
194
|
+
padding: 3px 6px;
|
|
194
195
|
color: #fff;
|
|
195
196
|
font-weight: 500;
|
|
196
197
|
top: -10px;
|
|
197
198
|
left: -10px;
|
|
198
199
|
font-size: 13px;
|
|
199
|
-
|
|
200
|
+
|
|
200
201
|
text-align: center;
|
|
201
202
|
z-index: 600;
|
|
202
203
|
line-height: 1;
|