ng-kinintel 0.0.397 → 20.0.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.
- package/fesm2022/ng-kinintel.mjs +11874 -0
- package/fesm2022/ng-kinintel.mjs.map +1 -0
- package/index.d.ts +2818 -5
- package/package.json +6 -14
- package/esm2020/lib/components/alert-groups/alert-groups.component.mjs +0 -76
- package/esm2020/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.mjs +0 -83
- package/esm2020/lib/components/dashboard-editor/configure-item/configure-item.component.mjs +0 -853
- package/esm2020/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.mjs +0 -56
- package/esm2020/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.mjs +0 -114
- package/esm2020/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.mjs +0 -163
- package/esm2020/lib/components/dashboard-editor/configure-item/vis-network-options.json +0 -135
- package/esm2020/lib/components/dashboard-editor/dashboard-editor.component.mjs +0 -580
- package/esm2020/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.mjs +0 -15
- package/esm2020/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.mjs +0 -50
- package/esm2020/lib/components/dashboard-editor/item-component/item-component.component.mjs +0 -1226
- package/esm2020/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.mjs +0 -111
- package/esm2020/lib/components/dashboards/dashboards.component.mjs +0 -163
- package/esm2020/lib/components/dashboards/view-dashboard/view-dashboard.component.mjs +0 -429
- package/esm2020/lib/components/data-explorer/change-source-warning/change-source-warning.component.mjs +0 -20
- package/esm2020/lib/components/data-explorer/data-explorer.component.mjs +0 -243
- package/esm2020/lib/components/data-explorer/export-data/export-data.component.mjs +0 -62
- package/esm2020/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.mjs +0 -70
- package/esm2020/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.mjs +0 -190
- package/esm2020/lib/components/data-picker/data-picker.component.mjs +0 -79
- package/esm2020/lib/components/data-search/data-search.component.mjs +0 -11
- package/esm2020/lib/components/data-sharing-invite/data-sharing-invite.component.mjs +0 -52
- package/esm2020/lib/components/dataset/create-dataset/create-dataset.component.mjs +0 -47
- package/esm2020/lib/components/dataset/dataset-editor/available-columns/available-columns.component.mjs +0 -28
- package/esm2020/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.mjs +0 -344
- package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.mjs +0 -80
- package/esm2020/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.mjs +0 -54
- package/esm2020/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.mjs +0 -67
- package/esm2020/lib/components/dataset/dataset-editor/dataset-editor.component.mjs +0 -1134
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.mjs +0 -201
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.mjs +0 -25
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.mjs +0 -72
- package/esm2020/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.mjs +0 -62
- package/esm2020/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.mjs +0 -41
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.mjs +0 -78
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.mjs +0 -39
- package/esm2020/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.mjs +0 -75
- package/esm2020/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.mjs +0 -107
- package/esm2020/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.mjs +0 -58
- package/esm2020/lib/components/dataset/dataset-editor/share-query/share-query.component.mjs +0 -110
- package/esm2020/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.mjs +0 -20
- package/esm2020/lib/components/dataset/dataset.component.mjs +0 -294
- package/esm2020/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.mjs +0 -130
- package/esm2020/lib/components/datasource/create-datasource/api-access/api-access.component.mjs +0 -132
- package/esm2020/lib/components/datasource/create-datasource/create-datasource.component.mjs +0 -729
- package/esm2020/lib/components/datasource/create-datasource/import-data/import-data.component.mjs +0 -146
- package/esm2020/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.mjs +0 -165
- package/esm2020/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.mjs +0 -145
- package/esm2020/lib/components/datasource/datasource.component.mjs +0 -162
- package/esm2020/lib/components/datasource/document-datasource/document-datasource.component.mjs +0 -297
- package/esm2020/lib/components/export-project/export-project.component.mjs +0 -29
- package/esm2020/lib/components/feeds/feed/feed.component.mjs +0 -92
- package/esm2020/lib/components/feeds/feeds.component.mjs +0 -145
- package/esm2020/lib/components/job-tasks/job-tasks.component.mjs +0 -25
- package/esm2020/lib/components/marketplace/marketplace.component.mjs +0 -65
- package/esm2020/lib/components/metadata/metadata.component.mjs +0 -65
- package/esm2020/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.mjs +0 -113
- package/esm2020/lib/components/notification-groups/notification-groups.component.mjs +0 -86
- package/esm2020/lib/components/project-picker/project-picker.component.mjs +0 -118
- package/esm2020/lib/components/project-settings/project-link-selection/project-link-selection.component.mjs +0 -104
- package/esm2020/lib/components/project-settings/project-settings.component.mjs +0 -155
- package/esm2020/lib/components/query-caching/edit-query-cache/edit-query-cache.component.mjs +0 -51
- package/esm2020/lib/components/query-caching/query-cache-view/query-cache-view.component.mjs +0 -121
- package/esm2020/lib/components/query-caching/query-caching.component.mjs +0 -162
- package/esm2020/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.mjs +0 -45
- package/esm2020/lib/components/shared-with-me/shared-with-me.component.mjs +0 -174
- package/esm2020/lib/components/snapshots/snapshots.component.mjs +0 -244
- package/esm2020/lib/components/tag-picker/tag-picker.component.mjs +0 -74
- package/esm2020/lib/components/task-time-periods/task-time-periods.component.mjs +0 -55
- package/esm2020/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.mjs +0 -40
- package/esm2020/lib/guards/dashboard-changes.guard.mjs +0 -22
- package/esm2020/lib/kinintel-config.mjs +0 -3
- package/esm2020/lib/ng-kinintel.module.mjs +0 -437
- package/esm2020/lib/objects/action-event.mjs +0 -16
- package/esm2020/lib/services/alert.service.mjs +0 -52
- package/esm2020/lib/services/dashboard.service.mjs +0 -75
- package/esm2020/lib/services/data-processor.service.mjs +0 -56
- package/esm2020/lib/services/data-search.service.mjs +0 -36
- package/esm2020/lib/services/dataset.service.mjs +0 -187
- package/esm2020/lib/services/datasource.service.mjs +0 -93
- package/esm2020/lib/services/external.service.mjs +0 -33
- package/esm2020/lib/services/feed.service.mjs +0 -50
- package/esm2020/lib/services/notification.service.mjs +0 -41
- package/esm2020/lib/services/project.service.mjs +0 -130
- package/esm2020/lib/services/tag.service.mjs +0 -63
- package/esm2020/ng-kinintel.mjs +0 -5
- package/esm2020/public-api.mjs +0 -43
- package/fesm2015/ng-kinintel.mjs +0 -12182
- package/fesm2015/ng-kinintel.mjs.map +0 -1
- package/fesm2020/ng-kinintel.mjs +0 -11872
- package/fesm2020/ng-kinintel.mjs.map +0 -1
- package/lib/components/alert-groups/alert-groups.component.d.ts +0 -30
- package/lib/components/alert-groups/edit-alert-group/edit-alert-group.component.d.ts +0 -28
- package/lib/components/dashboard-editor/configure-item/configure-item.component.d.ts +0 -256
- package/lib/components/dashboard-editor/configure-item/edit-dashboard-alert/edit-dashboard-alert.component.d.ts +0 -16
- package/lib/components/dashboard-editor/configure-item/html-documentation/html-documentation.component.d.ts +0 -59
- package/lib/components/dashboard-editor/configure-item/table-cell-formatter/table-cell-formatter.component.d.ts +0 -26
- package/lib/components/dashboard-editor/dashboard-editor.component.d.ts +0 -85
- package/lib/components/dashboard-editor/dashboard-parameter/dashboard-parameter.component.d.ts +0 -8
- package/lib/components/dashboard-editor/dashboard-settings/dashboard-settings.component.d.ts +0 -22
- package/lib/components/dashboard-editor/item-component/item-component.component.d.ts +0 -264
- package/lib/components/dashboard-editor/source-selector-dialog/source-selector-dialog.component.d.ts +0 -30
- package/lib/components/dashboards/dashboards.component.d.ts +0 -56
- package/lib/components/dashboards/view-dashboard/view-dashboard.component.d.ts +0 -81
- package/lib/components/data-explorer/change-source-warning/change-source-warning.component.d.ts +0 -11
- package/lib/components/data-explorer/data-explorer.component.d.ts +0 -61
- package/lib/components/data-explorer/export-data/export-data.component.d.ts +0 -17
- package/lib/components/data-explorer/snapshot-api-access/snapshot-api-access.component.d.ts +0 -25
- package/lib/components/data-explorer/snapshot-profile-dialog/snapshot-profile-dialog.component.d.ts +0 -44
- package/lib/components/data-picker/data-picker.component.d.ts +0 -32
- package/lib/components/data-search/data-search.component.d.ts +0 -5
- package/lib/components/data-sharing-invite/data-sharing-invite.component.d.ts +0 -21
- package/lib/components/dataset/create-dataset/create-dataset.component.d.ts +0 -17
- package/lib/components/dataset/dataset-editor/available-columns/available-columns.component.d.ts +0 -12
- package/lib/components/dataset/dataset-editor/dataset-add-join/dataset-add-join.component.d.ts +0 -61
- package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-editor/dataset-column-editor.component.d.ts +0 -21
- package/lib/components/dataset/dataset-editor/dataset-column-settings/dataset-column-settings.component.d.ts +0 -20
- package/lib/components/dataset/dataset-editor/dataset-create-formula/dataset-create-formula.component.d.ts +0 -19
- package/lib/components/dataset/dataset-editor/dataset-editor.component.d.ts +0 -131
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter/dataset-filter.component.d.ts +0 -63
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-inclusion/dataset-filter-inclusion.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filter-junction/dataset-filter-junction.component.d.ts +0 -20
- package/lib/components/dataset/dataset-editor/dataset-filters/dataset-filters.component.d.ts +0 -16
- package/lib/components/dataset/dataset-editor/dataset-name-dialog/dataset-name-dialog.component.d.ts +0 -18
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-add-parameter/dataset-add-parameter.component.d.ts +0 -23
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-type/dataset-parameter-type.component.d.ts +0 -13
- package/lib/components/dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component.d.ts +0 -22
- package/lib/components/dataset/dataset-editor/dataset-summarise/dataset-summarise.component.d.ts +0 -27
- package/lib/components/dataset/dataset-editor/move-transformation-confirmation/move-transformation-confirmation.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/remove-transformation-warning/remove-transformation-warning.component.d.ts +0 -11
- package/lib/components/dataset/dataset-editor/save-as-query/save-as-query.component.d.ts +0 -25
- package/lib/components/dataset/dataset-editor/share-query/share-query.component.d.ts +0 -41
- package/lib/components/dataset/dataset-editor/upstream-changes-confirmation/upstream-changes-confirmation.component.d.ts +0 -11
- package/lib/components/dataset/dataset.component.d.ts +0 -74
- package/lib/components/datasource/create-datasource/advanced-settings/advanced-settings.component.d.ts +0 -26
- package/lib/components/datasource/create-datasource/api-access/api-access.component.d.ts +0 -31
- package/lib/components/datasource/create-datasource/create-datasource.component.d.ts +0 -112
- package/lib/components/datasource/create-datasource/import-data/import-data.component.d.ts +0 -28
- package/lib/components/datasource/create-datasource/import-data/import-wizard/import-wizard.component.d.ts +0 -40
- package/lib/components/datasource/create-datasource/tabular-datasource/tabular-datasource.component.d.ts +0 -34
- package/lib/components/datasource/datasource.component.d.ts +0 -46
- package/lib/components/datasource/document-datasource/document-datasource.component.d.ts +0 -64
- package/lib/components/export-project/export-project.component.d.ts +0 -9
- package/lib/components/feeds/feed/feed.component.d.ts +0 -30
- package/lib/components/feeds/feeds.component.d.ts +0 -47
- package/lib/components/job-tasks/job-tasks.component.d.ts +0 -11
- package/lib/components/marketplace/marketplace.component.d.ts +0 -42
- package/lib/components/metadata/metadata.component.d.ts +0 -24
- package/lib/components/notification-groups/edit-notification-group/edit-notification-group.component.d.ts +0 -37
- package/lib/components/notification-groups/notification-groups.component.d.ts +0 -28
- package/lib/components/project-picker/project-picker.component.d.ts +0 -37
- package/lib/components/project-settings/project-link-selection/project-link-selection.component.d.ts +0 -32
- package/lib/components/project-settings/project-settings.component.d.ts +0 -40
- package/lib/components/query-caching/edit-query-cache/edit-query-cache.component.d.ts +0 -17
- package/lib/components/query-caching/query-cache-view/query-cache-view.component.d.ts +0 -35
- package/lib/components/query-caching/query-caching.component.d.ts +0 -38
- package/lib/components/shared-with-me/feed-api-modal/feed-api-modal.component.d.ts +0 -21
- package/lib/components/shared-with-me/shared-with-me.component.d.ts +0 -43
- package/lib/components/snapshots/snapshots.component.d.ts +0 -52
- package/lib/components/tag-picker/tag-picker.component.d.ts +0 -27
- package/lib/components/task-time-periods/task-time-periods.component.d.ts +0 -20
- package/lib/components/whitelisted-sql-functions/whitelisted-sql-functions.component.d.ts +0 -17
- package/lib/guards/dashboard-changes.guard.d.ts +0 -11
- package/lib/kinintel-config.d.ts +0 -10
- package/lib/ng-kinintel.module.d.ts +0 -116
- package/lib/objects/action-event.d.ts +0 -12
- package/lib/services/alert.service.d.ts +0 -17
- package/lib/services/dashboard.service.d.ts +0 -25
- package/lib/services/data-processor.service.d.ts +0 -18
- package/lib/services/data-search.service.d.ts +0 -14
- package/lib/services/dataset.service.d.ts +0 -56
- package/lib/services/datasource.service.d.ts +0 -34
- package/lib/services/external.service.d.ts +0 -12
- package/lib/services/feed.service.d.ts +0 -19
- package/lib/services/notification.service.d.ts +0 -16
- package/lib/services/project.service.d.ts +0 -27
- package/lib/services/tag.service.d.ts +0 -19
- package/public-api.d.ts +0 -38
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
|
3
|
-
import { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators';
|
|
4
|
-
import { BehaviorSubject, merge, Subject } from 'rxjs';
|
|
5
|
-
import * as lodash from 'lodash';
|
|
6
|
-
import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../../services/notification.service";
|
|
9
|
-
import * as i2 from "@angular/router";
|
|
10
|
-
import * as i3 from "ng-kiniauth";
|
|
11
|
-
import * as i4 from "@angular/material/legacy-dialog";
|
|
12
|
-
import * as i5 from "@angular/common";
|
|
13
|
-
import * as i6 from "@angular/material/legacy-button";
|
|
14
|
-
import * as i7 from "@angular/material/icon";
|
|
15
|
-
import * as i8 from "@angular/material/chips";
|
|
16
|
-
import * as i9 from "@angular/forms";
|
|
17
|
-
import * as i10 from "@angular/material/legacy-core";
|
|
18
|
-
import * as i11 from "@angular/material/legacy-autocomplete";
|
|
19
|
-
const _ = lodash.default;
|
|
20
|
-
export class EditNotificationGroupComponent {
|
|
21
|
-
constructor(notificationService, route, router, userService, dialogRef, data) {
|
|
22
|
-
this.notificationService = notificationService;
|
|
23
|
-
this.route = route;
|
|
24
|
-
this.router = router;
|
|
25
|
-
this.userService = userService;
|
|
26
|
-
this.dialogRef = dialogRef;
|
|
27
|
-
this.data = data;
|
|
28
|
-
this.notification = { communicationMethod: 'email' };
|
|
29
|
-
this.externalMembers = [];
|
|
30
|
-
this.users = [];
|
|
31
|
-
this.notificationGroupMembers = [];
|
|
32
|
-
this.testSent = false;
|
|
33
|
-
this.selectable = true;
|
|
34
|
-
this.removable = true;
|
|
35
|
-
this.searchText = new BehaviorSubject('');
|
|
36
|
-
this._ = _;
|
|
37
|
-
this.separatorKeysCodes = [ENTER, COMMA];
|
|
38
|
-
this.reset = new Subject();
|
|
39
|
-
}
|
|
40
|
-
ngOnInit() {
|
|
41
|
-
const id = this.route.snapshot.params.id || this.data.groupId;
|
|
42
|
-
this.notificationService.getNotificationGroup(id).then((notification) => {
|
|
43
|
-
this.notification = notification || { communicationMethod: 'email' };
|
|
44
|
-
this.notificationGroupMembers = this.notification.members || [];
|
|
45
|
-
});
|
|
46
|
-
merge(this.searchText, this.reset)
|
|
47
|
-
.pipe(debounceTime(300), distinctUntilChanged(), switchMap(() => this.getUsers()))
|
|
48
|
-
.subscribe((users) => {
|
|
49
|
-
this.users = users;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
search(searchTerm) {
|
|
53
|
-
this.searchText.next(searchTerm);
|
|
54
|
-
}
|
|
55
|
-
userSelected(event, searchInput) {
|
|
56
|
-
const user = event.option.value;
|
|
57
|
-
this.notificationGroupMembers.push({
|
|
58
|
-
user: { id: user.id, name: user.name },
|
|
59
|
-
});
|
|
60
|
-
searchInput.value = '';
|
|
61
|
-
this.reset.next(Date.now());
|
|
62
|
-
}
|
|
63
|
-
addExternalMember(event) {
|
|
64
|
-
const value = (event.target.value || '').trim();
|
|
65
|
-
if (value) {
|
|
66
|
-
this.notificationGroupMembers.push({
|
|
67
|
-
memberData: value
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
// Clear the input value
|
|
71
|
-
event.target.value = '';
|
|
72
|
-
}
|
|
73
|
-
cancel() {
|
|
74
|
-
if (!this.data) {
|
|
75
|
-
this.router.navigate(['/notification-groups']);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
this.dialogRef.close(false);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
save() {
|
|
82
|
-
this.notification.members = [];
|
|
83
|
-
this.notificationGroupMembers.forEach(member => {
|
|
84
|
-
this.notification.members.push({
|
|
85
|
-
user: member.user,
|
|
86
|
-
memberData: member.memberData
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
this.notificationService.saveNotificationGroup(this.notification).then(() => {
|
|
90
|
-
if (!this.data) {
|
|
91
|
-
this.router.navigate(['/notification-groups']);
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
this.dialogRef.close(true);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
getUsers() {
|
|
99
|
-
return this.userService.getAccountUsers(this.searchText.getValue(), '10', '0').pipe(map((data) => {
|
|
100
|
-
return data.results;
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
EditNotificationGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditNotificationGroupComponent, deps: [{ token: i1.NotificationService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.UserService }, { token: i4.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
105
|
-
EditNotificationGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EditNotificationGroupComponent, selector: "ki-edit-notification-group", ngImport: i0, template: "<div class=\"container mx-auto max-w-screen-lg\">\n\n <h2>Notification Group</h2>\n\n\n <label class=\"mb-4\">\n Name\n <input type=\"text\" [(ngModel)]=\"notification.name\">\n </label>\n\n <label class=\"mb-4\">\n Type\n <select [(ngModel)]=\"notification.communicationMethod\">\n <option value=\"email\">Email</option>\n <option value=\"internal\">Internal</option>\n </select>\n </label>\n\n <label class=\"mb-8\">\n Select Users\n <input type=\"text\" #userSearch class=\"mb-2\"\n placeholder=\"Search for a user\"\n [matAutocomplete]=\"auto\"\n (keyup)=\"search($event.target.value)\">\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"userSelected($event, userSearch)\">\n <mat-option *ngFor=\"let user of users\" [value]=\"user\">\n {{user.name}}\n </mat-option>\n </mat-autocomplete>\n <mat-chip-list>\n <mat-chip *ngFor=\"let member of _.filter(notificationGroupMembers, 'user')\"\n [removable]=\"true\" (removed)=\"_.remove(notificationGroupMembers, {user: member})\">\n {{member.user.name}}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n </label>\n\n <label class=\"mb-8\">\n External Recipients\n <input type=\"text\" class=\"mb-2\"\n placeholder=\"Enter recipient data\"\n (keyup.enter)=\"addExternalMember($event)\">\n\n <mat-chip-list>\n <mat-chip *ngFor=\"let member of _.filter(notificationGroupMembers, 'memberData')\"\n [removable]=\"true\"\n (removed)=\"_.remove(notificationGroupMembers, {memberData: member.memberData})\">\n {{member.memberData}}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n </label>\n\n <div class=\"test-sent\" *ngIf=\"testSent\">\n <p>\n <mat-icon>check_circle</mat-icon>\n </p>\n <p>Test {{notification.type}} has been sent to the following recipients:\n <ng-template ngFor let-recipient let-i=index [ngForOf]=\"notification.recipients\">\n <span *ngIf=\"i > 0\">, </span><b>{{recipient}}</b>\n </ng-template>\n </p>\n </div>\n\n <div class=\"py-4 align-center justify-between\">\n <button mat-stroked-button (click)=\"cancel()\">\n Cancel\n </button>\n <div>\n <button mat-stroked-button class=\"send-test\" color=\"primary\" [disabled]=\"false\">\n Send Test\n </button>\n <button mat-flat-button color=\"primary\" (click)=\"save()\">\n Save Changes\n </button>\n </div>\n\n </div>\n\n\n</div>\n", styles: ["input,select,textarea{max-width:500px}.test-sent{display:flex;align-items:center;justify-content:center;flex-direction:column;padding:2rem;border:1px solid #dadada;border-radius:4px;font-size:1.1rem}.test-sent mat-icon{font-size:44px;width:44px;height:44px;line-height:44px;color:green}button.send-test{margin-right:1rem}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatLegacyButton, 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: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i8.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i11.MatLegacyAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i11.MatLegacyAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }] });
|
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditNotificationGroupComponent, decorators: [{
|
|
107
|
-
type: Component,
|
|
108
|
-
args: [{ selector: 'ki-edit-notification-group', template: "<div class=\"container mx-auto max-w-screen-lg\">\n\n <h2>Notification Group</h2>\n\n\n <label class=\"mb-4\">\n Name\n <input type=\"text\" [(ngModel)]=\"notification.name\">\n </label>\n\n <label class=\"mb-4\">\n Type\n <select [(ngModel)]=\"notification.communicationMethod\">\n <option value=\"email\">Email</option>\n <option value=\"internal\">Internal</option>\n </select>\n </label>\n\n <label class=\"mb-8\">\n Select Users\n <input type=\"text\" #userSearch class=\"mb-2\"\n placeholder=\"Search for a user\"\n [matAutocomplete]=\"auto\"\n (keyup)=\"search($event.target.value)\">\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"userSelected($event, userSearch)\">\n <mat-option *ngFor=\"let user of users\" [value]=\"user\">\n {{user.name}}\n </mat-option>\n </mat-autocomplete>\n <mat-chip-list>\n <mat-chip *ngFor=\"let member of _.filter(notificationGroupMembers, 'user')\"\n [removable]=\"true\" (removed)=\"_.remove(notificationGroupMembers, {user: member})\">\n {{member.user.name}}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n </label>\n\n <label class=\"mb-8\">\n External Recipients\n <input type=\"text\" class=\"mb-2\"\n placeholder=\"Enter recipient data\"\n (keyup.enter)=\"addExternalMember($event)\">\n\n <mat-chip-list>\n <mat-chip *ngFor=\"let member of _.filter(notificationGroupMembers, 'memberData')\"\n [removable]=\"true\"\n (removed)=\"_.remove(notificationGroupMembers, {memberData: member.memberData})\">\n {{member.memberData}}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n </label>\n\n <div class=\"test-sent\" *ngIf=\"testSent\">\n <p>\n <mat-icon>check_circle</mat-icon>\n </p>\n <p>Test {{notification.type}} has been sent to the following recipients:\n <ng-template ngFor let-recipient let-i=index [ngForOf]=\"notification.recipients\">\n <span *ngIf=\"i > 0\">, </span><b>{{recipient}}</b>\n </ng-template>\n </p>\n </div>\n\n <div class=\"py-4 align-center justify-between\">\n <button mat-stroked-button (click)=\"cancel()\">\n Cancel\n </button>\n <div>\n <button mat-stroked-button class=\"send-test\" color=\"primary\" [disabled]=\"false\">\n Send Test\n </button>\n <button mat-flat-button color=\"primary\" (click)=\"save()\">\n Save Changes\n </button>\n </div>\n\n </div>\n\n\n</div>\n", styles: ["input,select,textarea{max-width:500px}.test-sent{display:flex;align-items:center;justify-content:center;flex-direction:column;padding:2rem;border:1px solid #dadada;border-radius:4px;font-size:1.1rem}.test-sent mat-icon{font-size:44px;width:44px;height:44px;line-height:44px;color:green}button.send-test{margin-right:1rem}\n"] }]
|
|
109
|
-
}], ctorParameters: function () { return [{ type: i1.NotificationService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.UserService }, { type: i4.MatLegacyDialogRef }, { type: undefined, decorators: [{
|
|
110
|
-
type: Inject,
|
|
111
|
-
args: [MAT_DIALOG_DATA]
|
|
112
|
-
}] }]; } });
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1ub3RpZmljYXRpb24tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1ncm91cHMvZWRpdC1ub3RpZmljYXRpb24tZ3JvdXAvZWRpdC1ub3RpZmljYXRpb24tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi1ncm91cHMvZWRpdC1ub3RpZmljYXRpb24tZ3JvdXAvZWRpdC1ub3RpZmljYXRpb24tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFHeEQsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHckQsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFDLHNCQUFzQixJQUFJLGVBQWUsRUFBcUMsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUQ5SCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBUXpCLE1BQU0sT0FBTyw4QkFBOEI7SUFnQnZDLFlBQW9CLG1CQUF3QyxFQUN4QyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDekIsU0FBdUQsRUFDOUIsSUFBUztRQUxqQyx3QkFBbUIsR0FB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LEVBQUUsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7OzRIQXhHUSw4QkFBOEIsc0tBcUJuQixlQUFlO2dIQXJCMUIsOEJBQThCLGtFQ2pCM0MsczdGQWtGQTs0RkRqRWEsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNJLDRCQUE0Qjs7MEJBeUJ6QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtOb3RpZmljYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0NPTU1BLCBFTlRFUn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICduZy1raW5pYXV0aCc7XG5pbXBvcnQge01hdExlZ2FjeUF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgYXMgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWF1dG9jb21wbGV0ZSc7XG5pbXBvcnQgKiBhcyBsb2Rhc2ggZnJvbSAnbG9kYXNoJztcbmNvbnN0IF8gPSBsb2Rhc2guZGVmYXVsdDtcbmltcG9ydCB7TUFUX0xFR0FDWV9ESUFMT0dfREFUQSBhcyBNQVRfRElBTE9HX0RBVEEsIE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2tpLWVkaXQtbm90aWZpY2F0aW9uLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1ub3RpZmljYXRpb24tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VkaXQtbm90aWZpY2F0aW9uLWdyb3VwLmNvbXBvbmVudC5zYXNzJ11cbn0pXG5leHBvcnQgY2xhc3MgRWRpdE5vdGlmaWNhdGlvbkdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHB1YmxpYyBub3RpZmljYXRpb246IGFueSA9IHtjb21tdW5pY2F0aW9uTWV0aG9kOiAnZW1haWwnfTtcbiAgICBwdWJsaWMgZXh0ZXJuYWxNZW1iZXJzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgdXNlcnM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyBub3RpZmljYXRpb25Hcm91cE1lbWJlcnM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyB0ZXN0U2VudCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICBwdWJsaWMgcmVtb3ZhYmxlID0gdHJ1ZTtcbiAgICBwdWJsaWMgc2VhcmNoVGV4dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgcHVibGljIF8gPSBfO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHNlcGFyYXRvcktleXNDb2RlcyA9IFtFTlRFUiwgQ09NTUFdIGFzIGNvbnN0O1xuXG4gICAgcHJpdmF0ZSByZXNldCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RWRpdE5vdGlmaWNhdGlvbkdyb3VwQ29tcG9uZW50PixcbiAgICAgICAgICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkIHx8IHRoaXMuZGF0YS5ncm91cElkO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uR3JvdXAoaWQpLnRoZW4oKG5vdGlmaWNhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvbiB8fCB7Y29tbXVuaWNhdGlvbk1ldGhvZDogJ2VtYWlsJ307XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkdyb3VwTWVtYmVycyA9IHRoaXMubm90aWZpY2F0aW9uLm1lbWJlcnMgfHwgW107XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKHRoaXMuc2VhcmNoVGV4dCwgdGhpcy5yZXNldClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlcnMoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHVzZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJzID0gdXNlcnM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQubmV4dChzZWFyY2hUZXJtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlclNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBzZWFyY2hJbnB1dCkge1xuICAgICAgICBjb25zdCB1c2VyID0gZXZlbnQub3B0aW9uLnZhbHVlO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkdyb3VwTWVtYmVycy5wdXNoKHtcbiAgICAgICAgICAgIHVzZXI6IHtpZDogdXNlci5pZCwgbmFtZTogdXNlci5uYW1lfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VhcmNoSW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5yZXNldC5uZXh0KERhdGUubm93KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFeHRlcm5hbE1lbWJlcihldmVudCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQudmFsdWUgfHwgJycpLnRyaW0oKTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uR3JvdXBNZW1iZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIG1lbWJlckRhdGE6IHZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIHRoZSBpbnB1dCB2YWx1ZVxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbm90aWZpY2F0aW9uLWdyb3VwcyddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5tZW1iZXJzID0gW107XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uR3JvdXBNZW1iZXJzLmZvckVhY2gobWVtYmVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLm1lbWJlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdXNlcjogbWVtYmVyLnVzZXIsXG4gICAgICAgICAgICAgICAgbWVtYmVyRGF0YTogbWVtYmVyLm1lbWJlckRhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNhdmVOb3RpZmljYXRpb25Hcm91cCh0aGlzLm5vdGlmaWNhdGlvbikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL25vdGlmaWNhdGlvbi1ncm91cHMnXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZXRBY2NvdW50VXNlcnMoXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRleHQuZ2V0VmFsdWUoKSxcbiAgICAgICAgICAgICcxMCcsXG4gICAgICAgICAgICAnMCdcbiAgICAgICAgKS5waXBlKG1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXN1bHRzO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lciBteC1hdXRvIG1heC13LXNjcmVlbi1sZ1wiPlxuXG4gICAgPGgyPk5vdGlmaWNhdGlvbiBHcm91cDwvaDI+XG5cblxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLTRcIj5cbiAgICAgICAgTmFtZVxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cIm5vdGlmaWNhdGlvbi5uYW1lXCI+XG4gICAgPC9sYWJlbD5cblxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLTRcIj5cbiAgICAgICAgVHlwZVxuICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwibm90aWZpY2F0aW9uLmNvbW11bmljYXRpb25NZXRob2RcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlbWFpbFwiPkVtYWlsPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJuYWxcIj5JbnRlcm5hbDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGxhYmVsIGNsYXNzPVwibWItOFwiPlxuICAgICAgICBTZWxlY3QgVXNlcnNcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI3VzZXJTZWFyY2ggY2xhc3M9XCJtYi0yXCJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBhIHVzZXJcIlxuICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwidXNlclNlbGVjdGVkKCRldmVudCwgdXNlclNlYXJjaClcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJzXCIgW3ZhbHVlXT1cInVzZXJcIj5cbiAgICAgICAgICAgICAgICB7e3VzZXIubmFtZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPG1hdC1jaGlwLWxpc3Q+XG4gICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IG1lbWJlciBvZiBfLmZpbHRlcihub3RpZmljYXRpb25Hcm91cE1lbWJlcnMsICd1c2VyJylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmVkKT1cIl8ucmVtb3ZlKG5vdGlmaWNhdGlvbkdyb3VwTWVtYmVycywge3VzZXI6IG1lbWJlcn0pXCI+XG4gICAgICAgICAgICAgICAge3ttZW1iZXIudXNlci5uYW1lfX1cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZSAqbmdJZj1cInJlbW92YWJsZVwiPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgPC9sYWJlbD5cblxuICAgIDxsYWJlbCBjbGFzcz1cIm1iLThcIj5cbiAgICAgICAgRXh0ZXJuYWwgUmVjaXBpZW50c1xuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm1iLTJcIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciByZWNpcGllbnQgZGF0YVwiXG4gICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYWRkRXh0ZXJuYWxNZW1iZXIoJGV2ZW50KVwiPlxuXG4gICAgICAgIDxtYXQtY2hpcC1saXN0PlxuICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj1cImxldCBtZW1iZXIgb2YgXy5maWx0ZXIobm90aWZpY2F0aW9uR3JvdXBNZW1iZXJzLCAnbWVtYmVyRGF0YScpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cIl8ucmVtb3ZlKG5vdGlmaWNhdGlvbkdyb3VwTWVtYmVycywge21lbWJlckRhdGE6IG1lbWJlci5tZW1iZXJEYXRhfSlcIj5cbiAgICAgICAgICAgICAgICB7e21lbWJlci5tZW1iZXJEYXRhfX1cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZSAqbmdJZj1cInJlbW92YWJsZVwiPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgY2xhc3M9XCJ0ZXN0LXNlbnRcIiAqbmdJZj1cInRlc3RTZW50XCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+VGVzdCB7e25vdGlmaWNhdGlvbi50eXBlfX0gaGFzIGJlZW4gc2VudCB0byB0aGUgZm9sbG93aW5nIHJlY2lwaWVudHM6XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LXJlY2lwaWVudCBsZXQtaT1pbmRleCBbbmdGb3JPZl09XCJub3RpZmljYXRpb24ucmVjaXBpZW50c1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA+IDBcIj4sJm5ic3A7PC9zcGFuPjxiPnt7cmVjaXBpZW50fX08L2I+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicHktNCBhbGlnbi1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJzZW5kLXRlc3RcIiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICBTZW5kIFRlc3RcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmUoKVwiPlxuICAgICAgICAgICAgICAgIFNhdmUgQ2hhbmdlc1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cblxuPC9kaXY+XG4iXX0=
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { EditNotificationGroupComponent } from '../notification-groups/edit-notification-group/edit-notification-group.component';
|
|
3
|
-
import { BehaviorSubject, merge, Subject } from 'rxjs';
|
|
4
|
-
import { debounceTime, map, switchMap } from 'rxjs/operators';
|
|
5
|
-
import * as lodash from 'lodash';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../../services/notification.service";
|
|
8
|
-
import * as i2 from "@angular/router";
|
|
9
|
-
import * as i3 from "@angular/material/legacy-dialog";
|
|
10
|
-
import * as i4 from "@angular/common";
|
|
11
|
-
import * as i5 from "@angular/material/legacy-button";
|
|
12
|
-
import * as i6 from "@angular/material/icon";
|
|
13
|
-
import * as i7 from "@angular/material/chips";
|
|
14
|
-
import * as i8 from "@angular/forms";
|
|
15
|
-
const _ = lodash.default;
|
|
16
|
-
export class NotificationGroupsComponent {
|
|
17
|
-
constructor(notificationService, router, matDialog) {
|
|
18
|
-
this.notificationService = notificationService;
|
|
19
|
-
this.router = router;
|
|
20
|
-
this.matDialog = matDialog;
|
|
21
|
-
this.notificationGroups = [];
|
|
22
|
-
this.limit = new BehaviorSubject(10);
|
|
23
|
-
this.offset = new BehaviorSubject(0);
|
|
24
|
-
this.page = 1;
|
|
25
|
-
this.endOfResults = false;
|
|
26
|
-
this.loading = true;
|
|
27
|
-
this.reload = new Subject();
|
|
28
|
-
}
|
|
29
|
-
ngOnInit() {
|
|
30
|
-
merge(this.limit, this.offset, this.reload)
|
|
31
|
-
.pipe(debounceTime(300),
|
|
32
|
-
// distinctUntilChanged(),
|
|
33
|
-
switchMap(() => this.getNotificationGroups())).subscribe((groups) => {
|
|
34
|
-
this.endOfResults = groups.length < this.limit.getValue();
|
|
35
|
-
this.notificationGroups = groups;
|
|
36
|
-
this.loading = false;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
editNotification(id) {
|
|
40
|
-
const dialogRef = this.matDialog.open(EditNotificationGroupComponent, {
|
|
41
|
-
width: '800px',
|
|
42
|
-
height: '575px',
|
|
43
|
-
data: {
|
|
44
|
-
groupId: id
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
dialogRef.afterClosed().subscribe(res => {
|
|
48
|
-
if (res) {
|
|
49
|
-
this.reload.next(Date.now());
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
increaseOffset() {
|
|
54
|
-
this.page = this.page + 1;
|
|
55
|
-
this.offset.next((this.limit.getValue() * this.page) - this.limit.getValue());
|
|
56
|
-
}
|
|
57
|
-
decreaseOffset() {
|
|
58
|
-
this.page = this.page <= 1 ? 1 : this.page - 1;
|
|
59
|
-
this.offset.next((this.limit.getValue() * this.page) - this.limit.getValue());
|
|
60
|
-
}
|
|
61
|
-
pageSizeChange(value) {
|
|
62
|
-
this.limit.next(value);
|
|
63
|
-
}
|
|
64
|
-
removeNotification(id) {
|
|
65
|
-
const message = 'Are you sure you would like to remove this notification group?';
|
|
66
|
-
if (window.confirm(message)) {
|
|
67
|
-
this.notificationService.removeNotificationGroup(id).then(() => {
|
|
68
|
-
this.reload.next(Date.now());
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
getNotificationGroups() {
|
|
73
|
-
return this.notificationService.getNotificationGroups(this.limit.getValue().toString(), this.offset.getValue().toString()).pipe(map((snapshots) => {
|
|
74
|
-
return _.filter(snapshots, snapshot => {
|
|
75
|
-
return snapshot.taskStatus !== 'PENDING';
|
|
76
|
-
});
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
NotificationGroupsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NotificationGroupsComponent, deps: [{ token: i1.NotificationService }, { token: i2.Router }, { token: i3.MatLegacyDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
-
NotificationGroupsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NotificationGroupsComponent, selector: "ki-notification-groups", ngImport: i0, template: "<div class=\"p-6 bg-white border-b border-gray-200\">\n <div class=\"md:flex md:items-center md:justify-between md:space-x-5\">\n <div class=\"flex items-start flex-1\">\n <div class=\"pt-1.5\">\n <h1 class=\"text-2xl font-bold text-gray-900\">Notification Groups</h1>\n <p class=\"text-sm font-medium text-gray-500\">\n A list of all the notification groups currently available.\n </p>\n </div>\n </div>\n <div class=\"mt-6 flex flex-col-reverse justify-stretch\">\n <button type=\"button\" (click)=\"editNotification(0)\"\n class=\"inline-flex items-center justify-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-primary focus:outline-none\">\n Create Notification Group\n </button>\n </div>\n </div>\n</div>\n\n<div class=\"p-4\" *ngIf=\"!notificationGroups.length && !loading\">\n <button type=\"button\" (click)=\"editNotification(0)\"\n class=\"relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none\">\n\n <div class=\"relative inline-block\">\n <mat-icon\n class=\"mx-auto text-6xl h-14 w-20 text-gray-300\">notifications\n </mat-icon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"right-0 bottom-0 absolute h-8 w-8 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\"\n stroke=\"currentColor\" stroke-width=\"4\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4v16m8-8H4\"/>\n </svg>\n </div>\n\n <span class=\"mt-2 block text-sm font-medium text-gray-900\">Create Notification Group</span>\n </button>\n</div>\n\n<div class=\"px-4 sm:px-6 lg:px-8 mt-0\">\n <div class=\"flex flex-col\">\n <div class=\"-my-2 -mx-4 sm:-mx-6 lg:-mx-8\">\n <div class=\"inline-block min-w-full py-2 align-middle\">\n <table class=\"min-w-full border-separate\" style=\"border-spacing: 0\" *ngIf=\"notificationGroups.length\">\n <thead class=\"bg-gray-100\">\n <tr>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Name\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Type\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Edit</span>\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Edit</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-white\">\n <tr *ngFor=\"let element of notificationGroups; let i = index\"\n class=\"cursor-pointer hover:bg-gray-50\">\n <td (click)=\"editNotification(element.id)\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\"\n class=\"whitespace-nowrap border-gray-200 py-2 px-4 text-sm font-medium text-gray-900\">\n {{element.name}}\n </td>\n <td (click)=\"editNotification(element.id)\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\"\n class=\"whitespace-nowrap border-gray-200 py-2 px-4 text-sm text-gray-500 capitalize\">\n {{element.communicationMethod}}\n </td>\n <td (click)=\"editNotification(element.id)\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\"\n class=\"relative whitespace-nowrap border-gray-200 py-2 px-4 text-right text-sm\">\n <mat-chip-list *ngIf=\"element.default\" class=\"flex justify-end\">\n <mat-chip color=\"primary\" selected>Default</mat-chip>\n </mat-chip-list>\n </td>\n <td class=\"relative whitespace-nowrap border-gray-200 py-2 px-4 text-right text-sm\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\">\n <button mat-icon-button class=\"text-gray-500\" (click)=\"removeNotification(element.id)\">\n <mat-icon>delete</mat-icon>\n </button>\n </td>\n </tr>\n <tr>\n <td colspan=\"5\"\n class=\"border-t bg-gray-50 whitespace-nowrap border-b border-gray-200 py-1 px-4 text-sm font-medium text-gray-900\">\n <div class=\"paging-toolbar flex align-center justify-end\">\n\n <div class=\"flex items-center justify-center\">\n <div class=\"text-xs text-gray-400 mr-10\">\n Showing {{offset.getValue() + 1}} - {{(page * limit.getValue()) - (limit.getValue() - notificationGroups.length)}}</div>\n <select [value]=\"limit.getValue()\" (change)=\"pageSizeChange($event.target.value)\"\n class=\"mr-8 p-1.5\">\n <option [value]=\"1\">1</option>\n <option [value]=\"5\">5</option>\n <option [value]=\"10\">10</option>\n <option [value]=\"25\">25</option>\n <option [value]=\"50\">50</option>\n <option [value]=\"100\">100</option>\n <option [value]=\"250\">250</option>\n <option [value]=\"1000\">1000</option>\n </select>\n <button mat-icon-button class=\"mr-4\" (click)=\"decreaseOffset()\" [disabled]=\"page <= 1\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button (click)=\"increaseOffset()\" [disabled]=\"endOfResults\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n</div>\n", styles: ["table tr.mat-row:hover{background-color:#f5f5f5;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatLegacyButton, 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: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
|
|
82
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NotificationGroupsComponent, decorators: [{
|
|
83
|
-
type: Component,
|
|
84
|
-
args: [{ selector: 'ki-notification-groups', template: "<div class=\"p-6 bg-white border-b border-gray-200\">\n <div class=\"md:flex md:items-center md:justify-between md:space-x-5\">\n <div class=\"flex items-start flex-1\">\n <div class=\"pt-1.5\">\n <h1 class=\"text-2xl font-bold text-gray-900\">Notification Groups</h1>\n <p class=\"text-sm font-medium text-gray-500\">\n A list of all the notification groups currently available.\n </p>\n </div>\n </div>\n <div class=\"mt-6 flex flex-col-reverse justify-stretch\">\n <button type=\"button\" (click)=\"editNotification(0)\"\n class=\"inline-flex items-center justify-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-primary focus:outline-none\">\n Create Notification Group\n </button>\n </div>\n </div>\n</div>\n\n<div class=\"p-4\" *ngIf=\"!notificationGroups.length && !loading\">\n <button type=\"button\" (click)=\"editNotification(0)\"\n class=\"relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none\">\n\n <div class=\"relative inline-block\">\n <mat-icon\n class=\"mx-auto text-6xl h-14 w-20 text-gray-300\">notifications\n </mat-icon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"right-0 bottom-0 absolute h-8 w-8 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\"\n stroke=\"currentColor\" stroke-width=\"4\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4v16m8-8H4\"/>\n </svg>\n </div>\n\n <span class=\"mt-2 block text-sm font-medium text-gray-900\">Create Notification Group</span>\n </button>\n</div>\n\n<div class=\"px-4 sm:px-6 lg:px-8 mt-0\">\n <div class=\"flex flex-col\">\n <div class=\"-my-2 -mx-4 sm:-mx-6 lg:-mx-8\">\n <div class=\"inline-block min-w-full py-2 align-middle\">\n <table class=\"min-w-full border-separate\" style=\"border-spacing: 0\" *ngIf=\"notificationGroups.length\">\n <thead class=\"bg-gray-100\">\n <tr>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Name\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Type\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Edit</span>\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Edit</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-white\">\n <tr *ngFor=\"let element of notificationGroups; let i = index\"\n class=\"cursor-pointer hover:bg-gray-50\">\n <td (click)=\"editNotification(element.id)\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\"\n class=\"whitespace-nowrap border-gray-200 py-2 px-4 text-sm font-medium text-gray-900\">\n {{element.name}}\n </td>\n <td (click)=\"editNotification(element.id)\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\"\n class=\"whitespace-nowrap border-gray-200 py-2 px-4 text-sm text-gray-500 capitalize\">\n {{element.communicationMethod}}\n </td>\n <td (click)=\"editNotification(element.id)\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\"\n class=\"relative whitespace-nowrap border-gray-200 py-2 px-4 text-right text-sm\">\n <mat-chip-list *ngIf=\"element.default\" class=\"flex justify-end\">\n <mat-chip color=\"primary\" selected>Default</mat-chip>\n </mat-chip-list>\n </td>\n <td class=\"relative whitespace-nowrap border-gray-200 py-2 px-4 text-right text-sm\"\n [ngClass]=\"{'border-b-0': i === notificationGroups.length - 1, 'border-b': i !== notificationGroups.length - 1}\">\n <button mat-icon-button class=\"text-gray-500\" (click)=\"removeNotification(element.id)\">\n <mat-icon>delete</mat-icon>\n </button>\n </td>\n </tr>\n <tr>\n <td colspan=\"5\"\n class=\"border-t bg-gray-50 whitespace-nowrap border-b border-gray-200 py-1 px-4 text-sm font-medium text-gray-900\">\n <div class=\"paging-toolbar flex align-center justify-end\">\n\n <div class=\"flex items-center justify-center\">\n <div class=\"text-xs text-gray-400 mr-10\">\n Showing {{offset.getValue() + 1}} - {{(page * limit.getValue()) - (limit.getValue() - notificationGroups.length)}}</div>\n <select [value]=\"limit.getValue()\" (change)=\"pageSizeChange($event.target.value)\"\n class=\"mr-8 p-1.5\">\n <option [value]=\"1\">1</option>\n <option [value]=\"5\">5</option>\n <option [value]=\"10\">10</option>\n <option [value]=\"25\">25</option>\n <option [value]=\"50\">50</option>\n <option [value]=\"100\">100</option>\n <option [value]=\"250\">250</option>\n <option [value]=\"1000\">1000</option>\n </select>\n <button mat-icon-button class=\"mr-4\" (click)=\"decreaseOffset()\" [disabled]=\"page <= 1\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button (click)=\"increaseOffset()\" [disabled]=\"endOfResults\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n</div>\n", styles: ["table tr.mat-row:hover{background-color:#f5f5f5;cursor:pointer}\n"] }]
|
|
85
|
-
}], ctorParameters: function () { return [{ type: i1.NotificationService }, { type: i2.Router }, { type: i3.MatLegacyDialog }]; } });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWdyb3Vwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raW5pbnRlbC9zcmMvbGliL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uLWdyb3Vwcy9ub3RpZmljYXRpb24tZ3JvdXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWtpbmludGVsL3NyYy9saWIvY29tcG9uZW50cy9ub3RpZmljYXRpb24tZ3JvdXBzL25vdGlmaWNhdGlvbi1ncm91cHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUdoRCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUVoSSxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFDakMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQU96QixNQUFNLE9BQU8sMkJBQTJCO0lBV3BDLFlBQW9CLG1CQUF3QyxFQUN4QyxNQUFjLEVBQ2QsU0FBb0I7UUFGcEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBVztRQVhqQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDeEIsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNo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LHFCQUFxQixDQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUNwQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUN0QixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNsQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7O3lIQWhGUSwyQkFBMkI7NkdBQTNCLDJCQUEyQiw4RENmeEMseXZQQTZIQTs0RkQ5R2EsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNJLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge05vdGlmaWNhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7RWRpdE5vdGlmaWNhdGlvbkdyb3VwQ29tcG9uZW50fSBmcm9tICcuLi9ub3RpZmljYXRpb24tZ3JvdXBzL2VkaXQtbm90aWZpY2F0aW9uLWdyb3VwL2VkaXQtbm90aWZpY2F0aW9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgbG9kYXNoIGZyb20gJ2xvZGFzaCc7XG5jb25zdCBfID0gbG9kYXNoLmRlZmF1bHQ7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2ktbm90aWZpY2F0aW9uLWdyb3VwcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhdGlvbi1ncm91cHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25vdGlmaWNhdGlvbi1ncm91cHMuY29tcG9uZW50LnNhc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25Hcm91cHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHVibGljIG5vdGlmaWNhdGlvbkdyb3VwcyA9IFtdO1xuICAgIHB1YmxpYyBsaW1pdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMTApO1xuICAgIHB1YmxpYyBvZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICAgIHB1YmxpYyBwYWdlID0gMTtcbiAgICBwdWJsaWMgZW5kT2ZSZXN1bHRzID0gZmFsc2U7XG4gICAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSByZWxvYWQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZykge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBtZXJnZSh0aGlzLmxpbWl0LCB0aGlzLm9mZnNldCwgdGhpcy5yZWxvYWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICAgICAgICAvLyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGlmaWNhdGlvbkdyb3VwcygpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKGdyb3VwczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mUmVzdWx0cyA9IGdyb3Vwcy5sZW5ndGggPCB0aGlzLmxpbWl0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkdyb3VwcyA9IGdyb3VwcztcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdE5vdGlmaWNhdGlvbihpZCkge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKEVkaXROb3RpZmljYXRpb25Hcm91cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6ICc1NzVweCcsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZ3JvdXBJZDogaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQubmV4dChEYXRlLm5vdygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluY3JlYXNlT2Zmc2V0KCkge1xuICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xuICAgICAgICB0aGlzLm9mZnNldC5uZXh0KCh0aGlzLmxpbWl0LmdldFZhbHVlKCkgKiB0aGlzLnBhZ2UpIC0gdGhpcy5saW1pdC5nZXRWYWx1ZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjcmVhc2VPZmZzZXQoKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSA8PSAxID8gMSA6IHRoaXMucGFnZSAtIDE7XG4gICAgICAgIHRoaXMub2Zmc2V0Lm5leHQoKHRoaXMubGltaXQuZ2V0VmFsdWUoKSAqIHRoaXMucGFnZSkgLSB0aGlzLmxpbWl0LmdldFZhbHVlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYWdlU2l6ZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmxpbWl0Lm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVOb3RpZmljYXRpb24oaWQpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgbm90aWZpY2F0aW9uIGdyb3VwPyc7XG4gICAgICAgIGlmICh3aW5kb3cuY29uZmlybShtZXNzYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnJlbW92ZU5vdGlmaWNhdGlvbkdyb3VwKGlkKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZC5uZXh0KERhdGUubm93KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vdGlmaWNhdGlvbkdyb3VwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZXROb3RpZmljYXRpb25Hcm91cHMoXG4gICAgICAgICAgICB0aGlzLmxpbWl0LmdldFZhbHVlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0LmdldFZhbHVlKCkudG9TdHJpbmcoKVxuICAgICAgICApLnBpcGUobWFwKChzbmFwc2hvdHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmZpbHRlcihzbmFwc2hvdHMsIHNuYXBzaG90ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90LnRhc2tTdGF0dXMgIT09ICdQRU5ESU5HJztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicC02IGJnLXdoaXRlIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZDpmbGV4IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW4gbWQ6c3BhY2UteC01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGZsZXgtMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTEuNVwiPlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwXCI+Tm90aWZpY2F0aW9uIEdyb3VwczwvaDE+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGFsbCB0aGUgbm90aWZpY2F0aW9uIGdyb3VwcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTYgZmxleCBmbGV4LWNvbC1yZXZlcnNlIGp1c3RpZnktc3RyZXRjaFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImVkaXROb3RpZmljYXRpb24oMClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00IHB5LTIgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJvdW5kZWQtbWQgc2hhZG93LXNtIHRleHQtd2hpdGUgYmctcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmVcIj5cbiAgICAgICAgICAgICAgICBDcmVhdGUgTm90aWZpY2F0aW9uIEdyb3VwXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInAtNFwiICpuZ0lmPVwiIW5vdGlmaWNhdGlvbkdyb3Vwcy5sZW5ndGggJiYgIWxvYWRpbmdcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZWRpdE5vdGlmaWNhdGlvbigwKVwiXG4gICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGJsb2NrIHctZnVsbCBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgYm9yZGVyLWRhc2hlZCByb3VuZGVkLWxnIHAtMTIgdGV4dC1jZW50ZXIgaG92ZXI6Ym9yZGVyLWdyYXktNDAwIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtYXV0byB0ZXh0LTZ4bCBoLTE0IHctMjAgdGV4dC1ncmF5LTMwMFwiPm5vdGlmaWNhdGlvbnNcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cInJpZ2h0LTAgYm90dG9tLTAgYWJzb2x1dGUgaC04IHctOCB0ZXh0LWdyYXktNDAwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiNFwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGQ9XCJNMTIgNHYxNm04LThINFwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTIgYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwXCI+Q3JlYXRlIE5vdGlmaWNhdGlvbiBHcm91cDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHgtNCBzbTpweC02IGxnOnB4LTggbXQtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCItbXktMiAtbXgtNCBzbTotbXgtNiBsZzotbXgtOFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ibG9jayBtaW4tdy1mdWxsIHB5LTIgYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwibWluLXctZnVsbCBib3JkZXItc2VwYXJhdGVcIiBzdHlsZT1cImJvcmRlci1zcGFjaW5nOiAwXCIgKm5nSWY9XCJub3RpZmljYXRpb25Hcm91cHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImJnLWdyYXktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3kgdG9wLTAgei0xMCBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgYmctZ3JheS01MCBiZy1vcGFjaXR5LTc1IHB5LTMuNSBweC00IHRleHQtbGVmdCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBiYWNrZHJvcC1ibHVyIGJhY2tkcm9wLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMzAwIGJnLWdyYXktNTAgYmctb3BhY2l0eS03NSBweS0zLjUgcHgtNCB0ZXh0LWxlZnQgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgYmFja2Ryb3AtYmx1ciBiYWNrZHJvcC1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0aWNreSB0b3AtMCB6LTEwIGJvcmRlci1iIGJvcmRlci1ncmF5LTMwMCBiZy1ncmF5LTUwIGJnLW9wYWNpdHktNzUgcHktMy41IHB4LTQgYmFja2Ryb3AtYmx1ciBiYWNrZHJvcC1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5FZGl0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3kgdG9wLTAgei0xMCBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgYmctZ3JheS01MCBiZy1vcGFjaXR5LTc1IHB5LTMuNSBweC00IGJhY2tkcm9wLWJsdXIgYmFja2Ryb3AtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+RWRpdDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBub3RpZmljYXRpb25Hcm91cHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKGNsaWNrKT1cImVkaXROb3RpZmljYXRpb24oZWxlbWVudC5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLWItMCc6IGkgPT09IG5vdGlmaWNhdGlvbkdyb3Vwcy5sZW5ndGggLSAxLCAnYm9yZGVyLWInOiBpICE9PSBub3RpZmljYXRpb25Hcm91cHMubGVuZ3RoIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXAgYm9yZGVyLWdyYXktMjAwIHB5LTIgcHgtNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VsZW1lbnQubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJlZGl0Tm90aWZpY2F0aW9uKGVsZW1lbnQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2JvcmRlci1iLTAnOiBpID09PSBub3RpZmljYXRpb25Hcm91cHMubGVuZ3RoIC0gMSwgJ2JvcmRlci1iJzogaSAhPT0gbm90aWZpY2F0aW9uR3JvdXBzLmxlbmd0aCAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIGJvcmRlci1ncmF5LTIwMCBweS0yIHB4LTQgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGNhcGl0YWxpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VsZW1lbnQuY29tbXVuaWNhdGlvbk1ldGhvZH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJlZGl0Tm90aWZpY2F0aW9uKGVsZW1lbnQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2JvcmRlci1iLTAnOiBpID09PSBub3RpZmljYXRpb25Hcm91cHMubGVuZ3RoIC0gMSwgJ2JvcmRlci1iJzogaSAhPT0gbm90aWZpY2F0aW9uR3JvdXBzLmxlbmd0aCAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHdoaXRlc3BhY2Utbm93cmFwIGJvcmRlci1ncmF5LTIwMCBweS0yIHB4LTQgdGV4dC1yaWdodCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3QgKm5nSWY9XCJlbGVtZW50LmRlZmF1bHRcIiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNvbG9yPVwicHJpbWFyeVwiIHNlbGVjdGVkPkRlZmF1bHQ8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyZWxhdGl2ZSB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItZ3JheS0yMDAgcHktMiBweC00IHRleHQtcmlnaHQgdGV4dC1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydib3JkZXItYi0wJzogaSA9PT0gbm90aWZpY2F0aW9uR3JvdXBzLmxlbmd0aCAtIDEsICdib3JkZXItYic6IGkgIT09IG5vdGlmaWNhdGlvbkdyb3Vwcy5sZW5ndGggLSAxfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiIChjbGljayk9XCJyZW1vdmVOb3RpZmljYXRpb24oZWxlbWVudC5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLXQgYmctZ3JheS01MCB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgcHktMSBweC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmctdG9vbGJhciBmbGV4IGFsaWduLWNlbnRlciBqdXN0aWZ5LWVuZFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTQwMCBtci0xMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dpbmcge3tvZmZzZXQuZ2V0VmFsdWUoKSArIDF9fSAtIHt7KHBhZ2UgKiBsaW1pdC5nZXRWYWx1ZSgpKSAtIChsaW1pdC5nZXRWYWx1ZSgpIC0gbm90aWZpY2F0aW9uR3JvdXBzLmxlbmd0aCl9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbdmFsdWVdPVwibGltaXQuZ2V0VmFsdWUoKVwiIChjaGFuZ2UpPVwicGFnZVNpemVDaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTggcC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCIxXCI+MTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjVcIj41PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiMTBcIj4xMDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjI1XCI+MjU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCI1MFwiPjUwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiMTAwXCI+MTAwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiMjUwXCI+MjUwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiMTAwMFwiPjEwMDA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJtci00XCIgKGNsaWNrKT1cImRlY3JlYXNlT2Zmc2V0KClcIiBbZGlzYWJsZWRdPVwicGFnZSA8PSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZXZyb25fbGVmdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJpbmNyZWFzZU9mZnNldCgpXCIgW2Rpc2FibGVkXT1cImVuZE9mUmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
|
|
3
|
-
import { BehaviorSubject, merge, Subject } from 'rxjs';
|
|
4
|
-
import { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators';
|
|
5
|
-
import * as lodash from 'lodash';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/material/legacy-dialog";
|
|
8
|
-
import * as i2 from "../../services/project.service";
|
|
9
|
-
import * as i3 from "../../services/tag.service";
|
|
10
|
-
import * as i4 from "@angular/common";
|
|
11
|
-
import * as i5 from "@angular/material/legacy-button";
|
|
12
|
-
import * as i6 from "@angular/material/icon";
|
|
13
|
-
import * as i7 from "@angular/cdk/drag-drop";
|
|
14
|
-
import * as i8 from "@angular/forms";
|
|
15
|
-
const _ = lodash.default;
|
|
16
|
-
export class ProjectPickerComponent {
|
|
17
|
-
constructor(dialogRef, data, projectService, tagService) {
|
|
18
|
-
this.dialogRef = dialogRef;
|
|
19
|
-
this.data = data;
|
|
20
|
-
this.projectService = projectService;
|
|
21
|
-
this.tagService = tagService;
|
|
22
|
-
this.projects = [];
|
|
23
|
-
this.addNew = false;
|
|
24
|
-
this.searchText = new BehaviorSubject('');
|
|
25
|
-
this.reload = new Subject();
|
|
26
|
-
this.activeProject = {};
|
|
27
|
-
this.isAdmin = false;
|
|
28
|
-
this.limit = 10;
|
|
29
|
-
this.offset = 0;
|
|
30
|
-
this.page = 1;
|
|
31
|
-
this.endOfResults = false;
|
|
32
|
-
this.updateProject = '';
|
|
33
|
-
}
|
|
34
|
-
ngOnInit() {
|
|
35
|
-
this.isAdmin = !!this.data.isAdmin;
|
|
36
|
-
this.activeProject = this.projectService.activeProject.getValue();
|
|
37
|
-
this.searchText.subscribe(() => {
|
|
38
|
-
this.page = 1;
|
|
39
|
-
this.offset = 0;
|
|
40
|
-
});
|
|
41
|
-
merge(this.searchText, this.reload).pipe(debounceTime(300), distinctUntilChanged(), switchMap(() => this.getProjects())).subscribe((projects) => {
|
|
42
|
-
this.projects = projects;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
increaseOffset() {
|
|
46
|
-
this.page = this.page + 1;
|
|
47
|
-
this.offset = (this.limit * this.page) - this.limit;
|
|
48
|
-
this.reload.next(Date.now());
|
|
49
|
-
}
|
|
50
|
-
decreaseOffset() {
|
|
51
|
-
this.page = this.page <= 1 ? 1 : this.page - 1;
|
|
52
|
-
this.offset = (this.limit * this.page) - this.limit;
|
|
53
|
-
this.reload.next(Date.now());
|
|
54
|
-
}
|
|
55
|
-
pageSizeChange(value) {
|
|
56
|
-
this.page = 1;
|
|
57
|
-
this.offset = 0;
|
|
58
|
-
this.limit = value;
|
|
59
|
-
this.reload.next(Date.now());
|
|
60
|
-
}
|
|
61
|
-
editProject(project) {
|
|
62
|
-
this.newName = project.name;
|
|
63
|
-
this.newDescription = project.description;
|
|
64
|
-
this.addNew = true;
|
|
65
|
-
this.updateProject = project.projectKey;
|
|
66
|
-
}
|
|
67
|
-
createProject() {
|
|
68
|
-
if (this.updateProject) {
|
|
69
|
-
return this.projectService.updateProject(this.newName, this.newDescription, this.updateProject)
|
|
70
|
-
.then(() => {
|
|
71
|
-
this.newName = '';
|
|
72
|
-
this.newDescription = '';
|
|
73
|
-
this.addNew = false;
|
|
74
|
-
this.updateProject = '';
|
|
75
|
-
this.reload.next(Date.now());
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
return this.projectService.createProject(this.newName, this.newDescription).then(() => {
|
|
79
|
-
this.newName = '';
|
|
80
|
-
this.newDescription = '';
|
|
81
|
-
this.addNew = false;
|
|
82
|
-
this.reload.next(Date.now());
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
removeProject(key) {
|
|
86
|
-
const message = 'Are you sure you would like to remove this project?';
|
|
87
|
-
if (window.confirm(message)) {
|
|
88
|
-
this.projectService.removeProject(key).then(() => {
|
|
89
|
-
if (this.projectService.activeProject.getValue() &&
|
|
90
|
-
this.projectService.activeProject.getValue().projectKey === key) {
|
|
91
|
-
this.projectService.resetActiveProject();
|
|
92
|
-
}
|
|
93
|
-
this.reload.next(Date.now());
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
activateProject(project) {
|
|
98
|
-
this.projectService.setActiveProject(project);
|
|
99
|
-
this.tagService.resetActiveTag();
|
|
100
|
-
this.dialogRef.close(project);
|
|
101
|
-
}
|
|
102
|
-
getProjects() {
|
|
103
|
-
return this.projectService.getProjects(this.searchText.getValue(), this.limit, this.offset).pipe(map((projects) => {
|
|
104
|
-
this.endOfResults = projects.length < this.limit;
|
|
105
|
-
return projects;
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
ProjectPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProjectPickerComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.ProjectService }, { token: i3.TagService }], target: i0.ɵɵFactoryTarget.Component });
|
|
110
|
-
ProjectPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProjectPickerComponent, selector: "ki-project-picker", host: { classAttribute: "dialog-wrapper" }, ngImport: i0, template: "<div class=\"dialog\" cdkDrag cdkDragRootElement=\".cdk-overlay-pane\">\n\n <div class=\"dialog-title\" cdkDragHandle>\n <h2 mat-dialog-title>Projects</h2>\n <button *ngIf=\"isAdmin\" mat-stroked-button color=\"primary\" (click)=\"addNew = !addNew\">\n <mat-icon>add</mat-icon>\n New Project\n </button>\n <button mat-icon-button mat-dialog-close *ngIf=\"activeProject\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content p-0\">\n\n <div class=\"h-full flex flex-col justify-between\">\n\n <div *ngIf=\"!addNew\" class=\"flex\">\n <div class=\"relative flex-grow focus-within:z-10\">\n <div\n class=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <svg class=\"h-5 w-5 text-gray-400\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\"\n clip-rule=\"evenodd\"/>\n </svg>\n </div>\n <input type=\"text\" name=\"mobile-search-candidate\"\n class=\"block w-full rounded-none pl-10 border-t-1 border-l-0 border-r-0 border-gray-300\"\n placeholder=\"Search for a project\"\n (keyup)=\"searchText.next($event.target.value)\">\n </div>\n </div>\n\n <div class=\"h-full flex-1 overflow-y-scroll\">\n <ng-template [ngIf]=\"!addNew\">\n <table class=\"min-w-full border-separate\" style=\"border-spacing: 0\">\n <thead class=\"bg-gray-100\">\n <tr>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Checked</span>\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Name\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Description\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Key\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Edit</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-white\">\n <tr *ngFor=\"let project of projects\"\n class=\"hover:bg-gray-50 cursor-pointer\">\n <td (click)=\"activateProject(project)\" class=\"whitespace-nowrap border-b border-gray-200 py-2 px-4 text-sm \">\n <mat-icon color=\"primary\"\n *ngIf=\"activeProject && activeProject.projectKey === project.projectKey\">\n check_circle\n </mat-icon>\n </td>\n <td (click)=\"activateProject(project)\" class=\"whitespace-nowrap border-b border-gray-200 py-2 px-4 text-sm font-medium text-gray-900\">\n {{ project.name }}\n </td>\n <td (click)=\"activateProject(project)\" class=\"border-b border-gray-200 py-2 px-4 text-sm text-gray-500\">\n {{ project.description }}\n </td>\n <td (click)=\"activateProject(project)\" class=\"whitespace-nowrap border-b border-gray-200 py-2 px-4 text-sm text-gray-500\">\n {{ project.projectKey }}\n </td>\n <td class=\"w-16 relative whitespace-nowrap border-b border-gray-200 py-2 px-4 text-right text-sm\">\n <div class=\"flex items-center justify-end\">\n <button mat-icon-button color=\"primary\"\n (click)=\"editProject(project)\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button color=\"warn\"\n (click)=\"removeProject(project.projectKey)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"p-4\">\n <p *ngIf=\"isAdmin && !projects.length\" class=\"m-4 font-light text-lg text-center\">\n Please create a new project to begin.\n </p>\n <p *ngIf=\"!isAdmin && !projects.length\" class=\"m-4 font-light text-lg text-center\">\n You have not been granted access to any projects. Please contact the account administrator.\n </p>\n </div>\n </ng-template>\n\n <div class=\"p-4\" *ngIf=\"addNew\">\n <div class=\"my-4\">\n <p><b>Project Name</b></p>\n <input class=\"full\" type=\"text\" placeholder=\"Enter project name\" [(ngModel)]=\"newName\">\n </div>\n <div class=\"my-4\">\n <p class=\"mt-1\"><b>Project Description</b></p>\n <input class=\"full\" type=\"text\" placeholder=\"Enter project description\"\n [(ngModel)]=\"newDescription\">\n </div>\n </div>\n </div>\n\n <div *ngIf=\"!addNew\"\n class=\"border-t bg-gray-50 whitespace-nowrap border-b border-gray-200 py-1 px-4 text-sm text-gray-900\">\n <div class=\"paging-toolbar flex align-center justify-end\">\n\n <div class=\"flex items-center justify-center\">\n <div class=\"text-xs text-gray-400 mr-10\">\n Showing {{ offset + 1 }}\n - {{ (page * limit) - (limit - projects.length) }}\n </div>\n <select [value]=\"limit\" (change)=\"pageSizeChange($event.target.value)\"\n class=\"p-1.5 mr-8\">\n <option [value]=\"1\">1</option>\n <option [value]=\"5\">5</option>\n <option [value]=\"10\">10</option>\n <option [value]=\"25\">25</option>\n <option [value]=\"50\">50</option>\n <option [value]=\"100\">100</option>\n <option [value]=\"250\">250</option>\n <option [value]=\"1000\">1000</option>\n </select>\n <button mat-icon-button class=\"mr-4\" (click)=\"decreaseOffset()\"\n [disabled]=\"page <= 1\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button (click)=\"increaseOffset()\" [disabled]=\"endOfResults\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n\n </div>\n </div>\n\n </div>\n\n </div>\n\n <div class=\"dialog-footer\">\n <button mat-button mat-dialog-close mat-stroked-button type=\"button\" *ngIf=\"!addNew && activeProject\">Close</button>\n <button mat-button mat-stroked-button type=\"button\" (click)=\"addNew = false;\" *ngIf=\"addNew\">Cancel</button>\n\n <button mat-button mat-flat-button color=\"primary\" type=\"button\" *ngIf=\"addNew\"\n (click)=\"createProject()\" [disabled]=\"!newName || !newDescription\">Save Project\n </button>\n </div>\n\n</div>\n\n\n", styles: [""], 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: "component", type: i5.MatLegacyButton, 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: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatLegacyDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProjectPickerComponent, decorators: [{
|
|
112
|
-
type: Component,
|
|
113
|
-
args: [{ selector: 'ki-project-picker', host: { class: 'dialog-wrapper' }, template: "<div class=\"dialog\" cdkDrag cdkDragRootElement=\".cdk-overlay-pane\">\n\n <div class=\"dialog-title\" cdkDragHandle>\n <h2 mat-dialog-title>Projects</h2>\n <button *ngIf=\"isAdmin\" mat-stroked-button color=\"primary\" (click)=\"addNew = !addNew\">\n <mat-icon>add</mat-icon>\n New Project\n </button>\n <button mat-icon-button mat-dialog-close *ngIf=\"activeProject\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content p-0\">\n\n <div class=\"h-full flex flex-col justify-between\">\n\n <div *ngIf=\"!addNew\" class=\"flex\">\n <div class=\"relative flex-grow focus-within:z-10\">\n <div\n class=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <svg class=\"h-5 w-5 text-gray-400\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\"\n clip-rule=\"evenodd\"/>\n </svg>\n </div>\n <input type=\"text\" name=\"mobile-search-candidate\"\n class=\"block w-full rounded-none pl-10 border-t-1 border-l-0 border-r-0 border-gray-300\"\n placeholder=\"Search for a project\"\n (keyup)=\"searchText.next($event.target.value)\">\n </div>\n </div>\n\n <div class=\"h-full flex-1 overflow-y-scroll\">\n <ng-template [ngIf]=\"!addNew\">\n <table class=\"min-w-full border-separate\" style=\"border-spacing: 0\">\n <thead class=\"bg-gray-100\">\n <tr>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Checked</span>\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Name\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Description\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 text-left text-xs font-semibold text-gray-900 backdrop-blur backdrop-filter\">\n Key\n </th>\n <th scope=\"col\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-50 bg-opacity-75 py-3.5 px-4 backdrop-blur backdrop-filter\">\n <span class=\"sr-only\">Edit</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-white\">\n <tr *ngFor=\"let project of projects\"\n class=\"hover:bg-gray-50 cursor-pointer\">\n <td (click)=\"activateProject(project)\" class=\"whitespace-nowrap border-b border-gray-200 py-2 px-4 text-sm \">\n <mat-icon color=\"primary\"\n *ngIf=\"activeProject && activeProject.projectKey === project.projectKey\">\n check_circle\n </mat-icon>\n </td>\n <td (click)=\"activateProject(project)\" class=\"whitespace-nowrap border-b border-gray-200 py-2 px-4 text-sm font-medium text-gray-900\">\n {{ project.name }}\n </td>\n <td (click)=\"activateProject(project)\" class=\"border-b border-gray-200 py-2 px-4 text-sm text-gray-500\">\n {{ project.description }}\n </td>\n <td (click)=\"activateProject(project)\" class=\"whitespace-nowrap border-b border-gray-200 py-2 px-4 text-sm text-gray-500\">\n {{ project.projectKey }}\n </td>\n <td class=\"w-16 relative whitespace-nowrap border-b border-gray-200 py-2 px-4 text-right text-sm\">\n <div class=\"flex items-center justify-end\">\n <button mat-icon-button color=\"primary\"\n (click)=\"editProject(project)\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button color=\"warn\"\n (click)=\"removeProject(project.projectKey)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"p-4\">\n <p *ngIf=\"isAdmin && !projects.length\" class=\"m-4 font-light text-lg text-center\">\n Please create a new project to begin.\n </p>\n <p *ngIf=\"!isAdmin && !projects.length\" class=\"m-4 font-light text-lg text-center\">\n You have not been granted access to any projects. Please contact the account administrator.\n </p>\n </div>\n </ng-template>\n\n <div class=\"p-4\" *ngIf=\"addNew\">\n <div class=\"my-4\">\n <p><b>Project Name</b></p>\n <input class=\"full\" type=\"text\" placeholder=\"Enter project name\" [(ngModel)]=\"newName\">\n </div>\n <div class=\"my-4\">\n <p class=\"mt-1\"><b>Project Description</b></p>\n <input class=\"full\" type=\"text\" placeholder=\"Enter project description\"\n [(ngModel)]=\"newDescription\">\n </div>\n </div>\n </div>\n\n <div *ngIf=\"!addNew\"\n class=\"border-t bg-gray-50 whitespace-nowrap border-b border-gray-200 py-1 px-4 text-sm text-gray-900\">\n <div class=\"paging-toolbar flex align-center justify-end\">\n\n <div class=\"flex items-center justify-center\">\n <div class=\"text-xs text-gray-400 mr-10\">\n Showing {{ offset + 1 }}\n - {{ (page * limit) - (limit - projects.length) }}\n </div>\n <select [value]=\"limit\" (change)=\"pageSizeChange($event.target.value)\"\n class=\"p-1.5 mr-8\">\n <option [value]=\"1\">1</option>\n <option [value]=\"5\">5</option>\n <option [value]=\"10\">10</option>\n <option [value]=\"25\">25</option>\n <option [value]=\"50\">50</option>\n <option [value]=\"100\">100</option>\n <option [value]=\"250\">250</option>\n <option [value]=\"1000\">1000</option>\n </select>\n <button mat-icon-button class=\"mr-4\" (click)=\"decreaseOffset()\"\n [disabled]=\"page <= 1\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button (click)=\"increaseOffset()\" [disabled]=\"endOfResults\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n\n </div>\n </div>\n\n </div>\n\n </div>\n\n <div class=\"dialog-footer\">\n <button mat-button mat-dialog-close mat-stroked-button type=\"button\" *ngIf=\"!addNew && activeProject\">Close</button>\n <button mat-button mat-stroked-button type=\"button\" (click)=\"addNew = false;\" *ngIf=\"addNew\">Cancel</button>\n\n <button mat-button mat-flat-button color=\"primary\" type=\"button\" *ngIf=\"addNew\"\n (click)=\"createProject()\" [disabled]=\"!newName || !newDescription\">Save Project\n </button>\n </div>\n\n</div>\n\n\n" }]
|
|
114
|
-
}], ctorParameters: function () { return [{ type: i1.MatLegacyDialogRef }, { type: undefined, decorators: [{
|
|
115
|
-
type: Inject,
|
|
116
|
-
args: [MAT_DIALOG_DATA]
|
|
117
|
-
}] }, { type: i2.ProjectService }, { type: i3.TagService }]; } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL3Byb2plY3QtcGlja2VyL3Byb2plY3QtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWtpbmludGVsL3NyYy9saWIvY29tcG9uZW50cy9wcm9qZWN0LXBpY2tlci9wcm9qZWN0LXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNILHNCQUFzQixJQUFJLGVBQWUsRUFFNUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHbEYsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFDakMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQVF6QixNQUFNLE9BQU8sc0JBQXNCO0lBaUIvQixZQUFtQixTQUErQyxFQUN0QixJQUFTLEVBQ2pDLGNBQThCLEVBQzlCLFVBQXNCO1FBSHZCLGNBQVMsR0FBVCxTQUFTLENBQXNDO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFsQm5DLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUdmLGVBQVUsR0FBRyxJQUFJLGVBQWUs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bkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBNQVRfTEVHQUNZX0RJQUxPR19EQVRBIGFzIE1BVF9ESUFMT0dfREFUQSxcbiAgICBNYXRMZWdhY3lEaWFsb2dSZWYgYXMgTWF0RGlhbG9nUmVmXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7UHJvamVjdFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQge1RhZ1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhZy5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIGxvZGFzaCBmcm9tICdsb2Rhc2gnO1xuY29uc3QgXyA9IGxvZGFzaC5kZWZhdWx0O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2tpLXByb2plY3QtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvamVjdC1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2plY3QtcGlja2VyLmNvbXBvbmVudC5zYXNzJ10sXG4gICAgaG9zdDoge2NsYXNzOiAnZGlhbG9nLXdyYXBwZXInfVxufSlcbmV4cG9ydCBjbGFzcyBQcm9qZWN0UGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHB1YmxpYyBwcm9qZWN0czogYW55ID0gW107XG4gICAgcHVibGljIGFkZE5ldyA9IGZhbHNlO1xuICAgIHB1YmxpYyBuZXdOYW1lO1xuICAgIHB1YmxpYyBuZXdEZXNjcmlwdGlvbjtcbiAgICBwdWJsaWMgc2VhcmNoVGV4dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgcHVibGljIHJlbG9hZCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHVibGljIGFjdGl2ZVByb2plY3Q6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBpc0FkbWluID0gZmFsc2U7XG4gICAgcHVibGljIGxpbWl0ID0gMTA7XG4gICAgcHVibGljIG9mZnNldCA9IDA7XG4gICAgcHVibGljIHBhZ2UgPSAxO1xuICAgIHB1YmxpYyBlbmRPZlJlc3VsdHMgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgdXBkYXRlUHJvamVjdCA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFByb2plY3RQaWNrZXJDb21wb25lbnQ+LFxuICAgICAgICAgICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgdGFnU2VydmljZTogVGFnU2VydmljZSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQWRtaW4gPSAhIXRoaXMuZGF0YS5pc0FkbWluO1xuICAgICAgICB0aGlzLmFjdGl2ZVByb2plY3QgPSB0aGlzLnByb2plY3RTZXJ2aWNlLmFjdGl2ZVByb2plY3QuZ2V0VmFsdWUoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFRleHQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKHRoaXMuc2VhcmNoVGV4dCwgdGhpcy5yZWxvYWQpLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb2plY3RzKClcbiAgICAgICAgICAgIClcbiAgICAgICAgKS5zdWJzY3JpYmUoKHByb2plY3RzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdHMgPSBwcm9qZWN0cztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluY3JlYXNlT2Zmc2V0KCkge1xuICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xuICAgICAgICB0aGlzLm9mZnNldCA9ICh0aGlzLmxpbWl0ICogdGhpcy5wYWdlKSAtIHRoaXMubGltaXQ7XG4gICAgICAgIHRoaXMucmVsb2FkLm5leHQoRGF0ZS5ub3coKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlY3JlYXNlT2Zmc2V0KCkge1xuICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgPD0gMSA/IDEgOiB0aGlzLnBhZ2UgLSAxO1xuICAgICAgICB0aGlzLm9mZnNldCA9ICh0aGlzLmxpbWl0ICogdGhpcy5wYWdlKSAtIHRoaXMubGltaXQ7XG4gICAgICAgIHRoaXMucmVsb2FkLm5leHQoRGF0ZS5ub3coKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhZ2VTaXplQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy5saW1pdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnJlbG9hZC5uZXh0KERhdGUubm93KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlZGl0UHJvamVjdChwcm9qZWN0OiBhbnkpIHtcbiAgICAgICAgdGhpcy5uZXdOYW1lID0gcHJvamVjdC5uYW1lO1xuICAgICAgICB0aGlzLm5ld0Rlc2NyaXB0aW9uID0gcHJvamVjdC5kZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5hZGROZXcgPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3QgPSBwcm9qZWN0LnByb2plY3RLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVByb2plY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZVByb2plY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2plY3RTZXJ2aWNlLnVwZGF0ZVByb2plY3QodGhpcy5uZXdOYW1lLCB0aGlzLm5ld0Rlc2NyaXB0aW9uLCB0aGlzLnVwZGF0ZVByb2plY3QpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld05hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdEZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE5ldyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3QgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQubmV4dChEYXRlLm5vdygpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0U2VydmljZS5jcmVhdGVQcm9qZWN0KHRoaXMubmV3TmFtZSwgdGhpcy5uZXdEZXNjcmlwdGlvbikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5ld05hbWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMubmV3RGVzY3JpcHRpb24gPSAnJztcbiAgICAgICAgICAgIHRoaXMuYWRkTmV3ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZC5uZXh0KERhdGUubm93KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlUHJvamVjdChrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byByZW1vdmUgdGhpcyBwcm9qZWN0Pyc7XG4gICAgICAgIGlmICh3aW5kb3cuY29uZmlybShtZXNzYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5yZW1vdmVQcm9qZWN0KGtleSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdFNlcnZpY2UuYWN0aXZlUHJvamVjdC5nZXRWYWx1ZSgpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UuYWN0aXZlUHJvamVjdC5nZXRWYWx1ZSgpLnByb2plY3RLZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnJlc2V0QWN0aXZlUHJvamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZC5uZXh0KERhdGUubm93KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVQcm9qZWN0KHByb2plY3QpIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5zZXRBY3RpdmVQcm9qZWN0KHByb2plY3QpO1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UucmVzZXRBY3RpdmVUYWcoKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocHJvamVjdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9qZWN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdFNlcnZpY2UuZ2V0UHJvamVjdHMoXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRleHQuZ2V0VmFsdWUoKSxcbiAgICAgICAgICAgIHRoaXMubGltaXQsXG4gICAgICAgICAgICB0aGlzLm9mZnNldFxuICAgICAgICApLnBpcGUobWFwKChwcm9qZWN0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRPZlJlc3VsdHMgPSBwcm9qZWN0cy5sZW5ndGggPCB0aGlzLmxpbWl0O1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9qZWN0cztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nXCIgY2RrRHJhZyBjZGtEcmFnUm9vdEVsZW1lbnQ9XCIuY2RrLW92ZXJsYXktcGFuZVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy10aXRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPlByb2plY3RzPC9oMj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzQWRtaW5cIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFkZE5ldyA9ICFhZGROZXdcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgTmV3IFByb2plY3RcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgKm5nSWY9XCJhY3RpdmVQcm9qZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGVudCBwLTBcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuXCI+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhYWRkTmV3XCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXgtZ3JvdyBmb2N1cy13aXRoaW46ei0xMFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgcGwtMyBmbGV4IGl0ZW1zLWNlbnRlciBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC01IHctNSB0ZXh0LWdyYXktNDAwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04IDRhNCA0IDAgMTAwIDggNCA0IDAgMDAwLTh6TTIgOGE2IDYgMCAxMTEwLjg5IDMuNDc2bDQuODE3IDQuODE3YTEgMSAwIDAxLTEuNDE0IDEuNDE0bC00LjgxNi00LjgxNkE2IDYgMCAwMTIgOHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJtb2JpbGUtc2VhcmNoLWNhbmRpZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJsb2NrIHctZnVsbCByb3VuZGVkLW5vbmUgcGwtMTAgYm9yZGVyLXQtMSBib3JkZXItbC0wIGJvcmRlci1yLTAgYm9yZGVyLWdyYXktMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBhIHByb2plY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlYXJjaFRleHQubmV4dCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleC0xIG92ZXJmbG93LXktc2Nyb2xsXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFhZGROZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwibWluLXctZnVsbCBib3JkZXItc2VwYXJhdGVcIiBzdHlsZT1cImJvcmRlci1zcGFjaW5nOiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJiZy1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMzAwIGJnLWdyYXktNTAgYmctb3BhY2l0eS03NSBweS0zLjUgcHgtNCBiYWNrZHJvcC1ibHVyIGJhY2tkcm9wLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DaGVja2VkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3kgdG9wLTAgei0xMCBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgYmctZ3JheS01MCBiZy1vcGFjaXR5LTc1IHB5LTMuNSBweC00IHRleHQtbGVmdCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBiYWNrZHJvcC1ibHVyIGJhY2tkcm9wLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0aWNreSB0b3AtMCB6LTEwIGJvcmRlci1iIGJvcmRlci1ncmF5LTMwMCBiZy1ncmF5LTUwIGJnLW9wYWNpdHktNzUgcHktMy41IHB4LTQgdGV4dC1sZWZ0IHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIGJhY2tkcm9wLWJsdXIgYmFja2Ryb3AtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0aWNreSB0b3AtMCB6LTEwIGJvcmRlci1iIGJvcmRlci1ncmF5LTMwMCBiZy1ncmF5LTUwIGJnLW9wYWNpdHktNzUgcHktMy41IHB4LTQgdGV4dC1sZWZ0IHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIGJhY2tkcm9wLWJsdXIgYmFja2Ryb3AtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3kgdG9wLTAgei0xMCBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgYmctZ3JheS01MCBiZy1vcGFjaXR5LTc1IHB5LTMuNSBweC00IGJhY2tkcm9wLWJsdXIgYmFja2Ryb3AtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkVkaXQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcHJvamVjdCBvZiBwcm9qZWN0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJob3ZlcjpiZy1ncmF5LTUwIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJhY3RpdmF0ZVByb2plY3QocHJvamVjdClcIiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBweS0yIHB4LTQgdGV4dC1zbSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVByb2plY3QgJiYgYWN0aXZlUHJvamVjdC5wcm9qZWN0S2V5ID09PSBwcm9qZWN0LnByb2plY3RLZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2NpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJhY3RpdmF0ZVByb2plY3QocHJvamVjdClcIiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBweS0yIHB4LTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2plY3QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJhY3RpdmF0ZVByb2plY3QocHJvamVjdClcIiBjbGFzcz1cImJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBweS0yIHB4LTQgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2plY3QuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAoY2xpY2spPVwiYWN0aXZhdGVQcm9qZWN0KHByb2plY3QpXCIgY2xhc3M9XCJ3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgcHktMiBweC00IHRleHQtc20gdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBwcm9qZWN0LnByb2plY3RLZXkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInctMTYgcmVsYXRpdmUgd2hpdGVzcGFjZS1ub3dyYXAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIHB5LTIgcHgtNCB0ZXh0LXJpZ2h0IHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFByb2plY3QocHJvamVjdClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQcm9qZWN0KHByb2plY3QucHJvamVjdEtleSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImlzQWRtaW4gJiYgIXByb2plY3RzLmxlbmd0aFwiIGNsYXNzPVwibS00IGZvbnQtbGlnaHQgdGV4dC1sZyB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjcmVhdGUgYSBuZXcgcHJvamVjdCB0byBiZWdpbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWlzQWRtaW4gJiYgIXByb2plY3RzLmxlbmd0aFwiIGNsYXNzPVwibS00IGZvbnQtbGlnaHQgdGV4dC1sZyB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIG5vdCBiZWVuIGdyYW50ZWQgYWNjZXNzIHRvIGFueSBwcm9qZWN0cy4gUGxlYXNlIGNvbnRhY3QgdGhlIGFjY291bnQgYWRtaW5pc3RyYXRvci5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTRcIiAqbmdJZj1cImFkZE5ld1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGI+UHJvamVjdCBOYW1lPC9iPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ1bGxcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcHJvamVjdCBuYW1lXCIgWyhuZ01vZGVsKV09XCJuZXdOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0xXCI+PGI+UHJvamVjdCBEZXNjcmlwdGlvbjwvYj48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmdWxsXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHByb2plY3QgZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3RGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhZGROZXdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLXQgYmctZ3JheS01MCB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgcHktMSBweC00IHRleHQtc20gdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmctdG9vbGJhciBmbGV4IGFsaWduLWNlbnRlciBqdXN0aWZ5LWVuZFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTQwMCBtci0xMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dpbmcge3sgb2Zmc2V0ICsgMSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ge3sgKHBhZ2UgKiBsaW1pdCkgLSAobGltaXQgLSBwcm9qZWN0cy5sZW5ndGgpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW3ZhbHVlXT1cImxpbWl0XCIgKGNoYW5nZSk9XCJwYWdlU2l6ZUNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0xLjUgbXItOFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjFcIj4xPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiNVwiPjU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCIxMFwiPjEwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiMjVcIj4yNTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjUwXCI+NTA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCIxMDBcIj4xMDA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCIyNTBcIj4yNTA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCIxMDAwXCI+MTAwMDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm1yLTRcIiAoY2xpY2spPVwiZGVjcmVhc2VPZmZzZXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdlIDw9IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2hldnJvbl9sZWZ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImluY3JlYXNlT2Zmc2V0KClcIiBbZGlzYWJsZWRdPVwiZW5kT2ZSZXN1bHRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFhZGROZXcgJiYgYWN0aXZlUHJvamVjdFwiPkNsb3NlPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGROZXcgPSBmYWxzZTtcIiAqbmdJZj1cImFkZE5ld1wiPkNhbmNlbDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiYWRkTmV3XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlUHJvamVjdCgpXCIgW2Rpc2FibGVkXT1cIiFuZXdOYW1lIHx8ICFuZXdEZXNjcmlwdGlvblwiPlNhdmUgUHJvamVjdFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG5cblxuIl19
|