@chat21/chat21-ionic 3.0.78 → 3.0.79-rc.2
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 +41 -1
- package/package.json +1 -1
- package/src/app/app.component.scss +2 -1
- package/src/app/app.component.ts +52 -7
- package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -10
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +110 -38
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +15 -2
- 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 +3 -1
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +5 -1
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +22 -15
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +25 -5
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +2 -1
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +14 -15
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +24 -5
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +6 -1
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +12 -13
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +26 -5
- 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 +16 -6
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +2 -0
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +78 -52
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +62 -20
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
- 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 +1 -0
- package/src/app/components/contacts-directory/contacts-directory.component.html +22 -26
- package/src/app/components/contacts-directory/contacts-directory.component.scss +8 -6
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -42
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +98 -61
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +9 -25
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
- package/src/app/components/conversation-info/info-content/info-content.component.html +2 -1
- package/src/app/components/conversation-info/info-content/info-content.component.ts +3 -2
- package/src/app/components/conversation-info/info-direct/info-direct.component.html +1 -9
- package/src/app/components/conversation-info/info-direct/info-direct.component.ts +0 -2
- package/src/app/components/conversation-info/info-group/info-group.component.html +44 -108
- package/src/app/components/conversation-info/info-group/info-group.component.scss +101 -61
- package/src/app/components/conversation-info/info-group/info-group.component.ts +1 -0
- package/src/app/components/{ddp-header/ddp-header.component.html → conversations-list/header-conversations-list/header-conversations-list.component.html} +2 -2
- package/src/app/components/{ddp-header/ddp-header.component.scss → conversations-list/header-conversations-list/header-conversations-list.component.scss} +16 -4
- package/src/app/components/{ddp-header/ddp-header.component.spec.ts → conversations-list/header-conversations-list/header-conversations-list.component.spec.ts} +6 -6
- package/src/app/components/{ddp-header/ddp-header.component.ts → conversations-list/header-conversations-list/header-conversations-list.component.ts} +7 -16
- package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +12 -0
- package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +14 -0
- package/src/app/components/{conversation-detail/option-header/option-header.component.spec.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.spec.ts} +5 -5
- package/src/app/components/{conversation-detail/option-header/option-header.component.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.ts} +5 -4
- package/src/app/components/project-item/project-item.component.html +98 -149
- package/src/app/components/project-item/project-item.component.scss +39 -32
- package/src/app/components/project-item/project-item.component.ts +5 -3
- package/src/app/components/utils/user-presence/user-presence.component.html +7 -2
- package/src/app/components/utils/user-presence/user-presence.component.scss +35 -18
- package/src/app/components/utils/user-presence/user-presence.component.ts +6 -10
- package/src/app/pages/contacts-directory/contacts-directory.page.html +1 -1
- package/src/app/pages/contacts-directory/contacts-directory.page.scss +41 -0
- package/src/app/pages/contacts-directory/contacts-directory.page.ts +2 -0
- package/src/app/pages/conversation-detail/conversation-detail.page.html +40 -23
- package/src/app/pages/conversation-detail/conversation-detail.page.scss +40 -250
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +165 -46
- package/src/app/pages/conversations-list/conversations-list.page.html +11 -8
- package/src/app/pages/conversations-list/conversations-list.page.scss +10 -2
- package/src/app/pages/conversations-list/conversations-list.page.ts +22 -17
- package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
- package/src/app/pages/loader-preview/loader-preview.page.scss +4 -0
- package/src/app/pages/profile-info/profile-info.page.html +2 -4
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +1 -1
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +42 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +1 -0
- package/src/app/shared/shared.module.ts +24 -24
- package/src/assets/i18n/ar.json +270 -265
- package/src/assets/i18n/az.json +5 -0
- package/src/assets/i18n/de.json +5 -0
- package/src/assets/i18n/en.json +5 -0
- package/src/assets/i18n/es.json +5 -0
- package/src/assets/i18n/fr.json +5 -0
- package/src/assets/i18n/it.json +5 -0
- package/src/assets/i18n/kk.json +5 -0
- package/src/assets/i18n/pt.json +5 -0
- package/src/assets/i18n/ru.json +5 -0
- package/src/assets/i18n/sr.json +5 -0
- package/src/assets/i18n/sv.json +5 -0
- package/src/assets/i18n/tr.json +5 -0
- package/src/assets/i18n/uk.json +5 -0
- package/src/assets/i18n/uz.json +5 -0
- package/src/assets/sounds/wheep-wheep.mp3 +0 -0
- package/src/chat21-core/providers/firebase/firebase-typing.service.ts +7 -9
- package/src/chat21-core/utils/constants.ts +5 -1
- package/src/chat21-core/utils/user-typing/user-typing.component.html +8 -5
- package/src/chat21-core/utils/user-typing/user-typing.component.scss +87 -17
- package/src/chat21-core/utils/user-typing/user-typing.component.ts +12 -94
- package/src/chat21-core/utils/utils.ts +9 -1
- package/src/global.scss +47 -43
- package/src/variables.scss +26 -9
- package/src/app/components/conversation-detail/option-header/option-header.component.html +0 -13
- package/src/app/components/conversation-detail/option-header/option-header.component.scss +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,49 @@
|
|
|
1
1
|
# chat21-ionic ver 3.0
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
### 3.0.79-rc.2
|
|
4
|
+
- added: new sound if new conversation is triggered in agent's chat
|
|
5
|
+
- changed: header UI of header-conversation-detail and unassigned-conversations components
|
|
6
|
+
|
|
7
|
+
### 3.0.79-rc.1
|
|
8
|
+
- added: LABEL_ONLINE, LABEL_OFFLINE translations
|
|
9
|
+
- changed: renamed ddp-header with conversations-list-header
|
|
10
|
+
- changed: unified control to mobile/desktop app
|
|
11
|
+
- changed: LABEL_AVAILABLE/NOT_AVAILABLE with LABEL_ONLINE/OFFLINE in user-presence component
|
|
12
|
+
- changed: icon to user-presence
|
|
13
|
+
- changed: UI for conversation-list, conversation-detail and info-group for desktop and mobile
|
|
14
|
+
- changed: renamed option-header component with header-conversations-list-archived
|
|
15
|
+
- changed: contacts-directory UI
|
|
16
|
+
- bug-fixed: if app is opened and user press width expand, move correctly the right position
|
|
17
|
+
|
|
18
|
+
## 3.0.78 in PROD
|
|
4
19
|
- bug-fixed: unassigned request not sound the if is the first at all
|
|
5
20
|
- bug-fixed: canned responses opens in incorrect mode
|
|
6
21
|
|
|
22
|
+
### 3.0.78-rc.4
|
|
23
|
+
- bug-fixed: unassigned request not sound the if is the first at all
|
|
24
|
+
- bug-fixed: translations missed
|
|
25
|
+
- bug-fixed: direct info not showed in conversation-header component
|
|
26
|
+
- removed: conversation-footer border top
|
|
27
|
+
- changed: colors to message-text-area icons and message-attachment components
|
|
28
|
+
|
|
29
|
+
### 3.0.78-rc.3
|
|
30
|
+
- changed: user-typing location moved from conversation-header to conversation-detail component
|
|
31
|
+
- changed: replace includes with startsWith for check what type of conversation is in project info conversation-list component
|
|
32
|
+
- added: styleMap integrations to some elements
|
|
33
|
+
- bug-fixed: no tooltip showed if no unserved request are present
|
|
34
|
+
|
|
35
|
+
### 3.0.78-rc.2
|
|
36
|
+
- changed: project item UI and tooltip msg
|
|
37
|
+
- changed: conversation UI in conversations list component
|
|
38
|
+
- changed: conversation detail header component
|
|
39
|
+
- added: open/close info-conversation moved from conversation-header to conversation detail component
|
|
40
|
+
- bug-fixed: canned responses opens in incorrect mode
|
|
41
|
+
|
|
42
|
+
### 3.0.78-rc.1
|
|
43
|
+
- changed: conversation-list page width increased
|
|
44
|
+
- changed: background changed in info-message component
|
|
45
|
+
- changed: project-item UI
|
|
46
|
+
- changed: conversation-list page UI
|
|
7
47
|
|
|
8
48
|
## 3.0.77 in PROD
|
|
9
49
|
|
package/package.json
CHANGED
package/src/app/app.component.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { tranlatedLanguage, URL_SOUND_LIST_CONVERSATION } from './../chat21-core/utils/constants';
|
|
1
|
+
import { tranlatedLanguage, URL_SOUND_CONVERSATION_ADDED, URL_SOUND_LIST_CONVERSATION } from './../chat21-core/utils/constants';
|
|
2
2
|
import { ArchivedConversationsHandlerService } from 'src/chat21-core/providers/abstract/archivedconversations-handler.service';
|
|
3
3
|
import { AppStorageService } from 'src/chat21-core/providers/abstract/app-storage.service';
|
|
4
4
|
|
|
@@ -86,11 +86,13 @@ export class AppComponent implements OnInit {
|
|
|
86
86
|
public authModal: any;
|
|
87
87
|
|
|
88
88
|
private audio: any;
|
|
89
|
+
private audio_NewConv: any;
|
|
89
90
|
private setIntervalTime: any;
|
|
90
91
|
private setTimeoutSound: any;
|
|
91
92
|
private isTabVisible: boolean = true;
|
|
92
93
|
private isSoundEnabled: boolean;
|
|
93
94
|
private hasPlayed: boolean;
|
|
95
|
+
private hasPlayedConversation: boolean;
|
|
94
96
|
private tabTitle: string;
|
|
95
97
|
private setTimeoutConversationsEvent: any;
|
|
96
98
|
private logger: LoggerService = LoggerInstance.getInstance();
|
|
@@ -831,6 +833,10 @@ export class AppComponent implements OnInit {
|
|
|
831
833
|
this.audio.src = chatBaseUrl + URL_SOUND_LIST_CONVERSATION;
|
|
832
834
|
this.audio.load();
|
|
833
835
|
|
|
836
|
+
this.audio_NewConv = new Audio();
|
|
837
|
+
this.audio_NewConv.src = chatBaseUrl + URL_SOUND_CONVERSATION_ADDED;
|
|
838
|
+
this.audio_NewConv.load();
|
|
839
|
+
|
|
834
840
|
const sound_status = localStorage.getItem('dshbrd----sound')
|
|
835
841
|
if(sound_status && sound_status !== 'undefined'){
|
|
836
842
|
this.isSoundEnabled = sound_status === 'enabled'? true: false
|
|
@@ -840,7 +846,7 @@ export class AppComponent implements OnInit {
|
|
|
840
846
|
|
|
841
847
|
}
|
|
842
848
|
|
|
843
|
-
private manageTabNotification(badgeNotificationCount?: number) {
|
|
849
|
+
private manageTabNotification(sound_type: string, badgeNotificationCount?: number) {
|
|
844
850
|
if (!this.isTabVisible) {
|
|
845
851
|
// TAB IS HIDDEN --> manage title and SOUND
|
|
846
852
|
let badgeNewConverstionNumber = badgeNotificationCount? badgeNotificationCount : this.conversationsHandlerService.countIsNew()
|
|
@@ -864,7 +870,9 @@ export class AppComponent implements OnInit {
|
|
|
864
870
|
this.isSoundEnabled = sound_status === 'enabled'? true: false
|
|
865
871
|
}
|
|
866
872
|
this.logger.debug('[APP-COMP] manageTabNotification can saund?', this.isInitialized, this.isSoundEnabled)
|
|
867
|
-
if(this.isInitialized && this.isSoundEnabled)
|
|
873
|
+
if(this.isInitialized && this.isSoundEnabled) {
|
|
874
|
+
sound_type === 'conv_added'? this.soundConversationAdded(): this.soundMessage();
|
|
875
|
+
}
|
|
868
876
|
}
|
|
869
877
|
|
|
870
878
|
soundMessage() {
|
|
@@ -880,7 +888,7 @@ export class AppComponent implements OnInit {
|
|
|
880
888
|
// }, 4000);
|
|
881
889
|
|
|
882
890
|
//play sound every 4s from the fist time you receive a conversation added/changed
|
|
883
|
-
if(!this.hasPlayed){
|
|
891
|
+
if(!this.hasPlayed && !this.hasPlayedConversation){
|
|
884
892
|
that.audio.play().then(() => {
|
|
885
893
|
that.hasPlayed = true
|
|
886
894
|
that.logger.debug('[APP-COMP] ****** soundMessage played *****');
|
|
@@ -892,6 +900,22 @@ export class AppComponent implements OnInit {
|
|
|
892
900
|
});
|
|
893
901
|
}
|
|
894
902
|
}
|
|
903
|
+
|
|
904
|
+
soundConversationAdded(){
|
|
905
|
+
const that = this;
|
|
906
|
+
console.log('soundConversationAdded ENABLEDDDD-->', this.hasPlayed)
|
|
907
|
+
if(!this.hasPlayedConversation ){
|
|
908
|
+
that.audio_NewConv.play().then(() => {
|
|
909
|
+
that.hasPlayedConversation = true
|
|
910
|
+
that.logger.debug('[APP-COMP] ****** soundConversationAdded played *****');
|
|
911
|
+
setTimeout(() => {
|
|
912
|
+
that.hasPlayedConversation = false
|
|
913
|
+
}, 4000);
|
|
914
|
+
}).catch((error: any) => {
|
|
915
|
+
that.logger.error('[APP-COMP] ***soundConversationAdded error*', error);
|
|
916
|
+
});
|
|
917
|
+
}
|
|
918
|
+
}
|
|
895
919
|
/**---------------- SOUND FUNCTIONS --> END <--- +*/
|
|
896
920
|
/***************************************************+*/
|
|
897
921
|
|
|
@@ -943,7 +967,7 @@ export class AppComponent implements OnInit {
|
|
|
943
967
|
this.conversationsHandlerService.conversationAdded.subscribe((conversation: ConversationModel) => {
|
|
944
968
|
// this.logger.log('[APP-COMP] ***** subscribeConversationAdded *****', conversation);
|
|
945
969
|
if (conversation && conversation.is_new === true) {
|
|
946
|
-
this.manageTabNotification()
|
|
970
|
+
this.manageTabNotification('conv_added')
|
|
947
971
|
}
|
|
948
972
|
if(conversation) this.updateConversationsOnStorage()
|
|
949
973
|
});
|
|
@@ -961,7 +985,7 @@ export class AppComponent implements OnInit {
|
|
|
961
985
|
this.logger.log('[APP-COMP] ***** subscribeConversationChangedDetailed currentUser: ', currentUser);
|
|
962
986
|
if (changes.value && changes.value.sender !== currentUser.uid) {
|
|
963
987
|
if(changes.value.is_new === changes.previousValue.is_new){
|
|
964
|
-
this.manageTabNotification();
|
|
988
|
+
this.manageTabNotification('new_message');
|
|
965
989
|
}
|
|
966
990
|
}
|
|
967
991
|
}
|
|
@@ -1148,7 +1172,7 @@ export class AppComponent implements OnInit {
|
|
|
1148
1172
|
|
|
1149
1173
|
subscribeUnservedRequestCount = (unservedRequestCount) => {
|
|
1150
1174
|
if(unservedRequestCount && unservedRequestCount > 0){
|
|
1151
|
-
this.logger.debug("
|
|
1175
|
+
this.logger.debug("appIsInitialized::::",this.isInitialized)
|
|
1152
1176
|
if(this.isInitialized){
|
|
1153
1177
|
this.manageTabNotification(unservedRequestCount) //sound and alternate title
|
|
1154
1178
|
}
|
|
@@ -1325,5 +1349,26 @@ export class AppComponent implements OnInit {
|
|
|
1325
1349
|
this.isSoundEnabled = event.newValue === 'enabled'? true: false
|
|
1326
1350
|
}
|
|
1327
1351
|
}
|
|
1352
|
+
|
|
1353
|
+
|
|
1354
|
+
// @HostListener('mouseenter', ['$event'])
|
|
1355
|
+
// onMouseEnter(event: any) {
|
|
1356
|
+
// console.log('HostListener onMouseEnter-->', event)
|
|
1357
|
+
// }
|
|
1358
|
+
|
|
1359
|
+
// @HostListener('mouseleave', ['$event'])
|
|
1360
|
+
// onMouseLeave(event: any) {
|
|
1361
|
+
// console.log('HostListener onMouseLeave-->', event)
|
|
1362
|
+
// }
|
|
1363
|
+
|
|
1364
|
+
// @HostListener('focus', ['$event'])
|
|
1365
|
+
// onFocus(event: any) {
|
|
1366
|
+
// console.log('HostListener onFocus-->', event)
|
|
1367
|
+
// }
|
|
1368
|
+
|
|
1369
|
+
// @HostListener('blur', ['$event'])
|
|
1370
|
+
// onBlur(event: any) {
|
|
1371
|
+
// console.log('HostListener onBlur-->', event)
|
|
1372
|
+
// }
|
|
1328
1373
|
}
|
|
1329
1374
|
|
package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts
CHANGED
|
@@ -17,11 +17,18 @@ export class ConversationContentComponent implements OnInit {
|
|
|
17
17
|
@Input() messages: MessageModel[]
|
|
18
18
|
@Input() senderId: string;
|
|
19
19
|
@Input() baseLocation: string;
|
|
20
|
+
@Input() isConversationArchived: boolean;
|
|
21
|
+
@Input() isTypings: boolean;
|
|
22
|
+
@Input() idUserTypingNow: string;
|
|
23
|
+
@Input() nameUserTypingNow: string;
|
|
24
|
+
@Input() typingLocation: string;
|
|
25
|
+
@Input() fullscreenMode: boolean;
|
|
20
26
|
@Input() translationMap: Map<string, string>;
|
|
21
27
|
@Input() stylesMap: Map<string, string>;
|
|
22
28
|
@Output() onBeforeMessageRender = new EventEmitter();
|
|
23
29
|
@Output() onAfterMessageRender = new EventEmitter();
|
|
24
|
-
@Output() onMenuOptionShow = new EventEmitter();
|
|
30
|
+
@Output() onMenuOptionShow = new EventEmitter<boolean>();
|
|
31
|
+
@Output() onEmojiiPickerShow = new EventEmitter<boolean>()
|
|
25
32
|
@Output() onAttachmentButtonClicked = new EventEmitter();
|
|
26
33
|
@Output() onScrollContent = new EventEmitter();
|
|
27
34
|
|
|
@@ -52,8 +52,19 @@
|
|
|
52
52
|
<!-- ----------------------------------------------------------- -->
|
|
53
53
|
<!-- nk - no tag ionic -->
|
|
54
54
|
<!-- ----------------------------------------------------------- -->
|
|
55
|
+
<div class="manage_conversation_info_container" [ngClass]="{'close': !openInfoConversation, 'mobile': isMobile}">
|
|
56
|
+
<ion-button fill="clear" *ngIf="openInfoConversation" (click)="onOpenCloseInfoConversationFN()">
|
|
57
|
+
<ion-icon name="arrow-forward-outline"></ion-icon>
|
|
58
|
+
{{translationMap.get('LABEL_CLOSE_GROUP')}}
|
|
59
|
+
</ion-button>
|
|
60
|
+
<ion-button fill="clear" *ngIf="!openInfoConversation" (click)="onOpenCloseInfoConversationFN()">
|
|
61
|
+
<ion-icon name="arrow-back-outline"></ion-icon>
|
|
62
|
+
{{translationMap.get('LABEL_OPEN_INFO_CONVERSATION')}}
|
|
63
|
+
</ion-button>
|
|
64
|
+
</div>
|
|
55
65
|
|
|
56
66
|
<div class="conversation-wpr" style="height: 100%;">
|
|
67
|
+
|
|
57
68
|
<div *ngFor="let message of messages; let i = index; let first = first; trackBy: trackByFn">
|
|
58
69
|
|
|
59
70
|
<ng-container *ngIf="first || (messages[i - 1].timestamp | date:'d') !== (message.timestamp | date:'d')">
|
|
@@ -81,9 +92,12 @@
|
|
|
81
92
|
<chat-bubble-message class="messages msg_sent" id="message_msg_sent" style="position: relative;"
|
|
82
93
|
[ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
|
|
83
94
|
[class.emoticon]="isEmojii(message?.text)"
|
|
95
|
+
[ngStyle]="{'background': stylesMap.get('bubbleSentBackground'), 'color': stylesMap.get('bubbleSentTextColor')}"
|
|
84
96
|
[ngClass]="{'button-in-msg' : message.metadata && message.metadata.button}"
|
|
85
97
|
[message]="message"
|
|
86
|
-
[
|
|
98
|
+
[fontColor]="stylesMap.get('bubbleSentTextColor')"
|
|
99
|
+
[fontSize]="stylesMap.get('fontSize')"
|
|
100
|
+
[fontFamily]="stylesMap.get('fontFamily')"
|
|
87
101
|
[addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
|
|
88
102
|
[areVisibleCAR]="areVisibleCAR"
|
|
89
103
|
[supportMode]="supportMode"
|
|
@@ -106,8 +120,6 @@
|
|
|
106
120
|
class="message_sender_fullname">
|
|
107
121
|
{{message.sender_fullname}}
|
|
108
122
|
</div>
|
|
109
|
-
|
|
110
|
-
|
|
111
123
|
<div role="messaggio" *ngIf="messageType(MESSAGE_TYPE_OTHERS, message)" class="msg_container base_receive">
|
|
112
124
|
|
|
113
125
|
<!-- <chat-avatar-image class="slide-in-left"
|
|
@@ -121,8 +133,11 @@
|
|
|
121
133
|
<chat-bubble-message class="messages msg_receive" id="message_msg_receive" style="position: relative;"
|
|
122
134
|
[ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
|
|
123
135
|
[class.emoticon]="isEmojii(message?.text)"
|
|
136
|
+
[ngStyle]="{'background': stylesMap?.get('bubbleReceivedBackground'), 'color': stylesMap.get('bubbleReceivedTextColor')}"
|
|
124
137
|
[message]="message"
|
|
125
|
-
[
|
|
138
|
+
[fontColor]="stylesMap?.get('bubbleReceivedTextColor')"
|
|
139
|
+
[fontSize]="stylesMap?.get('fontSize')"
|
|
140
|
+
[fontFamily]="stylesMap?.get('fontFamily')"
|
|
126
141
|
[addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
|
|
127
142
|
[areVisibleCAR]="areVisibleCAR"
|
|
128
143
|
[supportMode]="supportMode"
|
|
@@ -147,15 +162,26 @@
|
|
|
147
162
|
|
|
148
163
|
<!-- uploadProgress -> {{ uploadProgress }} -->
|
|
149
164
|
<div *ngIf="uploadProgress !== 100" class="msg_container base_sent" style="margin-right: 20px;">
|
|
150
|
-
<div class="
|
|
151
|
-
<div class="
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
</div>
|
|
165
|
+
<div class="chat21-spinner active" id="chat21-spinner" style="margin: 0px 6px 0px;">
|
|
166
|
+
<div class="chat21-bounce1" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
|
|
167
|
+
<div class="chat21-bounce2" [ngStyle]="{'background-color': stylesMap.get('themeColor'), 'opacity': 0.4}"></div>
|
|
168
|
+
<div class="chat21-bounce3" [ngStyle]="{'background-color': stylesMap.get('themeColor'), 'opacity': 0.6}"></div>
|
|
169
|
+
<!-- <span [ngStyle]="{'color': stylesMap.get('themeColor')}">{{translationMap.get('LABEL_LOADING')}}</span> -->
|
|
156
170
|
</div>
|
|
157
171
|
</div>
|
|
158
172
|
|
|
173
|
+
<div *ngIf="isTypings" class="msg_container base_receive typing_container">
|
|
174
|
+
<!-- !isSameSender(idUserTypingNow, i) -->
|
|
175
|
+
<!-- <div *ngIf="nameUserTypingNow">{{nameUserTypingNow}}</div> -->
|
|
176
|
+
<user-typing
|
|
177
|
+
[themeColor]="stylesMap?.get('themeColor')"
|
|
178
|
+
[translationMap]="translationMap"
|
|
179
|
+
[idUserTypingNow]="idUserTypingNow"
|
|
180
|
+
[nameUserTypingNow]="nameUserTypingNow">
|
|
181
|
+
</user-typing>
|
|
182
|
+
<div class="typing_info" *ngIf="nameUserTypingNow"> {{nameUserTypingNow}} {{translationMap.get('LABEL_IS_WRITING')}}</div>
|
|
183
|
+
</div>
|
|
184
|
+
|
|
159
185
|
</div>
|
|
160
186
|
|
|
161
187
|
<!-- fileType > {{fileType }} uploadProgress {{uploadProgress}} -->
|
|
@@ -33,6 +33,56 @@
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
.manage_conversation_info_container{
|
|
37
|
+
height: 34px;
|
|
38
|
+
display: flex;
|
|
39
|
+
-webkit-box-align: center;
|
|
40
|
+
align-items: center;
|
|
41
|
+
position: fixed;
|
|
42
|
+
transition: transform 300ms ease-in-out 0s;
|
|
43
|
+
transform: translate(0px);
|
|
44
|
+
right: 300px;
|
|
45
|
+
top: 60px;
|
|
46
|
+
z-index:10;
|
|
47
|
+
background: linear-gradient(to right, rgba(226, 232, 239, 0) 128px, rgb(226, 232, 239) 128px);
|
|
48
|
+
|
|
49
|
+
&.close{
|
|
50
|
+
right: 0px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&.mobile{
|
|
54
|
+
right: 0px;
|
|
55
|
+
}
|
|
56
|
+
&:not(.mobile){
|
|
57
|
+
right: calc(300px + var(--padding-conversation-detail));
|
|
58
|
+
top: calc(60px + var(--padding-conversation-detail));
|
|
59
|
+
}
|
|
60
|
+
&::before{
|
|
61
|
+
content: "";
|
|
62
|
+
width: 102px;
|
|
63
|
+
height: 34px;
|
|
64
|
+
background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMTAyIDM0IiB3aWR0aD0iMTAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHBhdGggZD0ibTEwMiAwaC0xMDJsLjA3MTQwOC40MTk3NTNjMTEuMzE5MTkyLS4wMTU1NTggMjIuMjg4MTkyIDMuOTIwMzM3IDMxLjAxMjA5MiAxMS4xMjc2NDdsNy40ODk0IDYuNTAyIDEuNjUwOCAxLjQyMjkgNi42OTU1IDUuNzhjNi41Mzc0IDUuNjQwNSAxNC44ODU3IDguNzQ1MSAyMy41MjI3IDguNzQ3N2gzMS41NTQxeiIKICAgICAgICAgIGZpbGw9IiNlMmU4ZWYiLz4KPC9zdmc+);
|
|
65
|
+
position: relative;
|
|
66
|
+
left: 50px;
|
|
67
|
+
z-index: -1;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
ion-button {
|
|
71
|
+
text-transform: unset;
|
|
72
|
+
color: var(--basic-blue);
|
|
73
|
+
&:hover {
|
|
74
|
+
--background-hover: transparent;
|
|
75
|
+
text-decoration: underline;
|
|
76
|
+
text-decoration-color: var(--basic-blue);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
ion-icon{
|
|
81
|
+
margin: 5px;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
36
86
|
ion-item {
|
|
37
87
|
--padding-end: 0px;
|
|
38
88
|
--inner-padding-end: 0px;
|
|
@@ -60,12 +110,33 @@ ion-item {
|
|
|
60
110
|
|
|
61
111
|
.message_sender_fullname {
|
|
62
112
|
font-size: 0.9em;
|
|
63
|
-
margin: 0 0 1px
|
|
113
|
+
margin: 0 0 1px 20px;
|
|
64
114
|
// color: var(--gray);
|
|
65
115
|
font-weight: 500;
|
|
66
116
|
color: #080f1a;
|
|
67
117
|
}
|
|
68
118
|
|
|
119
|
+
.typing_container{
|
|
120
|
+
display:flex;
|
|
121
|
+
align-items: center;
|
|
122
|
+
|
|
123
|
+
user-typing {
|
|
124
|
+
text-align: right;
|
|
125
|
+
}
|
|
126
|
+
.typing_info{
|
|
127
|
+
color: var(--basic-gray);
|
|
128
|
+
margin-left: 10px;
|
|
129
|
+
font-size: 12px;
|
|
130
|
+
animation: blinker 1s linear infinite;
|
|
131
|
+
|
|
132
|
+
@keyframes blinker {
|
|
133
|
+
50% {
|
|
134
|
+
opacity: 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
69
140
|
.messages {
|
|
70
141
|
border-radius: 18px;
|
|
71
142
|
padding: 0;
|
|
@@ -113,7 +184,7 @@ ion-item {
|
|
|
113
184
|
/** recive message **/
|
|
114
185
|
.base_receive {
|
|
115
186
|
// padding: 0px 0px 6px 0px;
|
|
116
|
-
padding: 0px 0px 15px
|
|
187
|
+
padding: 0px 0px 15px 10px; // edited to display the date at the bottom of the "message bubble"
|
|
117
188
|
/* avatar */
|
|
118
189
|
.content-avatar {
|
|
119
190
|
position: relative;
|
|
@@ -142,8 +213,8 @@ ion-item {
|
|
|
142
213
|
}
|
|
143
214
|
/* message */
|
|
144
215
|
.msg_receive {
|
|
145
|
-
background-color: var(--
|
|
146
|
-
color:
|
|
216
|
+
background-color: var(--bck-msg-received);
|
|
217
|
+
color: var(--col-msg-received);
|
|
147
218
|
// max-width: 260px;
|
|
148
219
|
max-width: calc(100% - 70px);
|
|
149
220
|
min-width: 14px;
|
|
@@ -167,63 +238,64 @@ ion-item {
|
|
|
167
238
|
.has-metadata {
|
|
168
239
|
max-width: 100% !important;
|
|
169
240
|
}
|
|
241
|
+
|
|
170
242
|
}
|
|
171
243
|
|
|
172
244
|
.time {
|
|
173
245
|
margin-bottom: 20px;
|
|
174
246
|
}
|
|
175
247
|
|
|
176
|
-
|
|
177
|
-
.
|
|
178
|
-
|
|
179
|
-
|
|
248
|
+
/* LOADING */
|
|
249
|
+
/*http://tobiasahlin.com/spinkit/*/
|
|
250
|
+
#chat21-spinner {
|
|
251
|
+
display: none;
|
|
252
|
+
width: 70px;
|
|
180
253
|
min-height: 20px;
|
|
181
|
-
|
|
254
|
+
margin: 20px auto 0;
|
|
182
255
|
text-align: center;
|
|
183
256
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
257
|
+
#chat21-spinner.active {
|
|
258
|
+
display: block;
|
|
259
|
+
}
|
|
260
|
+
#chat21-spinner > div {
|
|
261
|
+
width: 12px;
|
|
262
|
+
height: 12px;
|
|
263
|
+
background-color: var(--bubble-blue);
|
|
190
264
|
border-radius: 100%;
|
|
191
265
|
display: inline-block;
|
|
192
266
|
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
193
267
|
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
194
268
|
}
|
|
195
|
-
|
|
196
|
-
.spinner .bounce1 {
|
|
269
|
+
#chat21-spinner .chat21-bounce1 {
|
|
197
270
|
-webkit-animation-delay: -0.32s;
|
|
198
271
|
animation-delay: -0.32s;
|
|
199
272
|
}
|
|
200
|
-
|
|
201
|
-
.spinner .bounce2 {
|
|
273
|
+
#chat21-spinner .chat21-bounce2 {
|
|
202
274
|
-webkit-animation-delay: -0.16s;
|
|
203
275
|
animation-delay: -0.16s;
|
|
204
276
|
}
|
|
205
|
-
|
|
277
|
+
#chat21-spinner span {
|
|
278
|
+
display: block;
|
|
279
|
+
margin: 0.5em 0 0 0;
|
|
280
|
+
color: var(--col-msg-sent);
|
|
281
|
+
/* text-transform: uppercase; */
|
|
282
|
+
font-family: 'Roboto', sans-serif;
|
|
283
|
+
-webkit-animation: pulse 2000ms linear infinite;
|
|
284
|
+
-moz-animation: pulse 2000ms linear infinite;
|
|
285
|
+
animation: pulse 2000ms linear infinite;
|
|
286
|
+
text-align: center;
|
|
287
|
+
}
|
|
206
288
|
@-webkit-keyframes sk-bouncedelay {
|
|
207
|
-
0%,
|
|
208
|
-
|
|
209
|
-
100% {
|
|
210
|
-
-webkit-transform: scale(0);
|
|
211
|
-
}
|
|
212
|
-
40% {
|
|
213
|
-
-webkit-transform: scale(1);
|
|
214
|
-
}
|
|
289
|
+
0%, 80%, 100% { -webkit-transform: scale(0) }
|
|
290
|
+
40% { -webkit-transform: scale(1.0) }
|
|
215
291
|
}
|
|
216
|
-
|
|
217
292
|
@keyframes sk-bouncedelay {
|
|
218
|
-
0%,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
40% {
|
|
225
|
-
-webkit-transform: scale(1);
|
|
226
|
-
transform: scale(1);
|
|
293
|
+
0%, 80%, 100% {
|
|
294
|
+
-webkit-transform: scale(0);
|
|
295
|
+
transform: scale(0);
|
|
296
|
+
} 40% {
|
|
297
|
+
-webkit-transform: scale(1.0);
|
|
298
|
+
transform: scale(1.0);
|
|
227
299
|
}
|
|
228
300
|
}
|
|
229
301
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConversationContentComponent } from '../conversation-content/conversation-content.component';
|
|
2
|
-
import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter, SimpleChange, SimpleChanges } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
import { MESSAGE_TYPE_INFO, MESSAGE_TYPE_MINE, MESSAGE_TYPE_OTHERS } from 'src/chat21-core/utils/constants';
|
|
@@ -24,14 +24,17 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
24
24
|
@Input() channelType: string;
|
|
25
25
|
@Input() areVisibleCAR: boolean;
|
|
26
26
|
@Input() supportMode: boolean;
|
|
27
|
+
@Input() isMobile: boolean;
|
|
27
28
|
@Output() onElementRendered = new EventEmitter<{element: string, status: boolean}>();
|
|
28
29
|
@Output() onAddUploadingBubble = new EventEmitter<boolean>();
|
|
29
|
-
|
|
30
|
+
@Output() onOpenCloseInfoConversation = new EventEmitter<boolean>();
|
|
31
|
+
|
|
30
32
|
public public_Key: any
|
|
31
33
|
public uploadProgress: number = 100
|
|
32
34
|
public fileType: any
|
|
33
35
|
public browserLang: string;
|
|
34
36
|
public addAsCannedResponseTooltipText: string;
|
|
37
|
+
public openInfoConversation: boolean = true;
|
|
35
38
|
isImage = isImage;
|
|
36
39
|
isFile = isFile;
|
|
37
40
|
isFrame = isFrame;
|
|
@@ -66,6 +69,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
66
69
|
ngOnInit() {
|
|
67
70
|
this.listenToUploadFileProgress();
|
|
68
71
|
this.setMomentLocaleAndGetTranslation();
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
ngOnChanges(changes: SimpleChanges){
|
|
76
|
+
this.isMobile? this.openInfoConversation = false: null;
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
|
|
@@ -136,6 +144,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
136
144
|
this.onElementRendered.emit(event)
|
|
137
145
|
}
|
|
138
146
|
|
|
147
|
+
onOpenCloseInfoConversationFN(){
|
|
148
|
+
this.openInfoConversation = !this.openInfoConversation
|
|
149
|
+
this.onOpenCloseInfoConversation.emit(this.openInfoConversation)
|
|
150
|
+
}
|
|
151
|
+
|
|
139
152
|
/**
|
|
140
153
|
* Track by function for ngFor loops
|
|
141
154
|
*
|
package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
<chat-text *ngIf="message?.type !=='html'"
|
|
52
52
|
[text]="message?.text"
|
|
53
|
-
[color]="
|
|
53
|
+
[color]="fontColor"
|
|
54
54
|
[message]="message"
|
|
55
55
|
(onBeforeMessageRender)="returnOnBeforeMessageRender($event)"
|
|
56
56
|
(onAfterMessageRender)="returnOnAfterMessageRender($event)">
|
package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts
CHANGED
|
@@ -18,7 +18,9 @@ import { ModalController } from '@ionic/angular';
|
|
|
18
18
|
export class BubbleMessageComponent implements OnInit, OnChanges {
|
|
19
19
|
|
|
20
20
|
@Input() message: MessageModel;
|
|
21
|
-
@Input()
|
|
21
|
+
@Input() fontColor: string;
|
|
22
|
+
@Input() fontSize: string;
|
|
23
|
+
@Input() fontFamily: string;
|
|
22
24
|
@Input() areVisibleCAR: boolean;
|
|
23
25
|
@Input() supportMode: boolean;
|
|
24
26
|
@Output() onBeforeMessageRender = new EventEmitter();
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
<div #actionButton id="actionButton" class="button-in-msg action"
|
|
1
|
+
<div #actionButton id="actionButton" class="button-in-msg action"
|
|
2
|
+
title="{{button?.value}}"
|
|
3
|
+
(click)="actionButtonAction()"
|
|
4
|
+
(mouseover)="onMouseOver($event)"
|
|
5
|
+
(mouseout)="onMouseOut($event)">
|
|
2
6
|
{{button.value}}
|
|
3
7
|
</div>
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
// @import '../../../../../sass/variables';
|
|
2
2
|
|
|
3
3
|
div {
|
|
4
|
-
--
|
|
5
|
-
--
|
|
6
|
-
--
|
|
7
|
-
--
|
|
8
|
-
--
|
|
9
|
-
--blue: rgb(42, 106, 193);
|
|
4
|
+
--backgroundColor: --basic-blue;
|
|
5
|
+
--textColor: --bck-msg-sent;
|
|
6
|
+
--hoverBackgroundColor: --bck-msg-sent;
|
|
7
|
+
--hoverTextColor: --basic-blue;
|
|
8
|
+
--buttonFontSize: --button-in-msg-font-size;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
.button-in-msg {
|
|
@@ -15,32 +14,32 @@ div {
|
|
|
15
14
|
max-width: 300px;
|
|
16
15
|
min-width: inherit;
|
|
17
16
|
cursor: pointer;
|
|
18
|
-
border: 1px solid var(--
|
|
17
|
+
border: 1px solid var(--textColor);
|
|
19
18
|
border-radius: 20px;
|
|
20
19
|
margin: 3px;
|
|
21
|
-
background:
|
|
20
|
+
background: var(--backgroundColor);
|
|
22
21
|
overflow: hidden;
|
|
23
22
|
font-family: 'Muli', sans-serif;
|
|
24
|
-
font-size:
|
|
23
|
+
font-size: var(--buttonFontSize);
|
|
25
24
|
-o-text-overflow: ellipsis;
|
|
26
25
|
text-overflow: ellipsis;
|
|
27
26
|
white-space: nowrap;
|
|
28
27
|
letter-spacing: -0.24px;
|
|
29
28
|
-webkit-font-smoothing: antialiased;
|
|
30
|
-
color: var(--
|
|
29
|
+
color: var(--textColor);
|
|
31
30
|
line-height: 16px;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
.action {
|
|
35
|
-
background:
|
|
34
|
+
background: var(--backgroundColor);
|
|
36
35
|
transition: background-color .6s ease;
|
|
37
36
|
&:focus,
|
|
38
37
|
&:hover {
|
|
39
|
-
color:
|
|
40
|
-
background: var(--
|
|
38
|
+
color: var(--hoverTextColor);
|
|
39
|
+
background: var(--hoverBackgroundColor);
|
|
41
40
|
.icon-button-action {
|
|
42
41
|
svg {
|
|
43
|
-
fill:
|
|
42
|
+
fill: var(--hoverTextColor);
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
}
|
|
@@ -80,4 +79,12 @@ div {
|
|
|
80
79
|
// height: 200px;
|
|
81
80
|
// }
|
|
82
81
|
// }
|
|
83
|
-
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
.disabled {
|
|
86
|
+
// border: 1px solid #999999;
|
|
87
|
+
// background-color: #cccccc;
|
|
88
|
+
// color: #666666;
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
}
|