@chat21/chat21-ionic 3.0.60-rc1 → 3.0.60-rc9

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 (47) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/LICENSE +661 -21
  3. package/deploy_pre.sh +45 -6
  4. package/deploy_prod.sh +34 -9
  5. package/env.sample +1 -1
  6. package/package.json +1 -1
  7. package/src/app/app.component.ts +45 -21
  8. package/src/app/app.module.ts +2 -2
  9. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +62 -36
  10. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +42 -13
  11. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +13 -6
  12. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +38 -3
  13. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +8 -6
  14. package/src/app/components/image-viewer/image-viewer.component.scss +2 -2
  15. package/src/app/components/project-item/project-item.component.html +140 -118
  16. package/src/app/components/project-item/project-item.component.scss +167 -90
  17. package/src/app/components/project-item/project-item.component.ts +41 -20
  18. package/src/app/pages/conversation-detail/conversation-detail.module.ts +2 -1
  19. package/src/app/pages/conversation-detail/conversation-detail.page.html +36 -43
  20. package/src/app/pages/conversation-detail/conversation-detail.page.ts +199 -110
  21. package/src/app/pages/conversations-list/conversations-list.page.html +9 -5
  22. package/src/app/pages/conversations-list/conversations-list.page.scss +12 -1
  23. package/src/app/pages/conversations-list/conversations-list.page.ts +24 -6
  24. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +16 -11
  25. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +157 -63
  26. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +51 -16
  27. package/src/app/services/app-config.ts +14 -14
  28. package/src/app/shared/shared.module.ts +6 -5
  29. package/src/assets/i18n/de.json +209 -0
  30. package/src/assets/i18n/en.json +24 -8
  31. package/src/assets/i18n/es.json +209 -0
  32. package/src/assets/i18n/fr.json +209 -0
  33. package/src/assets/i18n/it.json +42 -34
  34. package/src/assets/i18n/pt.json +209 -0
  35. package/src/assets/i18n/ru.json +209 -0
  36. package/src/assets/i18n/tr.json +209 -0
  37. package/src/assets/js/chat21client.js +16 -3
  38. package/src/chat-config-mqtt.json +2 -1
  39. package/src/chat-config-pre-test.json +2 -0
  40. package/src/chat-config-template.json +1 -0
  41. package/src/chat-config.json +1 -0
  42. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +54 -43
  43. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +23 -0
  44. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +1 -1
  45. package/src/chat21-core/utils/constants.ts +2 -0
  46. package/src/chat21-core/utils/utils.ts +12 -1
  47. package/src/global.scss +4 -0
@@ -0,0 +1,209 @@
1
+ {
2
+ "LABEL_TU": "sen: ",
3
+ "LABEL_MSG_PUSH_START_CHAT": "Henüz görüşme yok",
4
+ "LABEL_MSG_START_CHAT": "Sohbeti başlat",
5
+ "LABEL_ACTIVE_NOW": "mevcut",
6
+ "LABEL_AVAILABLE": "mevcut",
7
+ "LABEL_NOT_AVAILABLE": "müsait değil",
8
+ "LABEL_NO_MSG_HERE": "Hala mesaj yok...",
9
+ "LABEL_TODAY": "bugün",
10
+ "LABEL_TOMORROW": "dün",
11
+ "LABEL_LAST_ACCESS": "son erişim",
12
+ "LABEL_TO": "de",
13
+ "ARRAY_DAYS": [
14
+ "Pazartesi",
15
+ "Salı",
16
+ "Çarşamba",
17
+ "Perşembe",
18
+ "Cuma",
19
+ "Cumartesi",
20
+ "Pazar"
21
+ ],
22
+ "LABEL_SEND": "Göndermek",
23
+ "ID_CONVERSATION": "ID konuşma",
24
+ "LABEL_CREATED_THE": "grup oluşturuldu",
25
+ "LABEL_INFO_ATTRIBUTE": "Öznitellikler",
26
+ "LABEL_INFO_ADVANCED": "Gelişmiş",
27
+ "LABEL_CLIENT": "Müşteri ",
28
+ "LABEL_SOURCEPAGE": "Kaynak ",
29
+ "LABEL_DEPARTMENT_ID": "Departman kimliği ",
30
+ "LABEL_DEPARTMENT_NAME": "Departman ",
31
+ "requester_id": "İstekte Bulunan Kimliği",
32
+ "projectId": "proje kimliği ",
33
+ "LABEL_NAME": "Kullanıcı adı ",
34
+ "LABEL_EMAIL": "E-posta ",
35
+ "LABEL_MEMBERS": "Katılımcılar",
36
+ "LABEL_INFO_MESSAGE": "bilgi mesajı",
37
+ "LABEL_READ_BY": "tarafından okunan",
38
+ "LABEL_STATUS_MESSAGE": "belirtmek, bildirmek",
39
+ "LABEL_SENT_THE": "gönderildi",
40
+ "LABEL_SENT_BY": "itibaren",
41
+ "LABEL_GUEST": "Misafir",
42
+ "LABEL_CREATE_TICKET": "Bilet oluştur",
43
+ "LABEL_SEND_BY_EMAIL": "E-posta ile göndermek",
44
+ "LABEL_VIDEO_CHAT": "Görüntülü arama",
45
+ "LABEL_LEAVE_GROUP": "Gruptan ayrıl",
46
+ "LABEL_CLOSE_GROUP": "Kapat",
47
+ "ALERT_TITLE": "UYARI",
48
+ "CLOSE_ALERT_CONFIRM_LABEL": "Tamam",
49
+ "CLOSE_ALERT_CANCEL_LABEL": "İPTAL ET",
50
+ "LEAVE_ALERT_MSG": "Gruptan ayrılmak mı?",
51
+ "CLOSE_ALERT_MSG": "Sohbeti kapat?",
52
+ "VIDEOCHAT_ALERT_MSG": "Hizmet kullanılamıyor",
53
+ "CLOSING_CONVERSATION_SPINNER_MSG": "Lütfen bekle.<br> Sohbeti kapatıyoruz",
54
+ "CONVERSATION_CLOSED_ALERT_MSG": "Görüşme başarıyla kapatıldı.",
55
+ "CANNOT_CLOSE_CONVERSATION_ALERT_MSG": "Görüşme kapatılamadı",
56
+ "LEAVING_GROUP_SPINNER_MSG": "Lütfen bekle.<br> Gruptan ayrılıyorsunuz",
57
+ "CONVERSATION_LEFT_ALERT_MSG": "Grup başarıyla ayrıldı.",
58
+ "CANNOT_LEAVE_GROUP_ALERT_MSG": "Grup bırakılamadı",
59
+ "GREETING": "Merhaba, {{ value }}",
60
+ "ARCHIVED_CONVERSATIONS_PAGE_NO_CONVERSATIONS_ARCHIVED": "Arşivde konuşma yok",
61
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "sen",
62
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "eklendi ",
63
+ "INFO_SUPPORT_USER_ADDED_VERB": "katıldı",
64
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "sohbet",
65
+ "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
+ "INFO_SUPPORT_CHAT_REOPENED": "Sohbet yeniden açıldı",
67
+ "INFO_SUPPORT_CHAT_CLOSED": "sohbet kapatıldı",
68
+ "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Size yeni bir destek talebi atandı",
69
+ "LABEL_PROFILE": "Profil",
70
+ "LABEL_CLOSE": "Kapalı",
71
+ "LABEL_DISCONNECT": "Bağlantıyı kes",
72
+ "LABEL_NEW_CHAT": "Yeni sohbet",
73
+ "LABEL_FORGOT_PASSWORD": "Şifreni mi unuttun?",
74
+ "LABEL_SIGNIN": "Kayıt olmak",
75
+ "LABEL_SIGNIN_TO": "Giriş yap",
76
+ "LABEL_SIGNIN_ERROR": "Oturum açma hatası",
77
+ "LABEL_PASSWORD": "Parola",
78
+ "LABEL_ERROR_EMAIL": "Geçerli bir e-posta adresi girin.",
79
+ "LABEL_ERROR_PASSWORD": "Şifre en az 6 karakter olmalıdır.",
80
+ "LABEL_LOGIN": "Giriş yapmak",
81
+ "LABEL_LOGOUT": "Çıkış Yap",
82
+ "LABEL_WELCOME_TO": "Hoşgeldiniz",
83
+ "LABEL_SIGNUP": "Üye olmak",
84
+ "LABEL_ALREDY_HAVE_AN_ACCOUNT": "Zaten hesabınız var mı?",
85
+ "LABEL_DONT_HAVE_AN_ACCOUNT_YET": "Henüz bir hesabınız yok mu?",
86
+ "LABEL_FORGOT_YOUR_PASSWORD": "Parolanızı mı unuttunuz?",
87
+ "LABEL_CLICK_HERE": "Buraya Tıkla",
88
+ "LABEL_REGISTRATION": "Tescil",
89
+ "LABEL_PLACEHOLDER_EMAIL": "E-posta adresiniz",
90
+ "LABEL_PLACEHOLDER_PASSWORD": "Şifreniz",
91
+ "LABEL_PLACEHOLDER_NAME": "Adınız",
92
+ "LABEL_PLACEHOLDER_LAST_NAME": "Soy adınız",
93
+ "LABEL_LAST_NAME": "Soyadı",
94
+ "LABEL_FIELD_NOT_EMPTY": "Alan boş olamaz.",
95
+ "LABEL_NEW_PASSWORD": "Yeni bir şifre oluştur",
96
+ "LABEL_CLOSED": "Kapalı",
97
+ "LABEL_INFO": "Bilgiler",
98
+ "ALERT_NOTIFICATION": "Uyarı: bildirim gönderme devre dışıdır, tarayıcı ayarlarını bildirim göndermeye izin verecek şekilde değiştirir.",
99
+ "LABEL_EXTERNAL_ID": "Harici Kimlik",
100
+ "LABEL_IAT": "Bende",
101
+ "LABEL_REQUEST_DETAIL": "Detay iste",
102
+ "LABEL_ENTER_MSG": "Bir mesaj girin veya hazır yanıtlar için / tuşuna basın",
103
+ "LABEL_ENTER_MSG_SHORT": "Bir mesaj girin",
104
+ "LABEL_ENTER_MSG_SHORTER": "Girmek...",
105
+ "LABEL_MSG_LOGIN_TILEDESK": "Sohbete başlamak için giriş yap",
106
+ "LABEL_ARCHIVED": "Arşivlendi",
107
+ "LABEL_INFO_CONVERSATION": "Bilgi görüşmesi",
108
+ "LABEL_INFO_USER": "Kullanıcısı bilgi",
109
+ "LABEL_IS_WRITING": "yazıyor",
110
+ "LABEL_VERSION": "versiyon",
111
+ "LABEL_CONTACTS": "kişiler",
112
+ "LABEL_PLACEHOLDER": "mesajını yaz..",
113
+ "LABEL_START_NW_CONV": "Yeni görüşme",
114
+ "LABEL_FIRST_MSG": "Sorununuzu kısaca açıklayın, bir temsilci sizinle iletişime geçecektir.",
115
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 Şu anda tüm operatörler çevrimdışı. Yine de sorununuzu tarif edebilirsiniz. Size en kısa sürede cevap verecek olan destek ekibine atanacaktır.",
116
+ "LABEL_SELECT_TOPIC": "Bir konu seç",
117
+ "LABEL_COMPLETE_FORM": "Bir sonraki müsait temsilci ile görüşme başlatmak için formu doldurun.",
118
+ "LABEL_FIELD_NAME": "İsim",
119
+ "LABEL_ERROR_FIELD_NAME": "Zorunlu alan (en az 5 karakter).",
120
+ "LABEL_FIELD_EMAIL": "E-posta",
121
+ "LABEL_ERROR_FIELD_EMAIL": "Geçerli bir e-posta adresi girin.",
122
+ "LABEL_WRITING": "yazıyor...",
123
+ "AGENT_NOT_AVAILABLE": " Çevrimdışı",
124
+ "AGENT_AVAILABLE": " İnternet üzerinden",
125
+ "GUEST_LABEL": "Misafir",
126
+ "ALL_AGENTS_OFFLINE_LABEL": "Şu anda tüm operatörler çevrimdışı",
127
+ "LABEL_LOADING": "Yükleniyor...",
128
+ "CALLOUT_TITLE_PLACEHOLDER": "Yardıma mı ihtiyacınız var?",
129
+ "CALLOUT_MSG_PLACEHOLDER": "Buraya tıklayın ve bizimle sohbet etmeye başlayın!",
130
+ "CUSTOMER_SATISFACTION": "Müşteri memnuniyeti",
131
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "müşteri hizmetlerimiz hakkındaki fikriniz",
132
+ "DOWNLOAD_TRANSCRIPT": "Transkript indir",
133
+ "BACK": "Geri",
134
+ "YOUR_RATING": "sizin dereceniz",
135
+ "WRITE_YOUR_OPINION": "Fikrinizi yazın ... (isteğe bağlı)",
136
+ "SUBMIT": "Göndermek",
137
+ "THANK_YOU_FOR_YOUR_EVALUATION": "Değerlendirmeniz için teşekkürler",
138
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "puanınız alındı",
139
+ "ALERT_LEAVE_CHAT": "Sohbetten ayrılmak istiyor musunuz?",
140
+ "YES": "Evet",
141
+ "NO": "Numara",
142
+ "BUTTON_CLOSE_TO_ICON": "Sohbeti simge durumuna küçült",
143
+ "BUTTON_EDIT_PROFILE": "Profili Güncelle",
144
+ "RATE_CHAT": "Sohbeti değerlendir",
145
+ "WELLCOME_TITLE": "Merhaba, Tiledesk'e hoş geldiniz 👋",
146
+ "WELLCOME_MSG": "Nasıl yardımcı olabiliriz?",
147
+ "WELLCOME": "Hoş geldin",
148
+ "OPTIONS": "seçenekler",
149
+ "SOUND_OFF": "sesi kapamak",
150
+ "SOUND_ON": "ses açık",
151
+ "LOGOUT": "çıkış Yap",
152
+ "CLOSE": "kapat",
153
+ "PREV_CONVERSATIONS": "Konuşmalarınız",
154
+ "YOU": "Sen",
155
+ "SHOW_ALL_CONV": "hepsini göster",
156
+ "START_A_CONVERSATION": "Bir konuşma başlat",
157
+ "NO_CONVERSATION": "Konuşma yok",
158
+ "SEE_PREVIOUS": "öncekine bakın",
159
+ "WAITING_TIME_FOUND": "Ekip genellikle $reply_time",
160
+ "WAITING_TIME_NOT_FOUND": "Ekip en kısa sürede cevap verecektir",
161
+ "CLOSED": "KAPALI",
162
+ "PleaseSelectChatToStartMessaging": "Mesajlaşmaya başlamak için lütfen bir sohbet seçin",
163
+ "FromThisAreNew": "------------------",
164
+ "Preview": "Ön izleme",
165
+ "AddACaption": "Bir başlık ekle",
166
+ "AnErrorOccurredWhileUnsubscribingFromNotifications": "Hata! Bildirim aboneliğinden çıkılırken bir hata oluştu",
167
+ "SIGNIN_ERROR_USER_NOT_FOUND": "Kimlik doğrulama başarısız oldu. Kullanıcı bulunamadı.",
168
+ "SIGNIN_ERROR_USER_WRONG_PSW": "Kimlik doğrulama başarısız oldu. Yanlış şifre.",
169
+ "Email is required": "Email gereklidir.",
170
+ "Email must be a valid email": "E-posta geçerli bir e-posta olmalıdır.",
171
+ "Password is required": "Şifre gereklidir.",
172
+ "Password must be at least 6 characters long": "Şifre en az 6 karakter uzunluğunda olmalı.",
173
+ "UPLOAD_FILE_ERROR": "Dosya yüklenirken beklenmeyen bir hata oluştu",
174
+ "DROP_IMAGE_HERE_TO_SEND_IT": "Göndermek için resmi buraya bırakın",
175
+ "ONLY_IMAGE_FILES_ARE_ALLOWED_TO_PASTE": "Yalnızca resim dosyalarının ve metnin yapıştırılmasına izin verilir",
176
+ "FAILED_TO_UPLOAD_THE_FORMAT_IS_NOT_SUPPORTED": "Yüklenemedi: biçim desteklenmiyor",
177
+ "SENT_AN_IMAGE": "bir resim gönderdi",
178
+ "SENT_AN_ATTACHMENT": "bir ek gönderdi",
179
+ "NO_INFORMATION_AVAILABLE": "Bilgi bulunmamaktadır",
180
+ "CONTACT_ID": "Kişi Kimliği",
181
+ "USER_ID": "Kullanıcı kimliği",
182
+ "CLOSE_TOAST": "Kapat",
183
+ "WAITING_FOR_NETWORK": "Ağ bekleniyor",
184
+ "Available": "Mevcut",
185
+ "Unavailable": "Kullanım dışı",
186
+ "Busy": "Meşgul",
187
+ "YouAreAboutToJoinThisChat": "Bu sohbete katılmak üzeresiniz",
188
+ "Cancel": "İptal etmek",
189
+ "AreYouSure": "Emin misin?",
190
+ "UnassignedConversations": "Atanmamış Görüşmeler",
191
+ "NewConversations": "Yeni konuşmalar",
192
+ "UPLOAD": "Yüklemek",
193
+ "CANNED_RESPONSES": "Hazır yanıtlar",
194
+ "NO_CANNED_RESPONSES": "Hazır yanıt yok",
195
+ "THERE_ARE_NO_CANNED_RESPONSES_AVAILABLE": "Hazır yanıt yok",
196
+ "TO_CREATE_THEM_GO_TO_THE_PROJECT": "Bunları oluşturmak için projeye gidin (sağ kenar çubuğunda bulunan projenin adını tıklayabilirsiniz) ve Gösterge Tablosu kenar çubuğundaki 'Ayarlar' menü öğesinin altında 'Hazır yanıtlar'ı ve ardından 'Yanıt oluştur' düğmesini tıklayın",
197
+ "YES_CANNED_RESPONSES": "⚡️ düğmesine tıklayarak veya metin alanına / yazarak hazır yanıtları görüntüleyin, / işaretinden sonra yazarak da listeyi filtreleyebilirsiniz",
198
+ "VIEW_ALL_CONVERSATIONS": "Tüm konuşmaları görüntüle",
199
+ "CONVERSATIONS_IN_QUEUE": "sıradaki konuşmalar, birini seç",
200
+ "CONVERSATION_IN_QUEUE": "sıradaki konuşma, onu seç",
201
+ "NO_CONVERSATION_IN_QUEUE": "kuyrukta konuşma yok",
202
+ "PIN_A_PROJECT": "Proje Sabitle",
203
+ "PINNED_PROJECT": "Sabitlenmiş proje",
204
+ "CHANGE_PINNED_PROJECT": "Sabitlenmiş projeyi değiştir",
205
+ "CHANGE_TO_AVAILABLE_UNAVAILABLE": "mevcut/kullanılamaz olarak değiştirin",
206
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "durumunuzu müsait olarak değiştirin",
207
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "durumunuzu kullanılamaz olarak değiştirin",
208
+ "ALL_CONVS_SERVED": "Tüm konuşmalar servis edildi mi? İyi iş!"
209
+ }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  Chat21Client
3
3
 
4
- v0.1.9
4
+ v0.1.10
5
5
 
6
6
  @Author Andrea Sponziello
7
7
  (c) Tiledesk 2020
@@ -124,7 +124,7 @@ class Chat21Client {
124
124
  }
125
125
 
126
126
  sendMessageRaw(outgoing_message, recipient_id, callback) {
127
- // callback - function (err)
127
+ // callback - function (err)
128
128
  // console.log("recipient_id:", recipient_id)
129
129
  let dest_topic = `apps/${this.appid}/outgoing/users/${this.user_id}/messages/${recipient_id}/outgoing`
130
130
  // console.log("dest_topic:", dest_topic)
@@ -784,8 +784,21 @@ class Chat21Client {
784
784
  }
785
785
 
786
786
  conversationDetail(conversWith, callback) {
787
+ this.crossConversationDetail(conversWith, false, callback);
788
+ }
789
+
790
+ archivedConversationDetail(conversWith, callback) {
791
+ this.crossConversationDetail(conversWith, true, callback);
792
+ }
793
+
794
+ crossConversationDetail(conversWith, archived, callback) {
795
+ let path = "conversations";
796
+ if (archived) {
797
+ path = "archived_conversations"
798
+ }
787
799
  // ex.: http://localhost:8004/tilechat/04-ANDREASPONZIELLO/conversations/CONVERS_WITH
788
- const URL = `${this.APIendpoint}/${this.appid}/${this.user_id}/conversations/${conversWith}`
800
+ //const URL = `${this.APIendpoint}/${this.appid}/${this.user_id}/conversations/${conversWith}`
801
+ const URL = `${this.APIendpoint}/${this.appid}/${this.user_id}/${path}/${conversWith}`
789
802
  console.log("getting conversation detail:", URL)
790
803
  console.log("conversWith:", conversWith)
791
804
  var xmlhttp = new XMLHttpRequest();
@@ -23,4 +23,5 @@
23
23
  "apiUrl": "http://99.80.197.164:3000/",
24
24
  "baseImageUrl": "http://99.80.197.164:3000/",
25
25
  "dashboardUrl": "http://tiledesk-dashboard-pre.s3-eu-west-1.amazonaws.com/native-mqtt/dashboard/2.1.70-beta.1.6/index.html"
26
- }
26
+ }
27
+
@@ -1,4 +1,5 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK": "CAR:T",
2
3
  "chatEngine": "firebase",
3
4
  "uploadEngine": "firebase",
4
5
  "pushEngine": "firebase",
@@ -30,3 +31,4 @@
30
31
  "wsUrl": "wss://tiledesk-server-pre.herokuapp.com/"
31
32
  }
32
33
 
34
+
@@ -1,4 +1,5 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK": "${FEATURES_TOKEN}",
2
3
  "chatEngine": "${CHAT21_ENGINE}",
3
4
  "uploadEngine": "${UPLOAD_ENGINE}",
4
5
  "pushEngine":"${PUSH_ENGINE}",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK": "",
2
3
  "chatEngine": "mqtt",
3
4
  "updloaEngine": "native",
4
5
  "pushEngine":"none",
@@ -18,8 +18,8 @@ import { ConversationHandlerService } from '../abstract/conversation-handler.ser
18
18
  import { LoggerService } from '../abstract/logger.service';
19
19
  import { LoggerInstance } from '../logger/loggerInstance';
20
20
  // utils
21
- import { MSG_STATUS_RECEIVED, CHAT_REOPENED, CHAT_CLOSED, MEMBER_JOINED_GROUP, TYPE_DIRECT, MESSAGE_TYPE_INFO } from '../../utils/constants';
22
- import { compareValues,searchIndexInArrayForUid,conversationMessagesRef } from '../../utils/utils';
21
+ import { MSG_STATUS_RECEIVED, CHAT_REOPENED, CHAT_CLOSED, MEMBER_JOINED_GROUP, TYPE_DIRECT, MESSAGE_TYPE_INFO , TOUCHING_OPERATOR} from '../../utils/constants';
22
+ import { compareValues, searchIndexInArrayForUid, conversationMessagesRef } from '../../utils/utils';
23
23
 
24
24
 
25
25
  import { messageType } from 'src/chat21-core/utils/utils-message';
@@ -54,7 +54,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
54
54
  private listSubsriptions: any[];
55
55
  private CLIENT_BROWSER: string;
56
56
  private lastDate = '';
57
- private logger:LoggerService = LoggerInstance.getInstance()
57
+ private logger: LoggerService = LoggerInstance.getInstance()
58
58
  private ref: firebase.database.Query;
59
59
 
60
60
  constructor(@Inject('skipMessage') private skipMessage: boolean) {
@@ -64,8 +64,8 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
64
64
  /**
65
65
  * inizializzo conversation handler
66
66
  */
67
- initialize(recipientId: string,recipientFullName: string,loggedUser: UserModel,tenant: string,translationMap: Map<string, string>) {
68
- this.logger.log('[FIREBASEConversationHandlerSERVICE] initWithRecipient',recipientId, recipientFullName, loggedUser, tenant, translationMap)
67
+ initialize(recipientId: string, recipientFullName: string, loggedUser: UserModel, tenant: string, translationMap: Map<string, string>) {
68
+ this.logger.log('[FIREBASEConversationHandlerSERVICE] initWithRecipient', recipientId, recipientFullName, loggedUser, tenant, translationMap)
69
69
  this.recipientId = recipientId;
70
70
  this.recipientFullname = recipientFullName;
71
71
  this.loggedUser = loggedUser;
@@ -74,7 +74,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
74
74
  }
75
75
  this.tenant = tenant;
76
76
  this.translationMap = translationMap;
77
-
77
+
78
78
  this.listSubsriptions = [];
79
79
  this.CLIENT_BROWSER = navigator.userAgent;
80
80
  this.conversationWith = recipientId;
@@ -159,20 +159,20 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
159
159
  false
160
160
  );
161
161
  const messageRef = firebaseMessagesCustomUid.push({
162
- language: lang,
163
- recipient: conversationWith,
164
- recipient_fullname: recipientFullname,
165
- sender: sender,
166
- sender_fullname: senderFullname,
167
- status: 0,
168
- metadata: metadataMsg,
169
- text: msg,
170
- timestamp: firebase.database.ServerValue.TIMESTAMP,
171
- type: typeMsg,
172
- attributes: attributes,
173
- channel_type: channelType
174
- // isSender: true
175
- });
162
+ language: lang,
163
+ recipient: conversationWith,
164
+ recipient_fullname: recipientFullname,
165
+ sender: sender,
166
+ sender_fullname: senderFullname,
167
+ status: 0,
168
+ metadata: metadataMsg,
169
+ text: msg,
170
+ timestamp: firebase.database.ServerValue.TIMESTAMP,
171
+ type: typeMsg,
172
+ attributes: attributes,
173
+ channel_type: channelType
174
+ // isSender: true
175
+ });
176
176
 
177
177
  // const message = new MessageModel(
178
178
  // key,
@@ -190,9 +190,9 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
190
190
  // channelType, // channel_type
191
191
  // true // is_sender
192
192
  // );
193
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> messages: ', this.messages);
194
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> senderFullname: ', senderFullname);
195
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> sender: ', sender);
193
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> messages: ', this.messages);
194
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> senderFullname: ', senderFullname);
195
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> sender: ', sender);
196
196
  this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> SEND MESSAGE: ', msg, channelType);
197
197
  return message
198
198
  }
@@ -213,7 +213,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
213
213
  // const attributes: any = {
214
214
  // client: this.CLIENT_BROWSER,
215
215
  // sourcePage: location.href,
216
-
216
+
217
217
  // };
218
218
 
219
219
  // if(this.loggedUser && this.loggedUser.email ){
@@ -222,7 +222,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
222
222
  // if(this.loggedUser && this.loggedUser.fullname) {
223
223
  // attributes.userFullname = this.loggedUser.fullname
224
224
  // }
225
-
225
+
226
226
 
227
227
  // // let attributes: any = JSON.parse(sessionStorage.getItem('attributes'));
228
228
  // // if (!attributes || attributes === 'undefined') {
@@ -242,7 +242,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
242
242
  private added(childSnapshot: any) {
243
243
  const msg = this.messageGenerate(childSnapshot);
244
244
  // msg.attributes && msg.attributes['subtype'] === 'info'
245
- if(this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg)){
245
+ if (this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg)) {
246
246
  return;
247
247
  }
248
248
  this.addRepalceMessageInArray(childSnapshot.key, msg);
@@ -254,12 +254,12 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
254
254
  const msg = this.messageGenerate(childSnapshot);
255
255
  // imposto il giorno del messaggio per visualizzare o nascondere l'header data
256
256
  // msg.attributes && msg.attributes['subtype'] === 'info'
257
- if(this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg) ){
257
+ if (this.skipMessage && messageType(MESSAGE_TYPE_INFO, msg)) {
258
258
  return;
259
259
  }
260
260
  this.addRepalceMessageInArray(childSnapshot.key, msg);
261
261
  this.messageChanged.next(msg);
262
-
262
+
263
263
  }
264
264
 
265
265
  /** */
@@ -274,7 +274,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
274
274
 
275
275
  /** */
276
276
  private messageGenerate(childSnapshot: any) {
277
- const msg: MessageModel = childSnapshot.val();
277
+ const msg: MessageModel = childSnapshot.val();
278
278
  msg.uid = childSnapshot.key;
279
279
  // controllo fatto per i gruppi da rifattorizzare
280
280
  if (!msg.sender_fullname || msg.sender_fullname === 'undefined') {
@@ -285,7 +285,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
285
285
  // msg.text = htmlEntities(msg.text)
286
286
  // msg.text = replaceEndOfLine(msg.text)
287
287
  // }
288
-
288
+
289
289
  // verifico che il sender è il logged user
290
290
  msg.isSender = this.isSender(msg.sender, this.loggedUser.uid);
291
291
  // traduco messaggi se sono del server
@@ -324,6 +324,8 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
324
324
  const INFO_SUPPORT_USER_ADDED_VERB = this.translationMap.get('INFO_SUPPORT_USER_ADDED_VERB');
325
325
  const INFO_SUPPORT_CHAT_REOPENED = this.translationMap.get('INFO_SUPPORT_CHAT_REOPENED');
326
326
  const INFO_SUPPORT_CHAT_CLOSED = this.translationMap.get('INFO_SUPPORT_CHAT_CLOSED');
327
+ const INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU = this.translationMap.get('INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU');
328
+
327
329
  if (message.attributes.messagelabel
328
330
  && message.attributes.messagelabel.parameters
329
331
  && message.attributes.messagelabel.key === MEMBER_JOINED_GROUP
@@ -355,6 +357,15 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
355
357
  } else if ((message.attributes.messagelabel && message.attributes.messagelabel.key === CHAT_CLOSED)) {
356
358
  message.text = INFO_SUPPORT_CHAT_CLOSED;
357
359
  }
360
+ // ['last_message_text']
361
+ else if ((message.attributes && message.attributes.messagelabel && message.attributes.messagelabel.key === TOUCHING_OPERATOR) && message.sender === "system") {
362
+ // console.log('FIREBASEConversationHandlerSERVICE message text', message.text)
363
+ const textAfterColon = message.text.split(":")[1]
364
+ // console.log('FIREBASEConversationHandlerSERVICE message text - textAfterColon', textAfterColon)
365
+ if (textAfterColon !== undefined) {
366
+ message.text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ': ' + textAfterColon;
367
+ }
368
+ }
358
369
  }
359
370
 
360
371
 
@@ -368,9 +379,9 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
368
379
  private setStatusMessage(msg: MessageModel, conversationWith: string) {
369
380
  if (msg.status < MSG_STATUS_RECEIVED) {
370
381
  if (msg.sender !== this.loggedUser.uid && msg.status < MSG_STATUS_RECEIVED) {
371
- const urlNodeMessagesUpdate = this.urlNodeFirebase + '/' + msg.uid;
372
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] update message status', urlNodeMessagesUpdate);
373
- firebase.database().ref(urlNodeMessagesUpdate).update({ status: MSG_STATUS_RECEIVED });
382
+ const urlNodeMessagesUpdate = this.urlNodeFirebase + '/' + msg.uid;
383
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] update message status', urlNodeMessagesUpdate);
384
+ firebase.database().ref(urlNodeMessagesUpdate).update({ status: MSG_STATUS_RECEIVED });
374
385
  }
375
386
  }
376
387
  }
@@ -403,14 +414,14 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
403
414
  // }
404
415
 
405
416
 
406
- unsubscribe(key: string) {
407
- this.listSubsriptions.forEach(sub => {
408
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
409
- if (sub.uid === key) {
410
- this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
411
- sub.unsubscribe(key, null);
412
- return;
413
- }
414
- });
415
- }
417
+ unsubscribe(key: string) {
418
+ this.listSubsriptions.forEach(sub => {
419
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
420
+ if (sub.uid === key) {
421
+ this.logger.debug('[FIREBASEConversationHandlerSERVICE] unsubscribe: ', sub.uid, key);
422
+ sub.unsubscribe(key, null);
423
+ return;
424
+ }
425
+ });
426
+ }
416
427
  }
@@ -22,6 +22,7 @@ import { AppConfigProvider } from 'src/app/services/app-config';
22
22
  // utils
23
23
  import { avatarPlaceholder, getColorBck } from '../../utils/utils-user';
24
24
  import { compareValues, getFromNow, conversationsPathForUserId, searchIndexInArrayForUid, isGroup } from '../../utils/utils';
25
+ import { TOUCHING_OPERATOR } from '../../utils/constants';
25
26
  import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
26
27
 
27
28
 
@@ -476,6 +477,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
476
477
  conversation_with = conv.recipient;
477
478
  conversation_with_fullname = conv.recipient_fullname;
478
479
  conv.sender_fullname = this.translationMap.get('YOU')
480
+
479
481
  // conv.last_message_text = YOU + conv.last_message_text;
480
482
  // } else if (conv.channel_type === TYPE_GROUP) {
481
483
  } else if (isGroup(conv)) {
@@ -484,6 +486,12 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
484
486
  conversation_with = conv.recipient;
485
487
  conversation_with_fullname = conv.recipient_fullname;
486
488
  }
489
+ if (conv.attributes && conv.attributes.subtype) {
490
+ if (conv.attributes.subtype === 'info' || conv.attributes.subtype === 'info/support') {
491
+ this.translateInfoSupportMessages(conv);
492
+ }
493
+ }
494
+
487
495
  conv.conversation_with = conversation_with;
488
496
  conv.conversation_with_fullname = conversation_with_fullname;
489
497
  conv.status = this.setStatusConversation(conv.sender, conv.uid);
@@ -496,6 +504,21 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
496
504
  }
497
505
 
498
506
 
507
+ translateInfoSupportMessages(conv) {
508
+ const INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU = this.translationMap.get('INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU');
509
+ // console.log('[FIREBASEConversationsHandlerSERVICE] INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU', INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU)
510
+ if ((conv.attributes && conv.attributes.messagelabel && conv.attributes.messagelabel.key === TOUCHING_OPERATOR) && conv.sender === "system") {
511
+ // console.log('FIREBASEConversationsHandlerSERVICE last_message_text', conv.last_message_text)
512
+ const textAfterColon = conv.last_message_text.split(":")[1]
513
+ // console.log('FIREBASEConversationsHandlerSERVICE last_message_text - textAfterColon', textAfterColon)
514
+ // message.text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ' ' + textAfterColon;
515
+ if (textAfterColon !== undefined) {
516
+ conv.last_message_text = INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU + ': ' + textAfterColon;
517
+ }
518
+ }
519
+ }
520
+
521
+
499
522
 
500
523
  /** */
501
524
  private setStatusConversation(sender: string, uid: string): string {
@@ -82,7 +82,7 @@ export class MQTTArchivedConversationsHandler extends ArchivedConversationsHandl
82
82
  callback(conversation);
83
83
  } else {
84
84
  console.log('Not found locally, remote.getConversationDetail *****: ', conversation);
85
- this.chat21Service.chatClient.conversationDetail(conversationWith, (conversation) => {
85
+ this.chat21Service.chatClient.archivedConversationDetail(conversationWith, (err, conversation) => {
86
86
  if (conversation) {
87
87
  if (callback) {
88
88
  callback(this.completeConversation(conversation));
@@ -60,6 +60,8 @@ export const MESSAGE_TYPE_DATE = 'DATE';
60
60
  export const CHAT_REOPENED = 'CHAT_REOPENED';
61
61
  export const CHAT_CLOSED = 'CHAT_CLOSED';
62
62
  export const MEMBER_JOINED_GROUP = 'MEMBER_JOINED_GROUP';
63
+ export const TOUCHING_OPERATOR = "TOUCHING_OPERATOR"
64
+
63
65
 
64
66
  // URLS
65
67
  // export const URL_SOUND = 'assets/sounds/pling.mp3';
@@ -13,7 +13,7 @@ import { ConversationModel } from '../models/conversation';
13
13
  import { MAX_WIDTH_IMAGES, TYPE_DIRECT, TYPE_SUPPORT_GROUP } from './constants';
14
14
 
15
15
  import { avatarPlaceholder, getColorBck, getImageUrlThumbFromFirebasestorage } from './utils-user';
16
-
16
+ import { TooltipOptions } from 'ng2-tooltip-directive';
17
17
 
18
18
  /**
19
19
  * Shortest description for phone and tablet
@@ -31,6 +31,17 @@ export function windowsMatchMedia() {
31
31
  }
32
32
  }
33
33
 
34
+
35
+ export const DefaultTooltipOptions: TooltipOptions = {
36
+ 'show-delay': 500,
37
+ 'tooltip-class': 'chat-tooltip',
38
+ 'theme': 'light',
39
+ 'shadow': false,
40
+ 'hide-delay-mobile': 0,
41
+ 'hideDelayAfterClick': 3000,
42
+ 'hide-delay': 200
43
+ }
44
+
34
45
  /**
35
46
  * chiamata da ChatConversationsHandler
36
47
  * restituisce url '/conversations'
package/src/global.scss CHANGED
@@ -531,6 +531,10 @@ select:-webkit-autofill:focus {
531
531
  // border: 0px solid #000000;
532
532
  }
533
533
 
534
+ #canned > ion-list > ion-item > div > div.nocannedTitle {
535
+ color: #f44336
536
+ }
537
+
534
538
  .highlight-search-string {
535
539
  color: #1877f2 !important;
536
540
  }