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