@hestia-earth/ui-components 0.0.1
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/README.md +24 -0
- package/auth/auth.service.d.ts +10 -0
- package/auth/public-api.d.ts +1 -0
- package/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.d.ts +40 -0
- package/bibliographies/bibliographies.module.d.ts +10 -0
- package/bibliographies/public-api.d.ts +2 -0
- package/bundles/hestia-earth-ui-components.umd.js +7570 -0
- package/bundles/hestia-earth-ui-components.umd.js.map +1 -0
- package/common/bind-once.directive.d.ts +10 -0
- package/common/blank-node-diffs/blank-node-diffs.component.d.ts +18 -0
- package/common/blank-node-state/blank-node-state.component.d.ts +36 -0
- package/common/blank-node-state-notice/blank-node-state-notice.component.d.ts +9 -0
- package/common/blank-node-value-delta/blank-node-value-delta.component.d.ts +13 -0
- package/common/click-outside.directive.d.ts +10 -0
- package/common/clipboard/clipboard.component.d.ts +16 -0
- package/common/common.module.d.ts +37 -0
- package/common/common.service.d.ts +11 -0
- package/common/default.pipe.d.ts +7 -0
- package/common/ellipsis.pipe.d.ts +7 -0
- package/common/get.pipe.d.ts +7 -0
- package/common/key-to-label.pipe.d.ts +7 -0
- package/common/keys.pipe.d.ts +7 -0
- package/common/link-key-value/link-key-value.component.d.ts +16 -0
- package/common/logs-utils.d.ts +17 -0
- package/common/maps-drawing-confirm/maps-drawing-confirm.component.d.ts +28 -0
- package/common/maps-utils.d.ts +70 -0
- package/common/pluralize.pipe.d.ts +7 -0
- package/common/popover/popover.component.d.ts +16 -0
- package/common/popover-confirm/popover-confirm.component.d.ts +15 -0
- package/common/precision.pipe.d.ts +7 -0
- package/common/public-api.d.ts +30 -0
- package/common/schema-version-link/schema-version-link.component.d.ts +10 -0
- package/common/skeleton-text/skeleton-text.component.d.ts +11 -0
- package/common/social-tags/social-tags.component.d.ts +12 -0
- package/common/tags-input.directive.d.ts +20 -0
- package/common/times.pipe.d.ts +7 -0
- package/common/toast/toast.component.d.ts +19 -0
- package/common/toast.service.d.ts +16 -0
- package/common/unit-converter/unit-converter.component.d.ts +25 -0
- package/common/utils.d.ts +88 -0
- package/cycles/cycles-activity/cycles-activity.component.d.ts +31 -0
- package/cycles/cycles-activity-logs/cycles-activity-logs.component.d.ts +25 -0
- package/cycles/cycles-completeness/cycles-completeness.component.d.ts +14 -0
- package/cycles/cycles-emissions/cycles-emissions.component.d.ts +40 -0
- package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +18 -0
- package/cycles/cycles-emissions-logs/cycles-emissions-logs.component.d.ts +23 -0
- package/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.d.ts +8 -0
- package/cycles/cycles-result/cycles-result.component.d.ts +13 -0
- package/cycles/cycles-suggest-form/cycles-suggest-form.component.d.ts +24 -0
- package/cycles/cycles.model.d.ts +7 -0
- package/cycles/cycles.module.d.ts +19 -0
- package/cycles/public-api.d.ts +10 -0
- package/engine/aggregation-engine.service.d.ts +71 -0
- package/engine/engine.service.d.ts +61 -0
- package/engine/public-api.d.ts +2 -0
- package/esm2015/auth/auth.service.js +19 -0
- package/esm2015/auth/public-api.js +2 -0
- package/esm2015/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.js +100 -0
- package/esm2015/bibliographies/bibliographies.module.js +30 -0
- package/esm2015/bibliographies/public-api.js +3 -0
- package/esm2015/common/bind-once.directive.js +23 -0
- package/esm2015/common/blank-node-diffs/blank-node-diffs.component.js +47 -0
- package/esm2015/common/blank-node-state/blank-node-state.component.js +90 -0
- package/esm2015/common/blank-node-state-notice/blank-node-state-notice.component.js +27 -0
- package/esm2015/common/blank-node-value-delta/blank-node-value-delta.component.js +41 -0
- package/esm2015/common/click-outside.directive.js +28 -0
- package/esm2015/common/clipboard/clipboard.component.js +69 -0
- package/esm2015/common/common.module.js +144 -0
- package/esm2015/common/common.service.js +29 -0
- package/esm2015/common/default.pipe.js +23 -0
- package/esm2015/common/ellipsis.pipe.js +17 -0
- package/esm2015/common/get.pipe.js +17 -0
- package/esm2015/common/key-to-label.pipe.js +18 -0
- package/esm2015/common/keys.pipe.js +20 -0
- package/esm2015/common/link-key-value/link-key-value.component.js +55 -0
- package/esm2015/common/logs-utils.js +49 -0
- package/esm2015/common/maps-drawing-confirm/maps-drawing-confirm.component.js +89 -0
- package/esm2015/common/maps-utils.js +101 -0
- package/esm2015/common/pluralize.pipe.js +17 -0
- package/esm2015/common/popover/popover.component.js +37 -0
- package/esm2015/common/popover-confirm/popover-confirm.component.js +38 -0
- package/esm2015/common/precision.pipe.js +20 -0
- package/esm2015/common/public-api.js +31 -0
- package/esm2015/common/schema-version-link/schema-version-link.component.js +39 -0
- package/esm2015/common/skeleton-text/skeleton-text.component.js +44 -0
- package/esm2015/common/social-tags/social-tags.component.js +37 -0
- package/esm2015/common/tags-input.directive.js +74 -0
- package/esm2015/common/times.pipe.js +16 -0
- package/esm2015/common/toast/toast.component.js +37 -0
- package/esm2015/common/toast.service.js +36 -0
- package/esm2015/common/unit-converter/unit-converter.component.js +73 -0
- package/esm2015/common/utils.js +245 -0
- package/esm2015/cycles/cycles-activity/cycles-activity.component.js +92 -0
- package/esm2015/cycles/cycles-activity-logs/cycles-activity-logs.component.js +48 -0
- package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +41 -0
- package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +121 -0
- package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +93 -0
- package/esm2015/cycles/cycles-emissions-logs/cycles-emissions-logs.component.js +63 -0
- package/esm2015/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.js +22 -0
- package/esm2015/cycles/cycles-result/cycles-result.component.js +92 -0
- package/esm2015/cycles/cycles-suggest-form/cycles-suggest-form.component.js +83 -0
- package/esm2015/cycles/cycles.model.js +2 -0
- package/esm2015/cycles/cycles.module.js +66 -0
- package/esm2015/cycles/public-api.js +11 -0
- package/esm2015/engine/aggregation-engine.service.js +126 -0
- package/esm2015/engine/engine.service.js +78 -0
- package/esm2015/engine/public-api.js +3 -0
- package/esm2015/files/files-error.model.js +180 -0
- package/esm2015/files/files-form/files-form.component.js +439 -0
- package/esm2015/files/files-form.model.js +548 -0
- package/esm2015/files/files.module.js +42 -0
- package/esm2015/files/public-api.js +3 -0
- package/esm2015/fontawesome/fontawesome.module.js +36 -0
- package/esm2015/fontawesome/public-api.js +2 -0
- package/esm2015/hestia-earth-ui-components.js +5 -0
- package/esm2015/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.js +161 -0
- package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +142 -0
- package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +252 -0
- package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +68 -0
- package/esm2015/impact-assessments/impact-assessments.model.js +2 -0
- package/esm2015/impact-assessments/impact-assessments.module.js +47 -0
- package/esm2015/impact-assessments/public-api.js +7 -0
- package/esm2015/mendeley/mendeley.service.js +35 -0
- package/esm2015/mendeley/public-api.js +2 -0
- package/esm2015/node/node-csv-export-confirm/node-csv-export-confirm.component.js +65 -0
- package/esm2015/node/node-csv-select-headers/node-csv-select-headers.component.js +119 -0
- package/esm2015/node/node-csv.service.js +24 -0
- package/esm2015/node/node-diffs/node-diffs.component.js +67 -0
- package/esm2015/node/node-diffs/node-diffs.model.js +6 -0
- package/esm2015/node/node-icon/node-icon.component.js +37 -0
- package/esm2015/node/node-link/node-link.component.js +33 -0
- package/esm2015/node/node-logs-file/node-logs-file.component.js +63 -0
- package/esm2015/node/node-logs-models/node-logs-models.component.js +188 -0
- package/esm2015/node/node-missing-lookup-factors/node-missing-lookup-factors.component.js +34 -0
- package/esm2015/node/node-value-details/node-value-details.component.js +46 -0
- package/esm2015/node/node.module.js +67 -0
- package/esm2015/node/node.service.js +113 -0
- package/esm2015/node/public-api.js +13 -0
- package/esm2015/public-api.js +16 -0
- package/esm2015/schema/public-api.js +2 -0
- package/esm2015/schema/schema.service.js +167 -0
- package/esm2015/search/public-api.js +4 -0
- package/esm2015/search/search.model.js +204 -0
- package/esm2015/search/search.module.js +13 -0
- package/esm2015/search/search.service.js +99 -0
- package/esm2015/sites/public-api.js +6 -0
- package/esm2015/sites/sites-maps/sites-maps.component.js +162 -0
- package/esm2015/sites/sites-measurements/sites-measurements.component.js +78 -0
- package/esm2015/sites/sites-measurements-logs/sites-measurements-logs.component.js +63 -0
- package/esm2015/sites/sites.model.js +10 -0
- package/esm2015/sites/sites.module.js +42 -0
- package/esm2015/terms/public-api.js +2 -0
- package/esm2015/terms/terms.model.js +184 -0
- package/esm2015/users/public-api.js +2 -0
- package/esm2015/users/users.service.js +17 -0
- package/fesm2015/hestia-earth-ui-components.js +5920 -0
- package/fesm2015/hestia-earth-ui-components.js.map +1 -0
- package/files/files-error.model.d.ts +40 -0
- package/files/files-form/files-form.component.d.ts +94 -0
- package/files/files-form.model.d.ts +113 -0
- package/files/files.module.d.ts +13 -0
- package/files/public-api.d.ts +2 -0
- package/fontawesome/fontawesome.module.d.ts +10 -0
- package/fontawesome/public-api.d.ts +1 -0
- package/hestia-earth-ui-components.d.ts +5 -0
- package/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.d.ts +28 -0
- package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +25 -0
- package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +77 -0
- package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +25 -0
- package/impact-assessments/impact-assessments.model.d.ts +6 -0
- package/impact-assessments/impact-assessments.module.d.ts +15 -0
- package/impact-assessments/public-api.d.ts +6 -0
- package/mendeley/mendeley.service.d.ts +25 -0
- package/mendeley/public-api.d.ts +1 -0
- package/node/node-csv-export-confirm/node-csv-export-confirm.component.d.ts +32 -0
- package/node/node-csv-select-headers/node-csv-select-headers.component.d.ts +42 -0
- package/node/node-csv.service.d.ts +9 -0
- package/node/node-diffs/node-diffs.component.d.ts +23 -0
- package/node/node-diffs/node-diffs.model.d.ts +4 -0
- package/node/node-icon/node-icon.component.d.ts +8 -0
- package/node/node-link/node-link.component.d.ts +11 -0
- package/node/node-logs-file/node-logs-file.component.d.ts +31 -0
- package/node/node-logs-models/node-logs-models.component.d.ts +72 -0
- package/node/node-missing-lookup-factors/node-missing-lookup-factors.component.d.ts +14 -0
- package/node/node-value-details/node-value-details.component.d.ts +17 -0
- package/node/node.module.d.ts +20 -0
- package/node/node.service.d.ts +70 -0
- package/node/public-api.d.ts +12 -0
- package/package.json +53 -0
- package/public-api.d.ts +15 -0
- package/schema/public-api.d.ts +1 -0
- package/schema/schema.service.d.ts +51 -0
- package/search/public-api.d.ts +3 -0
- package/search/search.model.d.ts +243 -0
- package/search/search.module.d.ts +7 -0
- package/search/search.service.d.ts +129 -0
- package/sites/public-api.d.ts +5 -0
- package/sites/sites-maps/sites-maps.component.d.ts +35 -0
- package/sites/sites-measurements/sites-measurements.component.d.ts +31 -0
- package/sites/sites-measurements-logs/sites-measurements-logs.component.d.ts +23 -0
- package/sites/sites.model.d.ts +10 -0
- package/sites/sites.module.d.ts +13 -0
- package/styles.scss +197 -0
- package/terms/public-api.d.ts +1 -0
- package/terms/terms.model.d.ts +21 -0
- package/users/public-api.d.ts +1 -0
- package/users/users.service.d.ts +7 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { Validators } from '@angular/forms';
|
|
4
|
+
import { of } from 'rxjs';
|
|
5
|
+
import { debounceTime, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';
|
|
6
|
+
import { DataState } from '@hestia-earth/api';
|
|
7
|
+
import { NodeType } from '@hestia-earth/schema';
|
|
8
|
+
import { unique } from '@hestia-earth/utils';
|
|
9
|
+
import { matchType, matchExactQuery, matchPhraseQuery, matchPhrasePrefixQuery, matchBoolPrefixQuery, matchAggregatedQuery } from '../../search/search.model';
|
|
10
|
+
import { propertyValue, groupNodesByTerm, itemColor, grouppedKeys, baseUrl } from '../../common/utils';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/forms";
|
|
13
|
+
import * as i2 from "../../node/node.service";
|
|
14
|
+
import * as i3 from "../../search/search.service";
|
|
15
|
+
import * as i4 from "../../common/toast.service";
|
|
16
|
+
import * as i5 from "@fortawesome/angular-fontawesome";
|
|
17
|
+
import * as i6 from "../../node/node-link/node-link.component";
|
|
18
|
+
import * as i7 from "../../common/blank-node-state/blank-node-state.component";
|
|
19
|
+
import * as i8 from "../../common/blank-node-state-notice/blank-node-state-notice.component";
|
|
20
|
+
import * as i9 from "../impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component";
|
|
21
|
+
import * as i10 from "../impact-assessments-indicators-chart/impact-assessments-indicators-chart.component";
|
|
22
|
+
import * as i11 from "../impact-assessments-products-logs/impact-assessments-products-logs.component";
|
|
23
|
+
import * as i12 from "../../node/node-csv-export-confirm/node-csv-export-confirm.component";
|
|
24
|
+
import * as i13 from "../../node/node-value-details/node-value-details.component";
|
|
25
|
+
import * as i14 from "@ng-bootstrap/ng-bootstrap";
|
|
26
|
+
import * as i15 from "@angular/common";
|
|
27
|
+
import * as i16 from "../../common/bind-once.directive";
|
|
28
|
+
import * as i17 from "../../common/ellipsis.pipe";
|
|
29
|
+
import * as i18 from "../../common/default.pipe";
|
|
30
|
+
import * as i19 from "../../common/precision.pipe";
|
|
31
|
+
const orderBy = require('lodash.orderby');
|
|
32
|
+
const MIN_TYPEAHEAD_LENGTH = 1;
|
|
33
|
+
var View;
|
|
34
|
+
(function (View) {
|
|
35
|
+
View["table"] = "table";
|
|
36
|
+
View["chart"] = "chart";
|
|
37
|
+
View["breakdown"] = "breakdown";
|
|
38
|
+
View["logs"] = "logs";
|
|
39
|
+
})(View || (View = {}));
|
|
40
|
+
export class ImpactAssessmentsProductsComponent {
|
|
41
|
+
constructor(formBuilder, nodeService, searchService, toastService) {
|
|
42
|
+
this.formBuilder = formBuilder;
|
|
43
|
+
this.nodeService = nodeService;
|
|
44
|
+
this.searchService = searchService;
|
|
45
|
+
this.toastService = toastService;
|
|
46
|
+
this.dataStateValues = {};
|
|
47
|
+
this.impactAssessments = [];
|
|
48
|
+
this.key = 'impacts';
|
|
49
|
+
this.enableCompare = true;
|
|
50
|
+
this.enableFilterMethodModel = false;
|
|
51
|
+
this.propertyValue = propertyValue;
|
|
52
|
+
this.itemColor = itemColor;
|
|
53
|
+
this.baseUrl = baseUrl();
|
|
54
|
+
this.showDownload = false;
|
|
55
|
+
this.View = View;
|
|
56
|
+
this.selectedView = View.table;
|
|
57
|
+
this.methodModels = [];
|
|
58
|
+
this.indicators = [];
|
|
59
|
+
// Adding impacts to compare
|
|
60
|
+
this.form = this.formBuilder.group({
|
|
61
|
+
search: ['', Validators.required]
|
|
62
|
+
});
|
|
63
|
+
this.selectedImpactAssessments = [];
|
|
64
|
+
this.loading = false;
|
|
65
|
+
this.suggesting = false;
|
|
66
|
+
this.formatter = ({ '@id': id }) => id;
|
|
67
|
+
this.suggestImpactAssessment = (text$) => text$.pipe(debounceTime(300), distinctUntilChanged(), tap(() => this.suggesting = true), switchMap(term => this.suggest(term)), tap(() => this.suggesting = false));
|
|
68
|
+
}
|
|
69
|
+
ngOnChanges(changes) {
|
|
70
|
+
if ('impactAssessments' in changes) {
|
|
71
|
+
this.dataStateValues[this.dataState] = changes.impactAssessments.currentValue.slice();
|
|
72
|
+
this.selectAllImpacts();
|
|
73
|
+
return this.update();
|
|
74
|
+
}
|
|
75
|
+
if ('dataState' in changes) {
|
|
76
|
+
this.selectedView = View.table;
|
|
77
|
+
return this.updateDataState();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
trackById(_index, item) {
|
|
81
|
+
return item['@id'];
|
|
82
|
+
}
|
|
83
|
+
get isOriginal() {
|
|
84
|
+
return this.dataState === DataState.original;
|
|
85
|
+
}
|
|
86
|
+
get originalValues() {
|
|
87
|
+
return (this.isOriginal ? null : this.dataStateValues[DataState.original]) || [];
|
|
88
|
+
}
|
|
89
|
+
termAllowed(term) {
|
|
90
|
+
var _a;
|
|
91
|
+
return !((_a = this.filterTermTypes) === null || _a === void 0 ? void 0 : _a.length) || (this.filterTermTypes || []).includes(term === null || term === void 0 ? void 0 : term.termType);
|
|
92
|
+
}
|
|
93
|
+
update() {
|
|
94
|
+
this.updateImpacts();
|
|
95
|
+
this.enableFilterMethodModel && this.updateMethodModels();
|
|
96
|
+
}
|
|
97
|
+
updateMethodModels() {
|
|
98
|
+
const methodModels = this.impactAssessments
|
|
99
|
+
.flatMap(impact => (impact[this.key] || []).map(v => v.methodModel))
|
|
100
|
+
.filter(Boolean);
|
|
101
|
+
this.methodModels = unique(methodModels);
|
|
102
|
+
}
|
|
103
|
+
updateImpacts() {
|
|
104
|
+
const indicatorPerImpactAssessment = groupNodesByTerm(this.impactAssessments, this.key, this.originalValues, this.selectedMethodModel);
|
|
105
|
+
this.indicators = orderBy(grouppedKeys(indicatorPerImpactAssessment), ['value.methodTierOrder', 'key'], ['asc', 'asc'])
|
|
106
|
+
.filter(({ value }) => this.termAllowed(value === null || value === void 0 ? void 0 : value.term));
|
|
107
|
+
}
|
|
108
|
+
loadDataState(dataState) {
|
|
109
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
this.dataStateValues[dataState] = this.dataStateValues[dataState] || (yield Promise.all(this.impactAssessments.map(node => this.nodeService.get(Object.assign(Object.assign({}, node), { dataState })))));
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
updateDataState() {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
yield this.loadDataState(this.dataState);
|
|
116
|
+
this.impactAssessments = this.dataStateValues[this.dataState].slice();
|
|
117
|
+
return this.update();
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
togglePopover(popover, context) {
|
|
121
|
+
return popover.isOpen() ? popover.close() : popover.open(context);
|
|
122
|
+
}
|
|
123
|
+
impactName(impact) {
|
|
124
|
+
return impact.name || (impact.cycle ? this.cycleLabel(impact.cycle) : impact['@id']) || impact.id;
|
|
125
|
+
}
|
|
126
|
+
cycleLabel({ '@id': id, name }) {
|
|
127
|
+
var _a;
|
|
128
|
+
return name || ((_a = (this.cycles || []).find(v => v['@id'] === id)) === null || _a === void 0 ? void 0 : _a.name);
|
|
129
|
+
}
|
|
130
|
+
get enableBreakdown() {
|
|
131
|
+
return !this.isOriginal && this.impactAssessments.length === 1 && this.key === 'impacts';
|
|
132
|
+
}
|
|
133
|
+
// Recalculation logs
|
|
134
|
+
showRecalculationLogs() {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
this.loading = true;
|
|
137
|
+
// make sure original data is also loaded
|
|
138
|
+
yield this.loadDataState(DataState.original);
|
|
139
|
+
this.loading = false;
|
|
140
|
+
this.selectedView = View.logs;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
// Compare
|
|
144
|
+
selectAllImpacts() {
|
|
145
|
+
this.selectedImpactAssessments = this.impactAssessments.slice();
|
|
146
|
+
}
|
|
147
|
+
unselectAllImpacts() {
|
|
148
|
+
this.selectedImpactAssessments = [];
|
|
149
|
+
}
|
|
150
|
+
toggleAllImpacts() {
|
|
151
|
+
return this.selectedImpactAssessments.length ? this.selectAllImpacts() : this.unselectAllImpacts();
|
|
152
|
+
}
|
|
153
|
+
selectImpact(impact) {
|
|
154
|
+
this.selectedImpactAssessments = [
|
|
155
|
+
...this.selectedImpactAssessments,
|
|
156
|
+
impact
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
unselectImpact(index) {
|
|
160
|
+
this.selectedImpactAssessments.splice(index, 1);
|
|
161
|
+
this.selectedImpactAssessments = this.selectedImpactAssessments.slice();
|
|
162
|
+
}
|
|
163
|
+
toggleImpact(impact) {
|
|
164
|
+
const index = this.selectedImpactAssessments.indexOf(impact);
|
|
165
|
+
return index >= 0 ? this.unselectImpact(index) : this.selectImpact(impact);
|
|
166
|
+
}
|
|
167
|
+
isSelected(impact) {
|
|
168
|
+
return this.selectedImpactAssessments.includes(impact);
|
|
169
|
+
}
|
|
170
|
+
suggest(term) {
|
|
171
|
+
return term.length < MIN_TYPEAHEAD_LENGTH ?
|
|
172
|
+
of([]) :
|
|
173
|
+
this.searchService.suggest(term, NodeType.ImpactAssessment, [], {
|
|
174
|
+
bool: {
|
|
175
|
+
must: [
|
|
176
|
+
matchType(NodeType.ImpactAssessment),
|
|
177
|
+
matchAggregatedQuery
|
|
178
|
+
],
|
|
179
|
+
must_not: this.impactAssessments.map(({ '@id': id }) => matchExactQuery('@id', id)),
|
|
180
|
+
should: [
|
|
181
|
+
matchPhraseQuery(term, 100, '@id', 'name', 'cycle.name'),
|
|
182
|
+
matchPhrasePrefixQuery(term, 20, '@id', 'name', 'cycle.name'),
|
|
183
|
+
matchBoolPrefixQuery(term, 10, '@id', 'name', 'cycle.name')
|
|
184
|
+
],
|
|
185
|
+
minimum_should_match: 1
|
|
186
|
+
}
|
|
187
|
+
}, 10, ['cycle.name', 'country.name', 'product.name', 'endDate']);
|
|
188
|
+
}
|
|
189
|
+
loadImpact(id) {
|
|
190
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
191
|
+
const impact = yield this.nodeService.get({
|
|
192
|
+
'@type': NodeType.ImpactAssessment,
|
|
193
|
+
'@id': id,
|
|
194
|
+
dataState: DataState.recalculated
|
|
195
|
+
}, false);
|
|
196
|
+
return impact['@id'] ? Object.assign(Object.assign({}, impact), { cycle: yield this.fetchCycle(impact) }) : null;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
fetchCycle({ cycle }) {
|
|
200
|
+
return !cycle || cycle.name ? cycle : this.nodeService.get({
|
|
201
|
+
'@type': NodeType.Cycle,
|
|
202
|
+
'@id': cycle['@id']
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
addImpact() {
|
|
206
|
+
var _a;
|
|
207
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
208
|
+
this.loading = true;
|
|
209
|
+
const { search: { '@id': id, name } } = this.form.value;
|
|
210
|
+
const impact = yield this.loadImpact(id);
|
|
211
|
+
if (impact) {
|
|
212
|
+
this.impactAssessments = [
|
|
213
|
+
...this.impactAssessments,
|
|
214
|
+
impact
|
|
215
|
+
];
|
|
216
|
+
this.selectImpact(impact);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.toastService.error(`Error while loading ${name || id}`);
|
|
220
|
+
}
|
|
221
|
+
this.loading = false;
|
|
222
|
+
(_a = this.form.get('search')) === null || _a === void 0 ? void 0 : _a.setValue('');
|
|
223
|
+
this.form.updateValueAndValidity();
|
|
224
|
+
return this.update();
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
ImpactAssessmentsProductsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsProductsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.HeNodeService }, { token: i3.HeSearchService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
229
|
+
ImpactAssessmentsProductsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsProductsComponent, selector: "he-impact-assessments-products", inputs: { cycles: "cycles", impactAssessments: "impactAssessments", key: "key", dataState: "dataState", enableCompare: "enableCompare", filterTermTypes: "filterTermTypes", enableFilterMethodModel: "enableFilterMethodModel" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"indicators.length; else emptyTable\">\n <div class=\"columns is-variable is-2 m-0\">\n <div class=\"column is-hidden-mobile\"></div>\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.table\" (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Table view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"impactAssessments.length > 1\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.chart\" (click)=\"selectedView = View.chart\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Chart view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"enableBreakdown\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.breakdown\" (click)=\"selectedView = View.breakdown\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Breakdown view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal && impactAssessments.length === 1\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.logs\" (click)=\"showRecalculationLogs()\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <div class=\"has-text-right mb-2\">\n <button class=\"button is-dark is-outlined is-small\" (click)=\"showDownload = true\">\n <fa-icon icon=\"download\"></fa-icon>\n <span class=\"pl-2\">Download (CSV)</span>\n </button>\n </div>\n\n <div class=\"table-container data-table-container mb-1\" *bindOnce=\"indicators\">\n <table class=\"table is-narrow data-table has-children-{{indicators.length + 1}}\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"select is-small\" *ngIf=\"enableFilterMethodModel\">\n <select name=\"selectedMethodModel\"\n (change)=\"updateImpacts()\" [(ngModel)]=\"selectedMethodModel\"\n >\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methodModels\" [ngValue]=\"term\">{{term.name}}</option>\n </select>\n </div>\n </th>\n <th></th>\n <th *ngFor=\"let indicator of indicators\"\n [attr.title]=\"indicator.value.term.name\"\n >\n <he-node-link [node]=\"indicator.value.term\">\n <span>{{indicator.value.term.name | ellipsis:30}}</span>\n </he-node-link>\n </th>\n </tr>\n <tr>\n <th class=\"width-auto\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit:</a>\n <span class=\"pl-1\">1 kg</span>\n </th>\n <th>Product</th>\n <th *ngFor=\"let indicator of indicators\"\n [attr.title]=\"indicator.value.term.units\"\n >{{indicator.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let impactAssessment of impactAssessments; trackBy: trackById; let i = index\">\n <td class=\"width-auto\" [attr.title]=\"impactName(impactAssessment)\" [style.border-left-color]=\"itemColor(i)\">\n <label *ngIf=\"enableCompare\" class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n (change)=\"toggleImpact(impactAssessment)\"\n [checked]=\"isSelected(impactAssessment)\"\n >\n </label>\n <he-node-link class=\"is-inline-block\" [node]=\"impactAssessment\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{impactName(impactAssessment)}}</span>\n </he-node-link>\n </td>\n <td [attr.title]=\"impactAssessment.product?.name\">\n <he-node-link *ngIf=\"impactAssessment.product\" [node]=\"impactAssessment.product\">\n <span>{{impactAssessment.product.name | ellipsis:30}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let indicator of indicators\">\n <span *ngIf=\"indicator.value.values[impactAssessment['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"togglePopover(p, { data: indicator.value.values[impactAssessment['@id']], impactAssessment: impactAssessment, key: key })\"\n >\n <span pointer>{{propertyValue(indicator.value.values[impactAssessment['@id']].value, key === 'impacts') | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\"\n [node]=\"indicator.value.values[impactAssessment['@id']].nodes[0]\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : null\"\n ></he-blank-node-state>\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <he-blank-node-state-notice [dataState]=\"dataState\"></he-blank-node-state-notice>\n\n <form *ngIf=\"enableCompare\" class=\"mt-2\" [formGroup]=\"form\" (submit)=\"form.valid && addImpact()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Compare with Aggregated Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\" [class.has-icons-right]=\"suggesting || loading\">\n <input class=\"input is-small\"\n placeholder=\"Search by name or id\"\n formControlName=\"search\" name=\"search\"\n\n [ngbTypeahead]=\"suggestImpactAssessment\"\n [inputFormatter]=\"formatter\"\n [resultTemplate]=\"suggestion\"\n [focusFirst]=\"true\"\n >\n <span class=\"icon is-small is-right has-text-grey-dark\" [class.is-hidden]=\"!(suggesting || loading)\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"sm\"></fa-icon>\n </span>\n </div>\n <div class=\"control\">\n <button class=\"button is-small\" type=\"submit\" [disabled]=\"suggesting || loading\">\n <fa-icon icon=\"plus\"></fa-icon>\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <he-impact-assessments-indicator-breakdown-chart *ngIf=\"selectedView === View.breakdown\"\n [impactAssessment]=\"impactAssessments[0]\"\n [indicators]=\"impactAssessments[0][key]\"\n ></he-impact-assessments-indicator-breakdown-chart>\n\n <he-impact-assessments-indicators-chart *ngIf=\"impactAssessments.length > 1\" [class.is-hidden]=\"selectedView !== View.chart\"\n [key]=\"key\"\n [impactAssessments]=\"selectedImpactAssessments\"\n [filterTermTypes]=\"filterTermTypes\"\n ></he-impact-assessments-indicators-chart>\n\n <he-impact-assessments-products-logs *ngIf=\"selectedView === View.logs && !isOriginal\"\n [key]=\"key\"\n [impactAssessment]=\"impactAssessments[0]\"\n [filterTermTypes]=\"filterTermTypes\"\n [originalValues]=\"originalValues[0][key]\"\n [recalculatedValues]=\"impactAssessments[0][key]\"\n ></he-impact-assessments-products-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"impactAssessments\" [filename]=\"'impact-' + key + '.csv'\" [isUpload]=\"false\"\n [headerKeys]=\"['impactAssessment.id', 'impactAssessment.@id', 'impactAssessment.' + key + '.']\"\n (closed)=\"showDownload = false\"\n></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No data</span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\" let-key=\"key\">\n <p *bindOnce=\"node\">\n <b>\n <span *ngIf=\"data.cycle\">{{cycleLabel(node.cycle)}}</span>\n <span *ngIf=\"!data.cycle\">{{data.name}}</span>\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\" [nodeType]=\"node['@type']\" [dataKey]=\"key\"\n ></he-node-value-details>\n</ng-template>\n\n<ng-template #suggestion let-impact=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"impact.name || impact.cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"impact.country\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.product.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\n</ng-template>\n", styles: ["label.checkbox{width:20px}td he-node-link{width:160px}table.data-table td:first-child{border-left-width:8px}\n"], components: [{ type: i5.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i6.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: i7.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["nodeType", "dataKey", "key", "node", "state"] }, { type: i8.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { type: i9.ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { type: i10.ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["impactAssessments", "key", "filterTermTypes"] }, { type: i11.ImpactAssessmentsProductsLogsComponent, selector: "he-impact-assessments-products-logs", inputs: ["impactAssessment", "key", "filterTermTypes", "originalValues", "recalculatedValues"] }, { type: i12.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i13.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }, { type: i14.NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term"] }], directives: [{ type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i16.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }, { type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i14.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "ellipsis": i17.EllipsisPipe, "default": i18.DefaultPipe, "precision": i19.PrecisionPipe } });
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsProductsComponent, decorators: [{
|
|
231
|
+
type: Component,
|
|
232
|
+
args: [{
|
|
233
|
+
selector: 'he-impact-assessments-products',
|
|
234
|
+
templateUrl: './impact-assessments-products.component.html',
|
|
235
|
+
styleUrls: ['./impact-assessments-products.component.scss']
|
|
236
|
+
}]
|
|
237
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.HeNodeService }, { type: i3.HeSearchService }, { type: i4.ToastService }]; }, propDecorators: { cycles: [{
|
|
238
|
+
type: Input
|
|
239
|
+
}], impactAssessments: [{
|
|
240
|
+
type: Input
|
|
241
|
+
}], key: [{
|
|
242
|
+
type: Input
|
|
243
|
+
}], dataState: [{
|
|
244
|
+
type: Input
|
|
245
|
+
}], enableCompare: [{
|
|
246
|
+
type: Input
|
|
247
|
+
}], filterTermTypes: [{
|
|
248
|
+
type: Input
|
|
249
|
+
}], enableFilterMethodModel: [{
|
|
250
|
+
type: Input
|
|
251
|
+
}] } });
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUNMLFFBQVEsRUFDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QyxPQUFPLEVBQ0wsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFDakgsTUFBTSwyQkFBMkIsQ0FBQztBQUduQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBZ0IsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFUckgsTUFBTSxPQUFPLEdBQUcsT0FB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QUUsQ0FBQzs7S0FDdEI7O2dJQWpQVSxrQ0FBa0M7b0hBQWxDLGtDQUFrQyw2VENqQy9DLHk4VEEwTkE7NEZEekxhLGtDQUFrQztrQkFMOUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxXQUFXLEVBQUUsOENBQThDO29CQUMzRCxTQUFTLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQztpQkFDNUQ7dUxBTVMsTUFBTTtzQkFEYixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFHQyxHQUFHO3NCQURULEtBQUs7Z0JBR0MsU0FBUztzQkFEZixLQUFLO2dCQUdDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBR0MsZUFBZTtzQkFEckIsS0FBSztnQkFHQyx1QkFBdUI7c0JBRDdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgTm9kZVR5cGUsIElDeWNsZUpTT05MRCwgSUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIEluZGljYXRvciwgQ3ljbGUsIFRlcm1UZXJtVHlwZSwgVGVybVxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5jb25zdCBvcmRlckJ5ID0gcmVxdWlyZSgnbG9kYXNoLm9yZGVyYnknKTtcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuXG5pbXBvcnQgeyBIZU5vZGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgbWF0Y2hUeXBlLCBtYXRjaEV4YWN0UXVlcnksIG1hdGNoUGhyYXNlUXVlcnksIG1hdGNoUGhyYXNlUHJlZml4UXVlcnksIG1hdGNoQm9vbFByZWZpeFF1ZXJ5LCBtYXRjaEFnZ3JlZ2F0ZWRRdWVyeVxufSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24vdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlLCBncm91cE5vZGVzQnlUZXJtLCBpdGVtQ29sb3IsIElHcm91cGVkS2V5cywgZ3JvdXBwZWRLZXlzLCBiYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuY29uc3QgTUlOX1RZUEVBSEVBRF9MRU5HVEggPSAxO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGNoYXJ0ID0gJ2NoYXJ0JyxcbiAgYnJlYWtkb3duID0gJ2JyZWFrZG93bicsXG4gIGxvZ3MgPSAnbG9ncydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBwcml2YXRlIGRhdGFTdGF0ZVZhbHVlczoge1xuICAgIFtkYXRhU3RhdGUgaW4gRGF0YVN0YXRlXT86IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW107XG4gIH0gPSB7fTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjeWNsZXM/OiBJQ3ljbGVKU09OTERbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaW1wYWN0QXNzZXNzbWVudHM6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGtleTogJ2ltcGFjdHMnIHwgJ2VtaXNzaW9uc1Jlc291cmNlVXNlJyA9ICdpbXBhY3RzJztcbiAgQElucHV0KClcbiAgcHVibGljIGRhdGFTdGF0ZT86IERhdGFTdGF0ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZUNvbXBhcmUgPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlbmFibGVGaWx0ZXJNZXRob2RNb2RlbCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHVibGljIGl0ZW1Db2xvciA9IGl0ZW1Db2xvcjtcbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHVibGljIFZpZXcgPSBWaWV3O1xuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcblxuICBwdWJsaWMgbWV0aG9kTW9kZWxzOiBUZXJtW10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkTWV0aG9kTW9kZWw/OiBUZXJtO1xuXG4gIHB1YmxpYyBpbmRpY2F0b3JzOiBJR3JvdXBlZEtleXM8SW5kaWNhdG9yPltdID0gW107XG5cbiAgLy8gQWRkaW5nIGltcGFjdHMgdG8gY29tcGFyZVxuICBwdWJsaWMgZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgIHNlYXJjaDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICB9KTtcbiAgcHVibGljIHNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudHM6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW10gPSBbXTtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHN1Z2dlc3RpbmcgPSBmYWxzZTtcbiAgcHVibGljIGZvcm1hdHRlciA9ICh7ICdAaWQnOiBpZCB9KSA9PiBpZDtcbiAgcHVibGljIHN1Z2dlc3RJbXBhY3RBc3Nlc3NtZW50ID0gKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XG4gICAgdGV4dCQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN1Z2dlc3RpbmcgPSB0cnVlKSxcbiAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRoaXMuc3VnZ2VzdCh0ZXJtKSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zdWdnZXN0aW5nID0gZmFsc2UpXG4gICAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogSGVTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoJ2ltcGFjdEFzc2Vzc21lbnRzJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLmRhdGFTdGF0ZVZhbHVlc1t0aGlzLmRhdGFTdGF0ZSFdID0gY2hhbmdlcy5pbXBhY3RBc3Nlc3NtZW50cy5jdXJyZW50VmFsdWUuc2xpY2UoKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSW1wYWN0cygpO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmICgnZGF0YVN0YXRlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVEYXRhU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkge1xuICAgIHJldHVybiBpdGVtWydAaWQnXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcmlnaW5hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3RhdGUgPT09IERhdGFTdGF0ZS5vcmlnaW5hbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3JpZ2luYWxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLmlzT3JpZ2luYWwgPyBudWxsIDogdGhpcy5kYXRhU3RhdGVWYWx1ZXNbRGF0YVN0YXRlLm9yaWdpbmFsXSkgfHwgW107XG4gIH1cblxuICBwcml2YXRlIHRlcm1BbGxvd2VkKHRlcm0/OiBUZXJtKSB7XG4gICAgcmV0dXJuICF0aGlzLmZpbHRlclRlcm1UeXBlcz8ubGVuZ3RoIHx8ICh0aGlzLmZpbHRlclRlcm1UeXBlcyB8fCBbXSkuaW5jbHVkZXModGVybT8udGVybVR5cGUhKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKCkge1xuICAgIHRoaXMudXBkYXRlSW1wYWN0cygpO1xuICAgIHRoaXMuZW5hYmxlRmlsdGVyTWV0aG9kTW9kZWwgJiYgdGhpcy51cGRhdGVNZXRob2RNb2RlbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWV0aG9kTW9kZWxzKCkge1xuICAgIGNvbnN0IG1ldGhvZE1vZGVscyA9IHRoaXMuaW1wYWN0QXNzZXNzbWVudHNcbiAgICAgIC5mbGF0TWFwKGltcGFjdCA9PiAoaW1wYWN0W3RoaXMua2V5XSB8fCBbXSkubWFwKHYgPT4gdi5tZXRob2RNb2RlbCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHRoaXMubWV0aG9kTW9kZWxzID0gdW5pcXVlKG1ldGhvZE1vZGVscyBhcyBUZXJtW10pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUltcGFjdHMoKSB7XG4gICAgY29uc3QgaW5kaWNhdG9yUGVySW1wYWN0QXNzZXNzbWVudCA9IGdyb3VwTm9kZXNCeVRlcm08SUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIEluZGljYXRvcj4oXG4gICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzLCB0aGlzLmtleSwgdGhpcy5vcmlnaW5hbFZhbHVlcywgdGhpcy5zZWxlY3RlZE1ldGhvZE1vZGVsXG4gICAgKTtcbiAgICB0aGlzLmluZGljYXRvcnMgPSBvcmRlckJ5KGdyb3VwcGVkS2V5cyhpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50KSwgWyd2YWx1ZS5tZXRob2RUaWVyT3JkZXInLCAna2V5J10sIFsnYXNjJywgJ2FzYyddKVxuICAgICAgLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB0aGlzLnRlcm1BbGxvd2VkKHZhbHVlPy50ZXJtKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWREYXRhU3RhdGUoZGF0YVN0YXRlOiBEYXRhU3RhdGUpIHtcbiAgICB0aGlzLmRhdGFTdGF0ZVZhbHVlc1tkYXRhU3RhdGVdID0gdGhpcy5kYXRhU3RhdGVWYWx1ZXNbZGF0YVN0YXRlXSB8fCBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRoaXMuaW1wYWN0QXNzZXNzbWVudHMubWFwKG5vZGUgPT5cbiAgICAgICAgdGhpcy5ub2RlU2VydmljZS5nZXQ8SUltcGFjdEFzc2Vzc21lbnRKU09OTEQ+KHtcbiAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgIGRhdGFTdGF0ZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZURhdGFTdGF0ZSgpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhU3RhdGUodGhpcy5kYXRhU3RhdGUhKTtcbiAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzID0gdGhpcy5kYXRhU3RhdGVWYWx1ZXNbdGhpcy5kYXRhU3RhdGUhXSEuc2xpY2UoKTtcbiAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQb3BvdmVyKHBvcG92ZXIsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBpbXBhY3ROYW1lKGltcGFjdDogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICByZXR1cm4gaW1wYWN0Lm5hbWUgfHwgKGltcGFjdC5jeWNsZSA/IHRoaXMuY3ljbGVMYWJlbChpbXBhY3QuY3ljbGUpIDogaW1wYWN0WydAaWQnXSkgfHwgKGltcGFjdCBhcyBhbnkpLmlkO1xuICB9XG5cbiAgcHVibGljIGN5Y2xlTGFiZWwoeyAnQGlkJzogaWQsIG5hbWUgfTogYW55KSB7XG4gICAgcmV0dXJuIG5hbWUgfHwgKHRoaXMuY3ljbGVzIHx8IFtdKS5maW5kKHYgPT4gdlsnQGlkJ10gPT09IGlkKT8ubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW5hYmxlQnJlYWtkb3duKCkge1xuICAgIHJldHVybiAhdGhpcy5pc09yaWdpbmFsICYmIHRoaXMuaW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID09PSAxICYmIHRoaXMua2V5ID09PSAnaW1wYWN0cyc7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwdWJsaWMgYXN5bmMgc2hvd1JlY2FsY3VsYXRpb25Mb2dzKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgLy8gbWFrZSBzdXJlIG9yaWdpbmFsIGRhdGEgaXMgYWxzbyBsb2FkZWRcbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhU3RhdGUoRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkVmlldyA9IFZpZXcubG9ncztcbiAgfVxuXG4gIC8vIENvbXBhcmVcblxuICBwcml2YXRlIHNlbGVjdEFsbEltcGFjdHMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRzID0gdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5zbGljZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnNlbGVjdEFsbEltcGFjdHMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRzID0gW107XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQWxsSW1wYWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRzLmxlbmd0aCA/IHRoaXMuc2VsZWN0QWxsSW1wYWN0cygpIDogdGhpcy51bnNlbGVjdEFsbEltcGFjdHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0SW1wYWN0KGltcGFjdDogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudHMgPSBbXG4gICAgICAuLi50aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudHMsXG4gICAgICBpbXBhY3RcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnNlbGVjdEltcGFjdChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRzID0gdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRzLnNsaWNlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlSW1wYWN0KGltcGFjdDogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50cy5pbmRleE9mKGltcGFjdCk7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLnVuc2VsZWN0SW1wYWN0KGluZGV4KSA6IHRoaXMuc2VsZWN0SW1wYWN0KGltcGFjdCk7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxlY3RlZChpbXBhY3Q6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50cy5pbmNsdWRlcyhpbXBhY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWdnZXN0KHRlcm06IHN0cmluZykge1xuICAgIHJldHVybiB0ZXJtLmxlbmd0aCA8IE1JTl9UWVBFQUhFQURfTEVOR1RIID9cbiAgICAgIG9mKFtdKSA6XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3VnZ2VzdCh0ZXJtLCBOb2RlVHlwZS5JbXBhY3RBc3Nlc3NtZW50LCBbXSwge1xuICAgICAgICBib29sOiB7XG4gICAgICAgICAgbXVzdDogW1xuICAgICAgICAgICAgbWF0Y2hUeXBlKE5vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnQpLFxuICAgICAgICAgICAgbWF0Y2hBZ2dyZWdhdGVkUXVlcnlcbiAgICAgICAgICBdLFxuICAgICAgICAgIG11c3Rfbm90OiB0aGlzLmltcGFjdEFzc2Vzc21lbnRzLm1hcCgoeyAnQGlkJzogaWQgfSkgPT4gbWF0Y2hFeGFjdFF1ZXJ5KCdAaWQnLCBpZCkpLFxuICAgICAgICAgIHNob3VsZDogW1xuICAgICAgICAgICAgbWF0Y2hQaHJhc2VRdWVyeSh0ZXJtLCAxMDAsICdAaWQnLCAnbmFtZScsICdjeWNsZS5uYW1lJyksXG4gICAgICAgICAgICBtYXRjaFBocmFzZVByZWZpeFF1ZXJ5KHRlcm0sIDIwLCAnQGlkJywgJ25hbWUnLCAnY3ljbGUubmFtZScpLFxuICAgICAgICAgICAgbWF0Y2hCb29sUHJlZml4UXVlcnkodGVybSwgMTAsICdAaWQnLCAnbmFtZScsICdjeWNsZS5uYW1lJylcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1pbmltdW1fc2hvdWxkX21hdGNoOiAxXG4gICAgICAgIH1cbiAgICAgIH0sIDEwLCBbJ2N5Y2xlLm5hbWUnLCAnY291bnRyeS5uYW1lJywgJ3Byb2R1Y3QubmFtZScsICdlbmREYXRlJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSW1wYWN0KGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbXBhY3QgPSBhd2FpdCB0aGlzLm5vZGVTZXJ2aWNlLmdldDxJSW1wYWN0QXNzZXNzbWVudEpTT05MRD4oe1xuICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudCxcbiAgICAgICdAaWQnOiBpZCxcbiAgICAgIGRhdGFTdGF0ZTogRGF0YVN0YXRlLnJlY2FsY3VsYXRlZFxuICAgIH0sIGZhbHNlKTtcbiAgICByZXR1cm4gaW1wYWN0WydAaWQnXSA/IHtcbiAgICAgIC4uLmltcGFjdCxcbiAgICAgIGN5Y2xlOiBhd2FpdCB0aGlzLmZldGNoQ3ljbGUoaW1wYWN0KVxuICAgIH0gOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaEN5Y2xlKHsgY3ljbGUgfTogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICByZXR1cm4gIWN5Y2xlIHx8IGN5Y2xlLm5hbWUgPyBjeWNsZTogdGhpcy5ub2RlU2VydmljZS5nZXQ8Q3ljbGU+KHtcbiAgICAgICdAdHlwZSc6IE5vZGVUeXBlLkN5Y2xlLFxuICAgICAgJ0BpZCc6IGN5Y2xlWydAaWQnXVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZEltcGFjdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHsgc2VhcmNoOiB7ICdAaWQnOiBpZCwgbmFtZSB9IH0gPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgY29uc3QgaW1wYWN0ID0gYXdhaXQgdGhpcy5sb2FkSW1wYWN0KGlkKTtcbiAgICBpZiAoaW1wYWN0KSB7XG4gICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzID0gW1xuICAgICAgICAuLi50aGlzLmltcGFjdEFzc2Vzc21lbnRzLFxuICAgICAgICBpbXBhY3RcbiAgICAgIF07XG4gICAgICB0aGlzLnNlbGVjdEltcGFjdChpbXBhY3QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmVycm9yKGBFcnJvciB3aGlsZSBsb2FkaW5nICR7bmFtZSB8fCBpZH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlYXJjaCcpPy5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGljYXRvcnMubGVuZ3RoOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmFyaWFibGUgaXMtMiBtLTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLWhpZGRlbi1tb2JpbGVcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGFibGVcIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJsaXN0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+VGFibGUgdmlldzwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nSWY9XCJpbXBhY3RBc3Nlc3NtZW50cy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmNoYXJ0XCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcuY2hhcnRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2hhcnQtYmFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+Q2hhcnQgdmlldzwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nSWY9XCJlbmFibGVCcmVha2Rvd25cIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuYnJlYWtkb3duXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcuYnJlYWtkb3duXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNoYXJ0LWJhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPkJyZWFrZG93biB2aWV3PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cIiFpc09yaWdpbmFsICYmIGltcGFjdEFzc2Vzc21lbnRzLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzXCIgKGNsaWNrKT1cInNob3dSZWNhbGN1bGF0aW9uTG9ncygpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNhbGN1bGF0b3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5SZWNhbGN1bGF0aW9ucyBsb2dzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzZWxlY3RlZFZpZXcgIT09IFZpZXcudGFibGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtcmlnaHQgbWItMlwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1kYXJrIGlzLW91dGxpbmVkIGlzLXNtYWxsXCIgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIj5cbiAgICAgICAgPGZhLWljb24gaWNvbj1cImRvd25sb2FkXCI+PC9mYS1pY29uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5Eb3dubG9hZCAoQ1NWKTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciBkYXRhLXRhYmxlLWNvbnRhaW5lciBtYi0xXCIgKmJpbmRPbmNlPVwiaW5kaWNhdG9yc1wiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtbmFycm93IGRhdGEtdGFibGUgaGFzLWNoaWxkcmVuLXt7aW5kaWNhdG9ycy5sZW5ndGggKyAxfX1cIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbFwiICpuZ0lmPVwiZW5hYmxlRmlsdGVyTWV0aG9kTW9kZWxcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzZWxlY3RlZE1ldGhvZE1vZGVsXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlSW1wYWN0cygpXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1ldGhvZE1vZGVsXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInVuZGVmaW5lZFwiPkZpbHRlciBNb2RlbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdGVybSBvZiBtZXRob2RNb2RlbHNcIiBbbmdWYWx1ZV09XCJ0ZXJtXCI+e3t0ZXJtLm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaW5kaWNhdG9yIG9mIGluZGljYXRvcnNcIlxuICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpbmRpY2F0b3IudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJpbmRpY2F0b3IudmFsdWUudGVybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7aW5kaWNhdG9yLnZhbHVlLnRlcm0ubmFtZSB8IGVsbGlwc2lzOjMwfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj5cbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0ltcGFjdEFzc2Vzc21lbnQjZnVuY3Rpb25hbFVuaXQnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RnVuY3Rpb25hbCB1bml0OjwvYT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0xXCI+MSBrZzwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGg+UHJvZHVjdDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGluZGljYXRvciBvZiBpbmRpY2F0b3JzXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiaW5kaWNhdG9yLnZhbHVlLnRlcm0udW5pdHNcIlxuICAgICAgICAgICAgPnt7aW5kaWNhdG9yLnZhbHVlLnRlcm0udW5pdHN9fTwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaW1wYWN0QXNzZXNzbWVudCBvZiBpbXBhY3RBc3Nlc3NtZW50czsgdHJhY2tCeTogdHJhY2tCeUlkOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCIgW2F0dHIudGl0bGVdPVwiaW1wYWN0TmFtZShpbXBhY3RBc3Nlc3NtZW50KVwiIFtzdHlsZS5ib3JkZXItbGVmdC1jb2xvcl09XCJpdGVtQ29sb3IoaSlcIj5cbiAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiZW5hYmxlQ29tcGFyZVwiIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVJbXBhY3QoaW1wYWN0QXNzZXNzbWVudClcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChpbXBhY3RBc3Nlc3NtZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgW25vZGVdPVwiaW1wYWN0QXNzZXNzbWVudFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tpICsgMX19LiB7e2ltcGFjdE5hbWUoaW1wYWN0QXNzZXNzbWVudCl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIFthdHRyLnRpdGxlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8ubmFtZVwiPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rICpuZ0lmPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0XCIgW25vZGVdPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3QubmFtZSB8IGVsbGlwc2lzOjMwfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBpbmRpY2F0b3Igb2YgaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dOyBlbHNlIGVtcHR5VmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBbbmdiUG9wb3Zlcl09XCJkZXRhaWxzXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCIgI3A9XCJuZ2JQb3BvdmVyXCIgcGxhY2VtZW50PVwibGVmdFwiIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQb3BvdmVyKHAsIHsgZGF0YTogaW5kaWNhdG9yLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV0sIGltcGFjdEFzc2Vzc21lbnQ6IGltcGFjdEFzc2Vzc21lbnQsIGtleToga2V5IH0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIHBvaW50ZXI+e3twcm9wZXJ0eVZhbHVlKGluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLnZhbHVlLCBrZXkgPT09ICdpbXBhY3RzJykgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgIFtub2RlXT1cImluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLm5vZGVzWzBdXCJcbiAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJpbXBhY3RBc3Nlc3NtZW50LmFnZ3JlZ2F0ZWQgPyAnYWdncmVnYXRlZCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICA+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuXG4gICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cblxuICAgIDxmb3JtICpuZ0lmPVwiZW5hYmxlQ29tcGFyZVwiIGNsYXNzPVwibXQtMlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwiZm9ybS52YWxpZCAmJiBhZGRJbXBhY3QoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWNcIj5Db21wYXJlIHdpdGggQWdncmVnYXRlZCBJbXBhY3QgQXNzZXNzbWVudDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCIgW2NsYXNzLmhhcy1pY29ucy1yaWdodF09XCJzdWdnZXN0aW5nIHx8IGxvYWRpbmdcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBpcy1zbWFsbFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBuYW1lIG9yIGlkXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiIG5hbWU9XCJzZWFyY2hcIlxuXG4gICAgICAgICAgICBbbmdiVHlwZWFoZWFkXT1cInN1Z2dlc3RJbXBhY3RBc3Nlc3NtZW50XCJcbiAgICAgICAgICAgIFtpbnB1dEZvcm1hdHRlcl09XCJmb3JtYXR0ZXJcIlxuICAgICAgICAgICAgW3Jlc3VsdFRlbXBsYXRlXT1cInN1Z2dlc3Rpb25cIlxuICAgICAgICAgICAgW2ZvY3VzRmlyc3RdPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbCBpcy1yaWdodCBoYXMtdGV4dC1ncmV5LWRhcmtcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiEoc3VnZ2VzdGluZyB8fCBsb2FkaW5nKVwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNwaW5uZXJcIiBbcHVsc2VdPVwidHJ1ZVwiIHNpemU9XCJzbVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cInN1Z2dlc3RpbmcgfHwgbG9hZGluZ1wiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInBsdXNcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cblxuICA8aGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuYnJlYWtkb3duXCJcbiAgICBbaW1wYWN0QXNzZXNzbWVudF09XCJpbXBhY3RBc3Nlc3NtZW50c1swXVwiXG4gICAgW2luZGljYXRvcnNdPVwiaW1wYWN0QXNzZXNzbWVudHNbMF1ba2V5XVwiXG4gID48L2hlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3ItYnJlYWtkb3duLWNoYXJ0PlxuXG4gIDxoZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydCAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnRzLmxlbmd0aCA+IDFcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVmlldyAhPT0gVmlldy5jaGFydFwiXG4gICAgW2tleV09XCJrZXlcIlxuICAgIFtpbXBhY3RBc3Nlc3NtZW50c109XCJzZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRzXCJcbiAgICBbZmlsdGVyVGVybVR5cGVzXT1cImZpbHRlclRlcm1UeXBlc1wiXG4gID48L2hlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0PlxuXG4gIDxoZS1pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMtbG9ncyAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzICYmICFpc09yaWdpbmFsXCJcbiAgICBba2V5XT1cImtleVwiXG4gICAgW2ltcGFjdEFzc2Vzc21lbnRdPVwiaW1wYWN0QXNzZXNzbWVudHNbMF1cIlxuICAgIFtmaWx0ZXJUZXJtVHlwZXNdPVwiZmlsdGVyVGVybVR5cGVzXCJcbiAgICBbb3JpZ2luYWxWYWx1ZXNdPVwib3JpZ2luYWxWYWx1ZXNbMF1ba2V5XVwiXG4gICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJpbXBhY3RBc3Nlc3NtZW50c1swXVtrZXldXCJcbiAgPjwvaGUtaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLWxvZ3M+XG48L25nLWNvbnRhaW5lcj5cblxuPGhlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtICpuZ0lmPVwic2hvd0Rvd25sb2FkXCJcbiAgW25vZGVzXT1cImltcGFjdEFzc2Vzc21lbnRzXCIgW2ZpbGVuYW1lXT1cIidpbXBhY3QtJyArIGtleSArICcuY3N2J1wiIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gIFtoZWFkZXJLZXlzXT1cIlsnaW1wYWN0QXNzZXNzbWVudC5pZCcsICdpbXBhY3RBc3Nlc3NtZW50LkBpZCcsICdpbXBhY3RBc3Nlc3NtZW50LicgKyBrZXkgKyAnLiddXCJcbiAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiXG4+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlPlxuICA8ZGl2IGNsYXNzPVwicGFuZWwtYmxvY2tcIj5cbiAgICA8c3Bhbj5ObyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImltcGFjdEFzc2Vzc21lbnRcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwia2V5XCI+XG4gIDxwICpiaW5kT25jZT1cIm5vZGVcIj5cbiAgICA8Yj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5jeWNsZVwiPnt7Y3ljbGVMYWJlbChub2RlLmN5Y2xlKX19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZGF0YS5jeWNsZVwiPnt7ZGF0YS5uYW1lfX08L3NwYW4+XG4gICAgPC9iPlxuICA8L3A+XG4gIDxoZS1ub2RlLXZhbHVlLWRldGFpbHNcbiAgICBbZGF0YV09XCJkYXRhXCIgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIiBbZGF0YUtleV09XCJrZXlcIlxuICA+PC9oZS1ub2RlLXZhbHVlLWRldGFpbHM+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N1Z2dlc3Rpb24gbGV0LWltcGFjdD1cInJlc3VsdFwiIGxldC10PVwidGVybVwiPlxuICA8ZGl2IGNsYXNzPVwiaXMtYmxvY2tcIj5cbiAgICA8bmdiLWhpZ2hsaWdodCBbcmVzdWx0XT1cImltcGFjdC5uYW1lIHx8IGltcGFjdC5jeWNsZS5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLWZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJpbXBhY3QuY291bnRyeVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGhhcy10ZXh0LXVuZGVybGluZVwiPkNvdW50cnk6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtZmxleFwiPjxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0LmNvdW50cnkubmFtZVwiIFt0ZXJtXT1cInRcIj48L25nYi1oaWdobGlnaHQ+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAqbmdJZj1cImltcGFjdC5wcm9kdWN0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTEgaGFzLXRleHQtdW5kZXJsaW5lXCI+UHJvZHVjdDo8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1mbGV4XCI+PG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJpbXBhY3QucHJvZHVjdC5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwiaW1wYWN0LmVuZERhdGVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicHItMSBoYXMtdGV4dC11bmRlcmxpbmVcIj5EYXRlOjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWZsZXhcIj48bmdiLWhpZ2hsaWdodCBbcmVzdWx0XT1cImltcGFjdC5lbmREYXRlXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { DataState } from '@hestia-earth/api';
|
|
4
|
+
import { NodeType } from '@hestia-earth/schema';
|
|
5
|
+
import { matchTermType, matchType } from '../../search/search.model';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../search/search.service";
|
|
8
|
+
import * as i2 from "../../node/node.service";
|
|
9
|
+
import * as i3 from "../../node/node-logs-models/node-logs-models.component";
|
|
10
|
+
import * as i4 from "@fortawesome/angular-fontawesome";
|
|
11
|
+
import * as i5 from "@angular/common";
|
|
12
|
+
export class ImpactAssessmentsProductsLogsComponent {
|
|
13
|
+
constructor(searchService, nodeService) {
|
|
14
|
+
this.searchService = searchService;
|
|
15
|
+
this.nodeService = nodeService;
|
|
16
|
+
this.originalValues = [];
|
|
17
|
+
this.recalculatedValues = [];
|
|
18
|
+
this.loading = true;
|
|
19
|
+
this.NodeType = NodeType;
|
|
20
|
+
this.models = [];
|
|
21
|
+
this.emissions = [];
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
this.logsUrl = this.nodeService.nodeLogsUrl(this.node);
|
|
26
|
+
this.logs = yield this.nodeService.getModelsLog(this.node);
|
|
27
|
+
const { results: emissions } = yield this.searchService.search({
|
|
28
|
+
fields: ['@type', '@id', 'name'],
|
|
29
|
+
limit: 1000,
|
|
30
|
+
query: {
|
|
31
|
+
bool: {
|
|
32
|
+
must: [
|
|
33
|
+
matchType(NodeType.Term)
|
|
34
|
+
],
|
|
35
|
+
should: (this.filterTermTypes || []).map(termType => matchTermType(termType)),
|
|
36
|
+
minimum_should_match: 1
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
this.emissions = emissions;
|
|
41
|
+
this.loading = false;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
get node() {
|
|
45
|
+
return Object.assign(Object.assign({}, this.impactAssessment), { dataState: DataState.recalculated });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
ImpactAssessmentsProductsLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsProductsLogsComponent, deps: [{ token: i1.HeSearchService }, { token: i2.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
49
|
+
ImpactAssessmentsProductsLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsProductsLogsComponent, selector: "he-impact-assessments-products-logs", inputs: { impactAssessment: "impactAssessment", key: "key", filterTermTypes: "filterTermTypes", originalValues: "originalValues", recalculatedValues: "recalculatedValues" }, ngImport: i0, template: "<he-node-logs-models *ngIf=\"!loading; else loader\"\n [logsUrl]=\"logsUrl\"\n [nodeType]=\"NodeType.ImpactAssessment\"\n [nodeKey]=\"key\"\n [originalValues]=\"originalValues\"\n [recalculatedValues]=\"recalculatedValues\"\n [terms]=\"emissions\"\n [logs]=\"logs\"\n filteredType=\"Emission\"\n></he-node-logs-models>\n\n<ng-template #loader>\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: i3.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["nodeType", "nodeKey", "logsUrl", "originalValues", "recalculatedValues", "terms", "logs", "filteredType"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ImpactAssessmentsProductsLogsComponent, decorators: [{
|
|
51
|
+
type: Component,
|
|
52
|
+
args: [{
|
|
53
|
+
selector: 'he-impact-assessments-products-logs',
|
|
54
|
+
templateUrl: './impact-assessments-products-logs.component.html',
|
|
55
|
+
styleUrls: ['./impact-assessments-products-logs.component.scss']
|
|
56
|
+
}]
|
|
57
|
+
}], ctorParameters: function () { return [{ type: i1.HeSearchService }, { type: i2.HeNodeService }]; }, propDecorators: { impactAssessment: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}], key: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], filterTermTypes: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], originalValues: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], recalculatedValues: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}] } });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLWxvZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGFjdC1hc3Nlc3NtZW50cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMtbG9ncy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMtbG9ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy1sb2dzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy1sb2dzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFrRCxRQUFRLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7OztBQVNyRSxNQUFNLE9BQU8sc0NBQXNDO0lBbUJqRCxZQUNVLGFBQThCLEVBQzlCLFdBQTBCO1FBRDFCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQWI3QixtQkFBYyxHQUFlLEVBQUUsQ0FBQztRQUVoQyx1QkFBa0IsR0FBZSxFQUFFLENBQUM7UUFFcEMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVmLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFFcEIsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsY0FBUyxHQUFrQixFQUFFLENBQUM7SUFLakMsQ0FBQztJQUVDLFFBQVE7O1lBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUzRCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQTZCO2dCQUN6RixNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztnQkFDaEMsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUU7NEJBQ0osU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7eUJBQ3pCO3dCQUNELE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM3RSxvQkFBb0IsRUFBRSxDQUFDO3FCQUN4QjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBRTNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7S0FBQTtJQUVELElBQVksSUFBSTtRQUNkLHVDQUNLLElBQUksQ0FBQyxnQkFBZ0IsS0FDeEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZLElBQ2pDO0lBQ0osQ0FBQzs7b0lBbkRVLHNDQUFzQzt3SEFBdEMsc0NBQXNDLHlQQ2JuRCw0ZUFnQkE7NEZESGEsc0NBQXNDO2tCQUxsRCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQ0FBcUM7b0JBQy9DLFdBQVcsRUFBRSxtREFBbUQ7b0JBQ2hFLFNBQVMsRUFBRSxDQUFDLG1EQUFtRCxDQUFDO2lCQUNqRTtrSUFHUyxnQkFBZ0I7c0JBRHZCLEtBQUs7Z0JBR0MsR0FBRztzQkFEVCxLQUFLO2dCQUdDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBR0MsY0FBYztzQkFEcEIsS0FBSztnQkFHQyxrQkFBa0I7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IEVtaXNzaW9uLCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgSVRlcm1KU09OTEQsIE5vZGVUeXBlLCBUZXJtVGVybVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmltcG9ydCB7IG1hdGNoVGVybVR5cGUsIG1hdGNoVHlwZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2gubW9kZWwnO1xuaW1wb3J0IHsgSGVTZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy1sb2dzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy1sb2dzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLWxvZ3MuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBhY3RBc3Nlc3NtZW50c1Byb2R1Y3RzTG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgaW1wYWN0QXNzZXNzbWVudD86IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEO1xuICBASW5wdXQoKVxuICBwdWJsaWMga2V5Pzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcmlnaW5hbFZhbHVlczogRW1pc3Npb25bXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVjYWxjdWxhdGVkVmFsdWVzOiBFbWlzc2lvbltdID0gW107XG5cbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgbG9nc1VybD86IHN0cmluZztcbiAgcHVibGljIE5vZGVUeXBlID0gTm9kZVR5cGU7XG4gIHB1YmxpYyBsb2dzOiBhbnk7XG4gIHB1YmxpYyBtb2RlbHM6IElUZXJtSlNPTkxEW10gPSBbXTtcbiAgcHVibGljIGVtaXNzaW9uczogSVRlcm1KU09OTERbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogSGVTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2VcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvZ3NVcmwgPSB0aGlzLm5vZGVTZXJ2aWNlLm5vZGVMb2dzVXJsKHRoaXMubm9kZSk7XG4gICAgdGhpcy5sb2dzID0gYXdhaXQgdGhpcy5ub2RlU2VydmljZS5nZXRNb2RlbHNMb2codGhpcy5ub2RlKTtcblxuICAgIGNvbnN0IHsgcmVzdWx0czogZW1pc3Npb25zIH0gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoPElUZXJtSlNPTkxELCBOb2RlVHlwZS5UZXJtPih7XG4gICAgICBmaWVsZHM6IFsnQHR5cGUnLCAnQGlkJywgJ25hbWUnXSxcbiAgICAgIGxpbWl0OiAxMDAwLFxuICAgICAgcXVlcnk6IHtcbiAgICAgICAgYm9vbDoge1xuICAgICAgICAgIG11c3Q6IFtcbiAgICAgICAgICAgIG1hdGNoVHlwZShOb2RlVHlwZS5UZXJtKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2hvdWxkOiAodGhpcy5maWx0ZXJUZXJtVHlwZXMgfHwgW10pLm1hcCh0ZXJtVHlwZSA9PiBtYXRjaFRlcm1UeXBlKHRlcm1UeXBlKSksXG4gICAgICAgICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZW1pc3Npb25zID0gZW1pc3Npb25zO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldCBub2RlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmltcGFjdEFzc2Vzc21lbnQsXG4gICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICB9O1xuICB9XG59XG4iLCI8aGUtbm9kZS1sb2dzLW1vZGVscyAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiXG4gIFtsb2dzVXJsXT1cImxvZ3NVcmxcIlxuICBbbm9kZVR5cGVdPVwiTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudFwiXG4gIFtub2RlS2V5XT1cImtleVwiXG4gIFtvcmlnaW5hbFZhbHVlc109XCJvcmlnaW5hbFZhbHVlc1wiXG4gIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwicmVjYWxjdWxhdGVkVmFsdWVzXCJcbiAgW3Rlcm1zXT1cImVtaXNzaW9uc1wiXG4gIFtsb2dzXT1cImxvZ3NcIlxuICBmaWx0ZXJlZFR5cGU9XCJFbWlzc2lvblwiXG4+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuXG48bmctdGVtcGxhdGUgI2xvYWRlcj5cbiAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LWNlbnRlciBweS0zXCI+XG4gICAgPGZhLWljb24gaWNvbj1cInNwaW5uZXJcIiBbcHVsc2VdPVwidHJ1ZVwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltcGFjdC1hc3Nlc3NtZW50cy9pbXBhY3QtYXNzZXNzbWVudHMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVUeXBlLCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcblxuZXhwb3J0IGludGVyZmFjZSBJSW1wYWN0QXNzZXNzbWVudEpTT05MREV4dGVuZGVkIGV4dGVuZHMgSUltcGFjdEFzc2Vzc21lbnRKU09OTEQge1xuICByZWxhdGVkOiB7XG4gICAgW3R5cGUgaW4gTm9kZVR5cGVdPzogc3RyaW5nW107XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { RouterModule } from '@angular/router';
|
|
4
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { HeCommonModule } from '../common/common.module';
|
|
6
|
+
import { HeNodeModule } from '../node/node.module';
|
|
7
|
+
import { ImpactAssessmentsProductsComponent } from './impact-assessments-products/impact-assessments-products.component';
|
|
8
|
+
import { ImpactAssessmentsIndicatorBreakdownChartComponent } from './impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component';
|
|
9
|
+
import { ImpactAssessmentsIndicatorsChartComponent } from './impact-assessments-indicators-chart/impact-assessments-indicators-chart.component';
|
|
10
|
+
import { ImpactAssessmentsProductsLogsComponent } from './impact-assessments-products-logs/impact-assessments-products-logs.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
const components = [
|
|
13
|
+
ImpactAssessmentsProductsComponent,
|
|
14
|
+
ImpactAssessmentsIndicatorsChartComponent,
|
|
15
|
+
ImpactAssessmentsProductsLogsComponent,
|
|
16
|
+
ImpactAssessmentsIndicatorBreakdownChartComponent
|
|
17
|
+
];
|
|
18
|
+
export class HeImpactAssessmentsModule {
|
|
19
|
+
}
|
|
20
|
+
HeImpactAssessmentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeImpactAssessmentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
+
HeImpactAssessmentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeImpactAssessmentsModule, declarations: [ImpactAssessmentsProductsComponent,
|
|
22
|
+
ImpactAssessmentsIndicatorsChartComponent,
|
|
23
|
+
ImpactAssessmentsProductsLogsComponent,
|
|
24
|
+
ImpactAssessmentsIndicatorBreakdownChartComponent], imports: [CommonModule, RouterModule, FormsModule, ReactiveFormsModule,
|
|
25
|
+
HeCommonModule,
|
|
26
|
+
HeNodeModule], exports: [ImpactAssessmentsProductsComponent,
|
|
27
|
+
ImpactAssessmentsIndicatorsChartComponent,
|
|
28
|
+
ImpactAssessmentsProductsLogsComponent,
|
|
29
|
+
ImpactAssessmentsIndicatorBreakdownChartComponent] });
|
|
30
|
+
HeImpactAssessmentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeImpactAssessmentsModule, imports: [[
|
|
31
|
+
CommonModule, RouterModule, FormsModule, ReactiveFormsModule,
|
|
32
|
+
HeCommonModule,
|
|
33
|
+
HeNodeModule
|
|
34
|
+
]] });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeImpactAssessmentsModule, decorators: [{
|
|
36
|
+
type: NgModule,
|
|
37
|
+
args: [{
|
|
38
|
+
declarations: components,
|
|
39
|
+
exports: components,
|
|
40
|
+
imports: [
|
|
41
|
+
CommonModule, RouterModule, FormsModule, ReactiveFormsModule,
|
|
42
|
+
HeCommonModule,
|
|
43
|
+
HeNodeModule
|
|
44
|
+
]
|
|
45
|
+
}]
|
|
46
|
+
}] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGtDQUFrQyxFQUNuQyxNQUFNLHFFQUFxRSxDQUFDO0FBQzdFLE9BQU8sRUFDTCxpREFBaUQsRUFDbEQsTUFBTSx1R0FBdUcsQ0FBQztBQUMvRyxPQUFPLEVBQ0wseUNBQXlDLEVBQzFDLE1BQU0scUZBQXFGLENBQUM7QUFDN0YsT0FBTyxFQUNMLHNDQUFzQyxFQUN2QyxNQUFNLCtFQUErRSxDQUFDOztBQUV2RixNQUFNLFVBQVUsR0FBRztJQUNqQixrQ0FBa0M7SUFDbEMseUNBQXlDO0lBQ3pDLHNDQUFzQztJQUN0QyxpREFBaUQ7Q0FDbEQsQ0FBQztBQVdGLE1BQU0sT0FBTyx5QkFBeUI7O3VIQUF6Qix5QkFBeUI7d0hBQXpCLHlCQUF5QixpQkFmcEMsa0NBQWtDO1FBQ2xDLHlDQUF5QztRQUN6QyxzQ0FBc0M7UUFDdEMsaURBQWlELGFBTy9DLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQjtRQUM1RCxjQUFjO1FBQ2QsWUFBWSxhQVpkLGtDQUFrQztRQUNsQyx5Q0FBeUM7UUFDekMsc0NBQXNDO1FBQ3RDLGlEQUFpRDt3SEFZdEMseUJBQXlCLFlBTjNCO1lBQ1AsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CO1lBQzVELGNBQWM7WUFDZCxZQUFZO1NBQ2I7NEZBRVUseUJBQXlCO2tCQVRyQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxVQUFVO29CQUN4QixPQUFPLEVBQUUsVUFBVTtvQkFDbkIsT0FBTyxFQUFFO3dCQUNQLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQjt3QkFDNUQsY0FBYzt3QkFDZCxZQUFZO3FCQUNiO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEhlQ29tbW9uTW9kdWxlIH0gZnJvbSAnLi4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xuaW1wb3J0IHsgSGVOb2RlTW9kdWxlIH0gZnJvbSAnLi4vbm9kZS9ub2RlLm1vZHVsZSc7XG5cbmltcG9ydCB7XG4gIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNDb21wb25lbnRcbn0gZnJvbSAnLi9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBJbXBhY3RBc3Nlc3NtZW50c0luZGljYXRvckJyZWFrZG93bkNoYXJ0Q29tcG9uZW50XG59IGZyb20gJy4vaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQvaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yc0NoYXJ0Q29tcG9uZW50XG59IGZyb20gJy4vaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQvaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNMb2dzQ29tcG9uZW50XG59IGZyb20gJy4vaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLWxvZ3MvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLWxvZ3MuY29tcG9uZW50JztcblxuY29uc3QgY29tcG9uZW50cyA9IFtcbiAgSW1wYWN0QXNzZXNzbWVudHNQcm9kdWN0c0NvbXBvbmVudCxcbiAgSW1wYWN0QXNzZXNzbWVudHNJbmRpY2F0b3JzQ2hhcnRDb21wb25lbnQsXG4gIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNMb2dzQ29tcG9uZW50LFxuICBJbXBhY3RBc3Nlc3NtZW50c0luZGljYXRvckJyZWFrZG93bkNoYXJ0Q29tcG9uZW50XG5dO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IGNvbXBvbmVudHMsXG4gIGV4cG9ydHM6IGNvbXBvbmVudHMsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgSGVDb21tb25Nb2R1bGUsXG4gICAgSGVOb2RlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSGVJbXBhY3RBc3Nlc3NtZW50c01vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './impact-assessments.model';
|
|
2
|
+
export * from './impact-assessments.module';
|
|
3
|
+
export { ImpactAssessmentsProductsComponent } from './impact-assessments-products/impact-assessments-products.component';
|
|
4
|
+
export { ImpactAssessmentsIndicatorBreakdownChartComponent } from './impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component';
|
|
5
|
+
export { ImpactAssessmentsIndicatorsChartComponent } from './impact-assessments-indicators-chart/impact-assessments-indicators-chart.component';
|
|
6
|
+
export { ImpactAssessmentsProductsLogsComponent } from './impact-assessments-products-logs/impact-assessments-products-logs.component';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsT0FBTyxFQUNMLGtDQUFrQyxFQUNuQyxNQUFNLHFFQUFxRSxDQUFDO0FBQzdFLE9BQU8sRUFDTCxpREFBaUQsRUFDbEQsTUFBTSx1R0FBdUcsQ0FBQztBQUMvRyxPQUFPLEVBQ0wseUNBQXlDLEVBQzFDLE1BQU0scUZBQXFGLENBQUM7QUFDN0YsT0FBTyxFQUNMLHNDQUFzQyxFQUN2QyxNQUFNLCtFQUErRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbXBhY3QtYXNzZXNzbWVudHMubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9pbXBhY3QtYXNzZXNzbWVudHMubW9kdWxlJztcblxuZXhwb3J0IHtcbiAgSW1wYWN0QXNzZXNzbWVudHNQcm9kdWN0c0NvbXBvbmVudFxufSBmcm9tICcuL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50JztcbmV4cG9ydCB7XG4gIEltcGFjdEFzc2Vzc21lbnRzSW5kaWNhdG9yQnJlYWtkb3duQ2hhcnRDb21wb25lbnRcbn0gZnJvbSAnLi9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9yLWJyZWFrZG93bi1jaGFydC9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9yLWJyZWFrZG93bi1jaGFydC5jb21wb25lbnQnO1xuZXhwb3J0IHtcbiAgSW1wYWN0QXNzZXNzbWVudHNJbmRpY2F0b3JzQ2hhcnRDb21wb25lbnRcbn0gZnJvbSAnLi9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydC9pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydC5jb21wb25lbnQnO1xuZXhwb3J0IHtcbiAgSW1wYWN0QXNzZXNzbWVudHNQcm9kdWN0c0xvZ3NDb21wb25lbnRcbn0gZnJvbSAnLi9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMtbG9ncy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMtbG9ncy5jb21wb25lbnQnO1xuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { filterParams, handleAPIError } from '../common/utils';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
import * as i2 from "../common/common.service";
|
|
6
|
+
export class MendeleySearchResult {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.count = 0;
|
|
9
|
+
this.results = [];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class HeMendeleyService {
|
|
13
|
+
constructor(http, commonService) {
|
|
14
|
+
this.http = http;
|
|
15
|
+
this.commonService = commonService;
|
|
16
|
+
}
|
|
17
|
+
get path() {
|
|
18
|
+
return `${this.commonService.apiBaseUrl}/mendeley`;
|
|
19
|
+
}
|
|
20
|
+
find(params) {
|
|
21
|
+
return this.http.get(this.path, { params: filterParams(params) });
|
|
22
|
+
}
|
|
23
|
+
get(id) {
|
|
24
|
+
return this.http.get(`${this.path}/${id}`).toPromise().catch(handleAPIError);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
HeMendeleyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeMendeleyService, deps: [{ token: i1.HttpClient }, { token: i2.HeCommonService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
|
+
HeMendeleyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeMendeleyService, providedIn: 'root' });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeMendeleyService, decorators: [{
|
|
30
|
+
type: Injectable,
|
|
31
|
+
args: [{
|
|
32
|
+
providedIn: 'root'
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.HeCommonService }]; } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVuZGVsZXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW5kZWxleS9tZW5kZWxleS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVUvRCxNQUFNLE9BQU8sb0JBQW9CO0lBQWpDO1FBQ0UsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLFlBQU8sR0FBNEIsRUFBRSxDQUFDO0lBQ3hDLENBQUM7Q0FBQTtBQUtELE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFDVSxJQUFnQixFQUNoQixhQUE4QjtRQUQ5QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtJQUNyQyxDQUFDO0lBRUosSUFBWSxJQUFJO1FBQ2QsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxXQUFXLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksQ0FBQyxNQUE2QjtRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QixJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELEdBQUcsQ0FBQyxFQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0YsQ0FBQzs7K0dBaEJVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBCaWJsaW9ncmFwaHkgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmltcG9ydCB7IGZpbHRlclBhcmFtcywgaGFuZGxlQVBJRXJyb3IgfSBmcm9tICcuLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgSGVDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2NvbW1vbi5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIElNZW5kZWxleVNlYXJjaFBhcmFtcyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbiAgZG9pPzogc3RyaW5nO1xuICBzY29wdXM/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNZW5kZWxleVNlYXJjaFJlc3VsdCB7XG4gIGNvdW50ID0gMDtcbiAgcmVzdWx0czogUGFydGlhbDxCaWJsaW9ncmFwaHk+W10gPSBbXTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSGVNZW5kZWxleVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBIZUNvbW1vblNlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgZ2V0IHBhdGgoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29tbW9uU2VydmljZS5hcGlCYXNlVXJsfS9tZW5kZWxleWA7XG4gIH1cblxuICBmaW5kKHBhcmFtczogSU1lbmRlbGV5U2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TWVuZGVsZXlTZWFyY2hSZXN1bHQ+KHRoaXMucGF0aCwgeyBwYXJhbXM6IGZpbHRlclBhcmFtcyhwYXJhbXMpIH0pO1xuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxCaWJsaW9ncmFwaHk+KGAke3RoaXMucGF0aH0vJHtpZH1gKS50b1Byb21pc2UoKS5jYXRjaChoYW5kbGVBUElFcnJvcik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './mendeley.service';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW5kZWxleS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21lbmRlbGV5LnNlcnZpY2UnO1xuIl19
|