@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,48 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { NodeType } from '@hestia-earth/schema';
|
|
4
|
+
import { DataState } from '@hestia-earth/api';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../node/node.service";
|
|
7
|
+
import * as i2 from "../../node/node-logs-models/node-logs-models.component";
|
|
8
|
+
import * as i3 from "@fortawesome/angular-fontawesome";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
var Tab;
|
|
11
|
+
(function (Tab) {
|
|
12
|
+
Tab["inputs"] = "Inputs";
|
|
13
|
+
Tab["products"] = "Products";
|
|
14
|
+
})(Tab || (Tab = {}));
|
|
15
|
+
export class CyclesActivityLogsComponent {
|
|
16
|
+
constructor(nodeService) {
|
|
17
|
+
this.nodeService = nodeService;
|
|
18
|
+
this.loading = true;
|
|
19
|
+
this.NodeType = NodeType;
|
|
20
|
+
this.Tab = Tab;
|
|
21
|
+
this.selectedTab = Tab.inputs;
|
|
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
|
+
this.loading = false;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
get node() {
|
|
31
|
+
return Object.assign(Object.assign({}, this.original), { dataState: DataState.recalculated });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
CyclesActivityLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesActivityLogsComponent, deps: [{ token: i1.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
35
|
+
CyclesActivityLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesActivityLogsComponent, selector: "he-cycles-activity-logs", inputs: { original: "original", recalculated: "recalculated" }, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else loader\">\n <div class=\"tabs mb-1\">\n <ul>\n <li [class.is-active]=\"selectedTab === Tab.inputs\">\n <a (click)=\"selectedTab = Tab.inputs\">Inputs</a>\n </li>\n <li [class.is-active]=\"selectedTab === Tab.products\">\n <a (click)=\"selectedTab = Tab.products\">Products</a>\n </li>\n </ul>\n </div>\n\n <he-node-logs-models [class.is-hidden]=\"selectedTab !== Tab.inputs\"\n [logsUrl]=\"logsUrl\"\n [nodeType]=\"NodeType.Cycle\"\n [originalValues]=\"original?.inputs\"\n [recalculatedValues]=\"recalculated?.inputs\"\n [logs]=\"logs\"\n ></he-node-logs-models>\n\n <he-node-logs-models [class.is-hidden]=\"selectedTab !== Tab.products\"\n [logsUrl]=\"logsUrl\"\n [nodeType]=\"NodeType.Cycle\"\n [originalValues]=\"original?.products\"\n [recalculatedValues]=\"recalculated?.products\"\n [logs]=\"logs\"\n ></he-node-logs-models>\n</ng-container>\n\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: [":host{display:block}\n"], components: [{ type: i2.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["nodeType", "nodeKey", "logsUrl", "originalValues", "recalculatedValues", "terms", "logs", "filteredType"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesActivityLogsComponent, decorators: [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{
|
|
39
|
+
selector: 'he-cycles-activity-logs',
|
|
40
|
+
templateUrl: './cycles-activity-logs.component.html',
|
|
41
|
+
styleUrls: ['./cycles-activity-logs.component.scss']
|
|
42
|
+
}]
|
|
43
|
+
}], ctorParameters: function () { return [{ type: i1.HeNodeService }]; }, propDecorators: { original: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], recalculated: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}] } });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWFjdGl2aXR5LWxvZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2N5Y2xlcy9jeWNsZXMtYWN0aXZpdHktbG9ncy9jeWNsZXMtYWN0aXZpdHktbG9ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1hY3Rpdml0eS1sb2dzL2N5Y2xlcy1hY3Rpdml0eS1sb2dzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBSTlDLElBQUssR0FHSjtBQUhELFdBQUssR0FBRztJQUNOLHdCQUFpQixDQUFBO0lBQ2pCLDRCQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFISSxHQUFHLEtBQUgsR0FBRyxRQUdQO0FBT0QsTUFBTSxPQUFPLDJCQUEyQjtJQWF0QyxZQUNVLFdBQTBCO1FBQTFCLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBUjdCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixhQUFRLEdBQUcsUUFBUSxDQUFDO1FBR3BCLFFBQUcsR0FBRyxHQUFHLENBQUM7UUFDVixnQkFBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFJNUIsQ0FBQztJQUVDLFFBQVE7O1lBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0tBQUE7SUFFRCxJQUFZLElBQUk7UUFDZCx1Q0FDSyxJQUFJLENBQUMsUUFBUSxLQUNoQixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksSUFDakM7SUFDSixDQUFDOzt5SEE1QlUsMkJBQTJCOzZHQUEzQiwyQkFBMkIsK0hDaEJ4Qyx5bUNBbUNBOzRGRG5CYSwyQkFBMkI7a0JBTHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsV0FBVyxFQUFFLHVDQUF1QztvQkFDcEQsU0FBUyxFQUFFLENBQUMsdUNBQXVDLENBQUM7aUJBQ3JEO29HQUdRLFFBQVE7c0JBRGQsS0FBSztnQkFHQyxZQUFZO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQ3ljbGVKU09OTEQsIE5vZGVUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuXG5pbXBvcnQgeyBIZU5vZGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLnNlcnZpY2UnO1xuXG5lbnVtIFRhYiB7XG4gIGlucHV0cyA9ICdJbnB1dHMnLFxuICBwcm9kdWN0cyA9ICdQcm9kdWN0cydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtY3ljbGVzLWFjdGl2aXR5LWxvZ3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3ljbGVzLWFjdGl2aXR5LWxvZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtYWN0aXZpdHktbG9ncy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEN5Y2xlc0FjdGl2aXR5TG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcmlnaW5hbD86IElDeWNsZUpTT05MRDtcbiAgQElucHV0KClcbiAgcHVibGljIHJlY2FsY3VsYXRlZD86IElDeWNsZUpTT05MRDtcblxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBOb2RlVHlwZSA9IE5vZGVUeXBlO1xuICBwdWJsaWMgbG9nc1VybD86IHN0cmluZztcbiAgcHVibGljIGxvZ3M6IGFueTtcbiAgcHVibGljIFRhYiA9IFRhYjtcbiAgcHVibGljIHNlbGVjdGVkVGFiID0gVGFiLmlucHV0cztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlXG4gICkgeyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2dzVXJsID0gdGhpcy5ub2RlU2VydmljZS5ub2RlTG9nc1VybCh0aGlzLm5vZGUpO1xuICAgIHRoaXMubG9ncyA9IGF3YWl0IHRoaXMubm9kZVNlcnZpY2UuZ2V0TW9kZWxzTG9nKHRoaXMubm9kZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldCBub2RlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLm9yaWdpbmFsLFxuICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgfTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiPlxuICA8ZGl2IGNsYXNzPVwidGFicyBtYi0xXCI+XG4gICAgPHVsPlxuICAgICAgPGxpIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRUYWIgPT09IFRhYi5pbnB1dHNcIj5cbiAgICAgICAgPGEgKGNsaWNrKT1cInNlbGVjdGVkVGFiID0gVGFiLmlucHV0c1wiPklucHV0czwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gVGFiLnByb2R1Y3RzXCI+XG4gICAgICAgIDxhIChjbGljayk9XCJzZWxlY3RlZFRhYiA9IFRhYi5wcm9kdWN0c1wiPlByb2R1Y3RzPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cblxuICA8aGUtbm9kZS1sb2dzLW1vZGVscyBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVGFiICE9PSBUYWIuaW5wdXRzXCJcbiAgICBbbG9nc1VybF09XCJsb2dzVXJsXCJcbiAgICBbbm9kZVR5cGVdPVwiTm9kZVR5cGUuQ3ljbGVcIlxuICAgIFtvcmlnaW5hbFZhbHVlc109XCJvcmlnaW5hbD8uaW5wdXRzXCJcbiAgICBbcmVjYWxjdWxhdGVkVmFsdWVzXT1cInJlY2FsY3VsYXRlZD8uaW5wdXRzXCJcbiAgICBbbG9nc109XCJsb2dzXCJcbiAgPjwvaGUtbm9kZS1sb2dzLW1vZGVscz5cblxuICA8aGUtbm9kZS1sb2dzLW1vZGVscyBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVGFiICE9PSBUYWIucHJvZHVjdHNcIlxuICAgIFtsb2dzVXJsXT1cImxvZ3NVcmxcIlxuICAgIFtub2RlVHlwZV09XCJOb2RlVHlwZS5DeWNsZVwiXG4gICAgW29yaWdpbmFsVmFsdWVzXT1cIm9yaWdpbmFsPy5wcm9kdWN0c1wiXG4gICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJyZWNhbGN1bGF0ZWQ/LnByb2R1Y3RzXCJcbiAgICBbbG9nc109XCJsb2dzXCJcbiAgPjwvaGUtbm9kZS1sb2dzLW1vZGVscz5cbjwvbmctY29udGFpbmVyPlxuXG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyIHB5LTNcIj5cbiAgICA8ZmEtaWNvbiBpY29uPVwic3Bpbm5lclwiIFtwdWxzZV09XCJ0cnVlXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { defaultLabel, keyToLabel } from '../../common/utils';
|
|
3
|
+
import { baseUrl } from '../../common/utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../node/node-link/node-link.component";
|
|
6
|
+
import * as i2 from "../../common/blank-node-state/blank-node-state.component";
|
|
7
|
+
import * as i3 from "../../common/blank-node-state-notice/blank-node-state-notice.component";
|
|
8
|
+
import * as i4 from "@angular/common";
|
|
9
|
+
const ignoreKeys = [
|
|
10
|
+
'@type', 'added', 'updated', 'addedVersion', 'updatedVersion'
|
|
11
|
+
];
|
|
12
|
+
export class CyclesCompletenessComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.cycles = [];
|
|
15
|
+
this.baseUrl = baseUrl();
|
|
16
|
+
this.defaultLabel = defaultLabel;
|
|
17
|
+
this.keyToLabel = keyToLabel;
|
|
18
|
+
}
|
|
19
|
+
trackById(_index, item) {
|
|
20
|
+
return item['@id'];
|
|
21
|
+
}
|
|
22
|
+
get completenessKeys() {
|
|
23
|
+
const [cycle] = this.cycles;
|
|
24
|
+
return Object.keys((cycle === null || cycle === void 0 ? void 0 : cycle.dataCompleteness) || {}).filter(key => !ignoreKeys.includes(key)).sort();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
CyclesCompletenessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesCompletenessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
+
CyclesCompletenessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesCompletenessComponent, selector: "he-cycles-completeness", inputs: { cycles: "cycles", dataState: "dataState" }, ngImport: i0, template: "<div class=\"p-3\" *ngIf=\"cycles.length; else emptyTable\">\n <div class=\"table-container data-table-container mb-1\">\n <table class=\"table is-narrow data-table has-children-{{cycles.length}}\">\n <thead>\n <tr>\n <th class=\"width-auto\"></th>\n <th *ngFor=\"let completeness of completenessKeys\"\n [attr.title]=\"completeness\"\n ><a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">{{keyToLabel(completeness)}}</a></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <td class=\"width-auto\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(cycle)}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let completeness of completenessKeys\">\n <span>{{cycle.dataCompleteness[completeness] ? 'Complete' : 'Incomplete'}}</span>\n <he-blank-node-state class=\"ml-1\"\n [node]=\"cycle.dataCompleteness\"\n [key]=\"completeness\"\n ></he-blank-node-state>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <he-blank-node-state-notice [dataState]=\"dataState\"></he-blank-node-state-notice>\n</div>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: i1.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: i2.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["nodeType", "dataKey", "key", "node", "state"] }, { type: i3.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesCompletenessComponent, decorators: [{
|
|
30
|
+
type: Component,
|
|
31
|
+
args: [{
|
|
32
|
+
selector: 'he-cycles-completeness',
|
|
33
|
+
templateUrl: './cycles-completeness.component.html',
|
|
34
|
+
styleUrls: ['./cycles-completeness.component.scss']
|
|
35
|
+
}]
|
|
36
|
+
}], propDecorators: { cycles: [{
|
|
37
|
+
type: Input
|
|
38
|
+
}], dataState: [{
|
|
39
|
+
type: Input
|
|
40
|
+
}] } });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBRTdDLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0I7Q0FDOUQsQ0FBQztBQU9GLE1BQU0sT0FBTywyQkFBMkI7SUFMeEM7UUFPUyxXQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUk1QixZQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDcEIsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDNUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztLQVVoQztJQVJRLFNBQVMsQ0FBQyxNQUFjLEVBQUUsSUFBa0I7UUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxnQkFBZ0IsS0FBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwRyxDQUFDOzt5SEFqQlUsMkJBQTJCOzZHQUEzQiwyQkFBMkIsb0hDaEJ4Qyw4Z0RBcUNBOzRGRHJCYSwyQkFBMkI7a0JBTHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsV0FBVyxFQUFFLHNDQUFzQztvQkFDbkQsU0FBUyxFQUFFLENBQUMsc0NBQXNDLENBQUM7aUJBQ3BEOzhCQUdRLE1BQU07c0JBRFosS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBJQ3ljbGVKU09OTEQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmltcG9ydCB7IGRlZmF1bHRMYWJlbCwga2V5VG9MYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuY29uc3QgaWdub3JlS2V5cyA9IFtcbiAgJ0B0eXBlJywgJ2FkZGVkJywgJ3VwZGF0ZWQnLCAnYWRkZWRWZXJzaW9uJywgJ3VwZGF0ZWRWZXJzaW9uJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtY3ljbGVzLWNvbXBsZXRlbmVzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jeWNsZXMtY29tcGxldGVuZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEN5Y2xlc0NvbXBsZXRlbmVzc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjeWNsZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhU3RhdGU/OiBEYXRhU3RhdGU7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBkZWZhdWx0TGFiZWwgPSBkZWZhdWx0TGFiZWw7XG4gIHB1YmxpYyBrZXlUb0xhYmVsID0ga2V5VG9MYWJlbDtcblxuICBwdWJsaWMgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJQ3ljbGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBsZXRlbmVzc0tleXMoKSB7XG4gICAgY29uc3QgW2N5Y2xlXSA9IHRoaXMuY3ljbGVzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjeWNsZT8uZGF0YUNvbXBsZXRlbmVzcyB8fCB7fSkuZmlsdGVyKGtleSA9PiAhaWdub3JlS2V5cy5pbmNsdWRlcyhrZXkpKS5zb3J0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTNcIiAqbmdJZj1cImN5Y2xlcy5sZW5ndGg7IGVsc2UgZW1wdHlUYWJsZVwiPlxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIGRhdGEtdGFibGUtY29udGFpbmVyIG1iLTFcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgZGF0YS10YWJsZSBoYXMtY2hpbGRyZW4te3tjeWNsZXMubGVuZ3RofX1cIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj48L3RoPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29tcGxldGVuZXNzIG9mIGNvbXBsZXRlbmVzc0tleXNcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiY29tcGxldGVuZXNzXCJcbiAgICAgICAgICA+PGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0NvbXBsZXRlbmVzcyMnICsgY29tcGxldGVuZXNzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3trZXlUb0xhYmVsKGNvbXBsZXRlbmVzcyl9fTwvYT48L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBjeWNsZSBvZiBjeWNsZXM7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG9cIiBbYXR0ci50aXRsZV09XCJkZWZhdWx0TGFiZWwoY3ljbGUpXCI+XG4gICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImN5Y2xlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tpICsgMX19LiB7e2RlZmF1bHRMYWJlbChjeWNsZSl9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiaXMtbm93cmFwXCIgKm5nRm9yPVwibGV0IGNvbXBsZXRlbmVzcyBvZiBjb21wbGV0ZW5lc3NLZXlzXCI+XG4gICAgICAgICAgICA8c3Bhbj57e2N5Y2xlLmRhdGFDb21wbGV0ZW5lc3NbY29tcGxldGVuZXNzXSA/ICdDb21wbGV0ZScgOiAnSW5jb21wbGV0ZSd9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgIFtub2RlXT1cImN5Y2xlLmRhdGFDb21wbGV0ZW5lc3NcIlxuICAgICAgICAgICAgICBba2V5XT1cImNvbXBsZXRlbmVzc1wiXG4gICAgICAgICAgICA+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlUYWJsZT5cbiAgPGRpdiBjbGFzcz1cInBhbmVsLWJsb2NrXCI+XG4gICAgPHNwYW4+Tm8gY29tcGxldGVuZXNzIGRhdGE8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { DataState } from '@hestia-earth/api';
|
|
4
|
+
import { propertyValue, groupNodesByTerm, grouppedKeys, itemColor } from '../../common/utils';
|
|
5
|
+
import { baseUrl } from '../../common/utils';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@fortawesome/angular-fontawesome";
|
|
8
|
+
import * as i2 from "../../node/node-link/node-link.component";
|
|
9
|
+
import * as i3 from "../cycles-functional-unit-measure/cycles-functional-unit-measure.component";
|
|
10
|
+
import * as i4 from "../../common/blank-node-state/blank-node-state.component";
|
|
11
|
+
import * as i5 from "../../common/blank-node-state-notice/blank-node-state-notice.component";
|
|
12
|
+
import * as i6 from "../cycles-suggest-form/cycles-suggest-form.component";
|
|
13
|
+
import * as i7 from "../cycles-emissions-chart/cycles-emissions-chart.component";
|
|
14
|
+
import * as i8 from "../cycles-emissions-logs/cycles-emissions-logs.component";
|
|
15
|
+
import * as i9 from "../../node/node-csv-export-confirm/node-csv-export-confirm.component";
|
|
16
|
+
import * as i10 from "../../node/node-value-details/node-value-details.component";
|
|
17
|
+
import * as i11 from "@angular/common";
|
|
18
|
+
import * as i12 from "@ng-bootstrap/ng-bootstrap";
|
|
19
|
+
import * as i13 from "../../common/ellipsis.pipe";
|
|
20
|
+
import * as i14 from "../../common/default.pipe";
|
|
21
|
+
import * as i15 from "../../common/precision.pipe";
|
|
22
|
+
const orderBy = require('lodash.orderby');
|
|
23
|
+
var View;
|
|
24
|
+
(function (View) {
|
|
25
|
+
View["table"] = "table";
|
|
26
|
+
View["chart"] = "chart";
|
|
27
|
+
View["logs"] = "logs";
|
|
28
|
+
})(View || (View = {}));
|
|
29
|
+
export class CyclesEmissionsComponent {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.originalValues = [];
|
|
32
|
+
this.cycles = [];
|
|
33
|
+
this.enableCompare = true;
|
|
34
|
+
this.baseUrl = baseUrl();
|
|
35
|
+
this.propertyValue = propertyValue;
|
|
36
|
+
this.itemColor = itemColor;
|
|
37
|
+
this.showDownload = false;
|
|
38
|
+
this.View = View;
|
|
39
|
+
this.selectedView = View.table;
|
|
40
|
+
this.selectedCycles = [];
|
|
41
|
+
this.emissions = [];
|
|
42
|
+
}
|
|
43
|
+
ngOnChanges(changes) {
|
|
44
|
+
if ('cycles' in changes) {
|
|
45
|
+
return this.update();
|
|
46
|
+
}
|
|
47
|
+
if ('dataState' in changes) {
|
|
48
|
+
this.selectedView = View.table;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
trackById(_index, item) {
|
|
52
|
+
return item['@id'];
|
|
53
|
+
}
|
|
54
|
+
get isOriginal() {
|
|
55
|
+
return this.dataState === DataState.original;
|
|
56
|
+
}
|
|
57
|
+
update() {
|
|
58
|
+
const emissionsPerCycle = groupNodesByTerm(this.cycles, 'emissions', this.originalValues);
|
|
59
|
+
this.emissions = orderBy(grouppedKeys(emissionsPerCycle), ['value.methodTierOrder', 'key'], ['asc', 'asc']);
|
|
60
|
+
this.selectAllCycles();
|
|
61
|
+
}
|
|
62
|
+
togglePopover(popover, context) {
|
|
63
|
+
return popover.isOpen() ? popover.close() : popover.open(context);
|
|
64
|
+
}
|
|
65
|
+
// Add from suggestion
|
|
66
|
+
addCycle(cycle) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
this.cycles = [
|
|
69
|
+
...this.cycles,
|
|
70
|
+
cycle
|
|
71
|
+
];
|
|
72
|
+
return this.update();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Cycle selection
|
|
76
|
+
selectAllCycles() {
|
|
77
|
+
this.selectedCycles = this.cycles.slice();
|
|
78
|
+
}
|
|
79
|
+
unselectAllCycles() {
|
|
80
|
+
this.selectedCycles = [];
|
|
81
|
+
}
|
|
82
|
+
toggleAllCycles() {
|
|
83
|
+
return this.selectedCycles.length ? this.selectAllCycles() : this.unselectAllCycles();
|
|
84
|
+
}
|
|
85
|
+
selectCycle(cycle) {
|
|
86
|
+
this.selectedCycles = [
|
|
87
|
+
...this.selectedCycles,
|
|
88
|
+
cycle
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
unselectCycle(index) {
|
|
92
|
+
this.selectedCycles.splice(index, 1);
|
|
93
|
+
this.selectedCycles = this.selectedCycles.slice();
|
|
94
|
+
}
|
|
95
|
+
toggleCycle(cycle) {
|
|
96
|
+
const index = this.selectedCycles.indexOf(cycle);
|
|
97
|
+
return index >= 0 ? this.unselectCycle(index) : this.selectCycle(cycle);
|
|
98
|
+
}
|
|
99
|
+
isSelected(cycle) {
|
|
100
|
+
return this.selectedCycles.includes(cycle);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
CyclesEmissionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesEmissionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
104
|
+
CyclesEmissionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesEmissionsComponent, selector: "he-cycles-emissions", inputs: { originalValues: "originalValues", cycles: "cycles", dataState: "dataState", enableCompare: "enableCompare" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"emissions.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=\"cycles.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=\"!isOriginal && cycles.length === 1\">\n <button class=\"button is-small\" [class.is-active]=\"selectedView === View.logs\" (click)=\"selectedView = View.logs\">\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\">\n <table class=\"table is-narrow data-table has-children-{{emissions.length}}\">\n <thead>\n <tr>\n <th class=\"width-auto\"></th>\n <th></th>\n <th *ngFor=\"let emission of emissions\"\n [attr.title]=\"emission.value.term.name\"\n >\n <he-node-link [node]=\"emission.value.term\">\n <span>{{emission.value.term.name | ellipsis:30}}</span>\n </he-node-link>\n </th>\n </tr>\n <tr>\n <th class=\"width-auto\"></th>\n <th>\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th *ngFor=\"let emission of emissions\"\n [attr.title]=\"emission.value.term.units\"\n >{{emission.value.term.units}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <td class=\"width-auto\" [attr.title]=\"cycle.name\" [style.border-left-color]=\"itemColor(i)\">\n <label *ngIf=\"enableCompare\" class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n (change)=\"toggleCycle(cycle)\"\n [checked]=\"isSelected(cycle)\"\n >\n </label>\n <he-node-link class=\"is-inline-block\" [node]=\"cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{cycle.name || cycle.id}}</span>\n </he-node-link>\n </td>\n <td>\n <he-cycles-functional-unit-measure [cycle]=\"cycles[0]\"></he-cycles-functional-unit-measure>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let emission of emissions\">\n <span *ngIf=\"emission.value.values[cycle['@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: emission.value.values[cycle['@id']], cycle: cycle, key: 'emissions' })\"\n >\n <span pointer>{{propertyValue(emission.value.values[cycle['@id']].value) | precision:3 | default:'-'}}</span>\n <he-blank-node-state class=\"ml-1\"\n [node]=\"emission.value.values[cycle['@id']].nodes[0]\"\n key=\"value\"\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\" [showDeleted]=\"true\"></he-blank-node-state-notice>\n\n <he-cycles-suggest-form *ngIf=\"enableCompare\" [cycles]=\"cycles\" (cycleAdded)=\"addCycle($event)\"></he-cycles-suggest-form>\n </div>\n\n <he-cycles-emissions-chart *ngIf=\"cycles.length > 1\" [class.is-hidden]=\"selectedView !== View.chart\"\n [cycles]=\"selectedCycles\"\n ></he-cycles-emissions-chart>\n\n <he-cycles-emissions-logs *ngIf=\"selectedView === View.logs && !isOriginal\"\n [cycle]=\"cycles[0]\"\n [originalValues]=\"originalValues[0]?.emissions\"\n [recalculatedValues]=\"cycles[0]?.emissions\"\n ></he-cycles-emissions-logs>\n</ng-container>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"cycles\" filename=\"cycle-emissions.csv\" [isUpload]=\"false\"\n [headerKeys]=\"['cycle.id', 'cycle.@id', 'cycle.emissions.']\"\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=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p><b>{{node.name}}</b></p>\n <he-node-value-details\n [data]=\"data\" [nodeType]=\"node['@type']\" [dataKey]=\"key\"\n ></he-node-value-details>\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}fa-icon{display:inline-block;width:10px}\n"], components: [{ type: i1.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i2.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: i3.CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { type: i4.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["nodeType", "dataKey", "key", "node", "state"] }, { type: i5.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { type: i6.CyclesSuggestFormComponent, selector: "he-cycles-suggest-form", inputs: ["cycles"], outputs: ["cycleAdded"] }, { type: i7.CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: ["cycles"] }, { type: i8.CyclesEmissionsLogsComponent, selector: "he-cycles-emissions-logs", inputs: ["cycle", "originalValues", "recalculatedValues"] }, { type: i9.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { type: i10.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }], pipes: { "ellipsis": i13.EllipsisPipe, "default": i14.DefaultPipe, "precision": i15.PrecisionPipe } });
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesEmissionsComponent, decorators: [{
|
|
106
|
+
type: Component,
|
|
107
|
+
args: [{
|
|
108
|
+
selector: 'he-cycles-emissions',
|
|
109
|
+
templateUrl: './cycles-emissions.component.html',
|
|
110
|
+
styleUrls: ['./cycles-emissions.component.scss']
|
|
111
|
+
}]
|
|
112
|
+
}], propDecorators: { originalValues: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], cycles: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], dataState: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], enableCompare: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}] } });
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWVtaXNzaW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1lbWlzc2lvbnMvY3ljbGVzLWVtaXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1lbWlzc2lvbnMvY3ljbGVzLWVtaXNzaW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUk5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFnQixZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUg3QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUsxQyxJQUFLLElBSUo7QUFKRCxXQUFLLElBQUk7SUFDUCx1QkFBZSxDQUFBO0lBQ2YsdUJBQWUsQ0FBQTtJQUNmLHFCQUFhLENBQUE7QUFDZixDQUFDLEVBSkksSUFBSSxLQUFKLElBQUksUUFJUjtBQU9ELE1BQU0sT0FBTyx3QkFBd0I7SUFMckM7UUFPUyxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFcEMsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFJNUIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsWUFBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzlCLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLGlCQUFZLEdB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Q25DLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7c0hBMUZVLHdCQUF3QjswR0FBeEIsd0JBQXdCLHdNQ25CckMsaTRMQTBJQTs0RkR2SGEsd0JBQXdCO2tCQUxwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDs4QkFHUSxjQUFjO3NCQURwQixLQUFLO2dCQUdDLE1BQU07c0JBRFosS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsYUFBYTtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxELCBFbWlzc2lvbiB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmNvbnN0IG9yZGVyQnkgPSByZXF1aXJlKCdsb2Rhc2gub3JkZXJieScpO1xuXG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlLCBncm91cE5vZGVzQnlUZXJtLCBJR3JvdXBlZEtleXMsIGdyb3VwcGVkS2V5cywgaXRlbUNvbG9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGNoYXJ0ID0gJ2NoYXJ0JyxcbiAgbG9ncyA9ICdsb2dzJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtZW1pc3Npb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1lbWlzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtZW1pc3Npb25zLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzRW1pc3Npb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KClcbiAgcHVibGljIG9yaWdpbmFsVmFsdWVzOiBJQ3ljbGVKU09OTERbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgY3ljbGVzOiBJQ3ljbGVKU09OTERbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YVN0YXRlPzogRGF0YVN0YXRlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZW5hYmxlQ29tcGFyZSA9IHRydWU7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHVibGljIGl0ZW1Db2xvciA9IGl0ZW1Db2xvcjtcbiAgcHVibGljIHNob3dEb3dubG9hZCA9IGZhbHNlO1xuICBwdWJsaWMgVmlldyA9IFZpZXc7XG4gIHB1YmxpYyBzZWxlY3RlZFZpZXcgPSBWaWV3LnRhYmxlO1xuICBwdWJsaWMgc2VsZWN0ZWRDeWNsZXM6IElDeWNsZUpTT05MRFtdID0gW107XG5cbiAgcHVibGljIGVtaXNzaW9uczogSUdyb3VwZWRLZXlzPEVtaXNzaW9uPltdID0gW107XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICgnY3ljbGVzJyBpbiBjaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gICAgaWYgKCdkYXRhU3RhdGUnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJQ3ljbGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3JpZ2luYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0YXRlID09PSBEYXRhU3RhdGUub3JpZ2luYWw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBlbWlzc2lvbnNQZXJDeWNsZSA9IGdyb3VwTm9kZXNCeVRlcm08SUN5Y2xlSlNPTkxELCBFbWlzc2lvbj4odGhpcy5jeWNsZXMsICdlbWlzc2lvbnMnLCB0aGlzLm9yaWdpbmFsVmFsdWVzKTtcbiAgICB0aGlzLmVtaXNzaW9ucyA9IG9yZGVyQnkoZ3JvdXBwZWRLZXlzKGVtaXNzaW9uc1BlckN5Y2xlKSwgWyd2YWx1ZS5tZXRob2RUaWVyT3JkZXInLCAna2V5J10sIFsnYXNjJywgJ2FzYyddKTtcbiAgICB0aGlzLnNlbGVjdEFsbEN5Y2xlcygpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBvcG92ZXIocG9wb3ZlcjogYW55LCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIC8vIEFkZCBmcm9tIHN1Z2dlc3Rpb25cblxuICBwdWJsaWMgYXN5bmMgYWRkQ3ljbGUoY3ljbGU6IElDeWNsZUpTT05MRCkge1xuICAgIHRoaXMuY3ljbGVzID0gW1xuICAgICAgLi4udGhpcy5jeWNsZXMsXG4gICAgICBjeWNsZVxuICAgIF07XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvLyBDeWNsZSBzZWxlY3Rpb25cblxuICBwcml2YXRlIHNlbGVjdEFsbEN5Y2xlcygpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGVzID0gdGhpcy5jeWNsZXMuc2xpY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zZWxlY3RBbGxDeWNsZXMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEN5Y2xlcyA9IFtdO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUFsbEN5Y2xlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEN5Y2xlcy5sZW5ndGggPyB0aGlzLnNlbGVjdEFsbEN5Y2xlcygpIDogdGhpcy51bnNlbGVjdEFsbEN5Y2xlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDeWNsZShjeWNsZTogSUN5Y2xlSlNPTkxEKSB7XG4gICAgdGhpcy5zZWxlY3RlZEN5Y2xlcyA9IFtcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDeWNsZXMsXG4gICAgICBjeWNsZVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHVuc2VsZWN0Q3ljbGUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRDeWNsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGVzID0gdGhpcy5zZWxlY3RlZEN5Y2xlcy5zbGljZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUN5Y2xlKGN5Y2xlOiBJQ3ljbGVKU09OTEQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRDeWNsZXMuaW5kZXhPZihjeWNsZSk7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLnVuc2VsZWN0Q3ljbGUoaW5kZXgpIDogdGhpcy5zZWxlY3RDeWNsZShjeWNsZSk7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxlY3RlZChjeWNsZTogSUN5Y2xlSlNPTkxEKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDeWNsZXMuaW5jbHVkZXMoY3ljbGUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZW1pc3Npb25zLmxlbmd0aDsgZWxzZSBlbXB0eVRhYmxlXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLTIgbS0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1oaWRkZW4tbW9iaWxlXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcudGFibGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwibGlzdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPlRhYmxlIHZpZXc8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiICpuZ0lmPVwiY3ljbGVzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuY2hhcnRcIiAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy5jaGFydFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjaGFydC1iYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5DaGFydCB2aWV3PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cIiFpc09yaWdpbmFsICYmIGN5Y2xlcy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9nc1wiIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LmxvZ3NcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2FsY3VsYXRvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPlJlY2FsY3VsYXRpb25zIGxvZ3M8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVmlldyAhPT0gVmlldy50YWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1yaWdodCBtYi0yXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLWRhcmsgaXMtb3V0bGluZWQgaXMtc21hbGxcIiAoY2xpY2spPVwic2hvd0Rvd25sb2FkID0gdHJ1ZVwiPlxuICAgICAgICA8ZmEtaWNvbiBpY29uPVwiZG93bmxvYWRcIj48L2ZhLWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkRvd25sb2FkIChDU1YpPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIGRhdGEtdGFibGUtY29udGFpbmVyIG1iLTFcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBkYXRhLXRhYmxlIGhhcy1jaGlsZHJlbi17e2VtaXNzaW9ucy5sZW5ndGh9fVwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0b1wiPjwvdGg+XG4gICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgZW1pc3Npb24gb2YgZW1pc3Npb25zXCJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiZW1pc3Npb24udmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJlbWlzc2lvbi52YWx1ZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tlbWlzc2lvbi52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczozMH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0N5Y2xlI2Z1bmN0aW9uYWxVbml0J1wiIHRhcmdldD1cIl9ibGFua1wiPkZ1bmN0aW9uYWwgdW5pdDwvYT5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGVtaXNzaW9uIG9mIGVtaXNzaW9uc1wiXG4gICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImVtaXNzaW9uLnZhbHVlLnRlcm0udW5pdHNcIlxuICAgICAgICAgICAgPnt7ZW1pc3Npb24udmFsdWUudGVybS51bml0c319PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBjeWNsZSBvZiBjeWNsZXM7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0b1wiIFthdHRyLnRpdGxlXT1cImN5Y2xlLm5hbWVcIiBbc3R5bGUuYm9yZGVyLWxlZnQtY29sb3JdPVwiaXRlbUNvbG9yKGkpXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImVuYWJsZUNvbXBhcmVcIiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBjaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQ3ljbGUoY3ljbGUpXCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoY3ljbGUpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiBbbm9kZV09XCJjeWNsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tpICsgMX19LiB7e2N5Y2xlLm5hbWUgfHwgY3ljbGUuaWR9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8aGUtY3ljbGVzLWZ1bmN0aW9uYWwtdW5pdC1tZWFzdXJlIFtjeWNsZV09XCJjeWNsZXNbMF1cIj48L2hlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIiAqbmdGb3I9XCJsZXQgZW1pc3Npb24gb2YgZW1pc3Npb25zXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZW1pc3Npb24udmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV07IGVsc2UgZW1wdHlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIiAjcD1cIm5nYlBvcG92ZXJcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBvcG92ZXIocCwgeyBkYXRhOiBlbWlzc2lvbi52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXSwgY3ljbGU6IGN5Y2xlLCBrZXk6ICdlbWlzc2lvbnMnIH0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIHBvaW50ZXI+e3twcm9wZXJ0eVZhbHVlKGVtaXNzaW9uLnZhbHVlLnZhbHVlc1tjeWNsZVsnQGlkJ11dLnZhbHVlKSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZSBjbGFzcz1cIm1sLTFcIlxuICAgICAgICAgICAgICAgICAgW25vZGVdPVwiZW1pc3Npb24udmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0ubm9kZXNbMF1cIlxuICAgICAgICAgICAgICAgICAga2V5PVwidmFsdWVcIlxuICAgICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIiBbc2hvd0RlbGV0ZWRdPVwidHJ1ZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG5cbiAgICA8aGUtY3ljbGVzLXN1Z2dlc3QtZm9ybSAqbmdJZj1cImVuYWJsZUNvbXBhcmVcIiBbY3ljbGVzXT1cImN5Y2xlc1wiIChjeWNsZUFkZGVkKT1cImFkZEN5Y2xlKCRldmVudClcIj48L2hlLWN5Y2xlcy1zdWdnZXN0LWZvcm0+XG4gIDwvZGl2PlxuXG4gIDxoZS1jeWNsZXMtZW1pc3Npb25zLWNoYXJ0ICpuZ0lmPVwiY3ljbGVzLmxlbmd0aCA+IDFcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVmlldyAhPT0gVmlldy5jaGFydFwiXG4gICAgW2N5Y2xlc109XCJzZWxlY3RlZEN5Y2xlc1wiXG4gID48L2hlLWN5Y2xlcy1lbWlzc2lvbnMtY2hhcnQ+XG5cbiAgPGhlLWN5Y2xlcy1lbWlzc2lvbnMtbG9ncyAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzICYmICFpc09yaWdpbmFsXCJcbiAgICBbY3ljbGVdPVwiY3ljbGVzWzBdXCJcbiAgICBbb3JpZ2luYWxWYWx1ZXNdPVwib3JpZ2luYWxWYWx1ZXNbMF0/LmVtaXNzaW9uc1wiXG4gICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJjeWNsZXNbMF0/LmVtaXNzaW9uc1wiXG4gID48L2hlLWN5Y2xlcy1lbWlzc2lvbnMtbG9ncz5cbjwvbmctY29udGFpbmVyPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0gKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwiY3ljbGVzXCIgZmlsZW5hbWU9XCJjeWNsZS1lbWlzc2lvbnMuY3N2XCIgW2lzVXBsb2FkXT1cImZhbHNlXCJcbiAgW2hlYWRlcktleXNdPVwiWydjeWNsZS5pZCcsICdjeWNsZS5AaWQnLCAnY3ljbGUuZW1pc3Npb25zLiddXCJcbiAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiXG4+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlPlxuICA8ZGl2IGNsYXNzPVwicGFuZWwtYmxvY2tcIj5cbiAgICA8c3Bhbj5ObyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImN5Y2xlXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImtleVwiPlxuICA8cD48Yj57e25vZGUubmFtZX19PC9iPjwvcD5cbiAgPGhlLW5vZGUtdmFsdWUtZGV0YWlsc1xuICAgIFtkYXRhXT1cImRhdGFcIiBbbm9kZVR5cGVdPVwibm9kZVsnQHR5cGUnXVwiIFtkYXRhS2V5XT1cImtleVwiXG4gID48L2hlLW5vZGUtdmFsdWUtZGV0YWlscz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { Chart } from 'chart.js';
|
|
3
|
+
import { groupNodesByTerm, itemColor, propertyValue } from '../../common/utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
const cycleValue = (cycle, values) => { var _a; return (((_a = values[cycle['@id']]) === null || _a === void 0 ? void 0 : _a.nodes[0]) || { value: [0] }).value; };
|
|
8
|
+
const cycleName = (cycle, index) => `${index + 1}. ${cycle.name}`;
|
|
9
|
+
const cycleDataset = (values) => (cycle, index) => {
|
|
10
|
+
const label = cycleName(cycle, index);
|
|
11
|
+
const color = itemColor(index);
|
|
12
|
+
const data = [propertyValue(cycleValue(cycle, values))];
|
|
13
|
+
return {
|
|
14
|
+
label,
|
|
15
|
+
axis: 'y',
|
|
16
|
+
data,
|
|
17
|
+
backgroundColor: color,
|
|
18
|
+
borderColor: color
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export class CyclesEmissionsChartComponent {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.cycles = [];
|
|
24
|
+
this.emissionPerCycle = {};
|
|
25
|
+
this.terms = [];
|
|
26
|
+
}
|
|
27
|
+
ngAfterViewInit() {
|
|
28
|
+
return this.init();
|
|
29
|
+
}
|
|
30
|
+
ngOnChanges(changes) {
|
|
31
|
+
if ('cycles' in changes && !changes.cycles.firstChange) {
|
|
32
|
+
return this.init();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
init() {
|
|
36
|
+
this.emissionPerCycle = groupNodesByTerm(this.cycles, 'emissions');
|
|
37
|
+
this.terms = Object.values(this.emissionPerCycle)
|
|
38
|
+
.filter(({ values }) => Object.values(values).some(({ nodes: [{ value }] }) => propertyValue(value) > 0))
|
|
39
|
+
.map(({ term }) => term);
|
|
40
|
+
this.selectedTerm = this.terms.includes(this.selectedTerm) ? this.selectedTerm : this.terms[0];
|
|
41
|
+
return this.selectedTerm ? this.updateChart() : null;
|
|
42
|
+
}
|
|
43
|
+
updateChart() {
|
|
44
|
+
var _a, _b, _c;
|
|
45
|
+
const labels = [(_b = (_a = this.selectedTerm) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : ''];
|
|
46
|
+
const { values } = this.emissionPerCycle[this.selectedTerm['@id']];
|
|
47
|
+
const datasets = this.cycles.map(cycleDataset(values));
|
|
48
|
+
if (this.chart) {
|
|
49
|
+
this.chart.destroy();
|
|
50
|
+
}
|
|
51
|
+
this.chart = new Chart((_c = this.chartRef) === null || _c === void 0 ? void 0 : _c.nativeElement, {
|
|
52
|
+
type: 'bar',
|
|
53
|
+
data: {
|
|
54
|
+
labels,
|
|
55
|
+
datasets
|
|
56
|
+
},
|
|
57
|
+
options: {
|
|
58
|
+
responsive: true,
|
|
59
|
+
maintainAspectRatio: false,
|
|
60
|
+
legend: {
|
|
61
|
+
display: false
|
|
62
|
+
},
|
|
63
|
+
scales: {
|
|
64
|
+
xAxes: [{
|
|
65
|
+
display: false
|
|
66
|
+
}],
|
|
67
|
+
yAxes: [{
|
|
68
|
+
position: 'left',
|
|
69
|
+
ticks: {
|
|
70
|
+
min: 0
|
|
71
|
+
}
|
|
72
|
+
}]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
CyclesEmissionsChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesEmissionsChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
+
CyclesEmissionsChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: { cycles: "cycles" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"p-3\" [class.is-hidden]=\"!terms?.length\">\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\" for=\"selectedTerm\">\n <span>Select a column</span>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"control\">\n <div class=\"select is-small\">\n <select (change)=\"updateChart()\" [(ngModel)]=\"selectedTerm\" id=\"selectedTerm\">\n <option *ngFor=\"let term of terms\" [ngValue]=\"term\">{{term.name}}</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-1\">\n <div class=\"chart-container\">\n <canvas #chart></canvas>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;overflow:visible}.chart-container{height:400px;position:relative}\n"], directives: [{ 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: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesEmissionsChartComponent, decorators: [{
|
|
81
|
+
type: Component,
|
|
82
|
+
args: [{
|
|
83
|
+
selector: 'he-cycles-emissions-chart',
|
|
84
|
+
templateUrl: './cycles-emissions-chart.component.html',
|
|
85
|
+
styleUrls: ['./cycles-emissions-chart.component.scss']
|
|
86
|
+
}]
|
|
87
|
+
}], propDecorators: { chartRef: [{
|
|
88
|
+
type: ViewChild,
|
|
89
|
+
args: ['chart']
|
|
90
|
+
}], cycles: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}] } });
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWVtaXNzaW9ucy1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1lbWlzc2lvbnMtY2hhcnQvY3ljbGVzLWVtaXNzaW9ucy1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1lbWlzc2lvbnMtY2hhcnQvY3ljbGVzLWVtaXNzaW9ucy1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQXVELE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakMsT0FBTyxFQUFFLGdCQUFnQixFQUFzQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFFcEgsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFtQixFQUFFLE1BQXFDLEVBQUUsRUFBRSxXQUNoRixPQUFBLENBQUMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsMENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQSxFQUFBLENBQUM7QUFFM0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUV4RixNQUFNLFlBQVksR0FBRyxDQUFDLE1BQXFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBbUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUNyRyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFD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QUFPLEVBQUUsS0FBSztpQkFDZjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFLENBQUM7NEJBQ04sT0FBTyxFQUFFLEtBQUs7eUJBQ2YsQ0FBQztvQkFDRixLQUFLLEVBQUUsQ0FBQzs0QkFDTixRQUFRLEVBQUUsTUFBTTs0QkFDaEIsS0FBSyxFQUFFO2dDQUNMLEdBQUcsRUFBRSxDQUFDOzZCQUNQO3lCQUNGLENBQUM7aUJBQ0g7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7OzJIQWhFVSw2QkFBNkI7K0dBQTdCLDZCQUE2Qix1TkM3QjFDLDh1QkF3QkE7NEZES2EsNkJBQTZCO2tCQUx6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFdBQVcsRUFBRSx5Q0FBeUM7b0JBQ3RELFNBQVMsRUFBRSxDQUFDLHlDQUF5QyxDQUFDO2lCQUN2RDs4QkFHUyxRQUFRO3NCQURmLFNBQVM7dUJBQUMsT0FBTztnQkFLVixNQUFNO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRW1pc3Npb24sIElDeWNsZUpTT05MRCwgVGVybSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnY2hhcnQuanMnO1xuXG5pbXBvcnQgeyBncm91cE5vZGVzQnlUZXJtLCBJR3JvdXBlZE5vZGVzLCBJR3JvdXBlZE5vZGVzVmFsdWVzLCBpdGVtQ29sb3IsIHByb3BlcnR5VmFsdWUgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5jb25zdCBjeWNsZVZhbHVlID0gKGN5Y2xlOiBJQ3ljbGVKU09OTEQsIHZhbHVlczogSUdyb3VwZWROb2Rlc1ZhbHVlczxFbWlzc2lvbj4pID0+XG4gICh2YWx1ZXNbY3ljbGVbJ0BpZCddXT8ubm9kZXNbMF0gfHwgeyB2YWx1ZTogWzBdIH0pLnZhbHVlO1xuXG5jb25zdCBjeWNsZU5hbWUgPSAoY3ljbGU6IElDeWNsZUpTT05MRCwgaW5kZXg6IG51bWJlcikgPT4gYCR7aW5kZXggKyAxfS4gJHtjeWNsZS5uYW1lfWA7XG5cbmNvbnN0IGN5Y2xlRGF0YXNldCA9ICh2YWx1ZXM6IElHcm91cGVkTm9kZXNWYWx1ZXM8RW1pc3Npb24+KSA9PiAoY3ljbGU6IElDeWNsZUpTT05MRCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICBjb25zdCBsYWJlbCA9IGN5Y2xlTmFtZShjeWNsZSwgaW5kZXgpO1xuICBjb25zdCBjb2xvciA9IGl0ZW1Db2xvcihpbmRleCk7XG4gIGNvbnN0IGRhdGEgPSBbcHJvcGVydHlWYWx1ZShjeWNsZVZhbHVlKGN5Y2xlLCB2YWx1ZXMpISldO1xuICByZXR1cm4ge1xuICAgIGxhYmVsLFxuICAgIGF4aXM6ICd5JyxcbiAgICBkYXRhLFxuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgYm9yZGVyQ29sb3I6IGNvbG9yXG4gIH07XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtZW1pc3Npb25zLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1lbWlzc2lvbnMtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtZW1pc3Npb25zLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzRW1pc3Npb25zQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdjaGFydCcpXG4gIHByaXZhdGUgY2hhcnRSZWY/OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGNoYXJ0OiBhbnk7XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjeWNsZXM6IElDeWNsZUpTT05MRFtdID0gW107XG5cbiAgcHVibGljIGVtaXNzaW9uUGVyQ3ljbGU6IElHcm91cGVkTm9kZXM8RW1pc3Npb24+ID0ge307XG4gIHB1YmxpYyB0ZXJtczogVGVybVtdID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZFRlcm0/OiBUZXJtO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdjeWNsZXMnIGluIGNoYW5nZXMgJiYgIWNoYW5nZXMuY3ljbGVzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRoaXMuZW1pc3Npb25QZXJDeWNsZSA9IGdyb3VwTm9kZXNCeVRlcm08SUN5Y2xlSlNPTkxELCBFbWlzc2lvbj4odGhpcy5jeWNsZXMsICdlbWlzc2lvbnMnKTtcbiAgICB0aGlzLnRlcm1zID0gT2JqZWN0LnZhbHVlcyh0aGlzLmVtaXNzaW9uUGVyQ3ljbGUpXG4gICAgICAuZmlsdGVyKCh7IHZhbHVlcyB9KSA9PiBPYmplY3QudmFsdWVzKHZhbHVlcykuc29tZSgoeyBub2RlczogW3sgdmFsdWUgfV0gfSkgPT4gcHJvcGVydHlWYWx1ZSh2YWx1ZSEpID4gMCkpXG4gICAgICAubWFwKCh7IHRlcm0gfSkgPT4gdGVybSk7XG4gICAgdGhpcy5zZWxlY3RlZFRlcm0gPSB0aGlzLnRlcm1zLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRUZXJtISkgPyB0aGlzLnNlbGVjdGVkVGVybSA6IHRoaXMudGVybXNbMF07XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUZXJtID8gdGhpcy51cGRhdGVDaGFydCgpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVDaGFydCgpIHtcbiAgICBjb25zdCBsYWJlbHM6IHN0cmluZ1tdID0gW3RoaXMuc2VsZWN0ZWRUZXJtPy5uYW1lID8/ICcnXTtcbiAgICBjb25zdCB7IHZhbHVlcyB9ID0gdGhpcy5lbWlzc2lvblBlckN5Y2xlWyh0aGlzLnNlbGVjdGVkVGVybSBhcyBhbnkpWydAaWQnXV07XG4gICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmN5Y2xlcy5tYXAoY3ljbGVEYXRhc2V0KHZhbHVlcykpO1xuXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KHRoaXMuY2hhcnRSZWY/Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgZGF0YToge1xuICAgICAgICBsYWJlbHMsXG4gICAgICAgIGRhdGFzZXRzXG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgeEF4ZXM6IFt7XG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZVxuICAgICAgICAgIH1dLFxuICAgICAgICAgIHlBeGVzOiBbe1xuICAgICAgICAgICAgcG9zaXRpb246ICdsZWZ0JyxcbiAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgIG1pbjogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtM1wiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXRlcm1zPy5sZW5ndGhcIj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIGlzLWhvcml6b250YWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtbGFiZWwgaXMtbm9ybWFsXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiIGZvcj1cInNlbGVjdGVkVGVybVwiPlxuICAgICAgICA8c3Bhbj5TZWxlY3QgYSBjb2x1bW48L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsXCI+XG4gICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInVwZGF0ZUNoYXJ0KClcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVGVybVwiIGlkPVwic2VsZWN0ZWRUZXJtXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0ZXJtIG9mIHRlcm1zXCIgW25nVmFsdWVdPVwidGVybVwiPnt7dGVybS5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm10LTFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICA8Y2FudmFzICNjaGFydD48L2NhbnZhcz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { DataState } from '@hestia-earth/api';
|
|
4
|
+
import { NodeType, TermTermType } 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 CyclesEmissionsLogsComponent {
|
|
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
|
+
matchTermType(TermTermType.emission)
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
this.emissions = emissions;
|
|
40
|
+
this.loading = false;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
get node() {
|
|
44
|
+
return Object.assign(Object.assign({}, this.cycle), { dataState: DataState.recalculated });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
CyclesEmissionsLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesEmissionsLogsComponent, deps: [{ token: i1.HeSearchService }, { token: i2.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
CyclesEmissionsLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesEmissionsLogsComponent, selector: "he-cycles-emissions-logs", inputs: { cycle: "cycle", originalValues: "originalValues", recalculatedValues: "recalculatedValues" }, ngImport: i0, template: "<he-node-logs-models *ngIf=\"!loading; else loader\"\n [logsUrl]=\"logsUrl\"\n [nodeType]=\"NodeType.Cycle\"\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: [":host{display:block}\n"], 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"] }] });
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesEmissionsLogsComponent, decorators: [{
|
|
50
|
+
type: Component,
|
|
51
|
+
args: [{
|
|
52
|
+
selector: 'he-cycles-emissions-logs',
|
|
53
|
+
templateUrl: './cycles-emissions-logs.component.html',
|
|
54
|
+
styleUrls: ['./cycles-emissions-logs.component.scss']
|
|
55
|
+
}]
|
|
56
|
+
}], ctorParameters: function () { return [{ type: i1.HeSearchService }, { type: i2.HeNodeService }]; }, propDecorators: { cycle: [{
|
|
57
|
+
type: Input
|
|
58
|
+
}], originalValues: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}], recalculatedValues: [{
|
|
61
|
+
type: Input
|
|
62
|
+
}] } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWVtaXNzaW9ucy1sb2dzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jeWNsZXMvY3ljbGVzLWVtaXNzaW9ucy1sb2dzL2N5Y2xlcy1lbWlzc2lvbnMtbG9ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1lbWlzc2lvbnMtbG9ncy9jeWNsZXMtZW1pc3Npb25zLWxvZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQXVDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBU3JFLE1BQU0sT0FBTyw0QkFBNEI7SUFldkMsWUFDVSxhQUE4QixFQUM5QixXQUEwQjtRQUQxQixrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFiN0IsbUJBQWMsR0FBZSxFQUFFLENBQUM7UUFFaEMsdUJBQWtCLEdBQWUsRUFBRSxDQUFDO1FBRXBDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFZixhQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXBCLFdBQU0sR0FBa0IsRUFBRSxDQUFDO1FBQzNCLGNBQVMsR0FBa0IsRUFBRSxDQUFDO0lBS2pDLENBQUM7SUFFQyxRQUFROztZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUE2QjtnQkFDekYsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJO2dCQUNYLEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFOzRCQUNKLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzRCQUN4QixhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQzt5QkFDckM7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUUzQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0tBQUE7SUFFRCxJQUFZLElBQUk7UUFDZCx1Q0FDSyxJQUFJLENBQUMsS0FBSyxLQUNiLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxJQUNqQztJQUNKLENBQUM7OzBIQTlDVSw0QkFBNEI7OEdBQTVCLDRCQUE0Qix3S0NiekMsNGNBZUE7NEZERmEsNEJBQTRCO2tCQUx4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFdBQVcsRUFBRSx3Q0FBd0M7b0JBQ3JELFNBQVMsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO2lCQUN0RDtrSUFHUyxLQUFLO3NCQURaLEtBQUs7Z0JBR0MsY0FBYztzQkFEcEIsS0FBSztnQkFHQyxrQkFBa0I7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IEVtaXNzaW9uLCBJQ3ljbGVKU09OTEQsIElUZXJtSlNPTkxELCBOb2RlVHlwZSwgVGVybVRlcm1UeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5pbXBvcnQgeyBtYXRjaFRlcm1UeXBlLCBtYXRjaFR5cGUgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBIZU5vZGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtZW1pc3Npb25zLWxvZ3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3ljbGVzLWVtaXNzaW9ucy1sb2dzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3ljbGVzLWVtaXNzaW9ucy1sb2dzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzRW1pc3Npb25zTG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgY3ljbGU/OiBJQ3ljbGVKU09OTEQ7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcmlnaW5hbFZhbHVlczogRW1pc3Npb25bXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVjYWxjdWxhdGVkVmFsdWVzOiBFbWlzc2lvbltdID0gW107XG5cbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgbG9nc1VybD86IHN0cmluZztcbiAgcHVibGljIE5vZGVUeXBlID0gTm9kZVR5cGU7XG4gIHB1YmxpYyBsb2dzOiBhbnk7XG4gIHB1YmxpYyBtb2RlbHM6IElUZXJtSlNPTkxEW10gPSBbXTtcbiAgcHVibGljIGVtaXNzaW9uczogSVRlcm1KU09OTERbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogSGVTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2VcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvZ3NVcmwgPSB0aGlzLm5vZGVTZXJ2aWNlLm5vZGVMb2dzVXJsKHRoaXMubm9kZSk7XG4gICAgdGhpcy5sb2dzID0gYXdhaXQgdGhpcy5ub2RlU2VydmljZS5nZXRNb2RlbHNMb2codGhpcy5ub2RlKTtcblxuICAgIGNvbnN0IHsgcmVzdWx0czogZW1pc3Npb25zIH0gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoPElUZXJtSlNPTkxELCBOb2RlVHlwZS5UZXJtPih7XG4gICAgICBmaWVsZHM6IFsnQHR5cGUnLCAnQGlkJywgJ25hbWUnXSxcbiAgICAgIGxpbWl0OiAxMDAwLFxuICAgICAgcXVlcnk6IHtcbiAgICAgICAgYm9vbDoge1xuICAgICAgICAgIG11c3Q6IFtcbiAgICAgICAgICAgIG1hdGNoVHlwZShOb2RlVHlwZS5UZXJtKSxcbiAgICAgICAgICAgIG1hdGNoVGVybVR5cGUoVGVybVRlcm1UeXBlLmVtaXNzaW9uKVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZW1pc3Npb25zID0gZW1pc3Npb25zO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldCBub2RlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmN5Y2xlLFxuICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgfTtcbiAgfVxufVxuIiwiPGhlLW5vZGUtbG9ncy1tb2RlbHMgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBsb2FkZXJcIlxuICBbbG9nc1VybF09XCJsb2dzVXJsXCJcbiAgW25vZGVUeXBlXT1cIk5vZGVUeXBlLkN5Y2xlXCJcbiAgW29yaWdpbmFsVmFsdWVzXT1cIm9yaWdpbmFsVmFsdWVzXCJcbiAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJyZWNhbGN1bGF0ZWRWYWx1ZXNcIlxuICBbdGVybXNdPVwiZW1pc3Npb25zXCJcbiAgW2xvZ3NdPVwibG9nc1wiXG4gIGZpbHRlcmVkVHlwZT1cIkVtaXNzaW9uXCJcbj48L2hlLW5vZGUtbG9ncy1tb2RlbHM+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyIHB5LTNcIj5cbiAgICA8ZmEtaWNvbiBpY29uPVwic3Bpbm5lclwiIFtwdWxzZV09XCJ0cnVlXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
package/esm2015/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { CycleFunctionalUnit } from '@hestia-earth/schema';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
export class CyclesFunctionalUnitMeasureComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.CycleFunctionalUnit = CycleFunctionalUnit;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
CyclesFunctionalUnitMeasureComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesFunctionalUnitMeasureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
+
CyclesFunctionalUnitMeasureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: { cycle: "cycle" }, ngImport: i0, template: "<span class=\"pl-1\" [ngSwitch]=\"cycle?.functionalUnit\">\n <ng-container *ngSwitchCase=\"CycleFunctionalUnit['1 ha']\">1 hectare</ng-container>\n <ng-container *ngSwitchDefault>relative</ng-container>\n</span>\n", styles: [""], directives: [{ type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesFunctionalUnitMeasureComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{
|
|
15
|
+
selector: 'he-cycles-functional-unit-measure',
|
|
16
|
+
templateUrl: './cycles-functional-unit-measure.component.html',
|
|
17
|
+
styleUrls: ['./cycles-functional-unit-measure.component.scss']
|
|
18
|
+
}]
|
|
19
|
+
}], propDecorators: { cycle: [{
|
|
20
|
+
type: Input
|
|
21
|
+
}] } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWZ1bmN0aW9uYWwtdW5pdC1tZWFzdXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jeWNsZXMvY3ljbGVzLWZ1bmN0aW9uYWwtdW5pdC1tZWFzdXJlL2N5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZS9jeWNsZXMtZnVuY3Rpb25hbC11bml0LW1lYXN1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFnQixtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFPekUsTUFBTSxPQUFPLG9DQUFvQztJQUxqRDtRQVNTLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDO0tBQ2xEOztrSUFMWSxvQ0FBb0M7c0hBQXBDLG9DQUFvQyxxR0NSakQseU5BSUE7NEZESWEsb0NBQW9DO2tCQUxoRCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQ0FBbUM7b0JBQzdDLFdBQVcsRUFBRSxpREFBaUQ7b0JBQzlELFNBQVMsRUFBRSxDQUFDLGlEQUFpRCxDQUFDO2lCQUMvRDs4QkFHUSxLQUFLO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQ3ljbGVKU09OTEQsIEN5Y2xlRnVuY3Rpb25hbFVuaXQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jeWNsZXMtZnVuY3Rpb25hbC11bml0LW1lYXN1cmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtZnVuY3Rpb25hbC11bml0LW1lYXN1cmUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDeWNsZXNGdW5jdGlvbmFsVW5pdE1lYXN1cmVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBwdWJsaWMgY3ljbGU/OiBJQ3ljbGVKU09OTEQ7XG5cbiAgcHVibGljIEN5Y2xlRnVuY3Rpb25hbFVuaXQgPSBDeWNsZUZ1bmN0aW9uYWxVbml0O1xufVxuIiwiPHNwYW4gY2xhc3M9XCJwbC0xXCIgW25nU3dpdGNoXT1cImN5Y2xlPy5mdW5jdGlvbmFsVW5pdFwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJDeWNsZUZ1bmN0aW9uYWxVbml0WycxIGhhJ11cIj4xIGhlY3RhcmU8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PnJlbGF0aXZlPC9uZy1jb250YWluZXI+XG48L3NwYW4+XG4iXX0=
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { Chart } from 'chart.js';
|
|
3
|
+
import { propertyValue, ellipsis, groupNodesByTerm, itemColor } from '../../common/utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class CyclesResultComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.cycles = [];
|
|
8
|
+
}
|
|
9
|
+
ngAfterViewInit() {
|
|
10
|
+
Chart.scaleService.updateScaleDefaults('category', {
|
|
11
|
+
ticks: {
|
|
12
|
+
callback: tick => ellipsis(`${tick}`, 25)
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
return this.init();
|
|
16
|
+
}
|
|
17
|
+
ngOnChanges(changes) {
|
|
18
|
+
if ('cycles' in changes && !changes.cycles.firstChange) {
|
|
19
|
+
return this.init();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
init() {
|
|
23
|
+
const labels = this.cycles.map(({ name }, index) => `${index + 1}. ${name}`);
|
|
24
|
+
const productsPerCycle = groupNodesByTerm(this.cycles, 'products');
|
|
25
|
+
const datasets = Object.values(productsPerCycle).map(({ term: { name, units }, values }, index) => {
|
|
26
|
+
const color = itemColor(index);
|
|
27
|
+
return {
|
|
28
|
+
label: `${name}${units ? ` (in ${units})` : ''}`,
|
|
29
|
+
backgroundColor: color,
|
|
30
|
+
borderColor: color,
|
|
31
|
+
barPercentage: 0.5,
|
|
32
|
+
data: this.cycles.map(({ '@id': id }) => values[id] ? propertyValue(values[id].value) : 0)
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
this.updateChart(datasets, labels);
|
|
36
|
+
}
|
|
37
|
+
updateChart(datasets = [], labels = []) {
|
|
38
|
+
var _a;
|
|
39
|
+
if (this.chart) {
|
|
40
|
+
this.chart.destroy();
|
|
41
|
+
}
|
|
42
|
+
this.chart = new Chart((_a = this.chartRef) === null || _a === void 0 ? void 0 : _a.nativeElement, {
|
|
43
|
+
type: 'horizontalBar',
|
|
44
|
+
data: {
|
|
45
|
+
labels,
|
|
46
|
+
datasets
|
|
47
|
+
},
|
|
48
|
+
options: {
|
|
49
|
+
responsive: true,
|
|
50
|
+
maintainAspectRatio: false,
|
|
51
|
+
legend: {
|
|
52
|
+
display: true
|
|
53
|
+
},
|
|
54
|
+
tooltips: {
|
|
55
|
+
callbacks: {
|
|
56
|
+
title: (tooltipItems, data) => data.labels[tooltipItems[0].index]
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
scales: {
|
|
60
|
+
xAxes: [{
|
|
61
|
+
ticks: {
|
|
62
|
+
min: 0
|
|
63
|
+
}
|
|
64
|
+
}],
|
|
65
|
+
yAxes: [{
|
|
66
|
+
position: 'left',
|
|
67
|
+
scaleLabel: {
|
|
68
|
+
display: true,
|
|
69
|
+
labelString: 'Cycle'
|
|
70
|
+
}
|
|
71
|
+
}]
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
CyclesResultComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
78
|
+
CyclesResultComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesResultComponent, selector: "he-cycles-result", inputs: { cycles: "cycles" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <canvas #chart>{{chart}}</canvas>\n</div>\n", styles: [":host{display:block}.chart-container{height:100%;min-height:300px;position:relative}\n"] });
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesResultComponent, decorators: [{
|
|
80
|
+
type: Component,
|
|
81
|
+
args: [{
|
|
82
|
+
selector: 'he-cycles-result',
|
|
83
|
+
templateUrl: './cycles-result.component.html',
|
|
84
|
+
styleUrls: ['./cycles-result.component.scss']
|
|
85
|
+
}]
|
|
86
|
+
}], propDecorators: { chartRef: [{
|
|
87
|
+
type: ViewChild,
|
|
88
|
+
args: ['chart']
|
|
89
|
+
}], cycles: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}] } });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLXJlc3VsdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1yZXN1bHQvY3ljbGVzLXJlc3VsdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1yZXN1bHQvY3ljbGVzLXJlc3VsdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBaUIsU0FBUyxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQUVqSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQU8xRixNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBVVUsV0FBTSxHQUFtQixFQUFFLENBQUM7S0F1RXJDO0lBckVDLGVBQWU7UUFDYixLQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRTtZQUNqRCxLQUFLLEVBQUU7Z0JBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQzFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFTyxJQUFJO1FBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFF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dGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxELCBQcm9kdWN0IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICdjaGFydC5qcyc7XG5cbmltcG9ydCB7IHByb3BlcnR5VmFsdWUsIGVsbGlwc2lzLCBncm91cE5vZGVzQnlUZXJtLCBpdGVtQ29sb3IgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtcmVzdWx0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1yZXN1bHQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtcmVzdWx0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzUmVzdWx0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnY2hhcnQnKVxuICBwcml2YXRlIGNoYXJ0UmVmPzogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBjaGFydDogYW55O1xuICBASW5wdXQoKVxuICBwcml2YXRlIGN5Y2xlczogSUN5Y2xlSlNPTkxEW10gPSBbXTtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgQ2hhcnQuc2NhbGVTZXJ2aWNlLnVwZGF0ZVNjYWxlRGVmYXVsdHMoJ2NhdGVnb3J5Jywge1xuICAgICAgdGlja3M6IHtcbiAgICAgICAgY2FsbGJhY2s6IHRpY2sgPT4gZWxsaXBzaXMoYCR7dGlja31gLCAyNSlcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdjeWNsZXMnIGluIGNoYW5nZXMgJiYgIWNoYW5nZXMuY3ljbGVzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY3ljbGVzLm1hcCgoeyBuYW1lIH0sIGluZGV4KSA9PiBgJHtpbmRleCArIDF9LiAke25hbWV9YCk7XG4gICAgY29uc3QgcHJvZHVjdHNQZXJDeWNsZSA9IGdyb3VwTm9kZXNCeVRlcm08SUN5Y2xlSlNPTkxELCBQcm9kdWN0Pih0aGlzLmN5Y2xlcywgJ3Byb2R1Y3RzJyk7XG4gICAgY29uc3QgZGF0YXNldHMgPSBPYmplY3QudmFsdWVzKHByb2R1Y3RzUGVyQ3ljbGUpLm1hcCgoeyB0ZXJtOiB7IG5hbWUsIHVuaXRzIH0sIHZhbHVlcyB9LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29sb3IgPSBpdGVtQ29sb3IoaW5kZXgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IGAke25hbWV9JHt1bml0cyA/IGAgKGluICR7dW5pdHN9KWAgOiAnJ31gLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgICBib3JkZXJDb2xvcjogY29sb3IsXG4gICAgICAgIGJhclBlcmNlbnRhZ2U6IDAuNSxcbiAgICAgICAgZGF0YTogdGhpcy5jeWNsZXMubWFwKCh7ICdAaWQnOiBpZCB9KSA9PiB2YWx1ZXNbaWRdID8gcHJvcGVydHlWYWx1ZSh2YWx1ZXNbaWRdLnZhbHVlKSA6IDApXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ2hhcnQoZGF0YXNldHMgYXMgYW55LCBsYWJlbHMgYXMgYW55KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2hhcnQoZGF0YXNldHMgPSBbXSwgbGFiZWxzID0gW10pIHtcbiAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgdGhpcy5jaGFydC5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQodGhpcy5jaGFydFJlZj8ubmF0aXZlRWxlbWVudCwge1xuICAgICAgdHlwZTogJ2hvcml6b250YWxCYXInLFxuICAgICAgZGF0YToge1xuICAgICAgICBsYWJlbHMsXG4gICAgICAgIGRhdGFzZXRzXG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgZGlzcGxheTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b29sdGlwczoge1xuICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgdGl0bGU6ICh0b29sdGlwSXRlbXMsIGRhdGEpID0+IGRhdGEubGFiZWxzIVt0b29sdGlwSXRlbXNbMF0uaW5kZXghXSBhcyBhbnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNjYWxlczoge1xuICAgICAgICAgIHhBeGVzOiBbe1xuICAgICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgICAgbWluOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfV0sXG4gICAgICAgICAgeUF4ZXM6IFt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgc2NhbGVMYWJlbDoge1xuICAgICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgICBsYWJlbFN0cmluZzogJ0N5Y2xlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiPlxuICA8Y2FudmFzICNjaGFydD57e2NoYXJ0fX08L2NhbnZhcz5cbjwvZGl2PlxuIl19
|