@chat21/chat21-ionic 3.4.29-rc1 → 3.4.29
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 +6 -109
- package/angular.json +0 -1
- package/package.json +1 -1
- package/src/app/app.component.html +1 -3
- package/src/app/app.component.ts +10 -71
- package/src/app/components/canned-response/canned-response.component.html +23 -26
- package/src/app/components/canned-response/canned-response.component.scss +2 -0
- package/src/app/components/canned-response/canned-response.component.ts +1 -3
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +1 -24
- 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 -29
- package/src/app/components/conversation-info/info-content/info-content.component.ts +2 -2
- package/src/app/components/conversation-info/info-group/info-group.component.ts +21 -23
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.html +1 -1
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.ts +1 -5
- package/src/app/components/navbar/navbar.component.html +3 -3
- package/src/app/components/navbar/navbar.component.ts +38 -29
- package/src/app/components/project-item/project-item.component.ts +11 -11
- package/src/app/components/sidebar/sidebar.component.html +45 -65
- package/src/app/components/sidebar/sidebar.component.ts +117 -110
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +2 -2
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +7 -10
- package/src/app/modals/create-ticket/create-ticket.page.ts +2 -4
- package/src/app/pages/conversation-detail/conversation-detail.page.html +3 -7
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +5 -89
- package/src/app/pages/conversations-list/conversations-list.page.html +0 -2
- package/src/app/pages/conversations-list/conversations-list.page.ts +2 -40
- 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/tiledesk/tiledesk.service.ts +16 -0
- package/src/app/services/triggerEvents/triggerEvents.ts +0 -28
- package/src/app/services/websocket/websocket-js.ts +534 -59
- package/src/app/services/websocket/websocket.service.ts +10 -9
- package/src/app/shared/shared.module.ts +2 -11
- package/src/app/utils/globals.ts +0 -2
- package/src/app/utils/project-utils.ts +2 -2
- package/src/app/utils/utils.ts +1 -18
- package/src/assets/i18n/ar.json +1 -11
- package/src/assets/i18n/az.json +1 -11
- package/src/assets/i18n/de.json +1 -11
- package/src/assets/i18n/en.json +1 -11
- package/src/assets/i18n/es.json +1 -11
- package/src/assets/i18n/fr.json +1 -11
- package/src/assets/i18n/it.json +3 -13
- package/src/assets/i18n/kk.json +1 -11
- package/src/assets/i18n/pt.json +1 -11
- package/src/assets/i18n/ru.json +1 -11
- package/src/assets/i18n/sr.json +1 -11
- package/src/assets/i18n/sv.json +1 -11
- package/src/assets/i18n/tr.json +1 -11
- package/src/assets/i18n/uk.json +1 -11
- package/src/assets/i18n/uz.json +1 -12
- 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/providers/firebase/firebase-conversation-handler.ts +1 -1
- package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +1 -1
- package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +0 -3
- package/src/chat21-core/utils/utils.ts +2 -16
- package/src/app/services/project_users/project-users.service.spec.ts +0 -16
- package/src/app/services/project_users/project-users.service.ts +0 -63
- package/src/app/services/websocket/websocket-js_old.ts +0 -578
- package/src/app/services/websocket/websocket.worker.ts +0 -242
- package/src/app/utils/permissions.constants.ts +0 -138
- package/src/assets/js/agentDesktop-sdk.js +0 -55
- package/src/assets/js/mqtt-keepalive-worker.js +0 -53
- package/src/chat21-core/models/projectUsers.ts +0 -19
package/CHANGELOG.md
CHANGED
|
@@ -8,98 +8,14 @@
|
|
|
8
8
|
### **Copyrigth**:
|
|
9
9
|
*Tiledesk SRL*
|
|
10
10
|
|
|
11
|
-
# 3.4.29
|
|
11
|
+
# 3.4.29 in PROD
|
|
12
12
|
- **bug-fixed**: web (Chrome >= 144) `ion-content` stopped scrolling on some pages (conversation list / contacts directory / unassigned); removed the forced `--overflow: hidden` and handled scrolling on Ionic’s internal scroll container via `ion-content::part(scroll)`
|
|
13
13
|
|
|
14
|
-
# 3.4.28
|
|
14
|
+
# 3.4.28 in PROD
|
|
15
15
|
- **bug-fixed**: cannot do project subscription if last_project object is not a project_user obj
|
|
16
16
|
|
|
17
|
-
# 3.4.27
|
|
18
|
-
- **bug-fixed**:
|
|
19
|
-
|
|
20
|
-
# 3.4.27-rc25
|
|
21
|
-
- **bug-fixed**: projectUserService is not initialized
|
|
22
|
-
|
|
23
|
-
# 3.4.27-rc24
|
|
24
|
-
- **added**: implementation of multiple message in wss onmessage
|
|
25
|
-
|
|
26
|
-
# 3.4.27-rc23
|
|
27
|
-
- **added**: keepAlive worker for MQTT connection
|
|
28
|
-
|
|
29
|
-
# 3.4.27-rc22
|
|
30
|
-
- **added**: new WsWorker to manage iframe chrome throttling while tab is in background or hidden
|
|
31
|
-
|
|
32
|
-
# 3.4.27-rc21
|
|
33
|
-
- **changed**: new wss reconnect and timeout keepalive
|
|
34
|
-
- **bug-fixed**: cannot route if senderFullaname contains /
|
|
35
|
-
|
|
36
|
-
# 3.4.27-rc20
|
|
37
|
-
- **added**: onOpenTicketExternally event in triggerEvents service
|
|
38
|
-
|
|
39
|
-
# 3.4.27-rc19
|
|
40
|
-
- **added**: window.parent['openTicketOnHDA']
|
|
41
|
-
|
|
42
|
-
# 3.4.27-rc18
|
|
43
|
-
- **added**: triggerOnUpdateNewConversationBadge to update conversation badge count in parent component
|
|
44
|
-
|
|
45
|
-
# 3.4.27-rc17
|
|
46
|
-
- **bug-fixed**: setNotification not called when click on a conversation
|
|
47
|
-
|
|
48
|
-
# 3.4.27-rc16
|
|
49
|
-
- **bug-fixed**: setNotification not called when resolve a conversation
|
|
50
|
-
|
|
51
|
-
# 3.4.27-rc15
|
|
52
|
-
- **changed**: /images with /img in assets folder
|
|
53
|
-
|
|
54
|
-
# 3.4.27-rc14
|
|
55
|
-
- **added**: DISPLAY_EDIT_PROFILE brand variable
|
|
56
|
-
- **bug-fixed**: emojii is sent also if is not allowed
|
|
57
|
-
|
|
58
|
-
# 3.4.27-rc13
|
|
59
|
-
- **added**: ability to mantain logout parameter when redirect to dashboard urls from sidebar component
|
|
60
|
-
|
|
61
|
-
# 3.4.27-rc12
|
|
62
|
-
- **added**: ability to manage logOut option in sidebar-user-detail with tiledesk_logOut url query params
|
|
63
|
-
|
|
64
|
-
# 3.4.27-rc11
|
|
65
|
-
- **bug-fixed**: fixed infinite loading in contact list
|
|
66
|
-
|
|
67
|
-
# 3.4.27-rc10
|
|
68
|
-
- **added**: ability to manage header-conversation-list with roles
|
|
69
|
-
- **bug-fixed**: members in group list not loaded
|
|
70
|
-
|
|
71
|
-
# 3.4.27-rc9
|
|
72
|
-
- **bug-fixed**: Scrolling to the last message when opening a conversation
|
|
73
|
-
- **bug-fixed**: Loading in the conversation list disabled when removing the last conversation
|
|
74
|
-
|
|
75
|
-
# 3.4.27-rc8
|
|
76
|
-
- **added**: ability to open ticket to external service
|
|
77
|
-
- **added**: ticketSection env var
|
|
78
|
-
|
|
79
|
-
# 3.4.27-rc7
|
|
80
|
-
- **bug-fixed**: Scrolling to the last message when opening a conversation
|
|
81
|
-
- **bug-fixed**: Loading in the conversation list disabled when removing the last conversation
|
|
82
|
-
|
|
83
|
-
# 3.4.27-rc6
|
|
84
|
-
- **bug-fixed**: user for dashboard app is incorrect
|
|
85
|
-
|
|
86
|
-
# 3.4.27-rc5
|
|
87
|
-
- **added**: managed roles in sidebar e navbar
|
|
88
|
-
- **bug-fixed**: projectId and supportMode url is not saved in localstorage
|
|
89
|
-
|
|
90
|
-
# 3.4.27-rc4
|
|
91
|
-
- **bug-fixed**: extractUrls function is not able to detect url start with www or without https/http
|
|
92
|
-
- **bug-fixed**: if message is sent with keydown, error on domain check is not showed
|
|
93
|
-
|
|
94
|
-
# 3.4.27-rc3
|
|
95
|
-
- **bug-fixed**: cannot set user availability if supportMode is enabled and tiledesk_projectID url params is set
|
|
96
|
-
|
|
97
|
-
# 3.4.27-rc2
|
|
98
|
-
- **bug-fixed**: cannede responses role
|
|
99
|
-
|
|
100
|
-
# 3.4.27-rc1
|
|
101
|
-
- **added**: managed canned responses with roles
|
|
102
|
-
- **changed**: name in info mesage
|
|
17
|
+
# 3.4.27 in PROD
|
|
18
|
+
- **bug-fixed**: cannot find route if userFullname contains /
|
|
103
19
|
|
|
104
20
|
# 3.4.26 in PROD
|
|
105
21
|
|
|
@@ -109,7 +25,6 @@
|
|
|
109
25
|
# 3.4.26-rc1
|
|
110
26
|
- **added**: tiledesk_projectID query param to manage user status
|
|
111
27
|
- **added**: token to managane ticket feature
|
|
112
|
-
- **added**: getOsCode login into utils.ts
|
|
113
28
|
|
|
114
29
|
# 3.4.25 in PROD
|
|
115
30
|
- **changed**: pipe marked to support malicious text input
|
|
@@ -132,24 +47,6 @@
|
|
|
132
47
|
# 3.4.22 in PROD
|
|
133
48
|
- **added**: managed allowed_upload_extentions from project settings
|
|
134
49
|
|
|
135
|
-
# 3.4.21-rc6
|
|
136
|
-
- **added**: managed allowed_upload_extentions from project settings
|
|
137
|
-
|
|
138
|
-
# 3.4.21-rc5
|
|
139
|
-
- **added**: setConversation as read when agent click on it
|
|
140
|
-
|
|
141
|
-
# 3.4.21-rc4
|
|
142
|
-
- **added**: ability to init and decrement new conversation count badge
|
|
143
|
-
|
|
144
|
-
# 3.4.21-rc3
|
|
145
|
-
- **changed**: badge notification for agentDesktop
|
|
146
|
-
|
|
147
|
-
# 3.4.21-rc2
|
|
148
|
-
- **added**: count in newConversation handler event
|
|
149
|
-
|
|
150
|
-
# 3.4.21-rc1
|
|
151
|
-
- **added**: implement badge notification for agentDesktop sw when new conversation is assigned to logged agent
|
|
152
|
-
|
|
153
50
|
# 3.4.21 in PROD
|
|
154
51
|
|
|
155
52
|
# 3.4.20 in PROD
|
|
@@ -163,8 +60,8 @@
|
|
|
163
60
|
- **bug-fixed**: minor fix on ion-texarea element with allowed url domain
|
|
164
61
|
|
|
165
62
|
# 3.4.19-rc1
|
|
166
|
-
-
|
|
167
|
-
-
|
|
63
|
+
- added: ability to check for if emoji is allowd to be sent in message textarea
|
|
64
|
+
- added: ability to check for if url domain is allowd to be sent in message textarea
|
|
168
65
|
|
|
169
66
|
# 3.4.18 in PROD
|
|
170
67
|
|
package/angular.json
CHANGED
package/package.json
CHANGED
|
@@ -21,9 +21,7 @@
|
|
|
21
21
|
</div> -->
|
|
22
22
|
|
|
23
23
|
<div class="user-details-sidebar" [ngClass]="{'hide-sidebar': IS_ONLINE === false || IS_ON_MOBILE_DEVICE || SUPPORT_MODE === false}">
|
|
24
|
-
<app-sidebar-user-details
|
|
25
|
-
[logOut]="g?.logOut">
|
|
26
|
-
</app-sidebar-user-details>
|
|
24
|
+
<app-sidebar-user-details> </app-sidebar-user-details>
|
|
27
25
|
</div>
|
|
28
26
|
|
|
29
27
|
<ion-split-pane when="md" contentId="main" [ngClass]="{'mobile': IS_ON_MOBILE_DEVICE, 'sidebar-hidden': IS_ON_MOBILE_DEVICE || SUPPORT_MODE === false}">
|
package/src/app/app.component.ts
CHANGED
|
@@ -44,9 +44,6 @@ import { conversationToMessage } from 'src/chat21-core/utils/utils-message';
|
|
|
44
44
|
import { ProjectService } from './services/projects/project.service';
|
|
45
45
|
import { ContactsService } from './services/contacts/contacts.service';
|
|
46
46
|
import { TiledeskService } from './services/tiledesk/tiledesk.service';
|
|
47
|
-
import { Project } from 'src/chat21-core/models/projects';
|
|
48
|
-
import { BRAND_BASE_INFO } from './utils/utils-resources';
|
|
49
|
-
import { ProjectUsersService } from './services/project_users/project-users.service';
|
|
50
47
|
|
|
51
48
|
@Component({
|
|
52
49
|
selector: 'app-root',
|
|
@@ -145,7 +142,6 @@ export class AppComponent implements OnInit {
|
|
|
145
142
|
/**TILEDESK SERVICES */
|
|
146
143
|
private tiledeskService: TiledeskService,
|
|
147
144
|
private projectService: ProjectService,
|
|
148
|
-
private projectUsersService: ProjectUsersService,
|
|
149
145
|
private contactsService: ContactsService
|
|
150
146
|
) {
|
|
151
147
|
|
|
@@ -172,7 +168,6 @@ export class AppComponent implements OnInit {
|
|
|
172
168
|
}, { capture: true });
|
|
173
169
|
}
|
|
174
170
|
|
|
175
|
-
|
|
176
171
|
listenChatAlreadyOpenWithoutParamsInMobileMode() {
|
|
177
172
|
this.events.subscribe('noparams:mobile', (isAlreadyOpenInMobileMode) => {
|
|
178
173
|
// console.log('[APP-COMP] Chat is Already Open In Mobile Mode ', isAlreadyOpenInMobileMode)
|
|
@@ -301,10 +296,6 @@ export class AppComponent implements OnInit {
|
|
|
301
296
|
this.zone = new NgZone({}); // a cosa serve?
|
|
302
297
|
|
|
303
298
|
this.SUPPORT_MODE = this.g.supportMode
|
|
304
|
-
this.logger.info('[APP-COMP] this.SUPPORT_MODE', this.SUPPORT_MODE)
|
|
305
|
-
|
|
306
|
-
BRAND_BASE_INFO['LOGOUT_ENABLED'] = this.g.logOut
|
|
307
|
-
this.logger.info('[APP-COMP] this.logOut', BRAND_BASE_INFO['LOGOUT_ENABLED'])
|
|
308
299
|
}
|
|
309
300
|
|
|
310
301
|
});
|
|
@@ -341,7 +332,7 @@ export class AppComponent implements OnInit {
|
|
|
341
332
|
|
|
342
333
|
listenToPostMsgs() {
|
|
343
334
|
window.addEventListener("message", (event) => {
|
|
344
|
-
|
|
335
|
+
this.logger.log("[APP-COMP] message event ", event);
|
|
345
336
|
|
|
346
337
|
if (event && event.data && event.data.action && event.data.parameter) {
|
|
347
338
|
if (event.data.action === 'openJoinConversationModal') {
|
|
@@ -543,10 +534,10 @@ export class AppComponent implements OnInit {
|
|
|
543
534
|
this.statusBar.styleLightContent();
|
|
544
535
|
this.navService.init(this.sidebarNav, this.detailNav);
|
|
545
536
|
this.tiledeskAuthService.initialize(this.appConfigProvider.getConfig().apiUrl);
|
|
546
|
-
|
|
537
|
+
this.messagingAuthService.initialize();
|
|
538
|
+
|
|
547
539
|
// this.currentUserService.initialize();
|
|
548
540
|
this.chatManager.initialize();
|
|
549
|
-
this.messagingAuthService.initialize();
|
|
550
541
|
this.presenceService.initialize(this.tenant);
|
|
551
542
|
this.typingService.initialize(this.tenant);
|
|
552
543
|
|
|
@@ -873,8 +864,7 @@ export class AppComponent implements OnInit {
|
|
|
873
864
|
// console.log('[APP-COMP] PLATFORM', PLATFORM_MOBILE, 'route.snapshot', this.route.snapshot);
|
|
874
865
|
if (!IDConv) {
|
|
875
866
|
this.logger.log('[APP-COMP] navigateByUrl -- conversations-list');
|
|
876
|
-
|
|
877
|
-
this.router.navigateByUrl('conversations-list' + queryString);
|
|
867
|
+
this.router.navigateByUrl('conversations-list')
|
|
878
868
|
}
|
|
879
869
|
// this.router.navigateByUrl(pageUrl);
|
|
880
870
|
// this.navService.setRoot(ConversationListPage, {});
|
|
@@ -1125,19 +1115,13 @@ export class AppComponent implements OnInit {
|
|
|
1125
1115
|
if (conversation && conversation.is_new === true && this.isInitialized) {
|
|
1126
1116
|
this.manageTabNotification('conv_added', conversation.sound)
|
|
1127
1117
|
this.manageEventNewConversation(conversation)
|
|
1128
|
-
//UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1129
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1130
1118
|
}
|
|
1131
1119
|
if(conversation) this.updateConversationsOnStorage()
|
|
1132
1120
|
});
|
|
1133
1121
|
|
|
1134
1122
|
this.conversationsHandlerService.conversationChanged.subscribe((conversation: ConversationModel) => {
|
|
1135
1123
|
// console.log('[APP-COMP] ***** subscribeConversationChanged conversation: ', conversation);
|
|
1136
|
-
if(conversation)
|
|
1137
|
-
this.updateConversationsOnStorage();
|
|
1138
|
-
//UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1139
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1140
|
-
}
|
|
1124
|
+
if(conversation) this.updateConversationsOnStorage();
|
|
1141
1125
|
});
|
|
1142
1126
|
|
|
1143
1127
|
this.conversationsHandlerService.conversationChangedDetailed.subscribe((changes: {value: ConversationModel, previousValue: ConversationModel}) => {
|
|
@@ -1161,8 +1145,6 @@ export class AppComponent implements OnInit {
|
|
|
1161
1145
|
if(conversation) {
|
|
1162
1146
|
this.updateConversationsOnStorage();
|
|
1163
1147
|
this.segmentResolved(conversation);
|
|
1164
|
-
//UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1165
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1166
1148
|
this.router.navigateByUrl('conversation-detail/'); //redirect to basePage
|
|
1167
1149
|
}
|
|
1168
1150
|
});
|
|
@@ -1196,7 +1178,6 @@ export class AppComponent implements OnInit {
|
|
|
1196
1178
|
this.chatManager.setCurrentUser(currentUser);
|
|
1197
1179
|
|
|
1198
1180
|
this.tiledeskService.initialize(serverBaseURL)
|
|
1199
|
-
this.projectUsersService.initialize(serverBaseURL)
|
|
1200
1181
|
this.projectService.initialize(serverBaseURL)
|
|
1201
1182
|
this.contactsService.initialize(serverBaseURL)
|
|
1202
1183
|
|
|
@@ -1204,14 +1185,11 @@ export class AppComponent implements OnInit {
|
|
|
1204
1185
|
this.events.publish('go:online', true);
|
|
1205
1186
|
// this.chatManager.startApp();
|
|
1206
1187
|
|
|
1207
|
-
|
|
1208
|
-
//INIT WEBSOCKET
|
|
1209
|
-
this.connetWebsocket(tiledeskToken)
|
|
1210
|
-
|
|
1211
1188
|
// ----------------------------------------------
|
|
1212
1189
|
// PUSH NOTIFICATIONS
|
|
1213
1190
|
// ----------------------------------------------
|
|
1214
1191
|
const pushEngine = this.appConfigProvider.getConfig().pushEngine
|
|
1192
|
+
|
|
1215
1193
|
if (currentUser) {
|
|
1216
1194
|
if (pushEngine && pushEngine !== 'none') {
|
|
1217
1195
|
this.notificationsService.getNotificationPermissionAndSaveToken(currentUser.uid);
|
|
@@ -1233,24 +1211,6 @@ export class AppComponent implements OnInit {
|
|
|
1233
1211
|
} catch (err) {
|
|
1234
1212
|
this.logger.error('[APP-COMP] -> error:', err);
|
|
1235
1213
|
}
|
|
1236
|
-
|
|
1237
|
-
// ----------------------------------------------
|
|
1238
|
-
// LAST PROJECT FROM URL
|
|
1239
|
-
// ----------------------------------------------
|
|
1240
|
-
if(this.g.projectID){
|
|
1241
|
-
this.projectService.getProjects().subscribe({ next: (projects: Project[]) => {
|
|
1242
|
-
const project = projects.find(prjct => prjct.id_project._id === this.g.projectID)
|
|
1243
|
-
if(project){
|
|
1244
|
-
this.logger.log('[APP-COMP] - GET PROJECT - project found with this.projectID', project);
|
|
1245
|
-
localStorage.setItem('last_project', JSON.stringify(project))
|
|
1246
|
-
this.events.publish('storage:last_project', project)
|
|
1247
|
-
}
|
|
1248
|
-
}, error: (error) => {
|
|
1249
|
-
this.logger.log('[APP-COMP] - GET PROJECT - project NOT found with this.projectID', this.g.projectID, error);
|
|
1250
|
-
}, complete: () => {
|
|
1251
|
-
|
|
1252
|
-
}});
|
|
1253
|
-
}
|
|
1254
1214
|
}
|
|
1255
1215
|
|
|
1256
1216
|
|
|
@@ -1291,21 +1251,9 @@ export class AppComponent implements OnInit {
|
|
|
1291
1251
|
}
|
|
1292
1252
|
|
|
1293
1253
|
goToDashboardLogin(){
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
}
|
|
1298
|
-
|
|
1299
|
-
connetWebsocket(tiledeskToken) {
|
|
1300
|
-
|
|
1301
|
-
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] tiledeskToken ', tiledeskToken)
|
|
1302
|
-
const appconfig = this.appConfigProvider.getConfig();
|
|
1303
|
-
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', appconfig.wsUrl)
|
|
1304
|
-
const WS_URL = appconfig.wsUrl + '?token=' + tiledeskToken
|
|
1305
|
-
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', WS_URL)
|
|
1306
|
-
this.webSocketJs.init(
|
|
1307
|
-
WS_URL
|
|
1308
|
-
);
|
|
1254
|
+
let DASHBOARD_URL = this.appConfigProvider.getConfig().dashboardUrl + '#/login'
|
|
1255
|
+
const myWindow = window.open(DASHBOARD_URL, '_self');
|
|
1256
|
+
myWindow.focus();
|
|
1309
1257
|
}
|
|
1310
1258
|
|
|
1311
1259
|
|
|
@@ -1404,8 +1352,7 @@ export class AppComponent implements OnInit {
|
|
|
1404
1352
|
|
|
1405
1353
|
subscribeConversationSelected= (conversation: ConversationModel) => {
|
|
1406
1354
|
if(conversation && conversation.is_new){
|
|
1407
|
-
this.audio_NewConv.pause()
|
|
1408
|
-
this.conversationsHandlerService.setConversationRead(conversation.uid)
|
|
1355
|
+
this.audio_NewConv.pause()
|
|
1409
1356
|
}
|
|
1410
1357
|
}
|
|
1411
1358
|
|
|
@@ -1481,9 +1428,6 @@ export class AppComponent implements OnInit {
|
|
|
1481
1428
|
this.logger.debug('[APP-COMP]-CONVS - INIT CONV CONVS 2', conversations)
|
|
1482
1429
|
this.events.publish('appcompSubscribeToConvs:loadingIsActive', false);
|
|
1483
1430
|
}
|
|
1484
|
-
|
|
1485
|
-
//INIT NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1486
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1487
1431
|
});
|
|
1488
1432
|
|
|
1489
1433
|
}
|
|
@@ -1766,11 +1710,6 @@ export class AppComponent implements OnInit {
|
|
|
1766
1710
|
this.triggerEvents.triggerOnInit(detailOBJ)
|
|
1767
1711
|
}
|
|
1768
1712
|
|
|
1769
|
-
private triggerOnUpdateNewConversationBadge(count: number){
|
|
1770
|
-
const detailOBJ = { event: 'onUpdateNewConversationBadge', count: count.toString() }
|
|
1771
|
-
this.triggerEvents.triggerOnUpdateNewConversationBadge(detailOBJ)
|
|
1772
|
-
}
|
|
1773
|
-
|
|
1774
1713
|
|
|
1775
1714
|
// @HostListener('mouseenter', ['$event'])
|
|
1776
1715
|
// onMouseEnter(event: any) {
|
|
@@ -1,30 +1,20 @@
|
|
|
1
1
|
<div>
|
|
2
|
-
<div class="canned-list" *ngIf="
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
<ion-input [class.readonly]="canned?.disabled" [readonly]="canned?.disabled" type="text" [(ngModel)]="canned.text" class="text truncate"></ion-input>
|
|
11
|
-
</div>
|
|
12
|
-
<!-- <ion-icon class="canned-item-icon" name="pin" src="assets/img/pin.svg" slot=end *ngIf="canned.pinned" (click)="onPinCanned(canned, $event)"></ion-icon>
|
|
13
|
-
<ion-icon class="canned-item-icon" name="pin" src="assets/img/pinned.svg" slot=end (click)="onUnPinCanned(canned, $event)"></ion-icon> -->
|
|
14
|
-
<ion-icon class="canned-item-icon" name="checkmark-sharp" slot=end *ngIf="(canned.createdBy === loggedUser.uid && !canned.disabled) && roles[PERMISSIONS.CANNED_RESPONSES_UPDATE]" (click)="onConfirmEditCanned(canned, $event)"></ion-icon>
|
|
15
|
-
<ion-icon class="canned-item-icon" name="pencil-sharp" slot=end *ngIf="(canned.createdBy === loggedUser.uid && canned.disabled) && roles[PERMISSIONS.CANNED_RESPONSES_UPDATE]" (click)="onEditCanned(canned, $event)"></ion-icon>
|
|
16
|
-
<ion-icon class="canned-item-icon" name="trash-bin-outline" slot=end *ngIf="(canned.createdBy === loggedUser.uid) && roles[PERMISSIONS.CANNED_RESPONSES_DELETE]" (click)="onDeleteCanned(canned, $event)"></ion-icon>
|
|
17
|
-
</ion-item>
|
|
18
|
-
</span>
|
|
19
|
-
<div class="no-data" *ngIf="tagsCannedFilter.length === 0">
|
|
20
|
-
<div class="container">
|
|
21
|
-
<ion-item button="false" lines="none" class="canned-item no-ripple border">
|
|
22
|
-
<ion-icon name="cloud-offline" slot="start"></ion-icon>
|
|
23
|
-
<ion-label>{{translationMap.get('THERE_ARE_NO_CANNED_RESPONSES_AVAILABLE')}}</ion-label>
|
|
24
|
-
</ion-item>
|
|
2
|
+
<div class="canned-list" *ngIf="tagsCannedFilter.length > 0">
|
|
3
|
+
<ion-item button="true" [ngClass]="{'is_active_item': i == arrowkeyLocation}" lines="none"
|
|
4
|
+
class="canned-item no-ripple border" id="{{'canned-item_'+ i }}"
|
|
5
|
+
*ngFor="let canned of tagsCannedFilter; let i = index;"
|
|
6
|
+
(click)="onClickCannedFN(canned, $event)">
|
|
7
|
+
<div class="cannedContent">
|
|
8
|
+
<ion-input [class.readonly]="canned?.disabled" [readonly]="canned?.disabled" type="text" [(ngModel)]="canned.title" class="title" id="{{'titleCanned_'+canned._id}}" #title></ion-input>
|
|
9
|
+
<ion-input [class.readonly]="canned?.disabled" [readonly]="canned?.disabled" type="text" [(ngModel)]="canned.text" class="text truncate"></ion-input>
|
|
25
10
|
</div>
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
<!-- <ion-icon class="canned-item-icon" name="pin" src="assets/img/pin.svg" slot=end *ngIf="canned.pinned" (click)="onPinCanned(canned, $event)"></ion-icon>
|
|
12
|
+
<ion-icon class="canned-item-icon" name="pin" src="assets/img/pinned.svg" slot=end (click)="onUnPinCanned(canned, $event)"></ion-icon> -->
|
|
13
|
+
<ion-icon class="canned-item-icon" name="checkmark-sharp" slot=end *ngIf="canned.createdBy === loggedUser.uid && !canned.disabled" (click)="onConfirmEditCanned(canned, $event)"></ion-icon>
|
|
14
|
+
<ion-icon class="canned-item-icon" name="pencil-sharp" slot=end *ngIf="canned.createdBy === loggedUser.uid && canned.disabled" (click)="onEditCanned(canned, $event)"></ion-icon>
|
|
15
|
+
<ion-icon class="canned-item-icon" name="trash-bin-outline" slot=end *ngIf="canned.createdBy === loggedUser.uid" (click)="onDeleteCanned(canned, $event)"></ion-icon>
|
|
16
|
+
</ion-item>
|
|
17
|
+
<ion-item class="canned-item add-canned-response-wpr" button="true" lines="none" (click)="onClickAddCannedResponseFN()">
|
|
28
18
|
<ion-icon class="add-canned-response-icon" name="flash-outline"></ion-icon>
|
|
29
19
|
<span class="add-canned-response-add-icon">+</span>
|
|
30
20
|
<label class="add-canned-response-label" >{{translationMap?.get('AddNewCannedResponse')}}</label>
|
|
@@ -43,5 +33,12 @@
|
|
|
43
33
|
<div class="label">{{translationMap.get('LABEL_LOADING')}}</div>
|
|
44
34
|
</div>
|
|
45
35
|
</div>
|
|
46
|
-
|
|
36
|
+
<div class="no-data" *ngIf="tagsCannedFilter.length === 0 && !showLoading">
|
|
37
|
+
<div class="container">
|
|
38
|
+
<ion-item button="false" lines="none" class="canned-item no-ripple border">
|
|
39
|
+
<ion-icon name="cloud-offline" slot="start"></ion-icon>
|
|
40
|
+
<ion-label>{{translationMap.get('THERE_ARE_NO_CANNED_RESPONSES_AVAILABLE')}}</ion-label>
|
|
41
|
+
</ion-item>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
47
44
|
</div>
|
|
@@ -9,7 +9,6 @@ import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk
|
|
|
9
9
|
import { compareValues, htmlEntities } from 'src/chat21-core/utils/utils';
|
|
10
10
|
import { getProjectIdSelectedConversation } from 'src/chat21-core/utils/utils-message';
|
|
11
11
|
import { PLAN_NAME } from 'src/chat21-core/utils/constants';
|
|
12
|
-
import { PERMISSIONS } from 'src/app/utils/permissions.constants';
|
|
13
12
|
|
|
14
13
|
@Component({
|
|
15
14
|
selector: 'app-canned-response',
|
|
@@ -22,7 +21,7 @@ export class CannedResponseComponent implements OnInit {
|
|
|
22
21
|
@Input() conversationWith: string;
|
|
23
22
|
@Input() conversationWithFullname: string;
|
|
24
23
|
@Input() currentString: string;
|
|
25
|
-
@Input()
|
|
24
|
+
@Input() canShowCanned: boolean = true;
|
|
26
25
|
@Input() stylesMap: Map<string, string>;
|
|
27
26
|
@Input() translationMap: Map<string, string>;
|
|
28
27
|
@Output() onLoadedCannedResponses = new EventEmitter<[any]>();
|
|
@@ -37,7 +36,6 @@ export class CannedResponseComponent implements OnInit {
|
|
|
37
36
|
|
|
38
37
|
public arrowkeyLocation = -1
|
|
39
38
|
|
|
40
|
-
PERMISSIONS = PERMISSIONS
|
|
41
39
|
|
|
42
40
|
private logger: LoggerService = LoggerInstance.getInstance();
|
|
43
41
|
constructor(
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html
CHANGED
|
@@ -22,13 +22,6 @@
|
|
|
22
22
|
{{translationMap?.get('WHATSAPP.LABEL_TEMPLATES')}}
|
|
23
23
|
</ion-button>
|
|
24
24
|
</div>
|
|
25
|
-
<!-- OPEN TICKET -->
|
|
26
|
-
<div *ngIf="ticketSection" class="section-option" id="template" tooltip="{{translationMap?.get('TICKET.OPEN_TICKET')}}" placement="top">
|
|
27
|
-
<ion-button fill="clear" [class.active]="section==='ticket'" (click)="onOpenSection('ticket')" [disabled]="channelType === 'direct'">
|
|
28
|
-
<ion-icon name="ticket"></ion-icon>
|
|
29
|
-
{{translationMap?.get('TICKET.OPEN_TICKET')}}
|
|
30
|
-
</ion-button>
|
|
31
|
-
</div>
|
|
32
25
|
</div>
|
|
33
26
|
|
|
34
27
|
<div class="footerContainerAlert">
|
|
@@ -57,22 +50,6 @@
|
|
|
57
50
|
</ion-col>
|
|
58
51
|
</ion-row>
|
|
59
52
|
|
|
60
|
-
<ion-row id="ticket" [style.display]="section==='ticket'? 'flex': 'none'">
|
|
61
|
-
<ion-col col-auto>
|
|
62
|
-
<div class="placeholder">{{translationMap.get('TICKET.DESCRIPTION')}}</div>
|
|
63
|
-
<div class="buttons-container">
|
|
64
|
-
<ion-button name="add" size="small" (click)="onClickTicket('open')">
|
|
65
|
-
<ion-icon name="add"></ion-icon>
|
|
66
|
-
{{translationMap?.get('TICKET.CONFIRM')}}
|
|
67
|
-
</ion-button>
|
|
68
|
-
<ion-button size="small" color="danger" (click)="onClickTicket('close')">
|
|
69
|
-
<ion-icon name="close"></ion-icon>
|
|
70
|
-
{{translationMap?.get('TICKET.CLOSE')}}
|
|
71
|
-
</ion-button>
|
|
72
|
-
</div>
|
|
73
|
-
</ion-col>
|
|
74
|
-
</ion-row>
|
|
75
|
-
|
|
76
53
|
<ion-row id="message-text-area" [style.display]="section==='chat' || section ==='templates' || section ==='copilot'? 'flex': 'none'">
|
|
77
54
|
|
|
78
55
|
<ion-col col-auto style="display: flex;">
|
|
@@ -80,7 +57,7 @@
|
|
|
80
57
|
<div class="buttons-left">
|
|
81
58
|
|
|
82
59
|
<!-- CANNED RESPONSES -->
|
|
83
|
-
<ng-container *ngIf="areVisibleCAR && supportMode
|
|
60
|
+
<ng-container *ngIf="areVisibleCAR && supportMode">
|
|
84
61
|
<div class="canned-responses-btn-wpr" tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" placement="top">
|
|
85
62
|
<ion-button ion-button fill="clear" class="canned-responses-btn" (click)="openCannedResponses()"
|
|
86
63
|
[disabled]="!conversationWith?.startsWith(CHANNEL_TYPE.SUPPORT_GROUP) || disableTextarea">
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss
CHANGED
|
@@ -183,36 +183,6 @@
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
#ticket{
|
|
187
|
-
text-align: center;
|
|
188
|
-
font-size: 12px;
|
|
189
|
-
|
|
190
|
-
.buttons-container{
|
|
191
|
-
display: flex;
|
|
192
|
-
justify-content: center;
|
|
193
|
-
gap: 10px;
|
|
194
|
-
|
|
195
|
-
ion-button{
|
|
196
|
-
font-size: 12px;
|
|
197
|
-
--padding-top: 4px;
|
|
198
|
-
--padding-bottom: 4px;
|
|
199
|
-
--padding-start: 6px;
|
|
200
|
-
--padding-end: 6px;
|
|
201
|
-
--ripple-color: transparent;
|
|
202
|
-
text-transform: unset;
|
|
203
|
-
height: auto;
|
|
204
|
-
|
|
205
|
-
ion-icon{
|
|
206
|
-
margin-right: 4px;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
&[name="add"]{
|
|
210
|
-
--background: var(--basic-blue);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
186
|
#fileInput {
|
|
217
187
|
position: absolute;
|
|
218
188
|
opacity: 0;
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts
CHANGED
|
@@ -26,7 +26,6 @@ import { CopilotService } from 'src/app/services/copilot/copilot.service';
|
|
|
26
26
|
import { BRAND_BASE_INFO } from 'src/app/utils/utils-resources';
|
|
27
27
|
import { ProjectService } from 'src/app/services/projects/project.service';
|
|
28
28
|
import { Project } from 'src/chat21-core/models/projects';
|
|
29
|
-
import { ProjectUser } from 'src/chat21-core/models/projectUsers';
|
|
30
29
|
|
|
31
30
|
|
|
32
31
|
@Component({
|
|
@@ -50,7 +49,6 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
50
49
|
@ViewChild('fileInput', { static: false }) fileInput: any;
|
|
51
50
|
|
|
52
51
|
@Input() loggedUser: UserModel;
|
|
53
|
-
@Input() projectUser: ProjectUser;
|
|
54
52
|
@Input() conversationWith: string;
|
|
55
53
|
@Input() channelType: string;
|
|
56
54
|
@Input() channel: string;
|
|
@@ -63,20 +61,16 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
63
61
|
@Input() emailSection: boolean;
|
|
64
62
|
@Input() offlineMsgEmail: boolean;
|
|
65
63
|
@Input() whatsappTemplatesSection: boolean;
|
|
66
|
-
@Input() ticketSection: boolean
|
|
67
64
|
@Input() isOpenInfoConversation: boolean;
|
|
68
|
-
@Input() cannedSection: boolean;
|
|
69
65
|
@Input() stylesMap: Map<string, string>;
|
|
70
66
|
@Input() translationMap: Map<string, string>;
|
|
71
67
|
@Input() dropEvent: any;
|
|
72
68
|
@Input() disableTextarea: boolean;
|
|
73
|
-
@Input() roles: Array<string>;
|
|
74
69
|
@Output() eventChangeTextArea = new EventEmitter<{msg: string, offsetHeight: number}>();
|
|
75
70
|
@Output() eventSendMessage = new EventEmitter<{msg: string, type: string, metadata?: Object, attributes?: Object}>();
|
|
76
71
|
@Output() onClickOpenCannedResponses = new EventEmitter<boolean>();
|
|
77
72
|
@Output() onPresentModalScrollToBottom = new EventEmitter<boolean>();
|
|
78
73
|
@Output() onOpenFooterSection = new EventEmitter<string>();
|
|
79
|
-
@Output() onOpenTicket = new EventEmitter<boolean>();
|
|
80
74
|
|
|
81
75
|
public project: Project;
|
|
82
76
|
public conversationEnabled = false;
|
|
@@ -294,17 +288,6 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
294
288
|
this.prensentTemplateModal();
|
|
295
289
|
}
|
|
296
290
|
|
|
297
|
-
onClickTicket(option: "open" | "close"){
|
|
298
|
-
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] - onClickTicket', option);
|
|
299
|
-
switch(option){
|
|
300
|
-
case "open":
|
|
301
|
-
this.onOpenTicket.emit();
|
|
302
|
-
case "close":
|
|
303
|
-
this.section = 'chat'
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
}
|
|
307
|
-
|
|
308
291
|
|
|
309
292
|
/**
|
|
310
293
|
*
|
|
@@ -584,10 +567,8 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
584
567
|
if (!text.includes("/")) {
|
|
585
568
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 1 message: ', message);
|
|
586
569
|
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 1 message: ", message);
|
|
587
|
-
|
|
570
|
+
this.messageString = '';
|
|
588
571
|
this.sendMessage(text);
|
|
589
|
-
// this.messageString = '';
|
|
590
|
-
|
|
591
572
|
this.countClicks = 0
|
|
592
573
|
} else if (text.includes("/") && pos === 0 && this.countClicks > 1 && this.tagsCannedFilter.length > 0) {
|
|
593
574
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - tagsCannedFilter.length 2: ', this.tagsCannedFilter.length);
|
|
@@ -599,10 +580,9 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
599
580
|
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
600
581
|
this.logger.log("[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
601
582
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 2 message: ', message);
|
|
602
|
-
|
|
603
|
-
this.sendMessage(text);
|
|
604
|
-
// this.messageString = '';
|
|
583
|
+
this.messageString = '';
|
|
605
584
|
|
|
585
|
+
this.sendMessage(text);
|
|
606
586
|
this.countClicks = 0
|
|
607
587
|
} else if (text.includes("/") && pos > 0 && this.countClicks > 1 && this.tagsCannedFilter.length > 0 && text.substr(-1) !== '/') {
|
|
608
588
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - tagsCannedFilter.length 3: ', this.tagsCannedFilter.length);
|
|
@@ -614,19 +594,17 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
614
594
|
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
615
595
|
this.logger.log("[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
616
596
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 2 message: ', message);
|
|
617
|
-
|
|
618
|
-
this.sendMessage(text);
|
|
619
|
-
// this.messageString = '';
|
|
597
|
+
this.messageString = '';
|
|
620
598
|
|
|
599
|
+
this.sendMessage(text);
|
|
621
600
|
this.countClicks = 0
|
|
622
601
|
} else if (text.includes("/") && this.tagsCannedFilter.length === 0) {
|
|
623
602
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - tagsCannedFilter.length 3: ', this.tagsCannedFilter.length);
|
|
624
603
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 3 message: ', message);
|
|
625
604
|
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 3 message: ", message);
|
|
626
|
-
|
|
627
|
-
this.sendMessage(text);
|
|
628
|
-
// this.messageString = '';
|
|
605
|
+
this.messageString = '';
|
|
629
606
|
|
|
607
|
+
this.sendMessage(text);
|
|
630
608
|
this.countClicks = 0
|
|
631
609
|
|
|
632
610
|
}
|