@chat21/chat21-ionic 3.0.65-rc1 → 3.0.66

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 (30) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/deploy_amazon_beta.sh +0 -0
  3. package/deploy_amazon_prod.sh +3 -3
  4. package/package.json +3 -3
  5. package/src/app/app.component.ts +18 -61
  6. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +0 -10
  7. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.html +49 -4
  8. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +1 -1
  9. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +18 -30
  10. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +6 -4
  11. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +2 -0
  12. package/src/app/components/project-item/project-item.component.ts +5 -0
  13. package/src/app/components/sidebar/sidebar.component.ts +28 -29
  14. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +12 -23
  15. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +3 -0
  16. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +88 -136
  17. package/src/app/directives/truncate.pipe.ts +0 -1
  18. package/src/app/pages/authentication/login/login.page.ts +0 -1
  19. package/src/app/pages/conversation-detail/conversation-detail.page.ts +44 -48
  20. package/src/app/pages/conversations-list/conversations-list.page.ts +27 -3
  21. package/src/assets/i18n/ar.json +266 -0
  22. package/src/assets/i18n/uk.json +266 -0
  23. package/src/assets/js/chat21client.js +57 -59
  24. package/src/chat21-core/models/conversation.ts +1 -1
  25. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +26 -21
  26. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +72 -56
  27. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +16 -13
  28. package/src/chat21-core/utils/constants.ts +1 -1
  29. package/src/global.scss +2 -2
  30. package/deploy_prod.sh +0 -14
@@ -0,0 +1,266 @@
1
+ {
2
+ "LABEL_TU": "ти: ",
3
+ "LABEL_MSG_PUSH_START_CHAT": "Розмови ще немає",
4
+ "LABEL_MSG_START_CHAT": "Почніть спілкуватися",
5
+ "LABEL_ACTIVE_NOW": "доступний",
6
+ "LABEL_AVAILABLE": "доступний",
7
+ "LABEL_NOT_AVAILABLE": "недоступний",
8
+ "LABEL_NO_MSG_HERE": "Тут досі немає повідомлення...",
9
+ "LABEL_TODAY": "сьогодні",
10
+ "LABEL_TOMORROW": "вчора",
11
+ "LABEL_LAST_ACCESS": "останній доступ",
12
+ "LABEL_TO": "на",
13
+ "ARRAY_DAYS": [
14
+ "понеділок",
15
+ "вівторок",
16
+ "середа",
17
+ "четвер",
18
+ "п'ятниця",
19
+ "субота",
20
+ "неділя"
21
+ ],
22
+ "LABEL_SEND": "Надіслати",
23
+ "ID_CONVERSATION": "Розмова з ідентифікатором",
24
+ "LABEL_CREATED_THE": "група створена на",
25
+ "LABEL_INFO_ATTRIBUTE": "Атрибути",
26
+ "LABEL_INFO_ADVANCED": "Розширений",
27
+ "LABEL_CLIENT": "Клієнт ",
28
+ "LABEL_SOURCEPAGE": "Джерело ",
29
+ "LABEL_DEPARTMENT_ID": "Ідентифікатор відділу ",
30
+ "LABEL_DEPARTMENT_NAME": "відділ ",
31
+ "requester_id": "Ідентифікатор запитувача",
32
+ "projectId": "Ідентифікатор проекту ",
33
+ "LABEL_NAME": "Ім'я користувача ",
34
+ "LABEL_EMAIL": "Електронна пошта ",
35
+ "LABEL_MEMBERS": "Учасники",
36
+ "LABEL_INFO_MESSAGE": "Інформаційне повідомлення",
37
+ "LABEL_READ_BY": "Читає",
38
+ "LABEL_STATUS_MESSAGE": "держава",
39
+ "LABEL_SENT_THE": "відправлено далі",
40
+ "LABEL_SENT_BY": "від",
41
+ "LABEL_GUEST": "Гість",
42
+ "LABEL_CREATE_TICKET": "Створіть квиток",
43
+ "LABEL_SEND_BY_EMAIL": "Надіслати електронною поштою",
44
+ "LABEL_VIDEO_CHAT": "Відеодзвінок",
45
+ "LABEL_LEAVE_GROUP": "Вийти з групи",
46
+ "LABEL_CLOSE_GROUP": "Закрити",
47
+ "ALERT_TITLE": "Увага!",
48
+ "CLOSE_ALERT_CONFIRM_LABEL": "добре",
49
+ "CLOSE_ALERT_CANCEL_LABEL": "СКАСУВАТИ",
50
+ "LEAVE_ALERT_MSG": "Вийти з групи?",
51
+ "CLOSE_ALERT_MSG": "Закрити бесіду?",
52
+ "VIDEOCHAT_ALERT_MSG": "Послуга недоступна",
53
+ "CLOSING_CONVERSATION_SPINNER_MSG": "Будь ласка, зачекайте.<br> Ми закриваємо розмову",
54
+ "CONVERSATION_CLOSED_ALERT_MSG": "Розмову було успішно закрито.",
55
+ "CANNOT_CLOSE_CONVERSATION_ALERT_MSG": "Неможливо закрити бесіду",
56
+ "LEAVING_GROUP_SPINNER_MSG": "Будь ласка, зачекайте.<br> Ви залишаєте групу",
57
+ "CONVERSATION_LEFT_ALERT_MSG": "Групу успішно покинули.",
58
+ "CANNOT_LEAVE_GROUP_ALERT_MSG": "Групу не можна було покинути",
59
+ "GREETING": "Привіт, {{ значення}}",
60
+ "ARCHIVED_CONVERSATIONS_PAGE_NO_CONVERSATIONS_ARCHIVED": "Розмови в архіві немає",
61
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "ти",
62
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "були додані до ",
63
+ "INFO_SUPPORT_USER_ADDED_VERB": "приєднався",
64
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "чат",
65
+ "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ предмет }} {{ дієслово} {{ доповнення}}",
66
+ "INFO_SUPPORT_CHAT_REOPENED": "Чат знову відкрився",
67
+ "INFO_SUPPORT_CHAT_CLOSED": "Чат закритий",
68
+ "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Вам призначено новий запит на підтримку",
69
+ "LABEL_PROFILE": "Профіль",
70
+ "LABEL_CLOSE": "зачинено",
71
+ "LABEL_DISCONNECT": "Від’єднати",
72
+ "LABEL_NEW_CHAT": "Новий чат",
73
+ "LABEL_FORGOT_PASSWORD": "Ви забули свій пароль?",
74
+ "LABEL_SIGNIN": "Увійти",
75
+ "LABEL_SIGNIN_TO": "Увійдіть до",
76
+ "LABEL_SIGNIN_ERROR": "Помилка входу",
77
+ "LABEL_PASSWORD": "Пароль",
78
+ "LABEL_ERROR_EMAIL": "Введіть дійсну адресу електронної пошти.",
79
+ "LABEL_ERROR_PASSWORD": "Пароль має містити не менше 6 символів.",
80
+ "LABEL_LOGIN": "Увійти",
81
+ "LABEL_LOGOUT": "Вийти",
82
+ "LABEL_WELCOME_TO": "Ласкаво просимо до",
83
+ "LABEL_SIGNUP": "зареєструватися",
84
+ "LABEL_ALREDY_HAVE_AN_ACCOUNT": "Вже є аккаунт?",
85
+ "LABEL_DONT_HAVE_AN_ACCOUNT_YET": "Ще не маєте облікового запису?",
86
+ "LABEL_FORGOT_YOUR_PASSWORD": "Забули свій пароль?",
87
+ "LABEL_CLICK_HERE": "Натисніть тут",
88
+ "LABEL_REGISTRATION": "Реєстрація",
89
+ "LABEL_PLACEHOLDER_EMAIL": "Ваша електронна адреса",
90
+ "LABEL_PLACEHOLDER_PASSWORD": "Ваш пароль",
91
+ "LABEL_PLACEHOLDER_NAME": "Твоє ім'я",
92
+ "LABEL_PLACEHOLDER_LAST_NAME": "Ваше прізвище",
93
+ "LABEL_LAST_NAME": "Прізвище",
94
+ "LABEL_FIELD_NOT_EMPTY": "Поле не може бути порожнім.",
95
+ "LABEL_NEW_PASSWORD": "Згенеруйте новий пароль",
96
+ "LABEL_CLOSED": "зачинено",
97
+ "LABEL_INFO": "Інформація",
98
+ "ALERT_NOTIFICATION": "Попередження: надсилання сповіщень вимкнено, змінює налаштування браузера, щоб дозволити надсилання сповіщень.",
99
+ "LABEL_EXTERNAL_ID": "Зовнішній ідентифікатор",
100
+ "LABEL_IAT": "Iat",
101
+ "LABEL_REQUEST_DETAIL": "Деталі запиту",
102
+ "LABEL_ENTER_MSG": "Введіть повідомлення або натисніть / для стандартних відповідей",
103
+ "LABEL_ENTER_MSG_SHORT": "Введіть повідомлення",
104
+ "LABEL_ENTER_MSG_SHORTER": "Введіть...",
105
+ "LABEL_MSG_LOGIN_TILEDESK": "Перейдіть до входу, щоб почати спілкуватися",
106
+ "LABEL_ARCHIVED": "Заархівовано",
107
+ "LABEL_INFO_CONVERSATION": "Інформаційна розмова",
108
+ "LABEL_INFO_USER": "Інформація користувача",
109
+ "LABEL_IS_WRITING": "введення тексту",
110
+ "LABEL_VERSION": "версія",
111
+ "LABEL_CONTACTS": "Контакти",
112
+ "LABEL_PLACEHOLDER": "введіть своє повідомлення..",
113
+ "LABEL_START_NW_CONV": "Нова розмова",
114
+ "LABEL_FIRST_MSG": "Коротко опишіть вашу проблему, з вами зв’яжеться агент.",
115
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 Усі оператори на даний момент офлайн. Ви все одно можете описати свою проблему. Його буде призначено команді підтримки, яка відповість вам якомога швидше.",
116
+ "LABEL_SELECT_TOPIC": "Виберіть тему",
117
+ "LABEL_COMPLETE_FORM": "Заповніть форму, щоб почати розмову з наступним доступним агентом.",
118
+ "LABEL_FIELD_NAME": "Ім'я",
119
+ "LABEL_ERROR_FIELD_NAME": "Обов’язкове поле (мінімум 5 символів).",
120
+ "LABEL_FIELD_EMAIL": "Електронна пошта",
121
+ "LABEL_ERROR_FIELD_EMAIL": "Введіть дійсну адресу електронної пошти.",
122
+ "LABEL_WRITING": "пише...",
123
+ "AGENT_NOT_AVAILABLE": " Офлайн",
124
+ "AGENT_AVAILABLE": " Онлайн",
125
+ "GUEST_LABEL": "Гість",
126
+ "ALL_AGENTS_OFFLINE_LABEL": "На даний момент всі оператори офлайн",
127
+ "LABEL_LOADING": "Завантаження...",
128
+ "CALLOUT_TITLE_PLACEHOLDER": "Потрібна допомога?",
129
+ "CALLOUT_MSG_PLACEHOLDER": "Натисніть тут і почніть спілкуватися з нами!",
130
+ "CUSTOMER_SATISFACTION": "Задоволеності клієнтів",
131
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "ваша думка про наше обслуговування клієнтів",
132
+ "DOWNLOAD_TRANSCRIPT": "Завантажити стенограму",
133
+ "BACK": "Назад",
134
+ "YOUR_RATING": "ваш рейтинг",
135
+ "WRITE_YOUR_OPINION": "Напишіть свою думку ... (необов'язково)",
136
+ "SUBMIT": "Подати",
137
+ "THANK_YOU_FOR_YOUR_EVALUATION": "Дякуємо за оцінку",
138
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "вашу оцінку отримано",
139
+ "ALERT_LEAVE_CHAT": "Ви хочете вийти з чату?",
140
+ "YES": "Так",
141
+ "NO": "Немає",
142
+ "BUTTON_CLOSE_TO_ICON": "Мінімізуйте чат",
143
+ "BUTTON_EDIT_PROFILE": "Оновити профіль",
144
+ "RATE_CHAT": "Оцініть чат",
145
+ "WELLCOME_TITLE": "Привіт, ласкаво просимо до Tiledesk 👋",
146
+ "WELLCOME_MSG": "Як ми можемо допомогти?",
147
+ "WELLCOME": "Ласкаво просимо",
148
+ "OPTIONS": "варіанти",
149
+ "SOUND_OFF": "звук вимкнено",
150
+ "SOUND_ON": "звук увімкнено",
151
+ "LOGOUT": "вийти",
152
+ "CLOSE": "закрити",
153
+ "PREV_CONVERSATIONS": "Ваші розмови",
154
+ "YOU": "ти",
155
+ "SHOW_ALL_CONV": "Покажи все",
156
+ "START_A_CONVERSATION": "Почніть розмову",
157
+ "NO_CONVERSATION": "Без розмови",
158
+ "SEE_PREVIOUS": "див. попереднє",
159
+ "WAITING_TIME_FOUND": "Команда зазвичай відповідає $ час відповіді",
160
+ "WAITING_TIME_NOT_FOUND": "Команда відповість якомога швидше",
161
+ "CLOSED": "ЗАЧИНЕНО",
162
+ "PleaseSelectChatToStartMessaging": "Виберіть чат, щоб почати обмін повідомленнями",
163
+ "FromThisAreNew": "------------------",
164
+ "Preview": "Попередній перегляд",
165
+ "AddACaption": "Додайте підпис",
166
+ "AnErrorOccurredWhileUnsubscribingFromNotifications": "Ой! Під час скасування підписки на сповіщення сталася помилка",
167
+ "SIGNIN_ERROR_USER_NOT_FOUND": "Помилка автентифікації. Користувач не знайдений.",
168
+ "SIGNIN_ERROR_USER_WRONG_PSW": "Помилка автентифікації. Неправильний пароль.",
169
+ "Email is required": "Електронна адреса обов’язкова.",
170
+ "Email must be a valid email": "Електронна адреса має бути дійсною.",
171
+ "Password is required": "Потрібен пароль.",
172
+ "Password must be at least 6 characters long": "Пароль має містити не менше 6 символів.",
173
+ "UPLOAD_FILE_ERROR": "Під час завантаження файлу сталася неочікувана помилка",
174
+ "DROP_IMAGE_HERE_TO_SEND_IT": "Перетягніть зображення сюди, щоб надіслати його",
175
+ "ONLY_IMAGE_FILES_ARE_ALLOWED_TO_PASTE": "Дозволено вставляти лише файли зображень і текст",
176
+ "FAILED_TO_UPLOAD_THE_FORMAT_IS_NOT_SUPPORTED": "Не вдалося завантажити: формат не підтримується",
177
+ "SENT_AN_IMAGE": "надіслав зображення",
178
+ "SENT_AN_ATTACHMENT": "надіслав вкладений файл",
179
+ "NO_INFORMATION_AVAILABLE": "Інформація відсутня",
180
+ "CONTACT_ID": "Ідентифікатор контакту",
181
+ "USER_ID": "ідентифікатор користувача",
182
+ "CLOSE_TOAST": "Закрити",
183
+ "WAITING_FOR_NETWORK": "Очікування мережі",
184
+ "Available": "Доступний",
185
+ "Unavailable": "Недоступно",
186
+ "Busy": "Зайняте",
187
+ "YouAreAboutToJoinThisChat": "Ви збираєтеся приєднатися до цього чату",
188
+ "Cancel": "Скасувати",
189
+ "AreYouSure": "Ти впевнений?",
190
+ "UnassignedConversations": "Непризначені бесіди",
191
+ "NewConversations": "Нові розмови",
192
+ "UPLOAD": "Завантажити",
193
+ "CANNED_RESPONSES": "Консервовані відповіді",
194
+ "NO_CANNED_RESPONSES": "Немає готових відповідей",
195
+ "THERE_ARE_NO_CANNED_RESPONSES_AVAILABLE": "Немає готових відповідей",
196
+ "TO_CREATE_THEM_GO_TO_THE_PROJECT": "Щоб створити їх, перейдіть до проекту (ви можете натиснути на назву проекту, доступну на правій бічній панелі) і під пунктом меню «Налаштування» на бічній панелі інформаційної панелі клацніть на «Консервовані відповіді», а потім на кнопку «Створити відповідь».",
197
+ "YES_CANNED_RESPONSES": "Перегляньте готові відповіді, натиснувши кнопку ⚡️ або ввівши / у текстовій області, ви також можете відфільтрувати список, ввівши після /",
198
+ "VIEW_ALL_CONVERSATIONS": "Переглянути всі розмови",
199
+ "CONVERSATIONS_IN_QUEUE": "розмови в черзі, виберіть одну",
200
+ "CONVERSATION_IN_QUEUE": "розмова в черзі, виберіть її",
201
+ "NO_CONVERSATION_IN_QUEUE": "немає розмови в черзі",
202
+ "PIN_A_PROJECT": "Закріпити проект",
203
+ "PINNED_PROJECT": "Закріплений проект",
204
+ "CHANGE_PINNED_PROJECT": "Змінити закріплений проект",
205
+ "CHANGE_TO_AVAILABLE_UNAVAILABLE": "змінити на доступний/недоступний",
206
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "Змініть свій статус на доступний",
207
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "Змініть свій статус на недоступний",
208
+ "ALL_CONVS_SERVED": "Чи всі розмови обслуговувалися? Хороша робота!",
209
+ "PaydPlanName": "{{ проект компанії}} План",
210
+ "PaydPlanNamePro": "Про план",
211
+ "PaydPlanNameEnterprise": "План підприємства",
212
+ "ProPlanTrial": "Професійний план (пробна версія)",
213
+ "FreePlan": "Безкоштовний план",
214
+ "SubscriptionPaymentProblem": "Проблема оплати передплати",
215
+ "ThePlanHasExpired": "Термін дії плану закінчився",
216
+ "owner": "Власник",
217
+ "admin": "Адміністратор",
218
+ "agent": "Агент",
219
+ "Conversations": "Бесіди",
220
+ "Apps": "Програми",
221
+ "Analytics": "Аналітика",
222
+ "Activities": "Діяльність",
223
+ "History": "Історія",
224
+ "Settings": "Налаштування",
225
+ "Resolve": "Вирішити",
226
+ "Archive": "Архів",
227
+ "ActionNotAllowed": "Дія не дозволена",
228
+ "YouAreNoLongerAmongTheTeammatesManagingThisConversation": "Ви більше не серед товаришів по команді, які керують цією розмовою",
229
+ "TicketSuccessfullyCreated": "Квиток успішно створено",
230
+ "Continue": "Продовжуйте",
231
+ "ViewArchivedConversations": "Архівні бесіди",
232
+ "ViewContactsList": "Список контактів",
233
+ "AddAsCannedResponse": "Додати як стандартну відповідь",
234
+ "AddNewCannedResponse": "Додайте нову готову відповідь",
235
+ "TitleIsRequired": "Заголовок обов’язковий",
236
+ "MessageIsRequired": "Повідомлення обов’язкове",
237
+ "Already_present_in_the_dashboard_json": "........",
238
+ "CreateTicket": "Створити квиток",
239
+ "Requester": "Запитувач",
240
+ "ViewRequesterDetails": "Переглянути деталі запитувача",
241
+ "Priority": "Пріоритет",
242
+ "urgent": "Терміново",
243
+ "high": "Високий",
244
+ "medium": "Середній",
245
+ "low": "Низька",
246
+ "SelectRequester": "Виберіть запитувача",
247
+ "AddRequester": "Додати запитувача",
248
+ "Subject": "Тема",
249
+ "SelectAssignee": "Виберіть правонаступника",
250
+ "Message": "повідомлення",
251
+ "CreateNewRequester": "Створити новий запитувач",
252
+ "Name": "Ім'я",
253
+ "NameIsRequired": "Укажіть ім’я",
254
+ "EnterValidEmail": "Введіть дійсну адресу електронної пошти",
255
+ "Title": "Назва",
256
+ "Add": "Додати",
257
+ "AddCustomization": "Додайте персоналізацію",
258
+ "SelectACustomizationToAddToYourMessage": "Виберіть значення персоналізації, яке потрібно додати до повідомлення",
259
+ "recipient_name_desc": "Ім’я особи, якій відповідає агент, буде додано до повідомлення.",
260
+ "agent_name_desc": "Ім’я агента, який відповідає, буде додано до повідомлення.",
261
+ "First_name_of_recipient": "Ім'я одержувача",
262
+ "First_name_of_agent": "Ім'я агента",
263
+ "EnterCannedResponseTitle": "Введіть назву готової відповіді",
264
+ "WriteMsgToSendToYourVisitors": "Напишіть готове повідомлення-відповідь, щоб надіслати його відвідувачам",
265
+ "EditProfile": "Редагувати профіль"
266
+ }
@@ -1,14 +1,14 @@
1
1
  /*
2
2
  Chat21Client
3
3
 
4
- v0.1.10
4
+ v0.1.11
5
5
 
6
6
  @Author Andrea Sponziello
7
7
  (c) Tiledesk 2020
8
8
  */
9
9
 
10
- // let mqtt = require('mqtt');
11
- // let axios = require('axios');
10
+ //let mqtt = require('mqtt');
11
+ //let axios = require('axios');
12
12
 
13
13
  const _CLIENTADDED = "/clientadded"
14
14
  const _CLIENTUPDATED = "/clientupdated"
@@ -141,7 +141,7 @@ class Chat21Client {
141
141
  const payload = JSON.stringify(outgoing_message)
142
142
  this.client.publish(dest_topic, payload, null, (err) => {
143
143
  callback(err, outgoing_message)
144
- })
144
+ });
145
145
  }
146
146
 
147
147
  updateMessageStatus(messageId, conversWith, status, callback) {
@@ -236,10 +236,6 @@ class Chat21Client {
236
236
  group_members: members
237
237
  },
238
238
  method: 'POST'
239
- // url: options.url,
240
- // headers: options.headers,
241
- // json: options.json,
242
- // method: options.method
243
239
  }
244
240
  Chat21Client.myrequest(options, (err, response, json) => {
245
241
  if (err) {
@@ -249,23 +245,6 @@ class Chat21Client {
249
245
  callback(null, json);
250
246
  }
251
247
  }, this.log);
252
- // var xmlhttp = new XMLHttpRequest();
253
- // xmlhttp.open("POST", URL, true);
254
- // xmlhttp.setRequestHeader("authorization", this.jwt);
255
- // xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
256
- // xmlhttp.onreadystatechange = function() {
257
- // if (callback && xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {
258
- // try {
259
- // const json = JSON.parse(xmlhttp.responseText)
260
- // callback(null, json.result)
261
- // }
262
- // catch (err) {
263
- // console.log("parsing json ERROR", err)
264
- // callback(err, null)
265
- // }
266
- // }
267
- // };
268
- // xmlhttp.send(JSON.stringify(data));
269
248
  }
270
249
 
271
250
  groupData(group_id, callback) {
@@ -590,7 +569,7 @@ class Chat21Client {
590
569
  }
591
570
  // map.forEach((value, key, map) =>)
592
571
  this.onConversationUpdatedCallbacks.forEach((callback, handler, map) => {
593
- callback(JSON.parse(message.toString()), topic)
572
+ callback(JSON.parse(message.toString()), _topic)
594
573
  });
595
574
  }
596
575
  }
@@ -602,7 +581,7 @@ class Chat21Client {
602
581
  console.log("conversation deleted! /conversations/, topic:", topic, message.toString() );
603
582
  }
604
583
  this.onConversationDeletedCallbacks.forEach((callback, handler, map) => {
605
- callback(JSON.parse(message.toString()), topic)
584
+ callback(JSON.parse(message.toString()), _topic)
606
585
  });
607
586
  }
608
587
  }
@@ -611,7 +590,7 @@ class Chat21Client {
611
590
  if (topic.includes("/archived_conversations/") && topic.endsWith(_CLIENTADDED)) {
612
591
  // map.forEach((value, key, map) =>)
613
592
  this.onArchivedConversationAddedCallbacks.forEach((callback, handler, map) => {
614
- callback(JSON.parse(message.toString()), topic)
593
+ callback(JSON.parse(message.toString()), _topic)
615
594
  });
616
595
  }
617
596
  }
@@ -620,7 +599,7 @@ class Chat21Client {
620
599
  if (topic.includes("/archived_conversations/") && topic.endsWith(_CLIENTDELETED)) {
621
600
  // map.forEach((value, key, map) =>)
622
601
  this.onArchivedConversationDeletedCallbacks.forEach((callback, handler, map) => {
623
- callback(JSON.parse(message.toString()), topic)
602
+ callback(JSON.parse(message.toString()), _topic)
624
603
  });
625
604
  }
626
605
  }
@@ -720,20 +699,20 @@ class Chat21Client {
720
699
  }
721
700
 
722
701
  parseTopic(topic) {
723
- var topic_parts = topic.split("/")
702
+ var topic_parts = topic.split("/");
724
703
  // /apps/tilechat/users/(ME)/messages/RECIPIENT_ID/ACTION
725
704
  if (topic_parts.length >= 7) {
726
- const app_id = topic_parts[1]
727
- const sender_id = topic_parts[3]
728
- const recipient_id = topic_parts[5]
729
- const convers_with = recipient_id
730
- const me = sender_id
705
+ const app_id = topic_parts[1];
706
+ const sender_id = topic_parts[3];
707
+ const recipient_id = topic_parts[5];
708
+ const convers_with = recipient_id;
709
+ const me = sender_id;
731
710
  const parsed = {
732
711
  "conversWith": convers_with
733
712
  }
734
- return parsed
713
+ return parsed;
735
714
  }
736
- return null
715
+ return null;
737
716
  }
738
717
 
739
718
  lastArchivedConversations(callback) {
@@ -801,27 +780,46 @@ class Chat21Client {
801
780
  const URL = `${this.APIendpoint}/${this.appid}/${this.user_id}/${path}/${conversWith}`
802
781
  console.log("getting conversation detail:", URL)
803
782
  console.log("conversWith:", conversWith)
804
- var xmlhttp = new XMLHttpRequest();
805
- xmlhttp.open("GET", URL, true);
806
- xmlhttp.setRequestHeader("authorization", this.jwt);
807
- xmlhttp.onreadystatechange = function() {
808
- if (callback && xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {
809
- try {
810
- const json = JSON.parse(xmlhttp.responseText);
811
- if (json && json.result && Array.isArray(json.result) && json.result.length ==1) {
812
- callback(null, json.result[0]);
813
- }
814
- else {
815
- callback({"message": "Incorrect conversation result."}, null);
816
- }
817
- }
818
- catch (err) {
819
- console.error("parsing json ERROR", err);
820
- callback(err, null);
821
- }
783
+
784
+ let options = {
785
+ url: URL,
786
+ headers: {
787
+ "Authorization": this.jwt
788
+ // "Content-Type": "application/json;charset=UTF-8"
789
+ },
790
+ method: 'GET'
791
+ }
792
+ Chat21Client.myrequest(options, (err, response, json) => {
793
+ console.log("JSON...", json)
794
+ if (json && json.result && Array.isArray(json.result) && json.result.length ==1) {
795
+ callback(null, json.result[0]);
822
796
  }
823
- };
824
- xmlhttp.send(null);
797
+ else {
798
+ callback(null, null);
799
+ }
800
+ }, this.log);
801
+
802
+ // var xmlhttp = new XMLHttpRequest();
803
+ // xmlhttp.open("GET", URL, true);
804
+ // xmlhttp.setRequestHeader("authorization", this.jwt);
805
+ // xmlhttp.onreadystatechange = function() {
806
+ // if (callback && xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {
807
+ // try {
808
+ // const json = JSON.parse(xmlhttp.responseText);
809
+ // if (json && json.result && Array.isArray(json.result) && json.result.length ==1) {
810
+ // callback(null, json.result[0]);
811
+ // }
812
+ // else {
813
+ // callback({"message": "Incorrect conversation result."}, null);
814
+ // }
815
+ // }
816
+ // catch (err) {
817
+ // console.error("parsing json ERROR", err);
818
+ // callback(err, null);
819
+ // }
820
+ // }
821
+ // };
822
+ // xmlhttp.send(null);
825
823
  }
826
824
 
827
825
  lastMessages(convers_with, callback) {
@@ -1033,8 +1031,8 @@ class Chat21Client {
1033
1031
 
1034
1032
  function isBrowser() {
1035
1033
  return true;
1036
- // return false;
1034
+ //return false;
1037
1035
  }
1038
1036
 
1039
1037
  export { Chat21Client }; // Browser
1040
- // module.exports = { Chat21Client };
1038
+ //module.exports = { Chat21Client };
@@ -17,7 +17,7 @@ export class ConversationModel {
17
17
  public status: string,
18
18
  public timestamp: number,
19
19
  public time_last_message: string,
20
- public selected: boolean,
20
+ // public selected: boolean,
21
21
  public color: string,
22
22
  public avatar: string,
23
23
  public archived: boolean,
@@ -1,4 +1,3 @@
1
- import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
2
1
  import { Injectable } from '@angular/core';
3
2
  import { BehaviorSubject } from 'rxjs';
4
3
 
@@ -13,17 +12,11 @@ import 'firebase/storage';
13
12
  // models
14
13
  import { ConversationModel } from '../../models/conversation';
15
14
 
16
- // services
17
- import { ConversationsHandlerService } from '../abstract/conversations-handler.service';
18
-
19
-
20
15
  // utils
21
16
  import { avatarPlaceholder, getColorBck } from '../../utils/utils-user';
22
17
  import { compareValues, getFromNow, searchIndexInArrayForUid, archivedConversationsPathForUserId, isGroup } from '../../utils/utils';
23
- import { ImageRepoService } from '../abstract/image-repo.service';
24
- import { FirebaseImageRepoService } from './firebase-image-repo';
25
18
  import { ArchivedConversationsHandlerService } from '../abstract/archivedconversations-handler.service';
26
- import { CustomLogger } from '../logger/customLogger';
19
+ import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
27
20
  import { LoggerInstance } from '../logger/loggerInstance';
28
21
 
29
22
 
@@ -54,6 +47,8 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
54
47
  private logger: LoggerService = LoggerInstance.getInstance()
55
48
  private ref: firebase.database.Query;
56
49
 
50
+ private subscribe: any;
51
+
57
52
  constructor(
58
53
  //public databaseProvider: DatabaseProvider
59
54
  ) {
@@ -183,23 +178,33 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
183
178
  // this.BSConversationDetail.next(conversationSelected);
184
179
  } else {
185
180
  // const urlNodeFirebase = '/apps/' + this.tenant + '/users/' + this.loggedUserId + '/archived_conversations/' + conversationId;
186
- const urlNodeFirebase = archivedConversationsPathForUserId(this.tenant, this.loggedUserId) + '/' + conversationId;
181
+ const urlNodeFirebase = archivedConversationsPathForUserId(this.tenant, this.loggedUserId) // + '/' + conversationId;
187
182
  this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] urlNodeFirebase conversationDetail *****', urlNodeFirebase)
188
183
  const firebaseMessages = firebase.database().ref(urlNodeFirebase);
189
- firebaseMessages.on('value', (childSnapshot) => {
190
- const childData: ConversationModel = childSnapshot.val();
191
- this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] childData *****', childData)
192
- // if (childSnapshot && childSnapshot.key && childData.uid) {
193
- if (childSnapshot && childSnapshot.key && childData) {
194
- childData.uid = childSnapshot.key;
195
- const conversation = this.completeConversation(childData);
196
- if (conversation) {
197
- callback(conversation)
198
- } else {
199
- callback(null)
184
+ if(this.subscribe){
185
+ this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] getConversationDetail ALREADY SUBSCRIBED')
186
+ return;
187
+ }
188
+
189
+ this.subscribe = firebaseMessages.on('value', (snap) => {
190
+ const childSnapshot = snap.child('/'+conversationId)
191
+ if(!childSnapshot.exists()){
192
+ this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] getConversationDetail archived conversation NOT exist', conversationId)
193
+ callback(null)
194
+ } else {
195
+ const childData: ConversationModel = childSnapshot.val();
196
+ this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] getConversationDetail archived conversation exist', childData)
197
+ if (childSnapshot && childSnapshot.key && childData) {
198
+ childData.uid = childSnapshot.key;
199
+ const conversation = this.completeConversation(childData);
200
+ if (conversation) {
201
+ callback(conversation)
202
+ } else {
203
+ callback(null)
204
+ }
200
205
  }
206
+ // this.BSConversationDetail.next(conversation);
201
207
  }
202
- // this.BSConversationDetail.next(conversation);
203
208
  });
204
209
  }
205
210
  }