ngx-techlify-core 14.7.0 → 14.8.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 (164) hide show
  1. package/esm2020/lib/access-control-config/access-control-config-form/access-control-config-form.component.mjs +127 -0
  2. package/esm2020/lib/access-control-config/access-control-config-routing.module.mjs +31 -0
  3. package/esm2020/lib/access-control-config/access-control-config.component.mjs +131 -0
  4. package/esm2020/lib/access-control-config/access-control-config.model.mjs +21 -0
  5. package/esm2020/lib/access-control-config/access-control-config.module.mjs +60 -0
  6. package/esm2020/lib/access-control-config/access-control-config.service.mjs +31 -0
  7. package/esm2020/lib/change-password/change-password-routing.module.mjs +24 -0
  8. package/esm2020/lib/change-password/change-password.component.mjs +87 -0
  9. package/esm2020/lib/change-password/change-password.module.mjs +48 -0
  10. package/esm2020/lib/entity-files/entity-files-view-all.component.mjs +7 -8
  11. package/esm2020/lib/forgot-password/forgot-password-routing.module.mjs +22 -0
  12. package/esm2020/lib/forgot-password/forgot-password.component.mjs +67 -0
  13. package/esm2020/lib/forgot-password/forgot-password.module.mjs +34 -0
  14. package/esm2020/lib/forgot-password/index.mjs +3 -0
  15. package/esm2020/lib/ip-address-selector/ip-address-selector.module.mjs +48 -0
  16. package/esm2020/lib/ip-address-selector/ip-range-selector/ip-range-selector.component.mjs +109 -0
  17. package/esm2020/lib/login/index.mjs +3 -0
  18. package/esm2020/lib/login/login-routing.module.mjs +23 -0
  19. package/esm2020/lib/login/login.component.mjs +153 -0
  20. package/esm2020/lib/login/login.module.mjs +50 -0
  21. package/esm2020/lib/ngx-techlify-users/ngx-techlify-users-routing.module.mjs +43 -0
  22. package/esm2020/lib/ngx-techlify-users/ngx-techlify-users.module.mjs +22 -0
  23. package/esm2020/lib/password-requirement-check/password-check-result.mjs +2 -0
  24. package/esm2020/lib/password-requirement-check/password-check.service.mjs +43 -0
  25. package/esm2020/lib/password-requirement-check/password-requirement-check/password-requirement-check.component.mjs +47 -0
  26. package/esm2020/lib/password-requirement-check/password-requirement-check.module.mjs +24 -0
  27. package/esm2020/lib/profile/index.mjs +3 -0
  28. package/esm2020/lib/profile/profile-edit.component.mjs +75 -0
  29. package/esm2020/lib/profile/profile-routing.module.mjs +23 -0
  30. package/esm2020/lib/profile/profile.module.mjs +36 -0
  31. package/esm2020/lib/restrictors/index.mjs +4 -0
  32. package/esm2020/lib/restrictors/restrictor-level-selector/restrictor-level-selector/restrictor-level-selector.component.mjs +91 -0
  33. package/esm2020/lib/restrictors/restrictor-level-selector/restrictor-level-selector.module.mjs +36 -0
  34. package/esm2020/lib/restrictors/restrictor-level-selector/restrictor-level.service.mjs +19 -0
  35. package/esm2020/lib/restrictors/restrictor-status-selector/restrictor-status-selector/restrictor-status-selector.component.mjs +91 -0
  36. package/esm2020/lib/restrictors/restrictor-status-selector/restrictor-status-selector.module.mjs +32 -0
  37. package/esm2020/lib/restrictors/restrictor-status-selector/restrictor-status.service.mjs +19 -0
  38. package/esm2020/lib/restrictors/restrictor-type-selector/restrictor-type-selector/restrictor-type-selector.component.mjs +92 -0
  39. package/esm2020/lib/restrictors/restrictor-type-selector/restrictor-type-selector.module.mjs +36 -0
  40. package/esm2020/lib/restrictors/restrictor-type-selector/restrictor-type.service.mjs +19 -0
  41. package/esm2020/lib/restrictors/restrictor.service.mjs +19 -0
  42. package/esm2020/lib/restrictors/restrictors-form/restrictors-form.component.mjs +102 -0
  43. package/esm2020/lib/restrictors/restrictors-form-page/restrictors-form-page.component.mjs +44 -0
  44. package/esm2020/lib/restrictors/restrictors-list-page/restrictors-list-page.component.mjs +145 -0
  45. package/esm2020/lib/restrictors/restrictors-routing.module.mjs +42 -0
  46. package/esm2020/lib/restrictors/restrictors.module.mjs +99 -0
  47. package/esm2020/lib/role/index.mjs +9 -0
  48. package/esm2020/lib/role/permission/permission.model.mjs +9 -0
  49. package/esm2020/lib/role/permission/permission.module.mjs +45 -0
  50. package/esm2020/lib/role/permission/permission.routes.mjs +26 -0
  51. package/esm2020/lib/role/permission/permissions-management.component.mjs +105 -0
  52. package/esm2020/lib/role/role-form.component.mjs +99 -0
  53. package/esm2020/lib/role/role-view/role-view.component.mjs +39 -0
  54. package/esm2020/lib/role/role.model.mjs +56 -0
  55. package/esm2020/lib/role/role.module.mjs +59 -0
  56. package/esm2020/lib/role/role.routes.mjs +28 -0
  57. package/esm2020/lib/role/role.service.mjs +26 -0
  58. package/esm2020/lib/role/roles-view-all.component.mjs +131 -0
  59. package/esm2020/lib/signup/index.mjs +3 -0
  60. package/esm2020/lib/signup/signup-routing.module.mjs +22 -0
  61. package/esm2020/lib/signup/signup.component.mjs +78 -0
  62. package/esm2020/lib/signup/signup.module.mjs +34 -0
  63. package/esm2020/lib/user/current-user.service.mjs +135 -0
  64. package/esm2020/lib/user/index.mjs +8 -0
  65. package/esm2020/lib/user/user-explore.component.mjs +50 -0
  66. package/esm2020/lib/user/user-form.component.mjs +219 -0
  67. package/esm2020/lib/user/user-view.component.mjs +68 -0
  68. package/esm2020/lib/user/user.model.mjs +30 -0
  69. package/esm2020/lib/user/user.module.mjs +99 -0
  70. package/esm2020/lib/user/user.routes.mjs +29 -0
  71. package/esm2020/lib/user/user.service.mjs +31 -0
  72. package/esm2020/lib/user/users-view-all.component.mjs +208 -0
  73. package/esm2020/lib/user-config/index.mjs +3 -0
  74. package/esm2020/lib/user-config/user-config.model.mjs +50 -0
  75. package/esm2020/lib/user-config/user-config.service.mjs +65 -0
  76. package/esm2020/lib/user-selector/index.mjs +3 -0
  77. package/esm2020/lib/user-selector/user-data.service.mjs +35 -0
  78. package/esm2020/lib/user-selector/user-selector.component.mjs +91 -0
  79. package/esm2020/lib/user-selector/user-selector.module.mjs +38 -0
  80. package/esm2020/public-api.mjs +24 -1
  81. package/fesm2015/ngx-techlify-core.mjs +3791 -170
  82. package/fesm2015/ngx-techlify-core.mjs.map +1 -1
  83. package/fesm2020/ngx-techlify-core.mjs +3759 -170
  84. package/fesm2020/ngx-techlify-core.mjs.map +1 -1
  85. package/lib/access-control-config/access-control-config-form/access-control-config-form.component.d.ts +44 -0
  86. package/lib/access-control-config/access-control-config-routing.module.d.ts +7 -0
  87. package/lib/access-control-config/access-control-config.component.d.ts +31 -0
  88. package/lib/access-control-config/access-control-config.model.d.ts +17 -0
  89. package/lib/access-control-config/access-control-config.module.d.ts +18 -0
  90. package/lib/access-control-config/access-control-config.service.d.ts +13 -0
  91. package/lib/change-password/change-password-routing.module.d.ts +7 -0
  92. package/lib/change-password/change-password.component.d.ts +27 -0
  93. package/lib/change-password/change-password.module.d.ts +14 -0
  94. package/lib/forgot-password/forgot-password-routing.module.d.ts +7 -0
  95. package/lib/forgot-password/forgot-password.component.d.ts +34 -0
  96. package/lib/forgot-password/forgot-password.module.d.ts +11 -0
  97. package/lib/forgot-password/index.d.ts +2 -0
  98. package/lib/ip-address-selector/ip-address-selector.module.d.ts +14 -0
  99. package/lib/ip-address-selector/ip-range-selector/ip-range-selector.component.d.ts +28 -0
  100. package/lib/login/index.d.ts +2 -0
  101. package/lib/login/login-routing.module.d.ts +7 -0
  102. package/lib/login/login.component.d.ts +53 -0
  103. package/lib/login/login.module.d.ts +15 -0
  104. package/lib/ngx-techlify-users/ngx-techlify-users-routing.module.d.ts +7 -0
  105. package/lib/ngx-techlify-users/ngx-techlify-users.module.d.ts +8 -0
  106. package/lib/password-requirement-check/password-check-result.d.ts +7 -0
  107. package/lib/password-requirement-check/password-check.service.d.ts +15 -0
  108. package/lib/password-requirement-check/password-requirement-check/password-requirement-check.component.d.ts +22 -0
  109. package/lib/password-requirement-check/password-requirement-check.module.d.ts +8 -0
  110. package/lib/profile/index.d.ts +2 -0
  111. package/lib/profile/profile-edit.component.d.ts +33 -0
  112. package/lib/profile/profile-routing.module.d.ts +7 -0
  113. package/lib/profile/profile.module.d.ts +11 -0
  114. package/lib/restrictors/index.d.ts +3 -0
  115. package/lib/restrictors/restrictor-level-selector/restrictor-level-selector/restrictor-level-selector.component.d.ts +34 -0
  116. package/lib/restrictors/restrictor-level-selector/restrictor-level-selector.module.d.ts +11 -0
  117. package/lib/restrictors/restrictor-level-selector/restrictor-level.service.d.ts +9 -0
  118. package/lib/restrictors/restrictor-status-selector/restrictor-status-selector/restrictor-status-selector.component.d.ts +34 -0
  119. package/lib/restrictors/restrictor-status-selector/restrictor-status-selector.module.d.ts +10 -0
  120. package/lib/restrictors/restrictor-status-selector/restrictor-status.service.d.ts +9 -0
  121. package/lib/restrictors/restrictor-type-selector/restrictor-type-selector/restrictor-type-selector.component.d.ts +34 -0
  122. package/lib/restrictors/restrictor-type-selector/restrictor-type-selector.module.d.ts +11 -0
  123. package/lib/restrictors/restrictor-type-selector/restrictor-type.service.d.ts +9 -0
  124. package/lib/restrictors/restrictor.service.d.ts +9 -0
  125. package/lib/restrictors/restrictors-form/restrictors-form.component.d.ts +30 -0
  126. package/lib/restrictors/restrictors-form-page/restrictors-form-page.component.d.ts +21 -0
  127. package/lib/restrictors/restrictors-list-page/restrictors-list-page.component.d.ts +51 -0
  128. package/lib/restrictors/restrictors-routing.module.d.ts +7 -0
  129. package/lib/restrictors/restrictors.module.d.ts +28 -0
  130. package/lib/role/index.d.ts +8 -0
  131. package/lib/role/permission/permission.model.d.ts +11 -0
  132. package/lib/role/permission/permission.module.d.ts +12 -0
  133. package/lib/role/permission/permission.routes.d.ts +7 -0
  134. package/lib/role/permission/permissions-management.component.d.ts +38 -0
  135. package/lib/role/role-form.component.d.ts +34 -0
  136. package/lib/role/role-view/role-view.component.d.ts +16 -0
  137. package/lib/role/role.model.d.ts +31 -0
  138. package/lib/role/role.module.d.ts +16 -0
  139. package/lib/role/role.routes.d.ts +7 -0
  140. package/lib/role/role.service.d.ts +11 -0
  141. package/lib/role/roles-view-all.component.d.ts +40 -0
  142. package/lib/signup/index.d.ts +2 -0
  143. package/lib/signup/signup-routing.module.d.ts +7 -0
  144. package/lib/signup/signup.component.d.ts +29 -0
  145. package/lib/signup/signup.module.d.ts +11 -0
  146. package/lib/user/current-user.service.d.ts +63 -0
  147. package/lib/user/index.d.ts +7 -0
  148. package/lib/user/user-explore.component.d.ts +26 -0
  149. package/lib/user/user-form.component.d.ts +52 -0
  150. package/lib/user/user-view.component.d.ts +31 -0
  151. package/lib/user/user.model.d.ts +29 -0
  152. package/lib/user/user.module.d.ts +26 -0
  153. package/lib/user/user.routes.d.ts +7 -0
  154. package/lib/user/user.service.d.ts +13 -0
  155. package/lib/user/users-view-all.component.d.ts +56 -0
  156. package/lib/user-config/index.d.ts +2 -0
  157. package/lib/user-config/user-config.model.d.ts +50 -0
  158. package/lib/user-config/user-config.service.d.ts +14 -0
  159. package/lib/user-selector/index.d.ts +2 -0
  160. package/lib/user-selector/user-data.service.d.ts +16 -0
  161. package/lib/user-selector/user-selector.component.d.ts +29 -0
  162. package/lib/user-selector/user-selector.module.d.ts +10 -0
  163. package/package.json +1 -1
  164. package/public-api.d.ts +23 -0
@@ -0,0 +1,145 @@
1
+ import { Component } from '@angular/core';
2
+ import { MatTableDataSource } from '@angular/material/table';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "../../request-helper/request-helper.service";
7
+ import * as i3 from "@angular/router";
8
+ import * as i4 from "../restrictor.service";
9
+ import * as i5 from "../../user-config";
10
+ import * as i6 from "@angular/common";
11
+ import * as i7 from "@angular/flex-layout/flex";
12
+ import * as i8 from "@angular/material/card";
13
+ import * as i9 from "../restrictor-type-selector/restrictor-type-selector/restrictor-type-selector.component";
14
+ import * as i10 from "../restrictor-level-selector/restrictor-level-selector/restrictor-level-selector.component";
15
+ import * as i11 from "@angular/material/icon";
16
+ import * as i12 from "../restrictor-status-selector/restrictor-status-selector/restrictor-status-selector.component";
17
+ import * as i13 from "@angular/material/table";
18
+ import * as i14 from "@angular/material/progress-bar";
19
+ import * as i15 from "@angular/material/sort";
20
+ import * as i16 from "ngx-infinite-scroll";
21
+ export class RestrictorsListPageComponent {
22
+ constructor(fb, requestHelperService, activatedRoute, restrictorService, userConfigService) {
23
+ this.fb = fb;
24
+ this.requestHelperService = requestHelperService;
25
+ this.activatedRoute = activatedRoute;
26
+ this.restrictorService = restrictorService;
27
+ this.userConfigService = userConfigService;
28
+ this.displayedColumns = [
29
+ 'No',
30
+ 'Type',
31
+ 'Level',
32
+ 'Entity',
33
+ 'Data',
34
+ 'Status',
35
+ 'Actions'
36
+ ];
37
+ this.dataSource = new MatTableDataSource([]);
38
+ this.page = 1;
39
+ this.scrollContainer = '.mat-sidenav-content';
40
+ this.config = this.userConfigService.getConfig();
41
+ if (this.config?.scrollContainer) {
42
+ //Set to null if scroll has to be done from root
43
+ this.scrollContainer = this.config?.scrollContainer == 'root' ? null : this.config?.scrollContainer;
44
+ }
45
+ this.filterForm = this.fb.group({
46
+ type_ids: [''],
47
+ level_ids: [''],
48
+ status_ids: [''],
49
+ sort_by: 'id|desc'
50
+ });
51
+ }
52
+ ngOnInit() {
53
+ // Update the form with query params.
54
+ this.requestHelperService.updateFormWithQueryParams(this.filterForm, {
55
+ type_ids: { multiple: true },
56
+ level_ids: { multiple: true },
57
+ status_ids: { multiple: true },
58
+ });
59
+ // Update the query params on filter change
60
+ this.filterForm.valueChanges
61
+ .pipe(debounceTime(800))
62
+ .subscribe({
63
+ next: () => {
64
+ this.requestHelperService.updateQueryParams(this.requestHelperService.convertToFormData(this.filterForm.value));
65
+ }
66
+ });
67
+ this.activatedRoute.queryParams.subscribe(() => this.reload());
68
+ }
69
+ reload() {
70
+ if (!this.isWorking) {
71
+ this.page = 1;
72
+ this.dataSource = new MatTableDataSource([]);
73
+ // fetch the data
74
+ this.fetchData();
75
+ }
76
+ }
77
+ /**
78
+ * Fetch the restrictors list.
79
+ *
80
+ * @private
81
+ */
82
+ fetchData() {
83
+ const params = {
84
+ perPage: 25,
85
+ page: this.page,
86
+ with: 'type,level,status,restrictable',
87
+ ...this.requestHelperService.convertToFormData(this.filterForm.value)
88
+ };
89
+ this.isWorking = true;
90
+ this.restrictorService.index(params).subscribe({
91
+ next: (response) => {
92
+ const data = this.dataSource?.data?.concat(response?.data);
93
+ this.totalItems = response?.total;
94
+ this.dataSource = new MatTableDataSource(data);
95
+ this.isWorking = false;
96
+ },
97
+ error: () => this.isWorking = false
98
+ });
99
+ }
100
+ /**
101
+ * Handle on sort change event.
102
+ *
103
+ * @param sort
104
+ */
105
+ onSortChange(sort) {
106
+ let { active, direction } = sort;
107
+ if (!direction) {
108
+ active = 'id';
109
+ direction = 'desc';
110
+ }
111
+ this.filterForm.get('sort_by').setValue(active + '|' + direction);
112
+ }
113
+ /**
114
+ * Handle on scroll event to load data.
115
+ */
116
+ onScroll() {
117
+ if (this.totalItems > this.dataSource?.data.length && !this.isWorking) {
118
+ this.page++;
119
+ this.fetchData();
120
+ }
121
+ }
122
+ /**
123
+ * Get restrictable value.
124
+ *
125
+ * @param restrictor
126
+ */
127
+ getRestrictableTypeValue(restrictor) {
128
+ if (restrictor?.level_id === 1) {
129
+ return restrictor?.restrictable?.title;
130
+ }
131
+ else if (restrictor?.level_id === 2) {
132
+ return restrictor?.restrictable?.label;
133
+ }
134
+ else {
135
+ return restrictor?.restrictable?.name;
136
+ }
137
+ }
138
+ }
139
+ RestrictorsListPageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsListPageComponent, deps: [{ token: i1.FormBuilder }, { token: i2.RequestHelperService }, { token: i3.ActivatedRoute }, { token: i4.RestrictorService }, { token: i5.UserConfigService }], target: i0.ɵɵFactoryTarget.Component });
140
+ RestrictorsListPageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: RestrictorsListPageComponent, selector: "lib-restrictors-list-page", ngImport: i0, template: "<div fxLayout fxLayoutAlign=\"center\" fxLayoutGap=\"10px\">\n <h4 class=\"mb-0\">Restrictors</h4>\n <mat-icon class=\"cursor-pointer\" [routerLink]=\"['create']\">add</mat-icon>\n</div>\n<p class=\"text-center text-secondary\">\n These are the configurations for restrictions that we are adding to users' access of this app.\n</p>\n\n<mat-card class=\"mt-2\">\n <mat-card-content>\n <form [formGroup]=\"filterForm\" fxLayout fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\n <techlify-restrictor-type-selector formControlName=\"type_ids\"\n [multiple]=\"true\"></techlify-restrictor-type-selector>\n <techlify-restrictor-level-selector formControlName=\"level_ids\"\n [multiple]=\"true\"></techlify-restrictor-level-selector>\n <techlify-restrictor-status-selector formControlName=\"status_ids\"\n [multiple]=\"true\"></techlify-restrictor-status-selector>\n </form>\n </mat-card-content>\n</mat-card>\n\n<mat-card class=\"mt-2 p-0\">\n <mat-card-content>\n <table mat-table [dataSource]=\"dataSource\" class=\"w-100\" matSort (matSortChange)=\"onSortChange($event)\"\n infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n [infiniteScrollContainer]=\"scrollContainer\" [fromRoot]=\"true\" (scrolled)=\"onScroll()\">\n\n <!-- No Column -->\n <ng-container matColumnDef=\"No\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"created_at\"> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"Type\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"type_id\"> Type </th>\n <td mat-cell *matCellDef=\"let element\"> {{ element?.type?.title }} </td>\n </ng-container>\n\n <!-- Level Column -->\n <ng-container matColumnDef=\"Level\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"level_id\"> Level </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.level?.title}} </td>\n </ng-container>\n\n <!-- Entity Column -->\n <ng-container matColumnDef=\"Entity\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"restricted_object_id\"> Entity </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ getRestrictableTypeValue(element) }}\n </td>\n </ng-container>\n\n <!-- Data Column -->\n <ng-container matColumnDef=\"Data\">\n <th mat-header-cell *matHeaderCellDef> Data </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\" *ngIf=\"element?.data?.ip_range\">\n IP Range: {{ element?.data?.ip_range }}\n </p>\n <p class=\"mb-0\" *ngIf=\"element?.data?.start_time\">\n Start time: {{ element?.data?.start_time | date: 'short' }}\n </p>\n <p class=\"mb-0\" *ngIf=\"element?.data?.end_time\">\n End time: {{ element?.data?.end_time | date: 'short' }}\n </p>\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"Status\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"status_id\"> Status </th>\n <td mat-cell *matCellDef=\"let element\"> {{ element?.status?.title }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-icon class=\"cursor-pointer\" [routerLink]=\"[element?.id, 'edit']\">edit</mat-icon>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i9.RestrictorTypeSelectorComponent, selector: "techlify-restrictor-type-selector", inputs: ["label", "multiple", "showLabel"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i10.RestrictorLevelSelectorComponent, selector: "techlify-restrictor-level-selector", inputs: ["label", "multiple", "showLabel"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.RestrictorStatusSelectorComponent, selector: "techlify-restrictor-status-selector", inputs: ["label", "multiple", "showLabel"] }, { kind: "component", type: i13.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i13.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i13.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i13.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i13.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i13.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i13.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i13.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i13.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i13.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i15.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i16.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsListPageComponent, decorators: [{
142
+ type: Component,
143
+ args: [{ selector: 'lib-restrictors-list-page', template: "<div fxLayout fxLayoutAlign=\"center\" fxLayoutGap=\"10px\">\n <h4 class=\"mb-0\">Restrictors</h4>\n <mat-icon class=\"cursor-pointer\" [routerLink]=\"['create']\">add</mat-icon>\n</div>\n<p class=\"text-center text-secondary\">\n These are the configurations for restrictions that we are adding to users' access of this app.\n</p>\n\n<mat-card class=\"mt-2\">\n <mat-card-content>\n <form [formGroup]=\"filterForm\" fxLayout fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\n <techlify-restrictor-type-selector formControlName=\"type_ids\"\n [multiple]=\"true\"></techlify-restrictor-type-selector>\n <techlify-restrictor-level-selector formControlName=\"level_ids\"\n [multiple]=\"true\"></techlify-restrictor-level-selector>\n <techlify-restrictor-status-selector formControlName=\"status_ids\"\n [multiple]=\"true\"></techlify-restrictor-status-selector>\n </form>\n </mat-card-content>\n</mat-card>\n\n<mat-card class=\"mt-2 p-0\">\n <mat-card-content>\n <table mat-table [dataSource]=\"dataSource\" class=\"w-100\" matSort (matSortChange)=\"onSortChange($event)\"\n infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n [infiniteScrollContainer]=\"scrollContainer\" [fromRoot]=\"true\" (scrolled)=\"onScroll()\">\n\n <!-- No Column -->\n <ng-container matColumnDef=\"No\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"created_at\"> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index;\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"Type\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"type_id\"> Type </th>\n <td mat-cell *matCellDef=\"let element\"> {{ element?.type?.title }} </td>\n </ng-container>\n\n <!-- Level Column -->\n <ng-container matColumnDef=\"Level\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"level_id\"> Level </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.level?.title}} </td>\n </ng-container>\n\n <!-- Entity Column -->\n <ng-container matColumnDef=\"Entity\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"restricted_object_id\"> Entity </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ getRestrictableTypeValue(element) }}\n </td>\n </ng-container>\n\n <!-- Data Column -->\n <ng-container matColumnDef=\"Data\">\n <th mat-header-cell *matHeaderCellDef> Data </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\" *ngIf=\"element?.data?.ip_range\">\n IP Range: {{ element?.data?.ip_range }}\n </p>\n <p class=\"mb-0\" *ngIf=\"element?.data?.start_time\">\n Start time: {{ element?.data?.start_time | date: 'short' }}\n </p>\n <p class=\"mb-0\" *ngIf=\"element?.data?.end_time\">\n End time: {{ element?.data?.end_time | date: 'short' }}\n </p>\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"Status\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"status_id\"> Status </th>\n <td mat-cell *matCellDef=\"let element\"> {{ element?.status?.title }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-icon class=\"cursor-pointer\" [routerLink]=\"[element?.id, 'edit']\">edit</mat-icon>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>" }]
144
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.RequestHelperService }, { type: i3.ActivatedRoute }, { type: i4.RestrictorService }, { type: i5.UserConfigService }]; } });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHJpY3RvcnMtbGlzdC1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvcmVzdHJpY3RvcnMvcmVzdHJpY3RvcnMtbGlzdC1wYWdlL3Jlc3RyaWN0b3JzLWxpc3QtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3Jlc3RyaWN0b3JzL3Jlc3RyaWN0b3JzLWxpc3QtcGFnZS9yZXN0cmljdG9ycy1saXN0LXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc5QyxNQUFNLE9BQU8sNEJBQTRCO0lBbUJ2QyxZQUNVLEVBQWUsRUFDZixvQkFBMEMsRUFDMUMsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3JDLGlCQUFvQztRQUpuQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNyQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBckI3QyxxQkFBZ0IsR0FBYTtZQUMzQixJQUFJO1lBQ0osTUFBTTtZQUNOLE9BQU87WUFDUCxRQUFRO1lBQ1IsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1NBQ1YsQ0FBQztRQUNGLGVBQVUsR0FBNEIsSUFBSSxrQkFBa0IsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUM5RCxTQUFJ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ekMsdTVIQTBGVzsyRkQzRUUsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgUmVxdWVzdEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXF1ZXN0LWhlbHBlci9yZXF1ZXN0LWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJlc3RyaWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzdHJpY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE11bHRpVXNlckNvbmZpZywgVXNlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLWNvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1yZXN0cmljdG9ycy1saXN0LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHJpY3RvcnMtbGlzdC1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHJpY3RvcnMtbGlzdC1wYWdlLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZXN0cmljdG9yc0xpc3RQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW1xuICAgICdObycsXG4gICAgJ1R5cGUnLFxuICAgICdMZXZlbCcsXG4gICAgJ0VudGl0eScsXG4gICAgJ0RhdGEnLFxuICAgICdTdGF0dXMnLFxuICAgICdBY3Rpb25zJ1xuICBdO1xuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihbXSk7XG4gIHByaXZhdGUgcGFnZSA9IDE7XG4gIHByaXZhdGUgdG90YWxJdGVtczogbnVtYmVyO1xuICBpc1dvcmtpbmc6IGJvb2xlYW47XG4gIHNjcm9sbENvbnRhaW5lcjogc3RyaW5nID0gJy5tYXQtc2lkZW5hdi1jb250ZW50JztcbiAgY29uZmlnOiBNdWx0aVVzZXJDb25maWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZXF1ZXN0SGVscGVyU2VydmljZTogUmVxdWVzdEhlbHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZXN0cmljdG9yU2VydmljZTogUmVzdHJpY3RvclNlcnZpY2UsXG4gICAgcHVibGljIHVzZXJDb25maWdTZXJ2aWNlOiBVc2VyQ29uZmlnU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLnVzZXJDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgIGlmICh0aGlzLmNvbmZpZz8uc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAvL1NldCB0byBudWxsIGlmIHNjcm9sbCBoYXMgdG8gYmUgZG9uZSBmcm9tIHJvb3RcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5jb25maWc/LnNjcm9sbENvbnRhaW5lciA9PSAncm9vdCcgPyBudWxsIDogdGhpcy5jb25maWc/LnNjcm9sbENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHR5cGVfaWRzOiBbJyddLFxuICAgICAgbGV2ZWxfaWRzOiBbJyddLFxuICAgICAgc3RhdHVzX2lkczogWycnXSxcbiAgICAgIHNvcnRfYnk6ICdpZHxkZXNjJ1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtIHdpdGggcXVlcnkgcGFyYW1zLlxuICAgIHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UudXBkYXRlRm9ybVdpdGhRdWVyeVBhcmFtcyhcbiAgICAgIHRoaXMuZmlsdGVyRm9ybSxcbiAgICAgIHtcbiAgICAgICAgdHlwZV9pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgICAgbGV2ZWxfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICAgIHN0YXR1c19pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBxdWVyeSBwYXJhbXMgb24gZmlsdGVyIGNoYW5nZVxuICAgIHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg4MDApKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLnVwZGF0ZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS5jb252ZXJ0VG9Gb3JtRGF0YSh0aGlzLmZpbHRlckZvcm0udmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlbG9hZCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1dvcmtpbmcpIHtcbiAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pO1xuICAgICAgLy8gZmV0Y2ggdGhlIGRhdGFcbiAgICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSByZXN0cmljdG9ycyBsaXN0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBmZXRjaERhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBwZXJQYWdlOiAyNSxcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgIHdpdGg6ICd0eXBlLGxldmVsLHN0YXR1cyxyZXN0cmljdGFibGUnLFxuICAgICAgLi4udGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS5jb252ZXJ0VG9Gb3JtRGF0YSh0aGlzLmZpbHRlckZvcm0udmFsdWUpXG4gICAgfTtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5yZXN0cmljdG9yU2VydmljZS5pbmRleChwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmNvbmNhdChyZXNwb25zZT8uZGF0YSk7XG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3BvbnNlPy50b3RhbDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KGRhdGEpO1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB0aGlzLmlzV29ya2luZyA9IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG9uIHNvcnQgY2hhbmdlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gc29ydFxuICAgKi9cbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICBsZXQgeyBhY3RpdmUsIGRpcmVjdGlvbiB9ID0gc29ydDtcbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgYWN0aXZlID0gJ2lkJztcbiAgICAgIGRpcmVjdGlvbiA9ICdkZXNjJztcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnc29ydF9ieScpLnNldFZhbHVlKGFjdGl2ZSArICd8JyArIGRpcmVjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG9uIHNjcm9sbCBldmVudCB0byBsb2FkIGRhdGEuXG4gICAqL1xuICBvblNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b3RhbEl0ZW1zID4gdGhpcy5kYXRhU291cmNlPy5kYXRhLmxlbmd0aCAmJiAhdGhpcy5pc1dvcmtpbmcpIHtcbiAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlc3RyaWN0YWJsZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHJlc3RyaWN0b3JcbiAgICovXG4gIGdldFJlc3RyaWN0YWJsZVR5cGVWYWx1ZShyZXN0cmljdG9yOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChyZXN0cmljdG9yPy5sZXZlbF9pZCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHJlc3RyaWN0b3I/LnJlc3RyaWN0YWJsZT8udGl0bGU7XG4gICAgfSBlbHNlIGlmIChyZXN0cmljdG9yPy5sZXZlbF9pZCA9PT0gMikge1xuICAgICAgcmV0dXJuIHJlc3RyaWN0b3I/LnJlc3RyaWN0YWJsZT8ubGFiZWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN0cmljdG9yPy5yZXN0cmljdGFibGU/Lm5hbWU7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGZ4TGF5b3V0IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXJcIiBmeExheW91dEdhcD1cIjEwcHhcIj5cbiAgPGg0IGNsYXNzPVwibWItMFwiPlJlc3RyaWN0b3JzPC9oND5cbiAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbcm91dGVyTGlua109XCJbJ2NyZWF0ZSddXCI+YWRkPC9tYXQtaWNvbj5cbjwvZGl2PlxuPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LXNlY29uZGFyeVwiPlxuICBUaGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciByZXN0cmljdGlvbnMgdGhhdCB3ZSBhcmUgYWRkaW5nIHRvIHVzZXJzJyBhY2Nlc3Mgb2YgdGhpcyBhcHAuXG48L3A+XG5cbjxtYXQtY2FyZCBjbGFzcz1cIm10LTJcIj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgZnhMYXlvdXQgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTBweFwiPlxuICAgICAgPHRlY2hsaWZ5LXJlc3RyaWN0b3ItdHlwZS1zZWxlY3RvciBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlX2lkc1wiXG4gICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCI+PC90ZWNobGlmeS1yZXN0cmljdG9yLXR5cGUtc2VsZWN0b3I+XG4gICAgICA8dGVjaGxpZnktcmVzdHJpY3Rvci1sZXZlbC1zZWxlY3RvciBmb3JtQ29udHJvbE5hbWU9XCJsZXZlbF9pZHNcIlxuICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiPjwvdGVjaGxpZnktcmVzdHJpY3Rvci1sZXZlbC1zZWxlY3Rvcj5cbiAgICAgIDx0ZWNobGlmeS1yZXN0cmljdG9yLXN0YXR1cy1zZWxlY3RvciBmb3JtQ29udHJvbE5hbWU9XCJzdGF0dXNfaWRzXCJcbiAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj48L3RlY2hsaWZ5LXJlc3RyaWN0b3Itc3RhdHVzLXNlbGVjdG9yPlxuICAgIDwvZm9ybT5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cblxuPG1hdC1jYXJkIGNsYXNzPVwibXQtMiBwLTBcIj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgY2xhc3M9XCJ3LTEwMFwiIG1hdFNvcnQgKG1hdFNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgaW5maW5pdGVTY3JvbGwgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwiMlwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cIjUwXCJcbiAgICAgIFtpbmZpbml0ZVNjcm9sbENvbnRhaW5lcl09XCJzY3JvbGxDb250YWluZXJcIiBbZnJvbVJvb3RdPVwidHJ1ZVwiIChzY3JvbGxlZCk9XCJvblNjcm9sbCgpXCI+XG5cbiAgICAgIDwhLS0gTm8gQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJOb1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cImNyZWF0ZWRfYXRcIj4gIyA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBpbmRleDtcIj4ge3sgaSArIDEgfX0gPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFR5cGUgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJUeXBlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPVwidHlwZV9pZFwiPiBUeXBlIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+IHt7IGVsZW1lbnQ/LnR5cGU/LnRpdGxlIH19IDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBMZXZlbCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkxldmVsXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPVwibGV2ZWxfaWRcIj4gTGV2ZWwgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50Py5sZXZlbD8udGl0bGV9fSA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRW50aXR5IENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiRW50aXR5XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPVwicmVzdHJpY3RlZF9vYmplY3RfaWRcIj4gRW50aXR5IDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAge3sgZ2V0UmVzdHJpY3RhYmxlVHlwZVZhbHVlKGVsZW1lbnQpIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBEYXRhIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiRGF0YVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBEYXRhIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCIgKm5nSWY9XCJlbGVtZW50Py5kYXRhPy5pcF9yYW5nZVwiPlxuICAgICAgICAgICAgSVAgUmFuZ2U6IHt7IGVsZW1lbnQ/LmRhdGE/LmlwX3JhbmdlIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiICpuZ0lmPVwiZWxlbWVudD8uZGF0YT8uc3RhcnRfdGltZVwiPlxuICAgICAgICAgICAgU3RhcnQgdGltZToge3sgZWxlbWVudD8uZGF0YT8uc3RhcnRfdGltZSB8IGRhdGU6ICdzaG9ydCcgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCIgKm5nSWY9XCJlbGVtZW50Py5kYXRhPy5lbmRfdGltZVwiPlxuICAgICAgICAgICAgRW5kIHRpbWU6IHt7IGVsZW1lbnQ/LmRhdGE/LmVuZF90aW1lIHwgZGF0ZTogJ3Nob3J0JyB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFN0YXR1cyBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIlN0YXR1c1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cInN0YXR1c19pZFwiPiBTdGF0dXMgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3sgZWxlbWVudD8uc3RhdHVzPy50aXRsZSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBBY3Rpb25zIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiQWN0aW9uc1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBBY3Rpb25zIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbcm91dGVyTGlua109XCJbZWxlbWVudD8uaWQsICdlZGl0J11cIj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cbiAgICA8L3RhYmxlPlxuXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJpc1dvcmtpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cblxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPiJdfQ==
@@ -0,0 +1,42 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { RouterModule } from '@angular/router';
3
+ import { AuthenticationGuard } from '../core';
4
+ import { RestrictorsListPageComponent } from './restrictors-list-page/restrictors-list-page.component';
5
+ import { RestrictorsFormPageComponent } from './restrictors-form-page/restrictors-form-page.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/router";
8
+ const routes = [
9
+ {
10
+ path: '',
11
+ component: RestrictorsListPageComponent,
12
+ canLoad: [AuthenticationGuard]
13
+ },
14
+ {
15
+ path: 'create',
16
+ component: RestrictorsFormPageComponent,
17
+ canLoad: [AuthenticationGuard]
18
+ },
19
+ {
20
+ path: ':id/edit',
21
+ component: RestrictorsFormPageComponent,
22
+ canLoad: [AuthenticationGuard]
23
+ },
24
+ {
25
+ path: '**',
26
+ redirectTo: '',
27
+ pathMatch: 'full'
28
+ }
29
+ ];
30
+ export class RestrictorsRoutingModule {
31
+ }
32
+ RestrictorsRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
33
+ RestrictorsRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
34
+ RestrictorsRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsRoutingModule, decorators: [{
36
+ type: NgModule,
37
+ args: [{
38
+ imports: [RouterModule.forChild(routes)],
39
+ exports: [RouterModule]
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHJpY3RvcnMtcm91dGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3Jlc3RyaWN0b3JzL3Jlc3RyaWN0b3JzLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QyxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUNyRyxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQzs7O0FBRXJHLE1BQU0sTUFBTSxHQUFXO0lBQ3JCO1FBQ0UsSUFBSSxFQUFFLEVBQUU7UUFDUixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO0tBQy9CO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsUUFBUTtRQUNkLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7S0FDL0I7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7S0FDL0I7SUFDRDtRQUNFLElBQUksRUFBRSxJQUFJO1FBQ1YsVUFBVSxFQUFFLEVBQUU7UUFDZCxTQUFTLEVBQUUsTUFBTTtLQUNsQjtDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8sd0JBQXdCOztxSEFBeEIsd0JBQXdCO3NIQUF4Qix3QkFBd0Isd0NBRnpCLFlBQVk7c0hBRVgsd0JBQXdCLFlBSHpCLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQzdCLFlBQVk7MkZBRVgsd0JBQXdCO2tCQUpwQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25HdWFyZCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHtSZXN0cmljdG9yc0xpc3RQYWdlQ29tcG9uZW50fSBmcm9tICcuL3Jlc3RyaWN0b3JzLWxpc3QtcGFnZS9yZXN0cmljdG9ycy1saXN0LXBhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7UmVzdHJpY3RvcnNGb3JtUGFnZUNvbXBvbmVudH0gZnJvbSAnLi9yZXN0cmljdG9ycy1mb3JtLXBhZ2UvcmVzdHJpY3RvcnMtZm9ybS1wYWdlLmNvbXBvbmVudCc7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY29tcG9uZW50OiBSZXN0cmljdG9yc0xpc3RQYWdlQ29tcG9uZW50LFxuICAgIGNhbkxvYWQ6IFtBdXRoZW50aWNhdGlvbkd1YXJkXVxuICB9LFxuICB7XG4gICAgcGF0aDogJ2NyZWF0ZScsXG4gICAgY29tcG9uZW50OiBSZXN0cmljdG9yc0Zvcm1QYWdlQ29tcG9uZW50LFxuICAgIGNhbkxvYWQ6IFtBdXRoZW50aWNhdGlvbkd1YXJkXVxuICB9LFxuICB7XG4gICAgcGF0aDogJzppZC9lZGl0JyxcbiAgICBjb21wb25lbnQ6IFJlc3RyaWN0b3JzRm9ybVBhZ2VDb21wb25lbnQsXG4gICAgY2FuTG9hZDogW0F1dGhlbnRpY2F0aW9uR3VhcmRdXG4gIH0sXG4gIHtcbiAgICBwYXRoOiAnKionLFxuICAgIHJlZGlyZWN0VG86ICcnLFxuICAgIHBhdGhNYXRjaDogJ2Z1bGwnXG4gIH1cbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXG4gIGV4cG9ydHM6IFtSb3V0ZXJNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFJlc3RyaWN0b3JzUm91dGluZ01vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,99 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { RestrictorsRoutingModule } from './restrictors-routing.module';
4
+ import { RestrictorsListPageComponent } from './restrictors-list-page/restrictors-list-page.component';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import { RestrictorsFormPageComponent } from './restrictors-form-page/restrictors-form-page.component';
7
+ import { RestrictorsFormComponent } from './restrictors-form/restrictors-form.component';
8
+ import { FlexModule } from '@angular/flex-layout';
9
+ import { MatCardModule } from '@angular/material/card';
10
+ import { RestrictorTypeSelectorModule } from './restrictor-type-selector/restrictor-type-selector.module';
11
+ import { MatInputModule } from '@angular/material/input';
12
+ import { MatDatepickerModule } from '@angular/material/datepicker';
13
+ import { ReactiveFormsModule } from '@angular/forms';
14
+ import { MatSelectModule } from '@angular/material/select';
15
+ import { IpAddressSelectorModule } from '../ip-address-selector/ip-address-selector.module';
16
+ import { RestrictorLevelSelectorModule } from './restrictor-level-selector/restrictor-level-selector.module';
17
+ import { SearchableSelectorModule } from '../searchable-selector/searchable-selector.module';
18
+ import { MatIconModule } from '@angular/material/icon';
19
+ import { RestrictorStatusSelectorModule } from './restrictor-status-selector/restrictor-status-selector.module';
20
+ import { MatTableModule } from '@angular/material/table';
21
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
22
+ import { MatSortModule } from '@angular/material/sort';
23
+ import { InfiniteScrollModule } from 'ngx-infinite-scroll';
24
+ import * as i0 from "@angular/core";
25
+ export class RestrictorsModule {
26
+ }
27
+ RestrictorsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
28
+ RestrictorsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsModule, declarations: [RestrictorsListPageComponent,
29
+ RestrictorsFormPageComponent,
30
+ RestrictorsFormComponent], imports: [CommonModule,
31
+ RestrictorsRoutingModule,
32
+ MatButtonModule,
33
+ FlexModule,
34
+ MatCardModule,
35
+ RestrictorTypeSelectorModule,
36
+ MatInputModule,
37
+ MatDatepickerModule,
38
+ ReactiveFormsModule,
39
+ MatSelectModule,
40
+ IpAddressSelectorModule,
41
+ RestrictorLevelSelectorModule,
42
+ SearchableSelectorModule,
43
+ MatIconModule,
44
+ RestrictorStatusSelectorModule,
45
+ MatTableModule,
46
+ MatProgressBarModule,
47
+ MatSortModule,
48
+ InfiniteScrollModule] });
49
+ RestrictorsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsModule, imports: [CommonModule,
50
+ RestrictorsRoutingModule,
51
+ MatButtonModule,
52
+ FlexModule,
53
+ MatCardModule,
54
+ RestrictorTypeSelectorModule,
55
+ MatInputModule,
56
+ MatDatepickerModule,
57
+ ReactiveFormsModule,
58
+ MatSelectModule,
59
+ IpAddressSelectorModule,
60
+ RestrictorLevelSelectorModule,
61
+ SearchableSelectorModule,
62
+ MatIconModule,
63
+ RestrictorStatusSelectorModule,
64
+ MatTableModule,
65
+ MatProgressBarModule,
66
+ MatSortModule,
67
+ InfiniteScrollModule] });
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RestrictorsModule, decorators: [{
69
+ type: NgModule,
70
+ args: [{
71
+ declarations: [
72
+ RestrictorsListPageComponent,
73
+ RestrictorsFormPageComponent,
74
+ RestrictorsFormComponent
75
+ ],
76
+ imports: [
77
+ CommonModule,
78
+ RestrictorsRoutingModule,
79
+ MatButtonModule,
80
+ FlexModule,
81
+ MatCardModule,
82
+ RestrictorTypeSelectorModule,
83
+ MatInputModule,
84
+ MatDatepickerModule,
85
+ ReactiveFormsModule,
86
+ MatSelectModule,
87
+ IpAddressSelectorModule,
88
+ RestrictorLevelSelectorModule,
89
+ SearchableSelectorModule,
90
+ MatIconModule,
91
+ RestrictorStatusSelectorModule,
92
+ MatTableModule,
93
+ MatProgressBarModule,
94
+ MatSortModule,
95
+ InfiniteScrollModule
96
+ ]
97
+ }]
98
+ }] });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHJpY3RvcnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9yZXN0cmljdG9ycy9yZXN0cmljdG9ycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDeEcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUMxRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQztBQUMzRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM3RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFDOUcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7QUErQnpELE1BQU0sT0FBTyxpQkFBaUI7OzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixpQkExQjFCLDRCQUE0QjtRQUM1Qiw0QkFBNEI7UUFDNUIsd0JBQXdCLGFBR3hCLFlBQVk7UUFDWix3QkFBd0I7UUFDeEIsZUFBZTtRQUNmLFVBQVU7UUFDVixhQUFhO1FBQ2IsNEJBQTRCO1FBQzVCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZix1QkFBdUI7UUFDdkIsNkJBQTZCO1FBQzdCLHdCQUF3QjtRQUN4QixhQUFhO1FBQ2IsOEJBQThCO1FBQzlCLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsYUFBYTtRQUNiLG9CQUFvQjsrR0FHWCxpQkFBaUIsWUFyQjFCLFlBQVk7UUFDWix3QkFBd0I7UUFDeEIsZUFBZTtRQUNmLFVBQVU7UUFDVixhQUFhO1FBQ2IsNEJBQTRCO1FBQzVCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZix1QkFBdUI7UUFDdkIsNkJBQTZCO1FBQzdCLHdCQUF3QjtRQUN4QixhQUFhO1FBQ2IsOEJBQThCO1FBQzlCLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsYUFBYTtRQUNiLG9CQUFvQjsyRkFHWCxpQkFBaUI7a0JBNUI3QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWiw0QkFBNEI7d0JBQzVCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLGVBQWU7d0JBQ2YsVUFBVTt3QkFDVixhQUFhO3dCQUNiLDRCQUE0Qjt3QkFDNUIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLDZCQUE2Qjt3QkFDN0Isd0JBQXdCO3dCQUN4QixhQUFhO3dCQUNiLDhCQUE4Qjt3QkFDOUIsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2Isb0JBQW9CO3FCQUNyQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBSZXN0cmljdG9yc1JvdXRpbmdNb2R1bGUgfSBmcm9tICcuL3Jlc3RyaWN0b3JzLXJvdXRpbmcubW9kdWxlJztcbmltcG9ydCB7IFJlc3RyaWN0b3JzTGlzdFBhZ2VDb21wb25lbnQgfSBmcm9tICcuL3Jlc3RyaWN0b3JzLWxpc3QtcGFnZS9yZXN0cmljdG9ycy1saXN0LXBhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgUmVzdHJpY3RvcnNGb3JtUGFnZUNvbXBvbmVudCB9IGZyb20gJy4vcmVzdHJpY3RvcnMtZm9ybS1wYWdlL3Jlc3RyaWN0b3JzLWZvcm0tcGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzdHJpY3RvcnNGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9yZXN0cmljdG9ycy1mb3JtL3Jlc3RyaWN0b3JzLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7RmxleE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHtNYXRDYXJkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7UmVzdHJpY3RvclR5cGVTZWxlY3Rvck1vZHVsZX0gZnJvbSAnLi9yZXN0cmljdG9yLXR5cGUtc2VsZWN0b3IvcmVzdHJpY3Rvci10eXBlLXNlbGVjdG9yLm1vZHVsZSc7XG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge01hdERhdGVwaWNrZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01hdFNlbGVjdE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7SXBBZGRyZXNzU2VsZWN0b3JNb2R1bGV9IGZyb20gJy4uL2lwLWFkZHJlc3Mtc2VsZWN0b3IvaXAtYWRkcmVzcy1zZWxlY3Rvci5tb2R1bGUnO1xuaW1wb3J0IHtSZXN0cmljdG9yTGV2ZWxTZWxlY3Rvck1vZHVsZX0gZnJvbSAnLi9yZXN0cmljdG9yLWxldmVsLXNlbGVjdG9yL3Jlc3RyaWN0b3ItbGV2ZWwtc2VsZWN0b3IubW9kdWxlJztcbmltcG9ydCB7IFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSB9IGZyb20gJy4uL3NlYXJjaGFibGUtc2VsZWN0b3Ivc2VhcmNoYWJsZS1zZWxlY3Rvci5tb2R1bGUnO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7UmVzdHJpY3RvclN0YXR1c1NlbGVjdG9yTW9kdWxlfSBmcm9tICcuL3Jlc3RyaWN0b3Itc3RhdHVzLXNlbGVjdG9yL3Jlc3RyaWN0b3Itc3RhdHVzLXNlbGVjdG9yLm1vZHVsZSc7XG5pbXBvcnQge01hdFRhYmxlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQge01hdFByb2dyZXNzQmFyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHtNYXRTb3J0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7SW5maW5pdGVTY3JvbGxNb2R1bGV9IGZyb20gJ25neC1pbmZpbml0ZS1zY3JvbGwnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFJlc3RyaWN0b3JzTGlzdFBhZ2VDb21wb25lbnQsXG4gICAgUmVzdHJpY3RvcnNGb3JtUGFnZUNvbXBvbmVudCxcbiAgICBSZXN0cmljdG9yc0Zvcm1Db21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZXN0cmljdG9yc1JvdXRpbmdNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIEZsZXhNb2R1bGUsXG4gICAgTWF0Q2FyZE1vZHVsZSxcbiAgICBSZXN0cmljdG9yVHlwZVNlbGVjdG9yTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgSXBBZGRyZXNzU2VsZWN0b3JNb2R1bGUsXG4gICAgUmVzdHJpY3RvckxldmVsU2VsZWN0b3JNb2R1bGUsXG4gICAgU2VhcmNoYWJsZVNlbGVjdG9yTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgUmVzdHJpY3RvclN0YXR1c1NlbGVjdG9yTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgIE1hdFNvcnRNb2R1bGUsXG4gICAgSW5maW5pdGVTY3JvbGxNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSZXN0cmljdG9yc01vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export * from './role-form.component';
2
+ export * from './role.model';
3
+ export * from './role.service';
4
+ export * from './roles-view-all.component';
5
+ export * from './permission/permissions-management.component';
6
+ export * from './permission/permission.model';
7
+ export * from './role.routes';
8
+ export * from './permission/permission.routes';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3JvbGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JvbGUtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yb2xlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vcm9sZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcm9sZXMtdmlldy1hbGwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcGVybWlzc2lvbi9wZXJtaXNzaW9ucy1tYW5hZ2VtZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb24vcGVybWlzc2lvbi5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3JvbGUucm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vcGVybWlzc2lvbi9wZXJtaXNzaW9uLnJvdXRlcyc7XG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Class representation of a permission
3
+ *
4
+ * @author Joshua Kissoon
5
+ * @since 20161013
6
+ */
7
+ export class Permission {
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvcm9sZS9wZXJtaXNzaW9uL3Blcm1pc3Npb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtDQUl0QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3MgcmVwcmVzZW50YXRpb24gb2YgYSBwZXJtaXNzaW9uXG4gKlxuICogQGF1dGhvciBKb3NodWEgS2lzc29vblxuICogQHNpbmNlIDIwMTYxMDEzXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,45 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ /* Components */
4
+ import { PermissionsManagementComponent } from './permissions-management.component';
5
+ /* Routing Provider */
6
+ import { PermissionRoutingProvider } from './permission.routes';
7
+ import { MaterialModule } from '../../material.module';
8
+ import { FlexLayoutModule } from '@angular/flex-layout';
9
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
10
+ import * as i0 from "@angular/core";
11
+ export class PermissionModule {
12
+ }
13
+ PermissionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ PermissionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: PermissionModule, declarations: [PermissionsManagementComponent], imports: [CommonModule,
15
+ PermissionRoutingProvider,
16
+ FlexLayoutModule,
17
+ MaterialModule,
18
+ FormsModule,
19
+ ReactiveFormsModule], exports: [PermissionsManagementComponent] });
20
+ PermissionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionModule, imports: [CommonModule,
21
+ PermissionRoutingProvider,
22
+ FlexLayoutModule,
23
+ MaterialModule,
24
+ FormsModule,
25
+ ReactiveFormsModule] });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionModule, decorators: [{
27
+ type: NgModule,
28
+ args: [{
29
+ imports: [
30
+ CommonModule,
31
+ PermissionRoutingProvider,
32
+ FlexLayoutModule,
33
+ MaterialModule,
34
+ FormsModule,
35
+ ReactiveFormsModule,
36
+ ],
37
+ declarations: [
38
+ PermissionsManagementComponent
39
+ ],
40
+ exports: [
41
+ PermissionsManagementComponent
42
+ ]
43
+ }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3JvbGUvcGVybWlzc2lvbi9wZXJtaXNzaW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxnQkFBZ0I7QUFDaEIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFcEYsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBa0JsRSxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBTnJCLDhCQUE4QixhQVI5QixZQUFZO1FBQ1oseUJBQXlCO1FBQ3pCLGdCQUFnQjtRQUNoQixjQUFjO1FBQ2QsV0FBVztRQUNYLG1CQUFtQixhQU1uQiw4QkFBOEI7OEdBR3pCLGdCQUFnQixZQWRyQixZQUFZO1FBQ1oseUJBQXlCO1FBQ3pCLGdCQUFnQjtRQUNoQixjQUFjO1FBQ2QsV0FBVztRQUNYLG1CQUFtQjsyRkFTZCxnQkFBZ0I7a0JBaEI1QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLHlCQUF5Qjt3QkFDekIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsbUJBQW1CO3FCQUN0QjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1YsOEJBQThCO3FCQUNqQztvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsOEJBQThCO3FCQUNqQztpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qIENvbXBvbmVudHMgKi9cbmltcG9ydCB7IFBlcm1pc3Npb25zTWFuYWdlbWVudENvbXBvbmVudCB9IGZyb20gJy4vcGVybWlzc2lvbnMtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuXG4vKiBSb3V0aW5nIFByb3ZpZGVyICovXG5pbXBvcnQgeyBQZXJtaXNzaW9uUm91dGluZ1Byb3ZpZGVyIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnJvdXRlcyc7XG5pbXBvcnQgeyBNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uLy4uL21hdGVyaWFsLm1vZHVsZSc7XG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFBlcm1pc3Npb25Sb3V0aW5nUHJvdmlkZXIsXG4gICAgICAgIEZsZXhMYXlvdXRNb2R1bGUsXG4gICAgICAgIE1hdGVyaWFsTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBQZXJtaXNzaW9uc01hbmFnZW1lbnRDb21wb25lbnRcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgUGVybWlzc2lvbnNNYW5hZ2VtZW50Q29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uTW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,26 @@
1
+ import { RouterModule } from '@angular/router';
2
+ import { NgModule } from '@angular/core';
3
+ /* Auth Guard */
4
+ import { AuthenticationGuard } from '../../core';
5
+ /* Component */
6
+ import { PermissionsManagementComponent } from './permissions-management.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/router";
9
+ const routes = [
10
+ { path: '', component: PermissionsManagementComponent, canActivate: [AuthenticationGuard] },
11
+ // fallback when no prior route found
12
+ { path: '**', redirectTo: '', pathMatch: 'full' },
13
+ ];
14
+ export class PermissionRoutingProvider {
15
+ }
16
+ PermissionRoutingProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionRoutingProvider, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17
+ PermissionRoutingProvider.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: PermissionRoutingProvider, imports: [i1.RouterModule], exports: [RouterModule] });
18
+ PermissionRoutingProvider.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionRoutingProvider, imports: [RouterModule.forChild(routes), RouterModule] });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionRoutingProvider, decorators: [{
20
+ type: NgModule,
21
+ args: [{
22
+ imports: [RouterModule.forChild(routes)],
23
+ exports: [RouterModule]
24
+ }]
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3JvbGUvcGVybWlzc2lvbi9wZXJtaXNzaW9uLnJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxnQkFBZ0I7QUFDaEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELGVBQWU7QUFDZixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBRXBGLE1BQU0sTUFBTSxHQUFXO0lBQ25CLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsOEJBQThCLEVBQUUsV0FBVyxFQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRTtJQUUzRixxQ0FBcUM7SUFDckMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtDQUNwRCxDQUFDO0FBTUYsTUFBTSxPQUFPLHlCQUF5Qjs7c0hBQXpCLHlCQUF5Qjt1SEFBekIseUJBQXlCLHdDQUZ4QixZQUFZO3VIQUViLHlCQUF5QixZQUh4QixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUM3QixZQUFZOzJGQUViLHlCQUF5QjtrQkFKckMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyogQXV0aCBHdWFyZCAqL1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25HdWFyZCB9IGZyb20gJy4uLy4uL2NvcmUnO1xuXG4vKiBDb21wb25lbnQgKi9cbmltcG9ydCB7IFBlcm1pc3Npb25zTWFuYWdlbWVudENvbXBvbmVudCB9IGZyb20gJy4vcGVybWlzc2lvbnMtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuXG5jb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAgICB7IHBhdGg6ICcnLCBjb21wb25lbnQ6IFBlcm1pc3Npb25zTWFuYWdlbWVudENvbXBvbmVudCwgY2FuQWN0aXZhdGU6IFtBdXRoZW50aWNhdGlvbkd1YXJkXSB9LFxuXG4gICAgLy8gZmFsbGJhY2sgd2hlbiBubyBwcmlvciByb3V0ZSBmb3VuZFxuICAgIHsgcGF0aDogJyoqJywgcmVkaXJlY3RUbzogJycsIHBhdGhNYXRjaDogJ2Z1bGwnIH0sXG5dO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXG4gICAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblJvdXRpbmdQcm92aWRlciB7IH1cbiJdfQ==
@@ -0,0 +1,105 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { Role } from '../role.model';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../core";
5
+ import * as i2 from "@angular/router";
6
+ import * as i3 from "../../user-config";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "@angular/forms";
9
+ /**
10
+ * Role Permissions management controller
11
+ *
12
+ * @author Joshua Kissoon
13
+ * @since 20161013
14
+ */
15
+ export class PermissionsManagementComponent {
16
+ constructor(http, alertService, route, credentialsService, errorHandler, userConfigService) {
17
+ this.http = http;
18
+ this.alertService = alertService;
19
+ this.route = route;
20
+ this.credentialsService = credentialsService;
21
+ this.errorHandler = errorHandler;
22
+ this.userConfigService = userConfigService;
23
+ this.moduleCode = null;
24
+ this.config = this.userConfigService.getConfig();
25
+ }
26
+ ngOnInit() {
27
+ this.route.params.subscribe(params => {
28
+ if (params.module_code !== undefined) {
29
+ this.moduleCode = params.module_code;
30
+ }
31
+ this.loadRoles();
32
+ this.loadPermissions();
33
+ });
34
+ }
35
+ isDisabled(isGlobal, isEditable) {
36
+ if (isGlobal && this.credentialsService.credentials?.user?.user_type_id !== 1) {
37
+ return !isEditable;
38
+ }
39
+ return false;
40
+ }
41
+ loadPermissions() {
42
+ const filters = {};
43
+ if (this.moduleCode) {
44
+ filters.module_code = this.moduleCode;
45
+ }
46
+ if (this.clientId) {
47
+ filters.client_id = this.clientId;
48
+ }
49
+ this.http.get('api/permissions', { params: filters }).toPromise().then((res) => {
50
+ this.permissions = res.data;
51
+ });
52
+ }
53
+ /**
54
+ * Load the Roles from the DB
55
+ */
56
+ loadRoles() {
57
+ const filters = {
58
+ loadPermissions: true,
59
+ };
60
+ if (this.clientId) {
61
+ filters.client_id = this.clientId;
62
+ }
63
+ this.http.get('api/roles', { params: filters }).toPromise().then((res) => {
64
+ this.roles = new Array();
65
+ for (let row of res.data) {
66
+ let role = new Role();
67
+ role.loadFromJson(row);
68
+ role.selected = true;
69
+ this.roles.push(role);
70
+ role.setupBlankPermissionsForNgModel();
71
+ }
72
+ }, error => {
73
+ this.errorHandler.handleError(error);
74
+ });
75
+ }
76
+ updateRolePermission(role, permission) {
77
+ let data = {
78
+ rid: role.id,
79
+ permission: permission.slug
80
+ };
81
+ if (role.hasPermission(permission.slug)) {
82
+ /* Remove the permission */
83
+ this.http.patch('api/roles/' + role.id + '/permissions/' + permission.id + '/remove', data).toPromise().then(res => {
84
+ role.removePermission(permission);
85
+ this.alertService.addAlert(permission.label + ' removed', 'warning');
86
+ });
87
+ }
88
+ else {
89
+ /* Add the permission */
90
+ this.http.patch('api/roles/' + role.id + '/permissions/' + permission.id + '/add', data).toPromise().then(res => {
91
+ role.addPermission(permission);
92
+ this.alertService.addAlert(permission.label + ' added', 'success');
93
+ });
94
+ }
95
+ }
96
+ }
97
+ PermissionsManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionsManagementComponent, deps: [{ token: i1.HttpService }, { token: i1.AlertService }, { token: i2.ActivatedRoute }, { token: i1.CredentialsService }, { token: i1.ErrorHandlerService }, { token: i3.UserConfigService }], target: i0.ɵɵFactoryTarget.Component });
98
+ PermissionsManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: PermissionsManagementComponent, selector: "role-permissions-management", inputs: { clientId: "clientId" }, ngImport: i0, template: "<section class=\"col-sm-12 my-4\">\n <h1 class=\"page-title text-center\">\n Manage Role Permissions\n <a class=\"btn btn-sm btn-outline-dark mr-2\" [routerLink]=\"['../users']\"\n *ngIf=\"!config.permissionConfig.disableUsers\">\n <i class=\"icon fas fa-users\"></i> Users\n </a>\n <a class=\"btn btn-sm btn-outline-dark\" [routerLink]=\"['../roles']\"\n *ngIf=\"!config.permissionConfig.disableRoles\">\n <i class=\"fas fa-user-md\"></i> Manage Roles\n </a>\n\n </h1>\n <section class=\"filters-wrapper hidden-print\">\n <div class=\"pull-right mt-2\">\n <form class=\"form-inline\">\n <label>Show Roles: </label>&nbsp;\n <div class=\"form-group\" *ngFor=\"let role of roles\">\n <label class=\"checkbox-inline\">\n <input type=\"checkbox\" [(ngModel)]=\"role.selected\" name=\"description_col[{{role.id}}]\"\n id=\"description_col[{{role.id}}]\">&nbsp;{{role.label}}&nbsp;&nbsp;\n </label>\n </div>\n </form>\n </div>\n </section>\n <form>\n <table class=\"table table-sm table-bordered table-condensed table-striped\"\n aria-describedby=\"Role Permissions\">\n <thead>\n <tr>\n <th>Permissions</th>\n <ng-container *ngFor=\"let role of roles\">\n <th class=\"text-center\" *ngIf=\"role.selected\">{{role.label}}</th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let permission of permissions\">\n <td>{{permission.label}}</td>\n <ng-container *ngFor=\"let role of roles\">\n <td class=\"text-center\" *ngIf=\"role.selected\">\n <input [disabled]=\"isDisabled(role.is_global, role.is_editable)\" type=\"checkbox\"\n name=\"{{role.id}}[{{permission?.label}}]\"\n [checked]=\"role.hasPermission(permission.slug)\"\n (change)=\"updateRolePermission(role, permission)\" />\n </td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </form>\n</section>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PermissionsManagementComponent, decorators: [{
100
+ type: Component,
101
+ args: [{ selector: 'role-permissions-management', template: "<section class=\"col-sm-12 my-4\">\n <h1 class=\"page-title text-center\">\n Manage Role Permissions\n <a class=\"btn btn-sm btn-outline-dark mr-2\" [routerLink]=\"['../users']\"\n *ngIf=\"!config.permissionConfig.disableUsers\">\n <i class=\"icon fas fa-users\"></i> Users\n </a>\n <a class=\"btn btn-sm btn-outline-dark\" [routerLink]=\"['../roles']\"\n *ngIf=\"!config.permissionConfig.disableRoles\">\n <i class=\"fas fa-user-md\"></i> Manage Roles\n </a>\n\n </h1>\n <section class=\"filters-wrapper hidden-print\">\n <div class=\"pull-right mt-2\">\n <form class=\"form-inline\">\n <label>Show Roles: </label>&nbsp;\n <div class=\"form-group\" *ngFor=\"let role of roles\">\n <label class=\"checkbox-inline\">\n <input type=\"checkbox\" [(ngModel)]=\"role.selected\" name=\"description_col[{{role.id}}]\"\n id=\"description_col[{{role.id}}]\">&nbsp;{{role.label}}&nbsp;&nbsp;\n </label>\n </div>\n </form>\n </div>\n </section>\n <form>\n <table class=\"table table-sm table-bordered table-condensed table-striped\"\n aria-describedby=\"Role Permissions\">\n <thead>\n <tr>\n <th>Permissions</th>\n <ng-container *ngFor=\"let role of roles\">\n <th class=\"text-center\" *ngIf=\"role.selected\">{{role.label}}</th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let permission of permissions\">\n <td>{{permission.label}}</td>\n <ng-container *ngFor=\"let role of roles\">\n <td class=\"text-center\" *ngIf=\"role.selected\">\n <input [disabled]=\"isDisabled(role.is_global, role.is_editable)\" type=\"checkbox\"\n name=\"{{role.id}}[{{permission?.label}}]\"\n [checked]=\"role.hasPermission(permission.slug)\"\n (change)=\"updateRolePermission(role, permission)\" />\n </td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </form>\n</section>\n" }]
102
+ }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i1.AlertService }, { type: i2.ActivatedRoute }, { type: i1.CredentialsService }, { type: i1.ErrorHandlerService }, { type: i3.UserConfigService }]; }, propDecorators: { clientId: [{
103
+ type: Input
104
+ }] } });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtbWFuYWdlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3JvbGUvcGVybWlzc2lvbi9wZXJtaXNzaW9ucy1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvcm9sZS9wZXJtaXNzaW9uL3Blcm1pc3Npb25zLW1hbmFnZW1lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBS3JDOzs7OztHQUtHO0FBS0gsTUFBTSxPQUFPLDhCQUE4QjtJQU92QyxZQUFvQixJQUFpQixFQUNqQixZQUEwQixFQUMxQixLQUFxQixFQUNyQixrQkFBc0MsRUFDdEMsWUFBaUMsRUFDbEMsaUJBQW9DO1FBTG5DLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUVuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQyxJQUFJLE1BQU0sQ0FB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QUU7Z0JBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN6RSxDQUFDLENBQ0osQ0FBQztTQUNMO2FBQ0k7WUFDRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsZUFBZSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDckcsR0FBRyxDQUFDLEVBQUU7Z0JBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkUsQ0FBQyxDQUNKLENBQUM7U0FDTDtJQUNMLENBQUM7OzJIQXhHUSw4QkFBOEI7K0dBQTlCLDhCQUE4QixxR0NwQjNDLHU2RUFxREE7MkZEakNhLDhCQUE4QjtrQkFKMUMsU0FBUzsrQkFDSSw2QkFBNkI7NlBBTzlCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBDcmVkZW50aWFsc1NlcnZpY2UsIEVycm9ySGFuZGxlclNlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbmltcG9ydCB7IFJvbGUgfSBmcm9tICcuLi9yb2xlLm1vZGVsJztcbmltcG9ydCB7IFBlcm1pc3Npb24gfSBmcm9tICcuL3Blcm1pc3Npb24ubW9kZWwnO1xuaW1wb3J0IHsgTXVsdGlVc2VyQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXNlci1jb25maWcnO1xuaW1wb3J0IHsgVXNlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLWNvbmZpZyc7XG5cbi8qKlxuICogUm9sZSBQZXJtaXNzaW9ucyBtYW5hZ2VtZW50IGNvbnRyb2xsZXJcbiAqXG4gKiBAYXV0aG9yIEpvc2h1YSBLaXNzb29uXG4gKiBAc2luY2UgMjAxNjEwMTNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyb2xlLXBlcm1pc3Npb25zLW1hbmFnZW1lbnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9ucy1tYW5hZ2VtZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zTWFuYWdlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcm9sZXM6IFJvbGVbXTtcbiAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdO1xuICAgIG1vZHVsZUNvZGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBjbGllbnRJZDogbnVtYmVyO1xuICAgIGNvbmZpZzogTXVsdGlVc2VyQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgY3JlZGVudGlhbHNTZXJ2aWNlOiBDcmVkZW50aWFsc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHVibGljIHVzZXJDb25maWdTZXJ2aWNlOiBVc2VyQ29uZmlnU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5tb2R1bGVDb2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnVzZXJDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubW9kdWxlX2NvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlQ29kZSA9IHBhcmFtcy5tb2R1bGVfY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZFJvbGVzKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Rpc2FibGVkKGlzR2xvYmFsOiBib29sZWFuLCBpc0VkaXRhYmxlOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0dsb2JhbCAmJiB0aGlzLmNyZWRlbnRpYWxzU2VydmljZS5jcmVkZW50aWFscz8udXNlcj8udXNlcl90eXBlX2lkICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gIWlzRWRpdGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxvYWRQZXJtaXNzaW9ucygpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyczogYW55ID0ge307XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZUNvZGUpIHtcbiAgICAgICAgICAgIGZpbHRlcnMubW9kdWxlX2NvZGUgPSB0aGlzLm1vZHVsZUNvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2xpZW50SWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMuY2xpZW50X2lkID0gdGhpcy5jbGllbnRJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmh0dHAuZ2V0KCdhcGkvcGVybWlzc2lvbnMnLCB7IHBhcmFtczogZmlsdGVycyB9KS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcmVzLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB0aGUgUm9sZXMgZnJvbSB0aGUgREJcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRSb2xlcygpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyczogYW55ID0ge1xuICAgICAgICAgICAgbG9hZFBlcm1pc3Npb25zOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5jbGllbnRJZCkge1xuICAgICAgICAgICAgZmlsdGVycy5jbGllbnRfaWQgPSB0aGlzLmNsaWVudElkO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5odHRwLmdldCgnYXBpL3JvbGVzJywgeyBwYXJhbXM6IGZpbHRlcnMgfSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm9sZXMgPSBuZXcgQXJyYXk8Um9sZT4oKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiByZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcm9sZSA9IG5ldyBSb2xlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJvbGUubG9hZEZyb21Kc29uKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHJvbGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvbGVzLnB1c2gocm9sZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcm9sZS5zZXR1cEJsYW5rUGVybWlzc2lvbnNGb3JOZ01vZGVsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVSb2xlUGVybWlzc2lvbihyb2xlOiBSb2xlLCBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uKSB7XG4gICAgICAgIGxldCBkYXRhID0ge1xuICAgICAgICAgICAgcmlkOiByb2xlLmlkLFxuICAgICAgICAgICAgcGVybWlzc2lvbjogcGVybWlzc2lvbi5zbHVnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJvbGUuaGFzUGVybWlzc2lvbihwZXJtaXNzaW9uLnNsdWcpKSB7XG4gICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHBlcm1pc3Npb24gICovXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2goJ2FwaS9yb2xlcy8nICsgcm9sZS5pZCArICcvcGVybWlzc2lvbnMvJyArIHBlcm1pc3Npb24uaWQgKyAnL3JlbW92ZScsIGRhdGEpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm9sZS5yZW1vdmVQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChwZXJtaXNzaW9uLmxhYmVsICsgJyByZW1vdmVkJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogQWRkIHRoZSBwZXJtaXNzaW9uICovXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2goJ2FwaS9yb2xlcy8nICsgcm9sZS5pZCArICcvcGVybWlzc2lvbnMvJyArIHBlcm1pc3Npb24uaWQgKyAnL2FkZCcsIGRhdGEpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm9sZS5hZGRQZXJtaXNzaW9uKHBlcm1pc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChwZXJtaXNzaW9uLmxhYmVsICsgJyBhZGRlZCcsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjb2wtc20tMTIgbXktNFwiPlxuICAgIDxoMSBjbGFzcz1cInBhZ2UtdGl0bGUgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgTWFuYWdlIFJvbGUgUGVybWlzc2lvbnNcbiAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhcmsgbXItMlwiIFtyb3V0ZXJMaW5rXT1cIlsnLi4vdXNlcnMnXVwiXG4gICAgICAgICAgICAqbmdJZj1cIiFjb25maWcucGVybWlzc2lvbkNvbmZpZy5kaXNhYmxlVXNlcnNcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBmYXMgZmEtdXNlcnNcIj48L2k+IFVzZXJzXG4gICAgICAgIDwvYT5cbiAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhcmtcIiBbcm91dGVyTGlua109XCJbJy4uL3JvbGVzJ11cIlxuICAgICAgICAgICAgKm5nSWY9XCIhY29uZmlnLnBlcm1pc3Npb25Db25maWcuZGlzYWJsZVJvbGVzXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS11c2VyLW1kXCI+PC9pPiBNYW5hZ2UgUm9sZXNcbiAgICAgICAgPC9hPlxuXG4gICAgPC9oMT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImZpbHRlcnMtd3JhcHBlciBoaWRkZW4tcHJpbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHQgbXQtMlwiPlxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5TaG93IFJvbGVzOiA8L2xhYmVsPiZuYnNwO1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHJvbGUgb2Ygcm9sZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3gtaW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJyb2xlLnNlbGVjdGVkXCIgbmFtZT1cImRlc2NyaXB0aW9uX2NvbFt7e3JvbGUuaWR9fV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZGVzY3JpcHRpb25fY29sW3t7cm9sZS5pZH19XVwiPiZuYnNwO3t7cm9sZS5sYWJlbH19Jm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgICA8Zm9ybT5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc20gdGFibGUtYm9yZGVyZWQgdGFibGUtY29uZGVuc2VkIHRhYmxlLXN0cmlwZWRcIlxuICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cIlJvbGUgUGVybWlzc2lvbnNcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5QZXJtaXNzaW9uczwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvbGUgb2Ygcm9sZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJyb2xlLnNlbGVjdGVkXCI+e3tyb2xlLmxhYmVsfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHBlcm1pc3Npb24gb2YgcGVybWlzc2lvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7cGVybWlzc2lvbi5sYWJlbH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm9sZSBvZiByb2xlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cInJvbGUuc2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQocm9sZS5pc19nbG9iYWwsIHJvbGUuaXNfZWRpdGFibGUpXCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7cm9sZS5pZH19W3t7cGVybWlzc2lvbj8ubGFiZWx9fV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb2xlLmhhc1Blcm1pc3Npb24ocGVybWlzc2lvbi5zbHVnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUm9sZVBlcm1pc3Npb24ocm9sZSwgcGVybWlzc2lvbilcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgPC9mb3JtPlxuPC9zZWN0aW9uPlxuIl19