@chat21/chat21-ionic 3.4.30-rc3 → 3.4.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -122
- 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/directives/html-entities-encode.pipe.ts +20 -5
- 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,118 +8,22 @@
|
|
|
8
8
|
### **Copyrigth**:
|
|
9
9
|
*Tiledesk SRL*
|
|
10
10
|
|
|
11
|
-
# 3.4.
|
|
11
|
+
# 3.4.31 in PROD
|
|
12
|
+
- **changed**: enhance HTML entities encoding by normalizing line breaks and handling null/undefined inputs
|
|
13
|
+
- **changed**: API for upload a file/image into chat
|
|
14
|
+
|
|
15
|
+
# 3.4.30 in PROD
|
|
12
16
|
- **changed**: when the app is in background, play a sound whenever a new message arrives.
|
|
13
17
|
|
|
14
18
|
# 3.4.29 in PROD
|
|
15
19
|
- **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)`
|
|
16
20
|
|
|
17
|
-
# 3.4.29-rc2
|
|
18
|
-
- **changed**: minor updates on API to upload file/image into chat
|
|
19
|
-
|
|
20
|
-
# 3.4.29-rc1
|
|
21
|
-
- **changed**: API for upload a file/image into chat
|
|
22
|
-
|
|
23
|
-
|
|
24
21
|
# 3.4.28 in PROD
|
|
25
22
|
- **bug-fixed**: cannot do project subscription if last_project object is not a project_user obj
|
|
26
23
|
|
|
27
24
|
# 3.4.27 in PROD
|
|
28
25
|
- **bug-fixed**: cannot find route if userFullname contains /
|
|
29
26
|
|
|
30
|
-
# 3.4.29-rc1
|
|
31
|
-
- **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)`
|
|
32
|
-
|
|
33
|
-
# 3.4.28-rc1
|
|
34
|
-
- **bug-fixed**: cannot do project subscription if last_project object is not a project_user obj
|
|
35
|
-
|
|
36
|
-
# 3.4.27-rc26
|
|
37
|
-
- **bug-fixed**: wss push requests twice
|
|
38
|
-
|
|
39
|
-
# 3.4.27-rc25
|
|
40
|
-
- **bug-fixed**: projectUserService is not initialized
|
|
41
|
-
|
|
42
|
-
# 3.4.27-rc24
|
|
43
|
-
- **added**: implementation of multiple message in wss onmessage
|
|
44
|
-
|
|
45
|
-
# 3.4.27-rc23
|
|
46
|
-
- **added**: keepAlive worker for MQTT connection
|
|
47
|
-
|
|
48
|
-
# 3.4.27-rc22
|
|
49
|
-
- **added**: new WsWorker to manage iframe chrome throttling while tab is in background or hidden
|
|
50
|
-
|
|
51
|
-
# 3.4.27-rc21
|
|
52
|
-
- **changed**: new wss reconnect and timeout keepalive
|
|
53
|
-
- **bug-fixed**: cannot route if senderFullaname contains /
|
|
54
|
-
|
|
55
|
-
# 3.4.27-rc20
|
|
56
|
-
- **added**: onOpenTicketExternally event in triggerEvents service
|
|
57
|
-
|
|
58
|
-
# 3.4.27-rc19
|
|
59
|
-
- **added**: window.parent['openTicketOnHDA']
|
|
60
|
-
|
|
61
|
-
# 3.4.27-rc18
|
|
62
|
-
- **added**: triggerOnUpdateNewConversationBadge to update conversation badge count in parent component
|
|
63
|
-
|
|
64
|
-
# 3.4.27-rc17
|
|
65
|
-
- **bug-fixed**: setNotification not called when click on a conversation
|
|
66
|
-
|
|
67
|
-
# 3.4.27-rc16
|
|
68
|
-
- **bug-fixed**: setNotification not called when resolve a conversation
|
|
69
|
-
|
|
70
|
-
# 3.4.27-rc15
|
|
71
|
-
- **changed**: /images with /img in assets folder
|
|
72
|
-
|
|
73
|
-
# 3.4.27-rc14
|
|
74
|
-
- **added**: DISPLAY_EDIT_PROFILE brand variable
|
|
75
|
-
- **bug-fixed**: emojii is sent also if is not allowed
|
|
76
|
-
|
|
77
|
-
# 3.4.27-rc13
|
|
78
|
-
- **added**: ability to mantain logout parameter when redirect to dashboard urls from sidebar component
|
|
79
|
-
|
|
80
|
-
# 3.4.27-rc12
|
|
81
|
-
- **added**: ability to manage logOut option in sidebar-user-detail with tiledesk_logOut url query params
|
|
82
|
-
|
|
83
|
-
# 3.4.27-rc11
|
|
84
|
-
- **bug-fixed**: fixed infinite loading in contact list
|
|
85
|
-
|
|
86
|
-
# 3.4.27-rc10
|
|
87
|
-
- **added**: ability to manage header-conversation-list with roles
|
|
88
|
-
- **bug-fixed**: members in group list not loaded
|
|
89
|
-
|
|
90
|
-
# 3.4.27-rc9
|
|
91
|
-
- **bug-fixed**: Scrolling to the last message when opening a conversation
|
|
92
|
-
- **bug-fixed**: Loading in the conversation list disabled when removing the last conversation
|
|
93
|
-
|
|
94
|
-
# 3.4.27-rc8
|
|
95
|
-
- **added**: ability to open ticket to external service
|
|
96
|
-
- **added**: ticketSection env var
|
|
97
|
-
|
|
98
|
-
# 3.4.27-rc7
|
|
99
|
-
- **bug-fixed**: Scrolling to the last message when opening a conversation
|
|
100
|
-
- **bug-fixed**: Loading in the conversation list disabled when removing the last conversation
|
|
101
|
-
|
|
102
|
-
# 3.4.27-rc6
|
|
103
|
-
- **bug-fixed**: user for dashboard app is incorrect
|
|
104
|
-
|
|
105
|
-
# 3.4.27-rc5
|
|
106
|
-
- **added**: managed roles in sidebar e navbar
|
|
107
|
-
- **bug-fixed**: projectId and supportMode url is not saved in localstorage
|
|
108
|
-
|
|
109
|
-
# 3.4.27-rc4
|
|
110
|
-
- **bug-fixed**: extractUrls function is not able to detect url start with www or without https/http
|
|
111
|
-
- **bug-fixed**: if message is sent with keydown, error on domain check is not showed
|
|
112
|
-
|
|
113
|
-
# 3.4.27-rc3
|
|
114
|
-
- **bug-fixed**: cannot set user availability if supportMode is enabled and tiledesk_projectID url params is set
|
|
115
|
-
|
|
116
|
-
# 3.4.27-rc2
|
|
117
|
-
- **bug-fixed**: cannede responses role
|
|
118
|
-
|
|
119
|
-
# 3.4.27-rc1
|
|
120
|
-
- **added**: managed canned responses with roles
|
|
121
|
-
- **changed**: name in info mesage
|
|
122
|
-
|
|
123
27
|
# 3.4.26 in PROD
|
|
124
28
|
|
|
125
29
|
# 3.4.26-rc2
|
|
@@ -128,7 +32,6 @@
|
|
|
128
32
|
# 3.4.26-rc1
|
|
129
33
|
- **added**: tiledesk_projectID query param to manage user status
|
|
130
34
|
- **added**: token to managane ticket feature
|
|
131
|
-
- **added**: getOsCode login into utils.ts
|
|
132
35
|
|
|
133
36
|
# 3.4.25 in PROD
|
|
134
37
|
- **changed**: pipe marked to support malicious text input
|
|
@@ -151,24 +54,6 @@
|
|
|
151
54
|
# 3.4.22 in PROD
|
|
152
55
|
- **added**: managed allowed_upload_extentions from project settings
|
|
153
56
|
|
|
154
|
-
# 3.4.21-rc6
|
|
155
|
-
- **added**: managed allowed_upload_extentions from project settings
|
|
156
|
-
|
|
157
|
-
# 3.4.21-rc5
|
|
158
|
-
- **added**: setConversation as read when agent click on it
|
|
159
|
-
|
|
160
|
-
# 3.4.21-rc4
|
|
161
|
-
- **added**: ability to init and decrement new conversation count badge
|
|
162
|
-
|
|
163
|
-
# 3.4.21-rc3
|
|
164
|
-
- **changed**: badge notification for agentDesktop
|
|
165
|
-
|
|
166
|
-
# 3.4.21-rc2
|
|
167
|
-
- **added**: count in newConversation handler event
|
|
168
|
-
|
|
169
|
-
# 3.4.21-rc1
|
|
170
|
-
- **added**: implement badge notification for agentDesktop sw when new conversation is assigned to logged agent
|
|
171
|
-
|
|
172
57
|
# 3.4.21 in PROD
|
|
173
58
|
|
|
174
59
|
# 3.4.20 in PROD
|
|
@@ -182,8 +67,8 @@
|
|
|
182
67
|
- **bug-fixed**: minor fix on ion-texarea element with allowed url domain
|
|
183
68
|
|
|
184
69
|
# 3.4.19-rc1
|
|
185
|
-
-
|
|
186
|
-
-
|
|
70
|
+
- added: ability to check for if emoji is allowd to be sent in message textarea
|
|
71
|
+
- added: ability to check for if url domain is allowd to be sent in message textarea
|
|
187
72
|
|
|
188
73
|
# 3.4.18 in PROD
|
|
189
74
|
|
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',
|
|
@@ -144,7 +141,6 @@ export class AppComponent implements OnInit {
|
|
|
144
141
|
/**TILEDESK SERVICES */
|
|
145
142
|
private tiledeskService: TiledeskService,
|
|
146
143
|
private projectService: ProjectService,
|
|
147
|
-
private projectUsersService: ProjectUsersService,
|
|
148
144
|
private contactsService: ContactsService
|
|
149
145
|
) {
|
|
150
146
|
|
|
@@ -171,7 +167,6 @@ export class AppComponent implements OnInit {
|
|
|
171
167
|
}, { capture: true });
|
|
172
168
|
}
|
|
173
169
|
|
|
174
|
-
|
|
175
170
|
listenChatAlreadyOpenWithoutParamsInMobileMode() {
|
|
176
171
|
this.events.subscribe('noparams:mobile', (isAlreadyOpenInMobileMode) => {
|
|
177
172
|
// console.log('[APP-COMP] Chat is Already Open In Mobile Mode ', isAlreadyOpenInMobileMode)
|
|
@@ -300,10 +295,6 @@ export class AppComponent implements OnInit {
|
|
|
300
295
|
this.zone = new NgZone({}); // a cosa serve?
|
|
301
296
|
|
|
302
297
|
this.SUPPORT_MODE = this.g.supportMode
|
|
303
|
-
this.logger.info('[APP-COMP] this.SUPPORT_MODE', this.SUPPORT_MODE)
|
|
304
|
-
|
|
305
|
-
BRAND_BASE_INFO['LOGOUT_ENABLED'] = this.g.logOut
|
|
306
|
-
this.logger.info('[APP-COMP] this.logOut', BRAND_BASE_INFO['LOGOUT_ENABLED'])
|
|
307
298
|
}
|
|
308
299
|
|
|
309
300
|
});
|
|
@@ -340,7 +331,7 @@ export class AppComponent implements OnInit {
|
|
|
340
331
|
|
|
341
332
|
listenToPostMsgs() {
|
|
342
333
|
window.addEventListener("message", (event) => {
|
|
343
|
-
|
|
334
|
+
this.logger.log("[APP-COMP] message event ", event);
|
|
344
335
|
|
|
345
336
|
if (event && event.data && event.data.action && event.data.parameter) {
|
|
346
337
|
if (event.data.action === 'openJoinConversationModal') {
|
|
@@ -542,10 +533,10 @@ export class AppComponent implements OnInit {
|
|
|
542
533
|
this.statusBar.styleLightContent();
|
|
543
534
|
this.navService.init(this.sidebarNav, this.detailNav);
|
|
544
535
|
this.tiledeskAuthService.initialize(this.appConfigProvider.getConfig().apiUrl);
|
|
545
|
-
|
|
536
|
+
this.messagingAuthService.initialize();
|
|
537
|
+
|
|
546
538
|
// this.currentUserService.initialize();
|
|
547
539
|
this.chatManager.initialize();
|
|
548
|
-
this.messagingAuthService.initialize();
|
|
549
540
|
this.presenceService.initialize(this.tenant);
|
|
550
541
|
this.typingService.initialize(this.tenant);
|
|
551
542
|
|
|
@@ -871,8 +862,7 @@ export class AppComponent implements OnInit {
|
|
|
871
862
|
// console.log('[APP-COMP] PLATFORM', PLATFORM_MOBILE, 'route.snapshot', this.route.snapshot);
|
|
872
863
|
if (!IDConv) {
|
|
873
864
|
this.logger.log('[APP-COMP] navigateByUrl -- conversations-list');
|
|
874
|
-
|
|
875
|
-
this.router.navigateByUrl('conversations-list' + queryString);
|
|
865
|
+
this.router.navigateByUrl('conversations-list')
|
|
876
866
|
}
|
|
877
867
|
// this.router.navigateByUrl(pageUrl);
|
|
878
868
|
// this.navService.setRoot(ConversationListPage, {});
|
|
@@ -1123,19 +1113,13 @@ export class AppComponent implements OnInit {
|
|
|
1123
1113
|
if (conversation && conversation.is_new === true && this.isInitialized) {
|
|
1124
1114
|
this.manageTabNotification('conv_added', conversation.sound)
|
|
1125
1115
|
this.manageEventNewConversation(conversation)
|
|
1126
|
-
//UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1127
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1128
1116
|
}
|
|
1129
1117
|
if(conversation) this.updateConversationsOnStorage()
|
|
1130
1118
|
});
|
|
1131
1119
|
|
|
1132
1120
|
this.conversationsHandlerService.conversationChanged.subscribe((conversation: ConversationModel) => {
|
|
1133
1121
|
// console.log('[APP-COMP] ***** subscribeConversationChanged conversation: ', conversation);
|
|
1134
|
-
if(conversation)
|
|
1135
|
-
this.updateConversationsOnStorage();
|
|
1136
|
-
//UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1137
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1138
|
-
}
|
|
1122
|
+
if(conversation) this.updateConversationsOnStorage();
|
|
1139
1123
|
});
|
|
1140
1124
|
|
|
1141
1125
|
this.conversationsHandlerService.conversationChangedDetailed.subscribe((changes: {value: ConversationModel, previousValue: ConversationModel}) => {
|
|
@@ -1163,8 +1147,6 @@ export class AppComponent implements OnInit {
|
|
|
1163
1147
|
if(conversation) {
|
|
1164
1148
|
this.updateConversationsOnStorage();
|
|
1165
1149
|
this.segmentResolved(conversation);
|
|
1166
|
-
//UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1167
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1168
1150
|
this.router.navigateByUrl('conversation-detail/'); //redirect to basePage
|
|
1169
1151
|
}
|
|
1170
1152
|
});
|
|
@@ -1198,7 +1180,6 @@ export class AppComponent implements OnInit {
|
|
|
1198
1180
|
this.chatManager.setCurrentUser(currentUser);
|
|
1199
1181
|
|
|
1200
1182
|
this.tiledeskService.initialize(serverBaseURL)
|
|
1201
|
-
this.projectUsersService.initialize(serverBaseURL)
|
|
1202
1183
|
this.projectService.initialize(serverBaseURL)
|
|
1203
1184
|
this.contactsService.initialize(serverBaseURL)
|
|
1204
1185
|
|
|
@@ -1206,14 +1187,11 @@ export class AppComponent implements OnInit {
|
|
|
1206
1187
|
this.events.publish('go:online', true);
|
|
1207
1188
|
// this.chatManager.startApp();
|
|
1208
1189
|
|
|
1209
|
-
|
|
1210
|
-
//INIT WEBSOCKET
|
|
1211
|
-
this.connetWebsocket(tiledeskToken)
|
|
1212
|
-
|
|
1213
1190
|
// ----------------------------------------------
|
|
1214
1191
|
// PUSH NOTIFICATIONS
|
|
1215
1192
|
// ----------------------------------------------
|
|
1216
1193
|
const pushEngine = this.appConfigProvider.getConfig().pushEngine
|
|
1194
|
+
|
|
1217
1195
|
if (currentUser) {
|
|
1218
1196
|
if (pushEngine && pushEngine !== 'none') {
|
|
1219
1197
|
this.notificationsService.getNotificationPermissionAndSaveToken(currentUser.uid);
|
|
@@ -1235,24 +1213,6 @@ export class AppComponent implements OnInit {
|
|
|
1235
1213
|
} catch (err) {
|
|
1236
1214
|
this.logger.error('[APP-COMP] -> error:', err);
|
|
1237
1215
|
}
|
|
1238
|
-
|
|
1239
|
-
// ----------------------------------------------
|
|
1240
|
-
// LAST PROJECT FROM URL
|
|
1241
|
-
// ----------------------------------------------
|
|
1242
|
-
if(this.g.projectID){
|
|
1243
|
-
this.projectService.getProjects().subscribe({ next: (projects: Project[]) => {
|
|
1244
|
-
const project = projects.find(prjct => prjct.id_project._id === this.g.projectID)
|
|
1245
|
-
if(project){
|
|
1246
|
-
this.logger.log('[APP-COMP] - GET PROJECT - project found with this.projectID', project);
|
|
1247
|
-
localStorage.setItem('last_project', JSON.stringify(project))
|
|
1248
|
-
this.events.publish('storage:last_project', project)
|
|
1249
|
-
}
|
|
1250
|
-
}, error: (error) => {
|
|
1251
|
-
this.logger.log('[APP-COMP] - GET PROJECT - project NOT found with this.projectID', this.g.projectID, error);
|
|
1252
|
-
}, complete: () => {
|
|
1253
|
-
|
|
1254
|
-
}});
|
|
1255
|
-
}
|
|
1256
1216
|
}
|
|
1257
1217
|
|
|
1258
1218
|
|
|
@@ -1293,21 +1253,9 @@ export class AppComponent implements OnInit {
|
|
|
1293
1253
|
}
|
|
1294
1254
|
|
|
1295
1255
|
goToDashboardLogin(){
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
}
|
|
1300
|
-
|
|
1301
|
-
connetWebsocket(tiledeskToken) {
|
|
1302
|
-
|
|
1303
|
-
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] tiledeskToken ', tiledeskToken)
|
|
1304
|
-
const appconfig = this.appConfigProvider.getConfig();
|
|
1305
|
-
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', appconfig.wsUrl)
|
|
1306
|
-
const WS_URL = appconfig.wsUrl + '?token=' + tiledeskToken
|
|
1307
|
-
this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', WS_URL)
|
|
1308
|
-
this.webSocketJs.init(
|
|
1309
|
-
WS_URL
|
|
1310
|
-
);
|
|
1256
|
+
let DASHBOARD_URL = this.appConfigProvider.getConfig().dashboardUrl + '#/login'
|
|
1257
|
+
const myWindow = window.open(DASHBOARD_URL, '_self');
|
|
1258
|
+
myWindow.focus();
|
|
1311
1259
|
}
|
|
1312
1260
|
|
|
1313
1261
|
|
|
@@ -1406,8 +1354,7 @@ export class AppComponent implements OnInit {
|
|
|
1406
1354
|
|
|
1407
1355
|
subscribeConversationSelected= (conversation: ConversationModel) => {
|
|
1408
1356
|
if(conversation && conversation.is_new){
|
|
1409
|
-
this.audio_NewConv.pause()
|
|
1410
|
-
this.conversationsHandlerService.setConversationRead(conversation.uid)
|
|
1357
|
+
this.audio_NewConv.pause()
|
|
1411
1358
|
}
|
|
1412
1359
|
}
|
|
1413
1360
|
|
|
@@ -1483,9 +1430,6 @@ export class AppComponent implements OnInit {
|
|
|
1483
1430
|
this.logger.debug('[APP-COMP]-CONVS - INIT CONV CONVS 2', conversations)
|
|
1484
1431
|
this.events.publish('appcompSubscribeToConvs:loadingIsActive', false);
|
|
1485
1432
|
}
|
|
1486
|
-
|
|
1487
|
-
//INIT NOTIFICATION FOR NEW CONVERSATION COUNT
|
|
1488
|
-
this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
|
|
1489
1433
|
});
|
|
1490
1434
|
|
|
1491
1435
|
}
|
|
@@ -1768,11 +1712,6 @@ export class AppComponent implements OnInit {
|
|
|
1768
1712
|
this.triggerEvents.triggerOnInit(detailOBJ)
|
|
1769
1713
|
}
|
|
1770
1714
|
|
|
1771
|
-
private triggerOnUpdateNewConversationBadge(count: number){
|
|
1772
|
-
const detailOBJ = { event: 'onUpdateNewConversationBadge', count: count.toString() }
|
|
1773
|
-
this.triggerEvents.triggerOnUpdateNewConversationBadge(detailOBJ)
|
|
1774
|
-
}
|
|
1775
|
-
|
|
1776
1715
|
|
|
1777
1716
|
// @HostListener('mouseenter', ['$event'])
|
|
1778
1717
|
// 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;
|