@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.
- package/CHANGELOG.md +39 -0
- package/LICENSE +661 -21
- package/deploy_pre.sh +45 -6
- package/deploy_prod.sh +34 -9
- package/env.sample +1 -1
- package/package.json +1 -1
- package/src/app/app.component.ts +45 -21
- package/src/app/app.module.ts +2 -2
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +62 -36
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +42 -13
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +13 -6
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +38 -3
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +8 -6
- package/src/app/components/image-viewer/image-viewer.component.scss +2 -2
- package/src/app/components/project-item/project-item.component.html +140 -118
- package/src/app/components/project-item/project-item.component.scss +167 -90
- package/src/app/components/project-item/project-item.component.ts +41 -20
- package/src/app/pages/conversation-detail/conversation-detail.module.ts +2 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.html +36 -43
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +199 -110
- package/src/app/pages/conversations-list/conversations-list.page.html +9 -5
- package/src/app/pages/conversations-list/conversations-list.page.scss +12 -1
- package/src/app/pages/conversations-list/conversations-list.page.ts +24 -6
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +16 -11
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +157 -63
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +51 -16
- package/src/app/services/app-config.ts +14 -14
- package/src/app/shared/shared.module.ts +6 -5
- package/src/assets/i18n/de.json +209 -0
- package/src/assets/i18n/en.json +24 -8
- package/src/assets/i18n/es.json +209 -0
- package/src/assets/i18n/fr.json +209 -0
- package/src/assets/i18n/it.json +42 -34
- package/src/assets/i18n/pt.json +209 -0
- package/src/assets/i18n/ru.json +209 -0
- package/src/assets/i18n/tr.json +209 -0
- package/src/assets/js/chat21client.js +16 -3
- package/src/chat-config-mqtt.json +2 -1
- package/src/chat-config-pre-test.json +2 -0
- package/src/chat-config-template.json +1 -0
- package/src/chat-config.json +1 -0
- package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +54 -43
- package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +23 -0
- package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +1 -1
- package/src/chat21-core/utils/constants.ts +2 -0
- package/src/chat21-core/utils/utils.ts +12 -1
- 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.
|
|
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();
|
package/src/chat-config.json
CHANGED
|
@@ -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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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: ',
|
|
194
|
-
this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> senderFullname: ',
|
|
195
|
-
this.logger.debug('[FIREBASEConversationHandlerSERVICE] sendMessage --> 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
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
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.
|
|
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