@chat21/chat21-ionic 3.0.67 → 3.0.68

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 (52) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/deploy_amazon_prod.sh +4 -0
  3. package/package.json +1 -1
  4. package/src/app/app.component.ts +35 -17
  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/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +1 -3
  9. package/src/app/components/conversation-info/info-content/info-content.component.ts +22 -25
  10. package/src/app/components/project-item/project-item.component.ts +28 -50
  11. package/src/app/pages/conversation-detail/conversation-detail.page.ts +47 -78
  12. package/src/app/pages/conversations-list/conversations-list.page.ts +23 -30
  13. package/src/app/pages/create-canned-response/create-canned-response.page.ts +22 -29
  14. package/src/app/services/websocket/websocket.service.ts +1 -1
  15. package/src/assets/i18n/ar.json +1 -1
  16. package/src/assets/i18n/az.json +266 -0
  17. package/src/assets/i18n/de.json +1 -1
  18. package/src/assets/i18n/en.json +1 -1
  19. package/src/assets/i18n/es.json +1 -1
  20. package/src/assets/i18n/fr.json +1 -1
  21. package/src/assets/i18n/it.json +1 -1
  22. package/src/assets/i18n/kk.json +266 -0
  23. package/src/assets/i18n/pt.json +1 -1
  24. package/src/assets/i18n/ru.json +1 -1
  25. package/src/assets/i18n/sr.json +1 -1
  26. package/src/assets/i18n/sv.json +266 -0
  27. package/src/assets/i18n/tr.json +1 -1
  28. package/src/assets/i18n/uk.json +1 -1
  29. package/src/assets/i18n/uz.json +267 -0
  30. package/src/assets/images/language_flag/az.png +0 -0
  31. package/src/assets/images/language_flag/kk.png +0 -0
  32. package/src/assets/images/language_flag/{sv-SE.png → sv.png} +0 -0
  33. package/src/assets/images/language_flag/uz.png +0 -0
  34. package/src/chat-config-mqtt-localhost.json +10 -3
  35. package/src/chat-config-pre.json +2 -1
  36. package/src/chat21-core/providers/abstract/conversations-handler.service.ts +2 -0
  37. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +0 -2
  38. package/src/chat21-core/providers/firebase/firebase-auth-service.ts +0 -5
  39. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +45 -5
  40. package/src/chat21-core/providers/firebase/firebase-image-repo.ts +2 -1
  41. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +71 -268
  42. package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +23 -26
  43. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +3 -24
  44. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +14 -47
  45. package/src/chat21-core/providers/mqtt/mqtt-groups-handler.ts +6 -10
  46. package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +88 -93
  47. package/src/chat21-core/providers/native/native-image-repo.ts +9 -2
  48. package/src/chat21-core/providers/native/native-upload-service.ts +1 -2
  49. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +0 -1
  50. package/src/chat21-core/utils/constants.ts +1 -1
  51. package/src/chat21-core/utils/utils-message.ts +1 -1
  52. package/deploy_pre.sh +0 -44
@@ -0,0 +1,267 @@
1
+
2
+ {
3
+ "LABEL_TU": "siz: ",
4
+ "LABEL_MSG_PUSH_START_CHAT": "Hali suhbat yo'q",
5
+ "LABEL_MSG_START_CHAT": "Suhbatni boshlang",
6
+ "LABEL_ACTIVE_NOW": "mavjud",
7
+ "LABEL_AVAILABLE": "mavjud",
8
+ "LABEL_NOT_AVAILABLE": "mavjud emas",
9
+ "LABEL_NO_MSG_HERE": "Bu yerda hali xabar yo'q...",
10
+ "LABEL_TODAY": "Bugun",
11
+ "LABEL_TOMORROW": "kecha",
12
+ "LABEL_LAST_ACCESS": "oxirgi kirish",
13
+ "LABEL_TO": "da",
14
+ "ARRAY_DAYS": [
15
+ "dushanba",
16
+ "seshanba",
17
+ "chorshanba",
18
+ "Payshanba",
19
+ "Juma",
20
+ "shanba",
21
+ "yakshanba"
22
+ ],
23
+ "LABEL_SEND": "Yuborish",
24
+ "ID_CONVERSATION": "Id suhbati",
25
+ "LABEL_CREATED_THE": "kuni yaratilgan guruh",
26
+ "LABEL_INFO_ATTRIBUTE": "Atributlar",
27
+ "LABEL_INFO_ADVANCED": "Murakkab",
28
+ "LABEL_CLIENT": "Mijoz ",
29
+ "LABEL_SOURCEPAGE": "Manba ",
30
+ "LABEL_DEPARTMENT_ID": "Bo'lim identifikatori ",
31
+ "LABEL_DEPARTMENT_NAME": "Bo'lim ",
32
+ "requester_id": "So‘rovchi identifikatori",
33
+ "projectId": "Loyiha identifikatori ",
34
+ "LABEL_NAME": "Foydalanuvchi nomi ",
35
+ "LABEL_EMAIL": "Elektron pochta ",
36
+ "LABEL_MEMBERS": "Ishtirokchilar",
37
+ "LABEL_INFO_MESSAGE": "Ma'lumot xabari",
38
+ "LABEL_READ_BY": "O'qigan",
39
+ "LABEL_STATUS_MESSAGE": "davlat",
40
+ "LABEL_SENT_THE": "yuborilgan",
41
+ "LABEL_SENT_BY": "dan",
42
+ "LABEL_GUEST": "Mehmon",
43
+ "LABEL_CREATE_TICKET": "Chipta yarating",
44
+ "LABEL_SEND_BY_EMAIL": "Elektron pochta orqali yuboring",
45
+ "LABEL_VIDEO_CHAT": "Video qo'ng'iroq",
46
+ "LABEL_LEAVE_GROUP": "Guruhni tark eting",
47
+ "LABEL_CLOSE_GROUP": "Yopish",
48
+ "ALERT_TITLE": "Diqqat!",
49
+ "CLOSE_ALERT_CONFIRM_LABEL": "OK",
50
+ "CLOSE_ALERT_CANCEL_LABEL": "BEKOR",
51
+ "LEAVE_ALERT_MSG": "Guruhni tark etasizmi?",
52
+ "CLOSE_ALERT_MSG": "Suhbat yopilsinmi?",
53
+ "VIDEOCHAT_ALERT_MSG": "Xizmat ish faoliyatida emas",
54
+ "CLOSING_CONVERSATION_SPINNER_MSG": "Iltimos kuting.<br> Suhbatni yakunlaymiz",
55
+ "CONVERSATION_CLOSED_ALERT_MSG": "Suhbat muvaffaqiyatli yakunlandi.",
56
+ "CANNOT_CLOSE_CONVERSATION_ALERT_MSG": "Suhbatni yopish imkonsiz",
57
+ "LEAVING_GROUP_SPINNER_MSG": "Iltimos kuting.<br> Siz guruhni tark etyapsiz",
58
+ "CONVERSATION_LEFT_ALERT_MSG": "Guruh muvaffaqiyatli tark etildi.",
59
+ "CANNOT_LEAVE_GROUP_ALERT_MSG": "Guruhni tark etib bo'lmaydi",
60
+ "GREETING": "Salom, {{ value }}",
61
+ "ARCHIVED_CONVERSATIONS_PAGE_NO_CONVERSATIONS_ARCHIVED": "Arxivda hech qanday suhbat yo'q",
62
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "siz",
63
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "ga qo'shilgan ",
64
+ "INFO_SUPPORT_USER_ADDED_VERB": "qo'shildi",
65
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "suhbat",
66
+ "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
67
+ "INFO_SUPPORT_CHAT_REOPENED": "Chat qayta ochildi",
68
+ "INFO_SUPPORT_CHAT_CLOSED": "Chat yopildi",
69
+ "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Sizga yangi qoʻllab-quvvatlash soʻrovi tayinlandi",
70
+ "LABEL_PROFILE": "Profil",
71
+ "LABEL_CLOSE": "Yopiq",
72
+ "LABEL_DISCONNECT": "Ulanishni uzing",
73
+ "LABEL_NEW_CHAT": "Yangi chat",
74
+ "LABEL_FORGOT_PASSWORD": "Parolingizni unutdingizmi?",
75
+ "LABEL_SIGNIN": "tizimga kirish",
76
+ "LABEL_SIGNIN_TO": "Kirish",
77
+ "LABEL_SIGNIN_ERROR": "Kirish xatosi",
78
+ "LABEL_PASSWORD": "Parol",
79
+ "LABEL_ERROR_EMAIL": "Yaroqli elektron pochta manzilini kiriting.",
80
+ "LABEL_ERROR_PASSWORD": "Parol kamida 6 ta belgidan iborat bo'lishi kerak.",
81
+ "LABEL_LOGIN": "Kirish",
82
+ "LABEL_LOGOUT": "Chiqish",
83
+ "LABEL_WELCOME_TO": "Ga Xush kelibsiz",
84
+ "LABEL_SIGNUP": "Ro'yxatdan o'tish",
85
+ "LABEL_ALREDY_HAVE_AN_ACCOUNT": "Hisobingiz bormi?",
86
+ "LABEL_DONT_HAVE_AN_ACCOUNT_YET": "Hali hisobingiz yo'qmi?",
87
+ "LABEL_FORGOT_YOUR_PASSWORD": "Parolni esdan chiqardingizmi?",
88
+ "LABEL_CLICK_HERE": "bu yerni bosing",
89
+ "LABEL_REGISTRATION": "Roʻyxatdan oʻtish",
90
+ "LABEL_PLACEHOLDER_EMAIL": "Sizning elektron manzilingiz",
91
+ "LABEL_PLACEHOLDER_PASSWORD": "Sizning parolingiz",
92
+ "LABEL_PLACEHOLDER_NAME": "Ismingiz",
93
+ "LABEL_PLACEHOLDER_LAST_NAME": "Familiyangiz",
94
+ "LABEL_LAST_NAME": "Familiya",
95
+ "LABEL_FIELD_NOT_EMPTY": "Maydon bo'sh bo'lishi mumkin emas.",
96
+ "LABEL_NEW_PASSWORD": "Yangi parol yarating",
97
+ "LABEL_CLOSED": "Yopiq",
98
+ "LABEL_INFO": "Ma'lumotlar",
99
+ "ALERT_NOTIFICATION": "Ogohlantirish: bildirishnomalarni yuborish o'chirilgan, bildirishnomalarni yuborishga ruxsat berish uchun brauzer sozlamalarini o'zgartiradi.",
100
+ "LABEL_EXTERNAL_ID": "Tashqi identifikator",
101
+ "LABEL_IAT": "Kech",
102
+ "LABEL_REQUEST_DETAIL": "Tafsilotlarni so'rash",
103
+ "LABEL_ENTER_MSG": "Xabarni kiriting yoki tayyor javoblar uchun / tugmasini bosing",
104
+ "LABEL_ENTER_MSG_SHORT": "Xabar kiriting",
105
+ "LABEL_ENTER_MSG_SHORTER": "Kirish...",
106
+ "LABEL_MSG_LOGIN_TILEDESK": "Suhbatni boshlash uchun tizimga kiring",
107
+ "LABEL_ARCHIVED": "Arxivlangan",
108
+ "LABEL_INFO_CONVERSATION": "Ma'lumot suhbati",
109
+ "LABEL_INFO_USER": "Ma'lumot foydalanuvchisi",
110
+ "LABEL_IS_WRITING": "yozish",
111
+ "LABEL_VERSION": "versiya",
112
+ "LABEL_CONTACTS": "Kontaktlar",
113
+ "LABEL_PLACEHOLDER": "xabaringizni yozing..",
114
+ "LABEL_START_NW_CONV": "Yangi suhbat",
115
+ "LABEL_FIRST_MSG": "Muammoingizni qisqacha tasvirlab bering, siz bilan agent bog'lanadi.",
116
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 Hozirda barcha operatorlar oflayn. Qanday bo'lmasin, muammoingizni tasvirlashingiz mumkin. Bu sizga imkon qadar tezroq javob beradigan qo'llab-quvvatlash guruhiga tayinlanadi.",
117
+ "LABEL_SELECT_TOPIC": "Mavzuni tanlang",
118
+ "LABEL_COMPLETE_FORM": "Keyingi mavjud agent bilan suhbatni boshlash uchun shaklni to'ldiring.",
119
+ "LABEL_FIELD_NAME": "Ism",
120
+ "LABEL_ERROR_FIELD_NAME": "Majburiy maydon (kamida 5 ta belgi).",
121
+ "LABEL_FIELD_EMAIL": "Elektron pochta",
122
+ "LABEL_ERROR_FIELD_EMAIL": "Yaroqli elektron pochta manzilini kiriting.",
123
+ "LABEL_WRITING": "yozmoqda...",
124
+ "AGENT_NOT_AVAILABLE": " Oflayn",
125
+ "AGENT_AVAILABLE": " Onlayn",
126
+ "GUEST_LABEL": "Mehmon",
127
+ "ALL_AGENTS_OFFLINE_LABEL": "Ayni paytda barcha operatorlar oflayn rejimda",
128
+ "LABEL_LOADING": "Yuklanmoqda...",
129
+ "CALLOUT_TITLE_PLACEHOLDER": "Yordam kerak?",
130
+ "CALLOUT_MSG_PLACEHOLDER": "Bu yerni bosing va biz bilan suhbatni boshlang!",
131
+ "CUSTOMER_SATISFACTION": "Mijozlarning qoniqishi",
132
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "mijozlarga xizmat ko'rsatish haqidagi fikringiz",
133
+ "DOWNLOAD_TRANSCRIPT": "Transkriptni yuklab oling",
134
+ "BACK": "Orqaga",
135
+ "YOUR_RATING": "sizning reytingingiz",
136
+ "WRITE_YOUR_OPINION": "Fikringizni yozing ... (ixtiyoriy)",
137
+ "SUBMIT": "Yuborish",
138
+ "THANK_YOU_FOR_YOUR_EVALUATION": "Baholaganingiz uchun tashakkur",
139
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "Sizning reytingingiz olindi",
140
+ "ALERT_LEAVE_CHAT": "Chatni tark etmoqchimisiz?",
141
+ "YES": "Ha",
142
+ "NO": "Yo'q",
143
+ "BUTTON_CLOSE_TO_ICON": "Suhbatni minimallashtirish",
144
+ "BUTTON_EDIT_PROFILE": "Profilni yangilash",
145
+ "RATE_CHAT": "Suhbatni baholang",
146
+ "WELLCOME_TITLE": "Salom, Tiledesk 👋 ga xush kelibsiz",
147
+ "WELLCOME_MSG": "Biz qanday yordam bera olamiz?",
148
+ "WELLCOME": "Xush kelibsiz",
149
+ "OPTIONS": "variantlari",
150
+ "SOUND_OFF": "ovoz o'chirilgan",
151
+ "SOUND_ON": "ovoz yoqilgan",
152
+ "LOGOUT": "chiqish",
153
+ "CLOSE": "yaqin",
154
+ "PREV_CONVERSATIONS": "Sizning suhbatlaringiz",
155
+ "YOU": "Siz",
156
+ "SHOW_ALL_CONV": "hammasini ko'rsatish",
157
+ "START_A_CONVERSATION": "Suhbatni boshlang",
158
+ "NO_CONVERSATION": "Suhbat yo'q",
159
+ "SEE_PREVIOUS": "oldingisiga qarang",
160
+ "WAITING_TIME_FOUND": "Jamoa odatda $reply_timebilan javob beradi",
161
+ "WAITING_TIME_NOT_FOUND": "Jamoa imkon qadar tezroq javob beradi",
162
+ "CLOSED": "YOPIQ",
163
+ "PleaseSelectChatToStartMessaging": "Xabar yozishni boshlash uchun chatni tanlang",
164
+ "FromThisAreNew": "------------------",
165
+ "Preview": "Ko‘rib chiqish",
166
+ "AddACaption": "Sarlavha qo'shing",
167
+ "AnErrorOccurredWhileUnsubscribingFromNotifications": "Voy! Bildirishnomalarga obunani bekor qilishda xatolik yuz berdi",
168
+ "SIGNIN_ERROR_USER_NOT_FOUND": "Autentifikatsiya amalga oshmadi. Foydalanuvchi topilmadi.",
169
+ "SIGNIN_ERROR_USER_WRONG_PSW": "Autentifikatsiya amalga oshmadi. Noto'g'ri parol.",
170
+ "Email is required": "Elektron pochta kerak.",
171
+ "Email must be a valid email": "Elektron pochta haqiqiy elektron pochta bo'lishi kerak.",
172
+ "Password is required": "Parol talab qilinadi.",
173
+ "Password must be at least 6 characters long": "Parol kamida 6 ta belgidan iborat bo'lishi kerak.",
174
+ "UPLOAD_FILE_ERROR": "Faylni yuklashda kutilmagan xatolik yuz berdi",
175
+ "DROP_IMAGE_HERE_TO_SEND_IT": "Yuborish uchun rasmni shu yerga tashlang",
176
+ "ONLY_IMAGE_FILES_ARE_ALLOWED_TO_PASTE": "Faqat rasm fayllari va matnni joylashtirishga ruxsat beriladi",
177
+ "FAILED_TO_UPLOAD_THE_FORMAT_IS_NOT_SUPPORTED": "Yuklab bo‘lmadi: format qo‘llab-quvvatlanmaydi",
178
+ "SENT_AN_IMAGE": "rasm yubordi",
179
+ "SENT_AN_ATTACHMENT": "ilova yubordi",
180
+ "NO_INFORMATION_AVAILABLE": "Maʼlumot yoʻq",
181
+ "CONTACT_ID": "Kontakt identifikatori",
182
+ "USER_ID": "foydalanuvchi IDsi",
183
+ "CLOSE_TOAST": "Yopish",
184
+ "WAITING_FOR_NETWORK": "Tarmoq kutilmoqda",
185
+ "Available": "Mavjud",
186
+ "Unavailable": "Mavjud emas",
187
+ "Busy": "Band",
188
+ "YouAreAboutToJoinThisChat": "Agar siz ushbu suhbatga qo'shilsangiz, u suhbatlar ro'yxatida paydo bo'ladi. Keyin, tayinlanmagan suhbatlar yon panelini yopganingizdan so'ng, foydalanuvchi bilan suhbatni boshlash uchun uni tanlashingiz kerak bo'ladi",
189
+ "Cancel": "Bekor qilish",
190
+ "AreYouSure": "Ishonchingiz komilmi?",
191
+ "UnassignedConversations": "Tayinlanmagan suhbatlar",
192
+ "NewConversations": "Yangi suhbatlar",
193
+ "UPLOAD": "Yuklash",
194
+ "CANNED_RESPONSES": "Tayyor javoblar",
195
+ "NO_CANNED_RESPONSES": "Tayyor javoblar yo'q",
196
+ "THERE_ARE_NO_CANNED_RESPONSES_AVAILABLE": "Hech qanday tayyor javoblar mavjud emas",
197
+ "TO_CREATE_THEM_GO_TO_THE_PROJECT": "Ularni yaratish uchun loyihaga o'ting (o'ng tomondagi panelda mavjud bo'lgan loyiha nomini bosishingiz mumkin) va asboblar paneli yon panelidagi \"Sozlamalar\" menyusi ostida \"Konservalangan javoblar\" ni va keyin \"Javob yaratish\" tugmasini bosing.",
198
+ "YES_CANNED_RESPONSES": "⚡️ tugmasini bosish yoki matn maydoniga / belgisini kiritish orqali konservalangan javoblarni ko'ring, shuningdek, / belgisidan keyin terish orqali ro'yxatni filtrlashingiz mumkin.",
199
+ "VIEW_ALL_CONVERSATIONS": "Barcha suhbatlarni ko'ring",
200
+ "CONVERSATIONS_IN_QUEUE": "navbatdagi suhbatlar, birini tanlang",
201
+ "CONVERSATION_IN_QUEUE": "navbatdagi suhbat, uni tanlang",
202
+ "NO_CONVERSATION_IN_QUEUE": "navbatda hech qanday suhbat yo'q",
203
+ "PIN_A_PROJECT": "Loyihani mahkamlash",
204
+ "PINNED_PROJECT": "Belgilangan loyiha",
205
+ "CHANGE_PINNED_PROJECT": "Belgilangan loyihani o'zgartirish",
206
+ "CHANGE_TO_AVAILABLE_UNAVAILABLE": "mavjud/mavjudga o'zgartiring",
207
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "Maqomingizni mavjud qilib o'zgartiring",
208
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "Maqomingizni mavjud emas qilib o'zgartiring",
209
+ "ALL_CONVS_SERVED": "Barcha suhbatlar o'tkazildimi? Juda yaxshi!",
210
+ "PaydPlanName": "{{projectprofile}} Reja",
211
+ "PaydPlanNamePro": "Pro rejasi",
212
+ "PaydPlanNameEnterprise": "Korxona rejasi",
213
+ "ProPlanTrial": "Pro Plan (sinov)",
214
+ "FreePlan": "Bepul reja",
215
+ "SubscriptionPaymentProblem": "Obuna toʻlovi muammosi",
216
+ "ThePlanHasExpired": "Reja muddati tugadi",
217
+ "owner": "Egasi",
218
+ "admin": "Administrator",
219
+ "agent": "Agent",
220
+ "Conversations": "Suhbatlar",
221
+ "Apps": "Ilovalar",
222
+ "Analytics": "Analitika",
223
+ "Activities": "Faoliyatlar",
224
+ "History": "Tarix",
225
+ "Settings": "Sozlamalar",
226
+ "Resolve": "Yechish",
227
+ "Archive": "Arxiv",
228
+ "ActionNotAllowed": "Harakatga ruxsat berilmagan",
229
+ "YouAreNoLongerAmongTheTeammatesManagingThisConversation": "Siz endi bu suhbatni boshqarayotgan jamoadoshlar orasida emassiz",
230
+ "TicketSuccessfullyCreated": "Chipta muvaffaqiyatli yaratildi",
231
+ "Continue": "Davom eting",
232
+ "ViewArchivedConversations": "Arxivlangan suhbatlar",
233
+ "ViewContactsList": "Kontaktlar ro'yxati",
234
+ "AddAsCannedResponse": "Konservalangan javob sifatida qo'shing",
235
+ "AddNewCannedResponse": "Yangi tayyor javob qo'shing",
236
+ "TitleIsRequired": "Sarlavha kerak",
237
+ "MessageIsRequired": "Xabar kerak",
238
+ "Already_present_in_the_dashboard_json": ".........",
239
+ "CreateTicket": "Chipta yarating",
240
+ "Requester": "So'rovchi",
241
+ "ViewRequesterDetails": "So'rovchi tafsilotlarini ko'rish",
242
+ "Priority": "Ustuvorlik",
243
+ "urgent": "Shoshilinch",
244
+ "high": "Yuqori",
245
+ "medium": "O'rta",
246
+ "low": "Past",
247
+ "SelectRequester": "So'rovchini tanlang",
248
+ "AddRequester": "So'rovchi qo'shing",
249
+ "Subject": "Mavzu",
250
+ "SelectAssignee": "Vakolat beruvchini tanlang",
251
+ "Message": "Xabar",
252
+ "CreateNewRequester": "Yangi so'rovchi yarating",
253
+ "Name": "Ism",
254
+ "NameIsRequired": "Ism talab qilinadi",
255
+ "EnterValidEmail": "Yaroqli elektron pochta manzilini kiriting",
256
+ "Title": "Sarlavha",
257
+ "Add": "Qo'shish",
258
+ "AddCustomization": "Shaxsiylashtirish qo'shing",
259
+ "SelectACustomizationToAddToYourMessage": "Xabarga qo'shish uchun shaxsiylashtirish qiymatini tanlang",
260
+ "recipient_name_desc": "Agent javob bergan shaxsning ismi xabarga qo'shiladi.",
261
+ "agent_name_desc": "Xabarga javob berayotgan agentning ismi qo'shiladi.",
262
+ "First_name_of_recipient": "Qabul qiluvchining ismi",
263
+ "First_name_of_agent": "Agentning ismi",
264
+ "EnterCannedResponseTitle": "Tayyor javob sarlavhasini kiriting",
265
+ "WriteMsgToSendToYourVisitors": "Mehmonlaringizga yuborish uchun konservalangan javob xabarini yozing",
266
+ "EditProfile": "Profilni tahrirlash"
267
+ }
@@ -1,7 +1,9 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK": "CAR:T-PAY:T-ANA:T-ACT:T-APP:T",
2
3
  "chatEngine": "mqtt",
3
4
  "uploadEngine": "native",
4
5
  "pushEngine": "none",
6
+ "fileUploadAccept": "*/*",
5
7
  "firebaseConfig": {
6
8
  "apiKey": "AIzaSyCoWXHNvP1-qOllCpTshhC6VjPXeRTK0T4",
7
9
  "authDomain": "chat21-pre-01.firebaseapp.com",
@@ -16,11 +18,16 @@
16
18
  "chat21Config": {
17
19
  "appId": "tilechat",
18
20
  "MQTTendpoint": "ws://localhost:15675/ws",
19
- "APIendpoint": "http://localhost:8004/api"
21
+ "APIendpoint": "http://localhost:8004/api",
22
+ "_log": true
20
23
  },
21
24
  "apiUrl": "http://localhost:3000/",
22
25
  "baseImageUrl": "http://localhost:3000/",
23
- "dashboardUrl": "http://localhost:3000/",
26
+ "dashboardUrl": "http://localhost:8081/",
24
27
  "logLevel": "DEBUG",
25
- "authPersistence": "NONE"
28
+ "authPersistence": "LOCAL",
29
+ "supportMode": true,
30
+ "archivedButton": true,
31
+ "writeToButton": true,
32
+ "wsUrl": "/ws/"
26
33
  }
@@ -13,7 +13,8 @@
13
13
  "messagingSenderId": "269505353043",
14
14
  "appId": "1:269505353043:web:b82af070572669e3707da6",
15
15
  "chat21ApiUrl": "https://us-central1-chat21-pre-01.cloudfunctions.net",
16
- "tenant":"tilechat"
16
+ "tenant":"tilechat",
17
+ "vapidKey": "BOsgS2ADwspKdWAmiFDZXEYqY1HSYADVfJT3j67wsySh3NxaViJqoabPJH8WM02wb5r8cQIm5TgM0UK047Z1D1c"
17
18
  },
18
19
  "chat21Config": {
19
20
  "appId": "tilechat",
@@ -17,6 +17,7 @@ export abstract class ConversationsHandlerService {
17
17
  abstract BSConversationDetail: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
18
18
  abstract conversationAdded: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
19
19
  abstract conversationChanged: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
20
+ abstract conversationChangedDetailed: BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}> = new BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}>(null);
20
21
  abstract conversationRemoved: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
21
22
  // abstract readAllMessages: BehaviorSubject<string> = new BehaviorSubject<string>(null);
22
23
 
@@ -32,6 +33,7 @@ export abstract class ConversationsHandlerService {
32
33
  abstract setConversationRead(conversationId: string): void;
33
34
  abstract dispose(): void;
34
35
  abstract archiveConversation(conversationId: string): void;
36
+ abstract getLastConversation(callback:(conv: ConversationModel, error: string)=>void): void
35
37
  abstract getConversationDetail(conversationId: string, callback:(conv: ConversationModel)=>void): void;
36
38
  abstract getClosingConversation(conversationId: string): boolean;
37
39
  abstract setClosingConversation(conversationId: string, status: boolean): void;
@@ -324,7 +324,6 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
324
324
  * 7 - attivo sound se è un msg nuovo
325
325
  */
326
326
 
327
- //TODO-GAB: fare emit singola conversation e non dell'intero array di conversations
328
327
  private changed(childSnapshot: any) {
329
328
  if (this.conversationGenerate(childSnapshot)) {
330
329
  const index = searchIndexInArrayForUid(this.archivedConversations, childSnapshot.key);
@@ -394,7 +393,6 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
394
393
  conversation_with_fullname = conv.recipient_fullname;
395
394
  }
396
395
  // Fixes the bug: if a snippet of code is pasted and sent it is not displayed correctly in the archived convesations list
397
- // conv.last_message_text = htmlEntities(conv.last_message_text)
398
396
  conv.conversation_with = conversation_with;
399
397
  conv.conversation_with_fullname = conversation_with_fullname;
400
398
  conv.status = this.setStatusConversation(conv.sender, conv.uid);
@@ -48,12 +48,7 @@ export class FirebaseAuthService extends MessagingAuthService {
48
48
  public SERVER_BASE_URL: string;
49
49
 
50
50
  // private
51
- private URL_TILEDESK_SIGNIN: string;
52
- private URL_TILEDESK_SIGNIN_ANONYMOUSLY: string;
53
51
  private URL_TILEDESK_CREATE_CUSTOM_TOKEN: string;
54
- private URL_TILEDESK_SIGNIN_WITH_CUSTOM_TOKEN: string;
55
- //TODO-GAB
56
- // private imageRepo: ImageRepoService = new FirebaseImageRepoService();
57
52
 
58
53
  private firebaseToken: string;
59
54
  private logger: LoggerService = LoggerInstance.getInstance()
@@ -34,6 +34,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
34
34
  BSConversationDetail: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
35
35
  conversationAdded: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
36
36
  conversationChanged: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
37
+ conversationChangedDetailed: BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}> = new BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}>(null);
37
38
  conversationRemoved: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);
38
39
  // readAllMessages: BehaviorSubject<string>;
39
40
 
@@ -50,6 +51,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
50
51
  private logger: LoggerService = LoggerInstance.getInstance()
51
52
  private ref: firebase.database.Query;
52
53
  private BASE_URL: string;
54
+ private BASE_URL_DATABASE: string;
53
55
  // private audio: any;
54
56
  // private setTimeoutSound: any;
55
57
  private subscribe: any
@@ -78,6 +80,7 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
78
80
  //this.databaseProvider.initialize(userId, this.tenant);
79
81
  //this.getConversationsFromStorage();
80
82
  this.BASE_URL = this.appConfig.getConfig().firebaseConfig.chat21ApiUrl;
83
+ this.BASE_URL_DATABASE = this.appConfig.getConfig().firebaseConfig.databaseURL;
81
84
  }
82
85
 
83
86
  /**
@@ -164,6 +167,45 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
164
167
  }, 2000);
165
168
  }
166
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
+
167
209
  /**
168
210
  * restituisce il numero di conversazioni nuove
169
211
  */
@@ -438,7 +480,6 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
438
480
  * 6 - ordino l'array per timestamp
439
481
  * 7 - pubblico conversations:update
440
482
  */
441
- //TODO-GAB: ora emit singola conversation e non dell'intero array di conversations
442
483
  private added(childSnapshot: any) {
443
484
  if (this.conversationGenerate(childSnapshot)) {
444
485
  const index = searchIndexInArrayForUid(this.conversations, childSnapshot.key);
@@ -461,13 +502,14 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
461
502
  * 7 - attivo sound se è un msg nuovo
462
503
  */
463
504
 
464
- //TODO-GAB: ora emit singola conversation e non dell'intero array di conversations
465
505
  private changed(childSnapshot: any) {
506
+ const oldConversation = this.conversations[searchIndexInArrayForUid(this.conversations, childSnapshot.key)]
466
507
  if (this.conversationGenerate(childSnapshot)) {
467
508
  const index = searchIndexInArrayForUid(this.conversations, childSnapshot.key);
468
509
  if (index > -1) {
469
510
  const conversationChanged = this.conversations[index]
470
- this.conversationChanged.next(conversationChanged);
511
+ this.conversationChanged.next(conversationChanged)
512
+ this.conversationChangedDetailed.next({value: conversationChanged, previousValue: oldConversation});
471
513
  }
472
514
  } else {
473
515
  this.logger.error('[FIREBASEConversationsHandlerSERVICE]CHANGED::conversations with conversationId: ', childSnapshot.key, 'is not valid')
@@ -481,7 +523,6 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
481
523
  * 4 - pubblico conversations:update
482
524
  * 5 - elimino conversazione dall'array delle conversazioni chiuse
483
525
  */
484
- //TODO-GAB: ora emit singola conversation e non dell'intero array di conversations
485
526
  private removed(childSnapshot: any) {
486
527
  const index = searchIndexInArrayForUid(this.conversations, childSnapshot.key);
487
528
  if (index > -1) {
@@ -547,7 +588,6 @@ export class FirebaseConversationsHandler extends ConversationsHandlerService {
547
588
  /** END: UPDATE CONVERSATIONS is_new IF conv is selected or sender is me */
548
589
 
549
590
  // Fixes the bug: if a snippet of code is pasted and sent it is not displayed correctly in the convesations list
550
- // conv.time_last_message = this.getTimeLastMessage(conv.timestamp);
551
591
  conv.conversation_with = conversation_with;
552
592
  conv.conversation_with_fullname = conversation_with_fullname;
553
593
  conv.status = this.setStatusConversation(conv.sender, conv.uid);
@@ -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