@chat21/chat21-ionic 3.0.80 → 3.0.81-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 (151) hide show
  1. package/CHANGELOG.md +75 -3
  2. package/README.md +2 -2
  3. package/angular.json +1 -0
  4. package/deploy_amazon_beta.sh +29 -0
  5. package/deploy_amazon_prod.sh +30 -0
  6. package/package.json +2 -2
  7. package/src/app/app.component.html +7 -1
  8. package/src/app/app.component.scss +18 -2
  9. package/src/app/app.component.ts +113 -17
  10. package/src/app/app.module.ts +3 -1
  11. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
  12. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +77 -23
  13. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +168 -86
  14. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +39 -2
  15. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +11 -24
  16. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +6 -10
  17. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.spec.ts +2 -2
  18. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +16 -25
  19. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +5 -1
  20. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +22 -15
  21. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +25 -5
  22. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +2 -1
  23. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +14 -15
  24. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +24 -5
  25. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +6 -1
  26. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +12 -13
  27. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +26 -5
  28. package/src/app/chatlib/conversation-detail/message/frame/frame.component.html +8 -2
  29. package/src/app/chatlib/conversation-detail/message/frame/frame.component.scss +36 -0
  30. package/src/app/chatlib/conversation-detail/message/frame/frame.component.ts +2 -2
  31. package/src/app/chatlib/conversation-detail/message/html/html.component.ts +0 -1
  32. package/src/app/chatlib/conversation-detail/message/image/image.component.html +1 -1
  33. package/src/app/chatlib/conversation-detail/message/image/image.component.scss +17 -5
  34. package/src/app/chatlib/conversation-detail/message/image/image.component.ts +1 -1
  35. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +3 -2
  36. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +16 -6
  37. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -3
  38. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +2 -0
  39. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +78 -52
  40. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +62 -20
  41. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
  42. package/src/app/components/canned-response/canned-response.component.html +9 -8
  43. package/src/app/components/canned-response/canned-response.component.scss +24 -2
  44. package/src/app/components/canned-response/canned-response.component.ts +5 -5
  45. package/src/app/components/contacts-directory/contacts-directory.component.html +22 -26
  46. package/src/app/components/contacts-directory/contacts-directory.component.scss +8 -6
  47. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -42
  48. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +98 -61
  49. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +9 -25
  50. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component_2.html +116 -0
  51. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +8 -6
  52. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
  53. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +25 -87
  54. package/src/app/components/conversation-info/info-content/info-content.component.html +2 -1
  55. package/src/app/components/conversation-info/info-content/info-content.component.ts +3 -2
  56. package/src/app/components/conversation-info/info-direct/info-direct.component.html +1 -9
  57. package/src/app/components/conversation-info/info-direct/info-direct.component.ts +0 -2
  58. package/src/app/components/conversation-info/info-group/info-group.component.html +44 -108
  59. package/src/app/components/conversation-info/info-group/info-group.component.scss +101 -61
  60. package/src/app/components/conversation-info/info-group/info-group.component.ts +1 -0
  61. package/src/app/components/{ddp-header/ddp-header.component.html → conversations-list/header-conversations-list/header-conversations-list.component.html} +3 -3
  62. package/src/app/components/{ddp-header/ddp-header.component.scss → conversations-list/header-conversations-list/header-conversations-list.component.scss} +16 -4
  63. package/src/app/components/{conversation-detail/bubble-my-message/bubble-my-message.component.spec.ts → conversations-list/header-conversations-list/header-conversations-list.component.spec.ts} +6 -6
  64. package/src/app/components/{ddp-header/ddp-header.component.ts → conversations-list/header-conversations-list/header-conversations-list.component.ts} +7 -16
  65. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +12 -0
  66. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +14 -0
  67. 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
  68. 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
  69. package/src/app/components/navbar/navbar.component.html +103 -0
  70. package/src/app/components/navbar/navbar.component.scss +249 -0
  71. package/src/app/components/{ddp-header/ddp-header.component.spec.ts → navbar/navbar.component.spec.ts} +6 -6
  72. package/src/app/components/navbar/navbar.component.ts +189 -0
  73. package/src/app/components/project-item/project-item.component.html +98 -149
  74. package/src/app/components/project-item/project-item.component.scss +42 -35
  75. package/src/app/components/project-item/project-item.component.ts +16 -4
  76. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +3 -3
  77. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +2 -7
  78. package/src/app/components/utils/user-presence/user-presence.component.html +7 -2
  79. package/src/app/components/utils/user-presence/user-presence.component.scss +35 -18
  80. package/src/app/components/utils/user-presence/user-presence.component.ts +6 -10
  81. package/src/app/pages/contacts-directory/contacts-directory.page.html +1 -1
  82. package/src/app/pages/contacts-directory/contacts-directory.page.scss +41 -0
  83. package/src/app/pages/contacts-directory/contacts-directory.page.ts +2 -0
  84. package/src/app/pages/conversation-detail/conversation-detail.module.ts +0 -8
  85. package/src/app/pages/conversation-detail/conversation-detail.page.html +40 -23
  86. package/src/app/pages/conversation-detail/conversation-detail.page.scss +40 -250
  87. package/src/app/pages/conversation-detail/conversation-detail.page.ts +184 -117
  88. package/src/app/pages/conversations-list/conversations-list.page.html +11 -8
  89. package/src/app/pages/conversations-list/conversations-list.page.scss +11 -2
  90. package/src/app/pages/conversations-list/conversations-list.page.ts +25 -22
  91. package/src/app/pages/create-canned-response/create-canned-response.page.ts +13 -13
  92. package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
  93. package/src/app/pages/loader-preview/loader-preview.page.scss +4 -0
  94. package/src/app/pages/loader-preview/loader-preview.page.ts +1 -2
  95. package/src/app/pages/profile-info/profile-info.page.html +2 -4
  96. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +1 -1
  97. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +42 -0
  98. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +1 -0
  99. package/src/app/services/canned-responses/canned-responses.service.ts +26 -0
  100. package/src/app/services/projects/projects.service.spec.ts +12 -0
  101. package/src/app/services/projects/projects.service.ts +43 -0
  102. package/src/app/services/tiledesk/tiledesk.service.ts +2 -26
  103. package/src/app/shared/shared.module.ts +24 -33
  104. package/src/assets/i18n/ar.json +278 -265
  105. package/src/assets/i18n/az.json +14 -1
  106. package/src/assets/i18n/de.json +15 -2
  107. package/src/assets/i18n/en.json +15 -2
  108. package/src/assets/i18n/es.json +15 -2
  109. package/src/assets/i18n/fr.json +14 -1
  110. package/src/assets/i18n/it.json +14 -1
  111. package/src/assets/i18n/kk.json +15 -2
  112. package/src/assets/i18n/pt.json +15 -2
  113. package/src/assets/i18n/ru.json +14 -1
  114. package/src/assets/i18n/sr.json +277 -264
  115. package/src/assets/i18n/sv.json +15 -2
  116. package/src/assets/i18n/tr.json +15 -2
  117. package/src/assets/i18n/uk.json +15 -2
  118. package/src/assets/i18n/uz.json +14 -1
  119. package/src/assets/js/chat21client.js +177 -149
  120. package/src/assets/sounds/interface-start.mp3 +0 -0
  121. package/src/assets/sounds/wheep-wheep.mp3 +0 -0
  122. package/src/chat-config-native-mqtt.json +5 -1
  123. package/src/chat21-core/models/conversation.ts +0 -1
  124. package/src/chat21-core/models/projects.ts +27 -0
  125. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +7 -9
  126. package/src/chat21-core/utils/constants.ts +6 -1
  127. package/src/chat21-core/utils/convertRequestToConversation.ts +41 -0
  128. package/src/chat21-core/utils/user-typing/user-typing.component.html +8 -5
  129. package/src/chat21-core/utils/user-typing/user-typing.component.scss +87 -17
  130. package/src/chat21-core/utils/user-typing/user-typing.component.ts +12 -94
  131. package/src/chat21-core/utils/utils.ts +38 -10
  132. package/src/global.scss +52 -56
  133. package/src/index.html +2 -2
  134. package/src/variables.scss +30 -10
  135. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.html +0 -3
  136. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.scss +0 -21
  137. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.spec.ts +0 -24
  138. package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.ts +0 -14
  139. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.html +0 -54
  140. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.scss +0 -98
  141. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts +0 -84
  142. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.html +0 -30
  143. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.scss +0 -83
  144. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.spec.ts +0 -24
  145. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.ts +0 -68
  146. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.html +0 -3
  147. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.scss +0 -10
  148. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.spec.ts +0 -24
  149. package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.ts +0 -14
  150. package/src/app/components/conversation-detail/option-header/option-header.component.html +0 -13
  151. package/src/app/components/conversation-detail/option-header/option-header.component.scss +0 -0
@@ -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')">
@@ -77,16 +88,28 @@
77
88
  <!-- message SENDER:: -->
78
89
  <div role="messaggio" *ngIf="messageType(MESSAGE_TYPE_MINE, message)" class="msg_container base_sent">
79
90
 
91
+ <div class="message-date-hover"> {{message.timestamp | date:'HH:mm' }} </div>
92
+
93
+ <ng-container *ngIf="areVisibleCAR && supportMode">
94
+ <ion-button shape="round" size="small" class="btn-add-msg canned" ion-button fill="clear"
95
+ (click)="presentCreateCannedResponseModal(message)" [tooltip]="addAsCannedResponseTooltipText"
96
+ [options]="tooltipOptions" placement="bottom">
97
+ <ion-icon slot="icon-only" name="flash-outline" style="font-size: 1em;"> </ion-icon>
98
+ <span class="add-canned-response-add-icon">+</span>
99
+ </ion-button>
100
+ </ng-container>
101
+
80
102
  <!--backgroundColor non viene ancora usato -->
81
103
  <chat-bubble-message class="messages msg_sent" id="message_msg_sent" style="position: relative;"
82
104
  [ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
105
+ [class.no-background]="(isImage(message) || isFrame(message)) && message?.text.trim() === '' "
83
106
  [class.emoticon]="isEmojii(message?.text)"
107
+ [ngStyle]="{'background': stylesMap.get('bubbleSentBackground'), 'color': stylesMap.get('bubbleSentTextColor')}"
84
108
  [ngClass]="{'button-in-msg' : message.metadata && message.metadata.button}"
85
109
  [message]="message"
86
- [textColor]="'col-msg-sent'"
87
- [addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
88
- [areVisibleCAR]="areVisibleCAR"
89
- [supportMode]="supportMode"
110
+ [fontColor]="stylesMap.get('bubbleSentTextColor')"
111
+ [fontSize]="stylesMap.get('fontSize')"
112
+ [fontFamily]="stylesMap.get('fontFamily')"
90
113
  (onBeforeMessageRender)="onBeforeMessageRenderFN($event)"
91
114
  (onAfterMessageRender)="onAfterMessageRenderFN($event)"
92
115
  (onElementRendered)="onElementRenderedFN($event)">
@@ -101,13 +124,14 @@
101
124
 
102
125
  </div>
103
126
 
104
- <!-- message RECIPIENT:: -->
105
- <div role="messaggio" *ngIf="messageType(MESSAGE_TYPE_OTHERS, message) && isChannelTypeGroup(channelType) && !isSameSender(message?.sender, i)"
106
- class="message_sender_fullname">
107
- {{message.sender_fullname}}
108
- </div>
109
-
110
-
127
+ <!-- message RECIPIENT + TIME :: -->
128
+ <!-- <div class="msg_container base_receive" *ngIf="messageType(MESSAGE_TYPE_OTHERS, message) && isChannelTypeGroup(channelType) && !isSameSender(message?.sender, i)">
129
+ <div role="messaggio" class="message_sender_fullname">
130
+ {{message.sender_fullname}}
131
+ </div>
132
+ <div class="message-date"> {{message.timestamp | date:'HH:mm' }} </div>
133
+ </div> -->
134
+ <!-- message RECIPIENT :: -->
111
135
  <div role="messaggio" *ngIf="messageType(MESSAGE_TYPE_OTHERS, message)" class="msg_container base_receive">
112
136
 
113
137
  <!-- <chat-avatar-image class="slide-in-left"
@@ -117,19 +141,38 @@
117
141
  </chat-avatar-image> -->
118
142
 
119
143
  <!--backgroundColor non viene ancora usato -->
120
-
121
- <chat-bubble-message class="messages msg_receive" id="message_msg_receive" style="position: relative;"
144
+ <chat-bubble-message class="messages msg_receive" id="message_msg_receive"
122
145
  [ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
146
+ [class.no-background]="(isImage(message) || isFrame(message)) && message?.text.trim() === '' "
123
147
  [class.emoticon]="isEmojii(message?.text)"
148
+ [ngStyle]="{'background': stylesMap?.get('bubbleReceivedBackground'), 'color': stylesMap.get('bubbleReceivedTextColor')}"
149
+ [isSameSender]="isSameSender(message?.sender, i)"
124
150
  [message]="message"
125
- [textColor]="'black'"
126
- [addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
127
- [areVisibleCAR]="areVisibleCAR"
128
- [supportMode]="supportMode"
151
+ [fontColor]="stylesMap?.get('bubbleReceivedTextColor')"
152
+ [fontSize]="stylesMap?.get('fontSize')"
153
+ [fontFamily]="stylesMap?.get('fontFamily')"
129
154
  (onBeforeMessageRender)="onBeforeMessageRenderFN($event)"
130
155
  (onAfterMessageRender)="onAfterMessageRenderFN($event)"
131
156
  (onElementRendered)="onElementRenderedFN($event)">
132
157
  </chat-bubble-message>
158
+
159
+ <ng-container *ngIf="areVisibleCAR && supportMode">
160
+ <ion-button shape="round" size="small" class="btn-add-msg canned" ion-button fill="clear"
161
+ (click)="presentCreateCannedResponseModal(message)" [tooltip]="addAsCannedResponseTooltipText"
162
+ [options]="tooltipOptions" placement="bottom">
163
+ <ion-icon slot="icon-only" name="flash-outline" style="font-size: 1em;"> </ion-icon>
164
+ <span class="add-canned-response-add-icon">+</span>
165
+ </ion-button>
166
+ </ng-container>
167
+ <!-- <ng-container *ngIf="supportMode">
168
+ <ion-button shape="round" size="small" class="btn-add-msg emoji" ion-button fill="clear"
169
+ (click)="presentEmojiiModal()" tooltip="{{addAsCannedResponseTooltipText}}"
170
+ [options]="tooltipOptions" placement="bottom">
171
+ <ion-icon slot="icon-only" name="happy-outline" style="font-size: 1em;"> </ion-icon>
172
+ </ion-button>
173
+ </ng-container> -->
174
+
175
+ <div class="message-date-hover" *ngIf="isChannelTypeGroup(channelType)"> {{message.timestamp | date:'HH:mm' }} </div>
133
176
  </div>
134
177
 
135
178
  <!-- message type:: button && -->
@@ -147,15 +190,26 @@
147
190
 
148
191
  <!-- uploadProgress -> {{ uploadProgress }} -->
149
192
  <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>
193
+ <div class="chat21-spinner active" id="chat21-spinner" style="margin: 0px 6px 0px;">
194
+ <div class="chat21-bounce1" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
195
+ <div class="chat21-bounce2" [ngStyle]="{'background-color': stylesMap.get('themeColor'), 'opacity': 0.4}"></div>
196
+ <div class="chat21-bounce3" [ngStyle]="{'background-color': stylesMap.get('themeColor'), 'opacity': 0.6}"></div>
197
+ <!-- <span [ngStyle]="{'color': stylesMap.get('themeColor')}">{{translationMap.get('LABEL_LOADING')}}</span> -->
156
198
  </div>
157
199
  </div>
158
200
 
201
+ <div *ngIf="isTypings" class="msg_container base_receive typing_container">
202
+ <!-- !isSameSender(idUserTypingNow, i) -->
203
+ <!-- <div *ngIf="nameUserTypingNow">{{nameUserTypingNow}}</div> -->
204
+ <user-typing
205
+ [themeColor]="stylesMap?.get('themeColor')"
206
+ [translationMap]="translationMap"
207
+ [idUserTypingNow]="idUserTypingNow"
208
+ [nameUserTypingNow]="nameUserTypingNow">
209
+ </user-typing>
210
+ <div class="typing_info" *ngIf="nameUserTypingNow"> {{nameUserTypingNow}} {{translationMap.get('LABEL_IS_WRITING')}}</div>
211
+ </div>
212
+
159
213
  </div>
160
214
 
161
215
  <!-- fileType > {{fileType }} uploadProgress {{uploadProgress}} -->
@@ -33,6 +33,59 @@
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
+ &:not(.mobile){
52
+ top: calc(60px + var(--padding-conversation-detail));
53
+ }
54
+ }
55
+
56
+ &.mobile{
57
+ right: 0px;
58
+ }
59
+ &:not(.mobile):not(.close){
60
+ right: calc(300px + var(--padding-conversation-detail));
61
+ top: calc(60px + var(--padding-conversation-detail));
62
+ }
63
+ &::before{
64
+ content: "";
65
+ width: 102px;
66
+ height: 34px;
67
+ background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMTAyIDM0IiB3aWR0aD0iMTAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHBhdGggZD0ibTEwMiAwaC0xMDJsLjA3MTQwOC40MTk3NTNjMTEuMzE5MTkyLS4wMTU1NTggMjIuMjg4MTkyIDMuOTIwMzM3IDMxLjAxMjA5MiAxMS4xMjc2NDdsNy40ODk0IDYuNTAyIDEuNjUwOCAxLjQyMjkgNi42OTU1IDUuNzhjNi41Mzc0IDUuNjQwNSAxNC44ODU3IDguNzQ1MSAyMy41MjI3IDguNzQ3N2gzMS41NTQxeiIKICAgICAgICAgIGZpbGw9IiNlMmU4ZWYiLz4KPC9zdmc+);
68
+ position: relative;
69
+ left: 50px;
70
+ z-index: -1;
71
+ }
72
+
73
+ ion-button {
74
+ text-transform: unset;
75
+ color: var(--basic-blue);
76
+ &:hover {
77
+ --background-hover: transparent;
78
+ text-decoration: underline;
79
+ text-decoration-color: var(--basic-blue);
80
+ }
81
+ }
82
+
83
+ ion-icon{
84
+ margin: 5px;
85
+ }
86
+ }
87
+
88
+
36
89
  ion-item {
37
90
  --padding-end: 0px;
38
91
  --inner-padding-end: 0px;
@@ -60,12 +113,33 @@ ion-item {
60
113
 
61
114
  .message_sender_fullname {
62
115
  font-size: 0.9em;
63
- margin: 0 0 1px 10px;
116
+ margin: 0px 10px 0px 10px;
64
117
  // color: var(--gray);
65
118
  font-weight: 500;
66
119
  color: #080f1a;
67
120
  }
68
121
 
122
+ .typing_container{
123
+ display:flex;
124
+ align-items: center;
125
+
126
+ user-typing {
127
+ text-align: right;
128
+ }
129
+ .typing_info{
130
+ color: var(--basic-gray);
131
+ margin-left: 10px;
132
+ font-size: 12px;
133
+ animation: blinker 1s linear infinite;
134
+
135
+ @keyframes blinker {
136
+ 50% {
137
+ opacity: 0;
138
+ }
139
+ }
140
+ }
141
+ }
142
+
69
143
  .messages {
70
144
  border-radius: 18px;
71
145
  padding: 0;
@@ -82,12 +156,16 @@ ion-item {
82
156
  align-items: flex-end;
83
157
  justify-content: flex-end;
84
158
  // padding: 2px 0px 4px 40px;
85
- padding: 2px 0px 14px 40px; // edited to display the date at the bottom of the "message bubble"
159
+ padding: 0px 0px 6px 40px;
160
+
161
+ &:hover .message-date-hover, &:hover .btn-add-msg{
162
+ display: block;
163
+ }
164
+
86
165
  .msg_sent {
87
166
  background-color: var(--bubble-blue);
88
167
  color: var(--col-msg-sent);
89
- margin-right: 4px;
90
- margin-left: 4px;
168
+ margin: 0px 0px 0px 0px;
91
169
  max-width: calc(100% - 70px);
92
170
  min-width: 14px;
93
171
  border-top-right-radius: 8px;
@@ -98,6 +176,9 @@ ion-item {
98
176
  color: var(--bubble-privateMsgColor)
99
177
  }
100
178
  }
179
+ .no-background{
180
+ background: transparent!important;
181
+ }
101
182
  .emoticon {
102
183
  background: unset !important;
103
184
  font-size: 4em;
@@ -112,8 +193,17 @@ ion-item {
112
193
 
113
194
  /** recive message **/
114
195
  .base_receive {
115
- // padding: 0px 0px 6px 0px;
116
- padding: 0px 0px 15px 0px; // edited to display the date at the bottom of the "message bubble"
196
+ padding: 0px 20px 6px 0px;
197
+ .message-date{
198
+ color: #647491;
199
+ font-size: 12px;
200
+ align-self: center;
201
+ }
202
+
203
+
204
+ &:hover .message-date-hover, &:hover .btn-add-msg{
205
+ display: block;
206
+ }
117
207
  /* avatar */
118
208
  .content-avatar {
119
209
  position: relative;
@@ -142,12 +232,12 @@ ion-item {
142
232
  }
143
233
  /* message */
144
234
  .msg_receive {
145
- background-color: var(--light-white);
146
- color: #1a1a1a;
235
+ background-color: var(--bck-msg-received);
236
+ color: var(--col-msg-received);
147
237
  // max-width: 260px;
148
238
  max-width: calc(100% - 70px);
149
239
  min-width: 14px;
150
- margin: 0 20px 4px 10px;
240
+ margin: 0 0px 0px 10px;
151
241
  height: fit-content;
152
242
  width: auto;
153
243
  border-top-left-radius: 8px;
@@ -158,7 +248,9 @@ ion-item {
158
248
  color: var(--bubble-privateMsgColor)
159
249
  }
160
250
  }
161
-
251
+ .no-background{
252
+ background: transparent!important;
253
+ }
162
254
  .emoticon {
163
255
  background: unset !important;
164
256
  font-size: 4em;
@@ -167,63 +259,93 @@ ion-item {
167
259
  .has-metadata {
168
260
  max-width: 100% !important;
169
261
  }
262
+
170
263
  }
171
264
 
172
- .time {
173
- margin-bottom: 20px;
265
+ .message-date-hover{
266
+ color: #647491;
267
+ font-size: 12px;
268
+ align-self: center;
269
+
270
+ display: none;
271
+
174
272
  }
175
273
 
176
- // Loading Spinner
177
- .spinner {
178
- // margin: 100px auto 0;
179
- width: 90px;
274
+ .btn-add-msg {
275
+ border-radius: 50%;
276
+ --padding-end: 7px;
277
+ --padding-start: 7px;
278
+ box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.13);
279
+ display: none;
280
+ align-self: center;
281
+ margin: 0px 5px;
282
+
283
+ ion-icon{
284
+ font-size: 1.2em;
285
+ color: var(--basic-blue)
286
+ }
287
+
288
+ .add-canned-response-add-icon{
289
+ color: var(--basic-blue);
290
+ cursor: pointer;
291
+ position: relative;
292
+ top: 6px;
293
+ left: -6px;
294
+ font-size: 9px;
295
+ }
296
+ }
297
+
298
+ /* LOADING */
299
+ /*http://tobiasahlin.com/spinkit/*/
300
+ #chat21-spinner {
301
+ display: none;
302
+ width: 70px;
180
303
  min-height: 20px;
181
- padding: 7px;
304
+ margin: 20px auto 0;
182
305
  text-align: center;
183
306
  }
184
-
185
- .spinner > div {
186
- width: 10px;
187
- height: 10px;
188
- background-color: rgb(255, 255, 255);
189
-
307
+ #chat21-spinner.active {
308
+ display: block;
309
+ }
310
+ #chat21-spinner > div {
311
+ width: 12px;
312
+ height: 12px;
313
+ background-color: var(--bubble-blue);
190
314
  border-radius: 100%;
191
315
  display: inline-block;
192
316
  -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
193
317
  animation: sk-bouncedelay 1.4s infinite ease-in-out both;
194
318
  }
195
-
196
- .spinner .bounce1 {
319
+ #chat21-spinner .chat21-bounce1 {
197
320
  -webkit-animation-delay: -0.32s;
198
321
  animation-delay: -0.32s;
199
322
  }
200
-
201
- .spinner .bounce2 {
323
+ #chat21-spinner .chat21-bounce2 {
202
324
  -webkit-animation-delay: -0.16s;
203
325
  animation-delay: -0.16s;
204
326
  }
205
-
327
+ #chat21-spinner span {
328
+ display: block;
329
+ margin: 0.5em 0 0 0;
330
+ color: var(--col-msg-sent);
331
+ /* text-transform: uppercase; */
332
+ font-family: 'Roboto', sans-serif;
333
+ -webkit-animation: pulse 2000ms linear infinite;
334
+ -moz-animation: pulse 2000ms linear infinite;
335
+ animation: pulse 2000ms linear infinite;
336
+ text-align: center;
337
+ }
206
338
  @-webkit-keyframes sk-bouncedelay {
207
- 0%,
208
- 80%,
209
- 100% {
210
- -webkit-transform: scale(0);
211
- }
212
- 40% {
213
- -webkit-transform: scale(1);
214
- }
339
+ 0%, 80%, 100% { -webkit-transform: scale(0) }
340
+ 40% { -webkit-transform: scale(1.0) }
215
341
  }
216
-
217
342
  @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);
343
+ 0%, 80%, 100% {
344
+ -webkit-transform: scale(0);
345
+ transform: scale(0);
346
+ } 40% {
347
+ -webkit-transform: scale(1.0);
348
+ transform: scale(1.0);
227
349
  }
228
350
  }
229
351
 
@@ -245,28 +367,6 @@ ion-item {
245
367
  // left: -26px;
246
368
  }
247
369
 
248
- :host .base_receive .msg_receive ::ng-deep div > div > div > ion-button.canned {
249
- display: none;
250
- position: absolute;
251
- top: -3px;
252
- right: -31px;
253
- }
254
-
255
- :host .base_receive .msg_receive ::ng-deep div > div > div >ion-button.emoji {
256
- display: none;
257
- position: absolute;
258
- top: -3px;
259
- right: -51px;
260
- }
261
-
262
- // :host .base_receive .msg_receive:hover ::ng-deep div > div > ion-button {
263
- :host .base_receive:hover .msg_receive ::ng-deep div > div > div > ion-button {
264
- display: block;
265
- // position: absolute;
266
- // top: -11px;
267
- // left: 91px;
268
- }
269
-
270
370
  // ---------------------------------------------------------
271
371
  // Long date divider
272
372
  // ---------------------------------------------------------
@@ -295,24 +395,6 @@ ion-item {
295
395
  color: #64748b;
296
396
  }
297
397
 
298
- // ---------------------------------------------------------
299
- // message date
300
- // ---------------------------------------------------------
301
- :host .base_sent .msg_sent ::ng-deep div > div > div > .message-date {
302
- position: absolute;
303
- bottom: -11px;
304
- color: #64748b;
305
- font-size: 10px;
306
- right: 0px;
307
- }
308
-
309
- :host .base_receive .msg_receive ::ng-deep div > div > .message-date {
310
- position: absolute;
311
- bottom: -11px;
312
- color: #64748b;
313
- font-size: 10px;
314
- left: 0px;
315
- }
316
398
  // ---------------------------------------------------------
317
399
  // emoticon
318
400
  // ---------------------------------------------------------
@@ -1,5 +1,6 @@
1
+ import { MessageModel } from 'src/chat21-core/models/message';
1
2
  import { ConversationContentComponent } from '../conversation-content/conversation-content.component';
2
- import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter } from '@angular/core';
3
+ import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter, SimpleChange, SimpleChanges } from '@angular/core';
3
4
 
4
5
 
5
6
  import { MESSAGE_TYPE_INFO, MESSAGE_TYPE_MINE, MESSAGE_TYPE_OTHERS } from 'src/chat21-core/utils/constants';
@@ -13,6 +14,8 @@ import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk
13
14
  import { TranslateService } from '@ngx-translate/core';
14
15
  import * as moment from 'moment';
15
16
  import { AppConfigProvider } from 'src/app/services/app-config';
17
+ import { ModalController } from '@ionic/angular';
18
+ import { CreateCannedResponsePage } from 'src/app/pages/create-canned-response/create-canned-response.page';
16
19
  @Component({
17
20
  selector: 'ion-conversation-detail',
18
21
  templateUrl: './ion-conversation-detail.component.html',
@@ -24,14 +27,17 @@ export class IonConversationDetailComponent extends ConversationContentComponent
24
27
  @Input() channelType: string;
25
28
  @Input() areVisibleCAR: boolean;
26
29
  @Input() supportMode: boolean;
30
+ @Input() isMobile: boolean;
27
31
  @Output() onElementRendered = new EventEmitter<{element: string, status: boolean}>();
28
32
  @Output() onAddUploadingBubble = new EventEmitter<boolean>();
29
-
33
+ @Output() onOpenCloseInfoConversation = new EventEmitter<boolean>();
34
+
30
35
  public public_Key: any
31
36
  public uploadProgress: number = 100
32
37
  public fileType: any
33
38
  public browserLang: string;
34
39
  public addAsCannedResponseTooltipText: string;
40
+ public openInfoConversation: boolean = true;
35
41
  isImage = isImage;
36
42
  isFile = isFile;
37
43
  isFrame = isFrame;
@@ -58,6 +64,7 @@ export class IonConversationDetailComponent extends ConversationContentComponent
58
64
  public tiledeskAuthService: TiledeskAuthService,
59
65
  private translate: TranslateService,
60
66
  public appConfigProvider: AppConfigProvider,
67
+ public modalController: ModalController,
61
68
  ) {
62
69
  super(cdref, uploadService)
63
70
 
@@ -66,6 +73,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
66
73
  ngOnInit() {
67
74
  this.listenToUploadFileProgress();
68
75
  this.setMomentLocaleAndGetTranslation();
76
+
77
+ }
78
+
79
+ ngOnChanges(changes: SimpleChanges){
80
+ this.isMobile? this.openInfoConversation = false: null;
69
81
  }
70
82
 
71
83
 
@@ -136,6 +148,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
136
148
  this.onElementRendered.emit(event)
137
149
  }
138
150
 
151
+ onOpenCloseInfoConversationFN(){
152
+ this.openInfoConversation = !this.openInfoConversation
153
+ this.onOpenCloseInfoConversation.emit(this.openInfoConversation)
154
+ }
155
+
139
156
  /**
140
157
  * Track by function for ngFor loops
141
158
  *
@@ -147,4 +164,24 @@ export class IonConversationDetailComponent extends ConversationContentComponent
147
164
  // console.log('[CONVS-DETAIL][ION-CONVS-DETAIL] - trackByFn item', item)
148
165
  return item.uid || index;
149
166
  }
167
+
168
+
169
+ async presentCreateCannedResponseModal(message: MessageModel): Promise<any> {
170
+ this.logger.log('[BUBBLE-MESSAGE] PRESENT CREATE CANNED RESPONSE MODAL ')
171
+ const attributes = {
172
+ message: message,
173
+ }
174
+ const modal: HTMLIonModalElement = await this.modalController.create({
175
+ component: CreateCannedResponsePage,
176
+ componentProps: attributes,
177
+ swipeToClose: false,
178
+ backdropDismiss: false,
179
+ })
180
+ modal.onDidDismiss().then((dataReturned: any) => {
181
+ //
182
+ this.logger.log('[BUBBLE-MESSAGE] ', dataReturned.data)
183
+ })
184
+
185
+ return await modal.present()
186
+ }
150
187
  }
@@ -1,12 +1,17 @@
1
1
  <!-- [ngClass]="{'button-in-msg' : message.metadata && message.metadata.button}" -->
2
2
  <!-- [ngStyle]="{'padding': (isImage(message) || isFrame(message))?'0px':'0 8px'}" -->
3
3
  <!-- isImage >{{isImage(message) }} message.metadata.width {{message?.metadata?.width }} -->
4
- <div id="bubble-message"
5
- [ngStyle]="{'padding': (isImage(message) || isFrame(message))?'0px':'0 8px', 'width': (isImage(message) || isFrame(message))? sizeImage?.width + 'px' : null }"
6
- class="messages primary-color">
4
+ <!-- 'width': (isImage(message) || isFrame(message))? sizeImage?.width : null -->
5
+ <div id="bubble-message" [ngStyle]="{'padding': (isImage(message) || isFrame(message))?'0px':'0 8px' }" class="messages primary-color">
7
6
 
8
7
 
9
8
  <div>
9
+
10
+ <div *ngIf="messageType(MESSAGE_TYPE_OTHERS, message) && !isSameSender"
11
+ [style.color]="convertColorToRGBA(fontColor, 65)"
12
+ [ngStyle]="{'margin': (isImage(message) || isFrame(message))? '10px 16px 8px 16px': '10px 8px 0px 8px'}" class="message_sender_fullname">
13
+ {{message?.sender_fullname}}
14
+ </div>
10
15
  <!-- message type:: image -->
11
16
  <!-- <div *ngIf="message.type == 'image' && message.metadata" [ngStyle] = "{ 'max-width': getSizeImg(message).width, 'max-height': getSizeImg(message).height }">
12
17
  <img class="message-contentX message-content-imageX" [src]="message.metadata.src" />
@@ -29,8 +34,8 @@
29
34
  <!-- [height]="getMetadataSize(message.metadata).height"> -->
30
35
  <chat-frame *ngIf="isFrame(message)"
31
36
  [metadata]="message.metadata"
32
- [width]="message.metadata.width"
33
- [height]="message.metadata.height"
37
+ [width]="sizeImage?.width"
38
+ [height]="sizeImage?.width"
34
39
  (onElementRendered)="onElementRenderedFN($event)">
35
40
  </chat-frame>
36
41
 
@@ -43,14 +48,10 @@
43
48
 
44
49
  <!-- [tooltip]="timeTooltipLeft" [options]="tooltipOptions" placement="left" content-type="template" (click)="handleTooltipEvents($event)" -->
45
50
  <div *ngIf="message?.text">
46
- <span class="message-date"> {{message.timestamp | date:'HH:mm' }} </span>
47
- <!-- <ng-template #timeTooltipLeft>
48
- <span> {{message.timestamp | amCalendar }} </span>
49
- </ng-template> -->
50
51
 
51
52
  <chat-text *ngIf="message?.type !=='html'"
52
53
  [text]="message?.text"
53
- [color]="textColor"
54
+ [color]="fontColor"
54
55
  [message]="message"
55
56
  (onBeforeMessageRender)="returnOnBeforeMessageRender($event)"
56
57
  (onAfterMessageRender)="returnOnAfterMessageRender($event)">
@@ -60,20 +61,6 @@
60
61
  [htmlText]="message?.text">
61
62
  </chat-html>
62
63
 
63
- <ng-container *ngIf="areVisibleCAR && supportMode">
64
- <ion-button shape="round" size="small" class="btn-add-msg canned" ion-button fill="clear"
65
- (click)="presentCreateCannedResponseModal()" tooltip="{{addAsCannedResponseTooltipText}}"
66
- [options]="tooltipOptions" placement="bottom">
67
- <ion-icon slot="icon-only" name="flash-outline" style="font-size: 1em;"> </ion-icon>
68
- </ion-button>
69
- </ng-container>
70
- <!-- <ng-container *ngIf="supportMode">
71
- <ion-button shape="round" size="small" class="btn-add-msg emoji" ion-button fill="clear"
72
- (click)="presentEmojiiModal()" tooltip="{{addAsCannedResponseTooltipText}}"
73
- [options]="tooltipOptions" placement="bottom">
74
- <ion-icon slot="icon-only" name="happy-outline" style="font-size: 1em;"> </ion-icon>
75
- </ion-button>
76
- </ng-container> -->
77
64
  </div>
78
65
  </div>
79
66