@chat21/chat21-ionic 3.0.97-rc.5 → 3.0.98-rc.1
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 +6 -0
- package/package.json +1 -1
- package/src/app/app.component.ts +10 -10
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +6 -6
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +2 -2
- package/src/app/modals/send-email/send-email.page.scss +0 -2
- package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.html +1 -1
- package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.scss +26 -0
- package/src/app/pages/conversation-detail/conversation-detail.page.html +1 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +9 -5
- package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +6 -1
- package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +29 -2
- package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +9 -0
- package/tsconfig.json +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# chat21-ionic ver 3.0
|
|
2
2
|
|
|
3
|
+
### 3.0.98-rc.1
|
|
4
|
+
- changed: conversation.attributes.channel with conversation.attributes.request_channel to get the current convesation channel
|
|
5
|
+
- bug-fixed: whatsapp template not enabled when agent is added to a whatsapp channel request
|
|
6
|
+
|
|
7
|
+
### 3.0.97 in PROD
|
|
8
|
+
|
|
3
9
|
### 3.0.97-rc.5
|
|
4
10
|
- added: whatsapp templates section to send an already configured whatsapp templete only in case of a whatsapp conversation channel type
|
|
5
11
|
- added: channel input var in message-text-area component to manage the type of current conversation
|
package/package.json
CHANGED
package/src/app/app.component.ts
CHANGED
|
@@ -1151,16 +1151,16 @@ export class AppComponent implements OnInit {
|
|
|
1151
1151
|
|
|
1152
1152
|
this.router.navigateByUrl('conversation-detail/'); //redirect to basePage
|
|
1153
1153
|
if(this.IS_ON_MOBILE_DEVICE){
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1154
|
+
clearTimeout(this.timeModalLogin);
|
|
1155
|
+
this.timeModalLogin = setTimeout(() => {
|
|
1156
|
+
if (!this.hadBeenCalledOpenModal) {
|
|
1157
|
+
this.authModal = this.presentModal('initAuthentication');
|
|
1158
|
+
this.hadBeenCalledOpenModal = true;
|
|
1159
|
+
}
|
|
1160
|
+
}, 1000)
|
|
1161
|
+
}else{
|
|
1162
|
+
this.goToDashboardLogin()
|
|
1163
|
+
}
|
|
1164
1164
|
|
|
1165
1165
|
|
|
1166
1166
|
// if (!this.hadBeenCalledOpenModal) {
|
|
@@ -106,12 +106,12 @@
|
|
|
106
106
|
</div>
|
|
107
107
|
<!-- SUPPORT-GROUP CONV -->
|
|
108
108
|
<div *ngIf="conversation.uid.startsWith(TYPE_SUPPORT_GROUP) && !IS_ON_MOBILE_DEVICE">
|
|
109
|
-
<img class="channel-icon" src="assets/images/channel_icons/chat21.svg" *ngIf="conversation?.attributes && ( (conversation?.attributes?.
|
|
110
|
-
<img class="channel-icon" src="assets/images/channel_icons/email-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.
|
|
111
|
-
<img class="channel-icon" src="assets/images/channel_icons/form-logo_v2.svg" *ngIf="conversation?.attributes && conversation?.attributes?.
|
|
112
|
-
<img class="channel-icon" src="assets/images/channel_icons/messenger-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.
|
|
113
|
-
<img class="channel-icon" src="assets/images/channel_icons/whatsapp-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.
|
|
114
|
-
<img class="channel-icon" src="assets/images/channel_icons/telegram-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.
|
|
109
|
+
<img class="channel-icon" src="assets/images/channel_icons/chat21.svg" *ngIf="conversation?.attributes && ( (conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE_CHAT21) || !conversation?.attributes?.channel) " >
|
|
110
|
+
<img class="channel-icon" src="assets/images/channel_icons/email-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE_EMAIL" >
|
|
111
|
+
<img class="channel-icon" src="assets/images/channel_icons/form-logo_v2.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE_FORM" >
|
|
112
|
+
<img class="channel-icon" src="assets/images/channel_icons/messenger-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE_MESSANGER" >
|
|
113
|
+
<img class="channel-icon" src="assets/images/channel_icons/whatsapp-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE_WHATSAPP" >
|
|
114
|
+
<img class="channel-icon" src="assets/images/channel_icons/telegram-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE_TELEGRAM" >
|
|
115
115
|
<span *ngIf="conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.project_name}}</span>
|
|
116
116
|
<span *ngIf="!conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.projectId}}</span>
|
|
117
117
|
</div>
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts
CHANGED
|
@@ -85,7 +85,7 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
85
85
|
addWhiteSpaceBefore: boolean;
|
|
86
86
|
emojiPerLine: number = 9
|
|
87
87
|
emojiColor: string ="#3880ff"
|
|
88
|
-
emojiiCategories = [ 'recent', 'people', 'nature', 'activity'] //, 'custom']
|
|
88
|
+
emojiiCategories = [ 'recent', 'people', 'nature', 'activity', 'flags'] //, 'custom']
|
|
89
89
|
|
|
90
90
|
customEmojis = [
|
|
91
91
|
{
|
|
@@ -146,7 +146,7 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
146
146
|
|
|
147
147
|
}
|
|
148
148
|
this.logger.log('[CONVS-DETAIL] - returnChangeTextArea ngOnChanges in [MSG-TEXT-AREA] this.tagsCannedFilter.length ', this.tagsCannedFilter.length)
|
|
149
|
-
this.logger.log('[CONVS-DETAIL] - returnChangeTextArea ngOnChanges in [MSG-TEXT-AREA] channel', this.channel )
|
|
149
|
+
this.logger.log('[CONVS-DETAIL] - returnChangeTextArea ngOnChanges in [MSG-TEXT-AREA] channel', this.channel, this.whatsappTemplatesSection, this.emailSection )
|
|
150
150
|
|
|
151
151
|
// use case drop
|
|
152
152
|
if (this.dropEvent) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<ion-header no-border class="ion-no-border">
|
|
2
|
-
<ion-toolbar>
|
|
2
|
+
<ion-toolbar class="beta">
|
|
3
3
|
<ion-title *ngIf="!editTemplateView">{{ 'WHATSAPP.SELECT_MESSAGE_TEMPLATE' | translate }}</ion-title>
|
|
4
4
|
<ion-title *ngIf="editTemplateView">Review and send template</ion-title>
|
|
5
5
|
<ion-buttons slot="end">
|
|
@@ -338,3 +338,29 @@ ion-footer {
|
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
+
ion-toolbar{
|
|
342
|
+
&.beta:after{
|
|
343
|
+
content: "beta";
|
|
344
|
+
position: fixed;
|
|
345
|
+
width: 80px;
|
|
346
|
+
height: 25px;
|
|
347
|
+
background: #EE8E4A;
|
|
348
|
+
top: 7px;
|
|
349
|
+
left: -20px;
|
|
350
|
+
text-align: center;
|
|
351
|
+
font-size: 13px;
|
|
352
|
+
font-family: sans-serif;
|
|
353
|
+
text-transform: uppercase;
|
|
354
|
+
font-weight: bold;
|
|
355
|
+
color: #fff;
|
|
356
|
+
line-height: 27px;
|
|
357
|
+
transform:rotate(-45deg);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
ion-title{
|
|
361
|
+
margin-left: 30px;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
[loggedUser]="loggedUser"
|
|
228
228
|
[conversationWith]="conversationWith"
|
|
229
229
|
[channelType]="channelType"
|
|
230
|
-
[channel]="conversation?.attributes?.
|
|
230
|
+
[channel]="conversation?.attributes?.request_channel"
|
|
231
231
|
[tagsCannedFilter]="tagsCannedFilter"
|
|
232
232
|
[tagsCannedCount]="tagsCannedCount"
|
|
233
233
|
[areVisibleCAR]="areVisibleCAR"
|
|
@@ -939,6 +939,9 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
939
939
|
this.logger.debug('[CONVS-DETAIL] getLeadDetail - section ', projectId)
|
|
940
940
|
this.tiledeskService.getRequest(this.conversationWith, projectId, tiledeskToken).subscribe((request: any) => {
|
|
941
941
|
that.logger.debug('[CONVS-DETAIL] getLeadDetail - selected REQUEST detail', request)
|
|
942
|
+
if(request && request.channel){
|
|
943
|
+
this.conversation.attributes['request_channel'] = request.channel.name
|
|
944
|
+
}
|
|
942
945
|
if (request.lead && request.lead.email) {
|
|
943
946
|
that.leadInfo = {
|
|
944
947
|
lead_id: request.lead.lead_id,
|
|
@@ -970,15 +973,16 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
970
973
|
if (isInfo(message))
|
|
971
974
|
return;
|
|
972
975
|
if (index === 0)
|
|
973
|
-
text += 'On _' + date + ' - ' + time + '_ **' + message.sender_fullname + '**' + ' replied to you' + ': ' + '\n' +
|
|
976
|
+
text += 'On _' + date + ' - ' + time + '_ **' + message.sender_fullname.trimEnd() + '**' + ' replied to you' + ': ' + '\n' +
|
|
974
977
|
message.text + '\n\n\n'
|
|
975
978
|
if (index === 1)
|
|
976
979
|
text += '_______________________________________________' + '\n' +
|
|
977
980
|
'**' + 'CONVERSATION HISTORY:' + '**' + '\n' +
|
|
978
|
-
'**' + message.sender_fullname + '**' + ': ' + message.text + ' _(' + date + '-' + time + ')_' + '\n'
|
|
981
|
+
'**' + message.sender_fullname.trimEnd() + '**' + ': ' + message.text + ' _(' + date + '-' + time + ')_' + '\n'
|
|
979
982
|
if (index > 1)
|
|
980
|
-
text += '**' + message.sender_fullname + '**' + ': ' + message.text + ' _(' + date + '-' + time + ')_' + '\n'
|
|
983
|
+
text += '**' + message.sender_fullname.trimEnd() + '**' + ': ' + message.text + ' _(' + date + '-' + time + ')_' + '\n'
|
|
981
984
|
})
|
|
985
|
+
|
|
982
986
|
return text
|
|
983
987
|
}
|
|
984
988
|
|
|
@@ -1068,14 +1072,14 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
1068
1072
|
msg = `[${metadata.name}](${metadata.src})`
|
|
1069
1073
|
}
|
|
1070
1074
|
}
|
|
1071
|
-
this.conversation.attributes && this.conversation.attributes['
|
|
1075
|
+
this.conversation.attributes && this.conversation.attributes['request_channel'] ? attributes.channel = this.conversation.attributes['request_channel'] : null;
|
|
1072
1076
|
metadata ? (metadata = metadata) : (metadata = '')
|
|
1073
1077
|
this.logger.log('[CONVS-DETAIL] attributes--->>>> 1111', this.conversation.attributes, attributes)
|
|
1074
1078
|
this.logger.log('[CONVS-DETAIL] - SEND MESSAGE msg: ', msg, ' - messages: ', this.messages, ' - loggedUser: ', this.loggedUser)
|
|
1075
1079
|
|
|
1076
1080
|
|
|
1077
1081
|
const emailSectionMsg = (attributes && attributes['offline_channel'] === TYPE_MSG_EMAIL)
|
|
1078
|
-
const channelIsNotEmailOrFormOrWhatsapp = (attributes && attributes['
|
|
1082
|
+
const channelIsNotEmailOrFormOrWhatsapp = (attributes && attributes['request_channel'] && (attributes['request_channel'] === TYPE_MSG_EMAIL || attributes['request_channel'] === TYPE_MSG_FORM || attributes['request_channel'] === CHANNEL_TYPE_WHATSAPP))
|
|
1079
1083
|
|
|
1080
1084
|
if ((msg && msg.trim() !== '') || type !== TYPE_MSG_TEXT) {
|
|
1081
1085
|
|
|
@@ -22,8 +22,9 @@ import { AppConfigProvider } from 'src/app/services/app-config';
|
|
|
22
22
|
// utils
|
|
23
23
|
import { avatarPlaceholder, getColorBck } from '../../utils/utils-user';
|
|
24
24
|
import { compareValues, conversationsPathForUserId, searchIndexInArrayForUid, isGroup } from '../../utils/utils';
|
|
25
|
-
import { TOUCHING_OPERATOR } from '../../utils/constants';
|
|
25
|
+
import { MESSAGE_TYPE_INFO, TOUCHING_OPERATOR } from '../../utils/constants';
|
|
26
26
|
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
|
27
|
+
import { messageType } from 'src/chat21-core/utils/utils-message';
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
// @Injectable({ providedIn: 'root' })
|
|
@@ -517,6 +518,10 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
|
|
|
517
518
|
|
|
518
519
|
private changed(childSnapshot: any) {
|
|
519
520
|
const oldConversation = this.conversations[searchIndexInArrayForUid(this.conversations, childSnapshot.key)]
|
|
521
|
+
//skip info message updates
|
|
522
|
+
if(messageType(MESSAGE_TYPE_INFO, oldConversation) ){
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
520
525
|
if (this.conversationGenerate(childSnapshot)) {
|
|
521
526
|
const index = searchIndexInArrayForUid(this.conversations, childSnapshot.key);
|
|
522
527
|
if (index > -1) {
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
searchIndexInArrayForUid,
|
|
24
24
|
conversationMessagesRef
|
|
25
25
|
} from '../../utils/utils';
|
|
26
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
26
27
|
import { isSender, messageType } from '../../utils/utils-message';
|
|
27
28
|
|
|
28
29
|
|
|
@@ -111,7 +112,13 @@ export class MQTTConversationHandler extends ConversationHandlerService {
|
|
|
111
112
|
this.conversationWith, (message, topic) => {
|
|
112
113
|
this.logger.log('[MQTTConversationHandler] message added:', message, 'on topic:', topic);
|
|
113
114
|
const msg: MessageModel = message;
|
|
114
|
-
|
|
115
|
+
|
|
116
|
+
//allow to replace message in unknown status (pending status: '0')
|
|
117
|
+
if(message.attributes && message.attributes.tempUID){
|
|
118
|
+
msg.uid = message.attributes.tempUID;
|
|
119
|
+
}else{
|
|
120
|
+
msg.uid = message.message_id
|
|
121
|
+
}
|
|
115
122
|
|
|
116
123
|
this.addedMessage(msg);
|
|
117
124
|
});
|
|
@@ -170,6 +177,7 @@ export class MQTTConversationHandler extends ConversationHandlerService {
|
|
|
170
177
|
const recipientFullname = conversationWithFullname;
|
|
171
178
|
const recipientId = conversationWith;
|
|
172
179
|
attributes.lang = language;
|
|
180
|
+
attributes.tempUID = uuidv4(); //allow to show message in a pending status
|
|
173
181
|
this.chat21Service.chatClient.sendMessage(
|
|
174
182
|
msg,
|
|
175
183
|
typeMsg,
|
|
@@ -189,6 +197,25 @@ export class MQTTConversationHandler extends ConversationHandlerService {
|
|
|
189
197
|
}
|
|
190
198
|
}
|
|
191
199
|
);
|
|
200
|
+
|
|
201
|
+
const message = new MessageModel(
|
|
202
|
+
attributes.tempUID, //allow to show message in a pending status
|
|
203
|
+
language,
|
|
204
|
+
conversationWith,
|
|
205
|
+
recipientFullname,
|
|
206
|
+
sender,
|
|
207
|
+
senderFullname,
|
|
208
|
+
0,
|
|
209
|
+
metadataMsg,
|
|
210
|
+
msg,
|
|
211
|
+
Date.now(),
|
|
212
|
+
typeMsg,
|
|
213
|
+
attributes,
|
|
214
|
+
channelType,
|
|
215
|
+
false
|
|
216
|
+
);
|
|
217
|
+
this.addedMessage(message) //allow to show message in a pending status: add pending message in array of messages
|
|
218
|
+
|
|
192
219
|
return new MessageModel(
|
|
193
220
|
'',
|
|
194
221
|
language,
|
|
@@ -402,7 +429,7 @@ export class MQTTConversationHandler extends ConversationHandlerService {
|
|
|
402
429
|
*/
|
|
403
430
|
private updateMessageStatusReceived(msg) {
|
|
404
431
|
this.logger.log('[MQTTConversationHandler] updateMessageStatusReceived', msg);
|
|
405
|
-
if (msg['status'] < MSG_STATUS_RECEIVED) {
|
|
432
|
+
if (msg['status'] < MSG_STATUS_RECEIVED && msg['status'] > 0) {
|
|
406
433
|
this.logger.log('[MQTTConversationHandler] status ', msg['status'], ' < (RECEIVED:200)', MSG_STATUS_RECEIVED);
|
|
407
434
|
if (msg.sender !== this.loggedUser.uid && msg.status < MSG_STATUS_RECEIVED) {
|
|
408
435
|
this.logger.log('[MQTTConversationHandler] updating message with status received');
|
|
@@ -17,6 +17,8 @@ import { compareValues, conversationsPathForUserId, searchIndexInArrayForUid } f
|
|
|
17
17
|
import { LoggerService } from '../abstract/logger.service';
|
|
18
18
|
import { LoggerInstance } from '../logger/loggerInstance';
|
|
19
19
|
import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
|
|
20
|
+
import { messageType } from 'src/chat21-core/utils/utils-message';
|
|
21
|
+
import { MESSAGE_TYPE_INFO } from 'src/chat21-core/utils/constants';
|
|
20
22
|
// import { ImageRepoService } from '../abstract/image-repo.service';
|
|
21
23
|
// import { ConsoleReporter } from 'jasmine';
|
|
22
24
|
|
|
@@ -251,6 +253,13 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
|
|
|
251
253
|
if (!conversation.conversation_with) {
|
|
252
254
|
conversation.conversation_with = conversation.conversWith // conversWith comes from remote
|
|
253
255
|
}
|
|
256
|
+
|
|
257
|
+
//skip info message updates
|
|
258
|
+
if(messageType(MESSAGE_TYPE_INFO, conversation) ){
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
|
|
254
263
|
const index = searchIndexInArrayForUid(this.conversations, conversation.conversation_with);
|
|
255
264
|
const oldConversation = this.conversations[index]
|
|
256
265
|
if (index > -1) {
|