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

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 (50) hide show
  1. package/CHANGELOG.md +2 -16
  2. package/package.json +1 -1
  3. package/src/app/app.component.scss +1 -1
  4. package/src/app/app.component.ts +2 -7
  5. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +1 -8
  6. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +2 -31
  7. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +2 -69
  8. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +2 -15
  9. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +1 -1
  10. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +1 -3
  11. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -2
  12. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +34 -62
  13. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +18 -58
  14. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +10 -14
  15. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +37 -52
  16. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +29 -57
  17. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +24 -8
  18. package/src/app/components/ddp-header/ddp-header.component.html +1 -1
  19. package/src/app/components/ddp-header/ddp-header.component.scss +0 -4
  20. package/src/app/components/project-item/project-item.component.html +149 -98
  21. package/src/app/components/project-item/project-item.component.scss +32 -39
  22. package/src/app/components/project-item/project-item.component.ts +4 -5
  23. package/src/app/pages/conversation-detail/conversation-detail.page.html +10 -14
  24. package/src/app/pages/conversation-detail/conversation-detail.page.scss +2 -0
  25. package/src/app/pages/conversation-detail/conversation-detail.page.ts +43 -156
  26. package/src/app/pages/conversations-list/conversations-list.page.html +2 -2
  27. package/src/app/pages/conversations-list/conversations-list.page.scss +2 -2
  28. package/src/app/pages/conversations-list/conversations-list.page.ts +0 -7
  29. package/src/assets/i18n/ar.json +265 -268
  30. package/src/assets/i18n/az.json +0 -3
  31. package/src/assets/i18n/de.json +0 -3
  32. package/src/assets/i18n/en.json +0 -3
  33. package/src/assets/i18n/es.json +0 -3
  34. package/src/assets/i18n/fr.json +0 -3
  35. package/src/assets/i18n/it.json +0 -3
  36. package/src/assets/i18n/kk.json +0 -3
  37. package/src/assets/i18n/pt.json +0 -3
  38. package/src/assets/i18n/ru.json +0 -3
  39. package/src/assets/i18n/sr.json +0 -3
  40. package/src/assets/i18n/sv.json +0 -3
  41. package/src/assets/i18n/tr.json +0 -3
  42. package/src/assets/i18n/uk.json +0 -3
  43. package/src/assets/i18n/uz.json +0 -3
  44. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +9 -7
  45. package/src/chat21-core/utils/constants.ts +0 -4
  46. package/src/chat21-core/utils/user-typing/user-typing.component.html +5 -8
  47. package/src/chat21-core/utils/user-typing/user-typing.component.scss +17 -87
  48. package/src/chat21-core/utils/user-typing/user-typing.component.ts +94 -12
  49. package/src/chat21-core/utils/utils.ts +1 -5
  50. package/src/variables.scss +1 -7
package/CHANGELOG.md CHANGED
@@ -1,23 +1,9 @@
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
3
+ ## 3.0.78 in PROD
4
+ - bug-fixed: unassigned request not sound the if is the first at all
14
5
  - bug-fixed: canned responses opens in incorrect mode
15
6
 
16
- ### 3.0.78-rc.1
17
- - changed: conversation-list page width increased
18
- - changed: background changed in info-message component
19
- - changed: project-item UI
20
- - changed: conversation-list page UI
21
7
 
22
8
  ## 3.0.77 in PROD
23
9
 
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.3",
4
+ "version": "3.0.78",
5
5
  "license": "MIT License",
6
6
  "homepage": "https://tiledesk.com/",
7
7
  "repository": {
@@ -1,5 +1,5 @@
1
1
  .split-pane-md.split-pane-visible > .split-pane-side {
2
- min-width: 360px; //312px;
2
+ min-width: 312px;
3
3
  display: block; // Safari bug fix
4
4
  margin-left: 60px;
5
5
  }
@@ -102,7 +102,6 @@ export class AppComponent implements OnInit {
102
102
  public missingConnectionToast: any
103
103
  public executedInitializeAppByWatchConnection: boolean = false;
104
104
  private isInitialized: boolean = false;
105
- private hasToSoundUnservedRequestCount: boolean = false;
106
105
  private version: string;
107
106
  IS_ONLINE: boolean;
108
107
  IS_ON_MOBILE_DEVICE: boolean;
@@ -1125,7 +1124,6 @@ export class AppComponent implements OnInit {
1125
1124
  if (hasClickedLogout === true) {
1126
1125
  this.appStorageService.removeItem('conversations')
1127
1126
  this.isInitialized = false;
1128
- this.hasToSoundUnservedRequestCount = false;
1129
1127
  // ----------------------------------------------
1130
1128
  // PUSH NOTIFICATIONS
1131
1129
  // ----------------------------------------------
@@ -1150,12 +1148,9 @@ export class AppComponent implements OnInit {
1150
1148
 
1151
1149
  subscribeUnservedRequestCount = (unservedRequestCount) => {
1152
1150
  if(unservedRequestCount && unservedRequestCount > 0){
1153
- this.logger.debug("hasToSoundUnservedRequestCount::::", this.hasToSoundUnservedRequestCount, this.isInitialized)
1154
- if(this.hasToSoundUnservedRequestCount){
1151
+ this.logger.debug("hasToSoundUnservedRequestCount::::", this.isInitialized)
1152
+ if(this.isInitialized){
1155
1153
  this.manageTabNotification(unservedRequestCount) //sound and alternate title
1156
- } else {
1157
- //not sound the first time
1158
- this.hasToSoundUnservedRequestCount = true
1159
1154
  }
1160
1155
  }
1161
1156
  }
@@ -17,18 +17,11 @@ 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;
26
20
  @Input() translationMap: Map<string, string>;
27
21
  @Input() stylesMap: Map<string, string>;
28
22
  @Output() onBeforeMessageRender = new EventEmitter();
29
23
  @Output() onAfterMessageRender = new EventEmitter();
30
- @Output() onMenuOptionShow = new EventEmitter<boolean>();
31
- @Output() onEmojiiPickerShow = new EventEmitter<boolean>()
24
+ @Output() onMenuOptionShow = new EventEmitter();
32
25
  @Output() onAttachmentButtonClicked = new EventEmitter();
33
26
  @Output() onScrollContent = new EventEmitter();
34
27
 
@@ -52,19 +52,8 @@
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>
65
55
 
66
56
  <div class="conversation-wpr" style="height: 100%;">
67
-
68
57
  <div *ngFor="let message of messages; let i = index; let first = first; trackBy: trackByFn">
69
58
 
70
59
  <ng-container *ngIf="first || (messages[i - 1].timestamp | date:'d') !== (message.timestamp | date:'d')">
@@ -92,12 +81,9 @@
92
81
  <chat-bubble-message class="messages msg_sent" id="message_msg_sent" style="position: relative;"
93
82
  [ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
94
83
  [class.emoticon]="isEmojii(message?.text)"
95
- [ngStyle]="{'background': stylesMap.get('bubbleSentBackground'), 'color': stylesMap.get('bubbleSentTextColor')}"
96
84
  [ngClass]="{'button-in-msg' : message.metadata && message.metadata.button}"
97
85
  [message]="message"
98
- [fontColor]="stylesMap.get('bubbleSentTextColor')"
99
- [fontSize]="stylesMap.get('fontSize')"
100
- [fontFamily]="stylesMap.get('fontFamily')"
86
+ [textColor]="'col-msg-sent'"
101
87
  [addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
102
88
  [areVisibleCAR]="areVisibleCAR"
103
89
  [supportMode]="supportMode"
@@ -135,11 +121,8 @@
135
121
  <chat-bubble-message class="messages msg_receive" id="message_msg_receive" style="position: relative;"
136
122
  [ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
137
123
  [class.emoticon]="isEmojii(message?.text)"
138
- [ngStyle]="{'background': stylesMap?.get('bubbleReceivedBackground'), 'color': stylesMap.get('bubbleReceivedTextColor')}"
139
124
  [message]="message"
140
- [fontColor]="stylesMap?.get('bubbleReceivedTextColor')"
141
- [fontSize]="stylesMap?.get('fontSize')"
142
- [fontFamily]="stylesMap?.get('fontFamily')"
125
+ [textColor]="'black'"
143
126
  [addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
144
127
  [areVisibleCAR]="areVisibleCAR"
145
128
  [supportMode]="supportMode"
@@ -173,18 +156,6 @@
173
156
  </div>
174
157
  </div>
175
158
 
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
-
188
159
  </div>
189
160
 
190
161
  <!-- fileType > {{fileType }} uploadProgress {{uploadProgress}} -->
@@ -33,51 +33,6 @@
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
-
81
36
  ion-item {
82
37
  --padding-end: 0px;
83
38
  --inner-padding-end: 0px;
@@ -111,27 +66,6 @@ ion-item {
111
66
  color: #080f1a;
112
67
  }
113
68
 
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
-
135
69
  .messages {
136
70
  border-radius: 18px;
137
71
  padding: 0;
@@ -208,8 +142,8 @@ ion-item {
208
142
  }
209
143
  /* message */
210
144
  .msg_receive {
211
- background-color: var(--bck-msg-received);
212
- color: var(--col-msg-received);
145
+ background-color: var(--light-white);
146
+ color: #1a1a1a;
213
147
  // max-width: 260px;
214
148
  max-width: calc(100% - 70px);
215
149
  min-width: 14px;
@@ -233,7 +167,6 @@ ion-item {
233
167
  .has-metadata {
234
168
  max-width: 100% !important;
235
169
  }
236
-
237
170
  }
238
171
 
239
172
  .time {
@@ -1,5 +1,5 @@
1
1
  import { ConversationContentComponent } from '../conversation-content/conversation-content.component';
2
- import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter, SimpleChange, SimpleChanges } from '@angular/core';
2
+ import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter } 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,17 +24,14 @@ export class IonConversationDetailComponent extends ConversationContentComponent
24
24
  @Input() channelType: string;
25
25
  @Input() areVisibleCAR: boolean;
26
26
  @Input() supportMode: boolean;
27
- @Input() isMobile: boolean;
28
27
  @Output() onElementRendered = new EventEmitter<{element: string, status: boolean}>();
29
28
  @Output() onAddUploadingBubble = new EventEmitter<boolean>();
30
- @Output() onOpenCloseInfoConversation = new EventEmitter<boolean>();
31
-
29
+
32
30
  public public_Key: any
33
31
  public uploadProgress: number = 100
34
32
  public fileType: any
35
33
  public browserLang: string;
36
34
  public addAsCannedResponseTooltipText: string;
37
- public openInfoConversation: boolean = true;
38
35
  isImage = isImage;
39
36
  isFile = isFile;
40
37
  isFrame = isFrame;
@@ -69,11 +66,6 @@ export class IonConversationDetailComponent extends ConversationContentComponent
69
66
  ngOnInit() {
70
67
  this.listenToUploadFileProgress();
71
68
  this.setMomentLocaleAndGetTranslation();
72
-
73
- }
74
-
75
- ngOnChanges(changes: SimpleChanges){
76
- this.isMobile? this.openInfoConversation = false: null;
77
69
  }
78
70
 
79
71
 
@@ -144,11 +136,6 @@ export class IonConversationDetailComponent extends ConversationContentComponent
144
136
  this.onElementRendered.emit(event)
145
137
  }
146
138
 
147
- onOpenCloseInfoConversationFN(){
148
- this.openInfoConversation = !this.openInfoConversation
149
- this.onOpenCloseInfoConversation.emit(this.openInfoConversation)
150
- }
151
-
152
139
  /**
153
140
  * Track by function for ngFor loops
154
141
  *
@@ -50,7 +50,7 @@
50
50
 
51
51
  <chat-text *ngIf="message?.type !=='html'"
52
52
  [text]="message?.text"
53
- [color]="fontColor"
53
+ [color]="textColor"
54
54
  [message]="message"
55
55
  (onBeforeMessageRender)="returnOnBeforeMessageRender($event)"
56
56
  (onAfterMessageRender)="returnOnAfterMessageRender($event)">
@@ -18,9 +18,7 @@ import { ModalController } from '@ionic/angular';
18
18
  export class BubbleMessageComponent implements OnInit, OnChanges {
19
19
 
20
20
  @Input() message: MessageModel;
21
- @Input() fontColor: string;
22
- @Input() fontSize: string;
23
- @Input() fontFamily: string;
21
+ @Input() textColor: string;
24
22
  @Input() areVisibleCAR: boolean;
25
23
  @Input() supportMode: boolean;
26
24
  @Output() onBeforeMessageRender = new EventEmitter();
@@ -6,12 +6,12 @@
6
6
 
7
7
  .base_info {
8
8
  border-radius: 14px;
9
- // border: 1px solid rgba(24, 119, 242, 0.1);
9
+ border: 1px solid #C9E4F6;
10
10
  padding-left: 4px;
11
11
  padding-right: 4px;
12
12
  padding: 6px 10px;
13
13
  display: inline-block;
14
- background: rgba(24, 119, 242, 0.1);
14
+ background: #C9E4F6;
15
15
  font-size: 0.70em;
16
16
  color: var(--basic-gray);
17
17
  margin-left: 5px; //32px;
@@ -80,70 +80,42 @@
80
80
  <div tabindex="0"></div>
81
81
 
82
82
  <!-- <div [class.selected]="conversation.uid === uidConvSelected"></div> -->
83
- <div>
84
- <ion-avatar item-start>
85
- <!-- [style.background-color]="conversation.color" -->
86
- <div #avatarPlaceholder class="avatar-placeholder"
87
- [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + conversation.color + ')'}"
88
- [innerHTML]="conversation.avatar"></div>
89
- <div *ngIf="conversation.image" #avatarImage class="avatar-profile"
90
- [style.background-image]="'url(' + conversation.image + ')'"></div>
91
- <!-- <div *ngIf="getImageAvatar(conversation.sender)" #avatarImage class="avatar-profile" [style.background-image]="'url(' + getImageAvatar(conversation.sender) + ')'"></div> -->
92
- </ion-avatar>
93
- </div>
94
- <div class="conv-container">
95
- <ion-label>
96
- <div class="conversation_project truncate">
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>
113
- </div>
114
- <div style="display: flex;">
115
- <span class="conversation_with truncate" [class.not-read]="conversation.is_new">
116
- {{conversation.conversation_with_fullname}}
117
- </span>
118
- </div>
119
- <div class="conversation_message truncate-conv-msg" [ngClass]="{'truncate-on-desktop': !isApp}">
120
-
121
- <!-- -------------------------------------------------------------------------- -->
122
- <!-- if conversation type is image display the image icon before the message -->
123
- <!-- -------------------------------------------------------------------------- -->
124
- <!-- <div *ngIf="conversation.type === 'image'" class="icon-image-before-msg-wpr">
125
- <ion-icon name="image-outline" class="icon-image-before-msg"></ion-icon>
126
- </div>
127
- <p [class.not-read]="conversation.is_new" class="truncate" [ngClass]="{'truncate-on-desktop': !isApp}"
128
- [innerHTML]="conversation.last_message_text"></p> -->
129
-
130
- <!-- <div *ngIf="conversation.type === 'image'" class="icon-image-before-msg-wpr"> -->
131
- <ion-icon *ngIf="conversation.type === 'image' && conversation.type !== 'file' " name="image-outline"
132
- class="icon-image-before-msg"></ion-icon>
133
- <ion-icon *ngIf="conversation.type === 'file' && conversation.type !== 'image'" name="attach-outline"
134
- class="icon-attach-before-msg"></ion-icon>
135
- <!-- </div> -->
136
- <!-- [innerHTML]="conversation.last_message_text" -->
137
- <span [class.not-read]="conversation.is_new">
138
- {{ conversation.last_message_text }}
139
- </span>
83
+ <ion-avatar item-start>
84
+ <!-- [style.background-color]="conversation.color" -->
85
+ <div #avatarPlaceholder class="avatar-placeholder"
86
+ [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + conversation.color + ')'}"
87
+ [innerHTML]="conversation.avatar"></div>
88
+ <div *ngIf="conversation.image" #avatarImage class="avatar-profile"
89
+ [style.background-image]="'url(' + conversation.image + ')'"></div>
90
+ <!-- <div *ngIf="getImageAvatar(conversation.sender)" #avatarImage class="avatar-profile" [style.background-image]="'url(' + getImageAvatar(conversation.sender) + ')'"></div> -->
91
+ </ion-avatar>
92
+ <ion-label>
93
+ <div class="conversation_with truncate">{{conversation.conversation_with_fullname}}</div>
94
+ <div class="conversation_message truncate-conv-msg" [ngClass]="{'truncate-on-desktop': !isApp}">
95
+
96
+ <!-- -------------------------------------------------------------------------- -->
97
+ <!-- if conversation type is image display the image icon before the message -->
98
+ <!-- -------------------------------------------------------------------------- -->
99
+ <!-- <div *ngIf="conversation.type === 'image'" class="icon-image-before-msg-wpr">
100
+ <ion-icon name="image-outline" class="icon-image-before-msg"></ion-icon>
140
101
  </div>
141
- </ion-label>
142
- </div>
102
+ <p [class.not-read]="conversation.is_new" class="truncate" [ngClass]="{'truncate-on-desktop': !isApp}"
103
+ [innerHTML]="conversation.last_message_text"></p> -->
104
+
105
+ <!-- <div *ngIf="conversation.type === 'image'" class="icon-image-before-msg-wpr"> -->
106
+ <ion-icon *ngIf="conversation.type === 'image' && conversation.type !== 'file' " name="image-outline"
107
+ class="icon-image-before-msg"></ion-icon>
108
+ <ion-icon *ngIf="conversation.type === 'file' && conversation.type !== 'image'" name="attach-outline"
109
+ class="icon-attach-before-msg"></ion-icon>
110
+ <!-- </div> -->
111
+ <!-- [innerHTML]="conversation.last_message_text" -->
112
+ <span [class.not-read]="conversation.is_new">
113
+ {{ conversation.last_message_text }}
114
+ </span>
115
+ </div>
116
+ </ion-label>
143
117
 
144
- <ion-note *ngIf="!conversation.archived" class="conversation_time" [ngClass]="{'is-on-mobile': isApp}">
145
- {{conversation.timestamp | amTimeAgo}}
146
- </ion-note>
118
+ <ion-note *ngIf="!conversation.archived" class="conversation_time">{{conversation.timestamp | amTimeAgo}}</ion-note>
147
119
 
148
120
  <ion-buttons slot="end">
149
121
  <ion-button *ngIf="!conversation.archived" [tooltip]="archiveTooltip" [options]="tooltip_options" placement="bottom" content-type="template"
@@ -9,8 +9,8 @@
9
9
  }
10
10
  ion-item {
11
11
  cursor: pointer;
12
- height: 90px; //70px;
13
- --min-height: 90px; //70px;
12
+ height: 70px;
13
+ --min-height: 70px;
14
14
  position: relative;
15
15
  display: flex;
16
16
  text-decoration: none;
@@ -19,13 +19,6 @@ 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;
24
- .conv-container{
25
- width: 84%;
26
- height: 100%;
27
- padding: 12px 0;
28
- }
29
22
  .selected {
30
23
  // border-radius: 10px;
31
24
  // padding-left: 8px;
@@ -40,13 +33,12 @@ ion-item {
40
33
  ion-avatar {
41
34
  position: relative;
42
35
  padding: 0;
43
- margin: 20px 8px 0px 8px;//0 12px 0 8px;
44
- height: 40px; //50px;
45
- width: 40px; //50px;
46
- min-width: 40px; //50px;
47
- min-height: 40px; //50px;
48
- line-height: 40px; //50px;
49
- align-self: end;
36
+ margin: 0 12px 0 8px;
37
+ height: 50px;
38
+ width: 50px;
39
+ min-width: 50px;
40
+ min-height: 50px;
41
+ line-height: 50px;
50
42
  .avatar-placeholder {
51
43
  position: absolute;
52
44
  top: 0;
@@ -55,7 +47,7 @@ ion-item {
55
47
  height: 100%;
56
48
  border-radius: 50%;
57
49
  text-align: center;
58
- font-size: 15px; //20px;
50
+ font-size: 20px;
59
51
  color: #ffffff;
60
52
  font-weight: 500;
61
53
  }
@@ -78,46 +70,22 @@ ion-item {
78
70
  justify-content: center;
79
71
  min-width: 0;
80
72
  padding: 0;
81
- margin: 0;
82
73
  font-family: Helvetica, Helvetica, Arial, sans-serif;
83
74
  line-height: 1.28;
84
75
  text-rendering: optimizeLegibility;
85
- .conversation_project{
86
- display: inline-flex;
87
- align-items: center;
88
- line-height: 1.2rem;
89
- font-weight: 500;
90
- color: #779bbb;
91
- font-size: 10px;
92
- max-width: 90%;
93
- svg {
94
- fill:#779bbb;
95
- vertical-align: sub;
96
- }
97
- span{
98
- padding-left: 5px
99
- }
100
- }
101
76
  .conversation_with {
102
77
  color: rgba(0, 0, 0, 1);
103
78
  font-size: 15px;
104
79
  font-weight: 400;
105
80
  line-height: 1.4;
106
- width: 70% !important;
107
- &.not-read {
108
- font-weight: 600;
109
- color: #3c4858; //#1876f2;
110
- }
111
81
  }
112
-
113
82
  .conversation_message {
114
83
  p {
115
- color: #6e6f73; //#3c4858;
116
- font-size: 15px;
84
+ color: rgba(153, 153, 153, 1);
85
+ font-size: 13px;
117
86
  font-weight: 400;
118
87
  height: 18px;
119
88
  vertical-align: middle;
120
- align-self: center;
121
89
  &.not-read {
122
90
  font-weight: 600;
123
91
  color: #1876f2;
@@ -125,13 +93,13 @@ ion-item {
125
93
  }
126
94
 
127
95
  span {
128
- color: rgb(60, 72, 88);
129
- font-size: 12px;
96
+ color: rgba(153, 153, 153, 1);
97
+ font-size: 13px;
130
98
  font-weight: 400;
131
99
  height: 18px;
132
100
  &.not-read {
133
101
  font-weight: 600;
134
- color: #3c4858; //#1876f2;
102
+ color: #1876f2;
135
103
  }
136
104
  }
137
105
  }
@@ -139,15 +107,8 @@ ion-item {
139
107
  ion-note {
140
108
  position: absolute;
141
109
  right: 8px;
142
- top: 40px;
110
+ top: 4px;
143
111
  font-size: 10px;
144
- display: flex;
145
- flex-direction: column;
146
- color: #6e6f73;
147
-
148
- &.is-on-mobile{
149
- top: 10px;
150
- }
151
112
  }
152
113
  ion-buttons {
153
114
  margin: 0;
@@ -179,10 +140,10 @@ ion-item {
179
140
  }
180
141
 
181
142
  .notification_point-on-desktop {
182
- bottom: 22px !important;
143
+ bottom: 29px !important;
183
144
  }
184
145
  .notification_point-on-mobile {
185
- bottom: 22px !important;
146
+ bottom: 29px !important;
186
147
  right: 8px;
187
148
  }
188
149
  }
@@ -248,8 +209,7 @@ ion-item:hover {
248
209
  }
249
210
 
250
211
  .ion-selected {
251
- --background: rgba(24, 119, 242, 0.04);
252
- border-right: 4px solid #1876f2;
212
+ --background: rgb(231, 241, 255);
253
213
  }
254
214
 
255
215
  .time-in-archived {