@chat21/chat21-ionic 3.0.77 → 3.0.78-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 (39) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/package.json +1 -1
  3. package/src/app/app.component.scss +1 -1
  4. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +11 -0
  5. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +45 -0
  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/info-message/info-message.component.scss +2 -2
  8. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +62 -34
  9. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +58 -18
  10. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
  11. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -37
  12. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +56 -28
  13. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +6 -20
  14. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component_2.html +1 -1
  15. package/src/app/components/project-item/project-item.component.html +98 -149
  16. package/src/app/components/project-item/project-item.component.scss +39 -32
  17. package/src/app/components/project-item/project-item.component.ts +4 -3
  18. package/src/app/pages/conversation-detail/conversation-detail.page.html +11 -10
  19. package/src/app/pages/conversation-detail/conversation-detail.page.scss +0 -2
  20. package/src/app/pages/conversation-detail/conversation-detail.page.ts +66 -29
  21. package/src/app/pages/conversations-list/conversations-list.page.html +2 -2
  22. package/src/app/pages/conversations-list/conversations-list.page.scss +2 -2
  23. package/src/app/pages/conversations-list/conversations-list.page.ts +7 -0
  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/utils/utils.ts +5 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # chat21-ionic ver 3.0
2
2
 
3
+ ### 3.0.78-rc.2
4
+ - changed: project item UI and tooltip msg
5
+ - changed: conversation UI in conversations list component
6
+ - changed: conversation detail header component
7
+ - added: open/close info-conversation moved from conversation-header to conversation detail component
8
+ - bug-fixed: canned responses opens in incorrect mode
9
+
10
+ ### 3.0.78-rc.1
11
+ - changed: conversation-list page width increased
12
+ - changed: background changed in info-message component
13
+ - changed: project-item UI
14
+ - changed: conversation-list page UI
3
15
 
4
16
  ## 3.0.77 in PROD
5
17
 
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.77",
4
+ "version": "3.0.78-rc.2",
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: 312px;
2
+ min-width: 360px; //312px;
3
3
  display: block; // Safari bug fix
4
4
  margin-left: 60px;
5
5
  }
@@ -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')">
@@ -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;
@@ -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
  *
@@ -6,12 +6,12 @@
6
6
 
7
7
  .base_info {
8
8
  border-radius: 14px;
9
- border: 1px solid #C9E4F6;
9
+ // border: 1px solid rgba(24, 119, 242, 0.1);
10
10
  padding-left: 4px;
11
11
  padding-right: 4px;
12
12
  padding: 6px 10px;
13
13
  display: inline-block;
14
- background: #C9E4F6;
14
+ background: rgba(24, 119, 242, 0.1);
15
15
  font-size: 0.70em;
16
16
  color: var(--basic-gray);
17
17
  margin-left: 5px; //32px;
@@ -80,42 +80,70 @@
80
80
  <div tabindex="0"></div>
81
81
 
82
82
  <!-- <div [class.selected]="conversation.uid === uidConvSelected"></div> -->
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>
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.includes(TYPE_SUPPORT_GROUP) && conversation.channel_type !== TYPE_DIRECT">
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.includes(TYPE_SUPPORT_GROUP) > 0 ">
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>
101
113
  </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>
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>
140
+ </div>
141
+ </ion-label>
142
+ </div>
117
143
 
118
- <ion-note *ngIf="!conversation.archived" class="conversation_time">{{conversation.timestamp | amTimeAgo}}</ion-note>
144
+ <ion-note *ngIf="!conversation.archived" class="conversation_time" [ngClass]="{'is-on-mobile': isApp}">
145
+ {{conversation.timestamp | amTimeAgo}}
146
+ </ion-note>
119
147
 
120
148
  <ion-buttons slot="end">
121
149
  <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: 70px;
13
- --min-height: 70px;
12
+ height: 90px; //70px;
13
+ --min-height: 90px; //70px;
14
14
  position: relative;
15
15
  display: flex;
16
16
  text-decoration: none;
@@ -19,6 +19,13 @@ 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
+ }
22
29
  .selected {
23
30
  // border-radius: 10px;
24
31
  // padding-left: 8px;
@@ -33,12 +40,13 @@ ion-item {
33
40
  ion-avatar {
34
41
  position: relative;
35
42
  padding: 0;
36
- margin: 0 12px 0 8px;
37
- height: 50px;
38
- width: 50px;
39
- min-width: 50px;
40
- min-height: 50px;
41
- line-height: 50px;
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;
42
50
  .avatar-placeholder {
43
51
  position: absolute;
44
52
  top: 0;
@@ -47,7 +55,7 @@ ion-item {
47
55
  height: 100%;
48
56
  border-radius: 50%;
49
57
  text-align: center;
50
- font-size: 20px;
58
+ font-size: 15px; //20px;
51
59
  color: #ffffff;
52
60
  font-weight: 500;
53
61
  }
@@ -70,22 +78,46 @@ ion-item {
70
78
  justify-content: center;
71
79
  min-width: 0;
72
80
  padding: 0;
81
+ margin: 0;
73
82
  font-family: Helvetica, Helvetica, Arial, sans-serif;
74
83
  line-height: 1.28;
75
84
  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
+ }
76
101
  .conversation_with {
77
102
  color: rgba(0, 0, 0, 1);
78
103
  font-size: 15px;
79
104
  font-weight: 400;
80
105
  line-height: 1.4;
106
+ width: 70% !important;
107
+ &.not-read {
108
+ font-weight: 600;
109
+ color: #3c4858; //#1876f2;
110
+ }
81
111
  }
112
+
82
113
  .conversation_message {
83
114
  p {
84
- color: rgba(153, 153, 153, 1);
85
- font-size: 13px;
115
+ color: #6e6f73; //#3c4858;
116
+ font-size: 15px;
86
117
  font-weight: 400;
87
118
  height: 18px;
88
119
  vertical-align: middle;
120
+ align-self: center;
89
121
  &.not-read {
90
122
  font-weight: 600;
91
123
  color: #1876f2;
@@ -93,13 +125,13 @@ ion-item {
93
125
  }
94
126
 
95
127
  span {
96
- color: rgba(153, 153, 153, 1);
97
- font-size: 13px;
128
+ color: rgb(60, 72, 88);
129
+ font-size: 12px;
98
130
  font-weight: 400;
99
131
  height: 18px;
100
132
  &.not-read {
101
133
  font-weight: 600;
102
- color: #1876f2;
134
+ color: #3c4858; //#1876f2;
103
135
  }
104
136
  }
105
137
  }
@@ -107,8 +139,15 @@ ion-item {
107
139
  ion-note {
108
140
  position: absolute;
109
141
  right: 8px;
110
- top: 4px;
142
+ top: 40px;
111
143
  font-size: 10px;
144
+ display: flex;
145
+ flex-direction: column;
146
+ color: #6e6f73;
147
+
148
+ &.is-on-mobile{
149
+ top: 10px;
150
+ }
112
151
  }
113
152
  ion-buttons {
114
153
  margin: 0;
@@ -140,10 +179,10 @@ ion-item {
140
179
  }
141
180
 
142
181
  .notification_point-on-desktop {
143
- bottom: 29px !important;
182
+ bottom: 22px !important;
144
183
  }
145
184
  .notification_point-on-mobile {
146
- bottom: 29px !important;
185
+ bottom: 22px !important;
147
186
  right: 8px;
148
187
  }
149
188
  }
@@ -209,7 +248,8 @@ ion-item:hover {
209
248
  }
210
249
 
211
250
  .ion-selected {
212
- --background: rgb(231, 241, 255);
251
+ --background: rgba(24, 119, 242, 0.04);
252
+ border-right: 4px solid #1876f2;
213
253
  }
214
254
 
215
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,73 @@
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?.includes(TYPE_SUPPORT_GROUP) && !isDirect">
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?.includes(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
+ <app-user-typing
60
+ [idConversation]=conversationAvatar.uid
61
+ [idCurrentUser]=idLoggedUser
62
+ [isDirect]=isDirect
63
+ [translationMap]=translationsMap
64
+ [color]=fontColor
65
+ [membersConversation]=membersConversation>
66
+ </app-user-typing>
67
+
68
+ </div>
38
69
  </div>
70
+
39
71
 
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> -->
72
+
47
73
 
48
74
  </div>
75
+
49
76
 
50
77
  <!-- <div *ngIf="conversationWithFullname" class="tile-info-with" (click)="onOpenCloseInfoConversation()">
51
78
  <span class="tile-username">{{ conversationWithFullname }} </span>
@@ -61,22 +88,19 @@
61
88
  </ion-button> -->
62
89
 
63
90
  <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">
91
+ (click)="closeConversation()" [disabled]="conv_closed === true">
65
92
  <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
66
93
  <ion-icon name="archive-outline"></ion-icon>
67
94
  <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
68
95
  <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Resolve' | translate}} </span>
69
96
  </ion-button>
70
97
 
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()">
98
+ <!-- <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
99
+ <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
100
+ </ion-button> -->
101
+ <!-- <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
78
102
  <ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
79
- </ion-button>
103
+ </ion-button> -->
80
104
 
81
105
  </ion-buttons>
82
106