@chat21/chat21-ionic 3.0.60 → 3.0.61-rc11
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 +75 -0
- package/README.md +2 -0
- package/angular.json +3 -0
- package/config.xml +5 -5
- package/deploy_pre.sh +10 -10
- package/deploy_prod.sh +5 -1
- package/env.sample +3 -1
- package/package.json +12 -7
- package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
- package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
- package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
- package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
- package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
- package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
- package/resources/{Android → android}/icon.png +0 -0
- package/resources/{Android → android}/splash/drawable-land-hdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-land-ldpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-land-mdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-land-xhdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-land-xxhdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-land-xxxhdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-port-hdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-port-ldpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-port-mdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-port-xhdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-port-xxhdpi-screen.png +0 -0
- package/resources/{Android → android}/splash/drawable-port-xxxhdpi-screen.png +0 -0
- package/resources/{Android → android}/splash.png +0 -0
- package/src/app/app-routing.module.ts +10 -0
- package/src/app/app.component.html +14 -4
- package/src/app/app.component.scss +18 -1
- package/src/app/app.component.ts +50 -16
- package/src/app/app.module.ts +7 -1
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +103 -12
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +5 -1
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +147 -65
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +3 -3
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +12 -2
- package/src/app/components/ddp-header/ddp-header.component.html +20 -6
- package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
- package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
- package/src/app/components/project-item/project-item.component.html +8 -7
- package/src/app/components/project-item/project-item.component.scss +6 -1
- package/src/app/components/project-item/project-item.component.ts +15 -2
- package/src/app/components/sidebar/sidebar.component.html +274 -0
- package/src/app/components/sidebar/sidebar.component.scss +79 -0
- package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
- package/src/app/components/sidebar/sidebar.component.ts +493 -0
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +110 -0
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +318 -0
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +486 -0
- package/src/app/pages/conversation-detail/conversation-detail.module.ts +2 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.html +7 -5
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +1285 -790
- package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
- package/src/app/pages/conversations-list/conversations-list.page.html +18 -9
- package/src/app/pages/conversations-list/conversations-list.page.scss +9 -1
- package/src/app/pages/conversations-list/conversations-list.page.ts +753 -428
- package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
- package/src/app/pages/create-requester/create-requester.module.ts +28 -0
- package/src/app/pages/create-requester/create-requester.page.html +67 -0
- package/src/app/pages/create-requester/create-requester.page.scss +30 -0
- package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
- package/src/app/pages/create-requester/create-requester.page.ts +137 -0
- package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
- package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
- package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
- package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
- package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
- package/src/app/pages/create-ticket/create-ticket.page.ts +423 -0
- package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
- package/src/app/pages/profile-info/profile-info.page.html +2 -2
- package/src/app/pages/profile-info/profile-info.page.scss +1 -1
- package/src/app/pages/profile-info/profile-info.page.ts +23 -21
- package/src/app/services/tiledesk/tiledesk.service.ts +181 -0
- package/src/app/shared/shared.module.ts +13 -0
- package/src/app/utils/scrollbar-theme.directive.ts +58 -24
- package/src/assets/i18n/de.json +55 -13
- package/src/assets/i18n/en.json +48 -6
- package/src/assets/i18n/es.json +47 -5
- package/src/assets/i18n/fr.json +50 -8
- package/src/assets/i18n/it.json +47 -5
- package/src/assets/i18n/pt.json +47 -5
- package/src/assets/i18n/ru.json +48 -6
- package/src/assets/i18n/sr.json +251 -0
- package/src/assets/i18n/tr.json +47 -5
- package/src/assets/images/default-avatar-x-select.png +0 -0
- package/src/assets/images/language_flag/ar.png +0 -0
- package/src/assets/images/language_flag/bg.png +0 -0
- package/src/assets/images/language_flag/ca.png +0 -0
- package/src/assets/images/language_flag/cs.png +0 -0
- package/src/assets/images/language_flag/da.png +0 -0
- package/src/assets/images/language_flag/de.png +0 -0
- package/src/assets/images/language_flag/el.png +0 -0
- package/src/assets/images/language_flag/en.png +0 -0
- package/src/assets/images/language_flag/es.png +0 -0
- package/src/assets/images/language_flag/fa.png +0 -0
- package/src/assets/images/language_flag/fi.png +0 -0
- package/src/assets/images/language_flag/fr.png +0 -0
- package/src/assets/images/language_flag/he.png +0 -0
- package/src/assets/images/language_flag/hi.png +0 -0
- package/src/assets/images/language_flag/hr.png +0 -0
- package/src/assets/images/language_flag/hu.png +0 -0
- package/src/assets/images/language_flag/id.png +0 -0
- package/src/assets/images/language_flag/it.png +0 -0
- package/src/assets/images/language_flag/ja.png +0 -0
- package/src/assets/images/language_flag/ko.png +0 -0
- package/src/assets/images/language_flag/ml-IN.png +0 -0
- package/src/assets/images/language_flag/ne-NP.png +0 -0
- package/src/assets/images/language_flag/nl.png +0 -0
- package/src/assets/images/language_flag/no.png +0 -0
- package/src/assets/images/language_flag/pl.png +0 -0
- package/src/assets/images/language_flag/pt-BR.png +0 -0
- package/src/assets/images/language_flag/pt.png +0 -0
- package/src/assets/images/language_flag/ro.png +0 -0
- package/src/assets/images/language_flag/ru.png +0 -0
- package/src/assets/images/language_flag/sk.png +0 -0
- package/src/assets/images/language_flag/sl.png +0 -0
- package/src/assets/images/language_flag/sr.png +0 -0
- package/src/assets/images/language_flag/sv-SE.png +0 -0
- package/src/assets/images/language_flag/ta.png +0 -0
- package/src/assets/images/language_flag/th.png +0 -0
- package/src/assets/images/language_flag/tr.png +0 -0
- package/src/assets/images/language_flag/uk.png +0 -0
- package/src/assets/images/language_flag/vi.png +0 -0
- package/src/assets/images/language_flag/zh-CN.png +0 -0
- package/src/assets/images/language_flag/zh-TW.png +0 -0
- package/src/assets/images/no_image_user.png +0 -0
- package/src/assets/images/priority_icons/high.svg +3 -0
- package/src/assets/images/priority_icons/high_v2.svg +14 -0
- package/src/assets/images/priority_icons/low.svg +10 -0
- package/src/assets/images/priority_icons/low_v2.svg +14 -0
- package/src/assets/images/priority_icons/medium.svg +16 -0
- package/src/assets/images/priority_icons/medium_v2.svg +11 -0
- package/src/assets/images/priority_icons/urgent.svg +4 -0
- package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
- package/src/assets/tiledesk-solo-logo.png +0 -0
- package/src/chat-config-pre-test.json +3 -1
- package/src/chat-config-template.json +3 -1
- package/src/chat-config.json +4 -2
- package/src/chat21-core/utils/constants.ts +6 -1
- package/src/global.scss +397 -3
- package/src/index.html +7 -0
- package/publish_pre.sh +0 -33
- package/publish_prod.sh +0 -33
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, IterableDiffers, KeyValueDiffers, OnInit, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, IterableDiffers, KeyValueDiffers, OnInit, Output, SimpleChange } from '@angular/core';
|
|
2
2
|
import { ConversationModel } from 'src/chat21-core/models/conversation';
|
|
3
3
|
import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
|
|
4
4
|
import { convertMessage } from 'src/chat21-core/utils/utils';
|
|
@@ -9,12 +9,11 @@ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
|
|
|
9
9
|
import { TranslateService } from '@ngx-translate/core';
|
|
10
10
|
|
|
11
11
|
import * as moment from 'moment';
|
|
12
|
-
// import { EventsService } from 'src/app/services/events-service';
|
|
13
|
-
// import { TiledeskService } from '../../../services/tiledesk/tiledesk.service';
|
|
14
12
|
import { NetworkService } from '../../../services/network-service/network.service';
|
|
15
13
|
import { AppConfigProvider } from 'src/app/services/app-config';
|
|
16
14
|
import { DomSanitizer } from '@angular/platform-browser'
|
|
17
15
|
import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk-auth.service';
|
|
16
|
+
import { AlertController } from '@ionic/angular';
|
|
18
17
|
// import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
19
18
|
// import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
20
19
|
|
|
@@ -25,8 +24,10 @@ import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk
|
|
|
25
24
|
})
|
|
26
25
|
export class IonListConversationsComponent extends ListConversationsComponent implements OnInit {
|
|
27
26
|
|
|
27
|
+
@Input() archiveActionNotAllowed: boolean;
|
|
28
28
|
@Input() uidConvSelected: string;
|
|
29
29
|
@Output() onCloseConversation = new EventEmitter<ConversationModel>();
|
|
30
|
+
@Output() onCloseAlert = new EventEmitter();
|
|
30
31
|
|
|
31
32
|
convertMessage = convertMessage;
|
|
32
33
|
isApp: boolean = false;
|
|
@@ -35,7 +36,22 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
35
36
|
public browserLang: string;
|
|
36
37
|
|
|
37
38
|
public PROJECT_FOR_PANEL: any;
|
|
38
|
-
|
|
39
|
+
public archive_btn_tooltip: string;
|
|
40
|
+
public resolve_btn_tooltip: string;
|
|
41
|
+
public alert_lbl: string;
|
|
42
|
+
public actionNotAllowed_lbl: string;
|
|
43
|
+
public youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl: string;
|
|
44
|
+
public ok_lbl: string;
|
|
45
|
+
|
|
46
|
+
tooltip_options = {
|
|
47
|
+
'show-delay': 0,
|
|
48
|
+
'tooltip-class': 'chat-tooltip',
|
|
49
|
+
'theme': 'light',
|
|
50
|
+
'shadow': false,
|
|
51
|
+
'hide-delay-mobile': 0,
|
|
52
|
+
'hideDelayAfterClick': 3000,
|
|
53
|
+
'hide-delay': 100
|
|
54
|
+
};
|
|
39
55
|
/**
|
|
40
56
|
*
|
|
41
57
|
* @param iterableDiffers
|
|
@@ -47,12 +63,12 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
47
63
|
public kvDiffers: KeyValueDiffers,
|
|
48
64
|
public platform: Platform,
|
|
49
65
|
private translate: TranslateService,
|
|
50
|
-
// private events: EventsService,
|
|
51
|
-
// private tiledeskService: TiledeskService,
|
|
52
66
|
private networkService: NetworkService,
|
|
53
67
|
private appConfigProvider: AppConfigProvider,
|
|
54
68
|
private sanitizer: DomSanitizer,
|
|
55
|
-
public tiledeskAuthService: TiledeskAuthService
|
|
69
|
+
public tiledeskAuthService: TiledeskAuthService,
|
|
70
|
+
public alertController: AlertController
|
|
71
|
+
|
|
56
72
|
) {
|
|
57
73
|
super(iterableDiffers, kvDiffers)
|
|
58
74
|
this.setMomentLocale();
|
|
@@ -78,6 +94,60 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
78
94
|
|
|
79
95
|
// console.log('[ION-LIST-CONVS-COMP] - DASHBOARD_BASE_URL ', DASHBOARD_BASE_URL)
|
|
80
96
|
this.PROJECT_FOR_PANEL = this.sanitizer.bypassSecurityTrustResourceUrl(DASHBOARD_BASE_URL + '#/project-for-panel');
|
|
97
|
+
this.translateLbls();
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
ngOnInit() {
|
|
101
|
+
this.isApp = this.platform.is('ios') || this.platform.is('android')
|
|
102
|
+
this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - IS-APP ', this.isApp)
|
|
103
|
+
this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - Platform', this.platform.platforms());
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
ngOnChanges(changes: { [property: string]: SimpleChange }) {
|
|
108
|
+
// Extract changes to the input property by its name
|
|
109
|
+
let change: SimpleChange = changes['archiveActionNotAllowed'];
|
|
110
|
+
this.logger.log('[ION-LIST-CONVS-COMP] - ngOnChanges change ', change);
|
|
111
|
+
// console.log('[ION-LIST-CONVS-COMP] - ngOnChanges change currentValue ', change.currentValue)
|
|
112
|
+
if (change && change.currentValue === true) {
|
|
113
|
+
this.pesentAlertActionNotAllowed()
|
|
114
|
+
}
|
|
115
|
+
// Whenever the data in the parent changes, this method gets triggered. You
|
|
116
|
+
// can act on the changes here. You will have both the previous value and the
|
|
117
|
+
// current value here.
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
translateLbls() {
|
|
122
|
+
this.translate.get('Resolve')
|
|
123
|
+
.subscribe((text: string) => {
|
|
124
|
+
this.resolve_btn_tooltip = text;
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
this.translate.get('Archive')
|
|
128
|
+
.subscribe((text: string) => {
|
|
129
|
+
this.archive_btn_tooltip = text;
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
this.translate.get('ALERT_TITLE')
|
|
133
|
+
.subscribe((text: string) => {
|
|
134
|
+
this.alert_lbl = text;
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
this.translate.get('ActionNotAllowed')
|
|
138
|
+
.subscribe((text: string) => {
|
|
139
|
+
this.actionNotAllowed_lbl = text;
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
this.translate.get('YouAreNoLongerAmongTheTeammatesManagingThisConversation')
|
|
143
|
+
.subscribe((text: string) => {
|
|
144
|
+
this.youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl = text;
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
this.translate.get('CLOSE_ALERT_CONFIRM_LABEL')
|
|
148
|
+
.subscribe((text: string) => {
|
|
149
|
+
this.ok_lbl = text;
|
|
150
|
+
});
|
|
81
151
|
}
|
|
82
152
|
|
|
83
153
|
setMomentLocale() {
|
|
@@ -103,10 +173,29 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
103
173
|
moment.locale(chat_lang)
|
|
104
174
|
}
|
|
105
175
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
async pesentAlertActionNotAllowed() {
|
|
179
|
+
|
|
180
|
+
const alert = await this.alertController.create({
|
|
181
|
+
cssClass: 'my-custom-class',
|
|
182
|
+
header: this.alert_lbl,
|
|
183
|
+
subHeader: this.actionNotAllowed_lbl,
|
|
184
|
+
message: this.youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl,
|
|
185
|
+
buttons: [
|
|
186
|
+
{
|
|
187
|
+
text: this.ok_lbl,
|
|
188
|
+
handler: () => {
|
|
189
|
+
this.alertClosed();
|
|
190
|
+
// console.log('Confirm Okay');
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
await alert.present();
|
|
197
|
+
|
|
198
|
+
|
|
110
199
|
}
|
|
111
200
|
|
|
112
201
|
|
|
@@ -130,7 +219,9 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
130
219
|
// });
|
|
131
220
|
// }
|
|
132
221
|
|
|
133
|
-
|
|
222
|
+
alertClosed() {
|
|
223
|
+
this.onCloseAlert.emit(true)
|
|
224
|
+
}
|
|
134
225
|
|
|
135
226
|
closeConversation(conversation: ConversationModel) {
|
|
136
227
|
var conversationId = conversation.uid;
|
|
@@ -1,50 +1,40 @@
|
|
|
1
|
-
|
|
2
1
|
<ion-header no-border class="ion-no-border">
|
|
3
|
-
<ion-toolbar>
|
|
4
|
-
|
|
5
|
-
<ion-buttons slot="start">
|
|
2
|
+
<ion-toolbar style="height:60px">
|
|
3
|
+
<ion-buttons slot="start" style="height:60px">
|
|
6
4
|
<!-- (click)="pushPage('conversations-list')" defaultHref="/conversations-list" -->
|
|
7
5
|
<ion-back-button style="display: block;" text="" *ngIf="isMobile" (click)="goBackToConversationList()">
|
|
8
|
-
</ion-back-button>
|
|
6
|
+
</ion-back-button>
|
|
9
7
|
</ion-buttons>
|
|
10
8
|
|
|
11
9
|
<ion-title [class.info-open]="openInfoConversation || openInfoMessage">
|
|
12
10
|
|
|
13
|
-
<div *ngIf="conversationAvatar" class="avatar-and-typing-wpr">
|
|
11
|
+
<div *ngIf="conversationAvatar" class="avatar-and-typing-wpr" >
|
|
14
12
|
<!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '55px' : '' }" -->
|
|
15
|
-
<div *ngIf="conversationAvatar" class="avatar-container"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
></app-avatar-profile>
|
|
13
|
+
<div *ngIf="conversationAvatar" class="avatar-container" (click)="onOpenCloseInfoConversation()" style="cursor: pointer"
|
|
14
|
+
[ngClass]="{ 'avatar-container-ios': platformName === 'ios' }">
|
|
15
|
+
<app-avatar-profile [itemAvatar]=conversationAvatar></app-avatar-profile>
|
|
19
16
|
</div>
|
|
20
17
|
<!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '63px' : '' }" -->
|
|
21
|
-
<div *ngIf="isDirect" class="user-presence" [ngClass]
|
|
22
|
-
<app-user-presence
|
|
23
|
-
[
|
|
24
|
-
[translationMap] = translationMap
|
|
25
|
-
[borderColor] = borderColor
|
|
26
|
-
[fontColor] = fontColor>
|
|
18
|
+
<div *ngIf="isDirect" class="user-presence" [ngClass]="{ 'user-presence-ios': platformName === 'ios' }">
|
|
19
|
+
<app-user-presence [idUser]=conversationAvatar.conversation_with [translationMap]=translationMap
|
|
20
|
+
[borderColor]=borderColor [fontColor]=fontColor>
|
|
27
21
|
</app-user-presence>
|
|
28
22
|
</div>
|
|
29
23
|
|
|
30
24
|
<div *ngIf="conversationAvatar" class="user-typing">
|
|
31
|
-
<app-user-typing
|
|
32
|
-
[
|
|
33
|
-
|
|
34
|
-
[isDirect] = isDirect
|
|
35
|
-
[translationMap] = translationMap
|
|
36
|
-
[color] = fontColor
|
|
37
|
-
[membersConversation] = membersConversation
|
|
38
|
-
></app-user-typing>
|
|
25
|
+
<app-user-typing [idConversation]=conversationAvatar.uid [idCurrentUser]=idLoggedUser [isDirect]=isDirect
|
|
26
|
+
[translationMap]=translationMap [color]=fontColor [membersConversation]=membersConversation>
|
|
27
|
+
</app-user-typing>
|
|
39
28
|
</div>
|
|
40
29
|
|
|
41
30
|
</div>
|
|
42
31
|
<!-- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' ? '82px' : ''82px'' }" -->
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
<!-- (click)="onOpenCloseInfoConversation()" -->
|
|
33
|
+
<div *ngIf="conversationAvatar" class="tile-info-with"
|
|
34
|
+
[ngClass]="{ 'tile-info-with-ios': platformName === 'ios' }">
|
|
45
35
|
<!-- <span class="tile-username">{{ conversationAvatar.conversation_with_fullname }} </span> -->
|
|
46
36
|
<span class="tile-username">{{ conversation_with_fullname }} </span>
|
|
47
|
-
|
|
37
|
+
|
|
48
38
|
</div>
|
|
49
39
|
|
|
50
40
|
<!-- <div *ngIf="conversationWithFullname" class="tile-info-with" (click)="onOpenCloseInfoConversation()">
|
|
@@ -55,15 +45,28 @@
|
|
|
55
45
|
<!-- openInfoConversation {{openInfoConversation}} -->
|
|
56
46
|
<ion-buttons slot="end">
|
|
57
47
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
<!-- <ion-button ion-button fill="clear" color="primary" size="small" (click)="presentCreateTicketModal()" [ngClass]="{'resolve-conv-margin-right': !isMobile}">
|
|
49
|
+
<ion-icon name="ticket-outline"></ion-icon>
|
|
50
|
+
<span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Crea ticket' | translate}} </span>
|
|
51
|
+
</ion-button> -->
|
|
52
|
+
|
|
53
|
+
<ion-button *ngIf="idConv.startsWith('support-group') && conv_type !== 'archived'" ion-button fill="clear" color="primary" size="small"
|
|
54
|
+
(click)="closeConversation()" [ngClass]="{'resolve-conv-margin-right': !isMobile}" [disabled]="conv_closed === true">
|
|
55
|
+
<!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
|
|
56
|
+
<ion-icon name="archive-outline"></ion-icon>
|
|
57
|
+
<!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
|
|
58
|
+
<span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Resolve' | translate}} </span>
|
|
59
|
+
</ion-button>
|
|
60
|
+
|
|
61
|
+
<ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
|
|
62
|
+
<!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
|
|
63
|
+
<ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
|
|
64
|
+
<!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
|
|
65
|
+
|
|
66
|
+
</ion-button>
|
|
67
|
+
<ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
|
|
68
|
+
<ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
|
|
69
|
+
</ion-button>
|
|
67
70
|
|
|
68
71
|
</ion-buttons>
|
|
69
72
|
|
|
@@ -58,7 +58,7 @@ ion-header {
|
|
|
58
58
|
top: 0;
|
|
59
59
|
left: 50px;
|
|
60
60
|
vertical-align: middle;
|
|
61
|
-
cursor: pointer;
|
|
61
|
+
// cursor: pointer;
|
|
62
62
|
}
|
|
63
63
|
.tile-point {
|
|
64
64
|
width: 10px;
|
|
@@ -158,4 +158,8 @@ ion-header {
|
|
|
158
158
|
|
|
159
159
|
.avatar-container-ios {
|
|
160
160
|
left: 55px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.resolve-conv-margin-right {
|
|
164
|
+
margin-right: 52px;
|
|
161
165
|
}
|
|
@@ -1,133 +1,215 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
Component,
|
|
3
|
+
OnInit,
|
|
4
|
+
Input,
|
|
5
|
+
Output,
|
|
6
|
+
EventEmitter,
|
|
7
|
+
OnChanges,
|
|
8
|
+
} from '@angular/core'
|
|
9
|
+
import { ActivatedRoute, Router } from '@angular/router'
|
|
10
|
+
import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service'
|
|
4
11
|
|
|
5
12
|
// Logger
|
|
6
|
-
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service'
|
|
7
|
-
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
|
|
8
|
-
import {
|
|
9
|
-
|
|
13
|
+
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service'
|
|
14
|
+
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
|
|
15
|
+
import {
|
|
16
|
+
setConversationAvatar,
|
|
17
|
+
setChannelType,
|
|
18
|
+
} from 'src/chat21-core/utils/utils'
|
|
19
|
+
import { Platform } from '@ionic/angular'
|
|
20
|
+
|
|
21
|
+
import { ModalController } from '@ionic/angular'
|
|
22
|
+
import { EventsService } from 'src/app/services/events-service'
|
|
23
|
+
import { CreateTicketPage } from 'src/app/pages/create-ticket/create-ticket.page'
|
|
24
|
+
import { TiledeskService } from 'src/app/services/tiledesk/tiledesk.service'
|
|
25
|
+
|
|
10
26
|
@Component({
|
|
11
27
|
selector: 'app-header-conversation-detail',
|
|
12
28
|
templateUrl: './header-conversation-detail.component.html',
|
|
13
29
|
styleUrls: ['./header-conversation-detail.component.scss'],
|
|
14
30
|
})
|
|
15
31
|
export class HeaderConversationDetailComponent implements OnInit, OnChanges {
|
|
16
|
-
@Input() conversationAvatar: any
|
|
17
|
-
@Input() idLoggedUser: string
|
|
18
|
-
@Input()
|
|
19
|
-
@Input()
|
|
20
|
-
@Input()
|
|
21
|
-
@
|
|
32
|
+
@Input() conversationAvatar: any
|
|
33
|
+
@Input() idLoggedUser: string
|
|
34
|
+
@Input() conv_type: string
|
|
35
|
+
@Input() isOpenInfoConversation: boolean
|
|
36
|
+
@Input() isMobile: boolean
|
|
37
|
+
@Input() translationMap: Map<string, string>
|
|
38
|
+
@Output() eventOpenCloseInfoConversation = new EventEmitter<boolean>()
|
|
22
39
|
conversationWithFullname: string
|
|
23
|
-
openInfoConversation = true
|
|
24
|
-
openInfoMessage = true
|
|
25
|
-
DIRECT = 'direct'
|
|
26
|
-
|
|
27
|
-
isDirect = false
|
|
28
|
-
isTyping = false
|
|
29
|
-
borderColor = '#ffffff'
|
|
30
|
-
fontColor = '#949494'
|
|
31
|
-
membersConversation = ['SYSTEM']
|
|
32
|
-
fullNameConv: string
|
|
33
|
-
idConv: string
|
|
34
|
-
conversation_with_fullname: string
|
|
35
|
-
platformName: string
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
openInfoConversation = true
|
|
41
|
+
openInfoMessage = true
|
|
42
|
+
DIRECT = 'direct'
|
|
43
|
+
|
|
44
|
+
isDirect = false
|
|
45
|
+
isTyping = false
|
|
46
|
+
borderColor = '#ffffff'
|
|
47
|
+
fontColor = '#949494'
|
|
48
|
+
membersConversation = ['SYSTEM']
|
|
49
|
+
fullNameConv: string
|
|
50
|
+
idConv: string
|
|
51
|
+
conversation_with_fullname: string
|
|
52
|
+
platformName: string
|
|
53
|
+
conv_closed: boolean = false;
|
|
54
|
+
|
|
55
|
+
private logger: LoggerService = LoggerInstance.getInstance()
|
|
38
56
|
|
|
39
57
|
/**
|
|
40
58
|
* Constructor
|
|
41
|
-
* @param imageRepoService
|
|
59
|
+
* @param imageRepoService
|
|
42
60
|
*/
|
|
43
61
|
constructor(
|
|
44
62
|
public imageRepoService: ImageRepoService,
|
|
45
63
|
private route: ActivatedRoute,
|
|
46
64
|
public platform: Platform,
|
|
47
|
-
private router: Router
|
|
65
|
+
private router: Router,
|
|
66
|
+
// public tiledeskAuthService: TiledeskAuthService,
|
|
67
|
+
public tiledeskService: TiledeskService,
|
|
68
|
+
public events: EventsService,
|
|
69
|
+
public modalController: ModalController,
|
|
48
70
|
) {
|
|
49
|
-
this.route.paramMap.subscribe(params => {
|
|
50
|
-
|
|
51
|
-
|
|
71
|
+
this.route.paramMap.subscribe((params) => {
|
|
52
72
|
// this.conversationWithFullname = params.get('FullNameConv');
|
|
53
|
-
this.logger.log('[CONVS-DETAIL][HEADER] -> params: ', params)
|
|
73
|
+
this.logger.log('[CONVS-DETAIL][HEADER] -> params: ', params)
|
|
54
74
|
this.fullNameConv = params.get('FullNameConv')
|
|
55
|
-
this.logger.log(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
75
|
+
this.logger.log(
|
|
76
|
+
'[CONVS-DETAIL][HEADER] -> params > conversation_with_fullname: ',
|
|
77
|
+
this.fullNameConv,
|
|
78
|
+
)
|
|
79
|
+
this.idConv = params.get('IDConv')
|
|
80
|
+
this.logger.log(
|
|
81
|
+
'[CONVS-DETAIL][HEADER] -> params > conversation_with: ',
|
|
82
|
+
this.idConv,
|
|
83
|
+
)
|
|
84
|
+
})
|
|
59
85
|
}
|
|
60
86
|
|
|
61
87
|
// ----------------------------------------------------
|
|
62
88
|
// @ Lifehooks
|
|
63
89
|
// ----------------------------------------------------
|
|
64
90
|
ngOnInit() {
|
|
65
|
-
|
|
66
|
-
this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) -
|
|
91
|
+
|
|
92
|
+
this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - idLoggedUser', this.idLoggedUser, )
|
|
93
|
+
this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conversationAvatar', this.conversationAvatar, )
|
|
94
|
+
this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conv_type', this.conv_type, )
|
|
67
95
|
this.conversation_with_fullname = this.conversationAvatar.conversation_with_fullname
|
|
68
|
-
|
|
69
|
-
this.initialize()
|
|
96
|
+
this.listenToConversationHasBeenClosed()
|
|
97
|
+
this.initialize()
|
|
70
98
|
}
|
|
71
99
|
|
|
72
100
|
ngOnChanges() {
|
|
73
|
-
this.logger.log(
|
|
101
|
+
this.logger.log(
|
|
102
|
+
'[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar',
|
|
103
|
+
this.conversationAvatar,
|
|
104
|
+
)
|
|
74
105
|
if (this.conversationAvatar) {
|
|
75
|
-
this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
|
|
106
|
+
this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
|
|
107
|
+
this.conversationAvatar.uid,
|
|
108
|
+
)
|
|
76
109
|
} else {
|
|
77
|
-
const channelType = setChannelType(this.idConv)
|
|
78
|
-
this.logger.log(
|
|
110
|
+
const channelType = setChannelType(this.idConv)
|
|
111
|
+
this.logger.log(
|
|
112
|
+
'[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED channelType ',
|
|
113
|
+
channelType,
|
|
114
|
+
)
|
|
79
115
|
this.conversationAvatar = setConversationAvatar(
|
|
80
116
|
this.idConv,
|
|
81
117
|
this.fullNameConv,
|
|
82
118
|
channelType,
|
|
83
|
-
)
|
|
119
|
+
)
|
|
84
120
|
if (this.conversationAvatar) {
|
|
85
|
-
this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
|
|
121
|
+
this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
|
|
122
|
+
this.conversationAvatar.uid,
|
|
123
|
+
)
|
|
86
124
|
}
|
|
87
|
-
this.logger.log(
|
|
125
|
+
this.logger.log(
|
|
126
|
+
'[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED conversationAvatar',
|
|
127
|
+
this.conversationAvatar,
|
|
128
|
+
)
|
|
88
129
|
}
|
|
89
130
|
|
|
90
|
-
this.logger.log(
|
|
91
|
-
|
|
131
|
+
this.logger.log(
|
|
132
|
+
'[CONVS-DETAIL][HEADER] - (ngOnChanges) - isOpenInfoConversation',
|
|
133
|
+
this.isOpenInfoConversation,
|
|
134
|
+
)
|
|
135
|
+
this.openInfoConversation = this.isOpenInfoConversation
|
|
92
136
|
}
|
|
93
137
|
|
|
94
|
-
|
|
95
138
|
// ----------------------------------------------------
|
|
96
139
|
// @ Initialize (called in ngOnInit)
|
|
97
140
|
// ----------------------------------------------------
|
|
98
141
|
initialize() {
|
|
99
142
|
this.getPlatformName()
|
|
100
|
-
if (
|
|
101
|
-
this.
|
|
143
|
+
if (
|
|
144
|
+
this.conversationAvatar &&
|
|
145
|
+
this.conversationAvatar.channelType === this.DIRECT
|
|
146
|
+
) {
|
|
147
|
+
this.isDirect = true
|
|
102
148
|
} else if (this.idLoggedUser) {
|
|
103
|
-
this.membersConversation.push(this.idLoggedUser)
|
|
149
|
+
this.membersConversation.push(this.idLoggedUser)
|
|
104
150
|
}
|
|
105
151
|
}
|
|
106
152
|
|
|
107
153
|
getPlatformName() {
|
|
108
|
-
this.logger.log('getPlatformName this.platform', this.platform)
|
|
154
|
+
this.logger.log('getPlatformName this.platform', this.platform)
|
|
109
155
|
if (this.platform.is('ios')) {
|
|
110
156
|
this.platformName = 'ios'
|
|
111
|
-
this.logger.log('getPlatformName platformName', this.platformName)
|
|
112
|
-
} else if (this.platform.is('android')){
|
|
157
|
+
this.logger.log('getPlatformName platformName', this.platformName)
|
|
158
|
+
} else if (this.platform.is('android')) {
|
|
113
159
|
this.platformName = 'android'
|
|
114
|
-
this.logger.log('getPlatformName platformName', this.platformName)
|
|
160
|
+
this.logger.log('getPlatformName platformName', this.platformName)
|
|
115
161
|
}
|
|
162
|
+
}
|
|
116
163
|
|
|
164
|
+
closeConversation() {
|
|
165
|
+
this.events.publish('hasclosedconversation', this.idConv)
|
|
117
166
|
}
|
|
118
167
|
|
|
168
|
+
listenToConversationHasBeenClosed() {
|
|
169
|
+
this.events.subscribe('conversationhasbeenclosed', (convId) => {
|
|
170
|
+
// console.log('[CONVS-DETAIL][HEADER] conversationhasbeenclosed convId', convId)
|
|
171
|
+
if (convId === this.idConv) {
|
|
172
|
+
this.logger.log('[CONVS-DETAIL][HEADER] the conversation was closed',)
|
|
173
|
+
this.conv_closed = true;
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
119
180
|
onOpenCloseInfoConversation() {
|
|
120
|
-
this.openInfoMessage = false
|
|
121
|
-
this.openInfoConversation = !this.openInfoConversation
|
|
122
|
-
this.logger.log(
|
|
123
|
-
|
|
181
|
+
this.openInfoMessage = false
|
|
182
|
+
this.openInfoConversation = !this.openInfoConversation
|
|
183
|
+
this.logger.log(
|
|
184
|
+
'[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ',
|
|
185
|
+
this.openInfoConversation,
|
|
186
|
+
)
|
|
187
|
+
this.eventOpenCloseInfoConversation.emit(this.openInfoConversation)
|
|
124
188
|
}
|
|
125
189
|
|
|
126
190
|
/** */
|
|
127
|
-
pushPage(event) {
|
|
191
|
+
pushPage(event) {}
|
|
128
192
|
|
|
129
193
|
goBackToConversationList() {
|
|
130
|
-
this.router.navigateByUrl('/conversations-list')
|
|
194
|
+
this.router.navigateByUrl('/conversations-list')
|
|
131
195
|
}
|
|
132
196
|
|
|
197
|
+
// -----------------------------------------------------------------
|
|
198
|
+
// PRESENT MODAL CREATE TICKET (MOVED IN ddp-deader.component.ts)
|
|
199
|
+
// -----------------------------------------------------------------
|
|
200
|
+
// async presentCreateTicketModal(e: any): Promise<any>{
|
|
201
|
+
|
|
202
|
+
// // const attributes = { enableBackdropDismiss: false };
|
|
203
|
+
// const modal: HTMLIonModalElement =
|
|
204
|
+
// await this.modalController.create({
|
|
205
|
+
// component: CreateTicketPage,
|
|
206
|
+
// // componentProps: attributes,
|
|
207
|
+
// swipeToClose: false,
|
|
208
|
+
// backdropDismiss: false
|
|
209
|
+
// });
|
|
210
|
+
// modal.onDidDismiss().then((detail: any) => {
|
|
211
|
+
// this.logger.log('[CONVS-DETAIL][HEADER] ', detail.data);
|
|
212
|
+
// });
|
|
213
|
+
// return await modal.present();
|
|
214
|
+
// }
|
|
133
215
|
}
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
<ng-container *ngIf="areVisibleCAR">
|
|
44
44
|
<div class="canned-responses-btn-wpr" style="margin-left: -5px;" tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top">
|
|
45
|
-
<ion-button ion-button fill="clear" class="canned-responses-btn" (click)="openCannedResponses()" [disabled]="!IS_SUPPORT_GROUP_CONVERSATION">
|
|
45
|
+
<ion-button ion-button fill="clear" class="canned-responses-btn" (click)="openCannedResponses()" [disabled]="!IS_SUPPORT_GROUP_CONVERSATION || disableTextarea">
|
|
46
46
|
<ion-icon slot="icon-only" lazy="true" name="flash-outline" style="font-size: 24px;"></ion-icon>
|
|
47
47
|
</ion-button>
|
|
48
48
|
</div>
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
<div class="upload-image-btn-wpr" tooltip="{{translationMap?.get('UPLOAD')}}" [options]="tooltipOptions" placement="top">
|
|
59
|
-
<ion-button ion-button fill="clear" class="upload-image-btn">
|
|
59
|
+
<ion-button ion-button fill="clear" class="upload-image-btn" [disabled]="disableTextarea">
|
|
60
60
|
<ion-icon slot="icon-only" lazy="true" name="attach-outline"
|
|
61
61
|
style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
|
|
62
62
|
<input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
<div class="text-message" [ngClass]="{'text-message-no-cr': areVisibleCAR === false}">
|
|
71
71
|
<ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
|
|
72
72
|
[placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
|
|
73
|
-
[(ngModel)]="messageString" (ionChange)="ionChange($event);"
|
|
73
|
+
[(ngModel)]="messageString" (ionChange)="ionChange($event);" [disabled]="disableTextarea"
|
|
74
74
|
(keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
|
|
75
75
|
</ion-textarea>
|
|
76
76
|
</div>
|