@chat21/chat21-ionic 3.0.78-rc.1 → 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 +7 -0
- package/package.json +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/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 +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 +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 +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/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,12 @@
|
|
|
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
|
+
|
|
3
10
|
### 3.0.78-rc.1
|
|
4
11
|
- changed: conversation-list page width increased
|
|
5
12
|
- changed: background changed in info-message component
|
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
|
*
|
|
@@ -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.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>
|
|
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,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
|
|
|
@@ -27,7 +27,7 @@ ion-header {
|
|
|
27
27
|
text-align: left;
|
|
28
28
|
padding-inline: unset;
|
|
29
29
|
margin: 0px 10px;
|
|
30
|
-
height: 40px;
|
|
30
|
+
// height: 40px;
|
|
31
31
|
width: 100%;
|
|
32
32
|
}
|
|
33
33
|
ion-avatar {
|
|
@@ -73,12 +73,9 @@ ion-header {
|
|
|
73
73
|
// display: inline-block;
|
|
74
74
|
// vertical-align: middle;
|
|
75
75
|
// margin: -6px 0px 0 6px;
|
|
76
|
-
position: absolute;
|
|
77
|
-
margin:
|
|
78
|
-
|
|
79
|
-
top: 0;
|
|
80
|
-
left: 50px;
|
|
81
|
-
vertical-align: middle;
|
|
76
|
+
// position: absolute;
|
|
77
|
+
// margin-left: 12px;
|
|
78
|
+
|
|
82
79
|
// cursor: pointer;
|
|
83
80
|
}
|
|
84
81
|
.tile-point {
|
|
@@ -92,14 +89,12 @@ ion-header {
|
|
|
92
89
|
}
|
|
93
90
|
.tile-username {
|
|
94
91
|
display: inline-block;
|
|
95
|
-
font-size:
|
|
96
|
-
color: var(--black);
|
|
92
|
+
font-size: 18px;
|
|
97
93
|
margin: 0;
|
|
98
94
|
padding: 0;
|
|
99
95
|
|
|
100
|
-
color: #
|
|
101
|
-
font-
|
|
102
|
-
font-weight: 600;
|
|
96
|
+
color: #1f2d3d;
|
|
97
|
+
font-weight: 400; //600;
|
|
103
98
|
-webkit-font-smoothing: antialiased;
|
|
104
99
|
text-rendering: optimizeLegibility;
|
|
105
100
|
-webkit-text-size-adjust: none;
|
|
@@ -133,18 +128,25 @@ ion-header {
|
|
|
133
128
|
}
|
|
134
129
|
}
|
|
135
130
|
|
|
131
|
+
.avatar-and-typing-wpr{
|
|
132
|
+
display: flex;
|
|
133
|
+
&.mobile{
|
|
134
|
+
margin-left: 25px;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
136
138
|
.avatar-container {
|
|
137
139
|
background-color: #fff;
|
|
138
140
|
color: #fff;
|
|
139
141
|
text-align: center;
|
|
140
142
|
width: 40px;
|
|
141
143
|
height: 40px;
|
|
142
|
-
position: absolute;
|
|
143
|
-
top: 0;
|
|
144
|
+
// position: absolute;
|
|
145
|
+
// top: 0;
|
|
146
|
+
// left: 20px;
|
|
144
147
|
border-radius: 50%;
|
|
145
148
|
padding: 0px;
|
|
146
|
-
transform: translateX(-50%);
|
|
147
|
-
left: 20px;
|
|
149
|
+
// transform: translateX(-50%);
|
|
148
150
|
|
|
149
151
|
border-color: #fff;
|
|
150
152
|
border-style: solid;
|
|
@@ -152,6 +154,14 @@ ion-header {
|
|
|
152
154
|
line-height: 40px;
|
|
153
155
|
display: inline-block;
|
|
154
156
|
}
|
|
157
|
+
|
|
158
|
+
.info-container{
|
|
159
|
+
display: flex;
|
|
160
|
+
flex-direction: column;
|
|
161
|
+
justify-content: center;
|
|
162
|
+
margin-left: 12px;
|
|
163
|
+
}
|
|
164
|
+
|
|
155
165
|
.user-presence {
|
|
156
166
|
position: absolute;
|
|
157
167
|
bottom: 0;
|
|
@@ -159,16 +169,38 @@ ion-header {
|
|
|
159
169
|
left: 30px;
|
|
160
170
|
width: 100px;
|
|
161
171
|
}
|
|
162
|
-
.
|
|
163
|
-
position: absolute;
|
|
164
|
-
left: 50px;
|
|
165
|
-
bottom: -3px;
|
|
166
|
-
padding: 0;
|
|
167
|
-
margin: 0;
|
|
168
|
-
|
|
169
|
-
|
|
172
|
+
.subtitle-info {
|
|
173
|
+
// position: absolute;
|
|
174
|
+
// left: 50px;
|
|
175
|
+
// bottom: -3px;
|
|
176
|
+
// padding: 0;
|
|
177
|
+
// margin: 0;
|
|
178
|
+
display: flex;
|
|
179
|
+
align-items: center;
|
|
180
|
+
// height: 16px;
|
|
181
|
+
// width: 140px;
|
|
182
|
+
font-size: 12px;
|
|
183
|
+
.conversation_project{
|
|
184
|
+
display: inline-flex;
|
|
185
|
+
align-items: center;
|
|
186
|
+
line-height: 1.2rem;
|
|
187
|
+
font-weight: 500;
|
|
188
|
+
color: #779bbb;
|
|
189
|
+
font-size: 10px;
|
|
190
|
+
max-width: 90%;
|
|
191
|
+
margin-right: 5px;
|
|
192
|
+
svg {
|
|
193
|
+
fill:#779bbb;
|
|
194
|
+
vertical-align: sub;
|
|
195
|
+
}
|
|
196
|
+
span{
|
|
197
|
+
padding-left: 5px
|
|
198
|
+
}
|
|
199
|
+
}
|
|
170
200
|
}
|
|
171
201
|
|
|
202
|
+
|
|
203
|
+
|
|
172
204
|
.tile-info-with-ios {
|
|
173
205
|
left: 82px !important;
|
|
174
206
|
top: 10px!important;
|
|
@@ -182,7 +214,3 @@ ion-header {
|
|
|
182
214
|
left: 55px;
|
|
183
215
|
top: 10px;
|
|
184
216
|
}
|
|
185
|
-
|
|
186
|
-
.resolve-conv-margin-right {
|
|
187
|
-
margin-right: 52px;
|
|
188
|
-
}
|
|
@@ -22,7 +22,7 @@ import { ModalController } from '@ionic/angular'
|
|
|
22
22
|
import { EventsService } from 'src/app/services/events-service'
|
|
23
23
|
import { CreateTicketPage } from 'src/app/pages/create-ticket/create-ticket.page'
|
|
24
24
|
import { TiledeskService } from 'src/app/services/tiledesk/tiledesk.service'
|
|
25
|
-
import { TYPE_DIRECT } from 'src/chat21-core/utils/constants'
|
|
25
|
+
import { TYPE_DIRECT, TYPE_SUPPORT_GROUP } from 'src/chat21-core/utils/constants'
|
|
26
26
|
|
|
27
27
|
@Component({
|
|
28
28
|
selector: 'app-header-conversation-detail',
|
|
@@ -34,14 +34,11 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
|
|
|
34
34
|
@Input() idLoggedUser: string
|
|
35
35
|
@Input() conversationUid: string
|
|
36
36
|
@Input() conv_type: string
|
|
37
|
-
@Input() isOpenInfoConversation: boolean = true
|
|
38
37
|
@Input() isMobile: boolean
|
|
39
|
-
@Input()
|
|
40
|
-
@Output() eventOpenCloseInfoConversation = new EventEmitter<boolean>()
|
|
38
|
+
@Input() translationsMap: Map<string, string>
|
|
41
39
|
conversationWithFullname: string
|
|
42
40
|
openInfoConversation = true
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
|
|
45
42
|
isDirect = false
|
|
46
43
|
isTyping = false
|
|
47
44
|
borderColor = '#ffffff'
|
|
@@ -52,6 +49,8 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
|
|
|
52
49
|
IS_ON_IOS_MOBILE_DEVICE: boolean
|
|
53
50
|
private logger: LoggerService = LoggerInstance.getInstance()
|
|
54
51
|
|
|
52
|
+
TYPE_SUPPORT_GROUP = TYPE_SUPPORT_GROUP
|
|
53
|
+
|
|
55
54
|
constructor(
|
|
56
55
|
public imageRepoService: ImageRepoService,
|
|
57
56
|
private route: ActivatedRoute,
|
|
@@ -91,8 +90,7 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
|
|
|
91
90
|
this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar', this.conversationAvatar)
|
|
92
91
|
if (this.conversationAvatar) {
|
|
93
92
|
this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
|
|
94
|
-
}
|
|
95
|
-
this.openInfoConversation = this.isOpenInfoConversation
|
|
93
|
+
}
|
|
96
94
|
}
|
|
97
95
|
|
|
98
96
|
// ----------------------------------------------------
|
|
@@ -133,18 +131,6 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
|
|
|
133
131
|
});
|
|
134
132
|
}
|
|
135
133
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
onOpenCloseInfoConversation() {
|
|
139
|
-
this.openInfoMessage = false
|
|
140
|
-
this.openInfoConversation = !this.openInfoConversation
|
|
141
|
-
this.logger.log(
|
|
142
|
-
'[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ',
|
|
143
|
-
this.openInfoConversation,
|
|
144
|
-
)
|
|
145
|
-
this.eventOpenCloseInfoConversation.emit(this.openInfoConversation)
|
|
146
|
-
}
|
|
147
|
-
|
|
148
134
|
/** */
|
|
149
135
|
pushPage(event) { }
|
|
150
136
|
|