tin-spa 14.3.11 → 14.10.2

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 (227) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/classes/Classes.mjs +53 -206
  3. package/esm2020/lib/classes/LibClasses.mjs +180 -0
  4. package/esm2020/lib/classes/TinCore.mjs +201 -42
  5. package/esm2020/lib/components/alert/alert.component.mjs +12 -6
  6. package/esm2020/lib/components/attach/attach.component.mjs +49 -33
  7. package/esm2020/lib/components/capsules/capsules.component.mjs +63 -0
  8. package/esm2020/lib/components/cards/cards.component.mjs +103 -0
  9. package/esm2020/lib/components/date/date.component.mjs +6 -6
  10. package/esm2020/lib/components/datetime/datetime.component.mjs +6 -3
  11. package/esm2020/lib/components/email/email.component.mjs +133 -0
  12. package/esm2020/lib/components/filter/filter.component.mjs +7 -3
  13. package/esm2020/lib/components/form/form.component.mjs +155 -53
  14. package/esm2020/lib/components/html/html.component.mjs +34 -0
  15. package/esm2020/lib/components/label/label.component.mjs +6 -3
  16. package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
  17. package/esm2020/lib/components/money/money.component.mjs +26 -9
  18. package/esm2020/lib/components/multi-select/multi-select.component.mjs +165 -0
  19. package/esm2020/lib/components/multi-text/multi-text.component.mjs +208 -0
  20. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +32 -28
  21. package/esm2020/lib/components/notes/notes.component.mjs +62 -0
  22. package/esm2020/lib/components/number/number.component.mjs +23 -8
  23. package/esm2020/lib/components/option/option.component.mjs +39 -14
  24. package/esm2020/lib/components/page/page.component.mjs +101 -0
  25. package/esm2020/lib/components/search/search.component.mjs +10 -5
  26. package/esm2020/lib/components/select/select.component.mjs +56 -119
  27. package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +87 -0
  28. package/esm2020/lib/components/select-common/select-common.component.mjs +189 -0
  29. package/esm2020/lib/components/select-internal/select-internal.component.mjs +75 -0
  30. package/esm2020/lib/components/select-lite/select-lite.component.mjs +18 -0
  31. package/esm2020/lib/components/steps/steps.component.mjs +83 -61
  32. package/esm2020/lib/components/suffix/suffix.component.mjs +70 -0
  33. package/esm2020/lib/components/table/detailsDialog.component.mjs +179 -37
  34. package/esm2020/lib/components/table/table.component.mjs +142 -108
  35. package/esm2020/lib/components/table-action/table-action.component.mjs +42 -8
  36. package/esm2020/lib/components/table-header/table-header.component.mjs +87 -15
  37. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +183 -35
  38. package/esm2020/lib/components/table-internal/table-internal.component.mjs +144 -109
  39. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +371 -0
  40. package/esm2020/lib/components/table-lite/table-lite.component.mjs +441 -0
  41. package/esm2020/lib/components/table-row/table-row.component.mjs +41 -6
  42. package/esm2020/lib/components/text/text.component.mjs +97 -42
  43. package/esm2020/lib/components/tiles/tiles.component.mjs +44 -26
  44. package/esm2020/lib/components/viewer/viewer.component.mjs +7 -3
  45. package/esm2020/lib/components/viewer/viewerDialog.component.mjs +20 -13
  46. package/esm2020/lib/modules/admin/admin-routing.module.mjs +32 -22
  47. package/esm2020/lib/modules/index/index-routing.module.mjs +4 -4
  48. package/esm2020/lib/modules/spa-admin.module.mjs +7 -7
  49. package/esm2020/lib/modules/spa-index.module.mjs +4 -4
  50. package/esm2020/lib/modules/spa-user.module.mjs +3 -3
  51. package/esm2020/lib/modules/user/user-routing.module.mjs +3 -3
  52. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +56 -0
  53. package/esm2020/lib/pages/accounts/accounts.component.mjs +70 -0
  54. package/esm2020/lib/pages/app-models/app-models.component.mjs +56 -0
  55. package/esm2020/lib/pages/approvals/approvals.component.mjs +19 -0
  56. package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +165 -0
  57. package/esm2020/lib/pages/bug/bug.component.mjs +14 -0
  58. package/esm2020/lib/pages/change-password/change-password.component.mjs +92 -0
  59. package/esm2020/lib/pages/create-account/create-account.component.mjs +110 -0
  60. package/esm2020/lib/pages/customers/customers.component.mjs +21 -0
  61. package/esm2020/lib/{components → pages}/departments/departments.component.mjs +3 -5
  62. package/esm2020/lib/pages/employees/employees.component.mjs +20 -0
  63. package/esm2020/lib/pages/grades/grades.component.mjs +14 -0
  64. package/esm2020/lib/pages/inventory/inventory.component.mjs +99 -0
  65. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +53 -0
  66. package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +71 -0
  67. package/esm2020/lib/pages/login/login.component.mjs +166 -0
  68. package/esm2020/lib/pages/logs/logs.component.mjs +42 -0
  69. package/esm2020/lib/pages/membership/membership.component.mjs +44 -0
  70. package/esm2020/lib/pages/notifications/notifications.component.mjs +90 -0
  71. package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +113 -0
  72. package/esm2020/lib/pages/plans/plans.component.mjs +44 -0
  73. package/esm2020/lib/pages/positions/positions.component.mjs +21 -0
  74. package/esm2020/lib/pages/profile/profile.component.mjs +94 -0
  75. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +46 -0
  76. package/esm2020/lib/{components → pages}/roles/addRoleDialog.component.mjs +3 -3
  77. package/esm2020/lib/pages/roles/roles.component.mjs +151 -0
  78. package/esm2020/lib/{components → pages}/settings/settings.component.mjs +2 -11
  79. package/esm2020/lib/pages/signup/signup.component.mjs +50 -0
  80. package/esm2020/lib/pages/suppliers/suppliers.component.mjs +22 -0
  81. package/esm2020/lib/pages/tasks/tasks.component.mjs +86 -0
  82. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +228 -0
  83. package/esm2020/lib/pages/tenants/tenants.component.mjs +47 -0
  84. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +80 -0
  85. package/esm2020/lib/pages/transactions/transactions.component.mjs +101 -0
  86. package/esm2020/lib/pages/users/users.component.mjs +141 -0
  87. package/esm2020/lib/pages/welcome/welcome.component.mjs +86 -0
  88. package/esm2020/lib/select-context.directive.mjs +23 -0
  89. package/esm2020/lib/services/auth.service.mjs +3 -2
  90. package/esm2020/lib/services/button.service.mjs +90 -30
  91. package/esm2020/lib/services/csv.service.mjs +49 -0
  92. package/esm2020/lib/services/datalib.service.mjs +504 -76
  93. package/esm2020/lib/services/dialog.service.mjs +24 -7
  94. package/esm2020/lib/services/log.service.mjs +2 -2
  95. package/esm2020/lib/services/notifications.service.mjs +33 -0
  96. package/esm2020/lib/services/table-config.service.mjs +55 -7
  97. package/esm2020/lib/tin-spa.module.mjs +70 -30
  98. package/esm2020/public-api.mjs +33 -25
  99. package/fesm2015/tin-spa.mjs +6258 -2345
  100. package/fesm2015/tin-spa.mjs.map +1 -1
  101. package/fesm2020/tin-spa.mjs +6308 -2336
  102. package/fesm2020/tin-spa.mjs.map +1 -1
  103. package/lib/classes/Classes.d.ts +244 -294
  104. package/lib/classes/LibClasses.d.ts +173 -0
  105. package/lib/classes/TinCore.d.ts +13 -3
  106. package/lib/components/attach/attach.component.d.ts +13 -6
  107. package/lib/components/capsules/capsules.component.d.ts +26 -0
  108. package/lib/components/cards/cards.component.d.ts +39 -0
  109. package/lib/components/datetime/datetime.component.d.ts +2 -1
  110. package/lib/components/email/email.component.d.ts +40 -0
  111. package/lib/components/filter/filter.component.d.ts +1 -0
  112. package/lib/components/form/form.component.d.ts +20 -9
  113. package/lib/components/html/html.component.d.ts +16 -0
  114. package/lib/components/label/label.component.d.ts +2 -1
  115. package/lib/components/money/money.component.d.ts +8 -1
  116. package/lib/components/multi-select/multi-select.component.d.ts +47 -0
  117. package/lib/components/multi-text/multi-text.component.d.ts +56 -0
  118. package/lib/components/nav-menu/nav-menu.component.d.ts +6 -2
  119. package/lib/components/notes/notes.component.d.ts +19 -0
  120. package/lib/components/number/number.component.d.ts +7 -1
  121. package/lib/components/option/option.component.d.ts +11 -2
  122. package/lib/components/page/page.component.d.ts +38 -0
  123. package/lib/components/search/search.component.d.ts +3 -1
  124. package/lib/components/select/select.component.d.ts +16 -35
  125. package/lib/components/select-bitwise/select-bitwise.component.d.ts +31 -0
  126. package/lib/components/select-common/select-common.component.d.ts +50 -0
  127. package/lib/components/select-internal/select-internal.component.d.ts +23 -0
  128. package/lib/components/select-lite/select-lite.component.d.ts +8 -0
  129. package/lib/components/steps/steps.component.d.ts +18 -9
  130. package/lib/components/suffix/suffix.component.d.ts +23 -0
  131. package/lib/components/table/detailsDialog.component.d.ts +24 -7
  132. package/lib/components/table/table.component.d.ts +18 -9
  133. package/lib/components/table-action/table-action.component.d.ts +4 -1
  134. package/lib/components/table-header/table-header.component.d.ts +19 -4
  135. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +24 -7
  136. package/lib/components/table-internal/table-internal.component.d.ts +18 -9
  137. package/lib/components/table-lite/detailsDialog-lite.component.d.ts +81 -0
  138. package/lib/components/table-lite/table-lite.component.d.ts +91 -0
  139. package/lib/components/table-row/table-row.component.d.ts +5 -2
  140. package/lib/components/text/text.component.d.ts +17 -4
  141. package/lib/components/tiles/tiles.component.d.ts +7 -4
  142. package/lib/components/viewer/viewerDialog.component.d.ts +3 -1
  143. package/lib/modules/spa-admin.module.d.ts +6 -6
  144. package/lib/modules/spa-index.module.d.ts +3 -3
  145. package/lib/modules/spa-user.module.d.ts +2 -2
  146. package/lib/pages/app-models/app-models.component.d.ts +15 -0
  147. package/lib/pages/approvals/approvals.component.d.ts +10 -0
  148. package/lib/pages/approvals-config/approvals-config.component.d.ts +24 -0
  149. package/lib/{components → pages}/change-password/change-password.component.d.ts +1 -1
  150. package/lib/{components → pages}/create-account/create-account.component.d.ts +2 -1
  151. package/lib/{components → pages}/customers/customers.component.d.ts +2 -8
  152. package/lib/{components → pages}/invitations-table/invitations-table.component.d.ts +1 -1
  153. package/lib/{components → pages}/login/login.component.d.ts +10 -3
  154. package/lib/{components → pages}/logs/logs.component.d.ts +2 -6
  155. package/lib/{components → pages}/membership/membership.component.d.ts +2 -6
  156. package/lib/pages/notifications/notifications.component.d.ts +16 -0
  157. package/lib/pages/notifications-config/notifications-config.component.d.ts +17 -0
  158. package/lib/{components → pages}/plans/plans.component.d.ts +2 -6
  159. package/lib/{components → pages}/profile/profile.component.d.ts +2 -1
  160. package/lib/{components → pages}/roles/addRoleDialog.component.d.ts +1 -1
  161. package/lib/{components → pages}/roles/roles.component.d.ts +15 -3
  162. package/lib/{components → pages}/signup/signup.component.d.ts +1 -1
  163. package/lib/{components → pages}/suppliers/suppliers.component.d.ts +1 -4
  164. package/lib/{components → pages}/tasks/tasks.component.d.ts +1 -1
  165. package/lib/{components → pages}/tenant-settings/tenant-settings.component.d.ts +12 -7
  166. package/lib/{components → pages}/tenants/tenants.component.d.ts +2 -2
  167. package/lib/{components → pages}/users/users.component.d.ts +8 -16
  168. package/lib/select-context.directive.d.ts +10 -0
  169. package/lib/services/auth.service.d.ts +1 -1
  170. package/lib/services/button.service.d.ts +10 -7
  171. package/lib/services/csv.service.d.ts +10 -0
  172. package/lib/services/datalib.service.d.ts +55 -10
  173. package/lib/services/dialog.service.d.ts +2 -2
  174. package/lib/services/log.service.d.ts +1 -1
  175. package/lib/services/notifications.service.d.ts +12 -0
  176. package/lib/services/table-config.service.d.ts +9 -1
  177. package/lib/tin-spa.module.d.ts +51 -33
  178. package/package.json +1 -1
  179. package/public-api.d.ts +31 -23
  180. package/esm2020/lib/components/accounts/accountDialog.component.mjs +0 -56
  181. package/esm2020/lib/components/accounts/accounts.component.mjs +0 -70
  182. package/esm2020/lib/components/bug/bug.component.mjs +0 -14
  183. package/esm2020/lib/components/change-password/change-password.component.mjs +0 -92
  184. package/esm2020/lib/components/create-account/create-account.component.mjs +0 -109
  185. package/esm2020/lib/components/customers/customers.component.mjs +0 -60
  186. package/esm2020/lib/components/employees/employees.component.mjs +0 -21
  187. package/esm2020/lib/components/grades/grades.component.mjs +0 -14
  188. package/esm2020/lib/components/inventory/inventory.component.mjs +0 -99
  189. package/esm2020/lib/components/inventory/quantityDialog.component.mjs +0 -53
  190. package/esm2020/lib/components/invitations/invitations.component.mjs +0 -14
  191. package/esm2020/lib/components/invitations-table/invitations-table.component.mjs +0 -70
  192. package/esm2020/lib/components/login/login.component.mjs +0 -127
  193. package/esm2020/lib/components/logs/logs.component.mjs +0 -37
  194. package/esm2020/lib/components/membership/membership.component.mjs +0 -48
  195. package/esm2020/lib/components/notifications/notifications.component.mjs +0 -14
  196. package/esm2020/lib/components/plans/plans.component.mjs +0 -47
  197. package/esm2020/lib/components/positions/positions.component.mjs +0 -21
  198. package/esm2020/lib/components/profile/profile.component.mjs +0 -92
  199. package/esm2020/lib/components/recover-account/recover-account.component.mjs +0 -46
  200. package/esm2020/lib/components/roles/roles.component.mjs +0 -91
  201. package/esm2020/lib/components/signup/signup.component.mjs +0 -50
  202. package/esm2020/lib/components/suppliers/suppliers.component.mjs +0 -50
  203. package/esm2020/lib/components/tasks/tasks.component.mjs +0 -86
  204. package/esm2020/lib/components/tenant-settings/inviteDialog.component.mjs +0 -60
  205. package/esm2020/lib/components/tenant-settings/tenant-settings.component.mjs +0 -155
  206. package/esm2020/lib/components/tenants/tenants.component.mjs +0 -47
  207. package/esm2020/lib/components/transactions/transactDialog.component.mjs +0 -80
  208. package/esm2020/lib/components/transactions/transactions.component.mjs +0 -101
  209. package/esm2020/lib/components/users/users.component.mjs +0 -118
  210. package/esm2020/lib/components/welcome/welcome.component.mjs +0 -86
  211. package/lib/components/invitations/invitations.component.d.ts +0 -8
  212. package/lib/components/notifications/notifications.component.d.ts +0 -8
  213. package/lib/components/tenant-settings/inviteDialog.component.d.ts +0 -28
  214. /package/lib/{components → pages}/accounts/accountDialog.component.d.ts +0 -0
  215. /package/lib/{components → pages}/accounts/accounts.component.d.ts +0 -0
  216. /package/lib/{components → pages}/bug/bug.component.d.ts +0 -0
  217. /package/lib/{components → pages}/departments/departments.component.d.ts +0 -0
  218. /package/lib/{components → pages}/employees/employees.component.d.ts +0 -0
  219. /package/lib/{components → pages}/grades/grades.component.d.ts +0 -0
  220. /package/lib/{components → pages}/inventory/inventory.component.d.ts +0 -0
  221. /package/lib/{components → pages}/inventory/quantityDialog.component.d.ts +0 -0
  222. /package/lib/{components → pages}/positions/positions.component.d.ts +0 -0
  223. /package/lib/{components → pages}/recover-account/recover-account.component.d.ts +0 -0
  224. /package/lib/{components → pages}/settings/settings.component.d.ts +0 -0
  225. /package/lib/{components → pages}/transactions/transactDialog.component.d.ts +0 -0
  226. /package/lib/{components → pages}/transactions/transactions.component.d.ts +0 -0
  227. /package/lib/{components → pages}/welcome/welcome.component.d.ts +0 -0
@@ -0,0 +1,70 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { accountDialog } from './accountDialog.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "../../services/datalib.service";
7
+ import * as i3 from "../../services/message.service";
8
+ import * as i4 from "../../services/auth.service";
9
+ import * as i5 from "@angular/material/dialog";
10
+ import * as i6 from "@angular/common";
11
+ import * as i7 from "@angular/material/button";
12
+ import * as i8 from "@angular/material/icon";
13
+ import * as i9 from "@angular/material/card";
14
+ import * as i10 from "../../components/filter/filter.component";
15
+ export class AccountsComponent {
16
+ constructor(router, dataService, messageService, authService, dialog) {
17
+ this.router = router;
18
+ this.dataService = dataService;
19
+ this.messageService = messageService;
20
+ this.authService = authService;
21
+ this.dialog = dialog;
22
+ this.reload = new Subject();
23
+ }
24
+ ngOnInit() {
25
+ this.loadData();
26
+ }
27
+ loadData() {
28
+ this.dataService.CallApi({ url: 'general/accounts/x' }, '').subscribe((apiResponse) => {
29
+ this.accounts = apiResponse.data;
30
+ });
31
+ }
32
+ view(x) {
33
+ this.dataService.NavigateWithValue("home/admin/transactions", x.accountID);
34
+ }
35
+ open(x) {
36
+ const dialogRef = this.dialog.open(accountDialog, {
37
+ width: "900px",
38
+ data: x,
39
+ });
40
+ dialogRef.afterClosed().subscribe((result) => {
41
+ if (result == 'success') {
42
+ this.loadData();
43
+ this.messageService.toast("Updated");
44
+ }
45
+ });
46
+ }
47
+ delete(row) {
48
+ this.messageService.confirm(`DELETE ${row.name} ?`).subscribe((result) => {
49
+ if (result == "yes") {
50
+ this.dataService.CallApi({ url: `general/accounts?action=delete`, method: 'post' }, row).subscribe((apiResponse) => {
51
+ if (apiResponse.message == "success") {
52
+ this.messageService.toast("Account Deleted");
53
+ this.loadData();
54
+ }
55
+ else {
56
+ this.messageService.toast(apiResponse.message);
57
+ }
58
+ });
59
+ }
60
+ ;
61
+ });
62
+ }
63
+ }
64
+ AccountsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountsComponent, deps: [{ token: i1.Router }, { token: i2.DataServiceLib }, { token: i3.MessageService }, { token: i4.AuthService }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
65
+ AccountsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AccountsComponent, selector: "spa-accounts", ngImport: i0, template: "<h4>Accounts</h4>\r\n<hr>\r\n\r\n<div class=\"tin-row d-flex justify-content-between\" style=\"font-size: 14px;margin-left: 5px;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"open(null)\">Create</button>\r\n <spa-filter [showText]=\"false\" (refreshClick)=\"loadData()\"></spa-filter>\r\n</div>\r\n\r\n<div class=\"row \" style=\"margin-left: 0px;\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" *ngFor=\"let account of accounts\" style=\"max-width: 350px;margin: 5px;\">\r\n\r\n <div class=\"tin-row d-flex justify-content-between\">\r\n <label style=\"font-size: 24px; font-weight: 300;\">{{account.name}}</label>\r\n <button mat-mini-fab color=\"primary\" (click)=\"open(account)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <hr style=\"margin-top: 5px;margin-bottom: 10px;\"/>\r\n\r\n <label *ngIf=\"account.description != ''\" style=\"font-size: small;margin-bottom: 5px;\">{{account.description}}</label>\r\n\r\n <div *ngIf=\"account\" class=\"tin-row\">\r\n <label style=\"margin-right: 5px;font-size: 14px;\">{{account?.currency}}</label>\r\n <label style=\"font-size: 34px;margin-right: 20px;\">{{account?.balance | currency : '' : ''}}</label>\r\n </div>\r\n\r\n <mat-card-actions class=\"d-flex justify-content-between\" >\r\n <button mat-stroked-button color=\"primary\" style=\"margin-right:10px;\" (click)=\"view(account)\">View</button>\r\n <button mat-mini-fab *ngIf=\"account.count == 0\" color=\"warn\" style=\"margin-right:10px\" (click)=\"delete(account)\"><mat-icon>delete</mat-icon></button>\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n</div>\r\n\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: i10.FilterComponent, selector: "spa-filter", inputs: ["flatButtons", "showText", "showButton", "data"], outputs: ["refreshClick"] }, { kind: "pipe", type: i6.CurrencyPipe, name: "currency" }] });
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountsComponent, decorators: [{
67
+ type: Component,
68
+ args: [{ selector: 'spa-accounts', template: "<h4>Accounts</h4>\r\n<hr>\r\n\r\n<div class=\"tin-row d-flex justify-content-between\" style=\"font-size: 14px;margin-left: 5px;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"open(null)\">Create</button>\r\n <spa-filter [showText]=\"false\" (refreshClick)=\"loadData()\"></spa-filter>\r\n</div>\r\n\r\n<div class=\"row \" style=\"margin-left: 0px;\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" *ngFor=\"let account of accounts\" style=\"max-width: 350px;margin: 5px;\">\r\n\r\n <div class=\"tin-row d-flex justify-content-between\">\r\n <label style=\"font-size: 24px; font-weight: 300;\">{{account.name}}</label>\r\n <button mat-mini-fab color=\"primary\" (click)=\"open(account)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <hr style=\"margin-top: 5px;margin-bottom: 10px;\"/>\r\n\r\n <label *ngIf=\"account.description != ''\" style=\"font-size: small;margin-bottom: 5px;\">{{account.description}}</label>\r\n\r\n <div *ngIf=\"account\" class=\"tin-row\">\r\n <label style=\"margin-right: 5px;font-size: 14px;\">{{account?.currency}}</label>\r\n <label style=\"font-size: 34px;margin-right: 20px;\">{{account?.balance | currency : '' : ''}}</label>\r\n </div>\r\n\r\n <mat-card-actions class=\"d-flex justify-content-between\" >\r\n <button mat-stroked-button color=\"primary\" style=\"margin-right:10px;\" (click)=\"view(account)\">View</button>\r\n <button mat-mini-fab *ngIf=\"account.count == 0\" color=\"warn\" style=\"margin-right:10px\" (click)=\"delete(account)\"><mat-icon>delete</mat-icon></button>\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n</div>\r\n\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}\n"] }]
69
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataServiceLib }, { type: i3.MessageService }, { type: i4.AuthService }, { type: i5.MatDialog }]; } });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3BhZ2VzL2FjY291bnRzL2FjY291bnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9hY2NvdW50cy9hY2NvdW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBT2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPMUQsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFtQixNQUFjLEVBQVMsV0FBMkIsRUFBVSxjQUE4QixFQUFTLFdBQXdCLEVBQVMsTUFBaUI7UUFBckosV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQU14SyxXQUFNLEdBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7SUFObUksQ0FBQztJQUU3SyxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFLRCxRQUFRO1FBRU4sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUF5QixFQUFFLEVBQUU7WUFDakcsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUlELElBQUksQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDO1FBRUosTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hELEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLENBQUM7U0FDUixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFFM0MsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFO2dCQUN2QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7Z0JBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxNQUFNLENBQUMsR0FBRztRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFFdkUsSUFBSSxNQUFNLElBQUksS0FBSyxFQUFFO2dCQUduQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBd0IsRUFBRSxFQUFFO29CQUU5SCxJQUFJLFdBQVcsQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFO3dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3dCQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ2pCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDaEQ7Z0JBRUgsQ0FBQyxDQUFDLENBQUE7YUFHSDtZQUFBLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzhHQTlEVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixvRENoQjlCLHFvREFvQ0E7MkZEcEJhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtQ29uZmlnLCBUYWJsZUNvbmZpZywgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuLy8gaW1wb3J0IHsgcXVhbnRpdHlEaWFsb2cgfSBmcm9tICcuL3F1YW50aXR5RGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgYWNjb3VudERpYWxvZyB9IGZyb20gJy4vYWNjb3VudERpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtYWNjb3VudHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2NvdW50cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWNjb3VudHMuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvdW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlcixwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuICBhY2NvdW50cztcclxuXHJcbiAgbG9hZERhdGEoKXtcclxuXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoeyB1cmw6ICdnZW5lcmFsL2FjY291bnRzL3gnIH0sJycpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UgOiBBcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmFjY291bnRzID0gYXBpUmVzcG9uc2UuZGF0YTtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICB2aWV3KHgpe1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5OYXZpZ2F0ZVdpdGhWYWx1ZShcImhvbWUvYWRtaW4vdHJhbnNhY3Rpb25zXCIsIHguYWNjb3VudElEKVxyXG4gIH1cclxuXHJcbiAgb3Blbih4KSB7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihhY2NvdW50RGlhbG9nLCB7XHJcbiAgICAgIHdpZHRoOiBcIjkwMHB4XCIsXHJcbiAgICAgIGRhdGE6IHgsXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdCA9PSAnc3VjY2VzcycpIHtcclxuICAgICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiVXBkYXRlZFwiKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBkZWxldGUocm93KXtcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShgREVMRVRFICR7cm93Lm5hbWV9ID9gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoeyB1cmw6IGBnZW5lcmFsL2FjY291bnRzP2FjdGlvbj1kZWxldGVgLCBtZXRob2Q6ICdwb3N0JyB9LCByb3cpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKGFwaVJlc3BvbnNlLm1lc3NhZ2UgPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkFjY291bnQgRGVsZXRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG59XHJcbiIsIjxoND5BY2NvdW50czwvaDQ+XHJcbjxocj5cclxuXHJcbjxkaXYgY2xhc3M9XCJ0aW4tcm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O21hcmdpbi1sZWZ0OiA1cHg7XCI+XHJcbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib3BlbihudWxsKVwiPkNyZWF0ZTwvYnV0dG9uPlxyXG4gIDxzcGEtZmlsdGVyIFtzaG93VGV4dF09XCJmYWxzZVwiIChyZWZyZXNoQ2xpY2spPVwibG9hZERhdGEoKVwiPjwvc3BhLWZpbHRlcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicm93IFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDBweDtcIj5cclxuXHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiICpuZ0Zvcj1cImxldCBhY2NvdW50IG9mIGFjY291bnRzXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDM1MHB4O21hcmdpbjogNXB4O1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aW4tcm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6IDI0cHg7IGZvbnQtd2VpZ2h0OiAzMDA7XCI+e3thY2NvdW50Lm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgIDxidXR0b24gbWF0LW1pbmktZmFiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvcGVuKGFjY291bnQpXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGhyIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O21hcmdpbi1ib3R0b206IDEwcHg7XCIvPlxyXG5cclxuICAgIDxsYWJlbCAqbmdJZj1cImFjY291bnQuZGVzY3JpcHRpb24gIT0gJydcIiBzdHlsZT1cImZvbnQtc2l6ZTogc21hbGw7bWFyZ2luLWJvdHRvbTogNXB4O1wiPnt7YWNjb3VudC5kZXNjcmlwdGlvbn19PC9sYWJlbD5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiYWNjb3VudFwiIGNsYXNzPVwidGluLXJvd1wiPlxyXG4gICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtmb250LXNpemU6IDE0cHg7XCI+e3thY2NvdW50Py5jdXJyZW5jeX19PC9sYWJlbD5cclxuICAgICAgPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiAzNHB4O21hcmdpbi1yaWdodDogMjBweDtcIj57e2FjY291bnQ/LmJhbGFuY2UgfCBjdXJyZW5jeSA6ICcnIDogJyd9fTwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bWF0LWNhcmQtYWN0aW9ucyBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiID5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6MTBweDtcIiAoY2xpY2spPVwidmlldyhhY2NvdW50KVwiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWluaS1mYWIgKm5nSWY9XCJhY2NvdW50LmNvdW50ID09IDBcIiBjb2xvcj1cIndhcm5cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDoxMHB4XCIgKGNsaWNrKT1cImRlbGV0ZShhY2NvdW50KVwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG5cclxuICA8L21hdC1jYXJkPlxyXG5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19
@@ -0,0 +1,56 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/datalib.service";
4
+ import * as i2 from "../../components/page/page.component";
5
+ export class AppModelsComponent {
6
+ constructor(dataService) {
7
+ this.dataService = dataService;
8
+ this.appModelFormConfig = {
9
+ title: 'Application Model',
10
+ includeAudit: true,
11
+ fields: [
12
+ { name: 'fullModelName', type: 'text', required: true, span: true, alias: 'Full Model Name', readonly: true },
13
+ { name: 'name', type: 'text', span: true, alias: 'Display Name', infoMessage: 'Custom display name (optional)' },
14
+ { name: 'endpoint', type: 'text', span: true, alias: 'Endpoint Name', infoMessage: 'Name of associated endpoint (optional)' },
15
+ { name: 'approvable', type: 'checkbox', span: true, alias: 'Approvable', readonly: true }
16
+ ]
17
+ };
18
+ this.appModelDetailsConfig = {
19
+ formConfig: this.appModelFormConfig,
20
+ heroField: 'appModelID',
21
+ buttons: [
22
+ { name: 'edit', dialog: true, action: { url: 'appmodels?action=edit', method: 'post' } }
23
+ ]
24
+ };
25
+ this.appModelTableConfig = {
26
+ showFilter: true,
27
+ elevation: 'none',
28
+ flatButtons: true,
29
+ minColumns: ['displayName', 'approvable'],
30
+ columns: [
31
+ { name: 'displayName', type: 'chip', alias: 'Name', detailsConfig: this.appModelDetailsConfig },
32
+ { name: 'fullModelName', type: 'text', alias: 'Full Model Name' },
33
+ { name: 'endpoint', type: 'text', alias: 'Endpoint' },
34
+ { name: 'approvable', type: 'checkbox', alias: 'Approvable' }
35
+ ],
36
+ buttons: [
37
+ { name: 'view', dialog: true, detailsConfig: this.appModelDetailsConfig },
38
+ { name: 'edit', dialog: true, detailsConfig: this.appModelDetailsConfig },
39
+ ],
40
+ loadAction: { url: 'appmodels/all/x' }
41
+ };
42
+ this.pageConfig = {
43
+ title: 'Application Models',
44
+ tableConfig: this.appModelTableConfig
45
+ };
46
+ }
47
+ ngOnInit() {
48
+ }
49
+ }
50
+ AppModelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppModelsComponent, deps: [{ token: i1.DataServiceLib }], target: i0.ɵɵFactoryTarget.Component });
51
+ AppModelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AppModelsComponent, selector: "spa-app-models", ngImport: i0, template: "<spa-page [config]=\"pageConfig\"></spa-page>\r\n", dependencies: [{ kind: "component", type: i2.PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad"] }] });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppModelsComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'spa-app-models', template: "<spa-page [config]=\"pageConfig\"></spa-page>\r\n" }]
55
+ }], ctorParameters: function () { return [{ type: i1.DataServiceLib }]; } });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1vZGVscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvcGFnZXMvYXBwLW1vZGVscy9hcHAtbW9kZWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9hcHAtbW9kZWxzL2FwcC1tb2RlbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7OztBQVFsRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW9CLFdBQTJCO1FBQTNCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUsvQyx1QkFBa0IsR0FBZTtZQUMvQixLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQzdHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUU7Z0JBQ2hILEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsd0NBQXdDLEVBQUU7Z0JBQzdILEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2FBQzFGO1NBQ0YsQ0FBQztRQUVGLDBCQUFxQixHQUF3QjtZQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUNuQyxTQUFTLEVBQUUsWUFBWTtZQUN2QixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTthQUN6RjtTQUNGLENBQUM7UUFFRix3QkFBbUIsR0FBZ0I7WUFDakMsVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLE1BQU07WUFDakIsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQztZQUN6QyxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUMvRixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ2pFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ3JELEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7YUFDOUQ7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDekUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUMxRTtZQUNELFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRTtTQUN2QyxDQUFDO1FBRUYsZUFBVSxHQUFlO1lBQ3ZCLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDdEMsQ0FBQztJQTdDaUQsQ0FBQztJQUVwRCxRQUFRO0lBQ1IsQ0FBQzs7K0dBSlUsa0JBQWtCO21HQUFsQixrQkFBa0Isc0RDUi9CLG1EQUNBOzJGRE9hLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZXRhaWxzRGlhbG9nQ29uZmlnLCBGb3JtQ29uZmlnLCBQYWdlQ29uZmlnLCBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWFwcC1tb2RlbHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtbW9kZWxzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwTW9kZWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgYXBwTW9kZWxGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgdGl0bGU6ICdBcHBsaWNhdGlvbiBNb2RlbCcsXHJcbiAgICBpbmNsdWRlQXVkaXQ6IHRydWUsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnZnVsbE1vZGVsTmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUsIHNwYW46IHRydWUsIGFsaWFzOiAnRnVsbCBNb2RlbCBOYW1lJywgcmVhZG9ubHk6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0Jywgc3BhbjogdHJ1ZSwgYWxpYXM6ICdEaXNwbGF5IE5hbWUnLCBpbmZvTWVzc2FnZTogJ0N1c3RvbSBkaXNwbGF5IG5hbWUgKG9wdGlvbmFsKScgfSxcclxuICAgICAgeyBuYW1lOiAnZW5kcG9pbnQnLCB0eXBlOiAndGV4dCcsIHNwYW46IHRydWUsIGFsaWFzOiAnRW5kcG9pbnQgTmFtZScsIGluZm9NZXNzYWdlOiAnTmFtZSBvZiBhc3NvY2lhdGVkIGVuZHBvaW50IChvcHRpb25hbCknIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FwcHJvdmFibGUnLCB0eXBlOiAnY2hlY2tib3gnLCBzcGFuOiB0cnVlLCBhbGlhczogJ0FwcHJvdmFibGUnLCByZWFkb25seTogdHJ1ZSB9XHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbiAgYXBwTW9kZWxEZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5hcHBNb2RlbEZvcm1Db25maWcsXHJcbiAgICBoZXJvRmllbGQ6ICdhcHBNb2RlbElEJyxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2FwcG1vZGVscz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnIH0gfVxyXG4gICAgXVxyXG4gIH07XHJcblxyXG4gIGFwcE1vZGVsVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcclxuICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG4gICAgZmxhdEJ1dHRvbnM6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ2Rpc3BsYXlOYW1lJywgJ2FwcHJvdmFibGUnXSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnZGlzcGxheU5hbWUnLCB0eXBlOiAnY2hpcCcsIGFsaWFzOiAnTmFtZScsIGRldGFpbHNDb25maWc6IHRoaXMuYXBwTW9kZWxEZXRhaWxzQ29uZmlnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2Z1bGxNb2RlbE5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnRnVsbCBNb2RlbCBOYW1lJyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbmRwb2ludCcsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdFbmRwb2ludCcgfSxcclxuICAgICAgeyBuYW1lOiAnYXBwcm92YWJsZScsIHR5cGU6ICdjaGVja2JveCcsIGFsaWFzOiAnQXBwcm92YWJsZScgfVxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAndmlldycsIGRpYWxvZzogdHJ1ZSwgZGV0YWlsc0NvbmZpZzogdGhpcy5hcHBNb2RlbERldGFpbHNDb25maWcgfSxcclxuICAgICAgeyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgZGV0YWlsc0NvbmZpZzogdGhpcy5hcHBNb2RlbERldGFpbHNDb25maWcgfSxcclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2FwcG1vZGVscy9hbGwveCcgfVxyXG4gIH07XHJcblxyXG4gIHBhZ2VDb25maWc6IFBhZ2VDb25maWcgPSB7XHJcbiAgICB0aXRsZTogJ0FwcGxpY2F0aW9uIE1vZGVscycsXHJcbiAgICB0YWJsZUNvbmZpZzogdGhpcy5hcHBNb2RlbFRhYmxlQ29uZmlnXHJcbiAgfTtcclxufVxyXG4iLCI8c3BhLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+PC9zcGEtcGFnZT5cclxuIl19
@@ -0,0 +1,19 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/datalib.service";
4
+ import * as i2 from "@angular/material/tabs";
5
+ import * as i3 from "../../components/table/table.component";
6
+ export class ApprovalsComponent {
7
+ constructor(dataService) {
8
+ this.dataService = dataService;
9
+ }
10
+ ngOnInit() {
11
+ }
12
+ }
13
+ ApprovalsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApprovalsComponent, deps: [{ token: i1.DataServiceLib }], target: i0.ɵɵFactoryTarget.Component });
14
+ ApprovalsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApprovalsComponent, selector: "spa-approvals", ngImport: i0, template: "<h4>Approvals</h4>\r\n<hr>\r\n\r\n<mat-tab-group>\r\n <mat-tab label=\"Received\">\r\n <div class=\"mt-3\">\r\n <spa-table [config]=\"dataService.receivedApprovalsTableConfig\"></spa-table>\r\n </div>\r\n </mat-tab>\r\n <mat-tab label=\"Sent\">\r\n <div class=\"mt-3\">\r\n <spa-table [config]=\"dataService.sentApprovalsTableConfig\"></spa-table>\r\n </div>\r\n </mat-tab>\r\n</mat-tab-group>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i3.TableComponent, selector: "spa-table", inputs: ["data", "tileData", "config", "reload", "activeTab", "inTab"], outputs: ["dataLoad", "actionSuccess", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange", "actionResponse"] }] });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApprovalsComponent, decorators: [{
16
+ type: Component,
17
+ args: [{ selector: 'spa-approvals', template: "<h4>Approvals</h4>\r\n<hr>\r\n\r\n<mat-tab-group>\r\n <mat-tab label=\"Received\">\r\n <div class=\"mt-3\">\r\n <spa-table [config]=\"dataService.receivedApprovalsTableConfig\"></spa-table>\r\n </div>\r\n </mat-tab>\r\n <mat-tab label=\"Sent\">\r\n <div class=\"mt-3\">\r\n <spa-table [config]=\"dataService.sentApprovalsTableConfig\"></spa-table>\r\n </div>\r\n </mat-tab>\r\n</mat-tab-group>\r\n" }]
18
+ }], ctorParameters: function () { return [{ type: i1.DataServiceLib }]; } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9hcHByb3ZhbHMvYXBwcm92YWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9hcHByb3ZhbHMvYXBwcm92YWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBU2xELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBbUIsV0FBNEI7UUFBNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO0lBQUksQ0FBQztJQUVwRCxRQUFRO0lBQ1IsQ0FBQzs7K0dBTFUsa0JBQWtCO21HQUFsQixrQkFBa0IscURDVC9CLHlhQWVBOzJGRE5hLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGV0YWlsc0RpYWxvZ0NvbmZpZywgRm9ybUNvbmZpZywgUGFnZUNvbmZpZywgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1hcHByb3ZhbHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FwcHJvdmFscy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcHJvdmFsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhU2VydmljZSA6IERhdGFTZXJ2aWNlTGliKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGg0PkFwcHJvdmFsczwvaDQ+XHJcbjxocj5cclxuXHJcbjxtYXQtdGFiLWdyb3VwPlxyXG4gIDxtYXQtdGFiIGxhYmVsPVwiUmVjZWl2ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgIDxzcGEtdGFibGUgW2NvbmZpZ109XCJkYXRhU2VydmljZS5yZWNlaXZlZEFwcHJvdmFsc1RhYmxlQ29uZmlnXCI+PC9zcGEtdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC10YWI+XHJcbiAgPG1hdC10YWIgbGFiZWw9XCJTZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICA8c3BhLXRhYmxlIFtjb25maWddPVwiZGF0YVNlcnZpY2Uuc2VudEFwcHJvdmFsc1RhYmxlQ29uZmlnXCI+PC9zcGEtdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC10YWI+XHJcbjwvbWF0LXRhYi1ncm91cD5cclxuIl19
@@ -0,0 +1,165 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/datalib.service";
4
+ import * as i2 from "../../components/page/page.component";
5
+ export class ApprovalsConfigComponent {
6
+ constructor(dataService) {
7
+ this.dataService = dataService;
8
+ // Approval Roles
9
+ this.approvalRoleFormConfig = {
10
+ title: 'Approval Role',
11
+ security: { allow: [this.dataService.capApprovalsConfig] },
12
+ fields: [
13
+ { name: 'roleID', type: 'select', required: true, alias: 'Role', loadAction: { url: 'role/list/x' } }
14
+ ]
15
+ };
16
+ this.approvalRolesTableConfig = {
17
+ tabTitle: 'Level Roles',
18
+ showFilter: true,
19
+ elevation: 'none',
20
+ flatButtons: true,
21
+ minColumns: ['roleName'],
22
+ columns: [
23
+ { name: 'roleName', type: 'text', alias: 'Role' }
24
+ ],
25
+ buttons: [
26
+ { name: 'create', display: 'Add Role', dialog: true, action: { url: 'approvalroles?action=create', method: 'post' } },
27
+ { name: 'delete', dialog: true, action: { url: 'approvalroles?action=delete', method: 'post' } }
28
+ ],
29
+ loadAction: { url: 'approvalroles/level/x' },
30
+ loadCriteria: 'level',
31
+ loadIDField: 'approvalLevelID',
32
+ formConfig: this.approvalRoleFormConfig
33
+ };
34
+ // Approval Levels
35
+ this.approvalLevelOptions = [1, 2, 3, 4, 5].map(x => ({ name: x, value: x }));
36
+ this.approvalLevelFormConfig = {
37
+ title: 'Approval Level',
38
+ security: { allow: [this.dataService.capApprovalsConfig] },
39
+ fields: [
40
+ { name: 'name', type: 'text', required: true, span: true, infoMessage: 'Name of approval level e.g. Supervisor Approval' },
41
+ { name: 'level', type: 'select', required: true, min: 1, defaultFirstValue: true, infoMessage: 'Order of approval',
42
+ options: this.approvalLevelOptions
43
+ }
44
+ ],
45
+ };
46
+ this.approvalLevelDetailsConfig = {
47
+ formConfig: this.approvalLevelFormConfig,
48
+ heroField: 'approvalLevelID',
49
+ tableConfigs: [this.approvalRolesTableConfig],
50
+ buttons: [
51
+ { name: 'edit', dialog: true, action: { url: 'approvallevels?action=edit', method: 'post' } }
52
+ ]
53
+ };
54
+ this.approvalLevelsTableConfig = {
55
+ tabTitle: 'Approval Levels',
56
+ showFilter: true,
57
+ elevation: 'none',
58
+ flatButtons: true,
59
+ minColumns: ['level', 'name',],
60
+ minButtons: ['up', 'down', 'view'],
61
+ collapseButtons: true,
62
+ columns: [
63
+ { name: 'level', type: 'number' },
64
+ { name: 'name', type: 'chip', detailsConfig: this.approvalLevelDetailsConfig },
65
+ { name: 'rolesDisplay', type: 'text', alias: 'Roles' }
66
+ ],
67
+ buttons: [
68
+ { name: 'create', display: 'Add Level', dialog: true, action: { url: 'approvallevels?action=create', method: 'post' } },
69
+ { name: 'up', display: 'Move Up', icon: { name: 'arrow_upward' }, action: { url: 'approvallevels?action=up', method: 'post' }, visible: x => x.level > 1 },
70
+ { name: 'down', display: 'Move Down', icon: { name: 'arrow_downward' }, action: { url: 'approvallevels?action=down', method: 'post' } },
71
+ { name: 'view', dialog: true, detailsConfig: this.approvalLevelDetailsConfig },
72
+ { name: 'delete', dialog: true, action: { url: 'approvallevels?action=delete', method: 'post' } }
73
+ ],
74
+ formConfig: this.approvalLevelFormConfig,
75
+ loadAction: { url: 'approvallevels/config/x' },
76
+ loadCriteria: 'config',
77
+ loadIDField: 'approvalConfigID'
78
+ };
79
+ // Approval Config
80
+ this.approvalConfigFormConfig = {
81
+ title: 'Approval Configuration',
82
+ includeAudit: true,
83
+ security: { allow: [this.dataService.capApprovalsConfig] },
84
+ fields: [
85
+ // { name: 'modelName', type: 'text', required: true, alias: 'Entity Name', span: true, },
86
+ { name: 'enabled', type: 'checkbox', span: true, alias: 'Enable Approvals', defaultValue: true, infoMessage: 'Enable or disable approval workflow for this entity' },
87
+ // { name: 'modelName', type: 'select', required: true, span: true, alias: 'Entity', optionDisplay: 'name', optionValue: 'value', loadAction: { url: 'approvalconfigs/meta/x' }, },
88
+ { name: 'appModelID', type: 'select', required: true, span: true, alias: 'Entity', optionDisplay: 'name', optionValue: 'value', loadAction: { url: 'appmodels/list/approvable' }, },
89
+ { name: 'createApprovalRequired', type: 'checkbox', span: true, alias: 'Create Approval' },
90
+ { name: 'editApprovalRequired', type: 'checkbox', span: true, alias: 'Edit Approval' },
91
+ { name: 'deleteApprovalRequired', type: 'checkbox', span: true, alias: 'Delete Approval' },
92
+ { name: 'customActions', type: 'text', span: true, alias: 'Custom Actions', infoMessage: 'Comma-separated list of actions that require approval e.g receive,disburse' },
93
+ { name: 'notify', type: 'checkbox', defaultValue: true, },
94
+ {
95
+ name: 'channels', type: 'select', alias: 'Notification Channels', span: false, defaultFirstValue: true, required: true,
96
+ hiddenCondition: x => x.notify === false,
97
+ options: this.dataService.notificationOptions,
98
+ }
99
+ ]
100
+ };
101
+ this.approvalConfigDetailsConfig = {
102
+ formConfig: this.approvalConfigFormConfig,
103
+ heroField: 'approvalConfigID',
104
+ tableConfigs: [this.approvalLevelsTableConfig],
105
+ buttons: [
106
+ { name: 'edit', dialog: true, action: { url: 'approvalconfigs?action=edit', method: 'post' } },
107
+ ]
108
+ };
109
+ this.approvalConfigTable = {
110
+ showFilter: true,
111
+ flatButtons: true,
112
+ minColumns: ['modelNameDisplay', 'enabled', 'approvalTypes'],
113
+ columns: [
114
+ { name: 'modelNameDisplay', type: 'text', alias: 'Entity' },
115
+ { name: 'enabled', type: 'checkbox',
116
+ icons: [
117
+ { name: 'warning', color: 'orange', tip: 'No approval levels or roles configured', condition: x => x.enabled && (x.hasNoLevels || x.hasNoRoles) }
118
+ ]
119
+ },
120
+ {
121
+ name: 'approvalTypes',
122
+ type: 'icon',
123
+ alias: 'Approval Types',
124
+ icons: [
125
+ { name: 'add_circle', color: 'green', tip: 'Create Approval Required', condition: x => x.enabled && x.createApprovalRequired },
126
+ { name: 'edit', color: 'orange', tip: 'Edit Approval Required', condition: x => x.enabled && x.editApprovalRequired },
127
+ { name: 'delete', color: 'red', tip: 'Delete Approval Required', condition: x => x.enabled && x.deleteApprovalRequired },
128
+ { name: 'settings', color: 'blue', tip: 'Custom Actions', condition: x => x.enabled && x.customActions?.length > 0, tipField: 'customActions' }
129
+ ]
130
+ },
131
+ { name: 'customActions', type: 'text', alias: 'Custom Actions' },
132
+ {
133
+ name: 'levelCount', type: 'number', alias: 'Levels',
134
+ icons: [
135
+ {
136
+ name: 'warning', color: 'orange', tip: 'No approval levels configured',
137
+ condition: x => x.levelCount === 0
138
+ }
139
+ ]
140
+ },
141
+ ],
142
+ buttons: [
143
+ { name: 'create', display: 'Create', dialog: true, action: { url: 'approvalconfigs?action=create', method: 'post' } },
144
+ { name: 'view', dialog: true, detailsConfig: this.approvalConfigDetailsConfig },
145
+ { name: 'edit', dialog: true, detailsConfig: this.approvalConfigDetailsConfig },
146
+ { name: 'delete', action: { url: 'approvalconfigs?action=delete', method: 'post' } },
147
+ ],
148
+ loadAction: { url: 'approvalconfigs/all/x' },
149
+ formConfig: this.approvalConfigFormConfig
150
+ };
151
+ this.pageConfig = {
152
+ title: 'Approval Configuration',
153
+ tableConfig: this.approvalConfigTable
154
+ };
155
+ }
156
+ ngOnInit() {
157
+ }
158
+ }
159
+ ApprovalsConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApprovalsConfigComponent, deps: [{ token: i1.DataServiceLib }], target: i0.ɵɵFactoryTarget.Component });
160
+ ApprovalsConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApprovalsConfigComponent, selector: "spa-approvals-config", ngImport: i0, template: "<spa-page [config]=\"pageConfig\"></spa-page>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad"] }] });
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApprovalsConfigComponent, decorators: [{
162
+ type: Component,
163
+ args: [{ selector: 'spa-approvals-config', template: "<spa-page [config]=\"pageConfig\"></spa-page>\r\n" }]
164
+ }], ctorParameters: function () { return [{ type: i1.DataServiceLib }]; } });
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWxzLWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvcGFnZXMvYXBwcm92YWxzLWNvbmZpZy9hcHByb3ZhbHMtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9hcHByb3ZhbHMtY29uZmlnL2FwcHJvdmFscy1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7OztBQVNsRCxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLFlBQW9CLFdBQTRCO1FBQTVCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQU1oRCxpQkFBaUI7UUFDakIsMkJBQXNCLEdBQWU7WUFDbkMsS0FBSyxFQUFFLGVBQWU7WUFDdEIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzFELE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFO2FBQ3RHO1NBQ0YsQ0FBQztRQUVGLDZCQUF3QixHQUFnQjtZQUN0QyxRQUFRLEVBQUUsYUFBYTtZQUN2QixVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsTUFBTTtZQUNqQixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFF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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZXRhaWxzRGlhbG9nQ29uZmlnLCBGb3JtQ29uZmlnLCBQYWdlQ29uZmlnLCBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWFwcHJvdmFscy1jb25maWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbHMtY29uZmlnLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hcHByb3ZhbHMtY29uZmlnLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwcm92YWxzQ29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhU2VydmljZSA6IERhdGFTZXJ2aWNlTGliKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQXBwcm92YWwgUm9sZXNcclxuICBhcHByb3ZhbFJvbGVGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgdGl0bGU6ICdBcHByb3ZhbCBSb2xlJyxcclxuICAgIHNlY3VyaXR5OiB7IGFsbG93OiBbdGhpcy5kYXRhU2VydmljZS5jYXBBcHByb3ZhbHNDb25maWddIH0sXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAncm9sZUlEJywgdHlwZTogJ3NlbGVjdCcsIHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ1JvbGUnLCBsb2FkQWN0aW9uOiB7IHVybDogJ3JvbGUvbGlzdC94JyB9IH1cclxuICAgIF1cclxuICB9O1xyXG5cclxuICBhcHByb3ZhbFJvbGVzVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgdGFiVGl0bGU6ICdMZXZlbCBSb2xlcycsXHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIG1pbkNvbHVtbnM6IFsncm9sZU5hbWUnXSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAncm9sZU5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnUm9sZScgfVxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0FkZCBSb2xlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnYXBwcm92YWxyb2xlcz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7IG5hbWU6ICdkZWxldGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdhcHByb3ZhbHJvbGVzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH1cclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2FwcHJvdmFscm9sZXMvbGV2ZWwveCcgfSxcclxuICAgIGxvYWRDcml0ZXJpYTogJ2xldmVsJyxcclxuICAgIGxvYWRJREZpZWxkOiAnYXBwcm92YWxMZXZlbElEJyxcclxuICAgIGZvcm1Db25maWc6IHRoaXMuYXBwcm92YWxSb2xlRm9ybUNvbmZpZ1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBBcHByb3ZhbCBMZXZlbHNcclxuXHJcbiAgYXBwcm92YWxMZXZlbE9wdGlvbnMgPSBbMSwyLDMsNCw1XS5tYXAoeCA9PiAoe25hbWU6IHgsIHZhbHVlOiB4fSkpO1xyXG5cclxuICBhcHByb3ZhbExldmVsRm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIHRpdGxlOiAnQXBwcm92YWwgTGV2ZWwnLFxyXG4gICAgc2VjdXJpdHk6IHsgYWxsb3c6IFt0aGlzLmRhdGFTZXJ2aWNlLmNhcEFwcHJvdmFsc0NvbmZpZ10gfSxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSwgc3BhbjogdHJ1ZSwgaW5mb01lc3NhZ2U6ICdOYW1lIG9mIGFwcHJvdmFsIGxldmVsIGUuZy4gU3VwZXJ2aXNvciBBcHByb3ZhbCcgfSxcclxuICAgICAgeyBuYW1lOiAnbGV2ZWwnLCB0eXBlOiAnc2VsZWN0JywgcmVxdWlyZWQ6IHRydWUsIG1pbjogMSwgZGVmYXVsdEZpcnN0VmFsdWUgOiB0cnVlLCBpbmZvTWVzc2FnZTogJ09yZGVyIG9mIGFwcHJvdmFsJyxcclxuICAgICAgICBvcHRpb25zOiB0aGlzLmFwcHJvdmFsTGV2ZWxPcHRpb25zXHJcbiAgICAgIH1cclxuICAgIF0sXHJcbiAgfTtcclxuXHJcbiAgYXBwcm92YWxMZXZlbERldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcgPSB7XHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLmFwcHJvdmFsTGV2ZWxGb3JtQ29uZmlnLFxyXG4gICAgaGVyb0ZpZWxkOiAnYXBwcm92YWxMZXZlbElEJyxcclxuICAgIHRhYmxlQ29uZmlnczogW3RoaXMuYXBwcm92YWxSb2xlc1RhYmxlQ29uZmlnXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2FwcHJvdmFsbGV2ZWxzP2FjdGlvbj1lZGl0JywgbWV0aG9kOiAncG9zdCcgfSB9XHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbiAgYXBwcm92YWxMZXZlbHNUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICB0YWJUaXRsZTogJ0FwcHJvdmFsIExldmVscycsXHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIG1pbkNvbHVtbnM6IFsnbGV2ZWwnLCduYW1lJywgXSxcclxuICAgIG1pbkJ1dHRvbnMgOiBbJ3VwJywgJ2Rvd24nLCAndmlldyddLFxyXG4gICAgY29sbGFwc2VCdXR0b25zIDogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnbGV2ZWwnLCB0eXBlOiAnbnVtYmVyJyB9LFxyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ2NoaXAnLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmFwcHJvdmFsTGV2ZWxEZXRhaWxzQ29uZmlnIH0sXHJcbiAgICAgIHsgbmFtZTogJ3JvbGVzRGlzcGxheScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdSb2xlcycgfVxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0FkZCBMZXZlbCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2FwcHJvdmFsbGV2ZWxzP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcblxyXG4gICAgICB7IG5hbWU6ICd1cCcsIGRpc3BsYXk6ICdNb3ZlIFVwJywgaWNvbjogeyBuYW1lOiAnYXJyb3dfdXB3YXJkJyB9LCBhY3Rpb246IHsgdXJsOiAnYXBwcm92YWxsZXZlbHM/YWN0aW9uPXVwJywgbWV0aG9kOiAncG9zdCcgfSwgdmlzaWJsZTogeCA9PiB4LmxldmVsID4gMSB9LFxyXG4gICAgICB7IG5hbWU6ICdkb3duJywgZGlzcGxheTogJ01vdmUgRG93bicsIGljb246IHsgbmFtZTogJ2Fycm93X2Rvd253YXJkJyB9LCBhY3Rpb246IHsgdXJsOiAnYXBwcm92YWxsZXZlbHM/YWN0aW9uPWRvd24nLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ3ZpZXcnLCBkaWFsb2c6IHRydWUsIGRldGFpbHNDb25maWc6IHRoaXMuYXBwcm92YWxMZXZlbERldGFpbHNDb25maWcgfSxcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnYXBwcm92YWxsZXZlbHM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfVxyXG4gICAgXSxcclxuXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLmFwcHJvdmFsTGV2ZWxGb3JtQ29uZmlnLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdhcHByb3ZhbGxldmVscy9jb25maWcveCcgfSxcclxuICAgIGxvYWRDcml0ZXJpYTogJ2NvbmZpZycsXHJcbiAgICBsb2FkSURGaWVsZDogJ2FwcHJvdmFsQ29uZmlnSUQnXHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIEFwcHJvdmFsIENvbmZpZ1xyXG4gIGFwcHJvdmFsQ29uZmlnRm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIHRpdGxlOiAnQXBwcm92YWwgQ29uZmlndXJhdGlvbicsXHJcbiAgICBpbmNsdWRlQXVkaXQ6IHRydWUsXHJcbiAgICBzZWN1cml0eSA6IHthbGxvdyA6IFt0aGlzLmRhdGFTZXJ2aWNlLmNhcEFwcHJvdmFsc0NvbmZpZ119LFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIC8vIHsgbmFtZTogJ21vZGVsTmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiAnRW50aXR5IE5hbWUnLCBzcGFuOiB0cnVlLCB9LFxyXG4gICAgICB7IG5hbWU6ICdlbmFibGVkJywgdHlwZTogJ2NoZWNrYm94Jywgc3BhbjogdHJ1ZSwgYWxpYXM6ICdFbmFibGUgQXBwcm92YWxzJywgZGVmYXVsdFZhbHVlIDogdHJ1ZSwgaW5mb01lc3NhZ2U6ICdFbmFibGUgb3IgZGlzYWJsZSBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgdGhpcyBlbnRpdHknIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogJ21vZGVsTmFtZScsIHR5cGU6ICdzZWxlY3QnLCByZXF1aXJlZDogdHJ1ZSwgc3BhbjogdHJ1ZSwgYWxpYXM6ICdFbnRpdHknLCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAndmFsdWUnLCBsb2FkQWN0aW9uOiB7IHVybDogJ2FwcHJvdmFsY29uZmlncy9tZXRhL3gnIH0sIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FwcE1vZGVsSUQnLCB0eXBlOiAnc2VsZWN0JywgcmVxdWlyZWQ6IHRydWUsIHNwYW46IHRydWUsIGFsaWFzOiAnRW50aXR5Jywgb3B0aW9uRGlzcGxheTogJ25hbWUnLCBvcHRpb25WYWx1ZTogJ3ZhbHVlJywgbG9hZEFjdGlvbjogeyB1cmw6ICdhcHBtb2RlbHMvbGlzdC9hcHByb3ZhYmxlJyB9LCB9LFxyXG4gICAgICB7IG5hbWU6ICdjcmVhdGVBcHByb3ZhbFJlcXVpcmVkJywgdHlwZTogJ2NoZWNrYm94Jywgc3BhbjogdHJ1ZSwgYWxpYXM6ICdDcmVhdGUgQXBwcm92YWwnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VkaXRBcHByb3ZhbFJlcXVpcmVkJywgdHlwZTogJ2NoZWNrYm94Jywgc3BhbjogdHJ1ZSwgYWxpYXM6ICdFZGl0IEFwcHJvdmFsJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZWxldGVBcHByb3ZhbFJlcXVpcmVkJywgdHlwZTogJ2NoZWNrYm94Jywgc3BhbjogdHJ1ZSwgYWxpYXM6ICdEZWxldGUgQXBwcm92YWwnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2N1c3RvbUFjdGlvbnMnLCB0eXBlOiAndGV4dCcsIHNwYW46IHRydWUsIGFsaWFzOiAnQ3VzdG9tIEFjdGlvbnMnLCBpbmZvTWVzc2FnZTogJ0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFjdGlvbnMgdGhhdCByZXF1aXJlIGFwcHJvdmFsIGUuZyByZWNlaXZlLGRpc2J1cnNlJyB9LFxyXG4gICAgICB7IG5hbWU6ICdub3RpZnknLCB0eXBlOiAnY2hlY2tib3gnLCBkZWZhdWx0VmFsdWUgOiB0cnVlLH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnY2hhbm5lbHMnLCB0eXBlOiAnc2VsZWN0JywgYWxpYXM6ICdOb3RpZmljYXRpb24gQ2hhbm5lbHMnLCBzcGFuOiBmYWxzZSwgZGVmYXVsdEZpcnN0VmFsdWU6IHRydWUsIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIGhpZGRlbkNvbmRpdGlvbiA6IHggPT4geC5ub3RpZnkgPT09IGZhbHNlLFxyXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZGF0YVNlcnZpY2Uubm90aWZpY2F0aW9uT3B0aW9ucyxcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgYXBwcm92YWxDb25maWdEZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5hcHByb3ZhbENvbmZpZ0Zvcm1Db25maWcsXHJcbiAgICBoZXJvRmllbGQ6ICdhcHByb3ZhbENvbmZpZ0lEJyxcclxuICAgIHRhYmxlQ29uZmlnczogW3RoaXMuYXBwcm92YWxMZXZlbHNUYWJsZUNvbmZpZ10sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdhcHByb3ZhbGNvbmZpZ3M/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbiAgYXBwcm92YWxDb25maWdUYWJsZTogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgZmxhdEJ1dHRvbnM6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ21vZGVsTmFtZURpc3BsYXknLCAnZW5hYmxlZCcsICdhcHByb3ZhbFR5cGVzJ10sXHJcbiAgICBjb2x1bW5zOiBbXHJcbiAgICAgIHsgbmFtZTogJ21vZGVsTmFtZURpc3BsYXknLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnRW50aXR5JyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbmFibGVkJywgdHlwZTogJ2NoZWNrYm94JyxcclxuICAgICAgICBpY29uczogW1xyXG4gICAgICAgICAgeyBuYW1lOiAnd2FybmluZycsIGNvbG9yOiAnb3JhbmdlJywgdGlwOiAnTm8gYXBwcm92YWwgbGV2ZWxzIG9yIHJvbGVzIGNvbmZpZ3VyZWQnLCBjb25kaXRpb246IHggPT4geC5lbmFibGVkICYmICh4Lmhhc05vTGV2ZWxzIHx8IHguaGFzTm9Sb2xlcykgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdhcHByb3ZhbFR5cGVzJyxcclxuICAgICAgICB0eXBlOiAnaWNvbicsXHJcbiAgICAgICAgYWxpYXM6ICdBcHByb3ZhbCBUeXBlcycsXHJcbiAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgIHsgbmFtZTogJ2FkZF9jaXJjbGUnLCBjb2xvcjogJ2dyZWVuJywgdGlwOiAnQ3JlYXRlIEFwcHJvdmFsIFJlcXVpcmVkJywgY29uZGl0aW9uOiB4ID0+IHguZW5hYmxlZCAmJiB4LmNyZWF0ZUFwcHJvdmFsUmVxdWlyZWQgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ2VkaXQnLCBjb2xvcjogJ29yYW5nZScsIHRpcDogJ0VkaXQgQXBwcm92YWwgUmVxdWlyZWQnLCBjb25kaXRpb246IHggPT4geC5lbmFibGVkICYmIHguZWRpdEFwcHJvdmFsUmVxdWlyZWQgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGNvbG9yOiAncmVkJywgdGlwOiAnRGVsZXRlIEFwcHJvdmFsIFJlcXVpcmVkJywgY29uZGl0aW9uOiB4ID0+IHguZW5hYmxlZCAmJiB4LmRlbGV0ZUFwcHJvdmFsUmVxdWlyZWQgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ3NldHRpbmdzJywgY29sb3I6ICdibHVlJywgdGlwOiAnQ3VzdG9tIEFjdGlvbnMnLCBjb25kaXRpb246IHggPT4geC5lbmFibGVkICYmIHguY3VzdG9tQWN0aW9ucz8ubGVuZ3RoID4gMCwgdGlwRmllbGQ6ICdjdXN0b21BY3Rpb25zJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7IG5hbWU6ICdjdXN0b21BY3Rpb25zJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0N1c3RvbSBBY3Rpb25zJyB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ2xldmVsQ291bnQnLCB0eXBlOiAnbnVtYmVyJywgYWxpYXM6ICdMZXZlbHMnLFxyXG4gICAgICAgIGljb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6ICd3YXJuaW5nJywgY29sb3I6ICdvcmFuZ2UnLCB0aXA6ICdObyBhcHByb3ZhbCBsZXZlbHMgY29uZmlndXJlZCcsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogeCA9PiB4LmxldmVsQ291bnQgPT09IDBcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG5cclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0NyZWF0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2FwcHJvdmFsY29uZmlncz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7IG5hbWU6ICd2aWV3JywgZGlhbG9nOiB0cnVlLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmFwcHJvdmFsQ29uZmlnRGV0YWlsc0NvbmZpZyB9LFxyXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmFwcHJvdmFsQ29uZmlnRGV0YWlsc0NvbmZpZyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZWxldGUnLCBhY3Rpb246IHsgdXJsOiAnYXBwcm92YWxjb25maWdzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG5cclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnYXBwcm92YWxjb25maWdzL2FsbC94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5hcHByb3ZhbENvbmZpZ0Zvcm1Db25maWdcclxuICB9O1xyXG5cclxuICBwYWdlQ29uZmlnIDogUGFnZUNvbmZpZyA9e1xyXG4gICAgdGl0bGU6ICdBcHByb3ZhbCBDb25maWd1cmF0aW9uJyxcclxuICAgIHRhYmxlQ29uZmlnOiB0aGlzLmFwcHJvdmFsQ29uZmlnVGFibGVcclxuICB9XHJcblxyXG59XHJcbiIsIjxzcGEtcGFnZSBbY29uZmlnXT1cInBhZ2VDb25maWdcIj48L3NwYS1wYWdlPlxyXG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class BugComponent {
4
+ constructor() { }
5
+ ngOnInit() {
6
+ }
7
+ }
8
+ BugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BugComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ BugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BugComponent, selector: "spa-bug", ngImport: i0, template: "<p>Report a fault</p>\r\n", styles: [""] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BugComponent, decorators: [{
11
+ type: Component,
12
+ args: [{ selector: 'spa-bug', template: "<p>Report a fault</p>\r\n" }]
13
+ }], ctorParameters: function () { return []; } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9idWcvYnVnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9idWcvYnVnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBT2xELE1BQU0sT0FBTyxZQUFZO0lBRXZCLGdCQUFnQixDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDOzt5R0FMVSxZQUFZOzZGQUFaLFlBQVksK0NDUHpCLDJCQUNBOzJGRE1hLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0UsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1idWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idWcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2J1Zy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1Z0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPHA+UmVwb3J0IGEgZmF1bHQ8L3A+XHJcbiJdfQ==
@@ -0,0 +1,92 @@
1
+ import { Component } from '@angular/core';
2
+ import { ChangeUserPassword } from '../../classes/LibClasses';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "../../services/http.service";
7
+ import * as i4 from "../../services/message.service";
8
+ import * as i5 from "../../services/datalib.service";
9
+ import * as i6 from "../../services/auth.service";
10
+ import * as i7 from "@angular/material/button";
11
+ import * as i8 from "../../components/text/text.component";
12
+ export class ChangePasswordComponent {
13
+ constructor(router, location, httpService, messageService, dataService, authService, route) {
14
+ this.router = router;
15
+ this.location = location;
16
+ this.httpService = httpService;
17
+ this.messageService = messageService;
18
+ this.dataService = dataService;
19
+ this.authService = authService;
20
+ this.route = route;
21
+ this.isProcessing = false;
22
+ this.changePassword = new ChangeUserPassword();
23
+ }
24
+ ngOnInit() {
25
+ this.myRole = this.authService.currentRoleSource.value;
26
+ if (this.dataService.tmpProfileuserName == "") {
27
+ this.changePassword.userName = this.authService.currentUser;
28
+ }
29
+ else {
30
+ this.changePassword.userName = this.dataService.tmpProfileuserName;
31
+ this.dataService.tmpProfileuserName = "";
32
+ }
33
+ if (this.route.snapshot.queryParams["redirectTo"] != undefined) {
34
+ this.redirectPath = this.route.snapshot.queryParams["redirectTo"];
35
+ }
36
+ else {
37
+ this.redirectPath = "home";
38
+ }
39
+ }
40
+ change() {
41
+ if (!this.myRole[this.dataService.capUsers.name]) {
42
+ if (this.changePassword.currentPassword == "") {
43
+ this.messageService.toast("Please enter current Password");
44
+ return;
45
+ }
46
+ }
47
+ if (this.changePassword.newPassword == "") {
48
+ this.messageService.toast("Please enter new Password");
49
+ return;
50
+ }
51
+ if (this.changePassword.confirmPassword == "") {
52
+ this.messageService.toast("Please confirm new Password");
53
+ return;
54
+ }
55
+ if (this.changePassword.confirmPassword != this.changePassword.newPassword) {
56
+ this.messageService.toast("Passwords do not match");
57
+ return;
58
+ }
59
+ this.isProcessing = true;
60
+ if (this.myRole[this.dataService.capUsers.name]) {
61
+ this.dataService.ChangePasswordAdmin(this.changePassword).subscribe((apiResponse) => {
62
+ this.isProcessing = false;
63
+ if (apiResponse.message == "success") {
64
+ this.messageService.toast("Password Changed");
65
+ this.router.navigate([this.redirectPath]);
66
+ }
67
+ else {
68
+ this.messageService.toast("Error: " + apiResponse.message);
69
+ }
70
+ });
71
+ }
72
+ else {
73
+ this.dataService.ChangePassword(this.changePassword).subscribe((apiResponse) => {
74
+ this.isProcessing = false;
75
+ if (apiResponse.message == "success") {
76
+ this.messageService.toast("Password Changed");
77
+ this.router.navigate([this.redirectPath]);
78
+ }
79
+ else {
80
+ this.messageService.toast("Error: " + apiResponse.message);
81
+ }
82
+ });
83
+ }
84
+ }
85
+ }
86
+ ChangePasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChangePasswordComponent, deps: [{ token: i1.Router }, { token: i2.Location }, { token: i3.HttpService }, { token: i4.MessageService }, { token: i5.DataServiceLib }, { token: i6.AuthService }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
87
+ ChangePasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChangePasswordComponent, selector: "spa-change-password", ngImport: i0, template: "<h4>Change Password</h4>\r\n<hr>\r\n\r\n\r\n<div class=\"container tin-grid\" style=\"font-size:14px;\">\r\n\r\n <div class=\"fill\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" [readonly]=\"true\"></spa-text>\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" type=\"password\"></spa-text>\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n\r\n </div>\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n<!-- <div class=\"container\">\r\n\r\n <div class=\"d-flex justify-content-center row align-items-center\" >\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"tin-input \" style=\"font-size:14px;\">\r\n\r\n <div class=\"col\" *ngIf=\"changePassword.userName!=''\">\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" width=\"300px\" [readonly]=\"true\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\" *ngIf=\"!myRole[dataService.capUsers.name]\">\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col mt-3\">\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n</div> -->\r\n\r\n", styles: [""], dependencies: [{ kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.TextComponent, selector: "spa-text", inputs: ["appearance", "readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction", "required", "min", "max", "regex", "suffix", "infoMessage"], outputs: ["valueChange", "leave", "enterPress"] }] });
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChangePasswordComponent, decorators: [{
89
+ type: Component,
90
+ args: [{ selector: 'spa-change-password', template: "<h4>Change Password</h4>\r\n<hr>\r\n\r\n\r\n<div class=\"container tin-grid\" style=\"font-size:14px;\">\r\n\r\n <div class=\"fill\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" [readonly]=\"true\"></spa-text>\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" type=\"password\"></spa-text>\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n\r\n </div>\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n<!-- <div class=\"container\">\r\n\r\n <div class=\"d-flex justify-content-center row align-items-center\" >\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"tin-input \" style=\"font-size:14px;\">\r\n\r\n <div class=\"col\" *ngIf=\"changePassword.userName!=''\">\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" width=\"300px\" [readonly]=\"true\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\" *ngIf=\"!myRole[dataService.capUsers.name]\">\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col mt-3\">\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n</div> -->\r\n\r\n" }]
91
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: i3.HttpService }, { type: i4.MessageService }, { type: i5.DataServiceLib }, { type: i6.AuthService }, { type: i1.ActivatedRoute }]; } });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLXBhc3N3b3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9jaGFuZ2UtcGFzc3dvcmQvY2hhbmdlLXBhc3N3b3JkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9jaGFuZ2UtcGFzc3dvcmQvY2hhbmdlLXBhc3N3b3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7QUFPOUQsTUFBTSxPQUFPLHVCQUF1QjtJQUVsQyxZQUFtQixNQUFjLEVBQVUsUUFBa0IsRUFBVSxXQUF3QixFQUFVLGNBQThCLEVBQVMsV0FBMkIsRUFBVSxXQUF3QixFQUFVLEtBQXFCO1FBQXpOLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBdUI1TyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixtQkFBYyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQXhCc00sQ0FBQztJQUVqUCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQTtRQUV0RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUUsRUFBRSxFQUFDO1lBQzFDLElBQUks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LENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDNUQ7WUFDSCxDQUFDLENBQ0EsQ0FBQztTQUVIO0lBQ0gsQ0FBQzs7b0hBdkZVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDJEQ2hCcEMsMG1HQW9GQTsyRkRwRWEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4vLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDaGFuZ2VVc2VyUGFzc3dvcmQgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0xpYkNsYXNzZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtY2hhbmdlLXBhc3N3b3JkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hhbmdlLXBhc3N3b3JkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGFuZ2UtcGFzc3dvcmQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VQYXNzd29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm15Um9sZSA9IHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWVcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhU2VydmljZS50bXBQcm9maWxldXNlck5hbWU9PVwiXCIpe1xyXG4gICAgICB0aGlzLmNoYW5nZVBhc3N3b3JkLnVzZXJOYW1lID0gdGhpcy5hdXRoU2VydmljZS5jdXJyZW50VXNlcjtcclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5jaGFuZ2VQYXNzd29yZC51c2VyTmFtZSA9IHRoaXMuZGF0YVNlcnZpY2UudG1wUHJvZmlsZXVzZXJOYW1lO1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLnRtcFByb2ZpbGV1c2VyTmFtZSA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJyZWRpcmVjdFRvXCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlZGlyZWN0UGF0aCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJyZWRpcmVjdFRvXCJdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlZGlyZWN0UGF0aCA9IFwiaG9tZVwiXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbXlSb2xlO1xyXG4gIHJlZGlyZWN0UGF0aFxyXG4gIGlzUHJvY2Vzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYW5nZVBhc3N3b3JkID0gbmV3IENoYW5nZVVzZXJQYXNzd29yZCgpO1xyXG5cclxuICBwdWJsaWMgY2hhbmdlKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5teVJvbGVbdGhpcy5kYXRhU2VydmljZS5jYXBVc2Vycy5uYW1lXSl7XHJcbiAgICAgIGlmICh0aGlzLmNoYW5nZVBhc3N3b3JkLmN1cnJlbnRQYXNzd29yZCA9PSBcIlwiKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBsZWFzZSBlbnRlciBjdXJyZW50IFBhc3N3b3JkXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYW5nZVBhc3N3b3JkLm5ld1Bhc3N3b3JkID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBsZWFzZSBlbnRlciBuZXcgUGFzc3dvcmRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFuZ2VQYXNzd29yZC5jb25maXJtUGFzc3dvcmQgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGNvbmZpcm0gbmV3IFBhc3N3b3JkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhbmdlUGFzc3dvcmQuY29uZmlybVBhc3N3b3JkICE9IHRoaXMuY2hhbmdlUGFzc3dvcmQubmV3UGFzc3dvcmQgKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQYXNzd29yZHMgZG8gbm90IG1hdGNoXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLm15Um9sZVt0aGlzLmRhdGFTZXJ2aWNlLmNhcFVzZXJzLm5hbWVdKXtcclxuXHJcblxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNoYW5nZVBhc3N3b3JkQWRtaW4odGhpcy5jaGFuZ2VQYXNzd29yZCkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSA9PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBhc3N3b3JkIENoYW5nZWRcIik7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmVkaXJlY3RQYXRoXSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfWVsc2V7XHJcblxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNoYW5nZVBhc3N3b3JkKHRoaXMuY2hhbmdlUGFzc3dvcmQpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLm1lc3NhZ2UgPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQYXNzd29yZCBDaGFuZ2VkXCIpO1xyXG5cclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJlZGlyZWN0UGF0aF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8aDQ+Q2hhbmdlIFBhc3N3b3JkPC9oND5cclxuPGhyPlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb250YWluZXIgdGluLWdyaWRcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4O1wiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsbFwiPlxyXG5cclxuICAgIDxzcGEtdGV4dCBpZD1cInR4dHVzZXJOYW1lXCIgZGlzcGxheT1cIlVzZXJuYW1lXCIgWyh2YWx1ZSldPVwiY2hhbmdlUGFzc3dvcmQudXNlck5hbWVcIiAgW3JlYWRvbmx5XT1cInRydWVcIj48L3NwYS10ZXh0PlxyXG4gICAgPHNwYS10ZXh0IGlkPVwidHh0UGFzc3dvcmRcIiBkaXNwbGF5PVwiQ3VycmVudCBQYXNzd29yZFwiIFsodmFsdWUpXT1cImNoYW5nZVBhc3N3b3JkLmN1cnJlbnRQYXNzd29yZFwiICB0eXBlPVwicGFzc3dvcmRcIj48L3NwYS10ZXh0PlxyXG4gICAgPHNwYS10ZXh0IGlkPVwidHh0TmV3UGFzc3dvcmRcIiBkaXNwbGF5PVwiTmV3IFBhc3N3b3JkXCIgWyh2YWx1ZSldPVwiY2hhbmdlUGFzc3dvcmQubmV3UGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIj48L3NwYS10ZXh0PlxyXG4gICAgPHNwYS10ZXh0IGlkPVwidHh0Q29uZmlybVBhc3N3b3JkXCIgZGlzcGxheT1cIkNvbmZpcm0gUGFzc3dvcmRcIiBbKHZhbHVlKV09XCJjaGFuZ2VQYXNzd29yZC5jb25maXJtUGFzc3dvcmRcIiAgdHlwZT1cInBhc3N3b3JkXCI+PC9zcGEtdGV4dD5cclxuICAgIDxidXR0b24gaWQ9XCJidG5DaGFuZ2VcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2hhbmdlKClcIiBjZGtGb2N1c0luaXRpYWw+Q2hhbmdlPC9idXR0b24+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICA8Yj4qUGxlYXNlIGNvbnNpZGVyIHRoZXNlIHJlcXVpcmVtZW50cyBmb3IgeW91ciBuZXcgcGFzc3dvcmQuPC9iPiA8YnI+PGJyPlxyXG5cclxuICAgICAgICBBdCBsZWFzdCA4IGNoYXJhY3RlcnM8YnI+XHJcbiAgICAgICAgQXQgbGVhc3QgMSB1cHBlcmNhc2UgbGV0dGVyIChBLVopPGJyPlxyXG4gICAgICAgIEF0IGxlYXN0IDIgbG93ZXJjYXNlIGxldHRlcnMgKGEteik8YnI+XHJcbiAgICAgICAgQXQgbGVhc3QgMSBkaWdpdCAoMC05KTxicj5cclxuICAgICAgICBBdCBsZWFzdCAxIHNwZWNpYWwgY2hhcmFjdGVyICh+YCEg4oCmKTxicj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG5cclxuPCEtLSA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciByb3cgYWxpZ24taXRlbXMtY2VudGVyXCIgPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXQgXCIgc3R5bGU9XCJmb250LXNpemU6MTRweDtcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiICpuZ0lmPVwiY2hhbmdlUGFzc3dvcmQudXNlck5hbWUhPScnXCI+XHJcbiAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHR1c2VyTmFtZVwiIGRpc3BsYXk9XCJVc2VybmFtZVwiIFsodmFsdWUpXT1cImNoYW5nZVBhc3N3b3JkLnVzZXJOYW1lXCIgd2lkdGg9XCIzMDBweFwiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9zcGEtdGV4dD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiICpuZ0lmPVwiIW15Um9sZVtkYXRhU2VydmljZS5jYXBVc2Vycy5uYW1lXVwiPlxyXG4gICAgICAgICAgPHNwYS10ZXh0IGlkPVwidHh0UGFzc3dvcmRcIiBkaXNwbGF5PVwiQ3VycmVudCBQYXNzd29yZFwiIFsodmFsdWUpXT1cImNoYW5nZVBhc3N3b3JkLmN1cnJlbnRQYXNzd29yZFwiIHdpZHRoPVwiMzAwcHhcIiB0eXBlPVwicGFzc3dvcmRcIj48L3NwYS10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHROZXdQYXNzd29yZFwiIGRpc3BsYXk9XCJOZXcgUGFzc3dvcmRcIiBbKHZhbHVlKV09XCJjaGFuZ2VQYXNzd29yZC5uZXdQYXNzd29yZFwiIHdpZHRoPVwiMzAwcHhcIiB0eXBlPVwicGFzc3dvcmRcIj48L3NwYS10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgPHNwYS10ZXh0IGlkPVwidHh0Q29uZmlybVBhc3N3b3JkXCIgZGlzcGxheT1cIkNvbmZpcm0gUGFzc3dvcmRcIiBbKHZhbHVlKV09XCJjaGFuZ2VQYXNzd29yZC5jb25maXJtUGFzc3dvcmRcIiB3aWR0aD1cIjMwMHB4XCIgdHlwZT1cInBhc3N3b3JkXCI+PC9zcGEtdGV4dD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBtdC0zXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuQ2hhbmdlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNoYW5nZSgpXCIgY2RrRm9jdXNJbml0aWFsPkNoYW5nZTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICA8Yj4qUGxlYXNlIGNvbnNpZGVyIHRoZXNlIHJlcXVpcmVtZW50cyBmb3IgeW91ciBuZXcgcGFzc3dvcmQuPC9iPiA8YnI+PGJyPlxyXG5cclxuICAgICAgICBBdCBsZWFzdCA4IGNoYXJhY3RlcnM8YnI+XHJcbiAgICAgICAgQXQgbGVhc3QgMSB1cHBlcmNhc2UgbGV0dGVyIChBLVopPGJyPlxyXG4gICAgICAgIEF0IGxlYXN0IDIgbG93ZXJjYXNlIGxldHRlcnMgKGEteik8YnI+XHJcbiAgICAgICAgQXQgbGVhc3QgMSBkaWdpdCAoMC05KTxicj5cclxuICAgICAgICBBdCBsZWFzdCAxIHNwZWNpYWwgY2hhcmFjdGVyICh+YCEg4oCmKTxicj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuXHJcbiJdfQ==