@chat21/chat21-ionic 3.0.65 → 3.0.68-rc.2

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/deploy_amazon_prod.sh +6 -2
  3. package/package.json +1 -1
  4. package/src/app/app.component.ts +90 -56
  5. package/src/app/app.module.ts +4 -4
  6. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +8 -0
  7. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.ts +0 -2
  8. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.html +49 -4
  9. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +1 -3
  10. package/src/app/components/conversation-info/info-content/info-content.component.ts +22 -25
  11. package/src/app/components/ddp-header/ddp-header.component.html +20 -5
  12. package/src/app/components/ddp-header/ddp-header.component.ts +8 -0
  13. package/src/app/components/project-item/project-item.component.ts +26 -49
  14. package/src/app/components/sidebar/sidebar.component.ts +33 -56
  15. package/src/app/pages/conversation-detail/conversation-detail.page.ts +54 -106
  16. package/src/app/pages/conversations-list/conversations-list.page.html +3 -1
  17. package/src/app/pages/conversations-list/conversations-list.page.ts +48 -30
  18. package/src/app/pages/create-canned-response/create-canned-response.page.ts +22 -29
  19. package/src/app/pages/loader-preview/loader-preview.page.ts +12 -43
  20. package/src/app/services/websocket/websocket.service.ts +1 -1
  21. package/src/assets/i18n/ar.json +1 -1
  22. package/src/assets/i18n/az.json +266 -0
  23. package/src/assets/i18n/de.json +1 -1
  24. package/src/assets/i18n/en.json +1 -1
  25. package/src/assets/i18n/es.json +1 -1
  26. package/src/assets/i18n/fr.json +1 -1
  27. package/src/assets/i18n/it.json +1 -1
  28. package/src/assets/i18n/kk.json +266 -0
  29. package/src/assets/i18n/pt.json +1 -1
  30. package/src/assets/i18n/ru.json +1 -1
  31. package/src/assets/i18n/sr.json +1 -1
  32. package/src/assets/i18n/sv.json +266 -0
  33. package/src/assets/i18n/tr.json +1 -1
  34. package/src/assets/i18n/uk.json +266 -0
  35. package/src/assets/i18n/uz.json +267 -0
  36. package/src/assets/images/language_flag/az.png +0 -0
  37. package/src/assets/images/language_flag/kk.png +0 -0
  38. package/src/assets/images/language_flag/{sv-SE.png → sv.png} +0 -0
  39. package/src/assets/images/language_flag/uz.png +0 -0
  40. package/src/chat-config-mqtt-localhost.json +10 -3
  41. package/src/chat-config-pre.json +3 -1
  42. package/src/chat21-core/providers/abstract/archivedconversations-handler.service.ts +1 -2
  43. package/src/chat21-core/providers/abstract/conversations-handler.service.ts +4 -4
  44. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +3 -6
  45. package/src/chat21-core/providers/firebase/firebase-auth-service.ts +2 -8
  46. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +4 -4
  47. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +49 -10
  48. package/src/chat21-core/providers/firebase/firebase-groups-handler.ts +5 -5
  49. package/src/chat21-core/providers/firebase/firebase-image-repo.ts +2 -1
  50. package/src/chat21-core/providers/firebase/firebase-presence.service.ts +2 -3
  51. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +2 -2
  52. package/src/chat21-core/providers/firebase/firebase-upload.service.ts +1 -1
  53. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +74 -274
  54. package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +26 -29
  55. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +7 -28
  56. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +24 -52
  57. package/src/chat21-core/providers/mqtt/mqtt-groups-handler.ts +11 -15
  58. package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +88 -93
  59. package/src/chat21-core/providers/mqtt/mqtt-presence.service.ts +3 -2
  60. package/src/chat21-core/providers/mqtt/mqtt-typing.service.ts +5 -0
  61. package/src/chat21-core/providers/native/native-image-repo.ts +9 -2
  62. package/src/chat21-core/providers/native/native-upload-service.ts +3 -11
  63. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +0 -2
  64. package/src/chat21-core/utils/constants.ts +1 -1
  65. package/src/chat21-core/utils/utils-message.ts +1 -1
  66. package/deploy_pre.sh +0 -44
@@ -15,16 +15,15 @@ export abstract class ConversationsHandlerService {
15
15
 
16
16
  // BehaviorSubject
17
17
  abstract BSConversationDetail: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
18
- // abstract readAllMessages: BehaviorSubject<string> = new BehaviorSubject<string>(null);
19
18
  abstract conversationAdded: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
20
19
  abstract conversationChanged: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
20
+ abstract conversationChangedDetailed: BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}> = new BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}>(null);
21
21
  abstract conversationRemoved: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
22
- abstract loadedConversationsStorage: BehaviorSubject<ConversationModel[]> = new BehaviorSubject<ConversationModel[]>([]);
23
-
22
+ // abstract readAllMessages: BehaviorSubject<string> = new BehaviorSubject<string>(null);
23
+
24
24
  // params
25
25
  abstract conversations: Array<ConversationModel> = [];
26
26
  abstract uidConvSelected: string;
27
- // abstract imageRepo: ImageRepoService;
28
27
 
29
28
  // functions
30
29
  abstract initialize(tenant: string, userId: string, translationMap: Map<string, string>): void;
@@ -34,6 +33,7 @@ export abstract class ConversationsHandlerService {
34
33
  abstract setConversationRead(conversationId: string): void;
35
34
  abstract dispose(): void;
36
35
  abstract archiveConversation(conversationId: string): void;
36
+ abstract getLastConversation(callback:(conv: ConversationModel, error: string)=>void): void
37
37
  abstract getConversationDetail(conversationId: string, callback:(conv: ConversationModel)=>void): void;
38
38
  abstract getClosingConversation(conversationId: string): boolean;
39
39
  abstract setClosingConversation(conversationId: string, status: boolean): void;
@@ -28,11 +28,10 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
28
28
 
29
29
  // BehaviorSubject
30
30
  BSConversationDetail: BehaviorSubject<ConversationModel>;
31
+ archivedConversationAdded: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
32
+ archivedConversationChanged: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
33
+ archivedConversationRemoved: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
31
34
  // readAllMessages: BehaviorSubject<string>;
32
- archivedConversationAdded: BehaviorSubject<ConversationModel>;
33
- archivedConversationChanged: BehaviorSubject<ConversationModel>;
34
- archivedConversationRemoved: BehaviorSubject<ConversationModel>;
35
- loadedConversationsStorage: BehaviorSubject<ConversationModel[]>;
36
35
 
37
36
  // public params
38
37
  archivedConversations: Array<ConversationModel> = [];
@@ -325,7 +324,6 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
325
324
  * 7 - attivo sound se è un msg nuovo
326
325
  */
327
326
 
328
- //TODO-GAB: fare emit singola conversation e non dell'intero array di conversations
329
327
  private changed(childSnapshot: any) {
330
328
  if (this.conversationGenerate(childSnapshot)) {
331
329
  const index = searchIndexInArrayForUid(this.archivedConversations, childSnapshot.key);
@@ -395,7 +393,6 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
395
393
  conversation_with_fullname = conv.recipient_fullname;
396
394
  }
397
395
  // Fixes the bug: if a snippet of code is pasted and sent it is not displayed correctly in the archived convesations list
398
- // conv.last_message_text = htmlEntities(conv.last_message_text)
399
396
  conv.conversation_with = conversation_with;
400
397
  conv.conversation_with_fullname = conversation_with_fullname;
401
398
  conv.status = this.setStatusConversation(conv.sender, conv.uid);
@@ -40,21 +40,15 @@ export class FirebaseAuthService extends MessagingAuthService {
40
40
 
41
41
 
42
42
  // BehaviorSubject
43
- BSAuthStateChanged: BehaviorSubject<any>;
44
- BSSignOut: BehaviorSubject<any>;
45
- // firebaseSignInWithCustomToken: BehaviorSubject<any>;
43
+ BSAuthStateChanged: BehaviorSubject<any> = new BehaviorSubject<any>(null);
44
+ BSSignOut: BehaviorSubject<any> = new BehaviorSubject<any>(null);
46
45
 
47
46
  // public params
48
47
  // private persistence: string;
49
48
  public SERVER_BASE_URL: string;
50
49
 
51
50
  // private
52
- private URL_TILEDESK_SIGNIN: string;
53
- private URL_TILEDESK_SIGNIN_ANONYMOUSLY: string;
54
51
  private URL_TILEDESK_CREATE_CUSTOM_TOKEN: string;
55
- private URL_TILEDESK_SIGNIN_WITH_CUSTOM_TOKEN: string;
56
- //TODO-GAB
57
- // private imageRepo: ImageRepoService = new FirebaseImageRepoService();
58
52
 
59
53
  private firebaseToken: string;
60
54
  private logger: LoggerService = LoggerInstance.getInstance()
@@ -32,10 +32,10 @@ import { messageType, isEmojii } from 'src/chat21-core/utils/utils-message';
32
32
  export class FirebaseConversationHandler extends ConversationHandlerService {
33
33
 
34
34
  // BehaviorSubject
35
- messageAdded: BehaviorSubject<MessageModel>;
36
- messageChanged: BehaviorSubject<MessageModel>;
37
- messageRemoved: BehaviorSubject<string>;
38
- isTyping: BehaviorSubject<any> = new BehaviorSubject<any>(null);
35
+ messageAdded: BehaviorSubject<MessageModel> = new BehaviorSubject<MessageModel>(null);;
36
+ messageChanged: BehaviorSubject<MessageModel> = new BehaviorSubject<MessageModel>(null);;
37
+ messageRemoved: BehaviorSubject<string> = new BehaviorSubject<string>(null);
38
+ messageWait: BehaviorSubject<any> = new BehaviorSubject<string>(null);
39
39
 
40
40
  // public variables
41
41
  public attributes: any;
@@ -31,12 +31,12 @@ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
31
31
  export class FirebaseConversationsHandler extends ConversationsHandlerService {
32
32
 
33
33
  // BehaviorSubject
34
- BSConversationDetail: BehaviorSubject<ConversationModel>;
34
+ BSConversationDetail: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
35
+ conversationAdded: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
36
+ conversationChanged: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
37
+ conversationChangedDetailed: BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}> = new BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}>(null);
38
+ conversationRemoved: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
35
39
  // readAllMessages: BehaviorSubject<string>;
36
- conversationAdded: BehaviorSubject<ConversationModel>;
37
- conversationChanged: BehaviorSubject<ConversationModel>;
38
- conversationRemoved: BehaviorSubject<ConversationModel>;
39
- loadedConversationsStorage: BehaviorSubject<ConversationModel[]>;
40
40
 
41
41
  // public params
42
42
  conversations: Array<ConversationModel> = [];
@@ -51,6 +51,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
51
51
  private logger: LoggerService = LoggerInstance.getInstance()
52
52
  private ref: firebase.database.Query;
53
53
  private BASE_URL: string;
54
+ private BASE_URL_DATABASE: string;
54
55
  // private audio: any;
55
56
  // private setTimeoutSound: any;
56
57
  private subscribe: any
@@ -79,6 +80,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
79
80
  //this.databaseProvider.initialize(userId, this.tenant);
80
81
  //this.getConversationsFromStorage();
81
82
  this.BASE_URL = this.appConfig.getConfig().firebaseConfig.chat21ApiUrl;
83
+ this.BASE_URL_DATABASE = this.appConfig.getConfig().firebaseConfig.databaseURL;
82
84
  }
83
85
 
84
86
  /**
@@ -165,6 +167,45 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
165
167
  }, 2000);
166
168
  }
167
169
 
170
+ public getLastConversation(callback: (conversation: ConversationModel, error: string)=>void){
171
+
172
+ this.getFirebaseToken((error, idToken) => {
173
+ this.logger.debug('[FIREBASEConversationsHandlerSERVICE] getConversationsRESTApi idToken', idToken)
174
+ this.logger.debug('[FIREBASEConversationsHandlerSERVICE] getConversationsRESTApi error', error)
175
+ if (idToken) {
176
+ const httpOptions = {
177
+ headers: new HttpHeaders({
178
+ 'Accept': 'application/json',
179
+ 'Content-Type': 'application/json',
180
+ // 'Authorization': 'Bearer ' + idToken,
181
+ })
182
+
183
+ }
184
+ const urlNodeFirebase = conversationsPathForUserId(this.tenant, this.loggedUserId);
185
+ const queryString = '?auth=' + idToken +'&orderBy="timestamp"&limitToLast=1'
186
+ const url = this.BASE_URL_DATABASE + urlNodeFirebase + '.json' + queryString// + queryString;
187
+ this.http.get(url, httpOptions).subscribe((childSnapshot: any) => {
188
+ this.logger.debug('[FIREBASEConversationsHandlerSERVICE] getConversationsRESTApi - RES', childSnapshot);
189
+ if(childSnapshot){
190
+ const childData: ConversationModel = childSnapshot[Object.keys(childSnapshot)[0]];
191
+ childData.uid = Object.keys(childSnapshot)[0]
192
+ const conversation = this.completeConversation(childData);
193
+ callback(conversation, null)
194
+ }else if(!childSnapshot){
195
+ callback(null, null)
196
+ }
197
+ }, (error) => {
198
+ this.logger.error('[FIREBASEConversationsHandlerSERVICE] getConversationsRESTApi ERROR ', error);
199
+ callback(null, 'error')
200
+ }, () => {
201
+ this.logger.debug('[FIREBASEConversationsHandlerSERVICE] getConversationsRESTApi * COMPLETE *');
202
+ });
203
+ } else {
204
+ callback(null, 'error')
205
+ }
206
+ });
207
+ }
208
+
168
209
  /**
169
210
  * restituisce il numero di conversazioni nuove
170
211
  */
@@ -439,7 +480,6 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
439
480
  * 6 - ordino l'array per timestamp
440
481
  * 7 - pubblico conversations:update
441
482
  */
442
- //TODO-GAB: ora emit singola conversation e non dell'intero array di conversations
443
483
  private added(childSnapshot: any) {
444
484
  if (this.conversationGenerate(childSnapshot)) {
445
485
  const index = searchIndexInArrayForUid(this.conversations, childSnapshot.key);
@@ -462,13 +502,14 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
462
502
  * 7 - attivo sound se è un msg nuovo
463
503
  */
464
504
 
465
- //TODO-GAB: ora emit singola conversation e non dell'intero array di conversations
466
505
  private changed(childSnapshot: any) {
506
+ const oldConversation = this.conversations[searchIndexInArrayForUid(this.conversations, childSnapshot.key)]
467
507
  if (this.conversationGenerate(childSnapshot)) {
468
508
  const index = searchIndexInArrayForUid(this.conversations, childSnapshot.key);
469
509
  if (index > -1) {
470
510
  const conversationChanged = this.conversations[index]
471
- this.conversationChanged.next(conversationChanged);
511
+ this.conversationChanged.next(conversationChanged)
512
+ this.conversationChangedDetailed.next({value: conversationChanged, previousValue: oldConversation});
472
513
  }
473
514
  } else {
474
515
  this.logger.error('[FIREBASEConversationsHandlerSERVICE]CHANGED::conversations with conversationId: ', childSnapshot.key, 'is not valid')
@@ -482,7 +523,6 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
482
523
  * 4 - pubblico conversations:update
483
524
  * 5 - elimino conversazione dall'array delle conversazioni chiuse
484
525
  */
485
- //TODO-GAB: ora emit singola conversation e non dell'intero array di conversations
486
526
  private removed(childSnapshot: any) {
487
527
  const index = searchIndexInArrayForUid(this.conversations, childSnapshot.key);
488
528
  if (index > -1) {
@@ -548,7 +588,6 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
548
588
  /** END: UPDATE CONVERSATIONS is_new IF conv is selected or sender is me */
549
589
 
550
590
  // Fixes the bug: if a snippet of code is pasted and sent it is not displayed correctly in the convesations list
551
- // conv.time_last_message = this.getTimeLastMessage(conv.timestamp);
552
591
  conv.conversation_with = conversation_with;
553
592
  conv.conversation_with_fullname = conversation_with_fullname;
554
593
  conv.status = this.setStatusConversation(conv.sender, conv.uid);
@@ -31,11 +31,11 @@ import { LoggerInstance } from '../logger/loggerInstance';
31
31
  export class FirebaseGroupsHandler extends GroupsHandlerService {
32
32
 
33
33
  // BehaviorSubject
34
- BSgroupDetail: BehaviorSubject<GroupModel>;
35
- SgroupDetail: Subject<GroupModel>;
36
- groupAdded: BehaviorSubject<GroupModel>;
37
- groupChanged: BehaviorSubject<GroupModel>;
38
- groupRemoved: BehaviorSubject<GroupModel>;
34
+ BSgroupDetail: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
35
+ SgroupDetail: Subject<GroupModel> = new BehaviorSubject<GroupModel>(null);
36
+ groupAdded: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
37
+ groupChanged: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
38
+ groupRemoved: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
39
39
 
40
40
  // public params
41
41
  conversations: Array<ConversationModel> = [];
@@ -8,6 +8,7 @@ import { ImageRepoService } from '../abstract/image-repo.service';
8
8
  // import * as firebase from 'firebase/app';
9
9
  import firebase from "firebase/app";
10
10
  import 'firebase/storage';
11
+ import { HttpClient } from '@angular/common/http';
11
12
 
12
13
  @Injectable({ providedIn: 'root' })
13
14
 
@@ -17,7 +18,7 @@ export class FirebaseImageRepoService extends ImageRepoService {
17
18
  private urlStorageBucket = environment.firebaseConfig.storageBucket + '/o/profiles%2F';
18
19
  private baseImageURL: string;
19
20
 
20
- constructor() {
21
+ constructor(public http: HttpClient) {
21
22
  super();
22
23
  }
23
24
 
@@ -23,9 +23,8 @@ import { LoggerInstance } from '../logger/loggerInstance';
23
23
  export class FirebasePresenceService extends PresenceService {
24
24
 
25
25
  // BehaviorSubject
26
- // BSIsOnline: BehaviorSubject<any>;
27
- BSIsOnline: BehaviorSubject<any>;
28
- BSLastOnline: BehaviorSubject<any>;
26
+ BSIsOnline: BehaviorSubject<any> = new BehaviorSubject<any>(null);
27
+ BSLastOnline: BehaviorSubject<any> = new BehaviorSubject<any>(null);
29
28
 
30
29
  // public tenant: string;
31
30
 
@@ -32,8 +32,8 @@ export class TypingModel {
32
32
  export class FirebaseTypingService extends TypingService {
33
33
 
34
34
  // BehaviorSubject
35
- BSIsTyping: BehaviorSubject<any>;
36
- BSSetTyping: BehaviorSubject<any>;
35
+ BSIsTyping: BehaviorSubject<any> = new BehaviorSubject<any>(null);
36
+ BSSetTyping: BehaviorSubject<any> = new BehaviorSubject<any>(null);
37
37
 
38
38
  // public params
39
39
  // public tenant: string;
@@ -24,7 +24,7 @@ import { UploadModel } from '../../models/upload';
24
24
  export class FirebaseUploadService extends UploadService {
25
25
 
26
26
  // BehaviorSubject
27
- BSStateUpload: BehaviorSubject<any>;
27
+ BSStateUpload: BehaviorSubject<any> = new BehaviorSubject<any>(null);
28
28
 
29
29
  //private
30
30
  private url: string;