@chat21/chat21-ionic 3.0.61-rc8 → 3.0.61
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 +71 -0
- package/README.md +6 -0
- package/angular.json +2 -0
- package/config.xml +0 -1
- package/deploy_pre.sh +1 -1
- package/deploy_prod.sh +1 -1
- package/env.sample +1 -1
- package/package.json +4 -4
- package/src/app/app-routing.module.ts +15 -0
- package/src/app/app.component.ts +12 -9
- package/src/app/app.module.ts +11 -3
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -25
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +160 -50
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +108 -18
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +21 -36
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +19 -7
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +35 -40
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -1
- package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.ts +13 -10
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +3 -2
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +2 -0
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +142 -71
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +57 -20
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +32 -9
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +98 -24
- package/src/app/components/ddp-header/ddp-header.component.html +9 -2
- package/src/app/components/ddp-header/ddp-header.component.ts +93 -18
- package/src/app/components/project-item/project-item.component.html +1 -1
- package/src/app/components/project-item/project-item.component.scss +1 -1
- package/src/app/components/project-item/project-item.component.ts +3 -3
- package/src/app/components/sidebar/sidebar.component.html +65 -52
- package/src/app/components/sidebar/sidebar.component.scss +23 -0
- package/src/app/components/sidebar/sidebar.component.ts +74 -26
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +20 -9
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +20 -3
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +24 -8
- package/src/app/pages/conversation-detail/conversation-detail.module.ts +5 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.html +19 -10
- package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +229 -389
- package/src/app/pages/conversations-list/conversations-list.page.ts +646 -454
- package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
- package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
- package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
- package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
- package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
- package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
- package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
- package/src/app/pages/create-requester/create-requester.module.ts +28 -0
- package/src/app/pages/create-requester/create-requester.page.html +67 -0
- package/src/app/pages/create-requester/create-requester.page.scss +30 -0
- package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
- package/src/app/pages/create-requester/create-requester.page.ts +138 -0
- package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
- package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
- package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
- package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
- package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
- package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
- package/src/app/pages/loader-preview/loader-preview.page.ts +2 -11
- package/src/app/pages/profile-info/profile-info.page.html +2 -2
- package/src/app/pages/profile-info/profile-info.page.scss +12 -1
- package/src/app/services/tiledesk/tiledesk.service.ts +190 -0
- package/src/app/shared/shared.module.ts +1 -1
- package/src/assets/i18n/de.json +37 -1
- package/src/assets/i18n/en.json +37 -1
- package/src/assets/i18n/es.json +38 -2
- package/src/assets/i18n/fr.json +38 -2
- package/src/assets/i18n/it.json +38 -2
- package/src/assets/i18n/pt.json +38 -2
- package/src/assets/i18n/ru.json +38 -2
- package/src/assets/i18n/sr.json +38 -2
- package/src/assets/i18n/tr.json +37 -1
- package/src/assets/images/default-avatar-x-select.png +0 -0
- package/src/assets/images/priority_icons/high.svg +3 -0
- package/src/assets/images/priority_icons/high_v2.svg +14 -0
- package/src/assets/images/priority_icons/low.svg +10 -0
- package/src/assets/images/priority_icons/low_v2.svg +14 -0
- package/src/assets/images/priority_icons/medium.svg +16 -0
- package/src/assets/images/priority_icons/medium_v2.svg +11 -0
- package/src/assets/images/priority_icons/urgent.svg +4 -0
- package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
- package/src/chat-config-mqtt.json +25 -16
- package/src/chat-config-template.json +5 -4
- package/src/chat-config.json +1 -0
- package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +8 -3
- package/src/chat21-core/utils/constants.ts +2 -0
- package/src/chat21-core/utils/utils-message.ts +19 -0
- package/src/global.scss +33 -9
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { Component, OnInit } from '@angular/core'
|
|
2
|
+
import { ModalController } from '@ionic/angular'
|
|
3
|
+
import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk-auth.service'
|
|
4
|
+
import { TiledeskService } from '../../services/tiledesk/tiledesk.service'
|
|
5
|
+
import { zip } from 'rxjs'
|
|
6
|
+
import { AppConfigProvider } from 'src/app/services/app-config'
|
|
7
|
+
import { CreateRequesterPage } from 'src/app/pages/create-requester/create-requester.page'
|
|
8
|
+
import * as uuid from 'uuid';
|
|
9
|
+
import { EventsService } from 'src/app/services/events-service'
|
|
10
|
+
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
11
|
+
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
12
|
+
|
|
13
|
+
@Component({
|
|
14
|
+
selector: 'app-create-ticket',
|
|
15
|
+
templateUrl: './create-ticket.page.html',
|
|
16
|
+
styleUrls: ['./create-ticket.page.scss'],
|
|
17
|
+
})
|
|
18
|
+
export class CreateTicketPage implements OnInit {
|
|
19
|
+
selectedPriority: string;
|
|
20
|
+
assignee_id: string;
|
|
21
|
+
assignee_participants_id: string;
|
|
22
|
+
assignee_dept_id: string;
|
|
23
|
+
loadingAssignee: boolean = true;
|
|
24
|
+
loadingRequesters: boolean = true;
|
|
25
|
+
prjctID: string;
|
|
26
|
+
tiledeskToken: string;
|
|
27
|
+
selectedRequester: any;
|
|
28
|
+
storageBucket: string;
|
|
29
|
+
baseUrl: string;
|
|
30
|
+
UPLOAD_ENGINE_IS_FIREBASE: boolean;
|
|
31
|
+
id_for_view_requeter_dtls: string;
|
|
32
|
+
requester_type: string;
|
|
33
|
+
projectUserAndLeadsArray = [];
|
|
34
|
+
projectUserBotsAndDeptsArray = [];
|
|
35
|
+
ticket_subject: string;
|
|
36
|
+
ticket_message: string;
|
|
37
|
+
departments: any;
|
|
38
|
+
internal_request_id: string;
|
|
39
|
+
showSpinnerCreateTicket: boolean = false;
|
|
40
|
+
ticketCreationCompleted: boolean = false;
|
|
41
|
+
dashboard_base_url: string
|
|
42
|
+
priority = [
|
|
43
|
+
{
|
|
44
|
+
id: 1,
|
|
45
|
+
name: 'urgent',
|
|
46
|
+
avatar: 'assets/images/priority_icons/urgent_v2.svg'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 2,
|
|
50
|
+
name: 'high',
|
|
51
|
+
avatar: 'assets/images/priority_icons/high_v2.svg '
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: 3,
|
|
55
|
+
name: 'medium',
|
|
56
|
+
avatar: 'assets/images/priority_icons/medium_v2.svg'
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 4,
|
|
60
|
+
name: 'low',
|
|
61
|
+
avatar: 'assets/images/priority_icons/low_v2.svg'
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
logger: LoggerService = LoggerInstance.getInstance();
|
|
66
|
+
constructor(
|
|
67
|
+
public modalController: ModalController,
|
|
68
|
+
public tiledeskService: TiledeskService,
|
|
69
|
+
public tiledeskAuthService: TiledeskAuthService,
|
|
70
|
+
public appConfigProvider: AppConfigProvider,
|
|
71
|
+
public events: EventsService
|
|
72
|
+
) {}
|
|
73
|
+
|
|
74
|
+
ngOnInit() {
|
|
75
|
+
this.getUploadEngine()
|
|
76
|
+
this.dashboard_base_url = this.appConfigProvider.getConfig().dashboardUrl
|
|
77
|
+
this.selectedPriority = this.priority[2].name
|
|
78
|
+
this.logger.log('[CREATE-TICKET]', this.selectedPriority)
|
|
79
|
+
|
|
80
|
+
const stored_project = localStorage.getItem('last_project')
|
|
81
|
+
const storedPrjctObjct = JSON.parse(stored_project)
|
|
82
|
+
this.logger.log('[CREATE-TICKET] storedPrjctObjct ', storedPrjctObjct)
|
|
83
|
+
if (storedPrjctObjct) {
|
|
84
|
+
this.prjctID = storedPrjctObjct.id_project.id
|
|
85
|
+
this.logger.log('[CREATE-TICKET] this.prjctID ', this.prjctID)
|
|
86
|
+
}
|
|
87
|
+
this.tiledeskToken = this.tiledeskAuthService.getTiledeskToken()
|
|
88
|
+
this.logger.log('[CREATE-TICKET] tiledeskToken ', this.tiledeskToken)
|
|
89
|
+
|
|
90
|
+
this.getProjectUsersAndContacts(this.prjctID, this.tiledeskToken)
|
|
91
|
+
this.getProjectUserBotsAndDepts(this.prjctID, this.tiledeskToken)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
getUploadEngine() {
|
|
95
|
+
if (this.appConfigProvider.getConfig().uploadEngine === 'firebase') {
|
|
96
|
+
this.UPLOAD_ENGINE_IS_FIREBASE = true
|
|
97
|
+
const firebase_conf = this.appConfigProvider.getConfig().firebaseConfig
|
|
98
|
+
this.storageBucket = firebase_conf['storageBucket']
|
|
99
|
+
this.logger.log('[CREATE-TICKET] - IMAGE STORAGE', this.storageBucket, '- usecase firebase: ', this.UPLOAD_ENGINE_IS_FIREBASE)
|
|
100
|
+
} else {
|
|
101
|
+
this.UPLOAD_ENGINE_IS_FIREBASE = false
|
|
102
|
+
this.baseUrl = this.appConfigProvider.getConfig().apiUrl
|
|
103
|
+
this.logger.log('[WS-REQUESTS-LIST] - IMAGE STORAGE ',this.baseUrl,'- usecase firebase: ', this.UPLOAD_ENGINE_IS_FIREBASE)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// -------------------------------------------------------------------------------------------
|
|
108
|
+
// Create the array of the project-users and contacts displayed in the combo box "Requester"
|
|
109
|
+
// -------------------------------------------------------------------------------------------
|
|
110
|
+
getProjectUsersAndContacts(projctid: string, tiledesktoken: string) {
|
|
111
|
+
const projectUsers = this.tiledeskService.getProjectUsersByProjectId(
|
|
112
|
+
projctid,
|
|
113
|
+
tiledesktoken,
|
|
114
|
+
)
|
|
115
|
+
const leads = this.tiledeskService.getAllLeadsActiveWithLimit(
|
|
116
|
+
projctid,
|
|
117
|
+
tiledesktoken,
|
|
118
|
+
10000,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
zip(projectUsers, leads).subscribe(
|
|
122
|
+
([_prjctUsers, _leads]) => {
|
|
123
|
+
this.logger.log('[CREATE-TICKET] GET PROJECT-USER RES ', _prjctUsers)
|
|
124
|
+
this.logger.log('[CREATE-TICKET] GET ALL ACTIVE LEADS (LIMIT 10000) RES ', _leads.leads)
|
|
125
|
+
|
|
126
|
+
if (_prjctUsers) {
|
|
127
|
+
_prjctUsers.forEach((p_user) => {
|
|
128
|
+
this.projectUserAndLeadsArray.push({
|
|
129
|
+
id: p_user.id_user._id,
|
|
130
|
+
name: p_user.id_user.firstname + ' ' + p_user.id_user.lastname,
|
|
131
|
+
role: p_user.role,
|
|
132
|
+
email: p_user.id_user.email,
|
|
133
|
+
requestertype: 'agent',
|
|
134
|
+
requester_id: p_user._id,
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (_leads && _leads.leads) {
|
|
140
|
+
_leads.leads.forEach((lead) => {
|
|
141
|
+
let e_mail = 'n/a'
|
|
142
|
+
if (lead.email) {
|
|
143
|
+
e_mail = lead.email
|
|
144
|
+
}
|
|
145
|
+
this.projectUserAndLeadsArray.push({
|
|
146
|
+
id: lead.lead_id,
|
|
147
|
+
name: lead.fullname,
|
|
148
|
+
role: 'lead',
|
|
149
|
+
email: e_mail,
|
|
150
|
+
requestertype: 'lead',
|
|
151
|
+
requester_id: lead._id,
|
|
152
|
+
})
|
|
153
|
+
// this.projectUserAndLeadsArray = this.projectUserAndLeadsArray.slice(0);
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-LEADS - PROJECT-USER-&-LEAD-ARRAY: ', this.projectUserAndLeadsArray)
|
|
158
|
+
|
|
159
|
+
// component will not detect a change. Instead you need to do: this.items = [...this.items, {id: 1, name: 'New item'}]; // https://www.npmjs.com/package/@ng-select/ng-select/v/3.7.3
|
|
160
|
+
// Resolves the "NO ITEMS FOUND" bug displayed in the template select
|
|
161
|
+
// this workaround is used for "change detection" because the spread operator is available with "es6" but the target in the tsconfig.json file is "es5"
|
|
162
|
+
this.projectUserAndLeadsArray = this.projectUserAndLeadsArray.slice(0) // the array returned by slice(0) is identical to the input, which basically means it's a cheap way to duplicate an array.
|
|
163
|
+
},
|
|
164
|
+
(error) => {
|
|
165
|
+
this.loadingRequesters = false
|
|
166
|
+
this.logger.error('[CREATE-TICKET] - GET P-USERS-&-LEADS - ERROR: ', error)
|
|
167
|
+
},
|
|
168
|
+
() => {
|
|
169
|
+
this.loadingRequesters = false
|
|
170
|
+
this.logger.log('[CREATE-TICKET] - GET P-USERS-&-LEADS * COMPLETE *')
|
|
171
|
+
},
|
|
172
|
+
)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
customSearchFn(term: string, item: any) {
|
|
176
|
+
// console.log( '[CREATE-TICKET] - GET P-USERS-&-LEADS - customSearchFn term : ', term)
|
|
177
|
+
|
|
178
|
+
term = term.toLocaleLowerCase()
|
|
179
|
+
// console.log('[CREATE-TICKET] - GET P-USERS-&-LEADS - customSearchFn item : ',item)
|
|
180
|
+
// console.log('[CREATE-TICKET] - GET P-USERS-&-LEADS - customSearchFn item.name.toLocaleLowerCase().indexOf(term) : ',item.name.toLocaleLowerCase().indexOf(term) > -1)
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
item.name.toLocaleLowerCase().indexOf(term) > -1 || item.email.toLocaleLowerCase().indexOf(term) > -1
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// used nella select requester OF CREATE TICKET
|
|
188
|
+
selectRequester($event) {
|
|
189
|
+
this.logger.log('[CREATE-TICKET] - SELECT REQUESTER event', $event)
|
|
190
|
+
this.logger.log('[CREATE-TICKET] - SELECT REQUESTER ID', this.selectedRequester)
|
|
191
|
+
if($event && $event.requester_id ) {
|
|
192
|
+
this.id_for_view_requeter_dtls = $event.requester_id
|
|
193
|
+
this.logger.log('[CREATE-TICKET] - SELECT REQUESTER $event requester_id ', $event.requester_id)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if($event && $event.requestertype ) {
|
|
197
|
+
this.requester_type = $event.requestertype
|
|
198
|
+
this.logger.log('[CREATE-TICKET] - SELECT REQUESTER $event requestertype ', $event.requestertype)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
// const hasFound = this.projectUserAndLeadsArray.filter((obj: any) => {
|
|
206
|
+
// return obj.id === this.selectedRequester
|
|
207
|
+
// })
|
|
208
|
+
|
|
209
|
+
// console.log('[CREATE-TICKET] - hasFound REQUESTER ', hasFound)
|
|
210
|
+
|
|
211
|
+
// if (hasFound.length > 0)
|
|
212
|
+
// (this.id_for_view_requeter_dtls = hasFound[0]['requester_id']),
|
|
213
|
+
// console.log(
|
|
214
|
+
// '[CREATE-TICKET] - hasFound REQUESTER id_for_view_requeter_dtls',
|
|
215
|
+
// this.id_for_view_requeter_dtls,
|
|
216
|
+
// )
|
|
217
|
+
|
|
218
|
+
// if (hasFound[0]['requestertype'] === 'agent') {
|
|
219
|
+
// this.requester_type = 'agent'
|
|
220
|
+
// console.log(
|
|
221
|
+
// '[CREATE-TICKET]- hasFound REQUESTER requester_type',
|
|
222
|
+
// this.requester_type,
|
|
223
|
+
// )
|
|
224
|
+
// } else {
|
|
225
|
+
// this.requester_type = 'lead'
|
|
226
|
+
// console.log(
|
|
227
|
+
// '[CREATE-TICKET] - hasFound REQUESTER requester_type',
|
|
228
|
+
// this.requester_type,
|
|
229
|
+
// )
|
|
230
|
+
// }
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
openRequesterDetails() {
|
|
234
|
+
if (this.selectedRequester) {
|
|
235
|
+
if (this.requester_type === "agent") {
|
|
236
|
+
|
|
237
|
+
this.logger.log('[CREATE-TICKET] - openRequesterDetails ', this.requester_type, ' details')
|
|
238
|
+
const url = this.dashboard_base_url + '#/project/' + this.prjctID + '/user/edit/' + this.id_for_view_requeter_dtls
|
|
239
|
+
this.logger.log('[CREATE-TICKET] - openRequesterDetails URL', url)
|
|
240
|
+
window.open(url, '_blank');
|
|
241
|
+
|
|
242
|
+
} else if (this.requester_type === "lead") {
|
|
243
|
+
|
|
244
|
+
this.logger.log('[CREATE-TICKET] - openRequesterDetails ', this.requester_type, ' details')
|
|
245
|
+
const url = this.dashboard_base_url + '#/project/' + this.prjctID + '/contact/' + this.id_for_view_requeter_dtls
|
|
246
|
+
this.logger.log('[CREATE-TICKET] - openRequesterDetails URL', url)
|
|
247
|
+
window.open(url, '_blank');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// -------------------------------------------------------------------------------------------------------------------
|
|
253
|
+
// Create the array of the project-users, the bots and of the departments displayed in the combo box "Select Assignee"
|
|
254
|
+
// -------------------------------------------------------------------------------------------------------------------
|
|
255
|
+
getProjectUserBotsAndDepts(projctid: string, tiledesktoken: string) {
|
|
256
|
+
// this.loadingAssignee = true;
|
|
257
|
+
const projectUsers = this.tiledeskService.getProjectUsersByProjectId( projctid, tiledesktoken)
|
|
258
|
+
const bots = this.tiledeskService.getAllBotByProjectId(projctid, tiledesktoken)
|
|
259
|
+
const depts = this.tiledeskService.getDeptsByProjectId(projctid, tiledesktoken)
|
|
260
|
+
|
|
261
|
+
zip(projectUsers, bots, depts).subscribe(
|
|
262
|
+
([_prjctUsers, _bots, _depts]) => {
|
|
263
|
+
this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - PROJECT USERS : ', _prjctUsers )
|
|
264
|
+
this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - BOTS : ', _bots)
|
|
265
|
+
this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - DEPTS: ',_depts)
|
|
266
|
+
this.departments = _depts
|
|
267
|
+
this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - this.departments: ',this.departments)
|
|
268
|
+
// projectUserAndLeadsArray
|
|
269
|
+
|
|
270
|
+
if (_prjctUsers) {
|
|
271
|
+
_prjctUsers.forEach((p_user) => {
|
|
272
|
+
this.projectUserBotsAndDeptsArray.push({ id: p_user.id_user._id, name: p_user.id_user.firstname + ' ' + p_user.id_user.lastname + ' (' + p_user.role + ')' })
|
|
273
|
+
})
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (_bots) {
|
|
277
|
+
_bots.forEach((bot) => {
|
|
278
|
+
if (bot['trashed'] === false && bot['type'] !== 'identity') {
|
|
279
|
+
this.projectUserBotsAndDeptsArray.push({
|
|
280
|
+
id: 'bot_' + bot._id,
|
|
281
|
+
name: bot.name + ' (bot)',
|
|
282
|
+
})
|
|
283
|
+
}
|
|
284
|
+
})
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (_depts) {
|
|
288
|
+
_depts.forEach((dept) => {
|
|
289
|
+
this.projectUserBotsAndDeptsArray.push({
|
|
290
|
+
id: dept._id,
|
|
291
|
+
name: dept.name + ' (dept)',
|
|
292
|
+
})
|
|
293
|
+
})
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
this.logger.log('[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS ARRAY: ',this.projectUserBotsAndDeptsArray )
|
|
297
|
+
|
|
298
|
+
this.projectUserBotsAndDeptsArray = this.projectUserBotsAndDeptsArray.slice(0)
|
|
299
|
+
},
|
|
300
|
+
(error) => {
|
|
301
|
+
this.loadingAssignee = false
|
|
302
|
+
this.logger.error('[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - ERROR: ', error)
|
|
303
|
+
},
|
|
304
|
+
() => {
|
|
305
|
+
this.loadingAssignee = false
|
|
306
|
+
this.logger.log('[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS * COMPLETE *')
|
|
307
|
+
},
|
|
308
|
+
)
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
selectedAssignee() {
|
|
312
|
+
this.logger.log('[CREATE-TICKET] - SELECT ASSIGNEE: ', this.assignee_id);
|
|
313
|
+
this.logger.log('[CREATE-TICKET] - DEPTS: ', this.departments);
|
|
314
|
+
|
|
315
|
+
const hasFound = this.departments.filter((obj: any) => {
|
|
316
|
+
return obj.id === this.assignee_id;
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
this.logger.log("[CREATE-TICKET] - SELECT ASSIGNEE HAS FOUND IN DEPTS: ", hasFound);
|
|
320
|
+
|
|
321
|
+
if (hasFound.length === 0) {
|
|
322
|
+
|
|
323
|
+
this.assignee_dept_id = undefined
|
|
324
|
+
this.assignee_participants_id = this.assignee_id
|
|
325
|
+
} else {
|
|
326
|
+
|
|
327
|
+
this.assignee_dept_id = this.assignee_id
|
|
328
|
+
this.assignee_participants_id = undefined
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
onChangeSelectedPriority(selectedPriority) {
|
|
333
|
+
this.logger.log('[CREATE-TICKET] onChangeSelectedPriority selectedPriority ', selectedPriority)
|
|
334
|
+
this.selectedPriority = selectedPriority;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
createTicket() {
|
|
338
|
+
// if (this.ticketCreationCompleted === false) {
|
|
339
|
+
// this.hasClickedCreateNewInternalRequest = true
|
|
340
|
+
this.showSpinnerCreateTicket = true
|
|
341
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - ticket_message ', this.ticket_message);
|
|
342
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - assignee_dept_id ', this.assignee_dept_id);
|
|
343
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - assignee_participants_id ', this.assignee_participants_id);
|
|
344
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - ticket_subject', this.ticket_subject);
|
|
345
|
+
|
|
346
|
+
const uiid = uuid.v4();
|
|
347
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - uiid', uiid);
|
|
348
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - uiid typeof', typeof uiid);
|
|
349
|
+
const uiid_no_dashes = uiid.replace(/-/g, "");;
|
|
350
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - uiid_no_dash', uiid_no_dashes);
|
|
351
|
+
// Note: the request id must be in the form "support-group-" + "-" + "project_id" + "uid" <- uid without dash
|
|
352
|
+
// this.logger.log('% WsRequestsList createTicket - UUID', uiid);
|
|
353
|
+
this.internal_request_id = 'support-group-' + this.prjctID + '-' + uiid_no_dashes
|
|
354
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - internal_request_id', this.internal_request_id);
|
|
355
|
+
// (request_id:string, subject: string, message:string, departmentid: string)
|
|
356
|
+
this.tiledeskService.createInternalRequest(this.selectedRequester,
|
|
357
|
+
this.internal_request_id,
|
|
358
|
+
this.ticket_subject,
|
|
359
|
+
this.ticket_message,
|
|
360
|
+
this.assignee_dept_id,
|
|
361
|
+
this.assignee_participants_id,
|
|
362
|
+
this.selectedPriority,
|
|
363
|
+
this.prjctID,
|
|
364
|
+
this.tiledeskToken
|
|
365
|
+
).subscribe((newticket: any) => {
|
|
366
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest - RES ', newticket);
|
|
367
|
+
|
|
368
|
+
}, error => {
|
|
369
|
+
this.showSpinnerCreateTicket = false
|
|
370
|
+
this.logger.error('[WS-REQUESTS-LIST] create internalRequest - ERROR: ', error);
|
|
371
|
+
}, () => {
|
|
372
|
+
this.logger.log('[WS-REQUESTS-LIST] create internalRequest * COMPLETE *')
|
|
373
|
+
this.showSpinnerCreateTicket = false;
|
|
374
|
+
this.ticketCreationCompleted = true
|
|
375
|
+
// this.closeModalCreateTicketModal()
|
|
376
|
+
|
|
377
|
+
// this.events.publish('closeModalCreateTicket', true)
|
|
378
|
+
});
|
|
379
|
+
// }
|
|
380
|
+
// else {
|
|
381
|
+
// this.closeModalCreateTicketModal()
|
|
382
|
+
// }
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
async closeModalCreateTicketModal() {
|
|
386
|
+
this.logger.log('[CREATE-TICKET] modalController', this.modalController)
|
|
387
|
+
this.logger.log('[CREATE-TICKET] .getTop()', this.modalController.getTop())
|
|
388
|
+
await this.modalController.getTop()
|
|
389
|
+
this.modalController.dismiss({ confirmed: true })
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
async presentModalAddNewRequester(): Promise<any> {
|
|
393
|
+
// this.closeModalCreateTicketModal()
|
|
394
|
+
const attributes = {
|
|
395
|
+
projectUserAndLeadsArray: this.projectUserAndLeadsArray,
|
|
396
|
+
}
|
|
397
|
+
const modal: HTMLIonModalElement = await this.modalController.create({
|
|
398
|
+
component: CreateRequesterPage,
|
|
399
|
+
componentProps: attributes,
|
|
400
|
+
swipeToClose: false,
|
|
401
|
+
backdropDismiss: false,
|
|
402
|
+
})
|
|
403
|
+
modal.onDidDismiss().then((dataReturned: any) => {
|
|
404
|
+
//
|
|
405
|
+
this.logger.log('[CREATE-TICKET] ', dataReturned.data)
|
|
406
|
+
this.logger.log('[CREATE-TICKET] PRJCT-USERS-&-LEADS-ARRAY RETURNED FROM CREATE REQUESTER',dataReturned.data.updatedProjectUserAndLeadsArray)
|
|
407
|
+
this.logger.log('[CREATE-TICKET] CREATED LEAD ID RETURNED FROM CREATE REQUESTER', dataReturned.data.selectedRequester)
|
|
408
|
+
|
|
409
|
+
if (dataReturned.data && dataReturned.data.selectedRequester) {
|
|
410
|
+
this.selectedRequester = dataReturned.data.selectedRequester
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
if (dataReturned.data && dataReturned.data.requester_type) {
|
|
414
|
+
this.requester_type = dataReturned.data.requester_type
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
if (dataReturned.data && dataReturned.data.requester_id) {
|
|
418
|
+
const requester_id = dataReturned.data.requester_id;
|
|
419
|
+
this.logger.log('[CREATE-TICKET] REQUESTER ID RERETURNED FROM CREATE REQUESTER', requester_id)
|
|
420
|
+
this.id_for_view_requeter_dtls = requester_id
|
|
421
|
+
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
if ( dataReturned.data && dataReturned.data.updatedProjectUserAndLeadsArray) {
|
|
425
|
+
this.projectUserAndLeadsArray = dataReturned.data.updatedProjectUserAndLeadsArray
|
|
426
|
+
this.projectUserAndLeadsArray = this.projectUserAndLeadsArray.slice(0)
|
|
427
|
+
}
|
|
428
|
+
})
|
|
429
|
+
|
|
430
|
+
return await modal.present()
|
|
431
|
+
}
|
|
432
|
+
}
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Component,
|
|
3
|
-
OnInit,
|
|
4
|
-
Input,
|
|
5
|
-
Output,
|
|
6
|
-
ViewChild,
|
|
7
|
-
ElementRef,
|
|
8
|
-
EventEmitter,
|
|
9
|
-
HostListener,
|
|
10
|
-
AfterViewInit,
|
|
11
|
-
} from '@angular/core'
|
|
2
|
+
Component, OnInit, Input, ViewChild, ElementRef, HostListener, AfterViewInit} from '@angular/core'
|
|
12
3
|
import { TYPE_MSG_IMAGE } from 'src/chat21-core/utils/constants'
|
|
13
|
-
import {
|
|
4
|
+
import { ModalController } from '@ionic/angular'
|
|
14
5
|
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'
|
|
15
6
|
|
|
16
7
|
// Logger
|
|
@@ -77,10 +77,10 @@
|
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
<ion-footer class="ion-no-border">
|
|
80
|
-
<ion-toolbar>
|
|
80
|
+
<!-- <ion-toolbar style="background-color: #1e2129 !important"> -->
|
|
81
81
|
<div class="content-chat-version">
|
|
82
82
|
<!-- <p class="chat-title">Tiledesk Chat</p> -->
|
|
83
83
|
<p class="chat-version">{{ 'LABEL_VERSION' | translate }} {{version}}</p>
|
|
84
84
|
</div>
|
|
85
|
-
</ion-toolbar>
|
|
85
|
+
<!-- </ion-toolbar> -->
|
|
86
86
|
</ion-footer>
|
|
@@ -114,6 +114,15 @@
|
|
|
114
114
|
margin-top: 15px;
|
|
115
115
|
margin-bottom: 5px;
|
|
116
116
|
}
|
|
117
|
+
|
|
118
|
+
// ion-toolbar {
|
|
119
|
+
// --padding-bottom: 0px;
|
|
120
|
+
// --background: #1e2129 !important;
|
|
121
|
+
// div.toolbar-container {
|
|
122
|
+
// padding: 0px !important;
|
|
123
|
+
// background: #1e2129 !important;
|
|
124
|
+
// }
|
|
125
|
+
// }
|
|
117
126
|
}
|
|
118
127
|
|
|
119
128
|
.avatar-container {
|
|
@@ -250,6 +259,7 @@ ion-footer{
|
|
|
250
259
|
.content-chat-version {
|
|
251
260
|
color: white;
|
|
252
261
|
padding: 20px;
|
|
262
|
+
background-color: #1e2129;
|
|
253
263
|
}
|
|
254
264
|
.chat-title{
|
|
255
265
|
font-size: 14px;
|
|
@@ -261,4 +271,5 @@ ion-footer{
|
|
|
261
271
|
font-weight: 400;
|
|
262
272
|
margin: 0;
|
|
263
273
|
}
|
|
264
|
-
}
|
|
274
|
+
}
|
|
275
|
+
|