@chat21/chat21-ionic 3.0.78-rc.1 → 3.0.78-rc.3

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 (45) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/package.json +1 -1
  3. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
  4. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +31 -2
  5. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +69 -2
  6. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +15 -2
  7. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +1 -1
  8. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +3 -1
  9. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +16 -3
  10. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +5 -2
  11. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
  12. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +52 -37
  13. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +57 -29
  14. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +8 -24
  15. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component_2.html +1 -1
  16. package/src/app/components/ddp-header/ddp-header.component.html +1 -1
  17. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  18. package/src/app/components/project-item/project-item.component.html +13 -33
  19. package/src/app/components/project-item/project-item.component.scss +8 -9
  20. package/src/app/components/project-item/project-item.component.ts +4 -3
  21. package/src/app/pages/conversation-detail/conversation-detail.page.html +14 -10
  22. package/src/app/pages/conversation-detail/conversation-detail.page.scss +0 -2
  23. package/src/app/pages/conversation-detail/conversation-detail.page.ts +161 -48
  24. package/src/assets/i18n/ar.json +268 -265
  25. package/src/assets/i18n/az.json +3 -0
  26. package/src/assets/i18n/de.json +3 -0
  27. package/src/assets/i18n/en.json +3 -0
  28. package/src/assets/i18n/es.json +3 -0
  29. package/src/assets/i18n/fr.json +3 -0
  30. package/src/assets/i18n/it.json +3 -0
  31. package/src/assets/i18n/kk.json +3 -0
  32. package/src/assets/i18n/pt.json +3 -0
  33. package/src/assets/i18n/ru.json +3 -0
  34. package/src/assets/i18n/sr.json +3 -0
  35. package/src/assets/i18n/sv.json +3 -0
  36. package/src/assets/i18n/tr.json +3 -0
  37. package/src/assets/i18n/uk.json +3 -0
  38. package/src/assets/i18n/uz.json +3 -0
  39. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +7 -9
  40. package/src/chat21-core/utils/constants.ts +4 -0
  41. package/src/chat21-core/utils/user-typing/user-typing.component.html +8 -5
  42. package/src/chat21-core/utils/user-typing/user-typing.component.scss +87 -17
  43. package/src/chat21-core/utils/user-typing/user-typing.component.ts +12 -94
  44. package/src/chat21-core/utils/utils.ts +5 -1
  45. package/src/variables.scss +7 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # chat21-ionic ver 3.0
2
2
 
3
+ ### 3.0.78-rc.3
4
+ - changed: user-typing location moved from conversation-header to conversation-detail component
5
+ - changed: replace includes with startsWith for check what type of conversation is in project info conversation-list component
6
+ - added: styleMap integrations to some elements
7
+ - bug-fixed: no tooltip showed if no unserved request are present
8
+
9
+ ### 3.0.78-rc.2
10
+ - changed: project item UI and tooltip msg
11
+ - changed: conversation UI in conversations list component
12
+ - changed: conversation detail header component
13
+ - added: open/close info-conversation moved from conversation-header to conversation detail component
14
+ - bug-fixed: canned responses opens in incorrect mode
15
+
3
16
  ### 3.0.78-rc.1
4
17
  - changed: conversation-list page width increased
5
18
  - changed: background changed in info-message component
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-rc.1",
4
+ "version": "3.0.78-rc.3",
5
5
  "license": "MIT License",
6
6
  "homepage": "https://tiledesk.com/",
7
7
  "repository": {
@@ -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"
@@ -121,8 +135,11 @@
121
135
  <chat-bubble-message class="messages msg_receive" id="message_msg_receive" style="position: relative;"
122
136
  [ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
123
137
  [class.emoticon]="isEmojii(message?.text)"
138
+ [ngStyle]="{'background': stylesMap?.get('bubbleReceivedBackground'), 'color': stylesMap.get('bubbleReceivedTextColor')}"
124
139
  [message]="message"
125
- [textColor]="'black'"
140
+ [fontColor]="stylesMap?.get('bubbleReceivedTextColor')"
141
+ [fontSize]="stylesMap?.get('fontSize')"
142
+ [fontFamily]="stylesMap?.get('fontFamily')"
126
143
  [addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
127
144
  [areVisibleCAR]="areVisibleCAR"
128
145
  [supportMode]="supportMode"
@@ -156,6 +173,18 @@
156
173
  </div>
157
174
  </div>
158
175
 
176
+ <div *ngIf="isTypings" class="msg_container base_receive typing_container">
177
+ <!-- !isSameSender(idUserTypingNow, i) -->
178
+ <!-- <div *ngIf="nameUserTypingNow">{{nameUserTypingNow}}</div> -->
179
+ <user-typing
180
+ [themeColor]="stylesMap?.get('themeColor')"
181
+ [translationMap]="translationMap"
182
+ [idUserTypingNow]="idUserTypingNow"
183
+ [nameUserTypingNow]="nameUserTypingNow">
184
+ </user-typing>
185
+ <div class="typing_info" *ngIf="nameUserTypingNow"> {{nameUserTypingNow}} {{translationMap.get('LABEL_IS_WRITING')}}</div>
186
+ </div>
187
+
159
188
  </div>
160
189
 
161
190
  <!-- fileType > {{fileType }} uploadProgress {{uploadProgress}} -->
@@ -33,6 +33,51 @@
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
+ &::before{
57
+ content: "";
58
+ width: 102px;
59
+ height: 34px;
60
+ background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMTAyIDM0IiB3aWR0aD0iMTAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHBhdGggZD0ibTEwMiAwaC0xMDJsLjA3MTQwOC40MTk3NTNjMTEuMzE5MTkyLS4wMTU1NTggMjIuMjg4MTkyIDMuOTIwMzM3IDMxLjAxMjA5MiAxMS4xMjc2NDdsNy40ODk0IDYuNTAyIDEuNjUwOCAxLjQyMjkgNi42OTU1IDUuNzhjNi41Mzc0IDUuNjQwNSAxNC44ODU3IDguNzQ1MSAyMy41MjI3IDguNzQ3N2gzMS41NTQxeiIKICAgICAgICAgIGZpbGw9IiNlMmU4ZWYiLz4KPC9zdmc+);
61
+ position: relative;
62
+ left: 50px;
63
+ z-index: -1;
64
+ }
65
+
66
+ ion-button {
67
+ text-transform: unset;
68
+ &:hover {
69
+ --background-hover: transparent;
70
+ text-decoration: underline;
71
+ text-decoration-color: var(--ion-color-primary);
72
+ }
73
+ }
74
+
75
+ ion-icon{
76
+ margin: 5px;
77
+ }
78
+ }
79
+
80
+
36
81
  ion-item {
37
82
  --padding-end: 0px;
38
83
  --inner-padding-end: 0px;
@@ -66,6 +111,27 @@ ion-item {
66
111
  color: #080f1a;
67
112
  }
68
113
 
114
+ .typing_container{
115
+ display:flex;
116
+ align-items: center;
117
+
118
+ user-typing {
119
+ text-align: right;
120
+ }
121
+ .typing_info{
122
+ color: var(--basic-gray);
123
+ margin-left: 10px;
124
+ font-size: 12px;
125
+ animation: blinker 1s linear infinite;
126
+
127
+ @keyframes blinker {
128
+ 50% {
129
+ opacity: 0;
130
+ }
131
+ }
132
+ }
133
+ }
134
+
69
135
  .messages {
70
136
  border-radius: 18px;
71
137
  padding: 0;
@@ -142,8 +208,8 @@ ion-item {
142
208
  }
143
209
  /* message */
144
210
  .msg_receive {
145
- background-color: var(--light-white);
146
- color: #1a1a1a;
211
+ background-color: var(--bck-msg-received);
212
+ color: var(--col-msg-received);
147
213
  // max-width: 260px;
148
214
  max-width: calc(100% - 70px);
149
215
  min-width: 14px;
@@ -167,6 +233,7 @@ ion-item {
167
233
  .has-metadata {
168
234
  max-width: 100% !important;
169
235
  }
236
+
170
237
  }
171
238
 
172
239
  .time {
@@ -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();
@@ -94,9 +94,22 @@
94
94
  <div class="conv-container">
95
95
  <ion-label>
96
96
  <div class="conversation_project truncate">
97
- <svg xmlns="http://www.w3.org/2000/svg" data-v-78d18411="" width="15" height="15" fill="none" viewBox="0 0 24 24" class="inbox-icon"><path d="M22.002 12C22.002 6.477 17.524 2 12 2 6.476 1.999 2 6.477 2 12.001c0 5.186 3.947 9.45 9.001 9.952V20.11c-.778-.612-1.478-1.905-1.939-3.61h1.94V15H8.737a18.969 18.969 0 0 1-.135-5h6.794c.068.64.105 1.31.105 2h1.5c0-.684-.033-1.353-.095-2h3.358c.154.64.237 1.31.237 2h1.5ZM4.786 16.5h2.722l.102.396c.317 1.17.748 2.195 1.27 3.015a8.532 8.532 0 0 1-4.094-3.41ZM3.736 10h3.358a20.847 20.847 0 0 0-.095 2c0 1.043.075 2.051.217 3H4.043a8.483 8.483 0 0 1-.544-3c0-.682.08-1.347.232-1.983L3.736 10Zm5.122-5.902.023-.008C8.16 5.222 7.611 6.748 7.298 8.5H4.25c.905-2 2.56-3.587 4.608-4.402Zm3.026-.594L12 3.5l.126.006c1.262.126 2.48 2.125 3.045 4.995H8.83c.568-2.878 1.79-4.88 3.055-4.996Zm3.343.76-.107-.174.291.121a8.533 8.533 0 0 1 4.339 4.29h-3.048c-.298-1.665-.806-3.125-1.475-4.237Z M12 19a1 1 0 0 0 1 1h3v2h-.5a.5.5 0 1 0 0 1h4a.5.5 0 0 0 0-1H19v-2h3a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1h-9a1 1 0 0 0-1 1v5Z" fill="currentColor"/></svg>
98
- <span *ngIf="conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.project_name}}</span>
99
- <span *ngIf="!conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.projectId}}</span>
97
+ <!-- DIRECT CONV -->
98
+ <div *ngIf="conversation.channel_type === TYPE_DIRECT">
99
+ <svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24" fill="#000000"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
100
+ <span class="truncate">{{translationsMap.get('DIRECT_CHAT')}}</span>
101
+ </div>
102
+ <!-- GROUP CONV -->
103
+ <div *ngIf="conversation.uid.startsWith(TYPE_GROUP)">
104
+ <svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24" fill="#000000"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>
105
+ <span class="truncate">{{translationsMap.get('GROUP_CHAT')}}</span>
106
+ </div>
107
+ <!-- SUPPORT-GROUP CONV -->
108
+ <div *ngIf="conversation.uid.startsWith(TYPE_SUPPORT_GROUP)">
109
+ <svg xmlns="http://www.w3.org/2000/svg" data-v-78d18411="" width="15" height="15" fill="none" viewBox="0 0 24 24" class="inbox-icon"><path d="M22.002 12C22.002 6.477 17.524 2 12 2 6.476 1.999 2 6.477 2 12.001c0 5.186 3.947 9.45 9.001 9.952V20.11c-.778-.612-1.478-1.905-1.939-3.61h1.94V15H8.737a18.969 18.969 0 0 1-.135-5h6.794c.068.64.105 1.31.105 2h1.5c0-.684-.033-1.353-.095-2h3.358c.154.64.237 1.31.237 2h1.5ZM4.786 16.5h2.722l.102.396c.317 1.17.748 2.195 1.27 3.015a8.532 8.532 0 0 1-4.094-3.41ZM3.736 10h3.358a20.847 20.847 0 0 0-.095 2c0 1.043.075 2.051.217 3H4.043a8.483 8.483 0 0 1-.544-3c0-.682.08-1.347.232-1.983L3.736 10Zm5.122-5.902.023-.008C8.16 5.222 7.611 6.748 7.298 8.5H4.25c.905-2 2.56-3.587 4.608-4.402Zm3.026-.594L12 3.5l.126.006c1.262.126 2.48 2.125 3.045 4.995H8.83c.568-2.878 1.79-4.88 3.055-4.996Zm3.343.76-.107-.174.291.121a8.533 8.533 0 0 1 4.339 4.29h-3.048c-.298-1.665-.806-3.125-1.475-4.237Z M12 19a1 1 0 0 0 1 1h3v2h-.5a.5.5 0 1 0 0 1h4a.5.5 0 0 0 0-1H19v-2h3a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1h-9a1 1 0 0 0-1 1v5Z" fill="currentColor"/></svg>
110
+ <span *ngIf="conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.project_name}}</span>
111
+ <span *ngIf="!conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.projectId}}</span>
112
+ </div>
100
113
  </div>
101
114
  <div style="display: flex;">
102
115
  <span class="conversation_with truncate" [class.not-read]="conversation.is_new">
@@ -19,6 +19,8 @@ ion-item {
19
19
  --padding-start: 0;
20
20
  --inner-padding-end: 0;
21
21
  --background-hover: #000000 !important;
22
+ border-radius: 16px;
23
+ margin: 4px 5px;
22
24
  .conv-container{
23
25
  width: 84%;
24
26
  height: 100%;
@@ -89,7 +91,8 @@ ion-item {
89
91
  font-size: 10px;
90
92
  max-width: 90%;
91
93
  svg {
92
- color:#779bbb;
94
+ fill:#779bbb;
95
+ vertical-align: sub;
93
96
  }
94
97
  span{
95
98
  padding-left: 5px
@@ -246,7 +249,7 @@ ion-item:hover {
246
249
 
247
250
  .ion-selected {
248
251
  --background: rgba(24, 119, 242, 0.04);
249
- border-right: 2px solid #1876f2;
252
+ border-right: 4px solid #1876f2;
250
253
  }
251
254
 
252
255
  .time-in-archived {
@@ -1,3 +1,5 @@
1
+ import { TYPE_GROUP, TYPE_SUPPORT_GROUP } from './../../../../chat21-core/utils/constants';
2
+ import { TYPE_DIRECT } from 'src/chat21-core/utils/constants';
1
3
  import { Component, EventEmitter, Input, IterableDiffers, KeyValueDiffers, OnInit, Output, SimpleChange } from '@angular/core';
2
4
  import { ConversationModel } from 'src/chat21-core/models/conversation';
3
5
  import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
@@ -14,6 +16,7 @@ import { AppConfigProvider } from 'src/app/services/app-config';
14
16
  import { DomSanitizer } from '@angular/platform-browser'
15
17
  import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk-auth.service';
16
18
  import { AlertController } from '@ionic/angular';
19
+ import { CustomTranslateService } from 'src/chat21-core/providers/custom-translate.service';
17
20
  // import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
18
21
  // import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
19
22
 
@@ -35,6 +38,8 @@ export class IonListConversationsComponent extends ListConversationsComponent im
35
38
  public currentYear: any;
36
39
  public browserLang: string;
37
40
 
41
+ public translationsMap: Map<string, string> = new Map()
42
+
38
43
  public PROJECT_FOR_PANEL: any;
39
44
  public archive_btn_tooltip: string;
40
45
  public resolve_btn_tooltip: string;
@@ -52,6 +57,10 @@ export class IonListConversationsComponent extends ListConversationsComponent im
52
57
  'hideDelayAfterClick': 3000,
53
58
  'hide-delay': 100
54
59
  };
60
+
61
+ TYPE_DIRECT = TYPE_DIRECT;
62
+ TYPE_GROUP = TYPE_GROUP;
63
+ TYPE_SUPPORT_GROUP = TYPE_SUPPORT_GROUP;
55
64
  /**
56
65
  *
57
66
  * @param iterableDiffers
@@ -63,6 +72,7 @@ export class IonListConversationsComponent extends ListConversationsComponent im
63
72
  public kvDiffers: KeyValueDiffers,
64
73
  public platform: Platform,
65
74
  private translate: TranslateService,
75
+ private translateService: CustomTranslateService,
66
76
  private networkService: NetworkService,
67
77
  private appConfigProvider: AppConfigProvider,
68
78
  private sanitizer: DomSanitizer,
@@ -73,7 +83,6 @@ export class IonListConversationsComponent extends ListConversationsComponent im
73
83
  super(iterableDiffers, kvDiffers)
74
84
  this.setMomentLocale();
75
85
 
76
-
77
86
  // if (this.browserLang) {
78
87
 
79
88
  // moment.locale(this.browserLang)
@@ -123,16 +132,11 @@ export class IonListConversationsComponent extends ListConversationsComponent im
123
132
  'ALERT_TITLE',
124
133
  'ActionNotAllowed',
125
134
  'CLOSE_ALERT_CONFIRM_LABEL',
126
- 'YouAreNoLongerAmongTheTeammatesManagingThisConversation'
135
+ 'YouAreNoLongerAmongTheTeammatesManagingThisConversation',
136
+ 'GROUP_CHAT',
137
+ 'DIRECT_CHAT'
127
138
  ]
128
- this.translate.get(['Resolve', 'Archive', 'ALERT_TITLE']).subscribe((translations: string) => {
129
- this.resolve_btn_tooltip = translations['Resolve'];
130
- this.archive_btn_tooltip = translations['Archive'];
131
- this.alert_lbl = translations['ALERT_TITLE']
132
- this.actionNotAllowed_lbl = translations['ActionNotAllowed']
133
- this.ok_lbl = translations['CLOSE_ALERT_CONFIRM_LABEL']
134
- this.youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl = translations['YouAreNoLongerAmongTheTeammatesManagingThisConversation']
135
- });
139
+ this.translationsMap = this.translateService.translateLanguage(translationKeys)
136
140
  }
137
141
 
138
142
  setMomentLocale() {
@@ -6,46 +6,64 @@
6
6
  </ion-back-button>
7
7
  </ion-buttons>
8
8
 
9
- <ion-title [class.info-open]="openInfoConversation || openInfoMessage">
9
+ <ion-title>
10
10
 
11
- <div *ngIf="conversationAvatar" class="avatar-and-typing-wpr" >
11
+ <div *ngIf="conversationAvatar" class="avatar-and-typing-wpr" [ngClass]="{'mobile': isMobile}">
12
12
  <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '55px' : '' }" -->
13
- <div *ngIf="conversationAvatar" class="avatar-container" (click)="onOpenCloseInfoConversation()" style="cursor: pointer"
13
+ <div class="avatar-container" style="cursor: pointer"
14
14
  [ngClass]="{ 'avatar-container-ios': platformName === 'ios' }">
15
15
  <app-avatar-profile
16
16
  [itemAvatar]=conversationAvatar>
17
17
  </app-avatar-profile>
18
18
  </div>
19
- <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '63px' : '' }" -->
20
- <div *ngIf="isDirect" class="user-presence" [ngClass]="{ 'user-presence-ios': platformName === 'ios' }">
21
- <app-user-presence
22
- [idUser]=conversationAvatar.conversation_with
23
- [translationMap]=translationMap
24
- [borderColor]=borderColor
25
- [fontColor]=fontColor>
26
- </app-user-presence>
27
- </div>
19
+ <div class="info-container">
20
+
21
+ <!-- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' ? '82px' : ''82px'' }" -->
22
+ <!-- (click)="onOpenCloseInfoConversation()" -->
23
+ <div class="tile-info-with"
24
+ [ngClass]="{ 'tile-info-with-ios': platformName === 'ios' }">
25
+ <span class="tile-username">{{ conversationAvatar.conversation_with_fullname | truncate:50 }} </span>
26
+ <!-- <span class="tile-username">{{ conversation_with_fullname }} </span> -->
27
+ </div>
28
+
29
+ <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '63px' : '' }" -->
30
+ <div *ngIf="isDirect" class="user-presence" [ngClass]="{ 'user-presence-ios': platformName === 'ios' }">
31
+ <app-user-presence
32
+ [idUser]=conversationAvatar.conversation_with
33
+ [translationMap]=translationsMap
34
+ [borderColor]=borderColor
35
+ [fontColor]=fontColor>
36
+ </app-user-presence>
37
+ </div>
38
+
39
+ <div class="subtitle-info">
40
+ <div class="conversation_project">
41
+ <!-- DIRECT CONV -->
42
+ <div *ngIf="isDirect">
43
+ <svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24" fill="#000000"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
44
+ <span class="truncate">{{translationsMap.get('DIRECT_CHAT')}}</span>
45
+ </div>
46
+ <!-- GROUP CONV -->
47
+ <div *ngIf="conversationUid?.startsWith(TYPE_GROUP)">
48
+ <svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24" fill="#000000"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>
49
+ <span class="truncate">{{translationsMap.get('GROUP_CHAT')}}</span>
50
+ </div>
51
+ <!-- SUPPORT-GROUP CONV -->
52
+ <div *ngIf="conversationUid?.startsWith(TYPE_SUPPORT_GROUP)">
53
+ <svg xmlns="http://www.w3.org/2000/svg" data-v-78d18411="" width="15" height="15" fill="none" viewBox="0 0 24 24" class="inbox-icon"><path d="M22.002 12C22.002 6.477 17.524 2 12 2 6.476 1.999 2 6.477 2 12.001c0 5.186 3.947 9.45 9.001 9.952V20.11c-.778-.612-1.478-1.905-1.939-3.61h1.94V15H8.737a18.969 18.969 0 0 1-.135-5h6.794c.068.64.105 1.31.105 2h1.5c0-.684-.033-1.353-.095-2h3.358c.154.64.237 1.31.237 2h1.5ZM4.786 16.5h2.722l.102.396c.317 1.17.748 2.195 1.27 3.015a8.532 8.532 0 0 1-4.094-3.41ZM3.736 10h3.358a20.847 20.847 0 0 0-.095 2c0 1.043.075 2.051.217 3H4.043a8.483 8.483 0 0 1-.544-3c0-.682.08-1.347.232-1.983L3.736 10Zm5.122-5.902.023-.008C8.16 5.222 7.611 6.748 7.298 8.5H4.25c.905-2 2.56-3.587 4.608-4.402Zm3.026-.594L12 3.5l.126.006c1.262.126 2.48 2.125 3.045 4.995H8.83c.568-2.878 1.79-4.88 3.055-4.996Zm3.343.76-.107-.174.291.121a8.533 8.533 0 0 1 4.339 4.29h-3.048c-.298-1.665-.806-3.125-1.475-4.237Z M12 19a1 1 0 0 0 1 1h3v2h-.5a.5.5 0 1 0 0 1h4a.5.5 0 0 0 0-1H19v-2h3a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1h-9a1 1 0 0 0-1 1v5Z" fill="currentColor"/></svg>
54
+ <span *ngIf="conversationAvatar?.project_name" class="truncate">{{conversationAvatar?.project_name}}</span>
55
+ <span *ngIf="!conversationAvatar?.project_name" class="truncate">{{conversationAvatar?.projectId}}</span>
56
+ </div>
57
+ </div>
28
58
 
29
- <div *ngIf="conversationAvatar" class="user-typing">
30
- <app-user-typing
31
- [idConversation]=conversationAvatar.uid
32
- [idCurrentUser]=idLoggedUser
33
- [isDirect]=isDirect
34
- [translationMap]=translationMap
35
- [color]=fontColor
36
- [membersConversation]=membersConversation>
37
- </app-user-typing>
59
+ </div>
38
60
  </div>
61
+
39
62
 
40
- </div>
41
- <!-- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' ? '82px' : ''82px'' }" -->
42
- <!-- (click)="onOpenCloseInfoConversation()" -->
43
- <div *ngIf="conversationAvatar" class="tile-info-with"
44
- [ngClass]="{ 'tile-info-with-ios': platformName === 'ios' }">
45
- <span class="tile-username">{{ conversationAvatar.conversation_with_fullname | truncate:50 }} </span>
46
- <!-- <span class="tile-username">{{ conversation_with_fullname }} </span> -->
63
+
47
64
 
48
65
  </div>
66
+
49
67
 
50
68
  <!-- <div *ngIf="conversationWithFullname" class="tile-info-with" (click)="onOpenCloseInfoConversation()">
51
69
  <span class="tile-username">{{ conversationWithFullname }} </span>
@@ -61,22 +79,19 @@
61
79
  </ion-button> -->
62
80
 
63
81
  <ion-button *ngIf="conversationUid?.startsWith('support-group') && conv_type !== 'archived'" ion-button fill="clear" color="primary" size="small"
64
- (click)="closeConversation()" [ngClass]="{'resolve-conv-margin-right': !isMobile}" [disabled]="conv_closed === true">
82
+ (click)="closeConversation()" [disabled]="conv_closed === true">
65
83
  <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
66
84
  <ion-icon name="archive-outline"></ion-icon>
67
85
  <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
68
86
  <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Resolve' | translate}} </span>
69
87
  </ion-button>
70
88
 
71
- <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
72
- <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
73
- <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
74
- <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
75
-
76
- </ion-button>
77
- <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
89
+ <!-- <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
90
+ <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
91
+ </ion-button> -->
92
+ <!-- <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
78
93
  <ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
79
- </ion-button>
94
+ </ion-button> -->
80
95
 
81
96
  </ion-buttons>
82
97