@chat21/chat21-ionic 3.4.27-rc2 → 3.4.27-rc21

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 (154) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/angular.json +1 -0
  3. package/package.json +1 -1
  4. package/src/app/app.component.html +3 -1
  5. package/src/app/app.component.ts +74 -24
  6. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.scss +3 -3
  7. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +1 -1
  8. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +1 -1
  9. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.html +1 -1
  10. package/src/app/chatlib/conversation-detail/message/avatar/avatar.component.ts +4 -4
  11. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.scss +3 -3
  12. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +9 -9
  13. package/src/app/components/bubbleMessageInfo-popover/bubbleinfo-popover.component.html +1 -1
  14. package/src/app/components/canned-response/canned-response.component.html +2 -2
  15. package/src/app/components/canned-response/canned-response.component.scss +0 -2
  16. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +8 -8
  17. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +23 -0
  18. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +30 -0
  19. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +35 -7
  20. package/src/app/components/conversation-info/info-content/info-content.component.ts +2 -2
  21. package/src/app/components/conversation-info/info-group/info-group.component.ts +23 -21
  22. package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.html +1 -1
  23. package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.ts +5 -1
  24. package/src/app/components/copilot-popover/copilot-popover.component.html +1 -1
  25. package/src/app/components/navbar/navbar.component.html +3 -3
  26. package/src/app/components/navbar/navbar.component.ts +29 -38
  27. package/src/app/components/project-item/project-item.component.ts +11 -11
  28. package/src/app/components/sidebar/sidebar.component.html +67 -47
  29. package/src/app/components/sidebar/sidebar.component.ts +110 -117
  30. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +4 -4
  31. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +17 -14
  32. package/src/app/modals/create-ticket/create-ticket.page.html +6 -6
  33. package/src/app/modals/create-ticket/create-ticket.page.ts +4 -4
  34. package/src/app/modals/loader-preview/loader-preview.page.ts +1 -1
  35. package/src/app/modals/send-whatsapp-template/send-whatsapp-template.page.scss +1 -1
  36. package/src/app/pages/conversation-detail/conversation-detail.page.html +3 -1
  37. package/src/app/pages/conversation-detail/conversation-detail.page.scss +1 -1
  38. package/src/app/pages/conversation-detail/conversation-detail.page.ts +47 -5
  39. package/src/app/pages/conversations-list/conversations-list.page.html +2 -0
  40. package/src/app/pages/conversations-list/conversations-list.page.ts +48 -10
  41. package/src/app/pages/profile-info/profile-info.page.ts +3 -3
  42. package/src/app/services/brand/brand.service.ts +5 -5
  43. package/src/app/services/global-settings/global-settings.service.ts +12 -3
  44. package/src/app/services/nav-proxy.service.ts +0 -1
  45. package/src/app/services/triggerEvents/triggerEvents.ts +28 -0
  46. package/src/app/services/websocket/websocket-js.ts +95 -77
  47. package/src/app/shared/shared.module.ts +11 -2
  48. package/src/app/utils/globals.ts +2 -0
  49. package/src/app/utils/permissions.constants.ts +14 -11
  50. package/src/app/utils/utils-resources.ts +8 -7
  51. package/src/assets/i18n/ar.json +11 -1
  52. package/src/assets/i18n/az.json +11 -1
  53. package/src/assets/i18n/de.json +11 -1
  54. package/src/assets/i18n/en.json +11 -1
  55. package/src/assets/i18n/es.json +11 -1
  56. package/src/assets/i18n/fr.json +11 -1
  57. package/src/assets/i18n/it.json +13 -3
  58. package/src/assets/i18n/kk.json +11 -1
  59. package/src/assets/i18n/pt.json +11 -1
  60. package/src/assets/i18n/ru.json +11 -1
  61. package/src/assets/i18n/sr.json +11 -1
  62. package/src/assets/i18n/sv.json +11 -1
  63. package/src/assets/i18n/tr.json +11 -1
  64. package/src/assets/i18n/uk.json +11 -1
  65. package/src/assets/i18n/uz.json +12 -1
  66. package/src/assets/js/agentDesktop-sdk.js +55 -0
  67. package/src/chat-config-template.json +1 -0
  68. package/src/chat-config.json +1 -0
  69. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +3 -0
  70. package/src/chat21-core/utils/constants.ts +2 -2
  71. package/src/chat21-core/utils/utils.ts +16 -2
  72. /package/src/assets/{images → img}/channel_icons/chat21.svg +0 -0
  73. /package/src/assets/{images → img}/channel_icons/direct.svg +0 -0
  74. /package/src/assets/{images → img}/channel_icons/email-logo.svg +0 -0
  75. /package/src/assets/{images → img}/channel_icons/form-logo_v2.svg +0 -0
  76. /package/src/assets/{images → img}/channel_icons/group.svg +0 -0
  77. /package/src/assets/{images → img}/channel_icons/messenger-logo.svg +0 -0
  78. /package/src/assets/{images → img}/channel_icons/telegram-logo.svg +0 -0
  79. /package/src/assets/{images → img}/channel_icons/voice.svg +0 -0
  80. /package/src/assets/{images → img}/channel_icons/whatsapp-logo.svg +0 -0
  81. /package/src/assets/{images → img}/default-avatar-x-select.png +0 -0
  82. /package/src/assets/{images → img}/f21ico-done.svg +0 -0
  83. /package/src/assets/{images → img}/f21ico-done_all.svg +0 -0
  84. /package/src/assets/{images → img}/f21ico-schedule.svg +0 -0
  85. /package/src/assets/{images → img}/file-alt-solid.png +0 -0
  86. /package/src/assets/{images → img}/icons/copilot.svg +0 -0
  87. /package/src/assets/{images → img}/json-file.svg +0 -0
  88. /package/src/assets/{images → img}/language_flag/ar.png +0 -0
  89. /package/src/assets/{images → img}/language_flag/az.png +0 -0
  90. /package/src/assets/{images → img}/language_flag/bg.png +0 -0
  91. /package/src/assets/{images → img}/language_flag/ca.png +0 -0
  92. /package/src/assets/{images → img}/language_flag/cs.png +0 -0
  93. /package/src/assets/{images → img}/language_flag/da.png +0 -0
  94. /package/src/assets/{images → img}/language_flag/de.png +0 -0
  95. /package/src/assets/{images → img}/language_flag/el.png +0 -0
  96. /package/src/assets/{images → img}/language_flag/en.png +0 -0
  97. /package/src/assets/{images → img}/language_flag/es.png +0 -0
  98. /package/src/assets/{images → img}/language_flag/fa.png +0 -0
  99. /package/src/assets/{images → img}/language_flag/fi.png +0 -0
  100. /package/src/assets/{images → img}/language_flag/fr.png +0 -0
  101. /package/src/assets/{images → img}/language_flag/he.png +0 -0
  102. /package/src/assets/{images → img}/language_flag/hi.png +0 -0
  103. /package/src/assets/{images → img}/language_flag/hr.png +0 -0
  104. /package/src/assets/{images → img}/language_flag/hu.png +0 -0
  105. /package/src/assets/{images → img}/language_flag/id.png +0 -0
  106. /package/src/assets/{images → img}/language_flag/it.png +0 -0
  107. /package/src/assets/{images → img}/language_flag/ja.png +0 -0
  108. /package/src/assets/{images → img}/language_flag/kk.png +0 -0
  109. /package/src/assets/{images → img}/language_flag/ko.png +0 -0
  110. /package/src/assets/{images → img}/language_flag/ml-IN.png +0 -0
  111. /package/src/assets/{images → img}/language_flag/ne-NP.png +0 -0
  112. /package/src/assets/{images → img}/language_flag/nl.png +0 -0
  113. /package/src/assets/{images → img}/language_flag/no.png +0 -0
  114. /package/src/assets/{images → img}/language_flag/pl.png +0 -0
  115. /package/src/assets/{images → img}/language_flag/pt-BR.png +0 -0
  116. /package/src/assets/{images → img}/language_flag/pt.png +0 -0
  117. /package/src/assets/{images → img}/language_flag/ro.png +0 -0
  118. /package/src/assets/{images → img}/language_flag/ru.png +0 -0
  119. /package/src/assets/{images → img}/language_flag/sk.png +0 -0
  120. /package/src/assets/{images → img}/language_flag/sl.png +0 -0
  121. /package/src/assets/{images → img}/language_flag/sr.png +0 -0
  122. /package/src/assets/{images → img}/language_flag/sv.png +0 -0
  123. /package/src/assets/{images → img}/language_flag/ta.png +0 -0
  124. /package/src/assets/{images → img}/language_flag/th.png +0 -0
  125. /package/src/assets/{images → img}/language_flag/tr.png +0 -0
  126. /package/src/assets/{images → img}/language_flag/uk.png +0 -0
  127. /package/src/assets/{images → img}/language_flag/uz.png +0 -0
  128. /package/src/assets/{images → img}/language_flag/vi.png +0 -0
  129. /package/src/assets/{images → img}/language_flag/zh-CN.png +0 -0
  130. /package/src/assets/{images → img}/language_flag/zh-TW.png +0 -0
  131. /package/src/assets/{logos → img/logos}/chat21-logo.png +0 -0
  132. /package/src/assets/{logos → img/logos}/logo.png +0 -0
  133. /package/src/assets/{logos → img/logos}/tiledesk-logo_new_white.svg +0 -0
  134. /package/src/assets/{logos → img/logos}/tiledesk-solo-logo.png +0 -0
  135. /package/src/assets/{logos → img/logos}/tiledesk_logo.svg +0 -0
  136. /package/src/assets/{logos → img/logos}/tiledesk_logo_no_text.svg +0 -0
  137. /package/src/assets/{logos → img/logos}/tiledesk_logo_white_small.svg +0 -0
  138. /package/src/assets/{images → img}/no_conversation.jpg +0 -0
  139. /package/src/assets/{images → img}/no_image.png +0 -0
  140. /package/src/assets/{images → img}/no_image_user.png +0 -0
  141. /package/src/assets/{images → img}/pin.svg +0 -0
  142. /package/src/assets/{images → img}/pinned.svg +0 -0
  143. /package/src/assets/{images → img}/priority_icons/high.svg +0 -0
  144. /package/src/assets/{images → img}/priority_icons/high_v2.svg +0 -0
  145. /package/src/assets/{images → img}/priority_icons/low.svg +0 -0
  146. /package/src/assets/{images → img}/priority_icons/low_v2.svg +0 -0
  147. /package/src/assets/{images → img}/priority_icons/medium.svg +0 -0
  148. /package/src/assets/{images → img}/priority_icons/medium_v2.svg +0 -0
  149. /package/src/assets/{images → img}/priority_icons/urgent.svg +0 -0
  150. /package/src/assets/{images → img}/priority_icons/urgent_v2.svg +0 -0
  151. /package/src/assets/{images → img}/teammate-status/avaible.svg +0 -0
  152. /package/src/assets/{images → img}/teammate-status/inactive.svg +0 -0
  153. /package/src/assets/{images → img}/teammate-status/unavaible.svg +0 -0
  154. /package/src/assets/{images → img}/whatsapp_background.png +0 -0
package/CHANGELOG.md CHANGED
@@ -8,6 +8,71 @@
8
8
  ### **Copyrigth**:
9
9
  *Tiledesk SRL*
10
10
 
11
+ # 3.4.27-rc21
12
+ - **changed**: new wss reconnect and timeout keepalive
13
+ - **bug-fixed**: cannot route if senderFullaname contains /
14
+
15
+ # 3.4.27-rc20
16
+ - **added**: onOpenTicketExternally event in triggerEvents service
17
+
18
+ # 3.4.27-rc19
19
+ - **added**: window.parent['openTicketOnHDA']
20
+
21
+ # 3.4.27-rc18
22
+ - **added**: triggerOnUpdateNewConversationBadge to update conversation badge count in parent component
23
+
24
+ # 3.4.27-rc17
25
+ - **bug-fixed**: setNotification not called when click on a conversation
26
+
27
+ # 3.4.27-rc16
28
+ - **bug-fixed**: setNotification not called when resolve a conversation
29
+
30
+ # 3.4.27-rc15
31
+ - **changed**: /images with /img in assets folder
32
+
33
+ # 3.4.27-rc14
34
+ - **added**: DISPLAY_EDIT_PROFILE brand variable
35
+ - **bug-fixed**: emojii is sent also if is not allowed
36
+
37
+ # 3.4.27-rc13
38
+ - **added**: ability to mantain logout parameter when redirect to dashboard urls from sidebar component
39
+
40
+ # 3.4.27-rc12
41
+ - **added**: ability to manage logOut option in sidebar-user-detail with tiledesk_logOut url query params
42
+
43
+ # 3.4.27-rc11
44
+ - **bug-fixed**: fixed infinite loading in contact list
45
+
46
+ # 3.4.27-rc10
47
+ - **added**: ability to manage header-conversation-list with roles
48
+ - **bug-fixed**: members in group list not loaded
49
+
50
+ # 3.4.27-rc9
51
+ - **bug-fixed**: Scrolling to the last message when opening a conversation
52
+ - **bug-fixed**: Loading in the conversation list disabled when removing the last conversation
53
+
54
+ # 3.4.27-rc8
55
+ - **added**: ability to open ticket to external service
56
+ - **added**: ticketSection env var
57
+
58
+ # 3.4.27-rc7
59
+ - **bug-fixed**: Scrolling to the last message when opening a conversation
60
+ - **bug-fixed**: Loading in the conversation list disabled when removing the last conversation
61
+
62
+ # 3.4.27-rc6
63
+ - **bug-fixed**: user for dashboard app is incorrect
64
+
65
+ # 3.4.27-rc5
66
+ - **added**: managed roles in sidebar e navbar
67
+ - **bug-fixed**: projectId and supportMode url is not saved in localstorage
68
+
69
+ # 3.4.27-rc4
70
+ - **bug-fixed**: extractUrls function is not able to detect url start with www or without https/http
71
+ - **bug-fixed**: if message is sent with keydown, error on domain check is not showed
72
+
73
+ # 3.4.27-rc3
74
+ - **bug-fixed**: cannot set user availability if supportMode is enabled and tiledesk_projectID url params is set
75
+
11
76
  # 3.4.27-rc2
12
77
  - **bug-fixed**: cannede responses role
13
78
 
package/angular.json CHANGED
@@ -32,6 +32,7 @@
32
32
  "src/chat-config-template.json",
33
33
  "src/chat-config.json",
34
34
  "src/chat-config-dev.json",
35
+ "src/chat-config-native-ar.json",
35
36
  {
36
37
  "glob": "**/*",
37
38
  "input": "src/assets",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@chat21/chat21-ionic",
3
3
  "author": "Tiledesk SRL",
4
- "version": "3.4.27-rc2",
4
+ "version": "3.4.27-rc21",
5
5
  "license": "MIT License",
6
6
  "homepage": "https://tiledesk.com/",
7
7
  "repository": {
@@ -21,7 +21,9 @@
21
21
  </div> -->
22
22
 
23
23
  <div class="user-details-sidebar" [ngClass]="{'hide-sidebar': IS_ONLINE === false || IS_ON_MOBILE_DEVICE || SUPPORT_MODE === false}">
24
- <app-sidebar-user-details> </app-sidebar-user-details>
24
+ <app-sidebar-user-details
25
+ [logOut]="g?.logOut">
26
+ </app-sidebar-user-details>
25
27
  </div>
26
28
 
27
29
  <ion-split-pane when="md" contentId="main" [ngClass]="{'mobile': IS_ON_MOBILE_DEVICE, 'sidebar-hidden': IS_ON_MOBILE_DEVICE || SUPPORT_MODE === false}">
@@ -44,6 +44,8 @@ import { conversationToMessage } from 'src/chat21-core/utils/utils-message';
44
44
  import { ProjectService } from './services/projects/project.service';
45
45
  import { ContactsService } from './services/contacts/contacts.service';
46
46
  import { TiledeskService } from './services/tiledesk/tiledesk.service';
47
+ import { Project } from 'src/chat21-core/models/projects';
48
+ import { BRAND_BASE_INFO } from './utils/utils-resources';
47
49
  import { ProjectUsersService } from './services/project_users/project-users.service';
48
50
 
49
51
  @Component({
@@ -299,6 +301,10 @@ export class AppComponent implements OnInit {
299
301
  this.zone = new NgZone({}); // a cosa serve?
300
302
 
301
303
  this.SUPPORT_MODE = this.g.supportMode
304
+ this.logger.info('[APP-COMP] this.SUPPORT_MODE', this.SUPPORT_MODE)
305
+
306
+ BRAND_BASE_INFO['LOGOUT_ENABLED'] = this.g.logOut
307
+ this.logger.info('[APP-COMP] this.logOut', BRAND_BASE_INFO['LOGOUT_ENABLED'])
302
308
  }
303
309
 
304
310
  });
@@ -867,7 +873,8 @@ export class AppComponent implements OnInit {
867
873
  // console.log('[APP-COMP] PLATFORM', PLATFORM_MOBILE, 'route.snapshot', this.route.snapshot);
868
874
  if (!IDConv) {
869
875
  this.logger.log('[APP-COMP] navigateByUrl -- conversations-list');
870
- this.router.navigateByUrl('conversations-list')
876
+ const queryString = window.location.search; // restituisce ad es. "?jwt=...&tiledesk_supportMode=false"
877
+ this.router.navigateByUrl('conversations-list' + queryString);
871
878
  }
872
879
  // this.router.navigateByUrl(pageUrl);
873
880
  // this.navService.setRoot(ConversationListPage, {});
@@ -889,10 +896,15 @@ export class AppComponent implements OnInit {
889
896
 
890
897
  let pageUrl = 'conversation-detail/'
891
898
  if (IDConv && FullNameConv) {
892
- pageUrl += IDConv + '/' + FullNameConv + '/' + Convtype
899
+ pageUrl += IDConv + '/' + encodeURIComponent(FullNameConv) + '/' + Convtype
893
900
  }
901
+
902
+ const queryParams = this.route.snapshot.queryParams;
903
+ const queryString = new URLSearchParams(queryParams).toString();
904
+ pageUrl += queryString ? `?${queryString}` : '';
905
+
894
906
  // replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
895
- this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29').replace( /#/g, "%23" ));
907
+ this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'));
896
908
 
897
909
 
898
910
  // const DASHBOARD_URL = this.appConfigProvider.getConfig().DASHBOARD_URL;
@@ -1113,14 +1125,19 @@ export class AppComponent implements OnInit {
1113
1125
  if (conversation && conversation.is_new === true && this.isInitialized) {
1114
1126
  this.manageTabNotification('conv_added', conversation.sound)
1115
1127
  this.manageEventNewConversation(conversation)
1116
- this.setNotification();
1128
+ //UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
1129
+ this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
1117
1130
  }
1118
1131
  if(conversation) this.updateConversationsOnStorage()
1119
1132
  });
1120
1133
 
1121
1134
  this.conversationsHandlerService.conversationChanged.subscribe((conversation: ConversationModel) => {
1122
1135
  // console.log('[APP-COMP] ***** subscribeConversationChanged conversation: ', conversation);
1123
- if(conversation) this.updateConversationsOnStorage();
1136
+ if(conversation){
1137
+ this.updateConversationsOnStorage();
1138
+ //UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
1139
+ this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
1140
+ }
1124
1141
  });
1125
1142
 
1126
1143
  this.conversationsHandlerService.conversationChangedDetailed.subscribe((changes: {value: ConversationModel, previousValue: ConversationModel}) => {
@@ -1144,6 +1161,8 @@ export class AppComponent implements OnInit {
1144
1161
  if(conversation) {
1145
1162
  this.updateConversationsOnStorage();
1146
1163
  this.segmentResolved(conversation);
1164
+ //UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
1165
+ this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
1147
1166
  this.router.navigateByUrl('conversation-detail/'); //redirect to basePage
1148
1167
  }
1149
1168
  });
@@ -1182,11 +1201,14 @@ export class AppComponent implements OnInit {
1182
1201
  this.contactsService.initialize(serverBaseURL)
1183
1202
  // this.chatManager.startApp();
1184
1203
 
1204
+
1205
+ //INIT WEBSOCKET
1206
+ this.connetWebsocket(tiledeskToken)
1207
+
1185
1208
  // ----------------------------------------------
1186
1209
  // PUSH NOTIFICATIONS
1187
1210
  // ----------------------------------------------
1188
1211
  const pushEngine = this.appConfigProvider.getConfig().pushEngine
1189
-
1190
1212
  if (currentUser) {
1191
1213
  if (pushEngine && pushEngine !== 'none') {
1192
1214
  this.notificationsService.getNotificationPermissionAndSaveToken(currentUser.uid);
@@ -1208,6 +1230,24 @@ export class AppComponent implements OnInit {
1208
1230
  } catch (err) {
1209
1231
  this.logger.error('[APP-COMP] -> error:', err);
1210
1232
  }
1233
+
1234
+ // ----------------------------------------------
1235
+ // LAST PROJECT FROM URL
1236
+ // ----------------------------------------------
1237
+ if(this.g.projectID){
1238
+ this.projectService.getProjects().subscribe({ next: (projects: Project[]) => {
1239
+ const project = projects.find(prjct => prjct.id_project._id === this.g.projectID)
1240
+ if(project){
1241
+ this.logger.log('[APP-COMP] - GET PROJECT - project found with this.projectID', project);
1242
+ localStorage.setItem('last_project', JSON.stringify(project))
1243
+ this.events.publish('storage:last_project', project)
1244
+ }
1245
+ }, error: (error) => {
1246
+ this.logger.log('[APP-COMP] - GET PROJECT - project NOT found with this.projectID', this.g.projectID, error);
1247
+ }, complete: () => {
1248
+
1249
+ }});
1250
+ }
1211
1251
  }
1212
1252
 
1213
1253
 
@@ -1248,9 +1288,24 @@ export class AppComponent implements OnInit {
1248
1288
  }
1249
1289
 
1250
1290
  goToDashboardLogin(){
1251
- let DASHBOARD_URL = this.appConfigProvider.getConfig().dashboardUrl + '#/login'
1252
- const myWindow = window.open(DASHBOARD_URL, '_self');
1253
- myWindow.focus();
1291
+ // let DASHBOARD_URL = this.appConfigProvider.getConfig().dashboardUrl + '#/login'
1292
+ // const myWindow = window.open(DASHBOARD_URL, '_self');
1293
+ // myWindow.focus();
1294
+ }
1295
+
1296
+ connetWebsocket(tiledeskToken) {
1297
+
1298
+ this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] tiledeskToken ', tiledeskToken)
1299
+ const appconfig = this.appConfigProvider.getConfig();
1300
+ this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', appconfig.wsUrl)
1301
+ const WS_URL = appconfig.wsUrl + '?token=' + tiledeskToken
1302
+ this.logger.log('[WEBSOCKET-JS] connetWebsocket called in [PROJECT-ITEM] wsUrl ', WS_URL)
1303
+ this.webSocketJs.init(
1304
+ WS_URL,
1305
+ undefined,
1306
+ undefined,
1307
+ undefined
1308
+ );
1254
1309
  }
1255
1310
 
1256
1311
 
@@ -1301,7 +1356,7 @@ export class AppComponent implements OnInit {
1301
1356
  subscribeChangedConversationSelected = (user: UserModel, type: string) => {
1302
1357
  this.logger.log('[APP-COMP] subscribeUidConvSelectedChanged navigateByUrl', user, type);
1303
1358
  // this.router.navigateByUrl('conversation-detail/' + user.uid + '?conversationWithFullname=' + user.fullname);
1304
- this.router.navigateByUrl('conversation-detail/' + user.uid + '/' + user.fullname + '/' + type);
1359
+ this.router.navigateByUrl('conversation-detail/' + user.uid + '/' + encodeURIComponent(user.fullname) + '/' + type);
1305
1360
  }
1306
1361
 
1307
1362
  subscribeProfileInfoButtonLogOut = (hasClickedLogout) => {
@@ -1351,8 +1406,6 @@ export class AppComponent implements OnInit {
1351
1406
  if(conversation && conversation.is_new){
1352
1407
  this.audio_NewConv.pause();
1353
1408
  this.conversationsHandlerService.setConversationRead(conversation.uid)
1354
- //UPDATE NOTIFICATION FOR NEW CONVERSATION COUNT
1355
- this.setNotification();
1356
1409
  }
1357
1410
  }
1358
1411
 
@@ -1430,7 +1483,7 @@ export class AppComponent implements OnInit {
1430
1483
  }
1431
1484
 
1432
1485
  //INIT NOTIFICATION FOR NEW CONVERSATION COUNT
1433
- this.setNotification();
1486
+ this.triggerOnUpdateNewConversationBadge(this.conversationsHandlerService.countIsNew());
1434
1487
  });
1435
1488
 
1436
1489
  }
@@ -1479,10 +1532,10 @@ export class AppComponent implements OnInit {
1479
1532
  let Convtype = 'active'
1480
1533
 
1481
1534
  if (IDConv && FullNameConv) {
1482
- pageUrl += IDConv + '/' + FullNameConv + '/' + Convtype
1535
+ pageUrl += IDConv + '/' + encodeURIComponent(FullNameConv) + '/' + Convtype
1483
1536
  }
1484
1537
  // replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
1485
- this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29').replace( /#/g, "%23" ));
1538
+ this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'));
1486
1539
  } else {
1487
1540
  console.log("FCM: Received in foreground", JSON.stringify(data));
1488
1541
  // let IDConv = data.recipient
@@ -1493,7 +1546,7 @@ export class AppComponent implements OnInit {
1493
1546
  // pageUrl += IDConv + '/' + FullNameConv + '/' + Convtype
1494
1547
  // }
1495
1548
  // // replace(/\(/g, '%28').replace(/\)/g, '%29') -> used for the encoder of any round brackets
1496
- // this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29').replace( /#/g, "%23" ));
1549
+ // this.router.navigateByUrl(pageUrl.replace(/\(/g, '%28').replace(/\)/g, '%29'));
1497
1550
  };
1498
1551
  });
1499
1552
  }
@@ -1647,14 +1700,6 @@ export class AppComponent implements OnInit {
1647
1700
  this.triggerEvents.triggerOnNewConversationInit(conversation)
1648
1701
  }
1649
1702
 
1650
- private setNotification() {
1651
- this.logger.log('[APP-COMP] setNotification for NEW CONVERSATION');
1652
- if(window['AGENTDESKTOP']){
1653
- this.logger.log('[APP-COMP] manageNotification AGENTDESKTOP exist', window['AGENTDESKTOP']);
1654
- window['AGENTDESKTOP']['TAB'].Badge(this.conversationsHandlerService.countIsNew().toString())
1655
- }
1656
- }
1657
-
1658
1703
 
1659
1704
  @HostListener('document:visibilitychange', [])
1660
1705
  visibilitychange() {
@@ -1721,6 +1766,11 @@ export class AppComponent implements OnInit {
1721
1766
  this.triggerEvents.triggerOnInit(detailOBJ)
1722
1767
  }
1723
1768
 
1769
+ private triggerOnUpdateNewConversationBadge(count: number){
1770
+ const detailOBJ = { event: 'onUpdateNewConversationBadge', count: count.toString() }
1771
+ this.triggerEvents.triggerOnUpdateNewConversationBadge(detailOBJ)
1772
+ }
1773
+
1724
1774
 
1725
1775
  // @HostListener('mouseenter', ['$event'])
1726
1776
  // onMouseEnter(event: any) {
@@ -205,13 +205,13 @@
205
205
  // overflow-x: hidden;
206
206
  // }
207
207
  // .c21-ico-schedule {
208
- // background-image: url("src/assets/images/f21ico-schedule.svg");
208
+ // background-image: url("src/assets/img/f21ico-schedule.svg");
209
209
  // }
210
210
  // .c21-ico-done {
211
- // background-image: url("src/assets/images/f21ico-done.svg");
211
+ // background-image: url("src/assets/img/f21ico-done.svg");
212
212
  // }
213
213
  // .c21-ico-done_all {
214
- // background-image: url("src/assets/images/f21ico-done_all.svg");
214
+ // background-image: url("src/assets/img/f21ico-done_all.svg");
215
215
  // }
216
216
  // }
217
217
 
@@ -58,7 +58,7 @@ export class ConversationContentComponent implements OnInit {
58
58
  MESSAGE_TYPE_OTHERS = MESSAGE_TYPE_OTHERS;
59
59
  // ========== end:: check message type functions ======= //
60
60
 
61
- urlBOTImage = 'https://s3.eu-west-1.amazonaws.com/tiledesk-widget/dev/2.0.4-beta.7/assets/images/avatar_bot_tiledesk.svg'
61
+ urlBOTImage = 'https://s3.eu-west-1.amazonaws.com/tiledesk-widget/dev/2.0.4-beta.7/assets/img/avatar_bot_tiledesk.svg'
62
62
  uploadProgress: number;
63
63
  showUploadProgress: boolean = false;
64
64
  fileType: string;
@@ -184,7 +184,7 @@
184
184
  <ng-container *ngIf="isCopilotEnabled">
185
185
  <ion-button shape="round" size="small" class="btn-info-msg btn-copilot" ion-button fill="clear"
186
186
  (click)="onClickOptionsCopilot(message, i)">
187
- <ion-icon id="copilot" src="assets/images/icons/copilot.svg"></ion-icon>
187
+ <ion-icon id="copilot" src="assets/img/icons/copilot.svg"></ion-icon>
188
188
  </ion-button>
189
189
  </ng-container>
190
190
 
@@ -1,6 +1,6 @@
1
1
  <div class="c21-icon-avatar">
2
2
  <div class="c21-avatar-image profile_image">
3
- <!-- <img src="getUrlImgProfile(message.sender) {{getUrlImgProfile(message.sender)}}" onError="this.src = 'https://s3.eu-west-1.amazonaws.com/tiledesk-widget/v2/assets/images/line_avatar_male_tiledesk.svg'" /> -->
3
+ <!-- <img src="getUrlImgProfile(message.sender) {{getUrlImgProfile(message.sender)}}" onError="this.src = 'https://s3.eu-west-1.amazonaws.com/tiledesk-widget/v2/assets/img/line_avatar_male_tiledesk.svg'" /> -->
4
4
  <!-- <img [src]="url" (error)="onBotImgError($event)" /> -->
5
5
  <img *ngIf="senderID?.indexOf('bot_') !== -1 || senderFullname === 'Bot'" [src]="url" (error)="onBotImgError($event)" (load)="onLoadedBot($event)"/>
6
6
  <!-- is a HUMAN -->
@@ -17,18 +17,18 @@ export class AvatarComponent implements OnInit {
17
17
  if(this.senderID){
18
18
  this.url = this.imageRepoService.getImagePhotoUrl(this.senderID)
19
19
  if(!this.url && (this.senderID.indexOf('bot_') !== -1 || this.senderFullname === 'Bot')){
20
- this.url = this.baseLocation +'/assets/images/avatar_bot_tiledesk.svg'
20
+ this.url = this.baseLocation +'/assets/img/avatar_bot_tiledesk.svg'
21
21
  }else if(!this.url && this.senderID.indexOf('bot_') == -1){
22
- this.url = this.baseLocation +'/assets/images/light_avatar_placeholder.svg'
22
+ this.url = this.baseLocation +'/assets/img/light_avatar_placeholder.svg'
23
23
  }
24
24
  }
25
25
  }
26
26
 
27
27
  onBotImgError(event){
28
- event.target.src = this.baseLocation +'/assets/images/avatar_bot_tiledesk.svg'
28
+ event.target.src = this.baseLocation +'/assets/img/avatar_bot_tiledesk.svg'
29
29
  }
30
30
  onHumanImgError(event) {
31
- event.target.src = this.baseLocation + "/assets/images/light_avatar_placeholder.svg"
31
+ event.target.src = this.baseLocation + "/assets/img/light_avatar_placeholder.svg"
32
32
  }
33
33
 
34
34
  onLoadedBot(event){
@@ -16,12 +16,12 @@
16
16
  }
17
17
 
18
18
  .c21-ico-schedule {
19
- background-image: url("/src/assets/images/f21ico-schedule.svg");
19
+ background-image: url("/src/assets/img/f21ico-schedule.svg");
20
20
  }
21
21
  .c21-ico-done {
22
- background-image: url("/src/assets/images/f21ico-done.svg");
22
+ background-image: url("/src/assets/img/f21ico-done.svg");
23
23
  }
24
24
  .c21-ico-done_all {
25
- background-image: url("/src/assets/images/f21ico-done_all.svg");
25
+ background-image: url("/src/assets/img/f21ico-done_all.svg");
26
26
  }
27
27
  }
@@ -96,23 +96,23 @@
96
96
  <div class="conversation_project truncate">
97
97
  <!-- DIRECT CONV -->
98
98
  <div *ngIf="conversation.channel_type === CHANNEL_TYPE.DIRECT">
99
- <img class="channel-icon" src="assets/images/channel_icons/direct.svg">
99
+ <img class="channel-icon" src="assets/img/channel_icons/direct.svg">
100
100
  <span class="truncate">{{translationsMap.get('DIRECT_CHAT')}}</span>
101
101
  </div>
102
102
  <!-- GROUP CONV -->
103
103
  <div *ngIf="conversation.uid.startsWith(CHANNEL_TYPE.GROUP)">
104
- <img class="channel-icon" src="assets/images/channel_icons/group.svg">
104
+ <img class="channel-icon" src="assets/img/channel_icons/group.svg">
105
105
  <span class="truncate">{{translationsMap.get('GROUP_CHAT')}}</span>
106
106
  </div>
107
107
  <!-- SUPPORT-GROUP CONV -->
108
108
  <div *ngIf="conversation.uid.startsWith(CHANNEL_TYPE.SUPPORT_GROUP) && !IS_ON_MOBILE_DEVICE">
109
- <img class="channel-icon" src="assets/images/channel_icons/chat21.svg" *ngIf="conversation?.attributes && ( (conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.CHAT21) || !conversation?.attributes?.request_channel) " >
110
- <img class="channel-icon" src="assets/images/channel_icons/email-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.EMAIL" >
111
- <img class="channel-icon" src="assets/images/channel_icons/form-logo_v2.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.FORM" >
112
- <img class="channel-icon" src="assets/images/channel_icons/messenger-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.MESSENGER" >
113
- <img class="channel-icon" src="assets/images/channel_icons/whatsapp-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.WHATSAPP" >
114
- <img class="channel-icon" src="assets/images/channel_icons/telegram-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.TELEGRAM" >
115
- <img class="channel-icon" src="assets/images/channel_icons/voice.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel.startsWith(CHANNEL_TYPE.VOICE)" >
109
+ <img class="channel-icon" src="assets/img/channel_icons/chat21.svg" *ngIf="conversation?.attributes && ( (conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.CHAT21) || !conversation?.attributes?.request_channel) " >
110
+ <img class="channel-icon" src="assets/img/channel_icons/email-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.EMAIL" >
111
+ <img class="channel-icon" src="assets/img/channel_icons/form-logo_v2.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.FORM" >
112
+ <img class="channel-icon" src="assets/img/channel_icons/messenger-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.MESSENGER" >
113
+ <img class="channel-icon" src="assets/img/channel_icons/whatsapp-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.WHATSAPP" >
114
+ <img class="channel-icon" src="assets/img/channel_icons/telegram-logo.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel === CHANNEL_TYPE.TELEGRAM" >
115
+ <img class="channel-icon" src="assets/img/channel_icons/voice.svg" *ngIf="conversation?.attributes && conversation?.attributes?.request_channel && conversation?.attributes?.request_channel.startsWith(CHANNEL_TYPE.VOICE)" >
116
116
  <span *ngIf="conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.project_name}}</span>
117
117
  <span *ngIf="!conversation?.attributes?.project_name" class="truncate">{{conversation?.attributes?.projectId}}</span>
118
118
  </div>
@@ -9,7 +9,7 @@
9
9
  <ion-label>{{translationsMap?.get('AddAsCannedResponse')}}</ion-label>
10
10
  </ion-item>
11
11
  <ion-item button="true" *ngIf="logLevel >= LogLevel.DEBUG" (click)="onClickOption('jsonInfo')">
12
- <ion-icon src="assets/images/json-file.svg" slot="start"></ion-icon>
12
+ <ion-icon src="assets/img/json-file.svg" slot="start"></ion-icon>
13
13
  <ion-label>{{translationsMap?.get('JSON_RESPONSE')}}</ion-label>
14
14
  </ion-item>
15
15
  </ion-list>
@@ -9,8 +9,8 @@
9
9
  <ion-input [class.readonly]="canned?.disabled" [readonly]="canned?.disabled" type="text" [(ngModel)]="canned.title" class="title" id="{{'titleCanned_'+canned._id}}" #title></ion-input>
10
10
  <ion-input [class.readonly]="canned?.disabled" [readonly]="canned?.disabled" type="text" [(ngModel)]="canned.text" class="text truncate"></ion-input>
11
11
  </div>
12
- <!-- <ion-icon class="canned-item-icon" name="pin" src="assets/images/pin.svg" slot=end *ngIf="canned.pinned" (click)="onPinCanned(canned, $event)"></ion-icon>
13
- <ion-icon class="canned-item-icon" name="pin" src="assets/images/pinned.svg" slot=end (click)="onUnPinCanned(canned, $event)"></ion-icon> -->
12
+ <!-- <ion-icon class="canned-item-icon" name="pin" src="assets/img/pin.svg" slot=end *ngIf="canned.pinned" (click)="onPinCanned(canned, $event)"></ion-icon>
13
+ <ion-icon class="canned-item-icon" name="pin" src="assets/img/pinned.svg" slot=end (click)="onUnPinCanned(canned, $event)"></ion-icon> -->
14
14
  <ion-icon class="canned-item-icon" name="checkmark-sharp" slot=end *ngIf="(canned.createdBy === loggedUser.uid && !canned.disabled) && roles[PERMISSIONS.CANNED_RESPONSES_UPDATE]" (click)="onConfirmEditCanned(canned, $event)"></ion-icon>
15
15
  <ion-icon class="canned-item-icon" name="pencil-sharp" slot=end *ngIf="(canned.createdBy === loggedUser.uid && canned.disabled) && roles[PERMISSIONS.CANNED_RESPONSES_UPDATE]" (click)="onEditCanned(canned, $event)"></ion-icon>
16
16
  <ion-icon class="canned-item-icon" name="trash-bin-outline" slot=end *ngIf="(canned.createdBy === loggedUser.uid) && roles[PERMISSIONS.CANNED_RESPONSES_DELETE]" (click)="onDeleteCanned(canned, $event)"></ion-icon>
@@ -278,7 +278,5 @@ ion-item {
278
278
  display: flex;
279
279
  justify-content: center;
280
280
  flex-direction: column;
281
- align-items: center;
282
-
283
281
  }
284
282
  }
@@ -47,13 +47,13 @@
47
47
  </div>
48
48
  <!-- SUPPORT-GROUP CONV -->
49
49
  <div *ngIf="conversationUid?.startsWith(CHANNEL_TYPE.SUPPORT_GROUP) && !IS_ON_MOBILE_DEVICE">
50
- <img class="channel-icon" src="assets/images/channel_icons/chat21.svg" *ngIf="( (conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.CHAT21) || !conversationAvatar?.request_channel) " >
51
- <img class="channel-icon" src="assets/images/channel_icons/email-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.EMAIL" >
52
- <img class="channel-icon" src="assets/images/channel_icons/form-logo_v2.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.FORM" >
53
- <img class="channel-icon" src="assets/images/channel_icons/messenger-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.MESSENGER" >
54
- <img class="channel-icon" src="assets/images/channel_icons/whatsapp-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.WHATSAPP" >
55
- <img class="channel-icon" src="assets/images/channel_icons/telegram-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.TELEGRAM" >
56
- <img class="channel-icon" src="assets/images/channel_icons/voice.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel.startsWith(CHANNEL_TYPE.VOICE)" >
50
+ <img class="channel-icon" src="assets/img/channel_icons/chat21.svg" *ngIf="( (conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.CHAT21) || !conversationAvatar?.request_channel) " >
51
+ <img class="channel-icon" src="assets/img/channel_icons/email-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.EMAIL" >
52
+ <img class="channel-icon" src="assets/img/channel_icons/form-logo_v2.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.FORM" >
53
+ <img class="channel-icon" src="assets/img/channel_icons/messenger-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.MESSENGER" >
54
+ <img class="channel-icon" src="assets/img/channel_icons/whatsapp-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.WHATSAPP" >
55
+ <img class="channel-icon" src="assets/img/channel_icons/telegram-logo.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel === CHANNEL_TYPE.TELEGRAM" >
56
+ <img class="channel-icon" src="assets/img/channel_icons/voice.svg" *ngIf="conversationAvatar?.request_channel && conversationAvatar?.request_channel.startsWith(CHANNEL_TYPE.VOICE)" >
57
57
  <span *ngIf="conversationAvatar?.project_name" class="truncate">{{conversationAvatar?.project_name}}</span>
58
58
  <span *ngIf="!conversationAvatar?.project_name" class="truncate">{{conversationAvatar?.projectId}}</span>
59
59
  </div>
@@ -65,7 +65,7 @@
65
65
  <!-- COPILOT-OPTION -->
66
66
  <div *ngIf="isCopilotEnabled" class="copilot-container" id="copilot">
67
67
  <ion-button id="copilot" fill="clear" (click)="onOpenSection('copilot')">
68
- <ion-icon class="channel-icon" src="assets/images/icons/copilot.svg"></ion-icon>
68
+ <ion-icon class="channel-icon" src="assets/img/icons/copilot.svg"></ion-icon>
69
69
  {{translationsMap?.get('COPILOT.SOLVE_WITH_AI')}}
70
70
  </ion-button>
71
71
  </div>
@@ -22,6 +22,13 @@
22
22
  {{translationMap?.get('WHATSAPP.LABEL_TEMPLATES')}}
23
23
  </ion-button>
24
24
  </div>
25
+ <!-- OPEN TICKET -->
26
+ <div *ngIf="ticketSection" class="section-option" id="template" tooltip="{{translationMap?.get('TICKET.OPEN_TICKET')}}" placement="top">
27
+ <ion-button fill="clear" [class.active]="section==='ticket'" (click)="onOpenSection('ticket')" [disabled]="channelType === 'direct'">
28
+ <ion-icon name="ticket"></ion-icon>
29
+ {{translationMap?.get('TICKET.OPEN_TICKET')}}
30
+ </ion-button>
31
+ </div>
25
32
  </div>
26
33
 
27
34
  <div class="footerContainerAlert">
@@ -50,6 +57,22 @@
50
57
  </ion-col>
51
58
  </ion-row>
52
59
 
60
+ <ion-row id="ticket" [style.display]="section==='ticket'? 'flex': 'none'">
61
+ <ion-col col-auto>
62
+ <div class="placeholder">{{translationMap.get('TICKET.DESCRIPTION')}}</div>
63
+ <div class="buttons-container">
64
+ <ion-button name="add" size="small" (click)="onClickTicket('open')">
65
+ <ion-icon name="add"></ion-icon>
66
+ {{translationMap?.get('TICKET.CONFIRM')}}
67
+ </ion-button>
68
+ <ion-button size="small" color="danger" (click)="onClickTicket('close')">
69
+ <ion-icon name="close"></ion-icon>
70
+ {{translationMap?.get('TICKET.CLOSE')}}
71
+ </ion-button>
72
+ </div>
73
+ </ion-col>
74
+ </ion-row>
75
+
53
76
  <ion-row id="message-text-area" [style.display]="section==='chat' || section ==='templates' || section ==='copilot'? 'flex': 'none'">
54
77
 
55
78
  <ion-col col-auto style="display: flex;">
@@ -183,6 +183,36 @@
183
183
  }
184
184
  }
185
185
 
186
+ #ticket{
187
+ text-align: center;
188
+ font-size: 12px;
189
+
190
+ .buttons-container{
191
+ display: flex;
192
+ justify-content: center;
193
+ gap: 10px;
194
+
195
+ ion-button{
196
+ font-size: 12px;
197
+ --padding-top: 4px;
198
+ --padding-bottom: 4px;
199
+ --padding-start: 6px;
200
+ --padding-end: 6px;
201
+ --ripple-color: transparent;
202
+ text-transform: unset;
203
+ height: auto;
204
+
205
+ ion-icon{
206
+ margin-right: 4px;
207
+ }
208
+
209
+ &[name="add"]{
210
+ --background: var(--basic-blue);
211
+ }
212
+ }
213
+ }
214
+ }
215
+
186
216
  #fileInput {
187
217
  position: absolute;
188
218
  opacity: 0;