@chat21/chat21-ionic 3.0.81 → 3.0.82-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 +88 -4
  2. package/README.md +2 -2
  3. package/deploy_amazon_beta.sh +29 -0
  4. package/deploy_amazon_prod.sh +30 -0
  5. package/package.json +2 -2
  6. package/src/app/app.component.html +7 -1
  7. package/src/app/app.component.scss +20 -2
  8. package/src/app/app.component.ts +128 -18
  9. package/src/app/app.module.ts +3 -1
  10. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
  11. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +77 -23
  12. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +171 -88
  13. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +40 -2
  14. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +11 -24
  15. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +6 -10
  16. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.spec.ts +2 -2
  17. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +16 -25
  18. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +5 -1
  19. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +22 -15
  20. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +25 -5
  21. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +2 -1
  22. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +14 -15
  23. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +24 -5
  24. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +6 -1
  25. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +12 -13
  26. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +26 -5
  27. package/src/app/chatlib/conversation-detail/message/frame/frame.component.html +8 -2
  28. package/src/app/chatlib/conversation-detail/message/frame/frame.component.scss +36 -0
  29. package/src/app/chatlib/conversation-detail/message/frame/frame.component.ts +2 -2
  30. package/src/app/chatlib/conversation-detail/message/html/html.component.ts +0 -1
  31. package/src/app/chatlib/conversation-detail/message/image/image.component.html +3 -2
  32. package/src/app/chatlib/conversation-detail/message/image/image.component.scss +17 -5
  33. package/src/app/chatlib/conversation-detail/message/image/image.component.ts +1 -1
  34. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +3 -2
  35. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +16 -6
  36. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -3
  37. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +2 -0
  38. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +78 -52
  39. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +63 -20
  40. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
  41. package/src/app/components/canned-response/canned-response.component.html +7 -7
  42. package/src/app/components/canned-response/canned-response.component.scss +10 -4
  43. package/src/app/components/canned-response/canned-response.component.ts +1 -1
  44. package/src/app/components/contacts-directory/contacts-directory.component.html +22 -26
  45. package/src/app/components/contacts-directory/contacts-directory.component.scss +8 -6
  46. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -42
  47. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +98 -61
  48. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +9 -25
  49. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component_2.html +116 -0
  50. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +8 -6
  51. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
  52. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +24 -84
  53. package/src/app/components/conversation-info/info-content/info-content.component.html +2 -1
  54. package/src/app/components/conversation-info/info-content/info-content.component.ts +3 -2
  55. package/src/app/components/conversation-info/info-direct/info-direct.component.html +1 -9
  56. package/src/app/components/conversation-info/info-direct/info-direct.component.ts +0 -2
  57. package/src/app/components/conversation-info/info-group/info-group.component.html +44 -108
  58. package/src/app/components/conversation-info/info-group/info-group.component.scss +101 -61
  59. package/src/app/components/conversation-info/info-group/info-group.component.ts +1 -0
  60. package/src/app/components/{ddp-header/ddp-header.component.html → conversations-list/header-conversations-list/header-conversations-list.component.html} +3 -3
  61. package/src/app/components/{ddp-header/ddp-header.component.scss → conversations-list/header-conversations-list/header-conversations-list.component.scss} +16 -4
  62. 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
  63. package/src/app/components/{ddp-header/ddp-header.component.ts → conversations-list/header-conversations-list/header-conversations-list.component.ts} +7 -16
  64. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +12 -0
  65. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +14 -0
  66. 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
  67. 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
  68. package/src/app/components/navbar/navbar.component.html +103 -0
  69. package/src/app/components/navbar/navbar.component.scss +249 -0
  70. package/src/app/components/{ddp-header/ddp-header.component.spec.ts → navbar/navbar.component.spec.ts} +6 -6
  71. package/src/app/components/navbar/navbar.component.ts +189 -0
  72. package/src/app/components/project-item/project-item.component.html +98 -149
  73. package/src/app/components/project-item/project-item.component.scss +43 -35
  74. package/src/app/components/project-item/project-item.component.ts +16 -4
  75. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +3 -3
  76. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +1 -1
  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 +47 -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 +41 -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 +182 -110
  88. package/src/app/pages/conversations-list/conversations-list.page.html +11 -8
  89. package/src/app/pages/conversations-list/conversations-list.page.scss +18 -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 +4 -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 +176 -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 +3 -0
  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 -255
  133. package/src/index.html +0 -9
  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,60 @@
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: var(--padding-conversation-detail);
51
+ border-top-right-radius: var(--border-radius-content);
52
+ &:not(.mobile){
53
+ top: calc(60px + var(--padding-conversation-detail));
54
+ }
55
+ }
56
+
57
+ &.mobile{
58
+ right: 0px;
59
+ }
60
+ &:not(.mobile):not(.close){
61
+ right: calc(300px + var(--padding-conversation-detail));
62
+ top: calc(60px + var(--padding-conversation-detail));
63
+ }
64
+ &::before{
65
+ content: "";
66
+ width: 102px;
67
+ height: 34px;
68
+ background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMTAyIDM0IiB3aWR0aD0iMTAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHBhdGggZD0ibTEwMiAwaC0xMDJsLjA3MTQwOC40MTk3NTNjMTEuMzE5MTkyLS4wMTU1NTggMjIuMjg4MTkyIDMuOTIwMzM3IDMxLjAxMjA5MiAxMS4xMjc2NDdsNy40ODk0IDYuNTAyIDEuNjUwOCAxLjQyMjkgNi42OTU1IDUuNzhjNi41Mzc0IDUuNjQwNSAxNC44ODU3IDguNzQ1MSAyMy41MjI3IDguNzQ3N2gzMS41NTQxeiIKICAgICAgICAgIGZpbGw9IiNlMmU4ZWYiLz4KPC9zdmc+);
69
+ position: relative;
70
+ left: 50px;
71
+ z-index: -1;
72
+ }
73
+
74
+ ion-button {
75
+ text-transform: unset;
76
+ color: var(--basic-blue);
77
+ &:hover {
78
+ --background-hover: transparent;
79
+ text-decoration: underline;
80
+ text-decoration-color: var(--basic-blue);
81
+ }
82
+ }
83
+
84
+ ion-icon{
85
+ margin: 5px;
86
+ }
87
+ }
88
+
89
+
36
90
  ion-item {
37
91
  --padding-end: 0px;
38
92
  --inner-padding-end: 0px;
@@ -60,12 +114,33 @@ ion-item {
60
114
 
61
115
  .message_sender_fullname {
62
116
  font-size: 0.9em;
63
- margin: 0 0 1px 10px;
117
+ margin: 0px 10px 0px 10px;
64
118
  // color: var(--gray);
65
119
  font-weight: 500;
66
120
  color: #080f1a;
67
121
  }
68
122
 
123
+ .typing_container{
124
+ display:flex;
125
+ align-items: center;
126
+
127
+ user-typing {
128
+ text-align: right;
129
+ }
130
+ .typing_info{
131
+ color: var(--basic-gray);
132
+ margin-left: 10px;
133
+ font-size: 12px;
134
+ animation: blinker 1s linear infinite;
135
+
136
+ @keyframes blinker {
137
+ 50% {
138
+ opacity: 0;
139
+ }
140
+ }
141
+ }
142
+ }
143
+
69
144
  .messages {
70
145
  border-radius: 18px;
71
146
  padding: 0;
@@ -82,13 +157,17 @@ ion-item {
82
157
  align-items: flex-end;
83
158
  justify-content: flex-end;
84
159
  // padding: 2px 0px 4px 40px;
85
- padding: 2px 0px 14px 40px; // edited to display the date at the bottom of the "message bubble"
160
+ padding: 0px 0px 6px 40px;
161
+
162
+ &:hover .message-date-hover, &:hover .btn-add-msg{
163
+ display: block;
164
+ }
165
+
86
166
  .msg_sent {
87
167
  background-color: var(--bubble-blue);
88
168
  color: var(--col-msg-sent);
89
- margin-right: 4px;
90
- margin-left: 4px;
91
- max-width: calc(100% - 70px);
169
+ margin: 0px 0px 0px 0px;
170
+ max-width: calc(100% - 85px);
92
171
  min-width: 14px;
93
172
  border-top-right-radius: 8px;
94
173
  border-bottom-right-radius: 0px;
@@ -98,6 +177,9 @@ ion-item {
98
177
  color: var(--bubble-privateMsgColor)
99
178
  }
100
179
  }
180
+ .no-background{
181
+ background: transparent!important;
182
+ }
101
183
  .emoticon {
102
184
  background: unset !important;
103
185
  font-size: 4em;
@@ -112,8 +194,17 @@ ion-item {
112
194
 
113
195
  /** recive message **/
114
196
  .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"
197
+ padding: 0px 20px 6px 0px;
198
+ .message-date{
199
+ color: #647491;
200
+ font-size: 12px;
201
+ align-self: center;
202
+ }
203
+
204
+
205
+ &:hover .message-date-hover, &:hover .btn-add-msg{
206
+ display: block;
207
+ }
117
208
  /* avatar */
118
209
  .content-avatar {
119
210
  position: relative;
@@ -142,12 +233,12 @@ ion-item {
142
233
  }
143
234
  /* message */
144
235
  .msg_receive {
145
- background-color: var(--light-white);
146
- color: #1a1a1a;
236
+ background-color: var(--bck-msg-received);
237
+ color: var(--col-msg-received);
147
238
  // max-width: 260px;
148
- max-width: calc(100% - 70px);
239
+ max-width: calc(100% - 85px);
149
240
  min-width: 14px;
150
- margin: 0 20px 4px 10px;
241
+ margin: 0 0px 0px 10px;
151
242
  height: fit-content;
152
243
  width: auto;
153
244
  border-top-left-radius: 8px;
@@ -158,7 +249,9 @@ ion-item {
158
249
  color: var(--bubble-privateMsgColor)
159
250
  }
160
251
  }
161
-
252
+ .no-background{
253
+ background: transparent!important;
254
+ }
162
255
  .emoticon {
163
256
  background: unset !important;
164
257
  font-size: 4em;
@@ -167,63 +260,93 @@ ion-item {
167
260
  .has-metadata {
168
261
  max-width: 100% !important;
169
262
  }
263
+
170
264
  }
171
265
 
172
- .time {
173
- margin-bottom: 20px;
266
+ .message-date-hover{
267
+ color: #647491;
268
+ font-size: 12px;
269
+ align-self: center;
270
+
271
+ display: none;
272
+
174
273
  }
175
274
 
176
- // Loading Spinner
177
- .spinner {
178
- // margin: 100px auto 0;
179
- width: 90px;
275
+ .btn-add-msg {
276
+ border-radius: 50%;
277
+ --padding-end: 5px;
278
+ --padding-start: 5px;
279
+ box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.13);
280
+ display: none;
281
+ align-self: center;
282
+ margin: 0px 5px;
283
+
284
+ ion-icon{
285
+ font-size: 1.2em;
286
+ color: var(--basic-blue)
287
+ }
288
+
289
+ .add-canned-response-add-icon{
290
+ color: var(--basic-blue);
291
+ cursor: pointer;
292
+ position: relative;
293
+ top: 6px;
294
+ left: -6px;
295
+ font-size: 9px;
296
+ }
297
+ }
298
+
299
+ /* LOADING */
300
+ /*http://tobiasahlin.com/spinkit/*/
301
+ #chat21-spinner {
302
+ display: none;
303
+ width: 70px;
180
304
  min-height: 20px;
181
- padding: 7px;
305
+ margin: 20px auto 0;
182
306
  text-align: center;
183
307
  }
184
-
185
- .spinner > div {
186
- width: 10px;
187
- height: 10px;
188
- background-color: rgb(255, 255, 255);
189
-
308
+ #chat21-spinner.active {
309
+ display: block;
310
+ }
311
+ #chat21-spinner > div {
312
+ width: 12px;
313
+ height: 12px;
314
+ background-color: var(--bubble-blue);
190
315
  border-radius: 100%;
191
316
  display: inline-block;
192
317
  -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
193
318
  animation: sk-bouncedelay 1.4s infinite ease-in-out both;
194
319
  }
195
-
196
- .spinner .bounce1 {
320
+ #chat21-spinner .chat21-bounce1 {
197
321
  -webkit-animation-delay: -0.32s;
198
322
  animation-delay: -0.32s;
199
323
  }
200
-
201
- .spinner .bounce2 {
324
+ #chat21-spinner .chat21-bounce2 {
202
325
  -webkit-animation-delay: -0.16s;
203
326
  animation-delay: -0.16s;
204
327
  }
205
-
328
+ #chat21-spinner span {
329
+ display: block;
330
+ margin: 0.5em 0 0 0;
331
+ color: var(--col-msg-sent);
332
+ /* text-transform: uppercase; */
333
+ font-family: 'Roboto', sans-serif;
334
+ -webkit-animation: pulse 2000ms linear infinite;
335
+ -moz-animation: pulse 2000ms linear infinite;
336
+ animation: pulse 2000ms linear infinite;
337
+ text-align: center;
338
+ }
206
339
  @-webkit-keyframes sk-bouncedelay {
207
- 0%,
208
- 80%,
209
- 100% {
210
- -webkit-transform: scale(0);
211
- }
212
- 40% {
213
- -webkit-transform: scale(1);
214
- }
340
+ 0%, 80%, 100% { -webkit-transform: scale(0) }
341
+ 40% { -webkit-transform: scale(1.0) }
215
342
  }
216
-
217
343
  @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);
344
+ 0%, 80%, 100% {
345
+ -webkit-transform: scale(0);
346
+ transform: scale(0);
347
+ } 40% {
348
+ -webkit-transform: scale(1.0);
349
+ transform: scale(1.0);
227
350
  }
228
351
  }
229
352
 
@@ -245,28 +368,6 @@ ion-item {
245
368
  // left: -26px;
246
369
  }
247
370
 
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
371
  // ---------------------------------------------------------
271
372
  // Long date divider
272
373
  // ---------------------------------------------------------
@@ -295,24 +396,6 @@ ion-item {
295
396
  color: #64748b;
296
397
  }
297
398
 
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
399
  // ---------------------------------------------------------
317
400
  // emoticon
318
401
  // ---------------------------------------------------------
@@ -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,18 @@ export class IonConversationDetailComponent extends ConversationContentComponent
24
27
  @Input() channelType: string;
25
28
  @Input() areVisibleCAR: boolean;
26
29
  @Input() supportMode: boolean;
30
+ @Input() isMobile: boolean;
31
+ @Input() openInfoConversation: boolean;
27
32
  @Output() onElementRendered = new EventEmitter<{element: string, status: boolean}>();
28
33
  @Output() onAddUploadingBubble = new EventEmitter<boolean>();
29
-
34
+ @Output() onOpenCloseInfoConversation = new EventEmitter<boolean>();
35
+
30
36
  public public_Key: any
31
37
  public uploadProgress: number = 100
32
38
  public fileType: any
33
39
  public browserLang: string;
34
40
  public addAsCannedResponseTooltipText: string;
41
+ // public openInfoConversation: boolean = true;
35
42
  isImage = isImage;
36
43
  isFile = isFile;
37
44
  isFrame = isFrame;
@@ -58,6 +65,7 @@ export class IonConversationDetailComponent extends ConversationContentComponent
58
65
  public tiledeskAuthService: TiledeskAuthService,
59
66
  private translate: TranslateService,
60
67
  public appConfigProvider: AppConfigProvider,
68
+ public modalController: ModalController,
61
69
  ) {
62
70
  super(cdref, uploadService)
63
71
 
@@ -66,6 +74,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
66
74
  ngOnInit() {
67
75
  this.listenToUploadFileProgress();
68
76
  this.setMomentLocaleAndGetTranslation();
77
+
78
+ }
79
+
80
+ ngOnChanges(changes: SimpleChanges){
81
+ this.isMobile? this.openInfoConversation = false: null;
69
82
  }
70
83
 
71
84
 
@@ -136,6 +149,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
136
149
  this.onElementRendered.emit(event)
137
150
  }
138
151
 
152
+ onOpenCloseInfoConversationFN(){
153
+ this.openInfoConversation = !this.openInfoConversation
154
+ this.onOpenCloseInfoConversation.emit(this.openInfoConversation)
155
+ }
156
+
139
157
  /**
140
158
  * Track by function for ngFor loops
141
159
  *
@@ -147,4 +165,24 @@ export class IonConversationDetailComponent extends ConversationContentComponent
147
165
  // console.log('[CONVS-DETAIL][ION-CONVS-DETAIL] - trackByFn item', item)
148
166
  return item.uid || index;
149
167
  }
168
+
169
+
170
+ async presentCreateCannedResponseModal(message: MessageModel): Promise<any> {
171
+ this.logger.log('[BUBBLE-MESSAGE] PRESENT CREATE CANNED RESPONSE MODAL ')
172
+ const attributes = {
173
+ message: message,
174
+ }
175
+ const modal: HTMLIonModalElement = await this.modalController.create({
176
+ component: CreateCannedResponsePage,
177
+ componentProps: attributes,
178
+ swipeToClose: false,
179
+ backdropDismiss: false,
180
+ })
181
+ modal.onDidDismiss().then((dataReturned: any) => {
182
+ //
183
+ this.logger.log('[BUBBLE-MESSAGE] ', dataReturned.data)
184
+ })
185
+
186
+ return await modal.present()
187
+ }
150
188
  }
@@ -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