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,111 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
|
|
4
|
-
import * as lodash from 'lodash';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/legacy-dialog";
|
|
7
|
-
import * as i2 from "../../../services/dataset.service";
|
|
8
|
-
import * as i3 from "../../../services/datasource.service";
|
|
9
|
-
import * as i4 from "@angular/common";
|
|
10
|
-
import * as i5 from "@angular/material/legacy-button";
|
|
11
|
-
import * as i6 from "@angular/material/icon";
|
|
12
|
-
import * as i7 from "@angular/cdk/drag-drop";
|
|
13
|
-
import * as i8 from "@angular/material/stepper";
|
|
14
|
-
import * as i9 from "../../dataset/dataset-editor/dataset-parameter-values/dataset-parameter-values.component";
|
|
15
|
-
import * as i10 from "../../data-picker/data-picker.component";
|
|
16
|
-
const _ = lodash.default;
|
|
17
|
-
export class SourceSelectorDialogComponent {
|
|
18
|
-
constructor(dialogRef, data, datasetService, datasourceService) {
|
|
19
|
-
this.dialogRef = dialogRef;
|
|
20
|
-
this.data = data;
|
|
21
|
-
this.datasetService = datasetService;
|
|
22
|
-
this.datasourceService = datasourceService;
|
|
23
|
-
this.Object = Object;
|
|
24
|
-
this.datasources = [];
|
|
25
|
-
this.datasets = [];
|
|
26
|
-
this.sharedDatasets = [];
|
|
27
|
-
this.snapshots = [];
|
|
28
|
-
this.requiredParameters = [];
|
|
29
|
-
this.updateParams = new Subject();
|
|
30
|
-
}
|
|
31
|
-
ngOnInit() {
|
|
32
|
-
this.dashboardDatasetInstance = this.data.dashboardDatasetInstance;
|
|
33
|
-
this.dashboard = this.data.dashboard;
|
|
34
|
-
this.admin = this.data.admin;
|
|
35
|
-
}
|
|
36
|
-
setEvaluatedParameters(parameterValues, evaluate) {
|
|
37
|
-
this.requiredParameters = parameterValues;
|
|
38
|
-
if (!this.dashboardDatasetInstance.parameterValues || Array.isArray(this.dashboardDatasetInstance.parameterValues)) {
|
|
39
|
-
this.dashboardDatasetInstance.parameterValues = {};
|
|
40
|
-
}
|
|
41
|
-
parameterValues.forEach(param => {
|
|
42
|
-
this.dashboardDatasetInstance.parameterValues[param.name] = param.value;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
async select(action, stepper) {
|
|
46
|
-
if (action.datasourceKey) {
|
|
47
|
-
this.dashboardDatasetInstance = {
|
|
48
|
-
datasetInstanceId: null,
|
|
49
|
-
datasourceInstanceKey: action.datasourceKey,
|
|
50
|
-
transformationInstances: [],
|
|
51
|
-
parameterValues: {},
|
|
52
|
-
parameters: []
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
else if (action.datasetId) {
|
|
56
|
-
this.dashboardDatasetInstance = await this.datasetService.getExtendedDataset(action.datasetId);
|
|
57
|
-
}
|
|
58
|
-
if (this.data.dashboardItemInstanceKey) {
|
|
59
|
-
this.dashboardDatasetInstance.instanceKey = this.data.dashboardItemInstanceKey;
|
|
60
|
-
}
|
|
61
|
-
return this.datasetService.getEvaluatedParameters(this.dashboardDatasetInstance).then((requiredParams) => {
|
|
62
|
-
this.createParameterStructure(requiredParams, stepper);
|
|
63
|
-
return requiredParams;
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
setParameters() {
|
|
67
|
-
this.updateParams.next(Date.now());
|
|
68
|
-
this.dialogRef.close(this.dashboardDatasetInstance);
|
|
69
|
-
}
|
|
70
|
-
createParameterStructure(requiredParameters, stepper) {
|
|
71
|
-
this.requiredParameters = requiredParameters;
|
|
72
|
-
const availableGlobalParamValues = [];
|
|
73
|
-
if (this.dashboard.layoutSettings.parameters) {
|
|
74
|
-
_.forEach(this.dashboard.layoutSettings.parameters, parameter => {
|
|
75
|
-
availableGlobalParamValues.push({
|
|
76
|
-
name: parameter.name,
|
|
77
|
-
title: parameter.title,
|
|
78
|
-
value: parameter.value
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
if (availableGlobalParamValues.length) {
|
|
83
|
-
this.requiredParameters.map(requiredParameter => {
|
|
84
|
-
requiredParameter._prevType = requiredParameter.type;
|
|
85
|
-
requiredParameter.type = 'global';
|
|
86
|
-
requiredParameter.values = availableGlobalParamValues;
|
|
87
|
-
requiredParameter.selectedValue = 'global';
|
|
88
|
-
requiredParameter.value = '';
|
|
89
|
-
return requiredParameter;
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
if (this.requiredParameters.length) {
|
|
93
|
-
setTimeout(() => {
|
|
94
|
-
stepper.next();
|
|
95
|
-
}, 0);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
this.dialogRef.close(this.dashboardDatasetInstance);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
SourceSelectorDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SourceSelectorDialogComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.DatasetService }, { token: i3.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
103
|
-
SourceSelectorDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SourceSelectorDialogComponent, selector: "ki-source-selector-dialog", 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>Select Data Source</h2>\n\n <button mat-icon-button mat-dialog-close>\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content p-0\">\n <mat-horizontal-stepper #stepper>\n\n <mat-step label=\"Select your data source\">\n\n <ki-data-picker class=\"block\" style=\"height: 620px\" [admin]=\"admin\" (selected)=\"select($event, stepper)\"></ki-data-picker>\n\n </mat-step>\n\n <mat-step label=\"Parameters required\" *ngIf=\"requiredParameters.length\">\n\n <div class=\"parameter-values mt-4\">\n <ki-dataset-parameter-values [parameterValues]=\"requiredParameters\" [(evaluatedDatasource)]=\"dashboardDatasetInstance\"\n [update]=\"updateParams\"\n (changed)=\"setEvaluatedParameters($event, true)\"></ki-dataset-parameter-values>\n </div>\n\n </mat-step>\n\n </mat-horizontal-stepper>\n\n\n\n </div>\n\n <div class=\"dialog-footer\">\n\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\n\n <button mat-flat-button color=\"primary\" *ngIf=\"stepper.selectedIndex === 1\"\n (click)=\"setParameters()\">\n Apply Parameters\n </button>\n </div>\n\n</div>\n\n\n", styles: ["table th{background-color:#f5f5f5}\n"], dependencies: [{ 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: "component", type: i8.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "component", type: i8.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "component", type: i9.DatasetParameterValuesComponent, selector: "ki-dataset-parameter-values", inputs: ["parameterValues", "focusParameters", "evaluatedDatasource", "showNewOnOpen", "hideNew", "update"], outputs: ["changed", "evaluatedDatasourceChange"] }, { kind: "component", type: i10.DataPickerComponent, selector: "ki-data-picker", inputs: ["admin", "typeMapping"], outputs: ["selected"] }] });
|
|
104
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SourceSelectorDialogComponent, decorators: [{
|
|
105
|
-
type: Component,
|
|
106
|
-
args: [{ selector: 'ki-source-selector-dialog', 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>Select Data Source</h2>\n\n <button mat-icon-button mat-dialog-close>\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n <div class=\"dialog-content p-0\">\n <mat-horizontal-stepper #stepper>\n\n <mat-step label=\"Select your data source\">\n\n <ki-data-picker class=\"block\" style=\"height: 620px\" [admin]=\"admin\" (selected)=\"select($event, stepper)\"></ki-data-picker>\n\n </mat-step>\n\n <mat-step label=\"Parameters required\" *ngIf=\"requiredParameters.length\">\n\n <div class=\"parameter-values mt-4\">\n <ki-dataset-parameter-values [parameterValues]=\"requiredParameters\" [(evaluatedDatasource)]=\"dashboardDatasetInstance\"\n [update]=\"updateParams\"\n (changed)=\"setEvaluatedParameters($event, true)\"></ki-dataset-parameter-values>\n </div>\n\n </mat-step>\n\n </mat-horizontal-stepper>\n\n\n\n </div>\n\n <div class=\"dialog-footer\">\n\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\n\n <button mat-flat-button color=\"primary\" *ngIf=\"stepper.selectedIndex === 1\"\n (click)=\"setParameters()\">\n Apply Parameters\n </button>\n </div>\n\n</div>\n\n\n", styles: ["table th{background-color:#f5f5f5}\n"] }]
|
|
107
|
-
}], ctorParameters: function () { return [{ type: i1.MatLegacyDialogRef }, { type: undefined, decorators: [{
|
|
108
|
-
type: Inject,
|
|
109
|
-
args: [MAT_DIALOG_DATA]
|
|
110
|
-
}] }, { type: i2.DatasetService }, { type: i3.DatasourceService }]; } });
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLXNlbGVjdG9yLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raW5pbnRlbC9zcmMvbGliL2NvbXBvbmVudHMvZGFzaGJvYXJkLWVkaXRvci9zb3VyY2Utc2VsZWN0b3ItZGlhbG9nL3NvdXJjZS1zZWxlY3Rvci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2luaW50ZWwvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC1lZGl0b3Ivc291cmNlLXNlbGVjdG9yLWRpYWxvZy9zb3VyY2Utc2VsZWN0b3ItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFDLHNCQUFzQixJQUFJLGVBQWUsRUFBcUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5SCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7O0FBQ2pDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFRekIsTUFBTSxPQUFPLDZCQUE2QjtJQWF0QyxZQUFtQixTQUFzRCxFQUM3QixJQUFTLEVBQ2pDLGNBQThCLEVBQzlCLGlCQUFvQztRQUhyQyxjQUFTLEdBQVQsU0FBUyxDQUE2QztRQUM3QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBZGpELFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDaEIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixt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bmplY3QsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEYXRhc2V0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGF0YXNldC5zZXJ2aWNlJztcbmltcG9ydCB7RGF0YXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2RhdGFzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge01BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBLCBNYXRMZWdhY3lEaWFsb2dSZWYgYXMgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCAqIGFzIGxvZGFzaCBmcm9tICdsb2Rhc2gnO1xuY29uc3QgXyA9IGxvZGFzaC5kZWZhdWx0O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2tpLXNvdXJjZS1zZWxlY3Rvci1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zb3VyY2Utc2VsZWN0b3ItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zb3VyY2Utc2VsZWN0b3ItZGlhbG9nLmNvbXBvbmVudC5zYXNzJ10sXG4gICAgaG9zdDoge2NsYXNzOiAnZGlhbG9nLXdyYXBwZXInfVxufSlcbmV4cG9ydCBjbGFzcyBTb3VyY2VTZWxlY3RvckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgT2JqZWN0ID0gT2JqZWN0O1xuICAgIHB1YmxpYyBkYXRhc291cmNlczogYW55ID0gW107XG4gICAgcHVibGljIGRhdGFzZXRzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgc2hhcmVkRGF0YXNldHM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyBzbmFwc2hvdHM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyBkYXNoYm9hcmREYXRhc2V0SW5zdGFuY2U6IGFueTtcbiAgICBwdWJsaWMgcmVxdWlyZWRQYXJhbWV0ZXJzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgdXBkYXRlUGFyYW1zID0gbmV3IFN1YmplY3QoKTtcbiAgICBwdWJsaWMgZGFzaGJvYXJkOiBhbnk7XG4gICAgcHVibGljIGFkbWluOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNvdXJjZVNlbGVjdG9yRGlhbG9nQ29tcG9uZW50PixcbiAgICAgICAgICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRhdGFzZXRTZXJ2aWNlOiBEYXRhc2V0U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRhdGFzb3VyY2VTZXJ2aWNlOiBEYXRhc291cmNlU2VydmljZSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhc2hib2FyZERhdGFzZXRJbnN0YW5jZSA9IHRoaXMuZGF0YS5kYXNoYm9hcmREYXRhc2V0SW5zdGFuY2U7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5kYXRhLmRhc2hib2FyZDtcbiAgICAgICAgdGhpcy5hZG1pbiA9IHRoaXMuZGF0YS5hZG1pbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXZhbHVhdGVkUGFyYW1ldGVycyhwYXJhbWV0ZXJWYWx1ZXMsIGV2YWx1YXRlPykge1xuICAgICAgICB0aGlzLnJlcXVpcmVkUGFyYW1ldGVycyA9IHBhcmFtZXRlclZhbHVlcztcbiAgICAgICAgaWYgKCF0aGlzLmRhc2hib2FyZERhdGFzZXRJbnN0YW5jZS5wYXJhbWV0ZXJWYWx1ZXMgfHwgQXJyYXkuaXNBcnJheSh0aGlzLmRhc2hib2FyZERhdGFzZXRJbnN0YW5jZS5wYXJhbWV0ZXJWYWx1ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZERhdGFzZXRJbnN0YW5jZS5wYXJhbWV0ZXJWYWx1ZXMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbWV0ZXJWYWx1ZXMuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZERhdGFzZXRJbnN0YW5jZS5wYXJhbWV0ZXJWYWx1ZXNbcGFyYW0ubmFtZV0gPSBwYXJhbS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlbGVjdChhY3Rpb24sIHN0ZXBwZXI/KSB7XG4gICAgICAgIGlmIChhY3Rpb24uZGF0YXNvdXJjZUtleSkge1xuICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmREYXRhc2V0SW5zdGFuY2UgPSB7XG4gICAgICAgICAgICAgICAgZGF0YXNldEluc3RhbmNlSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZGF0YXNvdXJjZUluc3RhbmNlS2V5OiBhY3Rpb24uZGF0YXNvdXJjZUtleSxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbkluc3RhbmNlczogW10sXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWVzOiB7fSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZGF0YXNldElkKSB7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZERhdGFzZXRJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RXh0ZW5kZWREYXRhc2V0KGFjdGlvbi5kYXRhc2V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5kYXNoYm9hcmRJdGVtSW5zdGFuY2VLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRGF0YXNldEluc3RhbmNlLmluc3RhbmNlS2V5ID0gdGhpcy5kYXRhLmRhc2hib2FyZEl0ZW1JbnN0YW5jZUtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldEV2YWx1YXRlZFBhcmFtZXRlcnModGhpcy5kYXNoYm9hcmREYXRhc2V0SW5zdGFuY2UpLnRoZW4oKHJlcXVpcmVkUGFyYW1zOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUGFyYW1ldGVyU3RydWN0dXJlKHJlcXVpcmVkUGFyYW1zLCBzdGVwcGVyKTtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlZFBhcmFtcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBhcmFtZXRlcnMoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFyYW1zLm5leHQoRGF0ZS5ub3coKSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuZGFzaGJvYXJkRGF0YXNldEluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVBhcmFtZXRlclN0cnVjdHVyZShyZXF1aXJlZFBhcmFtZXRlcnMsIHN0ZXBwZXI/KSB7XG4gICAgICAgIHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJzID0gcmVxdWlyZWRQYXJhbWV0ZXJzO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVHbG9iYWxQYXJhbVZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQubGF5b3V0U2V0dGluZ3MucGFyYW1ldGVycykge1xuICAgICAgICAgICAgXy5mb3JFYWNoKHRoaXMuZGFzaGJvYXJkLmxheW91dFNldHRpbmdzLnBhcmFtZXRlcnMsIHBhcmFtZXRlciA9PiB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlR2xvYmFsUGFyYW1WYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmFtZXRlci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyYW1ldGVyLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGFyYW1ldGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdmFpbGFibGVHbG9iYWxQYXJhbVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJzLm1hcChyZXF1aXJlZFBhcmFtZXRlciA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIuX3ByZXZUeXBlID0gcmVxdWlyZWRQYXJhbWV0ZXIudHlwZTtcbiAgICAgICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlci50eXBlID0gJ2dsb2JhbCc7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIudmFsdWVzID0gYXZhaWxhYmxlR2xvYmFsUGFyYW1WYWx1ZXM7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIuc2VsZWN0ZWRWYWx1ZSA9ICdnbG9iYWwnO1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkUGFyYW1ldGVyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlZFBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdGVwcGVyLm5leHQoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5kYXNoYm9hcmREYXRhc2V0SW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nXCIgY2RrRHJhZyBjZGtEcmFnUm9vdEVsZW1lbnQ9XCIuY2RrLW92ZXJsYXktcGFuZVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy10aXRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPlNlbGVjdCBEYXRhIFNvdXJjZTwvaDI+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0LWRpYWxvZy1jbG9zZT5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50IHAtMFwiPlxuICAgICAgICA8bWF0LWhvcml6b250YWwtc3RlcHBlciAjc3RlcHBlcj5cblxuICAgICAgICAgICAgPG1hdC1zdGVwIGxhYmVsPVwiU2VsZWN0IHlvdXIgZGF0YSBzb3VyY2VcIj5cblxuICAgICAgICAgICAgICAgIDxraS1kYXRhLXBpY2tlciBjbGFzcz1cImJsb2NrXCIgc3R5bGU9XCJoZWlnaHQ6IDYyMHB4XCIgW2FkbWluXT1cImFkbWluXCIgKHNlbGVjdGVkKT1cInNlbGVjdCgkZXZlbnQsIHN0ZXBwZXIpXCI+PC9raS1kYXRhLXBpY2tlcj5cblxuICAgICAgICAgICAgPC9tYXQtc3RlcD5cblxuICAgICAgICAgICAgPG1hdC1zdGVwIGxhYmVsPVwiUGFyYW1ldGVycyByZXF1aXJlZFwiICpuZ0lmPVwicmVxdWlyZWRQYXJhbWV0ZXJzLmxlbmd0aFwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtZXRlci12YWx1ZXMgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8a2ktZGF0YXNldC1wYXJhbWV0ZXItdmFsdWVzIFtwYXJhbWV0ZXJWYWx1ZXNdPVwicmVxdWlyZWRQYXJhbWV0ZXJzXCIgWyhldmFsdWF0ZWREYXRhc291cmNlKV09XCJkYXNoYm9hcmREYXRhc2V0SW5zdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1cGRhdGVdPVwidXBkYXRlUGFyYW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlZCk9XCJzZXRFdmFsdWF0ZWRQYXJhbWV0ZXJzKCRldmVudCwgdHJ1ZSlcIj48L2tpLWRhdGFzZXQtcGFyYW1ldGVyLXZhbHVlcz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9tYXQtc3RlcD5cblxuICAgICAgICA8L21hdC1ob3Jpem9udGFsLXN0ZXBwZXI+XG5cblxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWZvb3RlclwiPlxuXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1kaWFsb2ctY2xvc2U+Q2FuY2VsPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJzdGVwcGVyLnNlbGVjdGVkSW5kZXggPT09IDFcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldFBhcmFtZXRlcnMoKVwiPlxuICAgICAgICAgICAgQXBwbHkgUGFyYW1ldGVyc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG5cblxuIl19
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { Component, Inject, Input } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, merge, Subject } from 'rxjs';
|
|
3
|
-
import { debounceTime, map, switchMap } from 'rxjs/operators';
|
|
4
|
-
import { KININTEL_CONFIG } from '../../kinintel-config';
|
|
5
|
-
import { MetadataComponent } from '../metadata/metadata.component';
|
|
6
|
-
import * as lodash from 'lodash';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/router";
|
|
9
|
-
import * as i2 from "../../services/tag.service";
|
|
10
|
-
import * as i3 from "../../services/project.service";
|
|
11
|
-
import * as i4 from "../../services/dashboard.service";
|
|
12
|
-
import * as i5 from "@angular/material/legacy-dialog";
|
|
13
|
-
import * as i6 from "@angular/common";
|
|
14
|
-
import * as i7 from "@angular/material/legacy-button";
|
|
15
|
-
import * as i8 from "@angular/material/icon";
|
|
16
|
-
import * as i9 from "@angular/material/legacy-menu";
|
|
17
|
-
import * as i10 from "@angular/material/chips";
|
|
18
|
-
import * as i11 from "@angular/forms";
|
|
19
|
-
const _ = lodash.default;
|
|
20
|
-
export class DashboardsComponent {
|
|
21
|
-
constructor(router, tagService, projectService, dashboardService, dialog, config) {
|
|
22
|
-
this.router = router;
|
|
23
|
-
this.tagService = tagService;
|
|
24
|
-
this.projectService = projectService;
|
|
25
|
-
this.dashboardService = dashboardService;
|
|
26
|
-
this.dialog = dialog;
|
|
27
|
-
this.config = config;
|
|
28
|
-
this.viewURL = '/dashboards/view/';
|
|
29
|
-
this.dashboards = [];
|
|
30
|
-
this.searchText = new BehaviorSubject('');
|
|
31
|
-
this.limit = 10;
|
|
32
|
-
this.offset = 0;
|
|
33
|
-
this.page = 1;
|
|
34
|
-
this.endOfResults = false;
|
|
35
|
-
this.activeTagSub = new Subject();
|
|
36
|
-
this.projectSub = new Subject();
|
|
37
|
-
this.categories = [];
|
|
38
|
-
this.filteredCategories = [];
|
|
39
|
-
this.Date = Date;
|
|
40
|
-
this.reload = new Subject();
|
|
41
|
-
this.loading = true;
|
|
42
|
-
}
|
|
43
|
-
ngOnInit() {
|
|
44
|
-
if (this.tagService) {
|
|
45
|
-
this.activeTagSub = this.tagService.activeTag;
|
|
46
|
-
this.tagSub = this.tagService.activeTag.subscribe(tag => this.activeTag = tag);
|
|
47
|
-
}
|
|
48
|
-
if (this.projectService) {
|
|
49
|
-
this.projectSub = this.projectService.activeProject;
|
|
50
|
-
}
|
|
51
|
-
merge(this.searchText, this.activeTagSub, this.projectSub, this.reload)
|
|
52
|
-
.pipe(debounceTime(300),
|
|
53
|
-
// distinctUntilChanged(),
|
|
54
|
-
switchMap(() => this.getDashboards())).subscribe((dashboards) => {
|
|
55
|
-
this.dashboards = dashboards;
|
|
56
|
-
this.loading = false;
|
|
57
|
-
});
|
|
58
|
-
this.getCategories();
|
|
59
|
-
this.searchText.subscribe(() => {
|
|
60
|
-
this.page = 1;
|
|
61
|
-
this.offset = 0;
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
edit(id) {
|
|
65
|
-
const route = _.filter(this.router.url.split('/'))[0];
|
|
66
|
-
this.router.navigateByUrl(`${this.editURL || route}/${id}${this.admin ? '?a=true' : ''}`);
|
|
67
|
-
}
|
|
68
|
-
copy(id) {
|
|
69
|
-
const route = _.filter(this.router.url.split('/'))[0];
|
|
70
|
-
this.router.navigateByUrl(`${this.editURL || route}/copy/${id}${this.admin ? '?a=true' : ''}`);
|
|
71
|
-
}
|
|
72
|
-
extend(id) {
|
|
73
|
-
const route = _.filter(this.router.url.split('/'))[0];
|
|
74
|
-
this.router.navigateByUrl(`${this.editURL || route}/extend/${id}${this.admin ? '?a=true' : ''}`);
|
|
75
|
-
}
|
|
76
|
-
delete(id) {
|
|
77
|
-
const message = 'Are you sure you would like to completely delete this Dashboard?';
|
|
78
|
-
if (window.confirm(message)) {
|
|
79
|
-
this.dashboardService.removeDashboard(id).then(() => {
|
|
80
|
-
this.reload.next(Date.now());
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
toggleCategory(event, category) {
|
|
85
|
-
event.stopPropagation();
|
|
86
|
-
category.checked = !category.checked;
|
|
87
|
-
this.updateCategoryFilters();
|
|
88
|
-
}
|
|
89
|
-
updateCategoryFilters() {
|
|
90
|
-
this.offset = 0;
|
|
91
|
-
this.page = 1;
|
|
92
|
-
this.reload.next(Date.now());
|
|
93
|
-
}
|
|
94
|
-
editMetadata(searchResult) {
|
|
95
|
-
const dialogRef = this.dialog.open(MetadataComponent, {
|
|
96
|
-
width: '700px',
|
|
97
|
-
height: '900px',
|
|
98
|
-
data: {
|
|
99
|
-
metadata: _.clone(searchResult),
|
|
100
|
-
service: this.dashboardService
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
dialogRef.afterClosed().subscribe(res => {
|
|
104
|
-
if (res) {
|
|
105
|
-
this.reload.next(Date.now());
|
|
106
|
-
this.getCategories();
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
removeActiveTag() {
|
|
111
|
-
this.tagService.resetActiveTag();
|
|
112
|
-
}
|
|
113
|
-
increaseOffset() {
|
|
114
|
-
this.page = this.page + 1;
|
|
115
|
-
this.offset = (this.limit * this.page) - this.limit;
|
|
116
|
-
this.reload.next(Date.now());
|
|
117
|
-
}
|
|
118
|
-
decreaseOffset() {
|
|
119
|
-
this.page = this.page <= 1 ? 1 : this.page - 1;
|
|
120
|
-
this.offset = (this.limit * this.page) - this.limit;
|
|
121
|
-
this.reload.next(Date.now());
|
|
122
|
-
}
|
|
123
|
-
pageSizeChange(value) {
|
|
124
|
-
this.page = 1;
|
|
125
|
-
this.offset = 0;
|
|
126
|
-
this.limit = value;
|
|
127
|
-
this.reload.next(Date.now());
|
|
128
|
-
}
|
|
129
|
-
getDashboards() {
|
|
130
|
-
const checkedCategories = _.filter(this.categories, 'checked');
|
|
131
|
-
return this.dashboardService.getDashboards(this.searchText.getValue() || '', this.limit.toString(), this.offset.toString(), this.shared ? null : (!_.isNil(this.accountId) ? this.accountId : ''), _.map(checkedCategories, 'key')).pipe(map((dashboards) => {
|
|
132
|
-
this.endOfResults = dashboards.length < this.limit;
|
|
133
|
-
return dashboards;
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
getCategories() {
|
|
137
|
-
this.dashboardService.getDashboardCategories(this.shared).then(categories => this.categories = categories);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
DashboardsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardsComponent, deps: [{ token: i1.Router }, { token: i2.TagService }, { token: i3.ProjectService }, { token: i4.DashboardService }, { token: i5.MatLegacyDialog }, { token: KININTEL_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
-
DashboardsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DashboardsComponent, selector: "ki-dashboards", inputs: { headingLabel: "headingLabel", shared: "shared", allowNew: "allowNew", admin: "admin", accountId: "accountId", viewURL: "viewURL", editURL: "editURL" }, 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 <div class=\"flex items-center\">\n <h1 class=\"text-2xl font-bold text-gray-900\">{{headingLabel || 'Dashboards'}}</h1>\n <mat-chip-list *ngIf=\"activeTag\" class=\"overflow-hidden\">\n <mat-chip class=\"mb-4 ml-2 active-tag\" [removable]=\"true\" (removed)=\"removeActiveTag()\">\n <span><b>{{config.tagLabel || 'Tag'}}: </b>{{activeTag ? activeTag.tag : ''}}</span>\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n </div>\n <p class=\"text-sm font-medium text-gray-500\">\n A list of all the dashboards currently available.\n </p>\n </div>\n </div>\n <div class=\"mt-6 flex flex-col-reverse justify-stretch\">\n <button *ngIf=\"!shared\" mat-flat-button color=\"primary\" (click)=\"edit(0)\">\n Create New Dashboard\n </button>\n </div>\n </div>\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 <div class=\"mt-3 sm:mt-0 flex-1\">\n <label for=\"mobile-search-candidate\" class=\"sr-only\">Search</label>\n <div class=\"flex\">\n <div class=\"relative flex-grow focus-within:z-10\">\n <div 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\" id=\"mobile-search-candidate\"\n class=\"block w-full rounded-none pl-10 border-t-0 border-l-0 border-gray-300\"\n placeholder=\"Search dashboards\"\n (keyup)=\"searchText.next($event.target.value)\">\n </div>\n </div>\n </div>\n <table class=\"min-w-full border-separate\" style=\"border-spacing: 0\">\n <tbody class=\"bg-white\">\n <ng-template [ngIf]=\"dashboards.length\">\n <tr class=\"border-t border-gray-200\">\n <th colspan=\"2\" scope=\"colgroup\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-100 pl-4 text-left text-xs font-semibold text-gray-900\">\n <div class=\"w-full flex items-center justify-between\">\n Dashboards\n <button type=\"button\" [matMenuTriggerFor]=\"projectCategories\"\n [disabled]=\"!categories.length\"\n class=\"disabled:opacity-50 -ml-px relative inline-flex items-center py-3 px-4 border-l border-gray-300 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 focus:outline-none border-t-0 border-r-0\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M3 3a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-.293.707L12 11.414V15a1 1 0 01-.293.707l-2 2A1 1 0 018 17v-5.586L3.293 6.707A1 1 0 013 6V3z\"\n clip-rule=\"evenodd\"/>\n </svg>\n <span class=\"ml-2\">Categories</span>\n <svg class=\"ml-2.5 -mr-1.5 h-5 w-5 text-gray-400\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"/>\n </svg>\n </button>\n <mat-menu #projectCategories=\"matMenu\">\n <button (click)=\"toggleCategory($event, category)\"\n mat-menu-item *ngFor=\"let category of categories\">\n <div class=\"flex items-center\">\n <mat-icon color=\"primary\" *ngIf=\"category.checked\">check_box</mat-icon>\n <mat-icon *ngIf=\"!category.checked\">check_box_outline_blank</mat-icon>\n {{category.category}}\n </div>\n </button>\n </mat-menu>\n </div>\n </th>\n </tr>\n <tr *ngFor=\"let element of dashboards; let i = index\" class=\"hover:bg-gray-50\">\n <td class=\"border-gray-200 py-2 px-4 text-sm text-gray-900\"\n [ngClass]=\"{'border-b-0': i === dashboards.length - 1, 'border-b': i !== dashboards.length - 1}\">\n <div class=\"flex flex-col\">\n <div class=\"item-title-select flex items-center font-medium cursor-pointer hover:underline\"\n [routerLink]=\"[viewURL + element.id]\">\n {{element.title}}\n </div>\n <div (click)=\"element.viewDescription = !element.viewDescription\"\n class=\"text-gray-400 font-thin w-2/3 overflow-ellipsis overflow-hidden whitespace-nowrap cursor-pointer hover:underline\">\n {{element.summary}}\n </div>\n <div class=\"inline-category\" *ngIf=\"element.categories.length\">\n <a *ngFor=\"let category of element.categories\">\n {{category.category}}\n </a>\n </div>\n <div *ngIf=\"element.viewDescription && element.description\" class=\"mt-4\"\n [innerHTML]=\"element.description\"></div>\n </div>\n </td>\n <td class=\"relative whitespace-nowrap border-gray-200 py-2 px-4 text-right text-sm font-medium\"\n [ngClass]=\"{'border-b-0': i === dashboards.length - 1, 'border-b': i !== dashboards.length - 1}\">\n <div class=\"flex items-center justify-end\">\n <button mat-button color=\"primary\" [routerLink]=\"[viewURL + element.id]\"> View</button>\n <div class=\"divider\"></div>\n <button color=\"primary\" mat-icon-button [matMenuTriggerFor]=\"itemMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #itemMenu=\"matMenu\">\n <button mat-menu-item (click)=\"edit(element.id)\">Edit Dashboard</button>\n <button mat-menu-item (click)=\"copy(element.id)\">Copy Dashboard</button>\n <button mat-menu-item (click)=\"extend(element.id)\">Extend Dashboard</button>\n <button mat-menu-item (click)=\"editMetadata(element)\">Edit Metadata</button>\n <button mat-menu-item (click)=\"delete(element.id)\">Delete Dashboard</button>\n </mat-menu>\n </div>\n </td>\n </tr>\n <tr>\n <td colspan=\"2\"\n class=\"whitespace-nowrap border-b border-gray-200 py-3 px-4 text-sm font-medium text-gray-900\">\n <div class=\"paging-toolbar flex align-center justify-end\">\n <select [value]=\"limit\" (change)=\"pageSizeChange($event.target.value)\" class=\"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 </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-4\" *ngIf=\"!dashboards.length && !loading\">\n <button type=\"button\" (click)=\"edit(0)\" *ngIf=\"!shared\"\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 <span class=\"material-symbols-outlined mx-auto text-6xl h-14 w-20 text-gray-300\">dashboard</span>\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 New Dashboard</span>\n </button>\n</div>\n", styles: [".divider{width:1px;height:17px;background-color:#cecece}.inline-category{display:flex;align-items:center;flex-wrap:wrap;width:100%;margin:.15rem 0 .25rem}.inline-category a{background-color:#f5f5f5;padding:0 .25rem;font-size:.7rem;margin-right:.5rem}.inline-category a:hover{text-decoration:underline}.search-listing{display:flex;align-items:center;flex-wrap:wrap;width:100%;background-color:#0000000d;border-bottom:1px solid #ddd;min-height:47px}.search-listing .list-title{text-transform:uppercase;font-size:.75rem;padding:0 1rem;border-right:2px solid #ddd;color:#4c4c4c;font-weight:500;letter-spacing:1px}.search-listing .badge-item{display:flex;align-items:center;margin-left:1rem;padding-left:1rem;border-radius:20px;background-color:#fff;border:1px solid #ddd;height:30px}.search-listing .badge-item.exclude{opacity:.8}.search-listing .badge-item:hover{background-color:#fcfcfc}.search-listing .badge-item span{margin-right:.5rem;color:#0000008a}.search-listing .badge-item button.mat-icon-button{width:33px;height:33px;line-height:33px}.search-listing .badge-item button.mat-icon-button mat-icon{font-size:20px;height:20px;width:20px;line-height:20px;color:#0000008a}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.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: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatLegacyMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i9.MatLegacyMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatLegacyMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i10.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: i10.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i11.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i11.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardsComponent, decorators: [{
|
|
143
|
-
type: Component,
|
|
144
|
-
args: [{ selector: 'ki-dashboards', 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 <div class=\"flex items-center\">\n <h1 class=\"text-2xl font-bold text-gray-900\">{{headingLabel || 'Dashboards'}}</h1>\n <mat-chip-list *ngIf=\"activeTag\" class=\"overflow-hidden\">\n <mat-chip class=\"mb-4 ml-2 active-tag\" [removable]=\"true\" (removed)=\"removeActiveTag()\">\n <span><b>{{config.tagLabel || 'Tag'}}: </b>{{activeTag ? activeTag.tag : ''}}</span>\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-list>\n </div>\n <p class=\"text-sm font-medium text-gray-500\">\n A list of all the dashboards currently available.\n </p>\n </div>\n </div>\n <div class=\"mt-6 flex flex-col-reverse justify-stretch\">\n <button *ngIf=\"!shared\" mat-flat-button color=\"primary\" (click)=\"edit(0)\">\n Create New Dashboard\n </button>\n </div>\n </div>\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 <div class=\"mt-3 sm:mt-0 flex-1\">\n <label for=\"mobile-search-candidate\" class=\"sr-only\">Search</label>\n <div class=\"flex\">\n <div class=\"relative flex-grow focus-within:z-10\">\n <div 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\" id=\"mobile-search-candidate\"\n class=\"block w-full rounded-none pl-10 border-t-0 border-l-0 border-gray-300\"\n placeholder=\"Search dashboards\"\n (keyup)=\"searchText.next($event.target.value)\">\n </div>\n </div>\n </div>\n <table class=\"min-w-full border-separate\" style=\"border-spacing: 0\">\n <tbody class=\"bg-white\">\n <ng-template [ngIf]=\"dashboards.length\">\n <tr class=\"border-t border-gray-200\">\n <th colspan=\"2\" scope=\"colgroup\"\n class=\"sticky top-0 z-10 border-b border-gray-300 bg-gray-100 pl-4 text-left text-xs font-semibold text-gray-900\">\n <div class=\"w-full flex items-center justify-between\">\n Dashboards\n <button type=\"button\" [matMenuTriggerFor]=\"projectCategories\"\n [disabled]=\"!categories.length\"\n class=\"disabled:opacity-50 -ml-px relative inline-flex items-center py-3 px-4 border-l border-gray-300 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 focus:outline-none border-t-0 border-r-0\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-5 w-5 text-gray-400\"\n viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\"\n d=\"M3 3a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-.293.707L12 11.414V15a1 1 0 01-.293.707l-2 2A1 1 0 018 17v-5.586L3.293 6.707A1 1 0 013 6V3z\"\n clip-rule=\"evenodd\"/>\n </svg>\n <span class=\"ml-2\">Categories</span>\n <svg class=\"ml-2.5 -mr-1.5 h-5 w-5 text-gray-400\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\"/>\n </svg>\n </button>\n <mat-menu #projectCategories=\"matMenu\">\n <button (click)=\"toggleCategory($event, category)\"\n mat-menu-item *ngFor=\"let category of categories\">\n <div class=\"flex items-center\">\n <mat-icon color=\"primary\" *ngIf=\"category.checked\">check_box</mat-icon>\n <mat-icon *ngIf=\"!category.checked\">check_box_outline_blank</mat-icon>\n {{category.category}}\n </div>\n </button>\n </mat-menu>\n </div>\n </th>\n </tr>\n <tr *ngFor=\"let element of dashboards; let i = index\" class=\"hover:bg-gray-50\">\n <td class=\"border-gray-200 py-2 px-4 text-sm text-gray-900\"\n [ngClass]=\"{'border-b-0': i === dashboards.length - 1, 'border-b': i !== dashboards.length - 1}\">\n <div class=\"flex flex-col\">\n <div class=\"item-title-select flex items-center font-medium cursor-pointer hover:underline\"\n [routerLink]=\"[viewURL + element.id]\">\n {{element.title}}\n </div>\n <div (click)=\"element.viewDescription = !element.viewDescription\"\n class=\"text-gray-400 font-thin w-2/3 overflow-ellipsis overflow-hidden whitespace-nowrap cursor-pointer hover:underline\">\n {{element.summary}}\n </div>\n <div class=\"inline-category\" *ngIf=\"element.categories.length\">\n <a *ngFor=\"let category of element.categories\">\n {{category.category}}\n </a>\n </div>\n <div *ngIf=\"element.viewDescription && element.description\" class=\"mt-4\"\n [innerHTML]=\"element.description\"></div>\n </div>\n </td>\n <td class=\"relative whitespace-nowrap border-gray-200 py-2 px-4 text-right text-sm font-medium\"\n [ngClass]=\"{'border-b-0': i === dashboards.length - 1, 'border-b': i !== dashboards.length - 1}\">\n <div class=\"flex items-center justify-end\">\n <button mat-button color=\"primary\" [routerLink]=\"[viewURL + element.id]\"> View</button>\n <div class=\"divider\"></div>\n <button color=\"primary\" mat-icon-button [matMenuTriggerFor]=\"itemMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #itemMenu=\"matMenu\">\n <button mat-menu-item (click)=\"edit(element.id)\">Edit Dashboard</button>\n <button mat-menu-item (click)=\"copy(element.id)\">Copy Dashboard</button>\n <button mat-menu-item (click)=\"extend(element.id)\">Extend Dashboard</button>\n <button mat-menu-item (click)=\"editMetadata(element)\">Edit Metadata</button>\n <button mat-menu-item (click)=\"delete(element.id)\">Delete Dashboard</button>\n </mat-menu>\n </div>\n </td>\n </tr>\n <tr>\n <td colspan=\"2\"\n class=\"whitespace-nowrap border-b border-gray-200 py-3 px-4 text-sm font-medium text-gray-900\">\n <div class=\"paging-toolbar flex align-center justify-end\">\n <select [value]=\"limit\" (change)=\"pageSizeChange($event.target.value)\" class=\"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 </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"p-4\" *ngIf=\"!dashboards.length && !loading\">\n <button type=\"button\" (click)=\"edit(0)\" *ngIf=\"!shared\"\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 <span class=\"material-symbols-outlined mx-auto text-6xl h-14 w-20 text-gray-300\">dashboard</span>\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 New Dashboard</span>\n </button>\n</div>\n", styles: [".divider{width:1px;height:17px;background-color:#cecece}.inline-category{display:flex;align-items:center;flex-wrap:wrap;width:100%;margin:.15rem 0 .25rem}.inline-category a{background-color:#f5f5f5;padding:0 .25rem;font-size:.7rem;margin-right:.5rem}.inline-category a:hover{text-decoration:underline}.search-listing{display:flex;align-items:center;flex-wrap:wrap;width:100%;background-color:#0000000d;border-bottom:1px solid #ddd;min-height:47px}.search-listing .list-title{text-transform:uppercase;font-size:.75rem;padding:0 1rem;border-right:2px solid #ddd;color:#4c4c4c;font-weight:500;letter-spacing:1px}.search-listing .badge-item{display:flex;align-items:center;margin-left:1rem;padding-left:1rem;border-radius:20px;background-color:#fff;border:1px solid #ddd;height:30px}.search-listing .badge-item.exclude{opacity:.8}.search-listing .badge-item:hover{background-color:#fcfcfc}.search-listing .badge-item span{margin-right:.5rem;color:#0000008a}.search-listing .badge-item button.mat-icon-button{width:33px;height:33px;line-height:33px}.search-listing .badge-item button.mat-icon-button mat-icon{font-size:20px;height:20px;width:20px;line-height:20px;color:#0000008a}\n"] }]
|
|
145
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.TagService }, { type: i3.ProjectService }, { type: i4.DashboardService }, { type: i5.MatLegacyDialog }, { type: undefined, decorators: [{
|
|
146
|
-
type: Inject,
|
|
147
|
-
args: [KININTEL_CONFIG]
|
|
148
|
-
}] }]; }, propDecorators: { headingLabel: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}], shared: [{
|
|
151
|
-
type: Input
|
|
152
|
-
}], allowNew: [{
|
|
153
|
-
type: Input
|
|
154
|
-
}], admin: [{
|
|
155
|
-
type: Input
|
|
156
|
-
}], accountId: [{
|
|
157
|
-
type: Input
|
|
158
|
-
}], viewURL: [{
|
|
159
|
-
type: Input
|
|
160
|
-
}], editURL: [{
|
|
161
|
-
type: Input
|
|
162
|
-
}] } });
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raW5pbnRlbC9zcmMvbGliL2NvbXBvbmVudHMvZGFzaGJvYXJkcy9kYXNoYm9hcmRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWtpbmludGVsL3NyYy9saWIvY29tcG9uZW50cy9kYXNoYm9hcmRzL2Rhc2hib2FyZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUF3QixHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLbEYsT0FBTyxFQUFDLGVBQWUsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUNqQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBT3pCLE1BQU0sT0FBTyxtQkFBbUI7SUEyQjVCLFlBQW9CLE1BQWMsRUFDZCxVQUFzQixFQUN0QixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsTUFBaUIsRUFDTyxNQUE0QjtRQUxwRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ08sV0FBTSxH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QUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkQsT0FBTyxVQUFVLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUMvRyxDQUFDOztpSEE5SlEsbUJBQW1CLCtKQWdDUixlQUFlO3FHQWhDMUIsbUJBQW1CLHVOQ2xCaEMseXBZQStLQTs0RkQ3SmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGVBQWU7OzBCQW9DWixNQUFNOzJCQUFDLGVBQWU7NENBOUIxQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFnU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9qZWN0U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7RGFzaGJvYXJkU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHtLSU5JTlRFTF9DT05GSUcsIEtpbmludGVsTW9kdWxlQ29uZmlnfSBmcm9tICcuLi8uLi9raW5pbnRlbC1jb25maWcnO1xuaW1wb3J0IHtNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7TWV0YWRhdGFDb21wb25lbnR9IGZyb20gJy4uL21ldGFkYXRhL21ldGFkYXRhLmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBsb2Rhc2ggZnJvbSAnbG9kYXNoJztcbmNvbnN0IF8gPSBsb2Rhc2guZGVmYXVsdDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdraS1kYXNoYm9hcmRzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkcy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGFzaGJvYXJkcy5jb21wb25lbnQuc2FzcyddXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgaGVhZGluZ0xhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hhcmVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFsbG93TmV3OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFkbWluOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFjY291bnRJZDogYW55O1xuICAgIEBJbnB1dCgpIHZpZXdVUkwgPSAnL2Rhc2hib2FyZHMvdmlldy8nO1xuICAgIEBJbnB1dCgpIGVkaXRVUkw6IHN0cmluZztcblxuICAgIHB1YmxpYyBkYXNoYm9hcmRzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgc2VhcmNoVGV4dCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICAgIHB1YmxpYyBsaW1pdCA9IDEwO1xuICAgIHB1YmxpYyBvZmZzZXQgPSAwO1xuICAgIHB1YmxpYyBwYWdlID0gMTtcbiAgICBwdWJsaWMgZW5kT2ZSZXN1bHRzID0gZmFsc2U7XG4gICAgcHVibGljIGFjdGl2ZVRhZ1N1YiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHVibGljIHByb2plY3RTdWIgPSBuZXcgU3ViamVjdCgpO1xuICAgIHB1YmxpYyBjYXRlZ29yaWVzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgZmlsdGVyZWRDYXRlZ29yaWVzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgRGF0ZSA9IERhdGU7XG4gICAgcHVibGljIGFjdGl2ZVRhZzogYW55O1xuICAgIHB1YmxpYyByZWxvYWQgPSBuZXcgU3ViamVjdCgpO1xuICAgIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgdGFnU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgdGFnU2VydmljZTogVGFnU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgICAgICAgICBASW5qZWN0KEtJTklOVEVMX0NPTkZJRykgcHVibGljIGNvbmZpZzogS2luaW50ZWxNb2R1bGVDb25maWcpIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGFnU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWdTdWIgPSB0aGlzLnRhZ1NlcnZpY2UuYWN0aXZlVGFnO1xuICAgICAgICAgICAgdGhpcy50YWdTdWIgPSB0aGlzLnRhZ1NlcnZpY2UuYWN0aXZlVGFnLnN1YnNjcmliZSh0YWcgPT4gdGhpcy5hY3RpdmVUYWcgPSB0YWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJvamVjdFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdFN1YiA9IHRoaXMucHJvamVjdFNlcnZpY2UuYWN0aXZlUHJvamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlKHRoaXMuc2VhcmNoVGV4dCwgdGhpcy5hY3RpdmVUYWdTdWIsIHRoaXMucHJvamVjdFN1YiwgdGhpcy5yZWxvYWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICAgICAgICAvLyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERhc2hib2FyZHMoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKChkYXNoYm9hcmRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkcyA9IGRhc2hib2FyZHM7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdChpZCkge1xuICAgICAgICBjb25zdCByb3V0ZSA9IF8uZmlsdGVyKHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpKVswXTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgJHt0aGlzLmVkaXRVUkwgfHwgcm91dGV9LyR7aWR9JHt0aGlzLmFkbWluID8gJz9hPXRydWUnIDogJyd9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoaWQpIHtcbiAgICAgICAgY29uc3Qgcm91dGUgPSBfLmZpbHRlcih0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKSlbMF07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYCR7dGhpcy5lZGl0VVJMIHx8IHJvdXRlfS9jb3B5LyR7aWR9JHt0aGlzLmFkbWluID8gJz9hPXRydWUnIDogJyd9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4dGVuZChpZCkge1xuICAgICAgICBjb25zdCByb3V0ZSA9IF8uZmlsdGVyKHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpKVswXTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgJHt0aGlzLmVkaXRVUkwgfHwgcm91dGV9L2V4dGVuZC8ke2lkfSR7dGhpcy5hZG1pbiA/ICc/YT10cnVlJyA6ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUoaWQpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gY29tcGxldGVseSBkZWxldGUgdGhpcyBEYXNoYm9hcmQ/JztcbiAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UucmVtb3ZlRGFzaGJvYXJkKGlkKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZC5uZXh0KERhdGUubm93KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQ2F0ZWdvcnkoZXZlbnQsIGNhdGVnb3J5KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjYXRlZ29yeS5jaGVja2VkID0gIWNhdGVnb3J5LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMudXBkYXRlQ2F0ZWdvcnlGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNhdGVnb3J5RmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLnJlbG9hZC5uZXh0KERhdGUubm93KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlZGl0TWV0YWRhdGEoc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTWV0YWRhdGFDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNzAwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnOTAwcHgnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBfLmNsb25lKHNlYXJjaFJlc3VsdCksXG4gICAgICAgICAgICAgICAgc2VydmljZTogdGhpcy5kYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZC5uZXh0KERhdGUubm93KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQWN0aXZlVGFnKCkge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UucmVzZXRBY3RpdmVUYWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5jcmVhc2VPZmZzZXQoKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSArIDE7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gKHRoaXMubGltaXQgKiB0aGlzLnBhZ2UpIC0gdGhpcy5saW1pdDtcbiAgICAgICAgdGhpcy5yZWxvYWQubmV4dChEYXRlLm5vdygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjcmVhc2VPZmZzZXQoKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSA8PSAxID8gMSA6IHRoaXMucGFnZSAtIDE7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gKHRoaXMubGltaXQgKiB0aGlzLnBhZ2UpIC0gdGhpcy5saW1pdDtcbiAgICAgICAgdGhpcy5yZWxvYWQubmV4dChEYXRlLm5vdygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFnZVNpemVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICB0aGlzLmxpbWl0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVsb2FkLm5leHQoRGF0ZS5ub3coKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXNoYm9hcmRzKCkge1xuICAgICAgICBjb25zdCBjaGVja2VkQ2F0ZWdvcmllcyA9IF8uZmlsdGVyKHRoaXMuY2F0ZWdvcmllcywgJ2NoZWNrZWQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXREYXNoYm9hcmRzKFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0LmdldFZhbHVlKCkgfHwgJycsXG4gICAgICAgICAgICB0aGlzLmxpbWl0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0aGlzLm9mZnNldC50b1N0cmluZygpLFxuICAgICAgICAgICAgdGhpcy5zaGFyZWQgPyBudWxsIDogKCFfLmlzTmlsKHRoaXMuYWNjb3VudElkKSA/IHRoaXMuYWNjb3VudElkIDogJycpLFxuICAgICAgICAgICAgXy5tYXAoY2hlY2tlZENhdGVnb3JpZXMsICdrZXknKVxuICAgICAgICApLnBpcGUobWFwKChkYXNoYm9hcmRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZE9mUmVzdWx0cyA9IGRhc2hib2FyZHMubGVuZ3RoIDwgdGhpcy5saW1pdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0RGFzaGJvYXJkQ2F0ZWdvcmllcyh0aGlzLnNoYXJlZCkudGhlbihjYXRlZ29yaWVzID0+IHRoaXMuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTYgYmctd2hpdGUgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1kOmZsZXggbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBtZDpzcGFjZS14LTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMS41XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwXCI+e3toZWFkaW5nTGFiZWwgfHwgJ0Rhc2hib2FyZHMnfX08L2gxPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdCAqbmdJZj1cImFjdGl2ZVRhZ1wiIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9XCJtYi00IG1sLTIgYWN0aXZlLXRhZ1wiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmVkKT1cInJlbW92ZUFjdGl2ZVRhZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+e3tjb25maWcudGFnTGFiZWwgfHwgJ1RhZyd9fTombmJzcDs8L2I+e3thY3RpdmVUYWcgPyBhY3RpdmVUYWcudGFnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhbGwgdGhlIGRhc2hib2FyZHMgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC02IGZsZXggZmxleC1jb2wtcmV2ZXJzZSBqdXN0aWZ5LXN0cmV0Y2hcIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhc2hhcmVkXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJlZGl0KDApXCI+XG4gICAgICAgICAgICAgICAgQ3JlYXRlIE5ldyBEYXNoYm9hcmRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHgtNCBzbTpweC02IGxnOnB4LTggbXQtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCItbXktMiAtbXgtNCBzbTotbXgtNiBsZzotbXgtOFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ibG9jayBtaW4tdy1mdWxsIHB5LTIgYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgc206bXQtMCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm1vYmlsZS1zZWFyY2gtY2FuZGlkYXRlXCIgY2xhc3M9XCJzci1vbmx5XCI+U2VhcmNoPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4LWdyb3cgZm9jdXMtd2l0aGluOnotMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCBwbC0zIGZsZXggaXRlbXMtY2VudGVyIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtNSB3LTUgdGV4dC1ncmF5LTQwMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOCA0YTQgNCAwIDEwMCA4IDQgNCAwIDAwMC04ek0yIDhhNiA2IDAgMTExMC44OSAzLjQ3Nmw0LjgxNyA0LjgxN2ExIDEgMCAwMS0xLjQxNCAxLjQxNGwtNC44MTYtNC44MTZBNiA2IDAgMDEyIDh6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJtb2JpbGUtc2VhcmNoLWNhbmRpZGF0ZVwiIGlkPVwibW9iaWxlLXNlYXJjaC1jYW5kaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJsb2NrIHctZnVsbCByb3VuZGVkLW5vbmUgcGwtMTAgYm9yZGVyLXQtMCBib3JkZXItbC0wIGJvcmRlci1ncmF5LTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGRhc2hib2FyZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwic2VhcmNoVGV4dC5uZXh0KCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwibWluLXctZnVsbCBib3JkZXItc2VwYXJhdGVcIiBzdHlsZT1cImJvcmRlci1zcGFjaW5nOiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJkYXNoYm9hcmRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCIgc2NvcGU9XCJjb2xncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTAgYm9yZGVyLWIgYm9yZGVyLWdyYXktMzAwIGJnLWdyYXktMTAwIHBsLTQgdGV4dC1sZWZ0IHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXNoYm9hcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwicHJvamVjdENhdGVnb3JpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhdGVnb3JpZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkaXNhYmxlZDpvcGFjaXR5LTUwIC1tbC1weCByZWxhdGl2ZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHktMyBweC00IGJvcmRlci1sIGJvcmRlci1ncmF5LTMwMCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgYmctZ3JheS0xMDAgaG92ZXI6YmctZ3JheS0yMDAgZm9jdXM6b3V0bGluZS1ub25lIGJvcmRlci10LTAgYm9yZGVyLXItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaC01IHctNSB0ZXh0LWdyYXktNDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMgM2ExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLS4yOTMuNzA3TDEyIDExLjQxNFYxNWExIDEgMCAwMS0uMjkzLjcwN2wtMiAyQTEgMSAwIDAxOCAxN3YtNS41ODZMMy4yOTMgNi43MDdBMSAxIDAgMDEzIDZWM3pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPkNhdGVnb3JpZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1sLTIuNSAtbXItMS41IGgtNSB3LTUgdGV4dC1ncmF5LTQwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuMjkzIDcuMjkzYTEgMSAwIDAxMS40MTQgMEwxMCAxMC41ODZsMy4yOTMtMy4yOTNhMSAxIDAgMTExLjQxNCAxLjQxNGwtNCA0YTEgMSAwIDAxLTEuNDE0IDBsLTQtNGExIDEgMCAwMTAtMS40MTR6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNwcm9qZWN0Q2F0ZWdvcmllcz1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVDYXRlZ29yeSgkZXZlbnQsIGNhdGVnb3J5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiY2F0ZWdvcnkuY2hlY2tlZFwiPmNoZWNrX2JveDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhY2F0ZWdvcnkuY2hlY2tlZFwiPmNoZWNrX2JveF9vdXRsaW5lX2JsYW5rPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2F0ZWdvcnkuY2F0ZWdvcnl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGRhc2hib2FyZHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImhvdmVyOmJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItZ3JheS0yMDAgcHktMiBweC00IHRleHQtc20gIHRleHQtZ3JheS05MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2JvcmRlci1iLTAnOiBpID09PSBkYXNoYm9hcmRzLmxlbmd0aCAtIDEsICdib3JkZXItYic6IGkgIT09IGRhc2hib2FyZHMubGVuZ3RoIC0gMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlLXNlbGVjdCBmbGV4IGl0ZW1zLWNlbnRlciBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbdmlld1VSTCArIGVsZW1lbnQuaWRdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tlbGVtZW50LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZWxlbWVudC52aWV3RGVzY3JpcHRpb24gPSAhZWxlbWVudC52aWV3RGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZ3JheS00MDAgZm9udC10aGluIHctMi8zIG92ZXJmbG93LWVsbGlwc2lzIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VsZW1lbnQuc3VtbWFyeX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtY2F0ZWdvcnlcIiAqbmdJZj1cImVsZW1lbnQuY2F0ZWdvcmllcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgZWxlbWVudC5jYXRlZ29yaWVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2F0ZWdvcnkuY2F0ZWdvcnl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVsZW1lbnQudmlld0Rlc2NyaXB0aW9uICYmIGVsZW1lbnQuZGVzY3JpcHRpb25cIiBjbGFzcz1cIm10LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImVsZW1lbnQuZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyZWxhdGl2ZSB3aGl0ZXNwYWNlLW5vd3JhcCBib3JkZXItZ3JheS0yMDAgcHktMiBweC00IHRleHQtcmlnaHQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLWItMCc6IGkgPT09IGRhc2hib2FyZHMubGVuZ3RoIC0gMSwgJ2JvcmRlci1iJzogaSAhPT0gZGFzaGJvYXJkcy5sZW5ndGggLSAxfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbcm91dGVyTGlua109XCJbdmlld1VSTCArIGVsZW1lbnQuaWRdXCI+IFZpZXc8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiaXRlbU1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNpdGVtTWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImVkaXQoZWxlbWVudC5pZClcIj5FZGl0IERhc2hib2FyZDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29weShlbGVtZW50LmlkKVwiPkNvcHkgRGFzaGJvYXJkPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHRlbmQoZWxlbWVudC5pZClcIj5FeHRlbmQgRGFzaGJvYXJkPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJlZGl0TWV0YWRhdGEoZWxlbWVudClcIj5FZGl0IE1ldGFkYXRhPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkZWxldGUoZWxlbWVudC5pZClcIj5EZWxldGUgRGFzaGJvYXJkPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBweS0zIHB4LTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmctdG9vbGJhciBmbGV4IGFsaWduLWNlbnRlciBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbdmFsdWVdPVwibGltaXRcIiAoY2hhbmdlKT1cInBhZ2VTaXplQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJtci04XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiMVwiPjE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCI1XCI+NTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiNTBcIj41MDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjI1MFwiPjI1MDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIjEwMDBcIj4xMDAwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXItNFwiIChjbGljayk9XCJkZWNyZWFzZU9mZnNldCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPD0gMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiaW5jcmVhc2VPZmZzZXQoKVwiIFtkaXNhYmxlZF09XCJlbmRPZlJlc3VsdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicC00XCIgKm5nSWY9XCIhZGFzaGJvYXJkcy5sZW5ndGggJiYgIWxvYWRpbmdcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZWRpdCgwKVwiICpuZ0lmPVwiIXNoYXJlZFwiXG4gICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGJsb2NrIHctZnVsbCBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgYm9yZGVyLWRhc2hlZCByb3VuZGVkLWxnIHAtMTIgdGV4dC1jZW50ZXIgaG92ZXI6Ym9yZGVyLWdyYXktNDAwIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBteC1hdXRvIHRleHQtNnhsIGgtMTQgdy0yMCB0ZXh0LWdyYXktMzAwXCI+ZGFzaGJvYXJkPC9zcGFuPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJyaWdodC0wIGJvdHRvbS0wIGFic29sdXRlIGgtOCB3LTggdGV4dC1ncmF5LTQwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTTEyIDR2MTZtOC04SDRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yIGJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMFwiPkNyZWF0ZSBOZXcgRGFzaGJvYXJkPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|