@chat21/chat21-ionic 3.0.78-rc.4 → 3.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -22
- package/package.json +1 -1
- package/src/app/app.component.scss +1 -2
- package/src/app/app.component.ts +1 -1
- package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +1 -8
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +10 -36
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +38 -106
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +2 -15
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +1 -1
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +1 -3
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +1 -5
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +15 -22
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +5 -25
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +1 -2
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +15 -14
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +5 -24
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +1 -6
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +13 -12
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +5 -26
- package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -2
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +6 -16
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +0 -2
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +52 -78
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +20 -60
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +10 -14
- package/src/app/components/canned-response/canned-response.component.html +4 -4
- package/src/app/components/canned-response/canned-response.component.scss +1 -1
- package/src/app/components/canned-response/canned-response.component.ts +0 -1
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -54
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +30 -61
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +25 -9
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
- package/src/app/components/ddp-header/ddp-header.component.html +1 -1
- package/src/app/components/ddp-header/ddp-header.component.scss +0 -4
- package/src/app/components/project-item/project-item.component.html +149 -98
- package/src/app/components/project-item/project-item.component.scss +32 -39
- package/src/app/components/project-item/project-item.component.ts +3 -5
- package/src/app/components/utils/user-presence/user-presence.component.html +1 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.html +14 -24
- package/src/app/pages/conversation-detail/conversation-detail.page.scss +3 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +43 -163
- package/src/app/pages/conversations-list/conversations-list.page.html +2 -2
- package/src/app/pages/conversations-list/conversations-list.page.scss +2 -2
- package/src/app/pages/conversations-list/conversations-list.page.ts +17 -8
- package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
- package/src/app/pages/loader-preview/loader-preview.page.scss +0 -4
- package/src/assets/i18n/ar.json +265 -268
- package/src/assets/i18n/az.json +0 -3
- package/src/assets/i18n/de.json +0 -3
- package/src/assets/i18n/en.json +0 -3
- package/src/assets/i18n/es.json +0 -3
- package/src/assets/i18n/fr.json +0 -3
- package/src/assets/i18n/it.json +0 -3
- package/src/assets/i18n/kk.json +0 -3
- package/src/assets/i18n/pt.json +0 -3
- package/src/assets/i18n/ru.json +0 -3
- package/src/assets/i18n/sr.json +0 -3
- package/src/assets/i18n/sv.json +0 -3
- package/src/assets/i18n/tr.json +0 -3
- package/src/assets/i18n/uk.json +0 -3
- package/src/assets/i18n/uz.json +0 -3
- package/src/chat21-core/providers/firebase/firebase-typing.service.ts +9 -7
- package/src/chat21-core/utils/constants.ts +0 -4
- package/src/chat21-core/utils/user-typing/user-typing.component.html +5 -8
- package/src/chat21-core/utils/user-typing/user-typing.component.scss +17 -87
- package/src/chat21-core/utils/user-typing/user-typing.component.ts +94 -12
- package/src/chat21-core/utils/utils.ts +1 -5
- package/src/global.scss +43 -47
- package/src/variables.scss +8 -19
package/src/assets/i18n/de.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Videoanruf",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Die Gruppe verlassen",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Nah dran",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Konversationsdetails öffnen",
|
|
48
47
|
"ALERT_TITLE": "Aufmerksamkeit!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "OK",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "ABBRECHEN",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Das Team antwortet normalerweise in $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Das Team wird so schnell wie möglich antworten",
|
|
166
165
|
"CLOSED": "ABGESCHLOSSEN",
|
|
167
|
-
"DIRECT_CHAT":"Direkter Chat",
|
|
168
|
-
"GROUP_CHAT":"Gruppenchat",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Bitte wählen Sie einen Chat aus, um die Nachrichtenübermittlung zu starten",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Vorschau",
|
package/src/assets/i18n/en.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Video call",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Leave the group",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Close",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Open conversation details",
|
|
48
47
|
"ALERT_TITLE": "Attention!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "OK",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "CANCEL",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "The team typically replies in $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "The team will reply as soon as possible",
|
|
166
165
|
"CLOSED": "CLOSED",
|
|
167
|
-
"DIRECT_CHAT":"Direct chat",
|
|
168
|
-
"GROUP_CHAT":"Group chat",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Please select a chat to start messaging",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Preview",
|
package/src/assets/i18n/es.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Videollamada",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Dejar el grupo",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Cerrar",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Abrir detalles de la conversación",
|
|
48
47
|
"ALERT_TITLE": "¡Atención!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "Ok",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "CANCAR",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "El equipo normalmente responde en $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "El equipo responderá lo antes posible",
|
|
166
165
|
"CLOSED": "CERRADO",
|
|
167
|
-
"DIRECT_CHAT":"Chat directo",
|
|
168
|
-
"GROUP_CHAT":"Grupo de chat",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Por favor, selecciona un chat para empezar a enviar mensajes",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Vista previa",
|
package/src/assets/i18n/fr.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Appel vidéo",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Quitter le groupe",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Fermer",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Ouvrir les détails de la conversation",
|
|
48
47
|
"ALERT_TITLE": "Attention!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "d'accord",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "ANNULER",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "L'équipe répond généralement en $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "L'équipe vous répondra dans les plus brefs délais",
|
|
166
165
|
"CLOSED": "FERMÉ",
|
|
167
|
-
"DIRECT_CHAT":"Chat direct",
|
|
168
|
-
"GROUP_CHAT":"Chat de groupe",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Veuillez sélectionner un chat pour commencer à envoyer des messages",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Aperçu",
|
package/src/assets/i18n/it.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Video chiamata",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Abbandona il gruppo",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Chiudi",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Apri i dettagli della conversazione",
|
|
48
47
|
"ALERT_TITLE": "Attenzione!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "OK",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "ANNULLA",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Il team tipicamente risponde in $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Vi risponderemo appena possibile",
|
|
166
165
|
"CLOSED": "CHIUSA",
|
|
167
|
-
"DIRECT_CHAT":"Chat diretta",
|
|
168
|
-
"GROUP_CHAT":"Chat di gruppo",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Seleziona una chat per iniziare a messaggiare",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Anteprima",
|
package/src/assets/i18n/kk.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Бейне қоңырау",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Топтан шығыңыз",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Жабық",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Әңгімелесу мәліметтерін ашыңыз",
|
|
48
47
|
"ALERT_TITLE": "Назар аударыңыз!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "ЖАРАЙДЫ МА",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "БАС ТАРТУ",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Топ әдетте $reply_time-мен жауап береді",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Команда мүмкіндігінше тезірек жауап береді",
|
|
166
165
|
"CLOSED": "ЖАБЫҚ",
|
|
167
|
-
"DIRECT_CHAT":"Тікелей чат",
|
|
168
|
-
"GROUP_CHAT":"Топтық чат",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Хабар алмасуды бастау үшін чатты таңдаңыз",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Алдын ала қарау",
|
package/src/assets/i18n/pt.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Videochamada",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Sair do grupo",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Fechar",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Abrir detalhes da conversa",
|
|
48
47
|
"ALERT_TITLE": "Atenção!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "OK",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "CANCELAR",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "A equipe normalmente responde em $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "A equipe responderá o mais rápido possível",
|
|
166
165
|
"CLOSED": "FECHADO",
|
|
167
|
-
"DIRECT_CHAT":"Bate-papo direto",
|
|
168
|
-
"GROUP_CHAT":"Conversa em grupo",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Selecione um bate-papo para começar a enviar mensagens",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Visualizar",
|
package/src/assets/i18n/ru.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Видеозвонок",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Выйти из группы",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Закрывать",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Открыть детали беседы",
|
|
48
47
|
"ALERT_TITLE": "Внимание!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "Ok",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "ОТМЕНИТЬ",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Команда обычно отвечает $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Команда ответит как можно скорее",
|
|
166
165
|
"CLOSED": "ЗАКРЫТО",
|
|
167
|
-
"DIRECT_CHAT":"Прямой чат",
|
|
168
|
-
"GROUP_CHAT":"Групповой чат",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Пожалуйста, выберите чат, чтобы начать обмен сообщениями",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Предварительный просмотр",
|
package/src/assets/i18n/sr.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Видео позив",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Напусти групу",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Затвори",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Отворите детаље разговора",
|
|
48
47
|
"ALERT_TITLE": "УПОЗОРЕЊЕ",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "ок",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "ПОНИШТИТИ, ОТКАЗАТИ",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Тим обично одговара у $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Тим ће одговорити у најкраћем могућем року",
|
|
166
165
|
"CLOSED": "ЗАТВОРЕНО",
|
|
167
|
-
"DIRECT_CHAT":"Директно ћаскање",
|
|
168
|
-
"GROUP_CHAT":"Групно ћаскање",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Изаберите ћаскање да бисте започели размену порука",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Преглед",
|
package/src/assets/i18n/sv.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Videosamtal",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Lämna gruppen",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Stänga",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Öppna konversationsinformation",
|
|
48
47
|
"ALERT_TITLE": "Uppmärksamhet!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "OK",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "ANNULLERA",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Teamet svarar vanligtvis med $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Teamet kommer att svara så snart som möjligt",
|
|
166
165
|
"CLOSED": "STÄNGD",
|
|
167
|
-
"DIRECT_CHAT":"Direkt chatt",
|
|
168
|
-
"GROUP_CHAT":"Gruppchatt",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Välj en chatt för att börja skicka meddelanden",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Förhandsvisning",
|
package/src/assets/i18n/tr.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Görüntülü arama",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Gruptan ayrıl",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Kapat",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Görüşme ayrıntılarını aç",
|
|
48
47
|
"ALERT_TITLE": "Dikkat!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "Tamam",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "İPTAL ET",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Ekip genellikle $reply_time",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Ekip en kısa sürede cevap verecektir",
|
|
166
165
|
"CLOSED": "KAPALI",
|
|
167
|
-
"DIRECT_CHAT":"Doğrudan sohbet",
|
|
168
|
-
"GROUP_CHAT":"Grup Sohbeti",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Mesajlaşmaya başlamak için lütfen bir sohbet seçin",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Ön izleme",
|
package/src/assets/i18n/uk.json
CHANGED
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"LABEL_VIDEO_CHAT": "Відеодзвінок",
|
|
45
45
|
"LABEL_LEAVE_GROUP": "Вийти з групи",
|
|
46
46
|
"LABEL_CLOSE_GROUP": "Закрити",
|
|
47
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Відкрити деталі розмови",
|
|
48
47
|
"ALERT_TITLE": "Увага!",
|
|
49
48
|
"CLOSE_ALERT_CONFIRM_LABEL": "добре",
|
|
50
49
|
"CLOSE_ALERT_CANCEL_LABEL": "СКАСУВАТИ",
|
|
@@ -164,8 +163,6 @@
|
|
|
164
163
|
"WAITING_TIME_FOUND": "Команда зазвичай відповідає $ час відповіді",
|
|
165
164
|
"WAITING_TIME_NOT_FOUND": "Команда відповість якомога швидше",
|
|
166
165
|
"CLOSED": "ЗАЧИНЕНО",
|
|
167
|
-
"DIRECT_CHAT":"Прямий чат",
|
|
168
|
-
"GROUP_CHAT":"Груповий чат",
|
|
169
166
|
"PleaseSelectChatToStartMessaging": "Виберіть чат, щоб почати обмін повідомленнями",
|
|
170
167
|
"FromThisAreNew": "------------------",
|
|
171
168
|
"Preview": "Попередній перегляд",
|
package/src/assets/i18n/uz.json
CHANGED
|
@@ -45,7 +45,6 @@
|
|
|
45
45
|
"LABEL_VIDEO_CHAT": "Video qo'ng'iroq",
|
|
46
46
|
"LABEL_LEAVE_GROUP": "Guruhni tark eting",
|
|
47
47
|
"LABEL_CLOSE_GROUP": "Yopish",
|
|
48
|
-
"LABEL_OPEN_INFO_CONVERSATION":"Suhbat tafsilotlarini oching",
|
|
49
48
|
"ALERT_TITLE": "Diqqat!",
|
|
50
49
|
"CLOSE_ALERT_CONFIRM_LABEL": "OK",
|
|
51
50
|
"CLOSE_ALERT_CANCEL_LABEL": "BEKOR",
|
|
@@ -165,8 +164,6 @@
|
|
|
165
164
|
"WAITING_TIME_FOUND": "Jamoa odatda $reply_timebilan javob beradi",
|
|
166
165
|
"WAITING_TIME_NOT_FOUND": "Jamoa imkon qadar tezroq javob beradi",
|
|
167
166
|
"CLOSED": "YOPIQ",
|
|
168
|
-
"DIRECT_CHAT":"To'g'ridan-to'g'ri suhbat",
|
|
169
|
-
"GROUP_CHAT":"Guruh suhbati",
|
|
170
167
|
"PleaseSelectChatToStartMessaging": "Xabar yozishni boshlash uchun chatni tanlang",
|
|
171
168
|
"FromThisAreNew": "------------------",
|
|
172
169
|
"Preview": "Ko‘rib chiqish",
|
|
@@ -12,11 +12,11 @@ import 'firebase/database';
|
|
|
12
12
|
import { TypingService } from '../abstract/typing.service';
|
|
13
13
|
import { CustomLogger } from '../logger/customLogger';
|
|
14
14
|
import { LoggerInstance } from '../logger/loggerInstance';
|
|
15
|
-
import { TIME_TYPING_MESSAGE } from 'src/chat21-core/utils/constants';
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
export class TypingModel {
|
|
19
18
|
|
|
19
|
+
|
|
20
20
|
constructor(
|
|
21
21
|
public uid: string,
|
|
22
22
|
public timestamp: any,
|
|
@@ -35,11 +35,14 @@ export class FirebaseTypingService extends TypingService {
|
|
|
35
35
|
BSIsTyping: BehaviorSubject<any> = new BehaviorSubject<any>(null);
|
|
36
36
|
BSSetTyping: BehaviorSubject<any> = new BehaviorSubject<any>(null);
|
|
37
37
|
|
|
38
|
+
// public params
|
|
39
|
+
// public tenant: string;
|
|
40
|
+
private tenant: string;
|
|
41
|
+
|
|
42
|
+
// private params
|
|
38
43
|
private urlNodeTypings: string;
|
|
39
44
|
private setTimeoutWritingMessages: any;
|
|
40
|
-
private tenant: string;
|
|
41
45
|
private logger: LoggerService = LoggerInstance.getInstance();
|
|
42
|
-
private ref: firebase.database.Query;
|
|
43
46
|
|
|
44
47
|
constructor() {
|
|
45
48
|
super();
|
|
@@ -61,11 +64,10 @@ export class FirebaseTypingService extends TypingService {
|
|
|
61
64
|
urlTyping = this.urlNodeTypings + idCurrentUser + '/' + idConversation;
|
|
62
65
|
}
|
|
63
66
|
this.logger.debug('[FIREBASETypingSERVICE] urlTyping: ', urlTyping);
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
const ref = firebase.database().ref(urlTyping);
|
|
68
|
+
ref.on('child_changed', (childSnapshot) => {
|
|
66
69
|
const precence: TypingModel = childSnapshot.val();
|
|
67
|
-
this.
|
|
68
|
-
this.BSIsTyping.next({uid: idConversation, uidUserTypingNow: precence.uid, nameUserTypingNow: precence.name, waitTime: TIME_TYPING_MESSAGE});
|
|
70
|
+
this.BSIsTyping.next({uid: idConversation, uidUserTypingNow: precence.uid, nameUserTypingNow: precence.name});
|
|
69
71
|
});
|
|
70
72
|
}
|
|
71
73
|
|
|
@@ -43,12 +43,8 @@ export const CHANNEL_TYPE_GROUP = 'group';
|
|
|
43
43
|
// TYPES MESSAGES
|
|
44
44
|
export const TYPE_MSG_TEXT = 'text';
|
|
45
45
|
export const TYPE_MSG_IMAGE = 'image';
|
|
46
|
-
export const TYPE_MSG_FILE = 'file';
|
|
47
|
-
export const TYPE_MSG_BUTTON = 'button';
|
|
48
|
-
|
|
49
46
|
export const MAX_WIDTH_IMAGES = 300;
|
|
50
47
|
export const MIN_WIDTH_IMAGES = 130;
|
|
51
|
-
export const TIME_TYPING_MESSAGE = 2000;
|
|
52
48
|
export const TYPE_DIRECT = 'direct';
|
|
53
49
|
export const TYPE_GROUP = 'group';
|
|
54
50
|
export const SYSTEM = 'system';
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
<div class="tile-typing-now"
|
|
2
|
-
<span *ngIf="nameUserTypingNow">
|
|
3
|
-
|
|
4
|
-
</
|
|
5
|
-
|
|
6
|
-
<div class="bounce1"></div>
|
|
7
|
-
<div class="bounce2"></div>
|
|
8
|
-
<div class="bounce3"></div>
|
|
1
|
+
<div class="tile-typing-now" [class.active]="isTyping">
|
|
2
|
+
<span *ngIf="nameUserTypingNow">
|
|
3
|
+
{{nameUserTypingNow}}
|
|
4
|
+
</span>
|
|
5
|
+
{{ translationMap?.get('LABEL_IS_WRITING') }}
|
|
9
6
|
</div>
|
|
@@ -1,24 +1,10 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--themeColor: rgb(240, 242, 247);
|
|
3
|
-
--foregroundColor: black;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
1
|
.tile-typing-now {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
margin: 0px;
|
|
15
|
-
padding: 0px;
|
|
16
|
-
font-size: 1.1em;
|
|
17
|
-
color: var(--foregroundColor);
|
|
18
|
-
//display: none;
|
|
19
|
-
// &.active {
|
|
20
|
-
// display: block;
|
|
21
|
-
// }
|
|
2
|
+
font-size: 12px;
|
|
3
|
+
background-color: #fff;
|
|
4
|
+
display: none;
|
|
5
|
+
&.active {
|
|
6
|
+
display: block;
|
|
7
|
+
}
|
|
22
8
|
}
|
|
23
9
|
|
|
24
10
|
/* BEGIN LOADING */
|
|
@@ -28,105 +14,49 @@
|
|
|
28
14
|
left: 0;
|
|
29
15
|
top: 0;
|
|
30
16
|
margin: 0;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
&.active {
|
|
18
|
+
display: inline-block;
|
|
19
|
+
width: 30px;
|
|
20
|
+
}
|
|
35
21
|
}
|
|
36
22
|
#tile-spinner > div {
|
|
37
23
|
width: 6px;
|
|
38
24
|
height: 6px;
|
|
39
25
|
background-color: var(--basic-blue);
|
|
40
26
|
}
|
|
41
|
-
// .spinner {
|
|
42
|
-
// margin: 100px auto 0;
|
|
43
|
-
// width: 70px;
|
|
44
|
-
// text-align: center;
|
|
45
|
-
// }
|
|
46
|
-
// .spinner > div {
|
|
47
|
-
// width: 18px;
|
|
48
|
-
// height: 18px;
|
|
49
|
-
// background-color: #333;
|
|
50
|
-
// border-radius: 100%;
|
|
51
|
-
// display: inline-block;
|
|
52
|
-
// -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
53
|
-
// animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
54
|
-
// }
|
|
55
|
-
// .spinner .bounce1 {
|
|
56
|
-
// -webkit-animation-delay: -0.32s;
|
|
57
|
-
// animation-delay: -0.32s;
|
|
58
|
-
// }
|
|
59
|
-
// .spinner .bounce2 {
|
|
60
|
-
// -webkit-animation-delay: -0.16s;
|
|
61
|
-
// animation-delay: -0.16s;
|
|
62
|
-
// }
|
|
63
|
-
// @-webkit-keyframes sk-bouncedelay {
|
|
64
|
-
// 0%, 80%, 100% { -webkit-transform: scale(0) }
|
|
65
|
-
// 40% { -webkit-transform: scale(1.0) }
|
|
66
|
-
// }
|
|
67
|
-
// @keyframes sk-bouncedelay {
|
|
68
|
-
// 0%, 80%, 100% {
|
|
69
|
-
// -webkit-transform: scale(0);
|
|
70
|
-
// transform: scale(0);
|
|
71
|
-
// } 40% {
|
|
72
|
-
// -webkit-transform: scale(1.0);
|
|
73
|
-
// transform: scale(1.0);
|
|
74
|
-
// }
|
|
75
|
-
// }
|
|
76
|
-
/* END LOADING */
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
/* ******BOUNCE SPINNER START****** */
|
|
80
27
|
.spinner {
|
|
81
|
-
margin:
|
|
28
|
+
margin: 100px auto 0;
|
|
82
29
|
width: 70px;
|
|
83
|
-
|
|
84
|
-
min-height: 20px;
|
|
85
|
-
display: block;
|
|
30
|
+
text-align: center;
|
|
86
31
|
}
|
|
87
|
-
|
|
88
32
|
.spinner > div {
|
|
89
|
-
width:
|
|
90
|
-
height:
|
|
33
|
+
width: 18px;
|
|
34
|
+
height: 18px;
|
|
91
35
|
background-color: #333;
|
|
92
|
-
|
|
93
36
|
border-radius: 100%;
|
|
94
37
|
display: inline-block;
|
|
95
38
|
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
96
39
|
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
97
40
|
}
|
|
98
|
-
|
|
99
41
|
.spinner .bounce1 {
|
|
100
42
|
-webkit-animation-delay: -0.32s;
|
|
101
43
|
animation-delay: -0.32s;
|
|
102
|
-
background-color: var(--themeColor)
|
|
103
44
|
}
|
|
104
|
-
|
|
105
45
|
.spinner .bounce2 {
|
|
106
46
|
-webkit-animation-delay: -0.16s;
|
|
107
47
|
animation-delay: -0.16s;
|
|
108
|
-
background-color: var(--themeColor);
|
|
109
|
-
opacity: 0.4
|
|
110
48
|
}
|
|
111
|
-
|
|
112
|
-
.spinner .bounce3 {
|
|
113
|
-
background-color: var(--themeColor);
|
|
114
|
-
opacity: 0.6
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
49
|
@-webkit-keyframes sk-bouncedelay {
|
|
119
50
|
0%, 80%, 100% { -webkit-transform: scale(0) }
|
|
120
51
|
40% { -webkit-transform: scale(1.0) }
|
|
121
52
|
}
|
|
122
|
-
|
|
123
53
|
@keyframes sk-bouncedelay {
|
|
124
54
|
0%, 80%, 100% {
|
|
125
|
-
|
|
126
|
-
|
|
55
|
+
-webkit-transform: scale(0);
|
|
56
|
+
transform: scale(0);
|
|
127
57
|
} 40% {
|
|
128
58
|
-webkit-transform: scale(1.0);
|
|
129
59
|
transform: scale(1.0);
|
|
130
60
|
}
|
|
131
61
|
}
|
|
132
|
-
/*
|
|
62
|
+
/* END LOADING */
|
|
@@ -1,31 +1,113 @@
|
|
|
1
|
-
import { Component, OnInit, OnDestroy, Input
|
|
1
|
+
import { Component, OnInit, OnDestroy, Input } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
// services
|
|
4
|
+
import { TypingService } from '../../providers/abstract/typing.service';
|
|
5
|
+
|
|
6
|
+
// Logger
|
|
7
|
+
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
8
|
+
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
2
9
|
|
|
3
10
|
@Component({
|
|
4
|
-
selector: 'user-typing',
|
|
11
|
+
selector: 'app-user-typing',
|
|
5
12
|
templateUrl: './user-typing.component.html',
|
|
6
13
|
styleUrls: ['./user-typing.component.scss'],
|
|
7
14
|
})
|
|
8
15
|
export class UserTypingComponent implements OnInit, OnDestroy {
|
|
9
16
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@Input() typingLocation: string = 'content'
|
|
17
|
+
@Input() idConversation: string;
|
|
18
|
+
@Input() idCurrentUser: string;
|
|
19
|
+
@Input() isDirect: boolean;
|
|
14
20
|
@Input() translationMap: Map<string, string>;
|
|
15
|
-
@Input()
|
|
16
|
-
@Input()
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
@Input() color: string;
|
|
22
|
+
@Input() membersConversation: [string];
|
|
23
|
+
|
|
24
|
+
public status = '';
|
|
25
|
+
public isTyping = false;
|
|
26
|
+
public nameUserTypingNow: string;
|
|
27
|
+
|
|
28
|
+
private setTimeoutWritingMessages: any;
|
|
29
|
+
private subscriptions = [];
|
|
30
|
+
|
|
31
|
+
private logger: LoggerService = LoggerInstance.getInstance();
|
|
19
32
|
|
|
20
|
-
constructor(
|
|
33
|
+
constructor(
|
|
34
|
+
public typingService: TypingService
|
|
35
|
+
) { }
|
|
21
36
|
|
|
22
37
|
/** */
|
|
23
38
|
ngOnInit() {
|
|
24
|
-
this.
|
|
39
|
+
this.logger.log('[USER-TYPING-COMPONENT] - ngOnInit');
|
|
40
|
+
this.initialize();
|
|
25
41
|
}
|
|
26
42
|
|
|
27
43
|
/** */
|
|
28
44
|
ngOnDestroy() {
|
|
45
|
+
this.logger.log('UserTypingComponent - ngOnDestroy');
|
|
46
|
+
// this.unsubescribeAll();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** */
|
|
50
|
+
initialize() {
|
|
51
|
+
this.status = ''; // this.translationMap.get('LABEL_AVAILABLE');
|
|
52
|
+
this.logger.log('this.translationMap', this.translationMap);
|
|
53
|
+
this.logger.log('this.status', this.status);
|
|
54
|
+
this.setSubscriptions();
|
|
55
|
+
this.typingService.isTyping(this.idConversation, this.idCurrentUser, this.isDirect);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** */
|
|
59
|
+
private setSubscriptions() {
|
|
60
|
+
const that = this;
|
|
61
|
+
const conversationSelected = this.subscriptions.find(item => item.key === this.idConversation);
|
|
62
|
+
if (!conversationSelected) {
|
|
63
|
+
const subscribeBSIsTyping = this.typingService.BSIsTyping.subscribe((data: any) => {
|
|
64
|
+
this.logger.log('***** BSIsTyping *****', data);
|
|
65
|
+
if (data) {
|
|
66
|
+
const isTypingUid = data.uid;
|
|
67
|
+
if (this.idConversation === isTypingUid) {
|
|
68
|
+
that.subscribeTypings(data);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
const subscribe = {key: this.idConversation, value: subscribeBSIsTyping };
|
|
73
|
+
this.subscriptions.push(subscribe);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** */
|
|
78
|
+
subscribeTypings(data: any) {
|
|
79
|
+
const that = this;
|
|
80
|
+
try {
|
|
81
|
+
const key = data.uidUserTypingNow;
|
|
82
|
+
this.nameUserTypingNow = null;
|
|
83
|
+
if (data.nameUserTypingNow) {
|
|
84
|
+
this.nameUserTypingNow = data.nameUserTypingNow;
|
|
85
|
+
}
|
|
86
|
+
this.logger.log('subscribeTypings data:', data);
|
|
87
|
+
const userTyping = this.membersConversation.includes(key);
|
|
88
|
+
if ( !userTyping ) {
|
|
89
|
+
this.isTyping = true;
|
|
90
|
+
this.logger.log('child_changed key', key);
|
|
91
|
+
this.logger.log('child_changed name', this.nameUserTypingNow);
|
|
92
|
+
clearTimeout(this.setTimeoutWritingMessages);
|
|
93
|
+
this.setTimeoutWritingMessages = setTimeout(() => {
|
|
94
|
+
that.isTyping = false;
|
|
95
|
+
}, 2000);
|
|
96
|
+
}
|
|
97
|
+
} catch (error) {
|
|
98
|
+
this.logger.log('error: ', error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
/** */
|
|
104
|
+
private unsubescribeAll() {
|
|
105
|
+
this.logger.log('UserTypingComponent unsubescribeAll: ', this.subscriptions);
|
|
106
|
+
this.subscriptions.forEach((subscription: any) => {
|
|
107
|
+
this.logger.log('unsubescribe: ', subscription);
|
|
108
|
+
subscription.unsubescribe();
|
|
109
|
+
});
|
|
110
|
+
this.subscriptions = [];
|
|
29
111
|
}
|
|
30
112
|
|
|
31
113
|
|
|
@@ -590,10 +590,8 @@ export function setConversationAvatar(
|
|
|
590
590
|
conversationWith: string,
|
|
591
591
|
conversationWithFullname: string,
|
|
592
592
|
conversationChannelType: string,
|
|
593
|
-
projectId?: string,
|
|
594
|
-
project_name?: string,
|
|
595
593
|
width?: string,
|
|
596
|
-
height?: string
|
|
594
|
+
height?: string
|
|
597
595
|
): any {
|
|
598
596
|
const conversationWidth = (width) ? width : '40px';
|
|
599
597
|
const conversationHeight = (height) ? height : '40px';
|
|
@@ -604,8 +602,6 @@ export function setConversationAvatar(
|
|
|
604
602
|
channelType: conversationChannelType,
|
|
605
603
|
avatar: avatarPlaceholder(conversationWithFullname),
|
|
606
604
|
color: getColorBck(conversationWithFullname),
|
|
607
|
-
projectId: projectId,
|
|
608
|
-
project_name: project_name,
|
|
609
605
|
width: conversationWidth,
|
|
610
606
|
height: conversationHeight
|
|
611
607
|
};
|