verben-ticketing-ui 0.6.0

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 (237) hide show
  1. package/README.md +25 -0
  2. package/esm2022/public-api.mjs +9 -0
  3. package/esm2022/src/lib/components/add-ticket/add-ticket.component.mjs +306 -0
  4. package/esm2022/src/lib/components/add-ticket/add-ticket.module.mjs +98 -0
  5. package/esm2022/src/lib/components/add-ticket/index.mjs +2 -0
  6. package/esm2022/src/lib/components/add-ticket/public-api.mjs +3 -0
  7. package/esm2022/src/lib/components/add-ticket/verben-ticketing-ui-src-lib-components-add-ticket.mjs +5 -0
  8. package/esm2022/src/lib/components/file-render/file-render.component.mjs +34 -0
  9. package/esm2022/src/lib/components/file-render/file-render.module.mjs +94 -0
  10. package/esm2022/src/lib/components/file-render/index.mjs +2 -0
  11. package/esm2022/src/lib/components/file-render/public-api.mjs +3 -0
  12. package/esm2022/src/lib/components/file-render/verben-ticketing-ui-src-lib-components-file-render.mjs +5 -0
  13. package/esm2022/src/lib/components/ticketing/base-table-style.mjs +56 -0
  14. package/esm2022/src/lib/components/ticketing/index.mjs +2 -0
  15. package/esm2022/src/lib/components/ticketing/public-api.mjs +4 -0
  16. package/esm2022/src/lib/components/ticketing/ticketing.component.mjs +813 -0
  17. package/esm2022/src/lib/components/ticketing/ticketing.module.mjs +96 -0
  18. package/esm2022/src/lib/components/ticketing/ticketing.service.mjs +220 -0
  19. package/esm2022/src/lib/components/ticketing/verben-ticketing-ui-src-lib-components-ticketing.mjs +5 -0
  20. package/esm2022/src/lib/components/ticketing-detail/chat-control/chat-control.component.mjs +240 -0
  21. package/esm2022/src/lib/components/ticketing-detail/chat-control/chat-control.module.mjs +98 -0
  22. package/esm2022/src/lib/components/ticketing-detail/index.mjs +2 -0
  23. package/esm2022/src/lib/components/ticketing-detail/public-api.mjs +3 -0
  24. package/esm2022/src/lib/components/ticketing-detail/ticketing-detail.component.mjs +592 -0
  25. package/esm2022/src/lib/components/ticketing-detail/ticketing-detail.module.mjs +109 -0
  26. package/esm2022/src/lib/components/ticketing-detail/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs +5 -0
  27. package/esm2022/src/lib/constants/index.mjs +2 -0
  28. package/esm2022/src/lib/constants/keynames.mjs +2 -0
  29. package/esm2022/src/lib/constants/pagesize.mjs +3 -0
  30. package/esm2022/src/lib/constants/public-api.mjs +3 -0
  31. package/esm2022/src/lib/constants/verben-ticketing-ui-src-lib-constants.mjs +5 -0
  32. package/esm2022/src/lib/models/Application.mjs +2 -0
  33. package/esm2022/src/lib/models/ApplicationRoleAction.mjs +2 -0
  34. package/esm2022/src/lib/models/ApplicationRoleContext.mjs +2 -0
  35. package/esm2022/src/lib/models/BaseModel.mjs +2 -0
  36. package/esm2022/src/lib/models/CacheDataRequest.mjs +2 -0
  37. package/esm2022/src/lib/models/Company.mjs +2 -0
  38. package/esm2022/src/lib/models/ErrorResponse.mjs +11 -0
  39. package/esm2022/src/lib/models/File.mjs +2 -0
  40. package/esm2022/src/lib/models/FilterTypes.mjs +9 -0
  41. package/esm2022/src/lib/models/HttpRequestType.mjs +8 -0
  42. package/esm2022/src/lib/models/KeyValueParam.mjs +2 -0
  43. package/esm2022/src/lib/models/ModelRelationship.mjs +2 -0
  44. package/esm2022/src/lib/models/OAuthParam.mjs +2 -0
  45. package/esm2022/src/lib/models/OAuthType.mjs +9 -0
  46. package/esm2022/src/lib/models/PagedResult.mjs +2 -0
  47. package/esm2022/src/lib/models/PasswordRequestParam.mjs +2 -0
  48. package/esm2022/src/lib/models/PermissionConfig.mjs +2 -0
  49. package/esm2022/src/lib/models/ResponseKeyValue.mjs +2 -0
  50. package/esm2022/src/lib/models/Role.mjs +2 -0
  51. package/esm2022/src/lib/models/RoleAction.mjs +2 -0
  52. package/esm2022/src/lib/models/RoleContext.mjs +2 -0
  53. package/esm2022/src/lib/models/Schedule.mjs +2 -0
  54. package/esm2022/src/lib/models/ScheduleType.mjs +6 -0
  55. package/esm2022/src/lib/models/SearchDynamicWrapper.mjs +2 -0
  56. package/esm2022/src/lib/models/SearchOperator.mjs +6 -0
  57. package/esm2022/src/lib/models/SearchPropertySign.mjs +11 -0
  58. package/esm2022/src/lib/models/SearchPropertyValue.mjs +2 -0
  59. package/esm2022/src/lib/models/SearchPropertyValueType.mjs +11 -0
  60. package/esm2022/src/lib/models/SortDirection.mjs +7 -0
  61. package/esm2022/src/lib/models/TaskUser.mjs +2 -0
  62. package/esm2022/src/lib/models/Tenant.mjs +2 -0
  63. package/esm2022/src/lib/models/TenantConfig.mjs +2 -0
  64. package/esm2022/src/lib/models/TenantPriority.mjs +2 -0
  65. package/esm2022/src/lib/models/Ticket.mjs +2 -0
  66. package/esm2022/src/lib/models/TicketMessage.mjs +2 -0
  67. package/esm2022/src/lib/models/TicketStatus.mjs +8 -0
  68. package/esm2022/src/lib/models/UserRequest.mjs +2 -0
  69. package/esm2022/src/lib/models/auth-mechanism.mjs +8 -0
  70. package/esm2022/src/lib/models/base.mjs +2 -0
  71. package/esm2022/src/lib/models/conditions.mjs +13 -0
  72. package/esm2022/src/lib/models/index.mjs +2 -0
  73. package/esm2022/src/lib/models/log-in.mjs +2 -0
  74. package/esm2022/src/lib/models/mainUser.mjs +2 -0
  75. package/esm2022/src/lib/models/oauth-resp.mjs +2 -0
  76. package/esm2022/src/lib/models/oauth-response.mjs +2 -0
  77. package/esm2022/src/lib/models/object-state.mjs +8 -0
  78. package/esm2022/src/lib/models/otpValue.mjs +2 -0
  79. package/esm2022/src/lib/models/paged.mjs +2 -0
  80. package/esm2022/src/lib/models/public-api.mjs +57 -0
  81. package/esm2022/src/lib/models/query-params.mjs +2 -0
  82. package/esm2022/src/lib/models/request-status.mjs +5 -0
  83. package/esm2022/src/lib/models/resend-otp-data.mjs +2 -0
  84. package/esm2022/src/lib/models/sign-up.mjs +2 -0
  85. package/esm2022/src/lib/models/single-sign-on.mjs +2 -0
  86. package/esm2022/src/lib/models/status.mjs +6 -0
  87. package/esm2022/src/lib/models/user-access-request-status.mjs +7 -0
  88. package/esm2022/src/lib/models/user-access-request.mjs +2 -0
  89. package/esm2022/src/lib/models/user-management.mjs +2 -0
  90. package/esm2022/src/lib/models/user.mjs +2 -0
  91. package/esm2022/src/lib/models/verben-ticketing-ui-src-lib-models.mjs +5 -0
  92. package/esm2022/src/lib/pipes/async-label.pipe.mjs +26 -0
  93. package/esm2022/src/lib/pipes/company-date.pipe.mjs +30 -0
  94. package/esm2022/src/lib/pipes/ellipse-word.pipe.mjs +23 -0
  95. package/esm2022/src/lib/pipes/index.mjs +2 -0
  96. package/esm2022/src/lib/pipes/public-api.mjs +4 -0
  97. package/esm2022/src/lib/pipes/verben-ticketing-ui-src-lib-pipes.mjs +5 -0
  98. package/esm2022/src/lib/services/company-settings.service.mjs +23 -0
  99. package/esm2022/src/lib/services/environment.service.mjs +26 -0
  100. package/esm2022/src/lib/services/http-web-request.service.mjs +100 -0
  101. package/esm2022/src/lib/services/import.service.mjs +247 -0
  102. package/esm2022/src/lib/services/index.mjs +2 -0
  103. package/esm2022/src/lib/services/label.service.mjs +261 -0
  104. package/esm2022/src/lib/services/public-api.mjs +8 -0
  105. package/esm2022/src/lib/services/shared.service.mjs +58 -0
  106. package/esm2022/src/lib/services/util.service.mjs +72 -0
  107. package/esm2022/src/lib/services/verben-ticketing-ui-src-lib-services.mjs +5 -0
  108. package/esm2022/src/utils/components/base-data-view.component.mjs +111 -0
  109. package/esm2022/src/utils/index.mjs +2 -0
  110. package/esm2022/src/utils/models/DataViewConfig.mjs +2 -0
  111. package/esm2022/src/utils/public-api.mjs +3 -0
  112. package/esm2022/src/utils/verben-ticketing-ui-src-utils.mjs +5 -0
  113. package/esm2022/verben-ticketing-ui.mjs +5 -0
  114. package/fesm2022/verben-ticketing-ui-src-lib-components-add-ticket.mjs +403 -0
  115. package/fesm2022/verben-ticketing-ui-src-lib-components-add-ticket.mjs.map +1 -0
  116. package/fesm2022/verben-ticketing-ui-src-lib-components-file-render.mjs +130 -0
  117. package/fesm2022/verben-ticketing-ui-src-lib-components-file-render.mjs.map +1 -0
  118. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs +1018 -0
  119. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs.map +1 -0
  120. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing.mjs +1166 -0
  121. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing.mjs.map +1 -0
  122. package/fesm2022/verben-ticketing-ui-src-lib-constants.mjs +11 -0
  123. package/fesm2022/verben-ticketing-ui-src-lib-constants.mjs.map +1 -0
  124. package/fesm2022/verben-ticketing-ui-src-lib-models.mjs +138 -0
  125. package/fesm2022/verben-ticketing-ui-src-lib-models.mjs.map +1 -0
  126. package/fesm2022/verben-ticketing-ui-src-lib-pipes.mjs +81 -0
  127. package/fesm2022/verben-ticketing-ui-src-lib-pipes.mjs.map +1 -0
  128. package/fesm2022/verben-ticketing-ui-src-lib-services.mjs +770 -0
  129. package/fesm2022/verben-ticketing-ui-src-lib-services.mjs.map +1 -0
  130. package/fesm2022/verben-ticketing-ui-src-utils.mjs +118 -0
  131. package/fesm2022/verben-ticketing-ui-src-utils.mjs.map +1 -0
  132. package/fesm2022/verben-ticketing-ui.mjs +14 -0
  133. package/fesm2022/verben-ticketing-ui.mjs.map +1 -0
  134. package/index.d.ts +5 -0
  135. package/package.json +82 -0
  136. package/public-api.d.ts +4 -0
  137. package/src/lib/components/add-ticket/add-ticket.component.d.ts +44 -0
  138. package/src/lib/components/add-ticket/add-ticket.module.d.ts +15 -0
  139. package/src/lib/components/add-ticket/index.d.ts +1 -0
  140. package/src/lib/components/add-ticket/public-api.d.ts +2 -0
  141. package/src/lib/components/file-render/file-render.component.d.ts +14 -0
  142. package/src/lib/components/file-render/file-render.module.d.ts +14 -0
  143. package/src/lib/components/file-render/index.d.ts +1 -0
  144. package/src/lib/components/file-render/public-api.d.ts +2 -0
  145. package/src/lib/components/ticketing/base-table-style.d.ts +1 -0
  146. package/src/lib/components/ticketing/index.d.ts +1 -0
  147. package/src/lib/components/ticketing/public-api.d.ts +3 -0
  148. package/src/lib/components/ticketing/ticketing.component.d.ts +100 -0
  149. package/src/lib/components/ticketing/ticketing.module.d.ts +12 -0
  150. package/src/lib/components/ticketing/ticketing.service.d.ts +27 -0
  151. package/src/lib/components/ticketing-detail/chat-control/chat-control.component.d.ts +47 -0
  152. package/src/lib/components/ticketing-detail/chat-control/chat-control.module.d.ts +15 -0
  153. package/src/lib/components/ticketing-detail/index.d.ts +1 -0
  154. package/src/lib/components/ticketing-detail/public-api.d.ts +2 -0
  155. package/src/lib/components/ticketing-detail/ticketing-detail.component.d.ts +77 -0
  156. package/src/lib/components/ticketing-detail/ticketing-detail.module.d.ts +17 -0
  157. package/src/lib/constants/index.d.ts +1 -0
  158. package/src/lib/constants/keynames.d.ts +1 -0
  159. package/src/lib/constants/pagesize.d.ts +2 -0
  160. package/src/lib/constants/public-api.d.ts +2 -0
  161. package/src/lib/models/Application.d.ts +5 -0
  162. package/src/lib/models/ApplicationRoleAction.d.ts +9 -0
  163. package/src/lib/models/ApplicationRoleContext.d.ts +9 -0
  164. package/src/lib/models/BaseModel.d.ts +14 -0
  165. package/src/lib/models/CacheDataRequest.d.ts +7 -0
  166. package/src/lib/models/Company.d.ts +22 -0
  167. package/src/lib/models/ErrorResponse.d.ts +6 -0
  168. package/src/lib/models/File.d.ts +7 -0
  169. package/src/lib/models/FilterTypes.d.ts +6 -0
  170. package/src/lib/models/HttpRequestType.d.ts +6 -0
  171. package/src/lib/models/KeyValueParam.d.ts +5 -0
  172. package/src/lib/models/ModelRelationship.d.ts +7 -0
  173. package/src/lib/models/OAuthParam.d.ts +9 -0
  174. package/src/lib/models/OAuthType.d.ts +7 -0
  175. package/src/lib/models/PagedResult.d.ts +9 -0
  176. package/src/lib/models/PasswordRequestParam.d.ts +5 -0
  177. package/src/lib/models/PermissionConfig.d.ts +7 -0
  178. package/src/lib/models/ResponseKeyValue.d.ts +5 -0
  179. package/src/lib/models/Role.d.ts +9 -0
  180. package/src/lib/models/RoleAction.d.ts +10 -0
  181. package/src/lib/models/RoleContext.d.ts +10 -0
  182. package/src/lib/models/Schedule.d.ts +22 -0
  183. package/src/lib/models/ScheduleType.d.ts +4 -0
  184. package/src/lib/models/SearchDynamicWrapper.d.ts +7 -0
  185. package/src/lib/models/SearchOperator.d.ts +4 -0
  186. package/src/lib/models/SearchPropertySign.d.ts +9 -0
  187. package/src/lib/models/SearchPropertyValue.d.ts +14 -0
  188. package/src/lib/models/SearchPropertyValueType.d.ts +9 -0
  189. package/src/lib/models/SortDirection.d.ts +5 -0
  190. package/src/lib/models/TaskUser.d.ts +10 -0
  191. package/src/lib/models/Tenant.d.ts +22 -0
  192. package/src/lib/models/TenantConfig.d.ts +20 -0
  193. package/src/lib/models/TenantPriority.d.ts +10 -0
  194. package/src/lib/models/Ticket.d.ts +21 -0
  195. package/src/lib/models/TicketMessage.d.ts +11 -0
  196. package/src/lib/models/TicketStatus.d.ts +6 -0
  197. package/src/lib/models/UserRequest.d.ts +32 -0
  198. package/src/lib/models/auth-mechanism.d.ts +14 -0
  199. package/src/lib/models/base.d.ts +12 -0
  200. package/src/lib/models/conditions.d.ts +11 -0
  201. package/src/lib/models/index.d.ts +1 -0
  202. package/src/lib/models/log-in.d.ts +8 -0
  203. package/src/lib/models/mainUser.d.ts +19 -0
  204. package/src/lib/models/oauth-resp.d.ts +6 -0
  205. package/src/lib/models/oauth-response.d.ts +6 -0
  206. package/src/lib/models/object-state.d.ts +6 -0
  207. package/src/lib/models/otpValue.d.ts +9 -0
  208. package/src/lib/models/paged.d.ts +9 -0
  209. package/src/lib/models/public-api.d.ts +56 -0
  210. package/src/lib/models/query-params.d.ts +7 -0
  211. package/src/lib/models/request-status.d.ts +3 -0
  212. package/src/lib/models/resend-otp-data.d.ts +8 -0
  213. package/src/lib/models/sign-up.d.ts +9 -0
  214. package/src/lib/models/single-sign-on.d.ts +7 -0
  215. package/src/lib/models/status.d.ts +4 -0
  216. package/src/lib/models/user-access-request-status.d.ts +5 -0
  217. package/src/lib/models/user-access-request.d.ts +9 -0
  218. package/src/lib/models/user-management.d.ts +8 -0
  219. package/src/lib/models/user.d.ts +24 -0
  220. package/src/lib/pipes/async-label.pipe.d.ts +11 -0
  221. package/src/lib/pipes/company-date.pipe.d.ts +10 -0
  222. package/src/lib/pipes/ellipse-word.pipe.d.ts +8 -0
  223. package/src/lib/pipes/index.d.ts +1 -0
  224. package/src/lib/pipes/public-api.d.ts +3 -0
  225. package/src/lib/services/company-settings.service.d.ts +11 -0
  226. package/src/lib/services/environment.service.d.ts +22 -0
  227. package/src/lib/services/http-web-request.service.d.ts +24 -0
  228. package/src/lib/services/import.service.d.ts +14 -0
  229. package/src/lib/services/index.d.ts +1 -0
  230. package/src/lib/services/label.service.d.ts +24 -0
  231. package/src/lib/services/public-api.d.ts +7 -0
  232. package/src/lib/services/shared.service.d.ts +16 -0
  233. package/src/lib/services/util.service.d.ts +15 -0
  234. package/src/utils/components/base-data-view.component.d.ts +34 -0
  235. package/src/utils/index.d.ts +1 -0
  236. package/src/utils/models/DataViewConfig.d.ts +11 -0
  237. package/src/utils/public-api.d.ts +2 -0
@@ -0,0 +1,1166 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, signal, viewChildren, Component, Input, ViewChild, ViewChildren, NgModule } from '@angular/core';
3
+ import { DEFAULT_PAGE_SIZE } from 'verben-ticketing-ui/src/lib/constants';
4
+ import { SearchOperator, SearchPropertySign, ErrorResponse, TicketStatus, ObjectState, FilterTypes, SearchPropertyValueType, SortDirection } from 'verben-ticketing-ui/src/lib/models';
5
+ import { Subject, debounceTime } from 'rxjs';
6
+ import * as i6 from 'verben-ng-ui';
7
+ import { ColumnDirective, DataFilterType, DataTableModule, SvgModule, VerbenPopUpModule, DataViewModule, VerbenaButtonModule, CardDataViewModule, DropDownModule, VerbenaSwitchModule, TableFilterModule, VisibleColumnModule, SortTableModule, DataExportModule, TooltipModule, VerbenDialogueModule, VerbenaInputModule, DataImportModule, DataXportModule } from 'verben-ng-ui';
8
+ import * as i1 from 'verben-ticketing-ui/src/lib/services';
9
+ import * as i3 from '@angular/router';
10
+ import * as i4 from '@angular/common';
11
+ import { CommonModule } from '@angular/common';
12
+ import * as i5 from '@angular/forms';
13
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
14
+ import * as i7 from 'verben-ticketing-ui/src/lib/components/add-ticket';
15
+ import { AddTicketLibModule } from 'verben-ticketing-ui/src/lib/components/add-ticket';
16
+ import * as i8 from 'verben-ticketing-ui/src/lib/pipes';
17
+ import { AsyncLabelPipe, EllipseWordPipe, CompanyDatePipe } from 'verben-ticketing-ui/src/lib/pipes';
18
+
19
+ const baseStyle = {
20
+ width: '100%',
21
+ fontFamily: '"Fraunces", serif',
22
+ fontSize: '125%',
23
+ whiteSpace: 'nowrap',
24
+ margin: '0',
25
+ // border: '1px solid #D4A007',
26
+ // borderRadius: '16px',
27
+ // borderCollapse: 'separate',
28
+ borderSpacing: '0',
29
+ // tableLayout: 'fixed',
30
+ overflow: 'hidden',
31
+ rows: {
32
+ // even: {
33
+ // borderBottom: '1px solid #CCCCCC',
34
+ // },
35
+ // odd: {
36
+ // borderBottom: '1px solid #CCCCCC',
37
+ // },
38
+ borderBottom: '1px solid #CCCCCC',
39
+ height: '68px',
40
+ },
41
+ cells: {
42
+ padding: '0.5rem 1rem',
43
+ },
44
+ header: {
45
+ // stickyTop: true,
46
+ // zIndex: 2,
47
+ borderBottom: '1px solid #CCCCCC',
48
+ borderTop: '1px solid #CCCCCC',
49
+ // backgroundColor: '#EFF2FB',
50
+ fontWeight: 'bold',
51
+ textAlign: 'left',
52
+ padding: '12px 16px',
53
+ height: '30px',
54
+ },
55
+ footer: {
56
+ // stickyBottom: true,
57
+ // zIndex: 2,
58
+ padding: '3px',
59
+ },
60
+ // body: {
61
+ // background: '#fff',
62
+ // padding: '4px 5px',
63
+ // textAlign: 'center',
64
+ // },
65
+ // firstColumn: {
66
+ // stickyLeft: true,
67
+ // zIndex: 1,
68
+ // },
69
+ lastColumn: {
70
+ // stickyRight: true,
71
+ // zIndex: 1,
72
+ },
73
+ };
74
+
75
+ class TicketingService {
76
+ utilService;
77
+ server;
78
+ envSvc;
79
+ pageSize = DEFAULT_PAGE_SIZE;
80
+ constructor(utilService, server, envSvc) {
81
+ this.utilService = utilService;
82
+ this.server = server;
83
+ this.envSvc = envSvc;
84
+ }
85
+ get ticketColumns() {
86
+ return [
87
+ {
88
+ id: 'select',
89
+ header: '',
90
+ canExport: false,
91
+ },
92
+ {
93
+ id: 'createdAt',
94
+ header: 'DATE',
95
+ accessorKey: 'CreatedAt',
96
+ },
97
+ {
98
+ id: 'code',
99
+ header: 'CODE',
100
+ accessorKey: 'Code',
101
+ },
102
+ {
103
+ id: 'title',
104
+ header: 'TITLE',
105
+ accessorKey: 'Title',
106
+ importKey: 'Title',
107
+ },
108
+ {
109
+ id: 'description',
110
+ header: 'DESCRIPTION',
111
+ accessorKey: 'Description',
112
+ importKey: 'Description',
113
+ },
114
+ {
115
+ id: 'currentHandler',
116
+ header: 'CURRENT HANDLER',
117
+ accessorKey: 'CurrentHandler',
118
+ },
119
+ {
120
+ id: 'lastHandler',
121
+ header: 'LAST HANDLER',
122
+ accessorKey: 'LastHandler',
123
+ },
124
+ {
125
+ id: 'executionTime',
126
+ header: 'EXECUTION TIME',
127
+ accessorKey: 'ExecutionTime',
128
+ },
129
+ {
130
+ id: 'priority',
131
+ header: 'PRIORITY',
132
+ accessorKey: 'Priority',
133
+ importKey: 'Priority',
134
+ },
135
+ {
136
+ id: 'status',
137
+ header: 'STATUS',
138
+ accessorKey: 'Status',
139
+ importKey: 'Status',
140
+ },
141
+ {
142
+ id: 'actions',
143
+ header: 'ACTIONS',
144
+ accessorFn: (row) => {
145
+ return row;
146
+ },
147
+ canExport: false,
148
+ },
149
+ ];
150
+ }
151
+ async getAllApps() {
152
+ const payload = [
153
+ {
154
+ PropertyName: 'TenantId',
155
+ EntityValue: '',
156
+ Operator: SearchOperator.And,
157
+ Sign: SearchPropertySign.NEQ,
158
+ },
159
+ ];
160
+ this.utilService.sendBI(true);
161
+ const res = await this.server.post(`SearchApplications/0/0`, payload, this.envSvc.environment.AuthenticationAPI);
162
+ this.utilService.sendBI(false);
163
+ if (res instanceof ErrorResponse) {
164
+ return;
165
+ }
166
+ else {
167
+ var result = res.Result;
168
+ return result;
169
+ }
170
+ }
171
+ async getTenantsByApp(app) {
172
+ const payload = [
173
+ {
174
+ PropertyName: 'Application',
175
+ EntityValue: app,
176
+ Operator: SearchOperator.And,
177
+ Sign: SearchPropertySign.EQ,
178
+ },
179
+ {
180
+ PropertyName: 'TenantId',
181
+ EntityValue: '',
182
+ Operator: SearchOperator.And,
183
+ Sign: SearchPropertySign.NEQ,
184
+ },
185
+ ];
186
+ this.utilService.sendBI(true);
187
+ const res = await this.server.post(`SearchTenants/0/0`, payload, this.envSvc.environment.AuthenticationAPI);
188
+ const configs = await this.getTenantConfigsByApp(app);
189
+ this.utilService.sendBI(false);
190
+ if (res instanceof ErrorResponse) {
191
+ return;
192
+ }
193
+ else {
194
+ var result = res.Result;
195
+ if (configs) {
196
+ result.forEach((x) => {
197
+ const config = configs.find((y) => y.TenantId == x.Code);
198
+ if (config) {
199
+ x.LogoUrl = config.LogoUrl;
200
+ }
201
+ });
202
+ }
203
+ return result;
204
+ }
205
+ }
206
+ async getPrioritiesForTenant(tenant) {
207
+ const payload = [
208
+ {
209
+ PropertyName: 'TenantId',
210
+ EntityValue: tenant,
211
+ Operator: SearchOperator.And,
212
+ Sign: SearchPropertySign.EQ,
213
+ },
214
+ ];
215
+ this.utilService.sendBI(true);
216
+ const res = await this.server.post(`Ticket/SearchTenantPriority/0/${this.pageSize}`, payload, this.envSvc.environment.TicketingAPI);
217
+ this.utilService.sendBI(false);
218
+ if (res instanceof ErrorResponse) {
219
+ return;
220
+ }
221
+ else {
222
+ var result = res;
223
+ return result;
224
+ }
225
+ }
226
+ async getAllPrioritiesForTenant(tenant) {
227
+ const payload = [
228
+ {
229
+ PropertyName: 'TenantId',
230
+ EntityValue: tenant,
231
+ Operator: SearchOperator.And,
232
+ Sign: SearchPropertySign.EQ,
233
+ },
234
+ ];
235
+ this.utilService.sendBI(true);
236
+ const res = await this.server.post(`Ticket/SearchTenantPriority/0/0`, payload, this.envSvc.environment.TicketingAPI);
237
+ this.utilService.sendBI(false);
238
+ if (res instanceof ErrorResponse) {
239
+ return;
240
+ }
241
+ else {
242
+ var result = res;
243
+ return result;
244
+ }
245
+ }
246
+ async getTenantConfigsByApp(app) {
247
+ this.utilService.sendBI(true);
248
+ const res = await this.server.get(`GetTenantConfigsWithParam/${app}/0/0`, this.envSvc.environment.AuthenticationAPI);
249
+ this.utilService.sendBI(false);
250
+ if (res instanceof ErrorResponse) {
251
+ return;
252
+ }
253
+ else {
254
+ var result = res.Result;
255
+ return result;
256
+ }
257
+ }
258
+ async getTicketsForTenant(tenant) {
259
+ const payload = [
260
+ {
261
+ PropertyName: 'TenantId',
262
+ EntityValue: tenant,
263
+ Operator: SearchOperator.And,
264
+ Sign: SearchPropertySign.EQ,
265
+ },
266
+ ];
267
+ this.utilService.sendBI(true);
268
+ const res = await this.server.post(`Ticket/SearchTicket/0/${this.pageSize}`, payload, this.envSvc.environment.TicketingAPI);
269
+ this.utilService.sendBI(false);
270
+ if (res instanceof ErrorResponse) {
271
+ return;
272
+ }
273
+ else {
274
+ var result = res;
275
+ return result;
276
+ }
277
+ }
278
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketingService, deps: [{ token: i1.UtilService }, { token: i1.HttpWebRequestService }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Injectable });
279
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketingService, providedIn: 'root' });
280
+ }
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketingService, decorators: [{
282
+ type: Injectable,
283
+ args: [{
284
+ providedIn: 'root',
285
+ }]
286
+ }], ctorParameters: () => [{ type: i1.UtilService }, { type: i1.HttpWebRequestService }, { type: i1.EnvironmentService }] });
287
+
288
+ var TicketPropertyName;
289
+ (function (TicketPropertyName) {
290
+ TicketPropertyName["CreatedAt"] = "Created At";
291
+ TicketPropertyName["UpdatedAt"] = "Updated At";
292
+ TicketPropertyName["Title"] = "Title";
293
+ TicketPropertyName["Description"] = "Description";
294
+ TicketPropertyName["CurrentHandler"] = "Current Handler";
295
+ TicketPropertyName["Priority"] = "Priority";
296
+ TicketPropertyName["Status"] = "Status";
297
+ })(TicketPropertyName || (TicketPropertyName = {}));
298
+ var TicketPropertyMap;
299
+ (function (TicketPropertyMap) {
300
+ TicketPropertyMap["CreatedAt"] = "CreatedAt";
301
+ TicketPropertyMap["UpdatedAt"] = "UpdatedAt";
302
+ TicketPropertyMap["Title"] = "Title";
303
+ TicketPropertyMap["Description"] = "Description";
304
+ TicketPropertyMap["CurrentHandler"] = "CurrentHandler";
305
+ TicketPropertyMap["Priority"] = "Priority";
306
+ TicketPropertyMap["Status"] = "Status";
307
+ })(TicketPropertyMap || (TicketPropertyMap = {}));
308
+ class TicketingComponent {
309
+ utilService;
310
+ server;
311
+ cdr;
312
+ service;
313
+ route;
314
+ importService;
315
+ envSvc;
316
+ permissionConfig = null;
317
+ styles = baseStyle;
318
+ // showAppForm: boolean = false;
319
+ // showTenantForm: boolean = false;
320
+ showTicketForm = false;
321
+ // selectedApp: Application | null = null;
322
+ // selectedTenant: Tenant | null = null;
323
+ selectedTicket = null;
324
+ activeApp = null;
325
+ activeTenant = null;
326
+ activeTicket = null;
327
+ apps = [];
328
+ detailPath = '';
329
+ tenants = [];
330
+ tickets = [];
331
+ ticketingAPI = ``;
332
+ defaultCompany = '';
333
+ baseUrl = ``;
334
+ pendingRef = TicketStatus.Pending;
335
+ visibleColumnDef = [];
336
+ exportColumnDef = [];
337
+ importedData = signal([]);
338
+ columnTemplates = viewChildren(ColumnDirective);
339
+ dataView;
340
+ tableView;
341
+ popUps;
342
+ pageSize = DEFAULT_PAGE_SIZE;
343
+ searchDebounceTime = 500;
344
+ pageState = null;
345
+ isOpen = false;
346
+ openDropdownId = null;
347
+ currentFilters = [];
348
+ currentSorts = [];
349
+ searchTerm$ = new Subject();
350
+ statusOptions = Object.keys(TicketStatus);
351
+ visibleColumns = [];
352
+ filterArray = [
353
+ {
354
+ name: TicketPropertyName.CreatedAt,
355
+ type: DataFilterType.Date,
356
+ checked: false,
357
+ },
358
+ {
359
+ name: TicketPropertyName.UpdatedAt,
360
+ type: DataFilterType.Date,
361
+ checked: false,
362
+ },
363
+ {
364
+ name: TicketPropertyName.Title,
365
+ type: DataFilterType.String,
366
+ checked: false,
367
+ },
368
+ {
369
+ name: TicketPropertyName.Description,
370
+ type: DataFilterType.String,
371
+ checked: false,
372
+ },
373
+ {
374
+ name: TicketPropertyName.CurrentHandler,
375
+ type: DataFilterType.String,
376
+ checked: false,
377
+ },
378
+ {
379
+ name: TicketPropertyName.Priority,
380
+ type: DataFilterType.String,
381
+ checked: false,
382
+ },
383
+ {
384
+ name: TicketPropertyName.Status,
385
+ type: DataFilterType.String,
386
+ checked: false,
387
+ },
388
+ ];
389
+ sortOptions = [
390
+ {
391
+ name: TicketPropertyName.CreatedAt,
392
+ type: DataFilterType.Date,
393
+ checked: false,
394
+ },
395
+ {
396
+ name: TicketPropertyName.UpdatedAt,
397
+ type: DataFilterType.Date,
398
+ checked: false,
399
+ },
400
+ {
401
+ name: TicketPropertyName.Title,
402
+ type: DataFilterType.String,
403
+ checked: false,
404
+ },
405
+ {
406
+ name: TicketPropertyName.Description,
407
+ type: DataFilterType.String,
408
+ checked: false,
409
+ },
410
+ {
411
+ name: TicketPropertyName.CurrentHandler,
412
+ type: DataFilterType.String,
413
+ checked: false,
414
+ },
415
+ {
416
+ name: TicketPropertyName.Priority,
417
+ type: DataFilterType.String,
418
+ checked: false,
419
+ },
420
+ {
421
+ name: TicketPropertyName.Status,
422
+ type: DataFilterType.String,
423
+ checked: false,
424
+ },
425
+ ];
426
+ currentSearchTerm = '';
427
+ constructor(utilService, server, cdr, service, route, importService, envSvc) {
428
+ this.utilService = utilService;
429
+ this.server = server;
430
+ this.cdr = cdr;
431
+ this.service = service;
432
+ this.route = route;
433
+ this.importService = importService;
434
+ this.envSvc = envSvc;
435
+ }
436
+ async ngOnInit() {
437
+ this.visibleColumnDef = this.service.ticketColumns.filter((x) => x.id != 'actions' || this.permissionConfig?.Actions['Create']);
438
+ this.exportColumnDef = this.service.ticketColumns.filter((x) => (x.id != 'actions' || this.permissionConfig?.Actions['Create']) &&
439
+ x.id != 'description');
440
+ console.log({ State: this.permissionConfig });
441
+ this.visibleColumns = this.service.ticketColumns
442
+ .filter((x) => x.id != 'actions' || this.permissionConfig?.Actions['Create'])
443
+ .map((col) => ({
444
+ checked: true,
445
+ name: typeof col.header === 'string' ? col.header : col.id,
446
+ type: DataFilterType.Bool,
447
+ }));
448
+ this.ticketingAPI = `${this.envSvc.environment.TicketingAPI}/Ticket`;
449
+ if (this.activeTenant) {
450
+ const tickets = await this.service.getTicketsForTenant(this.activeTenant);
451
+ if (tickets) {
452
+ this.pageState = tickets;
453
+ const results = tickets.Result;
454
+ this.tickets = results.map((x) => {
455
+ return {
456
+ ...x,
457
+ Id: x.Code,
458
+ };
459
+ });
460
+ }
461
+ }
462
+ this.searchTerm$
463
+ .pipe(debounceTime(this.searchDebounceTime)) // Adjust debounce time here (in ms)
464
+ .subscribe(async (searchTerm) => {
465
+ this.currentSearchTerm = searchTerm;
466
+ this.updateFiltersAndSorts(true);
467
+ });
468
+ }
469
+ async loadMore() {
470
+ if (!this.pageState) {
471
+ return;
472
+ }
473
+ this.utilService.sendBI(true);
474
+ const res = await this.loadMoreFiltersAndSorts();
475
+ this.utilService.sendBI(false);
476
+ if (res instanceof ErrorResponse) {
477
+ return;
478
+ }
479
+ else {
480
+ this.pageState = res;
481
+ var result = res.Result;
482
+ const mappedData = result.map((x) => {
483
+ return {
484
+ ...x,
485
+ Id: x.Code,
486
+ };
487
+ });
488
+ this.tickets = this.tickets.concat(mappedData);
489
+ }
490
+ }
491
+ async tableSaveTicket(form, callBack) {
492
+ if (form.Description.trim().length == 0) {
493
+ this.utilService.showInfo('Description cannot be empty');
494
+ return;
495
+ }
496
+ form.DataState =
497
+ form.DataState == ObjectState.New ? ObjectState.New : ObjectState.Changed;
498
+ form.Id = '';
499
+ this.utilService.sendBI(true);
500
+ const res = await this.server.post(`Ticket/SaveTicket`, [form], this.envSvc.environment.TicketingAPI);
501
+ this.utilService.sendBI(false);
502
+ if (res instanceof ErrorResponse) {
503
+ }
504
+ else {
505
+ this.utilService.showSuccess('Ticket saved successfully');
506
+ const result = res;
507
+ if (result.length > 0) {
508
+ var resultItem = result[0];
509
+ const itemIndex = this.tickets.findIndex((x) => x == form);
510
+ if (itemIndex > -1) {
511
+ this.tickets[itemIndex].Code = resultItem.Code;
512
+ this.tickets[itemIndex].Id = resultItem.Code;
513
+ this.tickets[itemIndex].DataState = resultItem.DataState;
514
+ this.tickets[itemIndex].TenantId = resultItem.TenantId;
515
+ this.tickets[itemIndex].ServiceName = resultItem.ServiceName;
516
+ this.tickets = this.tickets.map((x) => x);
517
+ this.cacheItem(this.tickets[itemIndex]);
518
+ }
519
+ callBack();
520
+ }
521
+ }
522
+ }
523
+ updateTable() {
524
+ this.tickets = this.tickets.map((x) => x);
525
+ }
526
+ closePopUp() {
527
+ this.openDropdownId = null;
528
+ this.popUps.forEach((popUp) => {
529
+ if (popUp.dropdownOpen) {
530
+ popUp.toggleDropdown();
531
+ }
532
+ });
533
+ }
534
+ onViewChange(isGridView) { }
535
+ showTableView = true;
536
+ onSelectionChange(selectedRows) { }
537
+ onColumnsUpdated(updatedColumns) {
538
+ const updatedColumnDef = [];
539
+ updatedColumns.forEach((col) => {
540
+ const matchingCol = this.service.ticketColumns.find((column) => column.header === col.name || column.id === col.name);
541
+ if (matchingCol) {
542
+ updatedColumnDef.push(matchingCol);
543
+ }
544
+ });
545
+ this.visibleColumnDef = [...updatedColumnDef];
546
+ }
547
+ exportFiltersAndSorts = async (pageState) => {
548
+ var payload = this.currentFilters.map((x) => {
549
+ return {
550
+ PropertyName: TicketPropertyMap[x.name.split(' ').join('')],
551
+ EntityValue: x.value,
552
+ Operator: SearchOperator.And,
553
+ Sign: x.condition && Object.keys(FilterTypes).includes(x.condition)
554
+ ? FilterTypes[x.condition]
555
+ : SearchPropertySign.EQ,
556
+ Type: x.name == TicketPropertyName.CreatedAt ||
557
+ x.name == TicketPropertyName.UpdatedAt
558
+ ? SearchPropertyValueType.Date
559
+ : SearchPropertyValueType.String,
560
+ };
561
+ });
562
+ // payload.push({
563
+ // PropertyName: 'APIKey',
564
+ // EntityValue: this.envSvc.environment.APIKey,
565
+ // Operator: SearchOperator.And,
566
+ // Sign: SearchPropertySign.EQ,
567
+ // });
568
+ for (let sort of this.currentSorts) {
569
+ payload.push({
570
+ PropertyName: TicketPropertyMap[sort.name.split(' ').join('')],
571
+ EntityValue: '',
572
+ Operator: SearchOperator.And,
573
+ Sign: SearchPropertySign.EQ,
574
+ Sort: sort.value.toLowerCase() == SortDirection.Asc.toLowerCase()
575
+ ? SortDirection.Asc
576
+ : sort.value.toLowerCase() == SortDirection.Desc.toLowerCase()
577
+ ? SortDirection.Desc
578
+ : SortDirection.None,
579
+ });
580
+ }
581
+ const searchPayload = [];
582
+ // if (this.activeApp) {
583
+ // payload.push({
584
+ // PropertyName: 'App',
585
+ // EntityValue: this.activeApp.Code,
586
+ // Operator: SearchOperator.And,
587
+ // Sign: SearchPropertySign.EQ,
588
+ // });
589
+ // searchPayload.push({
590
+ // PropertyName: 'App',
591
+ // EntityValue: this.activeApp.Code,
592
+ // Operator: SearchOperator.And,
593
+ // Sign: SearchPropertySign.EQ,
594
+ // });
595
+ // }
596
+ const searchTermExists = this.currentSearchTerm.trim().length > 0;
597
+ if (searchTermExists) {
598
+ Object.values(TicketPropertyMap).forEach((property) => {
599
+ searchPayload.push({
600
+ PropertyName: property,
601
+ EntityValue: this.currentSearchTerm.trim(),
602
+ Operator: SearchOperator.Or,
603
+ Sign: SearchPropertySign.LIKE,
604
+ });
605
+ });
606
+ }
607
+ if (this.activeTenant) {
608
+ payload.push({
609
+ PropertyName: 'TenantId',
610
+ EntityValue: this.activeTenant,
611
+ Operator: SearchOperator.And,
612
+ Sign: SearchPropertySign.EQ,
613
+ });
614
+ searchPayload.push({
615
+ PropertyName: 'TenantId',
616
+ EntityValue: this.activeTenant,
617
+ Operator: SearchOperator.And,
618
+ Sign: SearchPropertySign.EQ,
619
+ });
620
+ }
621
+ this.utilService.sendBI(true);
622
+ const res = searchTermExists
623
+ ? await this.server.post(`Ticket/SearchTicket/${pageState.skip}/${pageState.limit}`, searchPayload, this.envSvc.environment.TicketingAPI)
624
+ : payload.length == 0
625
+ ? await this.server.get(`Ticket/GetTicket/${pageState.skip}/${pageState.limit}`, this.envSvc.environment.TicketingAPI)
626
+ : await this.server.post(`Ticket/SearchTicket/${pageState.skip}/${pageState.limit}`, payload, this.envSvc.environment.TicketingAPI);
627
+ this.utilService.sendBI(false);
628
+ if (res instanceof ErrorResponse) {
629
+ return [];
630
+ }
631
+ else {
632
+ var result = res.Result;
633
+ return result;
634
+ }
635
+ };
636
+ async updateFiltersAndSorts(isSearch = false) {
637
+ if (!isSearch) {
638
+ this.dataView.onClearSearch();
639
+ this.currentSearchTerm = '';
640
+ this.cdr.detectChanges();
641
+ const clickEvent = new MouseEvent('click', {
642
+ bubbles: true,
643
+ cancelable: true,
644
+ view: window,
645
+ });
646
+ document.dispatchEvent(clickEvent);
647
+ }
648
+ var payload = this.currentFilters.map((x) => {
649
+ return {
650
+ PropertyName: TicketPropertyMap[x.name.split(' ').join('')],
651
+ EntityValue: x.value,
652
+ Operator: SearchOperator.And,
653
+ Sign: x.condition && Object.keys(FilterTypes).includes(x.condition)
654
+ ? FilterTypes[x.condition]
655
+ : SearchPropertySign.EQ,
656
+ Type: x.name == TicketPropertyName.CreatedAt ||
657
+ x.name == TicketPropertyName.UpdatedAt
658
+ ? SearchPropertyValueType.Date
659
+ : SearchPropertyValueType.String,
660
+ };
661
+ });
662
+ // payload.push({
663
+ // PropertyName: 'APIKey',
664
+ // EntityValue: this.envSvc.environment.APIKey,
665
+ // Operator: SearchOperator.And,
666
+ // Sign: SearchPropertySign.EQ,
667
+ // });
668
+ for (let sort of this.currentSorts) {
669
+ payload.push({
670
+ PropertyName: TicketPropertyMap[sort.name.split(' ').join('')],
671
+ EntityValue: '',
672
+ Operator: SearchOperator.And,
673
+ Sign: SearchPropertySign.EQ,
674
+ Sort: sort.value.toLowerCase() == SortDirection.Asc.toLowerCase()
675
+ ? SortDirection.Asc
676
+ : sort.value.toLowerCase() == SortDirection.Desc.toLowerCase()
677
+ ? SortDirection.Desc
678
+ : SortDirection.None,
679
+ });
680
+ }
681
+ const searchPayload = [];
682
+ // if (this.activeApp) {
683
+ // payload.push({
684
+ // PropertyName: 'App',
685
+ // EntityValue: this.activeApp.Code,
686
+ // Operator: SearchOperator.And,
687
+ // Sign: SearchPropertySign.EQ,
688
+ // });
689
+ // searchPayload.push({
690
+ // PropertyName: 'App',
691
+ // EntityValue: this.activeApp.Code,
692
+ // Operator: SearchOperator.And,
693
+ // Sign: SearchPropertySign.EQ,
694
+ // });
695
+ // }
696
+ const searchTermExists = this.currentSearchTerm.trim().length > 0;
697
+ if (searchTermExists) {
698
+ Object.values(TicketPropertyMap).forEach((property) => {
699
+ searchPayload.push({
700
+ PropertyName: property,
701
+ EntityValue: this.currentSearchTerm.trim(),
702
+ Operator: SearchOperator.Or,
703
+ Sign: SearchPropertySign.LIKE,
704
+ });
705
+ });
706
+ }
707
+ if (this.activeTenant) {
708
+ payload.push({
709
+ PropertyName: 'TenantId',
710
+ EntityValue: this.activeTenant,
711
+ Operator: SearchOperator.And,
712
+ Sign: SearchPropertySign.EQ,
713
+ });
714
+ searchPayload.push({
715
+ PropertyName: 'TenantId',
716
+ EntityValue: this.activeTenant,
717
+ Operator: SearchOperator.And,
718
+ Sign: SearchPropertySign.EQ,
719
+ });
720
+ }
721
+ this.utilService.sendBI(true);
722
+ const res = searchTermExists
723
+ ? await this.server.post(`Ticket/SearchTicket/0/${this.pageSize}`, searchPayload, this.envSvc.environment.TicketingAPI)
724
+ : payload.length == 0
725
+ ? await this.server.get(`Ticket/GetTicket/0/${this.pageSize}`, this.envSvc.environment.TicketingAPI)
726
+ : await this.server.post(`Ticket/SearchTicket/0/${this.pageSize}`, payload, this.envSvc.environment.TicketingAPI);
727
+ this.utilService.sendBI(false);
728
+ if (res instanceof ErrorResponse) {
729
+ this.currentFilters = [];
730
+ this.currentSorts = [];
731
+ return undefined;
732
+ }
733
+ else {
734
+ this.pageState = res;
735
+ var result = res.Result;
736
+ this.tickets = result.map((x) => {
737
+ return {
738
+ ...x,
739
+ Id: x.Code,
740
+ };
741
+ });
742
+ }
743
+ }
744
+ async loadMoreFiltersAndSorts() {
745
+ if (!this.pageState) {
746
+ return;
747
+ }
748
+ var payload = this.currentFilters.map((x) => {
749
+ return {
750
+ PropertyName: TicketPropertyMap[x.name.split(' ').join('')],
751
+ EntityValue: x.value,
752
+ Operator: SearchOperator.And,
753
+ Sign: x.condition && Object.keys(FilterTypes).includes(x.condition)
754
+ ? FilterTypes[x.condition]
755
+ : SearchPropertySign.EQ,
756
+ Type: x.name == TicketPropertyName.CreatedAt ||
757
+ x.name == TicketPropertyName.UpdatedAt
758
+ ? SearchPropertyValueType.Date
759
+ : SearchPropertyValueType.String,
760
+ };
761
+ });
762
+ for (let sort of this.currentSorts) {
763
+ payload.push({
764
+ PropertyName: TicketPropertyMap[sort.name.split(' ').join('')],
765
+ EntityValue: '',
766
+ Operator: SearchOperator.And,
767
+ Sign: SearchPropertySign.EQ,
768
+ Sort: sort.value.toLowerCase() == SortDirection.Asc.toLowerCase()
769
+ ? SortDirection.Asc
770
+ : sort.value.toLowerCase() == SortDirection.Desc.toLowerCase()
771
+ ? SortDirection.Desc
772
+ : SortDirection.None,
773
+ });
774
+ }
775
+ const searchPayload = [];
776
+ // if (this.activeApp) {
777
+ // payload.push({
778
+ // PropertyName: 'App',
779
+ // EntityValue: this.activeApp.Code,
780
+ // Operator: SearchOperator.And,
781
+ // Sign: SearchPropertySign.EQ,
782
+ // });
783
+ // searchPayload.push({
784
+ // PropertyName: 'App',
785
+ // EntityValue: this.activeApp.Code,
786
+ // Operator: SearchOperator.And,
787
+ // Sign: SearchPropertySign.EQ,
788
+ // });
789
+ // }
790
+ const searchTermExists = this.currentSearchTerm.trim().length > 0;
791
+ if (searchTermExists) {
792
+ Object.values(TicketPropertyMap).forEach((property) => {
793
+ searchPayload.push({
794
+ PropertyName: property,
795
+ EntityValue: this.currentSearchTerm.trim(),
796
+ Operator: SearchOperator.Or,
797
+ Sign: SearchPropertySign.LIKE,
798
+ });
799
+ });
800
+ }
801
+ if (this.activeTenant) {
802
+ payload.push({
803
+ PropertyName: 'TenantId',
804
+ EntityValue: this.activeTenant,
805
+ Operator: SearchOperator.And,
806
+ Sign: SearchPropertySign.EQ,
807
+ });
808
+ searchPayload.push({
809
+ PropertyName: 'TenantId',
810
+ EntityValue: this.activeTenant,
811
+ Operator: SearchOperator.And,
812
+ Sign: SearchPropertySign.EQ,
813
+ });
814
+ }
815
+ this.utilService.sendBI(true);
816
+ const res = searchTermExists
817
+ ? await this.server.post(`Ticket/SearchTicket/0/${this.pageSize}`, searchPayload, this.envSvc.environment.TicketingAPI)
818
+ : payload.length == 0
819
+ ? await this.server.get(`Ticket/GetTicket/${this.pageState.Skip}/${this.pageSize}`, this.envSvc.environment.TicketingAPI)
820
+ : await this.server.post(`Ticket/SearchTicket/${this.pageState.Skip}/${this.pageSize}`, payload, this.envSvc.environment.TicketingAPI);
821
+ this.utilService.sendBI(false);
822
+ if (res instanceof ErrorResponse) {
823
+ return undefined;
824
+ }
825
+ else {
826
+ var result = res;
827
+ return result;
828
+ }
829
+ }
830
+ onFilterUpdated(updatedFilters) {
831
+ // Ensure updatedFilters is an array
832
+ if (Array.isArray(updatedFilters)) {
833
+ this.currentFilters = updatedFilters;
834
+ this.updateFiltersAndSorts();
835
+ }
836
+ }
837
+ onSortUpdated(updatedSorts) {
838
+ this.currentSorts = updatedSorts;
839
+ this.updateFiltersAndSorts();
840
+ }
841
+ handleSearch(event) {
842
+ this.searchTerm$.next(event.value);
843
+ }
844
+ handleExport(exportedData) {
845
+ // console.log('Exported data:', exportedData);
846
+ this.downloadCSV(exportedData);
847
+ }
848
+ isFilteredState() {
849
+ return (this.currentSearchTerm.trim().length > 0 || this.currentFilters.length > 0);
850
+ }
851
+ downloadCSV(data) {
852
+ const headers = Object.keys(data[0]);
853
+ const csvContent = [
854
+ headers.join(','),
855
+ ...data.map((row) => headers.map((header) => row[header]).join(',')),
856
+ ].join('\n');
857
+ const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
858
+ const link = document.createElement('a');
859
+ if (link.download !== undefined) {
860
+ const url = URL.createObjectURL(blob);
861
+ link.setAttribute('href', url);
862
+ link.setAttribute('download', 'export.csv');
863
+ link.style.visibility = 'hidden';
864
+ document.body.appendChild(link);
865
+ link.click();
866
+ document.body.removeChild(link);
867
+ }
868
+ }
869
+ // get defaultCompany(): string {
870
+ // const check = this.store.get(AppKey.USER);
871
+ // if (!check) {
872
+ // return '';
873
+ // }
874
+ // const user: User = (this.store.get(AppKey.USER) as { User: User }).User;
875
+ // return user.DefaultCompany || '';
876
+ // }
877
+ onComplete(event) {
878
+ var defaultItem = {
879
+ Title: '',
880
+ Description: '',
881
+ App: this.activeApp ? this.activeApp : '',
882
+ Status: TicketStatus.Pending,
883
+ Company: this.defaultCompany,
884
+ Messages: [],
885
+ FileData: [],
886
+ FileUrls: [],
887
+ Id: this.tickets.length.toString(),
888
+ id: '',
889
+ Code: '',
890
+ TenantId: this.activeTenant ? this.activeTenant : '',
891
+ ServiceName: '',
892
+ CreatedAt: new Date(),
893
+ UpdatedAt: new Date(),
894
+ DataState: ObjectState.New,
895
+ };
896
+ this.importService.onComplete(event, defaultItem, 'Ticket/SaveTicket', this.envSvc.environment.TicketingAPI, 'Ticket', (items) => {
897
+ this.tickets = this.tickets.concat(items);
898
+ }, this.pageState);
899
+ }
900
+ tableCache = new Map();
901
+ cacheItem(item) {
902
+ const cacheKey = item.Id;
903
+ this.tableCache.set(cacheKey, JSON.parse(JSON.stringify(item)));
904
+ }
905
+ restoreCache(item) {
906
+ const cacheKey = item.Id;
907
+ const itemCache = this.tableCache.get(cacheKey);
908
+ if (itemCache) {
909
+ item.Description = itemCache.Description;
910
+ item.Priority = itemCache.Priority;
911
+ item.Status = itemCache.Status;
912
+ }
913
+ this.tableCache.delete(cacheKey);
914
+ }
915
+ // onAppSelected(app: Application | null) {
916
+ // this.activeApp = app;
917
+ // // if (app) {
918
+ // // const tenants = await this.service.getTenantsByApp(app.Code);
919
+ // // if (tenants) {
920
+ // // this.tenants = tenants;
921
+ // // }
922
+ // // }
923
+ // }
924
+ onAppListUpdated(apps) {
925
+ this.apps = apps;
926
+ }
927
+ onTenantListUpdated(tenants) {
928
+ this.tenants = tenants;
929
+ }
930
+ getLogoUrl(url) {
931
+ return `${this.envSvc.environment.AuthenticationAPI}/${url}`;
932
+ }
933
+ addNewTicket() {
934
+ this.selectedTicket = null;
935
+ this.showTicketForm = true;
936
+ }
937
+ // editApp(app: Application) {
938
+ // this.selectedApp = app;
939
+ // this.showAppForm = true;
940
+ // }
941
+ // editTenant(tenant: Tenant) {
942
+ // this.selectedTenant = tenant;
943
+ // this.showTenantForm = true;
944
+ // }
945
+ editTicket(ticket) {
946
+ this.selectedTicket = ticket;
947
+ this.showTicketForm = true;
948
+ }
949
+ // onAppModalClose() {
950
+ // this.showAppForm = false;
951
+ // this.selectedApp = null;
952
+ // }
953
+ // onTenantModalClose() {
954
+ // this.showTenantForm = false;
955
+ // this.selectedTenant = null;
956
+ // }
957
+ onTicketModalClose() {
958
+ this.showTicketForm = false;
959
+ this.selectedTicket = null;
960
+ }
961
+ // onAppSave(app: Application) {
962
+ // const idx = this.apps.findIndex((x) => x.Code == app.Code);
963
+ // if (app.Code.trim().length > 0 && idx > -1) {
964
+ // this.apps[idx].Name = app.Name;
965
+ // this.apps[idx].Description = app.Description;
966
+ // this.apps[idx].DataState = app.DataState;
967
+ // } else {
968
+ // this.apps.push(app);
969
+ // }
970
+ // }
971
+ // onTenantSave(tenant: Tenant) {
972
+ // const idx = this.tenants.findIndex((x) => x.Code == tenant.Code);
973
+ // if (tenant.Code.trim().length > 0 && idx > -1) {
974
+ // this.tenants[idx].Name = tenant.Name;
975
+ // this.tenants[idx].Description = tenant.Description;
976
+ // this.tenants[idx].DataState = tenant.DataState;
977
+ // } else {
978
+ // this.tenants.push(tenant);
979
+ // }
980
+ // }
981
+ onTicketSave(ticket) {
982
+ const idx = this.tickets.findIndex((x) => x.Code == ticket.Code);
983
+ console.log({ Tickets: this.tickets, Ticket: ticket, idx: idx });
984
+ if (ticket.Code.trim().length > 0 && idx > -1) {
985
+ this.tickets[idx].Title = ticket.Title;
986
+ this.tickets[idx].Description = ticket.Description;
987
+ // this.tickets[idx].CurrentHandler = ticket.CurrentHandler;
988
+ this.tickets[idx].Priority = ticket.Priority;
989
+ this.tickets[idx].Status = ticket.Status;
990
+ this.tickets[idx].FileUrls = ticket.FileUrls;
991
+ this.tickets[idx].DataState = ticket.DataState;
992
+ }
993
+ else {
994
+ this.tickets.unshift(ticket);
995
+ }
996
+ this.updateTable();
997
+ }
998
+ viewTicketDetails(ticket) {
999
+ this.utilService.goToPage(`${this.detailPath}`, ticket.Code);
1000
+ }
1001
+ cssColorToHex(color) {
1002
+ const ctx = document.createElement('canvas').getContext('2d');
1003
+ if (!ctx)
1004
+ return null;
1005
+ ctx.fillStyle = '#000'; // set a known color
1006
+ ctx.fillStyle = color; // assign any CSS-valid color
1007
+ const computed = ctx.fillStyle;
1008
+ // If the browser does NOT understand the value, it won’t change from '#000'
1009
+ if (computed.toLowerCase() === '#000000' &&
1010
+ color.toLowerCase() !== 'black') {
1011
+ return null; // invalid color name or unsupported value
1012
+ }
1013
+ return computed.toUpperCase(); // returns hex like #1E90FF
1014
+ }
1015
+ softenColor(hex, lightenPercent = 55, alphaPercent = 55) {
1016
+ // Remove #
1017
+ if (!hex.startsWith('#')) {
1018
+ const converted = this.cssColorToHex(hex);
1019
+ if (converted) {
1020
+ hex = converted;
1021
+ }
1022
+ }
1023
+ hex = hex.replace(/^#/, '');
1024
+ if (hex.length === 3) {
1025
+ // Convert shorthand (#abc → #aabbcc)
1026
+ hex = hex
1027
+ .split('')
1028
+ .map((x) => x + x)
1029
+ .join('');
1030
+ }
1031
+ const num = parseInt(hex, 16);
1032
+ let r = (num >> 16) & 0xff;
1033
+ let g = (num >> 8) & 0xff;
1034
+ let b = num & 0xff;
1035
+ // Lighten toward white by the given percentage
1036
+ r = Math.min(255, Math.round(r + (255 - r) * (lightenPercent / 100)));
1037
+ g = Math.min(255, Math.round(g + (255 - g) * (lightenPercent / 100)));
1038
+ b = Math.min(255, Math.round(b + (255 - b) * (lightenPercent / 100)));
1039
+ // Convert alpha percent to 2-digit hex
1040
+ const alpha = Math.round((alphaPercent / 100) * 255);
1041
+ const aHex = alpha.toString(16).padStart(2, '0').toUpperCase();
1042
+ return `#${r.toString(16).padStart(2, '0').toUpperCase()}${g
1043
+ .toString(16)
1044
+ .padStart(2, '0')
1045
+ .toUpperCase()}${b.toString(16).padStart(2, '0').toUpperCase()}${aHex}`;
1046
+ }
1047
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketingComponent, deps: [{ token: i1.UtilService }, { token: i1.HttpWebRequestService }, { token: i0.ChangeDetectorRef }, { token: TicketingService }, { token: i3.ActivatedRoute }, { token: i1.ImportService }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
1048
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: TicketingComponent, selector: "app-ticketing", inputs: { permissionConfig: "permissionConfig", activeApp: "activeApp", activeTenant: "activeTenant", detailPath: "detailPath", defaultCompany: "defaultCompany", baseUrl: "baseUrl" }, viewQueries: [{ propertyName: "columnTemplates", predicate: ColumnDirective, descendants: true, isSignal: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }, { propertyName: "popUps", predicate: ["popup"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex flex-col gap-4\">\n <div class=\"flex flex-col gap-4\">\n <!-- <app-tenant-selector\n (onAppSelected)=\"this.onAppSelected($event)\"\n (onTenantSelected)=\"onTenantSelected($event)\"\n (onAppsUpdated)=\"this.onAppListUpdated($event)\"\n (onTenantsUpdated)=\"this.onTenantListUpdated($event)\"\n ></app-tenant-selector> -->\n\n <div\n class=\"tickets-section flex flex-col gap-2\"\n >\n\n <div class=\"ticket-table-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport:!permissionConfig|| permissionConfig.Actions['Export'],\n isSelect: true,\n isCreate: false,\n isToggle: false,\n isImport:!permissionConfig|| permissionConfig.Actions['Import']\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (onSearchChange)=\"handleSearch($event)\"\n [isTableView]=\"true\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [dataKey]=\"'Id'\"\n class=\"form-table\"\n #dt\n [data]=\"tickets\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | companyDate }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | companyDate }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"title\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.Title }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"row.Title\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"description\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.Description | ellipseWord }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input\n [(ngModel)]=\"row.Description\"\n ></verbena-input>\n </div>\n <!-- <div class=\"width-max\">\n <verbena-textarea [(ngModel)]=\"row.Description\">\n </verbena-textarea>\n </div> -->\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"currentHandler\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.CurrentHandler }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"lastHandler\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.LastHandler }}\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"priority\">\n <ng-template #cell let-row=\"row\" let-value>\n <div\n *ngIf=\"\n row.Priority && row.Priority\n | asyncLabel : 'TenantPriority' : 'Color' : ticketingAPI\n | async as color\n \"\n class=\"enum-val rounded-[8px] flex gap-2 items-center justify-center\"\n [style.backgroundColor]=\"color ? softenColor(color) : null\"\n\n >\n <span\n [style.backgroundColor]=\"color\"\n class=\"enum-dot\"\n ></span>\n <span>{{\n row.Priority\n | asyncLabel : \"TenantPriority\" : \"Name\" : ticketingAPI\n | async\n }}</span>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"row.Priority\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"status\">\n <ng-template #cell let-row=\"row\" let-value>\n <div\n *ngIf=\"row.Status\"\n class=\"enum-val rounded-[8px] flex gap-2 items-center justify-center {{\n row.Status\n }}\"\n >\n <span class=\"enum-dot\"></span>\n <span>{{ row.Status }}</span>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n [(ngModel)]=\"row.Status\"\n >\n </verben-drop-down>\n </ng-template>\n </ng-container>\n\n \n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n > \n <verben-svg\n class=\"cursor-pointer actions-icon\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n *ngIf=\"!permissionConfig|| permissionConfig.Actions['Create']\"\n (click)=\"editTicket(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <div\n (click)=\"viewTicketDetails(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n View Details\n </div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"tableSaveTicket(value, toggleRowEdit)\"\n ></verben-svg>\n <verben-svg\n (click)=\"restoreCache(value); toggleRowEdit()\"\n icon=\"close-no-circle\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <!-- <verben-svg (click)=\"toggleRowEdit()\" icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg> -->\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div import-content>\n <lib-data-import\n [previewColumns]=\"visibleColumnDef\"\n title=\"vendor-group\"\n (importEventData)=\"onComplete($event)\"\n [columnTemplates]=\"columnTemplates()\"\n >\n </lib-data-import>\n </div>\n <div export-content>\n <lib-data-xport\n [useImportKey]=\"true\"\n [columns]=\"visibleColumnDef\"\n [dataQueryFunction]=\"exportFiltersAndSorts\"\n [data]=\"tickets\"\n >\n </lib-data-xport>\n </div>\n <div children>\n <verbena-button\n width=\"100%\"\n [useIcon]=\"true\"\n [icon]=\"'add'\"\n class=\"verben-primary-button\"\n [text]=\"'Add New Ticket'\"\n (click)=\"addNewTicket()\"\n >\n </verbena-button>\n </div>\n </verben-data-view>\n </div>\n <div\n *ngIf=\"tickets.length > 0\"\n class=\"flex justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\">{{ tickets.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n </div>\n\n <div\n *ngIf=\"\n this.apps.length == 0 ||\n (this.activeApp && this.tenants.length == 0) ||\n (this.activeTenant && this.tickets.length == 0 && !isFilteredState())\n \"\n class=\"create-container flex-1 rounded-[20px] flex items-center justify-center\"\n >\n\n </div>\n</div>\n\n<!-- <app-add-app\n [isVisible]=\"showAppForm\"\n [selectedApp]=\"selectedApp\"\n (onClose)=\"onAppModalClose()\"\n (onSave)=\"onAppSave($event)\"\n></app-add-app>\n\n<app-add-tenant\n [isVisible]=\"showTenantForm\"\n [activeApp]=\"activeApp\"\n [selectedTenant]=\"selectedTenant\"\n (onClose)=\"onTenantModalClose()\"\n (onSave)=\"onTenantSave($event)\"\n></app-add-tenant> -->\n\n<app-add-ticket\n [isVisible]=\"showTicketForm\"\n [activeApp]=\"activeApp\"\n [activeTenant]=\"activeTenant\"\n [selectedTicket]=\"selectedTicket\"\n (onClose)=\"onTicketModalClose()\"\n (onSave)=\"onTicketSave($event)\"\n></app-add-ticket>\n", styles: [".app-card-container{overflow-x:auto;padding:5px}.app-card{border:1.5px solid #0000001a;flex:1 1 250px;aspect-ratio:9/5;max-width:250px;box-shadow:0 0 12px transparent}.app-card.active{border:1.5px solid #6f2290;box-shadow:0 0 12px #b48ef766}.tenants-container{overflow-x:auto}.tenant{border:1.5px solid #0000001a;min-width:max-content}.tenant.active{border:1.5px solid #6f2290}.create-container{border:1.5px solid #0000001a}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i6.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i6.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i6.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i6.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i6.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i6.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i6.DataImportComponent, selector: "lib-data-import", inputs: ["previewColumns", "formGroupConfig", "fields", "title", "columnTemplates", "parser", "previewData", "onImportComplete"], outputs: ["exportTemplateEvent", "importEvent", "importEventData", "rowSave"] }, { kind: "component", type: i6.DataXportComponent, selector: "lib-data-xport", inputs: ["data", "columns", "useImportKey", "dataFetchUrl", "dataQueryParameters", "dataQueryFunction"], outputs: ["exportDataEvent", "exportDataRangeEvent"] }, { kind: "component", type: i7.AddTicketComponent, selector: "app-add-ticket", inputs: ["activeApp", "activeTenant", "selectedTicket", "isVisible", "defaultCompany"], outputs: ["onOpen", "onClose", "onSave"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AsyncLabelPipe, name: "asyncLabel" }, { kind: "pipe", type: i8.EllipseWordPipe, name: "ellipseWord" }, { kind: "pipe", type: i8.CompanyDatePipe, name: "companyDate" }] });
1049
+ }
1050
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketingComponent, decorators: [{
1051
+ type: Component,
1052
+ args: [{ selector: 'app-ticketing', template: "<div class=\"h-full flex flex-col gap-4\">\n <div class=\"flex flex-col gap-4\">\n <!-- <app-tenant-selector\n (onAppSelected)=\"this.onAppSelected($event)\"\n (onTenantSelected)=\"onTenantSelected($event)\"\n (onAppsUpdated)=\"this.onAppListUpdated($event)\"\n (onTenantsUpdated)=\"this.onTenantListUpdated($event)\"\n ></app-tenant-selector> -->\n\n <div\n class=\"tickets-section flex flex-col gap-2\"\n >\n\n <div class=\"ticket-table-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport:!permissionConfig|| permissionConfig.Actions['Export'],\n isSelect: true,\n isCreate: false,\n isToggle: false,\n isImport:!permissionConfig|| permissionConfig.Actions['Import']\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (onSearchChange)=\"handleSearch($event)\"\n [isTableView]=\"true\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [dataKey]=\"'Id'\"\n class=\"form-table\"\n #dt\n [data]=\"tickets\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | companyDate }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | companyDate }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"title\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.Title }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"row.Title\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"description\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.Description | ellipseWord }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input\n [(ngModel)]=\"row.Description\"\n ></verbena-input>\n </div>\n <!-- <div class=\"width-max\">\n <verbena-textarea [(ngModel)]=\"row.Description\">\n </verbena-textarea>\n </div> -->\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"currentHandler\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.CurrentHandler }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"lastHandler\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ row.LastHandler }}\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"priority\">\n <ng-template #cell let-row=\"row\" let-value>\n <div\n *ngIf=\"\n row.Priority && row.Priority\n | asyncLabel : 'TenantPriority' : 'Color' : ticketingAPI\n | async as color\n \"\n class=\"enum-val rounded-[8px] flex gap-2 items-center justify-center\"\n [style.backgroundColor]=\"color ? softenColor(color) : null\"\n\n >\n <span\n [style.backgroundColor]=\"color\"\n class=\"enum-dot\"\n ></span>\n <span>{{\n row.Priority\n | asyncLabel : \"TenantPriority\" : \"Name\" : ticketingAPI\n | async\n }}</span>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"row.Priority\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"status\">\n <ng-template #cell let-row=\"row\" let-value>\n <div\n *ngIf=\"row.Status\"\n class=\"enum-val rounded-[8px] flex gap-2 items-center justify-center {{\n row.Status\n }}\"\n >\n <span class=\"enum-dot\"></span>\n <span>{{ row.Status }}</span>\n </div>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateData=\"updateData\"\n let-value\n >\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n [(ngModel)]=\"row.Status\"\n >\n </verben-drop-down>\n </ng-template>\n </ng-container>\n\n \n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n > \n <verben-svg\n class=\"cursor-pointer actions-icon\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n *ngIf=\"!permissionConfig|| permissionConfig.Actions['Create']\"\n (click)=\"editTicket(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <div\n (click)=\"viewTicketDetails(value); closePopUp()\"\n class=\"pop-up-value cursor-pointer\"\n >\n View Details\n </div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"tableSaveTicket(value, toggleRowEdit)\"\n ></verben-svg>\n <verben-svg\n (click)=\"restoreCache(value); toggleRowEdit()\"\n icon=\"close-no-circle\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <!-- <verben-svg (click)=\"toggleRowEdit()\" icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg> -->\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div import-content>\n <lib-data-import\n [previewColumns]=\"visibleColumnDef\"\n title=\"vendor-group\"\n (importEventData)=\"onComplete($event)\"\n [columnTemplates]=\"columnTemplates()\"\n >\n </lib-data-import>\n </div>\n <div export-content>\n <lib-data-xport\n [useImportKey]=\"true\"\n [columns]=\"visibleColumnDef\"\n [dataQueryFunction]=\"exportFiltersAndSorts\"\n [data]=\"tickets\"\n >\n </lib-data-xport>\n </div>\n <div children>\n <verbena-button\n width=\"100%\"\n [useIcon]=\"true\"\n [icon]=\"'add'\"\n class=\"verben-primary-button\"\n [text]=\"'Add New Ticket'\"\n (click)=\"addNewTicket()\"\n >\n </verbena-button>\n </div>\n </verben-data-view>\n </div>\n <div\n *ngIf=\"tickets.length > 0\"\n class=\"flex justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\">{{ tickets.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n </div>\n\n <div\n *ngIf=\"\n this.apps.length == 0 ||\n (this.activeApp && this.tenants.length == 0) ||\n (this.activeTenant && this.tickets.length == 0 && !isFilteredState())\n \"\n class=\"create-container flex-1 rounded-[20px] flex items-center justify-center\"\n >\n\n </div>\n</div>\n\n<!-- <app-add-app\n [isVisible]=\"showAppForm\"\n [selectedApp]=\"selectedApp\"\n (onClose)=\"onAppModalClose()\"\n (onSave)=\"onAppSave($event)\"\n></app-add-app>\n\n<app-add-tenant\n [isVisible]=\"showTenantForm\"\n [activeApp]=\"activeApp\"\n [selectedTenant]=\"selectedTenant\"\n (onClose)=\"onTenantModalClose()\"\n (onSave)=\"onTenantSave($event)\"\n></app-add-tenant> -->\n\n<app-add-ticket\n [isVisible]=\"showTicketForm\"\n [activeApp]=\"activeApp\"\n [activeTenant]=\"activeTenant\"\n [selectedTicket]=\"selectedTicket\"\n (onClose)=\"onTicketModalClose()\"\n (onSave)=\"onTicketSave($event)\"\n></app-add-ticket>\n", styles: [".app-card-container{overflow-x:auto;padding:5px}.app-card{border:1.5px solid #0000001a;flex:1 1 250px;aspect-ratio:9/5;max-width:250px;box-shadow:0 0 12px transparent}.app-card.active{border:1.5px solid #6f2290;box-shadow:0 0 12px #b48ef766}.tenants-container{overflow-x:auto}.tenant{border:1.5px solid #0000001a;min-width:max-content}.tenant.active{border:1.5px solid #6f2290}.create-container{border:1.5px solid #0000001a}\n"] }]
1053
+ }], ctorParameters: () => [{ type: i1.UtilService }, { type: i1.HttpWebRequestService }, { type: i0.ChangeDetectorRef }, { type: TicketingService }, { type: i3.ActivatedRoute }, { type: i1.ImportService }, { type: i1.EnvironmentService }], propDecorators: { permissionConfig: [{
1054
+ type: Input
1055
+ }], activeApp: [{
1056
+ type: Input
1057
+ }], activeTenant: [{
1058
+ type: Input
1059
+ }], detailPath: [{
1060
+ type: Input
1061
+ }], defaultCompany: [{
1062
+ type: Input
1063
+ }], baseUrl: [{
1064
+ type: Input
1065
+ }], dataView: [{
1066
+ type: ViewChild,
1067
+ args: ['vdv']
1068
+ }], tableView: [{
1069
+ type: ViewChild,
1070
+ args: ['dt']
1071
+ }], popUps: [{
1072
+ type: ViewChildren,
1073
+ args: ['popup']
1074
+ }] } });
1075
+
1076
+ class TicketLibModule {
1077
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketLibModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1078
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: TicketLibModule, declarations: [TicketingComponent], imports: [CommonModule,
1079
+ FormsModule,
1080
+ ReactiveFormsModule,
1081
+ DataTableModule,
1082
+ SvgModule,
1083
+ VerbenPopUpModule,
1084
+ DataViewModule,
1085
+ VerbenaButtonModule,
1086
+ CardDataViewModule,
1087
+ DropDownModule,
1088
+ VerbenaSwitchModule,
1089
+ TableFilterModule,
1090
+ VisibleColumnModule,
1091
+ AsyncLabelPipe,
1092
+ SortTableModule,
1093
+ DataExportModule,
1094
+ TooltipModule,
1095
+ VerbenDialogueModule,
1096
+ VerbenaInputModule,
1097
+ DataImportModule,
1098
+ DataExportModule,
1099
+ DataXportModule,
1100
+ EllipseWordPipe,
1101
+ CompanyDatePipe,
1102
+ AddTicketLibModule], exports: [TicketingComponent] });
1103
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketLibModule, imports: [CommonModule,
1104
+ FormsModule,
1105
+ ReactiveFormsModule,
1106
+ DataTableModule,
1107
+ SvgModule,
1108
+ VerbenPopUpModule,
1109
+ DataViewModule,
1110
+ VerbenaButtonModule,
1111
+ CardDataViewModule,
1112
+ DropDownModule,
1113
+ VerbenaSwitchModule,
1114
+ TableFilterModule,
1115
+ VisibleColumnModule,
1116
+ SortTableModule,
1117
+ DataExportModule,
1118
+ TooltipModule,
1119
+ VerbenDialogueModule,
1120
+ VerbenaInputModule,
1121
+ DataImportModule,
1122
+ DataExportModule,
1123
+ DataXportModule,
1124
+ AddTicketLibModule] });
1125
+ }
1126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketLibModule, decorators: [{
1127
+ type: NgModule,
1128
+ args: [{
1129
+ declarations: [TicketingComponent],
1130
+ imports: [
1131
+ CommonModule,
1132
+ FormsModule,
1133
+ ReactiveFormsModule,
1134
+ DataTableModule,
1135
+ SvgModule,
1136
+ VerbenPopUpModule,
1137
+ DataViewModule,
1138
+ VerbenaButtonModule,
1139
+ CardDataViewModule,
1140
+ DropDownModule,
1141
+ VerbenaSwitchModule,
1142
+ TableFilterModule,
1143
+ VisibleColumnModule,
1144
+ AsyncLabelPipe,
1145
+ SortTableModule,
1146
+ DataExportModule,
1147
+ TooltipModule,
1148
+ VerbenDialogueModule,
1149
+ VerbenaInputModule,
1150
+ DataImportModule,
1151
+ DataExportModule,
1152
+ DataXportModule,
1153
+ EllipseWordPipe,
1154
+ CompanyDatePipe,
1155
+ AddTicketLibModule,
1156
+ ],
1157
+ exports: [TicketingComponent],
1158
+ }]
1159
+ }] });
1160
+
1161
+ /**
1162
+ * Generated bundle index. Do not edit.
1163
+ */
1164
+
1165
+ export { TicketLibModule, TicketingComponent, TicketingService };
1166
+ //# sourceMappingURL=verben-ticketing-ui-src-lib-components-ticketing.mjs.map