@chat21/chat21-ionic 3.0.60 → 3.0.61-rc11

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.
Files changed (148) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +2 -0
  3. package/angular.json +3 -0
  4. package/config.xml +5 -5
  5. package/deploy_pre.sh +10 -10
  6. package/deploy_prod.sh +5 -1
  7. package/env.sample +3 -1
  8. package/package.json +12 -7
  9. package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
  10. package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
  11. package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
  12. package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
  13. package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
  14. package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
  15. package/resources/{Android → android}/icon.png +0 -0
  16. package/resources/{Android → android}/splash/drawable-land-hdpi-screen.png +0 -0
  17. package/resources/{Android → android}/splash/drawable-land-ldpi-screen.png +0 -0
  18. package/resources/{Android → android}/splash/drawable-land-mdpi-screen.png +0 -0
  19. package/resources/{Android → android}/splash/drawable-land-xhdpi-screen.png +0 -0
  20. package/resources/{Android → android}/splash/drawable-land-xxhdpi-screen.png +0 -0
  21. package/resources/{Android → android}/splash/drawable-land-xxxhdpi-screen.png +0 -0
  22. package/resources/{Android → android}/splash/drawable-port-hdpi-screen.png +0 -0
  23. package/resources/{Android → android}/splash/drawable-port-ldpi-screen.png +0 -0
  24. package/resources/{Android → android}/splash/drawable-port-mdpi-screen.png +0 -0
  25. package/resources/{Android → android}/splash/drawable-port-xhdpi-screen.png +0 -0
  26. package/resources/{Android → android}/splash/drawable-port-xxhdpi-screen.png +0 -0
  27. package/resources/{Android → android}/splash/drawable-port-xxxhdpi-screen.png +0 -0
  28. package/resources/{Android → android}/splash.png +0 -0
  29. package/src/app/app-routing.module.ts +10 -0
  30. package/src/app/app.component.html +14 -4
  31. package/src/app/app.component.scss +18 -1
  32. package/src/app/app.component.ts +50 -16
  33. package/src/app/app.module.ts +7 -1
  34. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
  35. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +103 -12
  36. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
  37. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +5 -1
  38. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +147 -65
  39. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +3 -3
  40. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +12 -2
  41. package/src/app/components/ddp-header/ddp-header.component.html +20 -6
  42. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  43. package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
  44. package/src/app/components/project-item/project-item.component.html +8 -7
  45. package/src/app/components/project-item/project-item.component.scss +6 -1
  46. package/src/app/components/project-item/project-item.component.ts +15 -2
  47. package/src/app/components/sidebar/sidebar.component.html +274 -0
  48. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  49. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  50. package/src/app/components/sidebar/sidebar.component.ts +493 -0
  51. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +110 -0
  52. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +318 -0
  53. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  54. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +486 -0
  55. package/src/app/pages/conversation-detail/conversation-detail.module.ts +2 -1
  56. package/src/app/pages/conversation-detail/conversation-detail.page.html +7 -5
  57. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1285 -790
  58. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  59. package/src/app/pages/conversations-list/conversations-list.page.html +18 -9
  60. package/src/app/pages/conversations-list/conversations-list.page.scss +9 -1
  61. package/src/app/pages/conversations-list/conversations-list.page.ts +753 -428
  62. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  63. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  64. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  65. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  66. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  67. package/src/app/pages/create-requester/create-requester.page.ts +137 -0
  68. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  69. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  70. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  71. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  72. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  73. package/src/app/pages/create-ticket/create-ticket.page.ts +423 -0
  74. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  75. package/src/app/pages/profile-info/profile-info.page.html +2 -2
  76. package/src/app/pages/profile-info/profile-info.page.scss +1 -1
  77. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  78. package/src/app/services/tiledesk/tiledesk.service.ts +181 -0
  79. package/src/app/shared/shared.module.ts +13 -0
  80. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  81. package/src/assets/i18n/de.json +55 -13
  82. package/src/assets/i18n/en.json +48 -6
  83. package/src/assets/i18n/es.json +47 -5
  84. package/src/assets/i18n/fr.json +50 -8
  85. package/src/assets/i18n/it.json +47 -5
  86. package/src/assets/i18n/pt.json +47 -5
  87. package/src/assets/i18n/ru.json +48 -6
  88. package/src/assets/i18n/sr.json +251 -0
  89. package/src/assets/i18n/tr.json +47 -5
  90. package/src/assets/images/default-avatar-x-select.png +0 -0
  91. package/src/assets/images/language_flag/ar.png +0 -0
  92. package/src/assets/images/language_flag/bg.png +0 -0
  93. package/src/assets/images/language_flag/ca.png +0 -0
  94. package/src/assets/images/language_flag/cs.png +0 -0
  95. package/src/assets/images/language_flag/da.png +0 -0
  96. package/src/assets/images/language_flag/de.png +0 -0
  97. package/src/assets/images/language_flag/el.png +0 -0
  98. package/src/assets/images/language_flag/en.png +0 -0
  99. package/src/assets/images/language_flag/es.png +0 -0
  100. package/src/assets/images/language_flag/fa.png +0 -0
  101. package/src/assets/images/language_flag/fi.png +0 -0
  102. package/src/assets/images/language_flag/fr.png +0 -0
  103. package/src/assets/images/language_flag/he.png +0 -0
  104. package/src/assets/images/language_flag/hi.png +0 -0
  105. package/src/assets/images/language_flag/hr.png +0 -0
  106. package/src/assets/images/language_flag/hu.png +0 -0
  107. package/src/assets/images/language_flag/id.png +0 -0
  108. package/src/assets/images/language_flag/it.png +0 -0
  109. package/src/assets/images/language_flag/ja.png +0 -0
  110. package/src/assets/images/language_flag/ko.png +0 -0
  111. package/src/assets/images/language_flag/ml-IN.png +0 -0
  112. package/src/assets/images/language_flag/ne-NP.png +0 -0
  113. package/src/assets/images/language_flag/nl.png +0 -0
  114. package/src/assets/images/language_flag/no.png +0 -0
  115. package/src/assets/images/language_flag/pl.png +0 -0
  116. package/src/assets/images/language_flag/pt-BR.png +0 -0
  117. package/src/assets/images/language_flag/pt.png +0 -0
  118. package/src/assets/images/language_flag/ro.png +0 -0
  119. package/src/assets/images/language_flag/ru.png +0 -0
  120. package/src/assets/images/language_flag/sk.png +0 -0
  121. package/src/assets/images/language_flag/sl.png +0 -0
  122. package/src/assets/images/language_flag/sr.png +0 -0
  123. package/src/assets/images/language_flag/sv-SE.png +0 -0
  124. package/src/assets/images/language_flag/ta.png +0 -0
  125. package/src/assets/images/language_flag/th.png +0 -0
  126. package/src/assets/images/language_flag/tr.png +0 -0
  127. package/src/assets/images/language_flag/uk.png +0 -0
  128. package/src/assets/images/language_flag/vi.png +0 -0
  129. package/src/assets/images/language_flag/zh-CN.png +0 -0
  130. package/src/assets/images/language_flag/zh-TW.png +0 -0
  131. package/src/assets/images/no_image_user.png +0 -0
  132. package/src/assets/images/priority_icons/high.svg +3 -0
  133. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  134. package/src/assets/images/priority_icons/low.svg +10 -0
  135. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  136. package/src/assets/images/priority_icons/medium.svg +16 -0
  137. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  138. package/src/assets/images/priority_icons/urgent.svg +4 -0
  139. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  140. package/src/assets/tiledesk-solo-logo.png +0 -0
  141. package/src/chat-config-pre-test.json +3 -1
  142. package/src/chat-config-template.json +3 -1
  143. package/src/chat-config.json +4 -2
  144. package/src/chat21-core/utils/constants.ts +6 -1
  145. package/src/global.scss +397 -3
  146. package/src/index.html +7 -0
  147. package/publish_pre.sh +0 -33
  148. package/publish_prod.sh +0 -33
@@ -0,0 +1,423 @@
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
+ this.logger.log('[CREATE-TICKET] - SELECT REQUESTER $event requester_id ', $event.requester_id)
192
+ this.logger.log('[CREATE-TICKET] - SELECT REQUESTER $event requestertype ', $event.requestertype)
193
+ this.id_for_view_requeter_dtls = $event.requester_id
194
+ this.requester_type = $event.requestertype
195
+
196
+ // const hasFound = this.projectUserAndLeadsArray.filter((obj: any) => {
197
+ // return obj.id === this.selectedRequester
198
+ // })
199
+
200
+ // console.log('[CREATE-TICKET] - hasFound REQUESTER ', hasFound)
201
+
202
+ // if (hasFound.length > 0)
203
+ // (this.id_for_view_requeter_dtls = hasFound[0]['requester_id']),
204
+ // console.log(
205
+ // '[CREATE-TICKET] - hasFound REQUESTER id_for_view_requeter_dtls',
206
+ // this.id_for_view_requeter_dtls,
207
+ // )
208
+
209
+ // if (hasFound[0]['requestertype'] === 'agent') {
210
+ // this.requester_type = 'agent'
211
+ // console.log(
212
+ // '[CREATE-TICKET]- hasFound REQUESTER requester_type',
213
+ // this.requester_type,
214
+ // )
215
+ // } else {
216
+ // this.requester_type = 'lead'
217
+ // console.log(
218
+ // '[CREATE-TICKET] - hasFound REQUESTER requester_type',
219
+ // this.requester_type,
220
+ // )
221
+ // }
222
+ }
223
+
224
+ openRequesterDetails() {
225
+ if (this.selectedRequester) {
226
+ if (this.requester_type === "agent") {
227
+
228
+ this.logger.log('[CREATE-TICKET] - openRequesterDetails ', this.requester_type, ' details')
229
+ const url = this.dashboard_base_url + '#/project/' + this.prjctID + '/user/edit/' + this.id_for_view_requeter_dtls
230
+ this.logger.log('[CREATE-TICKET] - openRequesterDetails URL', url)
231
+ window.open(url, '_blank');
232
+
233
+ } else if (this.requester_type === "lead") {
234
+
235
+ this.logger.log('[CREATE-TICKET] - openRequesterDetails ', this.requester_type, ' details')
236
+ const url = this.dashboard_base_url + '#/project/' + this.prjctID + '/contact/' + this.id_for_view_requeter_dtls
237
+ this.logger.log('[CREATE-TICKET] - openRequesterDetails URL', url)
238
+ window.open(url, '_blank');
239
+ }
240
+ }
241
+ }
242
+
243
+ // -------------------------------------------------------------------------------------------------------------------
244
+ // Create the array of the project-users, the bots and of the departments displayed in the combo box "Select Assignee"
245
+ // -------------------------------------------------------------------------------------------------------------------
246
+ getProjectUserBotsAndDepts(projctid: string, tiledesktoken: string) {
247
+ // this.loadingAssignee = true;
248
+ const projectUsers = this.tiledeskService.getProjectUsersByProjectId( projctid, tiledesktoken)
249
+ const bots = this.tiledeskService.getAllBotByProjectId(projctid, tiledesktoken)
250
+ const depts = this.tiledeskService.getDeptsByProjectId(projctid, tiledesktoken)
251
+
252
+ zip(projectUsers, bots, depts).subscribe(
253
+ ([_prjctUsers, _bots, _depts]) => {
254
+ this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - PROJECT USERS : ', _prjctUsers )
255
+ this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - BOTS : ', _bots)
256
+ this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - DEPTS: ',_depts)
257
+ this.departments = _depts
258
+ this.logger.log( '[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - this.departments: ',this.departments)
259
+ // projectUserAndLeadsArray
260
+
261
+ if (_prjctUsers) {
262
+ _prjctUsers.forEach((p_user) => {
263
+ this.projectUserBotsAndDeptsArray.push({ id: p_user.id_user._id, name: p_user.id_user.firstname + ' ' + p_user.id_user.lastname + ' (' + p_user.role + ')' })
264
+ })
265
+ }
266
+
267
+ if (_bots) {
268
+ _bots.forEach((bot) => {
269
+ if (bot['trashed'] === false && bot['type'] !== 'identity') {
270
+ this.projectUserBotsAndDeptsArray.push({
271
+ id: 'bot_' + bot._id,
272
+ name: bot.name + ' (bot)',
273
+ })
274
+ }
275
+ })
276
+ }
277
+
278
+ if (_depts) {
279
+ _depts.forEach((dept) => {
280
+ this.projectUserBotsAndDeptsArray.push({
281
+ id: dept._id,
282
+ name: dept.name + ' (dept)',
283
+ })
284
+ })
285
+ }
286
+
287
+ this.logger.log('[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS ARRAY: ',this.projectUserBotsAndDeptsArray )
288
+
289
+ this.projectUserBotsAndDeptsArray = this.projectUserBotsAndDeptsArray.slice(0)
290
+ },
291
+ (error) => {
292
+ this.loadingAssignee = false
293
+ this.logger.error('[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS - ERROR: ', error)
294
+ },
295
+ () => {
296
+ this.loadingAssignee = false
297
+ this.logger.log('[CREATE-TICKET] - GET P-USERS-&-BOTS-&-DEPTS * COMPLETE *')
298
+ },
299
+ )
300
+ }
301
+
302
+ selectedAssignee() {
303
+ this.logger.log('[CREATE-TICKET] - SELECT ASSIGNEE: ', this.assignee_id);
304
+ this.logger.log('[CREATE-TICKET] - DEPTS: ', this.departments);
305
+
306
+ const hasFound = this.departments.filter((obj: any) => {
307
+ return obj.id === this.assignee_id;
308
+ });
309
+
310
+ this.logger.log("[CREATE-TICKET] - SELECT ASSIGNEE HAS FOUND IN DEPTS: ", hasFound);
311
+
312
+ if (hasFound.length === 0) {
313
+
314
+ this.assignee_dept_id = undefined
315
+ this.assignee_participants_id = this.assignee_id
316
+ } else {
317
+
318
+ this.assignee_dept_id = this.assignee_id
319
+ this.assignee_participants_id = undefined
320
+ }
321
+ }
322
+
323
+ onChangeSelectedPriority(selectedPriority) {
324
+ this.logger.log('[CREATE-TICKET] onChangeSelectedPriority selectedPriority ', selectedPriority)
325
+ this.selectedPriority = selectedPriority;
326
+ }
327
+
328
+ createTicket() {
329
+ // if (this.ticketCreationCompleted === false) {
330
+ // this.hasClickedCreateNewInternalRequest = true
331
+ this.showSpinnerCreateTicket = true
332
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - ticket_message ', this.ticket_message);
333
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - assignee_dept_id ', this.assignee_dept_id);
334
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - assignee_participants_id ', this.assignee_participants_id);
335
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - ticket_subject', this.ticket_subject);
336
+
337
+ const uiid = uuid.v4();
338
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - uiid', uiid);
339
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - uiid typeof', typeof uiid);
340
+ const uiid_no_dashes = uiid.replace(/-/g, "");;
341
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - uiid_no_dash', uiid_no_dashes);
342
+ // Note: the request id must be in the form "support-group-" + "-" + "project_id" + "uid" <- uid without dash
343
+ // this.logger.log('% WsRequestsList createTicket - UUID', uiid);
344
+ this.internal_request_id = 'support-group-' + this.prjctID + '-' + uiid_no_dashes
345
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - internal_request_id', this.internal_request_id);
346
+ // (request_id:string, subject: string, message:string, departmentid: string)
347
+ this.tiledeskService.createInternalRequest(this.selectedRequester,
348
+ this.internal_request_id,
349
+ this.ticket_subject,
350
+ this.ticket_message,
351
+ this.assignee_dept_id,
352
+ this.assignee_participants_id,
353
+ this.selectedPriority,
354
+ this.prjctID,
355
+ this.tiledeskToken
356
+ ).subscribe((newticket: any) => {
357
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest - RES ', newticket);
358
+
359
+ }, error => {
360
+ this.showSpinnerCreateTicket = false
361
+ this.logger.error('[WS-REQUESTS-LIST] create internalRequest - ERROR: ', error);
362
+ }, () => {
363
+ this.logger.log('[WS-REQUESTS-LIST] create internalRequest * COMPLETE *')
364
+ this.showSpinnerCreateTicket = false;
365
+ this.ticketCreationCompleted = true
366
+ // this.closeModalCreateTicketModal()
367
+
368
+ // this.events.publish('closeModalCreateTicket', true)
369
+ });
370
+ // }
371
+ // else {
372
+ // this.closeModalCreateTicketModal()
373
+ // }
374
+ }
375
+
376
+ async closeModalCreateTicketModal() {
377
+ this.logger.log('[CREATE-TICKET] modalController', this.modalController)
378
+ this.logger.log('[CREATE-TICKET] .getTop()', this.modalController.getTop())
379
+ await this.modalController.getTop()
380
+ this.modalController.dismiss({ confirmed: true })
381
+ }
382
+
383
+ async presentModalAddNewRequester(): Promise<any> {
384
+ // this.closeModalCreateTicketModal()
385
+ const attributes = {
386
+ projectUserAndLeadsArray: this.projectUserAndLeadsArray,
387
+ }
388
+ const modal: HTMLIonModalElement = await this.modalController.create({
389
+ component: CreateRequesterPage,
390
+ componentProps: attributes,
391
+ swipeToClose: false,
392
+ backdropDismiss: false,
393
+ })
394
+ modal.onDidDismiss().then((dataReturned: any) => {
395
+ //
396
+ this.logger.log('[CREATE-TICKET] ', dataReturned.data)
397
+ this.logger.log('[CREATE-TICKET] PRJCT-USERS-&-LEADS-ARRAY RETURNED FROM CREATE REQUESTER',dataReturned.data.updatedProjectUserAndLeadsArray)
398
+ this.logger.log('[CREATE-TICKET] CREATED LEAD ID RETURNED FROM CREATE REQUESTER', dataReturned.data.selectedRequester)
399
+
400
+ if (dataReturned.data && dataReturned.data.selectedRequester) {
401
+ this.selectedRequester = dataReturned.data.selectedRequester
402
+ }
403
+
404
+ if (dataReturned.data && dataReturned.data.requester_type) {
405
+ this.requester_type = dataReturned.data.requester_type
406
+ }
407
+
408
+ if (dataReturned.data && dataReturned.data.requester_id) {
409
+ const requester_id = dataReturned.data.requester_id;
410
+ this.logger.log('[CREATE-TICKET] REQUESTER ID RERETURNED FROM CREATE REQUESTER', requester_id)
411
+ this.id_for_view_requeter_dtls = requester_id
412
+
413
+ }
414
+
415
+ if ( dataReturned.data && dataReturned.data.updatedProjectUserAndLeadsArray) {
416
+ this.projectUserAndLeadsArray = dataReturned.data.updatedProjectUserAndLeadsArray
417
+ this.projectUserAndLeadsArray = this.projectUserAndLeadsArray.slice(0)
418
+ }
419
+ })
420
+
421
+ return await modal.present()
422
+ }
423
+ }