@chat21/chat21-ionic 3.4.32-rc9 → 3.4.34
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 +16 -127
- package/angular.json +0 -1
- package/package.json +1 -1
- package/src/app/app.component.html +1 -3
- package/src/app/app.component.ts +11 -70
- package/src/app/components/canned-response/canned-response.component.html +2 -2
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +0 -23
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +0 -30
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +7 -26
- package/src/app/components/conversation-info/info-content/info-content.component.ts +2 -2
- package/src/app/components/navbar/navbar.component.ts +5 -5
- package/src/app/components/project-item/project-item.component.ts +36 -35
- package/src/app/components/sidebar/sidebar.component.html +1 -1
- package/src/app/components/sidebar/sidebar.component.ts +5 -0
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +15 -7
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +3 -3
- package/src/app/pages/conversation-detail/conversation-detail.page.html +1 -3
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +3 -45
- package/src/app/pages/conversations-list/conversations-list.page.ts +1 -7
- package/src/app/services/global-settings/global-settings.service.ts +3 -11
- package/src/app/services/nav-proxy.service.ts +1 -0
- package/src/app/services/projects/project.service.ts +1 -1
- package/src/app/services/tiledesk/tiledesk.service.ts +0 -17
- package/src/app/services/triggerEvents/triggerEvents.ts +0 -29
- package/src/app/services/websocket/websocket-js.ts +535 -61
- package/src/app/services/websocket/websocket.service.ts +11 -10
- package/src/app/utils/globals.ts +0 -2
- package/src/app/utils/utils.ts +0 -1
- package/src/assets/i18n/ar.json +2 -7
- package/src/assets/i18n/az.json +2 -7
- package/src/assets/i18n/de.json +2 -7
- package/src/assets/i18n/en.json +2 -7
- package/src/assets/i18n/es.json +2 -7
- package/src/assets/i18n/fr.json +2 -7
- package/src/assets/i18n/it.json +4 -9
- package/src/assets/i18n/kk.json +2 -7
- package/src/assets/i18n/pt.json +2 -7
- package/src/assets/i18n/ru.json +2 -7
- package/src/assets/i18n/sr.json +2 -7
- package/src/assets/i18n/sv.json +2 -7
- package/src/assets/i18n/tr.json +2 -7
- package/src/assets/i18n/uk.json +2 -7
- package/src/assets/i18n/uz.json +2 -8
- package/src/assets/js/chat21client.js +0 -36
- package/src/assets/test.html +2 -5
- package/src/chat-config-template.json +0 -1
- package/src/chat-config.json +0 -1
- package/src/chat21-core/models/projectUsers.ts +21 -12
- package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +1 -1
- package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +1 -1
- package/src/chat21-core/utils/utils.ts +2 -16
- package/src/app/services/websocket/websocket-js_old.ts +0 -578
- package/src/app/services/websocket/websocket.worker.ts +0 -242
- package/src/assets/js/agentDesktop-sdk.js +0 -55
- package/src/assets/js/mqtt-keepalive-worker.js +0 -53
- package/src/chat21-core/models/project_user.ts +0 -26
|
@@ -15,7 +15,7 @@ import { AppConfigProvider } from 'src/app/services/app-config';
|
|
|
15
15
|
import { ConvertRequestToConversation } from 'src/chat21-core/utils/convertRequestToConversation';
|
|
16
16
|
import { compareValues, getUserStatusFromProjectUser } from 'src/chat21-core/utils/utils';
|
|
17
17
|
import { ProjectService } from 'src/app/services/projects/project.service';
|
|
18
|
-
import { ProjectUser } from 'src/chat21-core/models/
|
|
18
|
+
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
19
19
|
|
|
20
20
|
@Component({
|
|
21
21
|
selector: 'app-project-item',
|
|
@@ -89,17 +89,17 @@ export class ProjectItemComponent implements OnInit {
|
|
|
89
89
|
|
|
90
90
|
connetWebsocket(tiledeskToken) {
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
92
|
+
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] tiledeskToken ', tiledeskToken)
|
|
93
|
+
const appconfig = this.appConfigProvider.getConfig();
|
|
94
|
+
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', appconfig.wsUrl)
|
|
95
|
+
const WS_URL = appconfig.wsUrl + '?token=' + tiledeskToken
|
|
96
|
+
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', WS_URL)
|
|
97
|
+
this.webSocketJs.init(
|
|
98
|
+
WS_URL,
|
|
99
|
+
undefined,
|
|
100
|
+
undefined,
|
|
101
|
+
undefined
|
|
102
|
+
);
|
|
103
103
|
|
|
104
104
|
this.getLastProjectStoredAndSubscToWSAvailabilityAndConversations();
|
|
105
105
|
}
|
|
@@ -332,27 +332,32 @@ export class ProjectItemComponent implements OnInit {
|
|
|
332
332
|
if (!r?.id_project) return undefined;
|
|
333
333
|
return typeof r.id_project === 'string' ? r.id_project : r.id_project?._id;
|
|
334
334
|
}
|
|
335
|
-
|
|
335
|
+
|
|
336
336
|
private recalculateUnservedCount(requests: any[]) {
|
|
337
337
|
if (!requests) return;
|
|
338
|
+
|
|
338
339
|
let count = 0;
|
|
339
|
-
|
|
340
|
-
|
|
340
|
+
const nextConvs: ConversationModel[] = [];
|
|
341
|
+
const seenUids = new Set<string>();
|
|
342
|
+
|
|
343
|
+
for (const r of requests) {
|
|
341
344
|
const projectId = this.getRequestProjectId(r);
|
|
342
|
-
if (!projectId || !this.availableProjectIds.has(projectId))
|
|
343
|
-
if (r['status']
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
345
|
+
if (!projectId || !this.availableProjectIds.has(projectId)) continue;
|
|
346
|
+
if (r['status'] !== 100 || !this.hasmeInAgents(r['agents'])) continue;
|
|
347
|
+
|
|
348
|
+
count += 1;
|
|
349
|
+
const conv = this.convertRequestToConversation.getConvFromRequest(r);
|
|
350
|
+
if (seenUids.has(conv.uid)) continue;
|
|
351
|
+
seenUids.add(conv.uid);
|
|
352
|
+
nextConvs.push(conv);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
nextConvs.sort(compareValues('timestamp', 'desc'));
|
|
356
|
+
this.unservedConversations = nextConvs;
|
|
357
|
+
|
|
352
358
|
if (count > this.unservedRequestCount) {
|
|
353
359
|
this.events.publish('unservedRequest:count', count);
|
|
354
360
|
}
|
|
355
|
-
console.log('unservedRequestCount', count);
|
|
356
361
|
this.unservedRequestCount = count;
|
|
357
362
|
}
|
|
358
363
|
|
|
@@ -367,16 +372,12 @@ export class ProjectItemComponent implements OnInit {
|
|
|
367
372
|
);
|
|
368
373
|
}
|
|
369
374
|
|
|
370
|
-
hasmeInAgents(agents) {
|
|
371
|
-
if (agents) {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
return true
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
} else {
|
|
378
|
-
this.logger.log('[PROJECT-ITEM] hasmeInAgents OOPS!!! AGENTS THERE ARE NOT ')
|
|
375
|
+
hasmeInAgents(agents: any[] | undefined): boolean {
|
|
376
|
+
if (!agents) {
|
|
377
|
+
this.logger.log('[PROJECT-ITEM] hasmeInAgents OOPS!!! AGENTS THERE ARE NOT ');
|
|
378
|
+
return false;
|
|
379
379
|
}
|
|
380
|
+
return agents.some((a) => a.id_user === this.currentUserId);
|
|
380
381
|
}
|
|
381
382
|
|
|
382
383
|
isValidStoredProject(obj: any): obj is ProjectUser {
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
<!-- ----------------------------- -->
|
|
129
129
|
<!-- WA broadcasts -->
|
|
130
130
|
<!-- ----------------------------- -->
|
|
131
|
-
<ng-container *ngIf="
|
|
131
|
+
<ng-container *ngIf="isVisibleAUT && roles?.[PERMISSIONS.AUTOMATIONSLOG_READ]">
|
|
132
132
|
<div matTooltipClass="custom-mat-tooltip" matTooltip="{{translationsMap?.get('WhatsAppBroadcasts')}}"
|
|
133
133
|
#tooltip="matTooltip" matTooltipPosition='right' matTooltipHideDelay="100">
|
|
134
134
|
<a target="_self" href="{{ URLS.WHATSAPP }}" class="customAncor">
|
|
@@ -39,6 +39,7 @@ export class SidebarComponent implements OnInit {
|
|
|
39
39
|
isVisibleACT: boolean;
|
|
40
40
|
isVisibleMON: boolean;
|
|
41
41
|
isVisibleCNT: boolean;
|
|
42
|
+
isVisibleAUT: boolean;
|
|
42
43
|
isVisibleKNB: boolean;
|
|
43
44
|
photo_profile_URL: string;
|
|
44
45
|
project_id: string;
|
|
@@ -49,6 +50,7 @@ export class SidebarComponent implements OnInit {
|
|
|
49
50
|
conversations_lbl: string;
|
|
50
51
|
whatsappbroadcast_lbl: string;
|
|
51
52
|
contacts_lbl: string;
|
|
53
|
+
whatsapp_lbl: string;
|
|
52
54
|
apps_lbl: string;
|
|
53
55
|
analytics_lbl: string;
|
|
54
56
|
activities_lbl: string;
|
|
@@ -269,6 +271,7 @@ setQueryParamsForAll(queryParams: any) {
|
|
|
269
271
|
const keys= [
|
|
270
272
|
'Conversations',
|
|
271
273
|
'LABEL_CONTACTS',
|
|
274
|
+
'LABEL_WA',
|
|
272
275
|
'Apps',
|
|
273
276
|
'Analytics',
|
|
274
277
|
'Activities',
|
|
@@ -280,6 +283,7 @@ setQueryParamsForAll(queryParams: any) {
|
|
|
280
283
|
this.conversations_lbl = text['Conversations'];
|
|
281
284
|
this.whatsappbroadcast_lbl = text['WhatsAppBroadcasts']
|
|
282
285
|
this.contacts_lbl = text['LABEL_CONTACTS']
|
|
286
|
+
this.whatsapp_lbl = text['LABEL_WA']
|
|
283
287
|
this.apps_lbl = text['Apps']
|
|
284
288
|
this.analytics_lbl = text['Analytics']
|
|
285
289
|
this.activities_lbl = text['Activities']
|
|
@@ -296,6 +300,7 @@ setQueryParamsForAll(queryParams: any) {
|
|
|
296
300
|
this.isVisibleACT = getOSCode("ACT", this.public_Key);
|
|
297
301
|
this.isVisibleMON = getOSCode("MON", this.public_Key);
|
|
298
302
|
this.isVisibleCNT = getOSCode("CNT", this.public_Key);
|
|
303
|
+
this.isVisibleAUT = getOSCode("AUT", this.public_Key);
|
|
299
304
|
this.isVisibleKNB = getOSCode("KNB", this.public_Key);
|
|
300
305
|
|
|
301
306
|
}
|
|
@@ -165,15 +165,15 @@
|
|
|
165
165
|
background-color: var(--sidebar-user-detail-select-background);
|
|
166
166
|
padding: 4px 0px;
|
|
167
167
|
border-radius: 4px;
|
|
168
|
+
// width: 192px;
|
|
168
169
|
-webkit-transform: translateX(-50%);
|
|
169
170
|
transform: translateX(-50%);
|
|
170
171
|
left: 50%;
|
|
171
172
|
margin: auto;
|
|
172
173
|
position: absolute;
|
|
174
|
+
font-size: 14px;
|
|
173
175
|
z-index: 2;
|
|
174
176
|
|
|
175
|
-
|
|
176
|
-
|
|
177
177
|
.btn{
|
|
178
178
|
display: flex;
|
|
179
179
|
position: relative;
|
|
@@ -182,7 +182,9 @@
|
|
|
182
182
|
justify-content: center;
|
|
183
183
|
|
|
184
184
|
border: 1px solid transparent;
|
|
185
|
-
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out
|
|
185
|
+
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
|
|
186
|
+
margin: 0px;
|
|
187
|
+
box-shadow: none;
|
|
186
188
|
}
|
|
187
189
|
|
|
188
190
|
.dropdown-toggle{
|
|
@@ -289,7 +291,7 @@
|
|
|
289
291
|
-webkit-background-clip: padding-box;
|
|
290
292
|
background-clip: padding-box;
|
|
291
293
|
color: var(--sidebar-user-detail-select-color);
|
|
292
|
-
max-height:
|
|
294
|
+
max-height: 250px;
|
|
293
295
|
overflow-y: auto;
|
|
294
296
|
}
|
|
295
297
|
|
|
@@ -326,7 +328,7 @@
|
|
|
326
328
|
|
|
327
329
|
.dropdown-menu li>a{
|
|
328
330
|
font-size: 13px;
|
|
329
|
-
padding: 10px
|
|
331
|
+
padding: 10px 12px;
|
|
330
332
|
border-radius: 2px;
|
|
331
333
|
transition: all 150ms linear;
|
|
332
334
|
|
|
@@ -337,6 +339,7 @@
|
|
|
337
339
|
color: var(--sidebar-user-detail-select-color);
|
|
338
340
|
white-space: nowrap;
|
|
339
341
|
text-decoration: none;
|
|
342
|
+
margin: 0px;
|
|
340
343
|
cursor: auto;
|
|
341
344
|
|
|
342
345
|
img {
|
|
@@ -345,7 +348,6 @@
|
|
|
345
348
|
position: relative;
|
|
346
349
|
top: 1px;
|
|
347
350
|
}
|
|
348
|
-
|
|
349
351
|
.material-icons {
|
|
350
352
|
vertical-align: middle;
|
|
351
353
|
}
|
|
@@ -379,6 +381,13 @@
|
|
|
379
381
|
|
|
380
382
|
&.project-item-status-wrapper {
|
|
381
383
|
position: relative;
|
|
384
|
+
|
|
385
|
+
.project-item-status-name {
|
|
386
|
+
margin-right: 4px;
|
|
387
|
+
color: #a9afbb;
|
|
388
|
+
font-size: 9px;
|
|
389
|
+
|
|
390
|
+
}
|
|
382
391
|
}
|
|
383
392
|
|
|
384
393
|
.status-dropdown {
|
|
@@ -426,7 +435,6 @@
|
|
|
426
435
|
/* Status dropdown fuori da #user-details - stessi colori ng-select */
|
|
427
436
|
.status-dropdown-outside {
|
|
428
437
|
position: fixed !important;
|
|
429
|
-
transform: translateY(-50%);
|
|
430
438
|
z-index: 1100;
|
|
431
439
|
min-width: 140px;
|
|
432
440
|
padding: 4px 0;
|
|
@@ -18,7 +18,8 @@ import { BRAND_BASE_INFO } from 'src/app/utils/utils-resources';
|
|
|
18
18
|
import { getOSCode } from 'src/app/utils/utils';
|
|
19
19
|
import { getUserStatusFromProjectUser } from 'src/chat21-core/utils/utils';
|
|
20
20
|
import { ProjectService } from 'src/app/services/projects/project.service';
|
|
21
|
-
import { ProjectUser } from 'src/chat21-core/models/
|
|
21
|
+
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
22
|
+
|
|
22
23
|
@Component({
|
|
23
24
|
selector: 'app-sidebar-user-details',
|
|
24
25
|
templateUrl: './sidebar-user-details.component.html',
|
|
@@ -28,7 +29,6 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges, OnDestroy
|
|
|
28
29
|
// HAS_CLICKED_OPEN_USER_DETAIL: boolean = false;
|
|
29
30
|
// @Output() onCloseUserDetailsSidebar = new EventEmitter();
|
|
30
31
|
|
|
31
|
-
@Input() logOut: boolean;
|
|
32
32
|
|
|
33
33
|
public browserLang: string;
|
|
34
34
|
private logger: LoggerService = LoggerInstance.getInstance()
|
|
@@ -339,7 +339,7 @@ export class SidebarUserDetailsComponent implements OnInit, OnChanges, OnDestroy
|
|
|
339
339
|
listenToCurrentStoredProject() {
|
|
340
340
|
this.events.subscribe('storage:last_project', projectObjct => {
|
|
341
341
|
if (projectObjct && projectObjct !== 'undefined') {
|
|
342
|
-
this.logger.log('[SIDEBAR-USER-DETAILS] - GET STORED PROJECT ', projectObjct)
|
|
342
|
+
// this.logger.log('[SIDEBAR-USER-DETAILS] - GET STORED PROJECT ', projectObjct)
|
|
343
343
|
|
|
344
344
|
//TODO: recuperare info da root e non da id_project
|
|
345
345
|
this.project = {
|
|
@@ -217,7 +217,6 @@
|
|
|
217
217
|
[cannedSection]="canShowCanned"
|
|
218
218
|
[whatsappTemplatesSection]="isWhatsappTemplatesEnabled"
|
|
219
219
|
[isOpenInfoConversation]="openInfoConversation"
|
|
220
|
-
[ticketSection]="isTicketEnabled"
|
|
221
220
|
[stylesMap]="styleMap"
|
|
222
221
|
[translationMap]="translationsMap"
|
|
223
222
|
[dropEvent]="dropEvent"
|
|
@@ -226,8 +225,7 @@
|
|
|
226
225
|
(onClickOpenCannedResponses)="onClickOpenCannedResponses($event)"
|
|
227
226
|
(eventSendMessage)="returnSendMessage($event)"
|
|
228
227
|
(onPresentModalScrollToBottom)="onPresentModalScrollToBottom($event)"
|
|
229
|
-
(onOpenFooterSection)="onOpenFooterSection($event)"
|
|
230
|
-
(onOpenTicket)="onOpenTicket($event)">
|
|
228
|
+
(onOpenFooterSection)="onOpenFooterSection($event)">
|
|
231
229
|
</app-message-text-area>
|
|
232
230
|
<!-- [events]="eventsReplaceTexareaText.asObservable()" -->
|
|
233
231
|
</ion-row>
|
|
@@ -83,12 +83,11 @@ import { WebsocketService } from 'src/app/services/websocket/websocket.service';
|
|
|
83
83
|
import { Project } from 'src/chat21-core/models/projects';
|
|
84
84
|
import { Globals } from 'src/app/utils/globals';
|
|
85
85
|
import { ProjectService } from 'src/app/services/projects/project.service';
|
|
86
|
-
import { UploadService } from 'src/chat21-core/providers/abstract/upload.service';
|
|
87
86
|
import { ProjectUsersService } from 'src/app/services/project_users/project-users.service';
|
|
88
87
|
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
89
88
|
import { getOSCode, hasRole } from 'src/app/utils/utils';
|
|
90
89
|
import { PERMISSIONS } from 'src/app/utils/permissions.constants';
|
|
91
|
-
import {
|
|
90
|
+
import { UploadService } from 'src/chat21-core/providers/abstract/upload.service';
|
|
92
91
|
|
|
93
92
|
@Component({
|
|
94
93
|
selector: 'app-conversation-detail',
|
|
@@ -178,10 +177,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
178
177
|
copilotQuestion: string = '';
|
|
179
178
|
/**COPILOT : end */
|
|
180
179
|
|
|
181
|
-
/** TICKET: start */
|
|
182
|
-
isTicketEnabled: boolean = false;
|
|
183
|
-
/** TICKET: end */
|
|
184
|
-
|
|
185
180
|
isMine = isMine
|
|
186
181
|
isInfo = isInfo
|
|
187
182
|
isFirstMessage = isFirstMessage
|
|
@@ -257,15 +252,14 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
257
252
|
private events: EventsService,
|
|
258
253
|
private webSocketService: WebsocketService,
|
|
259
254
|
public projectPlanUtils: ProjectPlanUtils,
|
|
260
|
-
public triggerEvents: TriggerEvents,
|
|
261
255
|
private g: Globals,
|
|
262
256
|
) {
|
|
263
257
|
// Change list on date change
|
|
264
258
|
this.route.paramMap.subscribe((params) => {
|
|
265
259
|
this.logger.log('[CONVS-DETAIL] - constructor -> params: ', params)
|
|
266
260
|
this.conversationWith = params.get('IDConv')
|
|
267
|
-
this.conversationWithFullname =
|
|
268
|
-
this.conv_type =
|
|
261
|
+
this.conversationWithFullname = params.get('FullNameConv')
|
|
262
|
+
this.conv_type = params.get('Convtype')
|
|
269
263
|
|
|
270
264
|
this.events.publish('supportconvid:haschanged', this.conversationWith)
|
|
271
265
|
})
|
|
@@ -432,8 +426,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
432
426
|
ionViewDidEnter() {
|
|
433
427
|
this.logger.log('[CONVS-DETAIL] > ionViewDidEnter')
|
|
434
428
|
// this.info_content_child_enabled = true;
|
|
435
|
-
// Scroll to bottom to show the last message without animation
|
|
436
|
-
this.scrollToLastMessage()
|
|
437
429
|
}
|
|
438
430
|
|
|
439
431
|
// Unsubscibe when new page transition end
|
|
@@ -493,7 +485,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
493
485
|
this.messages = [] // list messages of conversation
|
|
494
486
|
this.isFileSelected = false // indicates if a file has been selected (image to upload)
|
|
495
487
|
this.isEmailEnabled = (this.appConfigProvider.getConfig().emailSection === 'true' || this.appConfigProvider.getConfig().emailSection === true) ? true : false;
|
|
496
|
-
this.isTicketEnabled = (this.appConfigProvider.getConfig().ticketSection === 'true' || this.appConfigProvider.getConfig().ticketSection === true) ? true : false;
|
|
497
488
|
this.isWhatsappTemplatesEnabled = (this.appConfigProvider.getConfig().whatsappTemplatesSection === 'true' || this.appConfigProvider.getConfig().whatsappTemplatesSection === true) ? true : false;
|
|
498
489
|
this.fileUploadAccept = this.appConfigProvider.getConfig().fileUploadAccept
|
|
499
490
|
|
|
@@ -724,11 +715,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
724
715
|
"WHATSAPP.ERROR_WHATSAPP_NOT_INSTALLED",
|
|
725
716
|
"WHATSAPP.ERROR_WHATSAPP_GENERIC_ERROR",
|
|
726
717
|
|
|
727
|
-
"TICKET.OPEN_TICKET",
|
|
728
|
-
"TICKET.DESCRIPTION",
|
|
729
|
-
"TICKET.CONFIRM",
|
|
730
|
-
"TICKET.CLOSE",
|
|
731
|
-
|
|
732
718
|
"COPILOT.ASK_AI",
|
|
733
719
|
"COPILOT.NO_SUGGESTIONS_PRESENT",
|
|
734
720
|
|
|
@@ -1944,11 +1930,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
1944
1930
|
}
|
|
1945
1931
|
|
|
1946
1932
|
|
|
1947
|
-
onOpenTicket(event) {
|
|
1948
|
-
this.logger.debug('[CONVS-DETAIL] openTicketOnExternalService - conversationWith ', this.conversationWith)
|
|
1949
|
-
const detailOBJ = { event: 'onOpenTicketExternally', request_id: this.conversationWith, conversation: this.conversation }
|
|
1950
|
-
this.triggerEvents.triggerOnOpenTicketExternally(detailOBJ)
|
|
1951
|
-
}
|
|
1952
1933
|
// -------------- START SCROLL/RESIZE -------------- //
|
|
1953
1934
|
/** */
|
|
1954
1935
|
resizeTextArea() {
|
|
@@ -1992,29 +1973,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
1992
1973
|
}
|
|
1993
1974
|
}
|
|
1994
1975
|
|
|
1995
|
-
/**
|
|
1996
|
-
* Scroll to last message without animation using requestAnimationFrame
|
|
1997
|
-
* This is a best practice alternative to setTimeout
|
|
1998
|
-
*/
|
|
1999
|
-
private scrollToLastMessage() {
|
|
2000
|
-
this.showIonContent = true
|
|
2001
|
-
if (this.ionContentChatArea) {
|
|
2002
|
-
// Use requestAnimationFrame for better performance
|
|
2003
|
-
requestAnimationFrame(() => {
|
|
2004
|
-
requestAnimationFrame(() => {
|
|
2005
|
-
// Double RAF ensures DOM is fully rendered
|
|
2006
|
-
this.ionContentChatArea.scrollToBottom(0).then(() => {
|
|
2007
|
-
this.logger.log('[CONVS-DETAIL] scroll posizionato all\'ultimo messaggio')
|
|
2008
|
-
}).catch((error) => {
|
|
2009
|
-
this.logger.error('[CONVS-DETAIL] errore durante lo scroll:', error)
|
|
2010
|
-
})
|
|
2011
|
-
})
|
|
2012
|
-
})
|
|
2013
|
-
} else {
|
|
2014
|
-
this.logger.warn('[CONVS-DETAIL] ionContentChatArea non disponibile')
|
|
2015
|
-
}
|
|
2016
|
-
}
|
|
2017
|
-
|
|
2018
1976
|
/**
|
|
2019
1977
|
* detectBottom
|
|
2020
1978
|
*/
|
|
@@ -57,9 +57,8 @@ import { getOSCode, hasRole } from 'src/app/utils/utils';
|
|
|
57
57
|
import { PERMISSIONS } from 'src/app/utils/permissions.constants';
|
|
58
58
|
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
59
59
|
import { ProjectUsersService } from 'src/app/services/project_users/project-users.service';
|
|
60
|
-
import { ProjectService } from 'src/app/services/projects/project.service';
|
|
61
|
-
|
|
62
60
|
import { PROJECTS_STORAGE_KEY } from 'src/chat21-core/utils/constants';
|
|
61
|
+
import { ProjectService } from 'src/app/services/projects/project.service';
|
|
63
62
|
|
|
64
63
|
@Component({
|
|
65
64
|
selector: 'app-conversations-list',
|
|
@@ -424,11 +423,6 @@ export class ConversationListPage implements OnInit {
|
|
|
424
423
|
// save conversationHandler in chatManager
|
|
425
424
|
this.chatManager.setConversationsHandler(this.conversationsHandlerService)
|
|
426
425
|
this.showPlaceholder = false
|
|
427
|
-
|
|
428
|
-
// Hide loading spinner if there are no conversations
|
|
429
|
-
if (this.conversations.length === 0) {
|
|
430
|
-
this.loadingIsActive = false
|
|
431
|
-
}
|
|
432
426
|
}
|
|
433
427
|
|
|
434
428
|
// private manageStoredConversations() {
|
|
@@ -88,14 +88,14 @@ export class GlobalSettingsService {
|
|
|
88
88
|
this.logger.debug('[GLOBAL-SET] setVariableFromStorage :::::::: SET VARIABLE ---------->', Object.keys(globals));
|
|
89
89
|
for (const key of Object.keys(globals)) {
|
|
90
90
|
const val = this.appStorageService.getItem(key);
|
|
91
|
-
this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals KEY ---------->', key);
|
|
92
|
-
this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals VAL ---------->', val);
|
|
91
|
+
// this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals KEY ---------->', key);
|
|
92
|
+
// this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals VAL ---------->', val);
|
|
93
93
|
if (val && val !== null) {
|
|
94
94
|
// globals.setParameter(key, val);
|
|
95
95
|
globals[key] = stringToBoolean(val);
|
|
96
96
|
}
|
|
97
97
|
// this.logger.debug('[GLOBAL-SET] setVariableFromStorage SET globals == ---------->', globals);
|
|
98
|
-
}
|
|
98
|
+
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/**
|
|
@@ -113,7 +113,6 @@ export class GlobalSettingsService {
|
|
|
113
113
|
TEMP = getParameterByName(windowContext, 'tiledesk_supportMode');
|
|
114
114
|
if (TEMP) {
|
|
115
115
|
globals.supportMode = stringToBoolean(TEMP);
|
|
116
|
-
this.appStorageService.setItem('supportMode', String(globals.supportMode))
|
|
117
116
|
}
|
|
118
117
|
|
|
119
118
|
TEMP = getParameterByName(windowContext, 'tiledesk_lang');
|
|
@@ -139,13 +138,6 @@ export class GlobalSettingsService {
|
|
|
139
138
|
TEMP = getParameterByName(windowContext, 'tiledesk_projectID');
|
|
140
139
|
if (TEMP) {
|
|
141
140
|
globals.projectID = TEMP;
|
|
142
|
-
this.appStorageService.setItem('projectID', TEMP)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
TEMP = getParameterByName(windowContext, 'tiledesk_logOut');
|
|
146
|
-
if (TEMP) {
|
|
147
|
-
globals.logOut = stringToBoolean(TEMP);
|
|
148
|
-
this.appStorageService.setItem('logOut', TEMP)
|
|
149
141
|
}
|
|
150
142
|
|
|
151
143
|
}
|
|
@@ -4,6 +4,7 @@ import { Router, NavigationExtras } from '@angular/router';
|
|
|
4
4
|
|
|
5
5
|
// utils
|
|
6
6
|
import { checkPlatformIsMobile } from '../../chat21-core/utils/utils';
|
|
7
|
+
// import { ConversationDetailPage } from '../pages/conversation-detail/conversation-detail.page';
|
|
7
8
|
|
|
8
9
|
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
9
10
|
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
@@ -7,7 +7,7 @@ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
|
|
|
7
7
|
import { AppConfigProvider } from '../app-config';
|
|
8
8
|
import { Observable } from 'rxjs';
|
|
9
9
|
import { AppStorageService } from 'src/chat21-core/providers/abstract/app-storage.service';
|
|
10
|
-
import { ProjectUser } from 'src/chat21-core/models/
|
|
10
|
+
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
11
11
|
|
|
12
12
|
@Injectable({
|
|
13
13
|
providedIn: 'root'
|
|
@@ -95,23 +95,6 @@ export class TiledeskService {
|
|
|
95
95
|
}))
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
public getProjectUsersByProjectId(project_id: string) {
|
|
100
|
-
const url = this.SERVER_BASE_URL + project_id + '/project_users/';
|
|
101
|
-
this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER URL', url);
|
|
102
|
-
|
|
103
|
-
const httpOptions = {
|
|
104
|
-
headers: new HttpHeaders({
|
|
105
|
-
'Content-Type': 'application/json',
|
|
106
|
-
Authorization: this.tiledeskToken
|
|
107
|
-
})
|
|
108
|
-
};
|
|
109
|
-
return this.http.get(url, httpOptions).pipe(map((res: any) => {
|
|
110
|
-
this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER RES ', res);
|
|
111
|
-
return res
|
|
112
|
-
}))
|
|
113
|
-
}
|
|
114
|
-
|
|
115
98
|
public getAllLeadsActiveWithLimit(project_id: string, limit: number) {
|
|
116
99
|
const url = this.SERVER_BASE_URL + project_id + '/leads?limit=' + limit + '&with_fullname=true';
|
|
117
100
|
this.logger.log('[TILEDESK-SERVICE] - GET ALL ACTIVE LEADS (LIMIT 10000) - URL', url);
|
|
@@ -102,35 +102,6 @@ export class TriggerEvents {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
public triggerOnUpdateNewConversationBadge(detailObj: {}) {
|
|
106
|
-
this.logger.debug(' ---------------- triggerOnUpdateNewConversationBadge ---------------- ', detailObj);
|
|
107
|
-
try {
|
|
108
|
-
const onBeforeInit = new CustomEvent('onUpdateNewConversationBadge', { detail: detailObj });
|
|
109
|
-
const windowContext = this.windowContext;
|
|
110
|
-
if (windowContext){
|
|
111
|
-
// windowContext.document.dispatchEvent(onNewConversation);
|
|
112
|
-
windowContext.postMessage({type: "onUpdateNewConversationBadge", detail: detailObj }, '*')
|
|
113
|
-
}
|
|
114
|
-
} catch (e) {
|
|
115
|
-
this.logger.error('[TRIGGER-HANDLER] > Error:' + e);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
public triggerOnOpenTicketExternally(detailObj: {}) {
|
|
120
|
-
this.logger.debug(' ---------------- triggerOnOpenTicketExternally ---------------- ', detailObj);
|
|
121
|
-
try {
|
|
122
|
-
const onBeforeInit = new CustomEvent('onOpenTicketExternally', { detail: detailObj });
|
|
123
|
-
const windowContext = this.windowContext;
|
|
124
|
-
if (windowContext){
|
|
125
|
-
// windowContext.document.dispatchEvent(onNewConversation);
|
|
126
|
-
windowContext.postMessage({type: "onOpenTicketExternally", detail: detailObj }, '*')
|
|
127
|
-
}
|
|
128
|
-
} catch (e) {
|
|
129
|
-
this.logger.error('[TRIGGER-HANDLER] > Error:' + e);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
105
|
public triggerOnConversationChanged(conversation: ConversationModel) {
|
|
135
106
|
this.logger.debug(' ---------------- triggerOnConversationChanged ---------------- ', conversation);
|
|
136
107
|
try {
|