@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.
Files changed (97) hide show
  1. package/CHANGELOG.md +41 -1
  2. package/package.json +1 -1
  3. package/src/app/app.component.scss +2 -1
  4. package/src/app/app.component.ts +52 -7
  5. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
  6. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -10
  7. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +110 -38
  8. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +15 -2
  9. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +1 -1
  10. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +3 -1
  11. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +5 -1
  12. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +22 -15
  13. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +25 -5
  14. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +2 -1
  15. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +14 -15
  16. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +24 -5
  17. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +6 -1
  18. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +12 -13
  19. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +26 -5
  20. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -2
  21. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +16 -6
  22. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +2 -0
  23. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +78 -52
  24. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +62 -20
  25. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
  26. package/src/app/components/canned-response/canned-response.component.html +4 -4
  27. package/src/app/components/canned-response/canned-response.component.scss +1 -1
  28. package/src/app/components/canned-response/canned-response.component.ts +1 -0
  29. package/src/app/components/contacts-directory/contacts-directory.component.html +22 -26
  30. package/src/app/components/contacts-directory/contacts-directory.component.scss +8 -6
  31. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -42
  32. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +98 -61
  33. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +9 -25
  34. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
  35. package/src/app/components/conversation-info/info-content/info-content.component.html +2 -1
  36. package/src/app/components/conversation-info/info-content/info-content.component.ts +3 -2
  37. package/src/app/components/conversation-info/info-direct/info-direct.component.html +1 -9
  38. package/src/app/components/conversation-info/info-direct/info-direct.component.ts +0 -2
  39. package/src/app/components/conversation-info/info-group/info-group.component.html +44 -108
  40. package/src/app/components/conversation-info/info-group/info-group.component.scss +101 -61
  41. package/src/app/components/conversation-info/info-group/info-group.component.ts +1 -0
  42. package/src/app/components/{ddp-header/ddp-header.component.html → conversations-list/header-conversations-list/header-conversations-list.component.html} +2 -2
  43. package/src/app/components/{ddp-header/ddp-header.component.scss → conversations-list/header-conversations-list/header-conversations-list.component.scss} +16 -4
  44. package/src/app/components/{ddp-header/ddp-header.component.spec.ts → conversations-list/header-conversations-list/header-conversations-list.component.spec.ts} +6 -6
  45. package/src/app/components/{ddp-header/ddp-header.component.ts → conversations-list/header-conversations-list/header-conversations-list.component.ts} +7 -16
  46. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +12 -0
  47. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +14 -0
  48. 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
  49. 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
  50. package/src/app/components/project-item/project-item.component.html +98 -149
  51. package/src/app/components/project-item/project-item.component.scss +39 -32
  52. package/src/app/components/project-item/project-item.component.ts +5 -3
  53. package/src/app/components/utils/user-presence/user-presence.component.html +7 -2
  54. package/src/app/components/utils/user-presence/user-presence.component.scss +35 -18
  55. package/src/app/components/utils/user-presence/user-presence.component.ts +6 -10
  56. package/src/app/pages/contacts-directory/contacts-directory.page.html +1 -1
  57. package/src/app/pages/contacts-directory/contacts-directory.page.scss +41 -0
  58. package/src/app/pages/contacts-directory/contacts-directory.page.ts +2 -0
  59. package/src/app/pages/conversation-detail/conversation-detail.page.html +40 -23
  60. package/src/app/pages/conversation-detail/conversation-detail.page.scss +40 -250
  61. package/src/app/pages/conversation-detail/conversation-detail.page.ts +165 -46
  62. package/src/app/pages/conversations-list/conversations-list.page.html +11 -8
  63. package/src/app/pages/conversations-list/conversations-list.page.scss +10 -2
  64. package/src/app/pages/conversations-list/conversations-list.page.ts +22 -17
  65. package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
  66. package/src/app/pages/loader-preview/loader-preview.page.scss +4 -0
  67. package/src/app/pages/profile-info/profile-info.page.html +2 -4
  68. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +1 -1
  69. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +42 -0
  70. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +1 -0
  71. package/src/app/shared/shared.module.ts +24 -24
  72. package/src/assets/i18n/ar.json +270 -265
  73. package/src/assets/i18n/az.json +5 -0
  74. package/src/assets/i18n/de.json +5 -0
  75. package/src/assets/i18n/en.json +5 -0
  76. package/src/assets/i18n/es.json +5 -0
  77. package/src/assets/i18n/fr.json +5 -0
  78. package/src/assets/i18n/it.json +5 -0
  79. package/src/assets/i18n/kk.json +5 -0
  80. package/src/assets/i18n/pt.json +5 -0
  81. package/src/assets/i18n/ru.json +5 -0
  82. package/src/assets/i18n/sr.json +5 -0
  83. package/src/assets/i18n/sv.json +5 -0
  84. package/src/assets/i18n/tr.json +5 -0
  85. package/src/assets/i18n/uk.json +5 -0
  86. package/src/assets/i18n/uz.json +5 -0
  87. package/src/assets/sounds/wheep-wheep.mp3 +0 -0
  88. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +7 -9
  89. package/src/chat21-core/utils/constants.ts +5 -1
  90. package/src/chat21-core/utils/user-typing/user-typing.component.html +8 -5
  91. package/src/chat21-core/utils/user-typing/user-typing.component.scss +87 -17
  92. package/src/chat21-core/utils/user-typing/user-typing.component.ts +12 -94
  93. package/src/chat21-core/utils/utils.ts +9 -1
  94. package/src/global.scss +47 -43
  95. package/src/variables.scss +26 -9
  96. package/src/app/components/conversation-detail/option-header/option-header.component.html +0 -13
  97. 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.0.78 in PROD
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@chat21/chat21-ionic",
3
3
  "author": "Tiledesk SRL",
4
- "version": "3.0.78",
4
+ "version": "3.0.79-rc.2",
5
5
  "license": "MIT License",
6
6
  "homepage": "https://tiledesk.com/",
7
7
  "repository": {
@@ -1,7 +1,8 @@
1
1
  .split-pane-md.split-pane-visible > .split-pane-side {
2
- min-width: 312px;
2
+ min-width: 360px; //312px;
3
3
  display: block; // Safari bug fix
4
4
  margin-left: 60px;
5
+ --border: 0px;
5
6
  }
6
7
 
7
8
  .sidebar-visible {
@@ -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) this.soundMessage()
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("hasToSoundUnservedRequestCount::::", this.isInitialized)
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
 
@@ -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
- [textColor]="'col-msg-sent'"
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
- [textColor]="'black'"
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="messages msg_sent">
151
- <div class="spinner">
152
- <div class="bounce1"></div>
153
- <div class="bounce2"></div>
154
- <div class="bounce3"></div>
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 10px;
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 0px; // edited to display the date at the bottom of the "message bubble"
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(--light-white);
146
- color: #1a1a1a;
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
- // Loading Spinner
177
- .spinner {
178
- // margin: 100px auto 0;
179
- width: 90px;
248
+ /* LOADING */
249
+ /*http://tobiasahlin.com/spinkit/*/
250
+ #chat21-spinner {
251
+ display: none;
252
+ width: 70px;
180
253
  min-height: 20px;
181
- padding: 7px;
254
+ margin: 20px auto 0;
182
255
  text-align: center;
183
256
  }
184
-
185
- .spinner > div {
186
- width: 10px;
187
- height: 10px;
188
- background-color: rgb(255, 255, 255);
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
- 80%,
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
- 80%,
220
- 100% {
221
- -webkit-transform: scale(0);
222
- transform: scale(0);
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
  *
@@ -50,7 +50,7 @@
50
50
 
51
51
  <chat-text *ngIf="message?.type !=='html'"
52
52
  [text]="message?.text"
53
- [color]="textColor"
53
+ [color]="fontColor"
54
54
  [message]="message"
55
55
  (onBeforeMessageRender)="returnOnBeforeMessageRender($event)"
56
56
  (onAfterMessageRender)="returnOnAfterMessageRender($event)">
@@ -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() textColor: string;
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" (click)="actionButtonAction()" title="{{button?.value}}">
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
- --bck-msg-sent: #62a8ea;
5
- --col-msg-sent:#ffffff;
6
- --light-white: #f7f7f7;
7
- --black: #1a1a1a;
8
- --gray: #aaaaaa;
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(--blue);
17
+ border: 1px solid var(--textColor);
19
18
  border-radius: 20px;
20
19
  margin: 3px;
21
- background: transparent;
20
+ background: var(--backgroundColor);
22
21
  overflow: hidden;
23
22
  font-family: 'Muli', sans-serif;
24
- font-size: 15px;
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(--blue);
29
+ color: var(--textColor);
31
30
  line-height: 16px;
32
31
  }
33
32
 
34
33
  .action {
35
- background: white;
34
+ background: var(--backgroundColor);
36
35
  transition: background-color .6s ease;
37
36
  &:focus,
38
37
  &:hover {
39
- color: white;
40
- background: var(--blue);
38
+ color: var(--hoverTextColor);
39
+ background: var(--hoverBackgroundColor);
41
40
  .icon-button-action {
42
41
  svg {
43
- fill: white;
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
+ }