@chat21/chat21-ionic 3.0.60 → 3.0.61-rc14

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 (162) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +2 -0
  3. package/angular.json +4 -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 +13 -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 +15 -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 +12 -3
  34. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +23 -5
  35. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +142 -49
  36. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +101 -18
  37. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +20 -36
  38. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +10 -0
  39. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +35 -40
  40. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
  41. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +103 -12
  42. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
  43. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +7 -1
  44. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +148 -63
  45. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +59 -22
  46. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +32 -9
  47. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +102 -23
  48. package/src/app/components/ddp-header/ddp-header.component.html +20 -6
  49. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  50. package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
  51. package/src/app/components/project-item/project-item.component.html +8 -7
  52. package/src/app/components/project-item/project-item.component.scss +7 -2
  53. package/src/app/components/project-item/project-item.component.ts +15 -2
  54. package/src/app/components/sidebar/sidebar.component.html +275 -0
  55. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  56. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  57. package/src/app/components/sidebar/sidebar.component.ts +539 -0
  58. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +117 -0
  59. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +330 -0
  60. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  61. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +490 -0
  62. package/src/app/pages/conversation-detail/conversation-detail.module.ts +6 -1
  63. package/src/app/pages/conversation-detail/conversation-detail.page.html +20 -10
  64. package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
  65. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1132 -784
  66. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  67. package/src/app/pages/conversations-list/conversations-list.page.html +18 -9
  68. package/src/app/pages/conversations-list/conversations-list.page.scss +9 -1
  69. package/src/app/pages/conversations-list/conversations-list.page.ts +738 -425
  70. package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
  71. package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
  72. package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
  73. package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
  74. package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
  75. package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
  76. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  77. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  78. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  79. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  80. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  81. package/src/app/pages/create-requester/create-requester.page.ts +138 -0
  82. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  83. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  84. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  85. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  86. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  87. package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
  88. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  89. package/src/app/pages/profile-info/profile-info.page.html +4 -4
  90. package/src/app/pages/profile-info/profile-info.page.scss +13 -2
  91. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  92. package/src/app/services/tiledesk/tiledesk.service.ts +209 -0
  93. package/src/app/shared/shared.module.ts +14 -1
  94. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  95. package/src/assets/i18n/de.json +69 -13
  96. package/src/assets/i18n/en.json +62 -6
  97. package/src/assets/i18n/es.json +61 -5
  98. package/src/assets/i18n/fr.json +64 -8
  99. package/src/assets/i18n/it.json +61 -5
  100. package/src/assets/i18n/pt.json +61 -5
  101. package/src/assets/i18n/ru.json +62 -6
  102. package/src/assets/i18n/sr.json +265 -0
  103. package/src/assets/i18n/tr.json +61 -5
  104. package/src/assets/images/default-avatar-x-select.png +0 -0
  105. package/src/assets/images/language_flag/ar.png +0 -0
  106. package/src/assets/images/language_flag/bg.png +0 -0
  107. package/src/assets/images/language_flag/ca.png +0 -0
  108. package/src/assets/images/language_flag/cs.png +0 -0
  109. package/src/assets/images/language_flag/da.png +0 -0
  110. package/src/assets/images/language_flag/de.png +0 -0
  111. package/src/assets/images/language_flag/el.png +0 -0
  112. package/src/assets/images/language_flag/en.png +0 -0
  113. package/src/assets/images/language_flag/es.png +0 -0
  114. package/src/assets/images/language_flag/fa.png +0 -0
  115. package/src/assets/images/language_flag/fi.png +0 -0
  116. package/src/assets/images/language_flag/fr.png +0 -0
  117. package/src/assets/images/language_flag/he.png +0 -0
  118. package/src/assets/images/language_flag/hi.png +0 -0
  119. package/src/assets/images/language_flag/hr.png +0 -0
  120. package/src/assets/images/language_flag/hu.png +0 -0
  121. package/src/assets/images/language_flag/id.png +0 -0
  122. package/src/assets/images/language_flag/it.png +0 -0
  123. package/src/assets/images/language_flag/ja.png +0 -0
  124. package/src/assets/images/language_flag/ko.png +0 -0
  125. package/src/assets/images/language_flag/ml-IN.png +0 -0
  126. package/src/assets/images/language_flag/ne-NP.png +0 -0
  127. package/src/assets/images/language_flag/nl.png +0 -0
  128. package/src/assets/images/language_flag/no.png +0 -0
  129. package/src/assets/images/language_flag/pl.png +0 -0
  130. package/src/assets/images/language_flag/pt-BR.png +0 -0
  131. package/src/assets/images/language_flag/pt.png +0 -0
  132. package/src/assets/images/language_flag/ro.png +0 -0
  133. package/src/assets/images/language_flag/ru.png +0 -0
  134. package/src/assets/images/language_flag/sk.png +0 -0
  135. package/src/assets/images/language_flag/sl.png +0 -0
  136. package/src/assets/images/language_flag/sr.png +0 -0
  137. package/src/assets/images/language_flag/sv-SE.png +0 -0
  138. package/src/assets/images/language_flag/ta.png +0 -0
  139. package/src/assets/images/language_flag/th.png +0 -0
  140. package/src/assets/images/language_flag/tr.png +0 -0
  141. package/src/assets/images/language_flag/uk.png +0 -0
  142. package/src/assets/images/language_flag/vi.png +0 -0
  143. package/src/assets/images/language_flag/zh-CN.png +0 -0
  144. package/src/assets/images/language_flag/zh-TW.png +0 -0
  145. package/src/assets/images/no_image_user.png +0 -0
  146. package/src/assets/images/priority_icons/high.svg +3 -0
  147. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  148. package/src/assets/images/priority_icons/low.svg +10 -0
  149. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  150. package/src/assets/images/priority_icons/medium.svg +16 -0
  151. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  152. package/src/assets/images/priority_icons/urgent.svg +4 -0
  153. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  154. package/src/assets/tiledesk-solo-logo.png +0 -0
  155. package/src/chat-config-pre-test.json +3 -1
  156. package/src/chat-config-template.json +3 -1
  157. package/src/chat-config.json +4 -2
  158. package/src/chat21-core/utils/constants.ts +6 -1
  159. package/src/global.scss +405 -3
  160. package/src/index.html +7 -0
  161. package/publish_pre.sh +0 -33
  162. package/publish_prod.sh +0 -33
@@ -86,16 +86,18 @@ export class ProfileInfoPage implements OnInit {
86
86
  private setUser() {
87
87
  // width and height NON sono obbligatori
88
88
  this.loggedUser = this.chatManager.getCurrentUser();
89
- this.itemAvatar = {
90
- imageurl: this.imageRepo.getImagePhotoUrl(this.loggedUser.uid),
91
- avatar: this.loggedUser.avatar,
92
- color: this.loggedUser.color,
93
- online: this.loggedUser.online,
94
- lastConnection: this.loggedUser.lastConnection,
95
- status: '',
96
- width: '100px',
97
- height: '100px'
98
- };
89
+ if (this.loggedUser) {
90
+ this.itemAvatar = {
91
+ imageurl: this.imageRepo.getImagePhotoUrl(this.loggedUser.uid),
92
+ avatar: this.loggedUser.avatar,
93
+ color: this.loggedUser.color,
94
+ online: this.loggedUser.online,
95
+ lastConnection: this.loggedUser.lastConnection,
96
+ status: '',
97
+ width: '100px',
98
+ height: '100px'
99
+ };
100
+ }
99
101
  }
100
102
 
101
103
 
@@ -121,10 +123,10 @@ export class ProfileInfoPage implements OnInit {
121
123
  private setSubscriptions() {
122
124
  this.presenceService.userIsOnline(this.loggedUser.uid);
123
125
  this.presenceService.lastOnlineForUser(this.loggedUser.uid);
124
-
125
-
126
+
127
+
126
128
  const subscribeBSIsOnline = this.presenceService.BSIsOnline.subscribe((data: any) => {
127
- this.logger.log('[PROFILE-INFO-PAGE] setSubscriptions $ubscribe to BSIsOnline - data' , data);
129
+ this.logger.log('[PROFILE-INFO-PAGE] setSubscriptions $ubscribe to BSIsOnline - data', data);
128
130
  if (data) {
129
131
  const userId = data.uid;
130
132
  const isOnline = data.isOnline;
@@ -135,7 +137,7 @@ export class ProfileInfoPage implements OnInit {
135
137
  });
136
138
 
137
139
  const subscribeBSLastOnline = this.presenceService.BSLastOnline.subscribe((data: any) => {
138
- this.logger.log('[PROFILE-INFO-PAGE] setSubscriptions $ubscribe to BSLastOnline - data' , data);
140
+ this.logger.log('[PROFILE-INFO-PAGE] setSubscriptions $ubscribe to BSLastOnline - data', data);
139
141
  if (data) {
140
142
  const userId = data.uid;
141
143
  const timestamp = data.lastOnline;
@@ -150,7 +152,7 @@ export class ProfileInfoPage implements OnInit {
150
152
 
151
153
 
152
154
  userIsOnLine = (userId: string, isOnline: boolean) => {
153
- this.logger.log('[PROFILE-INFO-PAGE] userIsOnLine - userId ', userId, ' - isOnline ', isOnline);
155
+ this.logger.log('[PROFILE-INFO-PAGE] userIsOnLine - userId ', userId, ' - isOnline ', isOnline);
154
156
  this.itemAvatar.online = isOnline;
155
157
  if (isOnline) {
156
158
  this.itemAvatar.status = this.translationMap.get('LABEL_AVAILABLE');
@@ -180,9 +182,9 @@ export class ProfileInfoPage implements OnInit {
180
182
 
181
183
  /** */
182
184
  private unsubescribeAll() {
183
- this.logger.log('unsubescribeAll: ', this.subscriptions);
185
+ this.logger.log('unsubescribeAll: ', this.subscriptions);
184
186
  this.subscriptions.forEach((subscription: any) => {
185
- this.logger.log('unsubescribe: ', subscription);
187
+ this.logger.log('unsubescribe: ', subscription);
186
188
  // this.events.unsubscribe(subscription, null);
187
189
  });
188
190
  this.subscriptions = [];
@@ -207,15 +209,15 @@ export class ProfileInfoPage implements OnInit {
207
209
  }
208
210
 
209
211
  copyLoggedUserUID() {
210
- var copyText = document.createElement("input");
212
+ var copyText = document.createElement("input");
211
213
  copyText.setAttribute("type", "text");
212
214
  copyText.setAttribute("value", this.loggedUser.uid);
213
-
214
- document.body.appendChild(copyText);
215
+
216
+ document.body.appendChild(copyText);
215
217
  copyText.select();
216
218
  copyText.setSelectionRange(0, 99999); /*For mobile devices*/
217
219
  document.execCommand("copy");
218
- this.logger.log("Copied the text: " + copyText.value);
220
+ this.logger.log("Copied the text: " + copyText.value);
219
221
  const tootipElem = <HTMLElement>document.querySelector('.chat-tooltip');
220
222
  this.renderer.appendChild(tootipElem, this.renderer.createText('Copied!'))
221
223
 
@@ -91,9 +91,218 @@ export class TiledeskService {
91
91
  }))
92
92
  }
93
93
 
94
+
95
+ public getProjectById( token: string , id: string) {
96
+ const url = this.apiUrl + 'projects/' + id;
97
+ this.logger.log('[TILEDESK-SERVICE] - GET PROJECT BY ID URL', url);
98
+
99
+ const httpOptions = {
100
+ headers: new HttpHeaders({
101
+ 'Content-Type': 'application/json',
102
+ Authorization: token
103
+ })
104
+ };
105
+ return this.http
106
+ .get(url, httpOptions)
107
+ .pipe(map((res: any) => {
108
+ this.logger.log('[TILEDESK-SERVICE] GET PROJECT BY ID URL - RES ', res);
109
+ return res
110
+ }))
111
+ }
112
+
113
+
114
+ public getProjectUsersByProjectId(project_id: string, token: string) {
115
+ const url = this.apiUrl + project_id + '/project_users/';
116
+ this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER URL', url);
117
+
118
+ const httpOptions = {
119
+ headers: new HttpHeaders({
120
+ 'Content-Type': 'application/json',
121
+ Authorization: token
122
+ })
123
+ };
124
+ return this.http
125
+ .get(url, httpOptions)
126
+ .pipe(map((res: any) => {
127
+ this.logger.log('[TILEDESK-SERVICE] - GET PROJECT-USER RES ', res);
128
+ return res
129
+ }))
130
+ }
131
+
132
+ public getAllLeadsActiveWithLimit(project_id: string, token: string, limit: number) {
133
+ const url = this.apiUrl + project_id + '/leads?limit=' + limit + '&with_fullname=true';
134
+ this.logger.log('[TILEDESK-SERVICE] - GET ALL ACTIVE LEADS (LIMIT 10000) - URL', url);
135
+
136
+ const httpOptions = {
137
+ headers: new HttpHeaders({
138
+ 'Content-Type': 'application/json',
139
+ Authorization: token
140
+ })
141
+ };
142
+ return this.http
143
+ .get(url, httpOptions)
144
+ .pipe(map((res: any) => {
145
+ this.logger.log('[TILEDESK-SERVICE] - GET ALL ACTIVE LEADS (LIMIT 10000) ', res);
146
+ return res
147
+ }))
148
+ }
149
+
150
+
151
+ // ---------------------------------------------
152
+ // @ Create new project user to get new lead ID
153
+ // ---------------------------------------------
154
+ public createNewProjectUserToGetNewLeadID(project_id: string, token: string) {
155
+ const url = this.apiUrl + project_id + '/project_users/'
156
+ this.logger.log('[TILEDESK-SERVICE] - CREATE NEW PROJECT USER TO GET NEW LEAD ID url ', url);
157
+ const httpOptions = {
158
+ headers: new HttpHeaders({
159
+ 'Content-Type': 'application/json',
160
+ Authorization: token
161
+ })
162
+ };
163
+ const body = {};
164
+ return this.http
165
+ .post(url, body, httpOptions)
166
+ .pipe(map((res: any) => {
167
+ this.logger.log('[TILEDESK-SERVICE] - CREATE NEW PROJECT USER TO GET NEW LEAD ID url ', res);
168
+ return res
169
+ }))
170
+ }
171
+
172
+ // ---------------------------------------------
173
+ // @ Create new lead
174
+ // ---------------------------------------------
175
+ public createNewLead(leadid: string, fullname: string, leademail: string, project_id: string, token: string) {
176
+ const url = this.apiUrl + project_id + '/leads/'
177
+ this.logger.log('[TILEDESK-SERVICE] - CREATE NEW LEAD url ', url);
178
+
179
+ const httpOptions = {
180
+ headers: new HttpHeaders({
181
+ 'Content-Type': 'application/json',
182
+ Authorization: token
183
+ })
184
+ };
185
+
186
+ const body = { 'lead_id': leadid, 'fullname': fullname, 'email': leademail };
187
+ this.logger.log('[TILEDESK-SERVICE] - CREATE NEW LEAD ', body);
188
+
189
+ return this.http
190
+ .post(url, body, httpOptions)
191
+ .pipe(map((res: any) => {
192
+ this.logger.log('[TILEDESK-SERVICE] - CREATE NEW LEAD RES ', res);
193
+ return res
194
+ }))
195
+ }
196
+
197
+ // -------------------------------------------------------------------------------------
198
+ // @ Get all bots of the project (with all=true the response return also the identity bot)
199
+ // -------------------------------------------------------------------------------------
200
+ public getAllBotByProjectId(project_id: string, token: string) {
201
+
202
+ const url = this.apiUrl + project_id + '/faq_kb?all=true'
203
+ this.logger.log('[TILEDESK-SERVICE] - GET ALL BOTS BY PROJECT ID - URL', url);
204
+
205
+ const httpOptions = {
206
+ headers: new HttpHeaders({
207
+ 'Content-Type': 'application/json',
208
+ Authorization: token
209
+ })
210
+ };
211
+
212
+ return this.http
213
+ .get(url, httpOptions)
214
+ .pipe(map((res: any) => {
215
+ this.logger.log('[TILEDESK-SERVICE] - GET ALL BOTS BY PROJECT ID - RES ', res);
216
+ return res
217
+ }))
218
+ }
219
+
220
+ // -------------------------------------------------------------------------------------
221
+ // @ Get all DEPTS of the project
222
+ // -------------------------------------------------------------------------------------
223
+ public getDeptsByProjectId(project_id: string, token: string) {
224
+
225
+ const url = this.apiUrl + project_id + '/departments/allstatus';
226
+ this.logger.log('[TILEDESK-SERVICE] - GET DEPTS (ALL STATUS) - URL', url);
227
+
228
+ const httpOptions = {
229
+ headers: new HttpHeaders({
230
+ 'Content-Type': 'application/json',
231
+ Authorization: token
232
+ })
233
+ };
234
+
235
+ return this.http
236
+ .get(url, httpOptions)
237
+ .pipe(map((res: any) => {
238
+ this.logger.log('[TILEDESK-SERVICE] - GET DEPTS (ALL STATUS) - RES ', res);
239
+ return res
240
+ }))
241
+ }
242
+
243
+ // -----------------------------------------------------------------------------------------
244
+ // @ Create ticket
245
+ // -----------------------------------------------------------------------------------------
246
+ createInternalRequest(requester_id: string, request_id: string, subject: string, message: string, departmentid: string, participantid: string, ticketpriority: string, project_id: string, token: string) {
247
+
248
+ const url = this.apiUrl + project_id + '/requests/' + request_id + '/messages'
249
+ this.logger.log('[WS-REQUESTS-SERV] - CREATE INTERNAL REQUEST URL ', url)
250
+
251
+ const httpOptions = {
252
+ headers: new HttpHeaders({
253
+ 'Content-Type': 'application/json',
254
+ Authorization: token
255
+ })
256
+ };
257
+ // this.logger.log('JOIN FUNCT OPTIONS ', options);
258
+ let body = {}
259
+ body = { 'sender': requester_id, 'subject': subject, 'text': message, 'departmentid': departmentid, 'channel': { 'name': 'form' }, 'priority': ticketpriority };
260
+ if (participantid !== undefined) {
261
+ body['participants'] = [participantid]
262
+ } else {
263
+ body['participants'] = participantid
264
+ }
265
+ // , 'participants': [participantid]
266
+
267
+ this.logger.log('[WS-REQUESTS-SERV] - CREATE INTERNAL REQUEST body ', body);
268
+ return this.http
269
+ .post(url, body, httpOptions)
270
+ .pipe(map((res: any) => {
271
+ this.logger.log('[TILEDESK-SERVICE] - CREATE NEW LEAD RES ', res);
272
+ return res
273
+ }))
274
+ }
94
275
 
95
276
 
277
+ // -------------------------------------------------------------------------------------
278
+ // @ Create - Save (POST) new canned response
279
+ // -------------------------------------------------------------------------------------
280
+ public createCannedResponse(message: string, title: string, project_id: string, token: string) {
281
+ this.logger.log('[TILEDESK-SERVICE] - CREATE CANNED-RES - token', token);
282
+ const url = this.apiUrl + project_id + '/canned/'
283
+ this.logger.log('[TILEDESK-SERVICE] - CREATE CANNED-RES - URL', url);
284
+
285
+ const httpOptions = {
286
+ headers: new HttpHeaders({
287
+ 'Content-Type': 'application/json',
288
+ Authorization: token
289
+ })
290
+ };
96
291
 
292
+ const body = { 'text': message, 'title': title };
293
+
294
+ this.logger.log('[TILEDESK-SERVICE] CREATE CANNED-RES - BODY ', body);
295
+
296
+ return this.http
297
+ .post(url, JSON.stringify(body), httpOptions)
298
+ .pipe(map((res: any) => {
299
+ this.logger.log('[TILEDESK-SERVICE] - CREATE CANNED-RES - RES ', res);
300
+ return res
301
+ }))
302
+
303
+ }
97
304
 
305
+ // .post(url, JSON.stringify(body), options)
306
+ // .map((res) => res.json());
98
307
 
99
308
  }
@@ -39,9 +39,15 @@ import { TooltipModule, TooltipOptions } from 'ng2-tooltip-directive';
39
39
  import { OptionHeaderComponent } from '../components/conversation-detail/option-header/option-header.component';
40
40
  import { MessageAttachmentComponent } from '../chatlib/conversation-detail/message/message-attachment/message-attachment.component';
41
41
  import { ImageViewerComponent } from '../components/image-viewer/image-viewer.component';
42
+ import { SidebarComponent } from '../components/sidebar/sidebar.component';
43
+ import { SidebarUserDetailsComponent } from '../components/sidebar-user-details/sidebar-user-details.component';
42
44
  import { ProjectItemComponent } from '../components/project-item/project-item.component';
43
45
  import { DefaultTooltipOptions } from 'src/chat21-core/utils/utils';
44
- // import { MessageTextAreaComponent } from '../components/conversation-detail/message-text-area/message-text-area.component';
46
+ import { MatTooltipModule } from '@angular/material/tooltip';
47
+ import { MatSnackBarModule } from '@angular/material/snack-bar';
48
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
49
+
50
+ // import { MessageTextAreaComponent } from '../components/conversation-detail/message-text-area/message-text-area.component'; // MessageTextAreaComponent is part of the declarations ConversationDetailPageModule
45
51
 
46
52
  @NgModule({
47
53
  declarations: [
@@ -53,6 +59,8 @@ import { DefaultTooltipOptions } from 'src/chat21-core/utils/utils';
53
59
  ListConversationsComponent,
54
60
  IonListConversationsComponent,
55
61
  ImageViewerComponent,
62
+ SidebarComponent,
63
+ SidebarUserDetailsComponent,
56
64
  ProjectItemComponent,
57
65
  IonConversationDetailComponent,
58
66
  ConversationContentComponent,
@@ -87,6 +95,8 @@ import { DefaultTooltipOptions } from 'src/chat21-core/utils/utils';
87
95
  AvatarProfileComponent,
88
96
  DdpHeaderComponent,
89
97
  ImageViewerComponent,
98
+ SidebarComponent,
99
+ SidebarUserDetailsComponent,
90
100
  ProjectItemComponent,
91
101
  UserPresenceComponent,
92
102
  UserTypingComponent,
@@ -117,6 +127,9 @@ import { DefaultTooltipOptions } from 'src/chat21-core/utils/utils';
117
127
 
118
128
  ],
119
129
  imports: [
130
+ MatTooltipModule,
131
+ MatSlideToggleModule,
132
+ MatSnackBarModule,
120
133
  CommonModule,
121
134
  IonicModule,
122
135
  MomentModule,
@@ -4,42 +4,76 @@ import { NgModule, Directive, ElementRef } from '@angular/core';
4
4
  })
5
5
  export class ScrollbarThemeDirective {
6
6
  constructor(el: ElementRef) {
7
+ // ::-webkit-scrollbar {
8
+ // width: 6px;
9
+ // height: 8px;
10
+ // }
11
+ // ::-webkit-scrollbar-track {
12
+ // background-color: #f9f9f9;
13
+ // }
14
+ // ::-webkit-scrollbar-thumb {
15
+ // background-color: #b9b9b9;
16
+ // border-radius: 0px;
17
+ // }
18
+
19
+ // ::-webkit-scrollbar-thumb:hover {
20
+ // background-color: #727272;
21
+ // }
22
+
7
23
  const stylesheet = `
8
24
  ::-webkit-scrollbar {
9
- width: 10px;
25
+ width: 6px;
26
+ height: 8px;
10
27
  }
11
28
  ::-webkit-scrollbar-track {
12
- background: #0f0f0f;
29
+ background: #f9f9f9;
13
30
  }
14
31
  ::-webkit-scrollbar-thumb {
15
- border-radius: 1rem;
16
- background: linear-gradient(var(--ion-color-light-tint), var(--ion-color-light));
17
- border: 4px solid #020202;
32
+ background-color: #b9b9b9;
33
+ border-radius: 0px;
18
34
  }
19
35
  ::-webkit-scrollbar-thumb:hover {
36
+ background-color: #727272;
20
37
  }
38
+ `;
21
39
 
22
- ::-webkit-scrollbar {
23
- width: 20px;
24
- }
40
+
41
+ // const stylesheet = `
42
+ // ::-webkit-scrollbar {
43
+ // width: 10px;
44
+ // }
45
+ // ::-webkit-scrollbar-track {
46
+ // background: #0f0f0f;
47
+ // }
48
+ // ::-webkit-scrollbar-thumb {
49
+ // border-radius: 1rem;
50
+ // background: linear-gradient(var(--ion-color-light-tint), var(--ion-color-light));
51
+ // border: 4px solid #020202;
52
+ // }
53
+ // ::-webkit-scrollbar-thumb:hover {
54
+ // }
55
+
56
+ // ::-webkit-scrollbar {
57
+ // width: 20px;
58
+ // }
25
59
 
26
- /* Track */
27
- ::-webkit-scrollbar-track {
28
- box-shadow: inset 0 0 5px grey;
29
- border-radius: 10px;
30
- }
60
+ // /* Track */
61
+ // ::-webkit-scrollbar-track {
62
+ // box-shadow: inset 0 0 5px grey;
63
+ // border-radius: 10px;
64
+ // }
31
65
 
32
- /* Handle */
33
- ::-webkit-scrollbar-thumb {
34
- background: red;
35
- border-radius: 10px;
36
- }
66
+ // /* Handle */
67
+ // ::-webkit-scrollbar-thumb {
68
+ // background: red;
69
+ // border-radius: 10px;
70
+ // }
37
71
 
38
- /* Handle on hover */
39
- ::-webkit-scrollbar-thumb:hover {
40
- background: #b30000;
41
- }
42
- `;
72
+ // /* Handle on hover */
73
+ // ::-webkit-scrollbar-thumb:hover {
74
+ // background: #b30000;
75
+ // }
76
+ // `;
43
77
 
44
78
  setTimeout(() => {
45
79
  const styleElmt = el.nativeElement.shadowRoot.querySelector('style');
@@ -50,7 +84,7 @@ export class ScrollbarThemeDirective {
50
84
  barStyle.append(stylesheet);
51
85
  el.nativeElement.shadowRoot.appendChild(barStyle);
52
86
  }
53
- }, 2500);
87
+ }, 0);
54
88
 
55
89
  }
56
90
  }
@@ -11,13 +11,13 @@
11
11
  "LABEL_LAST_ACCESS": "letzter Zugriff",
12
12
  "LABEL_TO": "beim",
13
13
  "ARRAY_DAYS": [
14
- "Montag",
15
- "Dienstag",
16
- "Mittwoch",
17
- "Donnerstag",
18
- "Freitag",
19
- "Samstag",
20
- "Sonntag"
14
+ "Montag",
15
+ "Dienstag",
16
+ "Mittwoch",
17
+ "Donnerstag",
18
+ "Freitag",
19
+ "Samstag",
20
+ "Sonntag"
21
21
  ],
22
22
  "LABEL_SEND": "Senden",
23
23
  "ID_CONVERSATION": "ID-Gespräch",
@@ -44,7 +44,7 @@
44
44
  "LABEL_VIDEO_CHAT": "Videoanruf",
45
45
  "LABEL_LEAVE_GROUP": "Die Gruppe verlassen",
46
46
  "LABEL_CLOSE_GROUP": "Nah dran",
47
- "ALERT_TITLE": "WARNUNG",
47
+ "ALERT_TITLE": "Aufmerksamkeit!",
48
48
  "CLOSE_ALERT_CONFIRM_LABEL": "OK",
49
49
  "CLOSE_ALERT_CANCEL_LABEL": "ABBRECHEN",
50
50
  "LEAVE_ALERT_MSG": "Die Gruppe verlassen?",
@@ -65,7 +65,7 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chat wieder geöffnet",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chat geschlossen",
68
- "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU":"Ihnen wurde eine neue Support-Anfrage zugewiesen",
68
+ "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Ihnen wurde eine neue Support-Anfrage zugewiesen",
69
69
  "LABEL_PROFILE": "Profil",
70
70
  "LABEL_CLOSE": "Abgeschlossen",
71
71
  "LABEL_DISCONNECT": "Trennen",
@@ -203,7 +203,63 @@
203
203
  "PINNED_PROJECT": "Gepinntes Projekt",
204
204
  "CHANGE_PINNED_PROJECT": "Gepinntes Projekt ändern",
205
205
  "CHANGE_TO_AVAILABLE_UNAVAILABLE": "auf verfügbar/nicht verfügbar ändern",
206
- "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "ändern Sie Ihren Status auf verfügbar",
207
- "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "ändern Sie Ihren Status auf nicht verfügbar",
208
- "ALL_CONVS_SERVED":"Wurden alle Gespräche bedient? Gut gemacht!"
209
- }
206
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "Ändern Sie Ihren Status auf verfügbar",
207
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "Ändern Sie Ihren Status auf nicht verfügbar",
208
+ "ALL_CONVS_SERVED": "Wurden alle Gespräche bedient? Gut gemacht!",
209
+ "PaydPlanName": "{{projectprofile}}-Plan",
210
+ "PaydPlanNamePro": "Pro-Plan",
211
+ "PaydPlanNameEnterprise": "Enterprise-Plan",
212
+ "ProPlanTrial": "Pro-Plan (Testversion)",
213
+ "FreePlan": "Kostenloser Plan",
214
+ "SubscriptionPaymentProblem": "Problem mit der Zahlung des Abos",
215
+ "ThePlanHasExpired": "Der Plan ist abgelaufen",
216
+ "owner": "Eigentümer",
217
+ "admin": "Administrator",
218
+ "agent": "Agent",
219
+ "Conversations": "Gespräche",
220
+ "Apps": "Anwendungen",
221
+ "Analytics": "Analytik",
222
+ "Activities": "Aktivitäten",
223
+ "History": "Verlauf",
224
+ "Settings": "Einstellungen",
225
+ "Resolve": "Lösen",
226
+ "Archive": "Archivieren",
227
+ "ActionNotAllowed": "Aktion nicht erlaubt",
228
+ "YouAreNoLongerAmongTheTeammatesManagingThisConversation":"Sie gehören nicht mehr zu den Teamkollegen, die diese Unterhaltung führen",
229
+ "TicketSuccessfullyCreated": "Ticket erfolgreich erstellt",
230
+ "Continue":"Fortsetzen",
231
+ "ViewArchivedConversations":"Archivierte Gespräche",
232
+ "ViewContactsList":"Kontaktliste",
233
+ "AddAsCannedResponse":"Als Standardantwort hinzufügen",
234
+ "AddNewCannedResponse":"Fügen Sie eine neue Standardantwort hinzu",
235
+ "TitleIsRequired":"Titel ist erforderlich",
236
+ "MessageIsRequired":"Nachricht ist erforderlich",
237
+ "Already_present_in_the_dashboard_json":"........",
238
+ "CreateTicket": "Ticket erstellen",
239
+ "Requester": "Anfragesteller",
240
+ "ViewRequesterDetails": "Anfordererdetails anzeigen",
241
+ "Priority": "Priorität",
242
+ "urgent": "Dringend",
243
+ "high": "Hohe",
244
+ "medium": "Mittlere",
245
+ "low": "Niedrige",
246
+ "SelectRequester": "Anforderer auswählen",
247
+ "AddRequester": "Anforderer hinzufügen",
248
+ "Subject": "Betreff",
249
+ "SelectAssignee": "Wählen Sie den Empfänger aus",
250
+ "Message": "Nachrichte",
251
+ "CreateNewRequester": "Neuen Anforderer erstellen",
252
+ "Name": "Name",
253
+ "NameIsRequired": "Name ist erforderlich",
254
+ "EnterValidEmail": "Geben Sie eine gültige Email Adresse ein",
255
+ "Title": "Titel",
256
+ "Add": "Hinzufügen",
257
+ "AddCustomization": "Personalisierung hinzufügen",
258
+ "SelectACustomizationToAddToYourMessage": "Personalisierungs-Feld auswählen",
259
+ "recipient_name_desc": "Der Vorname eines Besuchers wird zur Nachricht hinzugefügt.",
260
+ "agent_name_desc": "Der Name des Betreuers wird zur Nachricht hinzugefügt.",
261
+ "First_name_of_recipient": "Vorname des Empfängers",
262
+ "First_name_of_agent": "Vorname des Betreuers",
263
+ "EnterCannedResponseTitle": "Titel der Vordefinierten Anfrage eingeben",
264
+ "WriteMsgToSendToYourVisitors": "Verfassen Sie eine vordefinierte Antwort für Ihre Besucher"
265
+ }
@@ -44,7 +44,7 @@
44
44
  "LABEL_VIDEO_CHAT": "Video call",
45
45
  "LABEL_LEAVE_GROUP": "Leave the group",
46
46
  "LABEL_CLOSE_GROUP": "Close",
47
- "ALERT_TITLE": "WARNING",
47
+ "ALERT_TITLE": "Attention!",
48
48
  "CLOSE_ALERT_CONFIRM_LABEL": "OK",
49
49
  "CLOSE_ALERT_CANCEL_LABEL": "CANCEL",
50
50
  "LEAVE_ALERT_MSG": "Leave the group?",
@@ -65,7 +65,7 @@
65
65
  "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
66
  "INFO_SUPPORT_CHAT_REOPENED": "Chat reopened",
67
67
  "INFO_SUPPORT_CHAT_CLOSED": "Chat closed",
68
- "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU":"A new support request has been assigned to you",
68
+ "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "A new support request has been assigned to you",
69
69
  "LABEL_PROFILE": "Profile",
70
70
  "LABEL_CLOSE": "Closed",
71
71
  "LABEL_DISCONNECT": "Disconnect",
@@ -108,7 +108,7 @@
108
108
  "LABEL_INFO_USER": "Info user",
109
109
  "LABEL_IS_WRITING": "typing",
110
110
  "LABEL_VERSION": "version",
111
- "LABEL_CONTACTS": "contacts",
111
+ "LABEL_CONTACTS": "Contacts",
112
112
  "LABEL_PLACEHOLDER": "type your message..",
113
113
  "LABEL_START_NW_CONV": "New conversation",
114
114
  "LABEL_FIRST_MSG": "Describe shortly your problem, you will be contacted by an agent.",
@@ -203,7 +203,63 @@
203
203
  "PINNED_PROJECT": "Pinned project",
204
204
  "CHANGE_PINNED_PROJECT": "Change pinned project",
205
205
  "CHANGE_TO_AVAILABLE_UNAVAILABLE": "change to available/unavailable",
206
- "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "change to your status to available",
207
- "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "change to your status to unavailable",
208
- "ALL_CONVS_SERVED": "Were all conversations served? Good job!"
206
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "Change your status to available",
207
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "Change your status to unavailable",
208
+ "ALL_CONVS_SERVED": "Were all conversations served? Good job!",
209
+ "PaydPlanName": "{{projectprofile}} Plan",
210
+ "PaydPlanNamePro": "Pro Plan",
211
+ "PaydPlanNameEnterprise": "Enterprise plan",
212
+ "ProPlanTrial": "Pro Plan (trial)",
213
+ "FreePlan":"Free Plan",
214
+ "SubscriptionPaymentProblem": "Subscription payment problem",
215
+ "ThePlanHasExpired": "The plan has expired",
216
+ "owner": "Owner",
217
+ "admin": "Administrator",
218
+ "agent": "Agent",
219
+ "Conversations": "Conversations",
220
+ "Apps":"Apps",
221
+ "Analytics":"Analytics",
222
+ "Activities": "Activities",
223
+ "History": "History",
224
+ "Settings": "Settings",
225
+ "Resolve": "Resolve",
226
+ "Archive": "Archive",
227
+ "ActionNotAllowed":"Action not allowed",
228
+ "YouAreNoLongerAmongTheTeammatesManagingThisConversation":"You are no longer among the teammates managing this conversation",
229
+ "TicketSuccessfullyCreated":"Ticket successfully created",
230
+ "Continue":"Continue",
231
+ "ViewArchivedConversations":"Archived conversations",
232
+ "ViewContactsList":"Contacts list",
233
+ "AddAsCannedResponse":"Add as canned response",
234
+ "AddNewCannedResponse":"Add a new canned response",
235
+ "TitleIsRequired":"Title is required",
236
+ "MessageIsRequired":"Message is required",
237
+ "Already_present_in_the_dashboard_json":"........",
238
+ "CreateTicket": "Create ticket",
239
+ "Requester": "Requester",
240
+ "ViewRequesterDetails": "View requester details",
241
+ "Priority": "Priority",
242
+ "urgent": "Urgent",
243
+ "high": "High",
244
+ "medium": "Medium",
245
+ "low": "Low",
246
+ "SelectRequester": "Select requester",
247
+ "AddRequester": "Add requester",
248
+ "Subject": "Subject",
249
+ "SelectAssignee": "Select assignee",
250
+ "Message": "Message",
251
+ "CreateNewRequester": "Create new requester",
252
+ "Name": "Name",
253
+ "NameIsRequired": "Name is required",
254
+ "EnterValidEmail": "Enter a valid email address",
255
+ "Title": "Title",
256
+ "Add": "Add",
257
+ "AddCustomization": "Add personalisation",
258
+ "SelectACustomizationToAddToYourMessage": "Select a personalisation value to add to message",
259
+ "recipient_name_desc": "The first name of the person the agent replying to will be added to message.",
260
+ "agent_name_desc": "The name of the agent who is replying will be added to the message.",
261
+ "First_name_of_recipient": "First name of recipient",
262
+ "First_name_of_agent": "First name of agent",
263
+ "EnterCannedResponseTitle": "Enter canned response title",
264
+ "WriteMsgToSendToYourVisitors": "Write a canned response message to send to your visitors"
209
265
  }