@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.
- package/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/src/app/app.component.scss +1 -1
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +11 -0
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +45 -0
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +15 -2
- package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -2
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +62 -34
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +58 -18
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -37
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +56 -28
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +6 -20
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component_2.html +1 -1
- package/src/app/components/project-item/project-item.component.html +98 -149
- package/src/app/components/project-item/project-item.component.scss +39 -32
- package/src/app/components/project-item/project-item.component.ts +4 -3
- package/src/app/pages/conversation-detail/conversation-detail.page.html +11 -10
- package/src/app/pages/conversation-detail/conversation-detail.page.scss +0 -2
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +66 -29
- package/src/app/pages/conversations-list/conversations-list.page.html +2 -2
- package/src/app/pages/conversations-list/conversations-list.page.scss +2 -2
- package/src/app/pages/conversations-list/conversations-list.page.ts +7 -0
- package/src/assets/i18n/ar.json +268 -265
- package/src/assets/i18n/az.json +3 -0
- package/src/assets/i18n/de.json +3 -0
- package/src/assets/i18n/en.json +3 -0
- package/src/assets/i18n/es.json +3 -0
- package/src/assets/i18n/fr.json +3 -0
- package/src/assets/i18n/it.json +3 -0
- package/src/assets/i18n/kk.json +3 -0
- package/src/assets/i18n/pt.json +3 -0
- package/src/assets/i18n/ru.json +3 -0
- package/src/assets/i18n/sr.json +3 -0
- package/src/assets/i18n/sv.json +3 -0
- package/src/assets/i18n/tr.json +3 -0
- package/src/assets/i18n/uk.json +3 -0
- package/src/assets/i18n/uz.json +3 -0
- 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
|
@@ -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
|
*
|
package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
.base_info {
|
|
8
8
|
border-radius: 14px;
|
|
9
|
-
border: 1px solid
|
|
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:
|
|
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
|
-
<
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
<
|
|
103
|
-
[
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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"
|
|
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:
|
|
85
|
-
font-size:
|
|
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:
|
|
97
|
-
font-size:
|
|
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:
|
|
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:
|
|
182
|
+
bottom: 22px !important;
|
|
144
183
|
}
|
|
145
184
|
.notification_point-on-mobile {
|
|
146
|
-
bottom:
|
|
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:
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
[
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
|