@chat21/chat21-ionic 3.0.86-rc.4 → 3.0.86-rc.6
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 +10 -0
- package/package.json +1 -1
- package/src/app/app.component.scss +2 -0
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +14 -6
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +1 -0
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +23 -5
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +13 -0
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +9 -0
- package/src/app/components/conversations-list/header-conversations-list-unassigned/header-conversations-list-unassigned.component.html +11 -0
- package/src/app/components/conversations-list/header-conversations-list-unassigned/header-conversations-list-unassigned.component.scss +14 -0
- package/src/app/components/conversations-list/header-conversations-list-unassigned/header-conversations-list-unassigned.component.spec.ts +24 -0
- package/src/app/components/conversations-list/header-conversations-list-unassigned/header-conversations-list-unassigned.component.ts +25 -0
- package/src/app/components/project-item/project-item.component.ts +2 -2
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +12 -14
- package/src/app/pages/conversations-list/conversations-list.page.html +24 -3
- package/src/app/pages/conversations-list/conversations-list.page.ts +20 -2
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +4 -0
- package/src/app/shared/shared.module.ts +3 -0
- package/src/assets/i18n/ar.json +3 -0
- 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/convertRequestToConversation.ts +2 -2
- package/src/global.scss +10 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
### 3.0.86 in PROD
|
|
4
4
|
|
|
5
|
+
### 3.0.86-rc.6
|
|
6
|
+
- bug-fixed: do not change showSourceInfo status if sourcePage info not exist
|
|
7
|
+
- bug-fixed: last_project is undefined
|
|
8
|
+
|
|
9
|
+
### 3.0.86-rc.5
|
|
10
|
+
- added: header-conversations-list-unassigned component
|
|
11
|
+
- added: toast after text is copied
|
|
12
|
+
- added: unassigned header to conversations-list page and joinConversation options icon
|
|
13
|
+
- removed: "Open" - "Close info detail" string from close/open info conversation detail
|
|
14
|
+
|
|
5
15
|
### 3.0.86-rc.4
|
|
6
16
|
- bug-fixed: close emoji-picker if focus is on message-text-area
|
|
7
17
|
- bug-fixed: removed hover background bell icon
|
package/package.json
CHANGED
|
@@ -53,13 +53,21 @@
|
|
|
53
53
|
<!-- nk - no tag ionic -->
|
|
54
54
|
<!-- ----------------------------------------------------------- -->
|
|
55
55
|
<div class="manage_conversation_info_container" [ngClass]="{'close': !openInfoConversation, 'mobile': isMobile}">
|
|
56
|
-
<ion-button fill="clear" *ngIf="openInfoConversation" (click)="onOpenCloseInfoConversationFN()"
|
|
56
|
+
<ion-button fill="clear" *ngIf="openInfoConversation" (click)="onOpenCloseInfoConversationFN()"
|
|
57
|
+
[tooltip]="closeGroupTooltip" [options]="tooltipOptions" placement="bottom" content-type="template">
|
|
57
58
|
<ion-icon name="arrow-forward-outline"></ion-icon>
|
|
58
|
-
{{translationMap.get('LABEL_CLOSE_GROUP')}}
|
|
59
|
+
<!-- {{translationMap.get('LABEL_CLOSE_GROUP')}} -->
|
|
60
|
+
<ng-template #closeGroupTooltip>
|
|
61
|
+
<span> {{ translationMap?.get('LABEL_CLOSE_GROUP')}} </span>
|
|
62
|
+
</ng-template>
|
|
59
63
|
</ion-button>
|
|
60
|
-
<ion-button fill="clear" *ngIf="!openInfoConversation" (click)="onOpenCloseInfoConversationFN()"
|
|
64
|
+
<ion-button fill="clear" *ngIf="!openInfoConversation" (click)="onOpenCloseInfoConversationFN()"
|
|
65
|
+
[tooltip]="openGroupTooltip" [options]="tooltipOptions" placement="bottom" content-type="template">
|
|
61
66
|
<ion-icon name="arrow-back-outline"></ion-icon>
|
|
62
|
-
|
|
67
|
+
<ng-template #openGroupTooltip>
|
|
68
|
+
<span> {{ translationMap?.get('LABEL_OPEN_INFO_CONVERSATION')}} </span>
|
|
69
|
+
</ng-template>
|
|
70
|
+
<!-- {{translationMap.get('LABEL_OPEN_INFO_CONVERSATION')}} -->
|
|
63
71
|
</ion-button>
|
|
64
72
|
</div>
|
|
65
73
|
|
|
@@ -166,7 +174,7 @@
|
|
|
166
174
|
(onBeforeMessageRender)="onBeforeMessageRenderFN($event)"
|
|
167
175
|
(onAfterMessageRender)="onAfterMessageRenderFN($event)"
|
|
168
176
|
(onElementRendered)="onElementRenderedFN($event)"
|
|
169
|
-
(click)="onBubbleMessageClick($event, i)">
|
|
177
|
+
(click)="onBubbleMessageClick($event, message, i)">
|
|
170
178
|
</chat-bubble-message>
|
|
171
179
|
|
|
172
180
|
<div class="options-container">
|
|
@@ -201,7 +209,7 @@
|
|
|
201
209
|
|
|
202
210
|
<div class="base_receive sourcePage-container" *ngIf="messageType(MESSAGE_TYPE_OTHERS, message) && message?.attributes?.sourcePage" [class.show]="showSourceInfo && showSourceInfoIndex===i">
|
|
203
211
|
<svg xmlns="http://www.w3.org/2000/svg" height="15px" width="15px" viewBox="0 0 24 24" fill="none"><path _ngcontent-wrg-c96="" d="M0 0h24v24H0V0z" fill="none"></path><path _ngcontent-wrg-c96="" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-.61.08-1.21.21-1.78L8.99 15v1c0 1.1.9 2 2 2v1.93C7.06 19.43 4 16.07 4 12zm13.89 5.4c-.26-.81-1-1.4-1.9-1.4h-1v-3c0-.55-.45-1-1-1h-6v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41C17.92 5.77 20 8.65 20 12c0 2.08-.81 3.98-2.11 5.4z"></path></svg>
|
|
204
|
-
<span title="{{message?.attributes?.sourcePage}}" class="truncate">{{message?.attributes?.sourcePage}}</span>
|
|
212
|
+
<span title="{{message?.attributes?.sourcePage}}" class="truncate"><a target="_blank" href="{{message?.attributes?.sourcePage}}">{{message?.attributes?.sourcePage}}</a></span>
|
|
205
213
|
</div>
|
|
206
214
|
|
|
207
215
|
<!-- message type:: button && -->
|
|
@@ -15,7 +15,7 @@ import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk
|
|
|
15
15
|
import { TranslateService } from '@ngx-translate/core';
|
|
16
16
|
import * as moment from 'moment';
|
|
17
17
|
import { AppConfigProvider } from 'src/app/services/app-config';
|
|
18
|
-
import { ModalController, PopoverController } from '@ionic/angular';
|
|
18
|
+
import { ModalController, PopoverController, ToastController } from '@ionic/angular';
|
|
19
19
|
import { CreateCannedResponsePage } from 'src/app/modals/create-canned-response/create-canned-response.page';
|
|
20
20
|
|
|
21
21
|
@Component({
|
|
@@ -71,7 +71,8 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
71
71
|
private translate: TranslateService,
|
|
72
72
|
public appConfigProvider: AppConfigProvider,
|
|
73
73
|
public modalController: ModalController,
|
|
74
|
-
public popoverController: PopoverController
|
|
74
|
+
public popoverController: PopoverController,
|
|
75
|
+
public toastController: ToastController
|
|
75
76
|
) {
|
|
76
77
|
super(cdref, uploadService)
|
|
77
78
|
|
|
@@ -158,11 +159,14 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
158
159
|
onClickCopyMesage(event, message: MessageModel){
|
|
159
160
|
this.logger.log('[CONVS-DETAIL][ION-CONVS-DETAIL] - onClickCopyMesage');
|
|
160
161
|
navigator.clipboard.writeText(message.text)
|
|
162
|
+
this.presentToast()
|
|
161
163
|
}
|
|
162
164
|
|
|
163
|
-
onBubbleMessageClick(event: any, index: number){
|
|
164
|
-
|
|
165
|
-
|
|
165
|
+
onBubbleMessageClick(event: any, message: MessageModel, index: number){
|
|
166
|
+
if(message && message.attributes && message.attributes.sourcePage){
|
|
167
|
+
this.showSourceInfo = !this.showSourceInfo
|
|
168
|
+
this.showSourceInfoIndex = index
|
|
169
|
+
}
|
|
166
170
|
}
|
|
167
171
|
|
|
168
172
|
onElementRenderedFN(event) {
|
|
@@ -229,4 +233,18 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
229
233
|
|
|
230
234
|
return await popover.present();
|
|
231
235
|
}
|
|
236
|
+
|
|
237
|
+
async presentToast(){
|
|
238
|
+
const toast = await this.toastController.create({
|
|
239
|
+
message: '<div style="display: flex">'+
|
|
240
|
+
'<ion-icon name="copy"></ion-icon> '+
|
|
241
|
+
`<span>${this.translationMap.get("COPY_MESSAGE_TOAST")}</span>`+
|
|
242
|
+
'</div>',
|
|
243
|
+
duration: 3000,
|
|
244
|
+
color: 'light',
|
|
245
|
+
position: 'bottom',
|
|
246
|
+
cssClass: 'toast-copy'
|
|
247
|
+
});
|
|
248
|
+
toast.present();
|
|
249
|
+
}
|
|
232
250
|
}
|
|
@@ -167,6 +167,19 @@
|
|
|
167
167
|
<span *ngIf="!conversation?.recipient.startsWith('support-group')"> {{ translationsMap?.get('Archive') }} </span>
|
|
168
168
|
</ng-template>
|
|
169
169
|
</ion-button>
|
|
170
|
+
|
|
171
|
+
<!-- <ion-button *ngIf="conversation?.recipient.startsWith('support-group') && !conversation.archived" [tooltip]="joinTooltip" [options]="tooltip_options" placement="bottom" content-type="template"
|
|
172
|
+
[ngClass]="{'hide': !isApp, 'button-on-desktop': !isApp, 'button-on-mobile': isApp }"
|
|
173
|
+
id="{{ 'join_conversation_button' + conversation.uid }}" class="close-conversation-button" ion-button clear
|
|
174
|
+
item-end (click)="joinConversation(conversation);$event.stopPropagation();" padding>
|
|
175
|
+
<ion-icon slot="icon-only" style="display:block;" id="{{ 'join_button_icon' + conversation.uid }}" name="link-outline" item-end></ion-icon>
|
|
176
|
+
|
|
177
|
+
<ng-template #joinTooltip>
|
|
178
|
+
<span>{{ translationsMap?.get('JOIN_CONVERSATION')}} </span>
|
|
179
|
+
</ng-template>
|
|
180
|
+
</ion-button> -->
|
|
181
|
+
|
|
182
|
+
|
|
170
183
|
<!-- <ion-button *ngIf="conversation.archived" class="close-conversation-button" ion-button clear item-end disabled padding>
|
|
171
184
|
<!- - <ion-icon style="display:block;" id="{{ 'close_button_icon' + conversation.uid }}" color="close-conversation" name="archive-outline" item-end></ion-icon> - ->
|
|
172
185
|
<i class="material-icons" id="{{ 'close_button_icon' + conversation.uid }}" item-end> history </i>
|
|
@@ -30,6 +30,7 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
30
30
|
@Input() archiveActionNotAllowed: boolean;
|
|
31
31
|
@Input() uidConvSelected: string;
|
|
32
32
|
@Output() onCloseConversation = new EventEmitter<ConversationModel>();
|
|
33
|
+
@Output() onJoinConversation = new EventEmitter<ConversationModel>();
|
|
33
34
|
@Output() onCloseAlert = new EventEmitter();
|
|
34
35
|
|
|
35
36
|
convertMessage = convertMessage;
|
|
@@ -129,6 +130,7 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
129
130
|
const translationKeys = [
|
|
130
131
|
'Resolve',
|
|
131
132
|
'Archive',
|
|
133
|
+
'JOIN_CONVERSATION',
|
|
132
134
|
'ALERT_TITLE',
|
|
133
135
|
'ActionNotAllowed',
|
|
134
136
|
'CLOSE_ALERT_CONFIRM_LABEL',
|
|
@@ -219,5 +221,12 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
219
221
|
let currentIndex = this.listConversations.findIndex(conv => conv.uid === conversation.uid)
|
|
220
222
|
}
|
|
221
223
|
|
|
224
|
+
joinConversation(conversation: ConversationModel) {
|
|
225
|
+
var conversationId = conversation.uid;
|
|
226
|
+
this.logger.log('[ION-LIST-CONVS-COMP] - joinConversation - conversationId ', conversationId)
|
|
227
|
+
this.onJoinConversation.emit(conversation)
|
|
228
|
+
let currentIndex = this.listConversations.findIndex(conv => conv.uid === conversation.uid)
|
|
229
|
+
}
|
|
230
|
+
|
|
222
231
|
|
|
223
232
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<ion-toolbar [class.mobile]="isMobile">
|
|
2
|
+
|
|
3
|
+
<ion-buttons slot="start">
|
|
4
|
+
<ion-button ion-button (click)="onBackButtonHandler()">
|
|
5
|
+
<ion-icon slot="icon-only" name="arrow-back-outline"></ion-icon>
|
|
6
|
+
</ion-button>
|
|
7
|
+
</ion-buttons>
|
|
8
|
+
|
|
9
|
+
<ion-title> {{headerTitle}}</ion-title>
|
|
10
|
+
|
|
11
|
+
</ion-toolbar>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
2
|
+
import { IonicModule } from '@ionic/angular';
|
|
3
|
+
|
|
4
|
+
import { HeaderConversationsListUnassigned } from './header-conversations-list-unassigned.component';
|
|
5
|
+
|
|
6
|
+
describe('HeaderConversationsListUnassignedComponent', () => {
|
|
7
|
+
let component: HeaderConversationsListUnassigned;
|
|
8
|
+
let fixture: ComponentFixture<HeaderConversationsListUnassigned>;
|
|
9
|
+
|
|
10
|
+
beforeEach(async(() => {
|
|
11
|
+
TestBed.configureTestingModule({
|
|
12
|
+
declarations: [ HeaderConversationsListUnassigned ],
|
|
13
|
+
imports: [IonicModule.forRoot()]
|
|
14
|
+
}).compileComponents();
|
|
15
|
+
|
|
16
|
+
fixture = TestBed.createComponent(HeaderConversationsListUnassigned);
|
|
17
|
+
component = fixture.componentInstance;
|
|
18
|
+
fixture.detectChanges();
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
it('should create', () => {
|
|
22
|
+
expect(component).toBeTruthy();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
@Component({
|
|
4
|
+
selector: 'header-conversations-list-unassigned',
|
|
5
|
+
templateUrl: './header-conversations-list-unassigned.component.html',
|
|
6
|
+
styleUrls: ['./header-conversations-list-unassigned.component.scss'],
|
|
7
|
+
})
|
|
8
|
+
export class HeaderConversationsListUnassigned implements OnInit {
|
|
9
|
+
|
|
10
|
+
@Input() headerTitle: string
|
|
11
|
+
@Input() isMobile: boolean;
|
|
12
|
+
@Output() onBackButton = new EventEmitter<boolean>();
|
|
13
|
+
static UserPresenceComponent: any[] | any;
|
|
14
|
+
|
|
15
|
+
constructor() { }
|
|
16
|
+
|
|
17
|
+
ngOnInit() {
|
|
18
|
+
// console.log('headertitleeee', this.headerTitle)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
onBackButtonHandler(){
|
|
22
|
+
this.onBackButton.emit(true)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
}
|
|
@@ -87,10 +87,10 @@ export class ProjectItemComponent implements OnInit {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
openUnservedConvs() {
|
|
90
|
-
this.openUnsevedConvsEvent.emit('notificationsorprjctbtn')
|
|
90
|
+
this.openUnsevedConvsEvent.emit({event: 'notificationsorprjctbtn', data: this.unservedConversations})
|
|
91
91
|
}
|
|
92
92
|
openUnservedConvsAndGoToProjectList() {
|
|
93
|
-
this.openUnsevedConvsEvent.emit('pinbtn')
|
|
93
|
+
this.openUnsevedConvsEvent.emit({event:'pinbtn', data: this.unservedConversations})
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
getStoredTokenAndConnectWS() {
|
|
@@ -291,19 +291,13 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
291
291
|
|
|
292
292
|
|
|
293
293
|
getStoredProjectAndUserRole() {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
// this.logger.log('[CONVS-DETAIL] project_id ', this.project_id)
|
|
302
|
-
|
|
303
|
-
this.USER_ROLE = project.role;
|
|
304
|
-
// this.USER_ROLE = 'agent';
|
|
305
|
-
this.logger.log('[CONVS-DETAIL] USER_ROLE ', this.USER_ROLE)
|
|
306
|
-
}
|
|
294
|
+
this.events.subscribe('storage:last_project',project =>{
|
|
295
|
+
this.logger.log('[CONVS-DETAIL] stored_project ', project)
|
|
296
|
+
if (project && project !== 'undefined') {
|
|
297
|
+
this.USER_ROLE = project.role;
|
|
298
|
+
this.logger.log('[CONVS-DETAIL] USER_ROLE ', this.USER_ROLE)
|
|
299
|
+
}
|
|
300
|
+
});
|
|
307
301
|
}
|
|
308
302
|
|
|
309
303
|
getConversations() {
|
|
@@ -636,7 +630,9 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
636
630
|
"SEND_EMAIL_SUCCESS",
|
|
637
631
|
"SEND_EMAIL_ERROR",
|
|
638
632
|
"SUBJECT_OFFLINE_MESSAGE",
|
|
639
|
-
"SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE"
|
|
633
|
+
"SEND_EMAIL_SUCCESS_OFFLINE_MESSAGE",
|
|
634
|
+
|
|
635
|
+
|
|
640
636
|
]
|
|
641
637
|
|
|
642
638
|
const keysHeader = [
|
|
@@ -657,6 +653,8 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
|
|
|
657
653
|
'LABEL_OPEN_INFO_CONVERSATION',
|
|
658
654
|
'LABEL_CLOSE_GROUP',
|
|
659
655
|
'LABEL_IS_WRITING',
|
|
656
|
+
'COPY',
|
|
657
|
+
'COPY_MESSAGE_TOAST'
|
|
660
658
|
]
|
|
661
659
|
|
|
662
660
|
this.translationsMap = this.customTranslateService.translateLanguage(keys)
|
|
@@ -11,11 +11,18 @@
|
|
|
11
11
|
(openProfileInfo)=openProfileInfo($event)>
|
|
12
12
|
</header-conversations-list>
|
|
13
13
|
|
|
14
|
-
<header-conversations-list-archived *ngIf="conversationType
|
|
14
|
+
<header-conversations-list-archived *ngIf="conversationType ==='archived'"
|
|
15
15
|
[headerTitle]=headerTitle
|
|
16
16
|
[isMobile]="isMobile"
|
|
17
17
|
(onBackButton)=onBackButtonFN($event)>
|
|
18
18
|
</header-conversations-list-archived>
|
|
19
|
+
|
|
20
|
+
<header-conversations-list-unassigned *ngIf="conversationType ==='unassigned'"
|
|
21
|
+
[headerTitle]=headerTitle
|
|
22
|
+
[isMobile]="isMobile"
|
|
23
|
+
(onBackButton)=onBackButtonFN($event)>
|
|
24
|
+
</header-conversations-list-unassigned>
|
|
25
|
+
|
|
19
26
|
</ion-header>
|
|
20
27
|
|
|
21
28
|
<!-- appScrollbarTheme -->
|
|
@@ -39,7 +46,7 @@
|
|
|
39
46
|
</ion-item>
|
|
40
47
|
|
|
41
48
|
<span
|
|
42
|
-
*ngIf="(conversations.length > 0 && conversationType ==='active') || (archivedConversations.length > 0 && conversationType ==='archived');then contentConversations else contentMessageWelcome">
|
|
49
|
+
*ngIf="(conversations.length > 0 && conversationType ==='active') || (archivedConversations.length > 0 && conversationType ==='archived') || (unassignedConversations.length > 0 && conversationType ==='unassigned');then contentConversations else contentMessageWelcome">
|
|
43
50
|
here is ignored
|
|
44
51
|
</span>
|
|
45
52
|
|
|
@@ -73,6 +80,20 @@
|
|
|
73
80
|
(onImageLoaded)="onImageLoaded($event)"
|
|
74
81
|
(onConversationLoaded)="onConversationLoaded($event)">
|
|
75
82
|
</ion-list-conversations>
|
|
83
|
+
|
|
84
|
+
<!-- ---------------------------------- -->
|
|
85
|
+
<!-- UNASSIGNED CONVERSATION LIST -->
|
|
86
|
+
<!-- ---------------------------------- -->
|
|
87
|
+
<ion-list-conversations *ngIf="conversationType ==='unassigned'"
|
|
88
|
+
[listConversations]="unassignedConversations"
|
|
89
|
+
[stylesMap]="stylesMap"
|
|
90
|
+
[translationMap]="translationMapConversation"
|
|
91
|
+
(onConversationSelected)=onConversationSelected($event)
|
|
92
|
+
(onCloseConversation)="onCloseConversation($event)"
|
|
93
|
+
(onJoinConversation) ="onJoinConversation($event)"
|
|
94
|
+
(onImageLoaded)="onImageLoaded($event)"
|
|
95
|
+
(onConversationLoaded)="onConversationLoaded($event)">
|
|
96
|
+
</ion-list-conversations>
|
|
76
97
|
</ng-template>
|
|
77
98
|
|
|
78
99
|
<ng-template #contentMessageWelcome>
|
|
@@ -102,7 +123,7 @@
|
|
|
102
123
|
</div>
|
|
103
124
|
|
|
104
125
|
<div id="no-convs-wpr"
|
|
105
|
-
*ngIf="(!loadingIsActive && conversations.length === 0) || (!loadingIsActive && archivedConversations.length === 0) ">
|
|
126
|
+
*ngIf="(!loadingIsActive && conversations.length === 0) || (!loadingIsActive && archivedConversations.length === 0) || (!loadingIsActive && unassignedConversations.length === 0)">
|
|
106
127
|
<ion-item id="no-convs" class="ion-text-center" lines="none">
|
|
107
128
|
<ion-label class="ion-text-wrap" color="medium">
|
|
108
129
|
{{ 'LABEL_MSG_PUSH_START_CHAT' | translate }}
|
|
@@ -64,6 +64,7 @@ export class ConversationListPage implements OnInit {
|
|
|
64
64
|
public loggedUserUid: string
|
|
65
65
|
public conversations: Array<ConversationModel> = []
|
|
66
66
|
public archivedConversations: Array<ConversationModel> = []
|
|
67
|
+
public unassignedConversations: Array<ConversationModel> = []
|
|
67
68
|
public uidConvSelected: string
|
|
68
69
|
public conversationSelected: ConversationModel
|
|
69
70
|
public uidReciverFromUrl: string
|
|
@@ -253,22 +254,33 @@ export class ConversationListPage implements OnInit {
|
|
|
253
254
|
this.lastProjectId = projectid
|
|
254
255
|
}
|
|
255
256
|
|
|
256
|
-
openUnsevedConversationIframe(event) {
|
|
257
|
+
openUnsevedConversationIframe(event:{event: string, data: ConversationModel[]}) {
|
|
257
258
|
this.logger.log('[CONVS-LIST-PAGE] openUnsevedConversationIframe ', event)
|
|
258
259
|
this.hasClickedOpenUnservedConvIframe = true
|
|
260
|
+
// if(event && event.data){
|
|
261
|
+
// this.conversationType = 'unassigned'
|
|
262
|
+
// this.unassignedConversations = event.data
|
|
263
|
+
|
|
264
|
+
// const keys = ['UnassignedConversations']
|
|
265
|
+
// // const keys = ['History'];
|
|
266
|
+
|
|
267
|
+
// this.headerTitle = this.translateService.translateLanguage(keys).get(keys[0])
|
|
268
|
+
// }
|
|
259
269
|
this.logger.log('[CONVS-LIST-PAGE] - HAS CLIKED OPEN UNSERVED REQUEST IFRAME',this.hasClickedOpenUnservedConvIframe )
|
|
260
270
|
const DASHBOARD_BASE_URL = this.appConfigProvider.getConfig().dashboardUrl
|
|
261
271
|
// http://localhost:4204/#/projects-for-panel
|
|
262
272
|
this.PROJECTS_FOR_PANEL_URL = DASHBOARD_BASE_URL + '#/projects-for-panel'
|
|
263
273
|
this.UNASSIGNED_CONVS_URL = DASHBOARD_BASE_URL + '#/project/' + this.lastProjectId + '/unserved-request-for-panel'
|
|
264
274
|
|
|
265
|
-
if (event === 'pinbtn') {
|
|
275
|
+
if (event.event === 'pinbtn') {
|
|
266
276
|
this.IFRAME_URL = this.PROJECTS_FOR_PANEL_URL
|
|
267
277
|
} else {
|
|
268
278
|
this.IFRAME_URL = this.UNASSIGNED_CONVS_URL
|
|
269
279
|
}
|
|
270
280
|
this.logger.log('[CONVS-LIST-PAGE] - HAS CLIKED OPEN UNSERVED REQUEST IFRAME > UNASSIGNED CONVS URL',this.UNASSIGNED_CONVS_URL )
|
|
271
281
|
this.openUnassignedConversations(this.IFRAME_URL, event)
|
|
282
|
+
|
|
283
|
+
|
|
272
284
|
}
|
|
273
285
|
|
|
274
286
|
// ---------------------------------------------------------
|
|
@@ -649,6 +661,8 @@ export class ConversationListPage implements OnInit {
|
|
|
649
661
|
conversationSelected = this.conversations.find((item) => item.uid === this.uidConvSelected)
|
|
650
662
|
} else if (conversationType === 'archived') {
|
|
651
663
|
conversationSelected = this.archivedConversations.find((item) => item.uid === this.uidConvSelected)
|
|
664
|
+
} else if (conversationType === 'unassigned') {
|
|
665
|
+
conversationSelected = this.unassignedConversations.find((item) => item.uid === this.uidConvSelected)
|
|
652
666
|
}
|
|
653
667
|
if (conversationSelected) {
|
|
654
668
|
this.logger.log('[CONVS-LIST-PAGE] conversationSelected', conversationSelected)
|
|
@@ -873,6 +887,10 @@ export class ConversationListPage implements OnInit {
|
|
|
873
887
|
})
|
|
874
888
|
}
|
|
875
889
|
|
|
890
|
+
onJoinConversation(conversation: ConversationModel){
|
|
891
|
+
this.logger.log('[CONVS-LIST-PAGE] onJoinConversation conversation', conversation)
|
|
892
|
+
}
|
|
893
|
+
|
|
876
894
|
// ----------------------------------------------------------------------------------------------
|
|
877
895
|
// onCloseConversation
|
|
878
896
|
// https://github.com/chat21/chat21-cloud-functions/blob/master/docs/api.md#delete-a-conversation
|
|
@@ -48,6 +48,10 @@ export class UnassignedConversationsPage implements OnInit {
|
|
|
48
48
|
this.hideHotjarFeedbackBtn();
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
ngOnDestroy(){
|
|
52
|
+
this.logger.log('[UNASSIGNED-CONVS-PAGE] - onDestroy called', this.iframe_URL);
|
|
53
|
+
}
|
|
54
|
+
|
|
51
55
|
hideHotjarFeedbackBtn() {
|
|
52
56
|
const hotjarFeedbackBtn = <HTMLElement>document.querySelector("#_hj_feedback_container > div > button")
|
|
53
57
|
if (hotjarFeedbackBtn) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { HeaderConversationsListUnassigned } from './../components/conversations-list/header-conversations-list-unassigned/header-conversations-list-unassigned.component';
|
|
1
2
|
import { NavbarComponent } from './../components/navbar/navbar.component';
|
|
2
3
|
import { FormsModule } from '@angular/forms';
|
|
3
4
|
import { NgSelectModule } from '@ng-select/ng-select';
|
|
@@ -90,6 +91,7 @@ import { SafeHtmlPipe } from '../directives/safe-html.pipe';
|
|
|
90
91
|
HtmlEntitiesEncodePipe,
|
|
91
92
|
SafeHtmlPipe,
|
|
92
93
|
HeaderConversationsListArchived,
|
|
94
|
+
HeaderConversationsListUnassigned,
|
|
93
95
|
NetworkOfflineComponent
|
|
94
96
|
],
|
|
95
97
|
exports: [
|
|
@@ -123,6 +125,7 @@ import { SafeHtmlPipe } from '../directives/safe-html.pipe';
|
|
|
123
125
|
InfoDirectComponent,
|
|
124
126
|
InfoGroupComponent,
|
|
125
127
|
HeaderConversationsListArchived,
|
|
128
|
+
HeaderConversationsListUnassigned,
|
|
126
129
|
NetworkOfflineComponent
|
|
127
130
|
|
|
128
131
|
],
|
package/src/assets/i18n/ar.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "إعدادات",
|
|
241
241
|
"Resolve": "حل",
|
|
242
242
|
"Archive": "أرشيف",
|
|
243
|
+
"JOIN_CONVERSATION":"انضم إلى المحادثة",
|
|
244
|
+
"COPY":"ينسخ",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> تم النسخ إلى الحافظة! </ b> الصقها أينما تريد.",
|
|
243
246
|
"ActionNotAllowed": "الإجراء غير مسموح به",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation": "لم تعد من بين زملائك في الفريق الذين يديرون هذه المحادثة",
|
|
245
248
|
"TicketSuccessfullyCreated":"تم إنشاء التذكرة بنجاح",
|
package/src/assets/i18n/az.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Parametrlər",
|
|
241
241
|
"Resolve": "Həll et",
|
|
242
242
|
"Archive": "Arxiv",
|
|
243
|
+
"JOIN_CONVERSATION":"Söhbətə qoşulun",
|
|
244
|
+
"COPY":"Kopyalayın",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Buferə kopyalandı!</b> Onu istədiyiniz yerə yapışdırın.",
|
|
243
246
|
"ActionNotAllowed": "Fəaliyyətə icazə verilmir",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation": "Siz artıq bu söhbəti idarə edən komanda yoldaşları arasında deyilsiniz",
|
|
245
248
|
"TicketSuccessfullyCreated": "Bilet uğurla yaradıldı",
|
package/src/assets/i18n/de.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Einstellungen",
|
|
241
241
|
"Resolve": "Lösen",
|
|
242
242
|
"Archive": "Archivieren",
|
|
243
|
+
"JOIN_CONVERSATION":"Nehmen Sie am Gespräch teil",
|
|
244
|
+
"COPY":"Kopieren",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> In die Zwischenablage kopiert!</b> An beliebiger Stelle einfügen.",
|
|
243
246
|
"ActionNotAllowed": "Aktion nicht erlaubt",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Sie gehören nicht mehr zu den Teamkollegen, die diese Unterhaltung führen",
|
|
245
248
|
"TicketSuccessfullyCreated": "Ticket erfolgreich erstellt",
|
package/src/assets/i18n/en.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Settings",
|
|
241
241
|
"Resolve": "Resolve",
|
|
242
242
|
"Archive": "Archive",
|
|
243
|
+
"JOIN_CONVERSATION":"Join conversation",
|
|
244
|
+
"COPY":"Copy",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Copied to clipboard!</b> Paste it wherever you like.",
|
|
243
246
|
"ActionNotAllowed":"Action not allowed",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"You are no longer among the teammates managing this conversation",
|
|
245
248
|
"TicketSuccessfullyCreated":"Ticket successfully created",
|
package/src/assets/i18n/es.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Ajustes",
|
|
241
241
|
"Resolve": "Resolver",
|
|
242
242
|
"Archive": "Archivas",
|
|
243
|
+
"JOIN_CONVERSATION":"Unirse a la conversación",
|
|
244
|
+
"COPY":"Copiar",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Copiado al portapapeles!</b> Pégalo donde quieras.",
|
|
243
246
|
"ActionNotAllowed":"Acción no permitida",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Ya no estás entre los compañeros de equipo que gestionan esta conversación",
|
|
245
248
|
"TicketSuccessfullyCreated":"Ticket creado con éxito",
|
package/src/assets/i18n/fr.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Réglages",
|
|
241
241
|
"Resolve": "Résoudre",
|
|
242
242
|
"Archive": "Archiver",
|
|
243
|
+
"JOIN_CONVERSATION":"Rejoindre la conversation",
|
|
244
|
+
"COPY":"Copie",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Copié dans le presse-papier !</b> Collez-le où vous le souhaitez.",
|
|
243
246
|
"ActionNotAllowed":"Action non autorisée",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Vous n'êtes plus parmi les coéquipiers qui gèrent cette conversation",
|
|
245
248
|
"TicketSuccessfullyCreated":"Ticket créé avec succès",
|
package/src/assets/i18n/it.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Impostazioni",
|
|
241
241
|
"Resolve": "Risolvi",
|
|
242
242
|
"Archive": "Archivia",
|
|
243
|
+
"JOIN_CONVERSATION":"Partecipa alla chat",
|
|
244
|
+
"COPY":"Copia",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Copiato negli appunti!</b> Incollalo dove preferisci.",
|
|
243
246
|
"ActionNotAllowed":"Azione non permessa",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Non sei più tra i compagni di squadra che gestiscono questa conversazione",
|
|
245
248
|
"TicketSuccessfullyCreated":"Ticket creato con successo",
|
package/src/assets/i18n/kk.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Параметрлер",
|
|
241
241
|
"Resolve": "Шешіңіз",
|
|
242
242
|
"Archive": "Мұрағат",
|
|
243
|
+
"JOIN_CONVERSATION":"Әңгімеге қосылу",
|
|
244
|
+
"COPY":"Көшіру",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Буферге көшірілді!</b> Оны қалаған жеріңізге қойыңыз.",
|
|
243
246
|
"ActionNotAllowed": "Әрекетке рұқсат етілмейді",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation": "Сіз бұдан былай осы әңгімені басқаратын командаластардың арасында емессіз",
|
|
245
248
|
"TicketSuccessfullyCreated": "Билет сәтті жасалды",
|
package/src/assets/i18n/pt.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Configurações",
|
|
241
241
|
"Resolve": "Resolver",
|
|
242
242
|
"Archive": "Arquivar",
|
|
243
|
+
"JOIN_CONVERSATION":"Entrar na conversa",
|
|
244
|
+
"COPY":"Cópia",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Copiado para a área de transferência!</b> Cole onde quiser.",
|
|
243
246
|
"ActionNotAllowed":"Ação não autorizada",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Você não está mais entre os colegas de equipe que estão gerenciando esta conversa",
|
|
245
248
|
"TicketSuccessfullyCreated":"Ticket criado com sucesso",
|
package/src/assets/i18n/ru.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Настройки",
|
|
241
241
|
"Resolve": "Pазрешить",
|
|
242
242
|
"Archive": "Архивировать",
|
|
243
|
+
"JOIN_CONVERSATION":"Присоединиться к беседе",
|
|
244
|
+
"COPY":"Копировать",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Скопировано в буфер обмена!</b> Вставьте куда хотите.",
|
|
243
246
|
"ActionNotAllowed":"Действие не разрешено",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Вы больше не входите в число товарищей по команде, ведущих этот разговор",
|
|
245
248
|
"TicketSuccessfullyCreated":"Тикет успешно создан",
|
package/src/assets/i18n/sr.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Подешавања",
|
|
241
241
|
"Resolve": "Ресолве",
|
|
242
242
|
"Archive": "Архива",
|
|
243
|
+
"JOIN_CONVERSATION":"Придружите се разговору",
|
|
244
|
+
"COPY":"Копирај",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Копирано у међуспремник!</b> Налепите где год желите.",
|
|
243
246
|
"ActionNotAllowed":"Радња није дозвољена",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Више нисте међу саиграчима који управљају овим разговором",
|
|
245
248
|
"TicketSuccessfullyCreated":"Улазница је успешно направљена",
|
package/src/assets/i18n/sv.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "inställningar",
|
|
241
241
|
"Resolve": "Lösa",
|
|
242
242
|
"Archive": "Arkiv",
|
|
243
|
+
"JOIN_CONVERSATION":"Gå med i konversationen",
|
|
244
|
+
"COPY":"Kopiera",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Kopierat till urklipp!</b> Klistra in det var du vill.",
|
|
243
246
|
"ActionNotAllowed": "Åtgärd inte tillåten",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation": "Du är inte längre bland lagkamraterna som hanterar den här konversationen",
|
|
245
248
|
"TicketSuccessfullyCreated": "Biljetten har skapats",
|
package/src/assets/i18n/tr.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Ayarlar",
|
|
241
241
|
"Resolve": "Çözmek",
|
|
242
242
|
"Archive": "Arşivle",
|
|
243
|
+
"JOIN_CONVERSATION":"Sohbete katıl",
|
|
244
|
+
"COPY":"Kopyala",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Panoya kopyalandı!</b> İstediğiniz yere yapıştırın.",
|
|
243
246
|
"ActionNotAllowed":"İşleme izin verilmiyor",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Artık bu konuşmayı yöneten takım arkadaşları arasında değilsiniz",
|
|
245
248
|
"TicketSuccessfullyCreated":"Bilet başarıyla oluşturuldu",
|
package/src/assets/i18n/uk.json
CHANGED
|
@@ -240,6 +240,9 @@
|
|
|
240
240
|
"Settings": "Налаштування",
|
|
241
241
|
"Resolve": "Вирішити",
|
|
242
242
|
"Archive": "Архів",
|
|
243
|
+
"JOIN_CONVERSATION":"Приєднатися до розмови",
|
|
244
|
+
"COPY":"Копія",
|
|
245
|
+
"COPY_MESSAGE_TOAST":"<b> Скопійовано в буфер обміну!</b> Вставте куди завгодно.",
|
|
243
246
|
"ActionNotAllowed": "Дія не дозволена",
|
|
244
247
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation": "Ви більше не серед товаришів по команді, які керують цією розмовою",
|
|
245
248
|
"TicketSuccessfullyCreated": "Квиток успішно створено",
|
package/src/assets/i18n/uz.json
CHANGED
|
@@ -241,6 +241,9 @@
|
|
|
241
241
|
"Settings": "Sozlamalar",
|
|
242
242
|
"Resolve": "Yechish",
|
|
243
243
|
"Archive": "Arxiv",
|
|
244
|
+
"JOIN_CONVERSATION":"Suhbatga qo'shiling",
|
|
245
|
+
"COPY":"Nusxalash",
|
|
246
|
+
"COPY_MESSAGE_TOAST":"<b> Buferga nusxalandi!</b> Uni xohlagan joyga joylashtiring.",
|
|
244
247
|
"ActionNotAllowed": "Harakatga ruxsat berilmagan",
|
|
245
248
|
"YouAreNoLongerAmongTheTeammatesManagingThisConversation": "Siz endi bu suhbatni boshqarayotgan jamoadoshlar orasida emassiz",
|
|
246
249
|
"TicketSuccessfullyCreated": "Chipta muvaffaqiyatli yaratildi",
|
|
@@ -19,9 +19,9 @@ export class ConvertRequestToConversation {
|
|
|
19
19
|
request.attributes,
|
|
20
20
|
request.request_id && (request.request_id.startsWith('group-') || request.request_id.startsWith('support-group'))? TYPE_SUPPORT_GROUP: TYPE_DIRECT,
|
|
21
21
|
request.lead && request.lead.fullname ? request.lead.fullname: null,
|
|
22
|
-
request.
|
|
22
|
+
request.request_id,
|
|
23
|
+
request.request_id,
|
|
23
24
|
request.lead && request.lead.fullname ? request.lead.fullname: null,
|
|
24
|
-
request.requester_id,
|
|
25
25
|
'',
|
|
26
26
|
true,
|
|
27
27
|
request.first_text,
|