@chat21/chat21-ionic 3.0.66 → 3.0.68-rc.3

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