@hestia-earth/ui-components 0.2.6 → 0.2.7
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/bundles/hestia-earth-ui-components.umd.js +82 -63
- package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
- package/common/node-utils.d.ts +1 -1
- package/engine/engine.service.d.ts +1 -0
- package/esm2015/common/link-key-value/link-key-value.component.js +15 -6
- package/esm2015/common/node-utils.js +1 -1
- package/esm2015/engine/engine.service.js +2 -2
- package/esm2015/files/files-form.model.js +2 -1
- package/esm2015/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.js +26 -18
- package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +2 -2
- package/esm2015/node/node-logs-models/node-logs-models.component.js +41 -42
- package/esm2015/node/node-value-details/node-value-details.component.js +2 -2
- package/fesm2015/hestia-earth-ui-components.js +81 -64
- package/fesm2015/hestia-earth-ui-components.js.map +1 -1
- package/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.d.ts +2 -0
- package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +1 -1
- package/node/node-logs-models/node-logs-models.component.d.ts +1 -3
- package/package.json +1 -1
|
@@ -1928,9 +1928,20 @@
|
|
|
1928
1928
|
args: ['window:resize', []]
|
|
1929
1929
|
}] } });
|
|
1930
1930
|
|
|
1931
|
+
var valueLink = function (value) { return schema.isExpandable(value) && value['@id'] ? [baseUrl(), value['@type'].toLowerCase(), value['@id']].join('/') : null; };
|
|
1932
|
+
var valueLinkRef = function (value, href) { return href ? "<a href=\"" + href + "\">" + (value.name || value['@id']) + "</a>" : null; };
|
|
1931
1933
|
var stringMapper = {
|
|
1932
1934
|
undefined: function () { return ''; },
|
|
1933
|
-
|
|
1935
|
+
blankNode: function (value) { return 'term' in value
|
|
1936
|
+
? "" + valueLinkRef(value.term, valueLink(value.term)) + ('value' in value ? ": " + value.value : '')
|
|
1937
|
+
: valueLinkRef(value, valueLink(value)) || value.name || value['@id']; },
|
|
1938
|
+
object: function (value) { return Array.isArray(value)
|
|
1939
|
+
? value.map(toString).join(', ')
|
|
1940
|
+
: value instanceof Date
|
|
1941
|
+
? value.toJSON()
|
|
1942
|
+
: schema.isExpandable(value)
|
|
1943
|
+
? stringMapper.blankNode(value)
|
|
1944
|
+
: JSON.stringify(value, null, 2); }
|
|
1934
1945
|
};
|
|
1935
1946
|
var toString = function (value) { return typeof value in stringMapper ? stringMapper[typeof value](value) : value.toString(); };
|
|
1936
1947
|
var LinkKeyValueComponent = /** @class */ (function () {
|
|
@@ -1961,9 +1972,7 @@
|
|
|
1961
1972
|
});
|
|
1962
1973
|
Object.defineProperty(LinkKeyValueComponent.prototype, "valueLink", {
|
|
1963
1974
|
get: function () {
|
|
1964
|
-
return
|
|
1965
|
-
[baseUrl(), this.value['@type'].toLowerCase(), this.value['@id']].join('/') :
|
|
1966
|
-
null;
|
|
1975
|
+
return valueLink(this.value);
|
|
1967
1976
|
},
|
|
1968
1977
|
enumerable: false,
|
|
1969
1978
|
configurable: true
|
|
@@ -1985,7 +1994,7 @@
|
|
|
1985
1994
|
return LinkKeyValueComponent;
|
|
1986
1995
|
}());
|
|
1987
1996
|
LinkKeyValueComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: LinkKeyValueComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
|
|
1988
|
-
LinkKeyValueComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: LinkKeyValueComponent, selector: "he-link-key-value", inputs: { node: "node", nodeType: "nodeType", dataKey: "dataKey", key: "key" }, ngImport: i0__namespace, template: "<ng-container *ngIf=\"!isUndefined\">\n <ng-container *bindOnce=\"node\">\n <a [href]=\"baseUrl + '/schema/' + type + '#' + key\" target=\"_blank\"><b>{{key}}</b></a>\n <span class=\"pr-2\">:</span>\n <
|
|
1997
|
+
LinkKeyValueComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: LinkKeyValueComponent, selector: "he-link-key-value", inputs: { node: "node", nodeType: "nodeType", dataKey: "dataKey", key: "key" }, ngImport: i0__namespace, template: "<ng-container *ngIf=\"!isUndefined\">\n <ng-container *bindOnce=\"node\">\n <a [href]=\"baseUrl + '/schema/' + type + '#' + key\" target=\"_blank\"><b>{{key}}</b></a>\n <span class=\"pr-2\">:</span>\n\n <ng-container *ngIf=\"isArray; else singleValue\">\n <div class=\"array-container pl-2\">\n <p *ngFor=\"let v of value\" [innerHtml]=\"toString(v) | precision:3\"></p>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #singleValue>\n <div class=\"is-inline-block pr-1\" [innerHtml]=\"valueString | precision:3\"></div>\n\n <he-blank-node-state\n [node]=\"node\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"\n ></he-blank-node-state>\n</ng-template>\n", styles: [":host{display:block}.array-container{max-height:100px;overflow-y:auto}\n"], components: [{ type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["nodeType", "dataKey", "key", "node", "state"] }], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "precision": PrecisionPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
|
|
1989
1998
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: LinkKeyValueComponent, decorators: [{
|
|
1990
1999
|
type: i0.Component,
|
|
1991
2000
|
args: [{
|
|
@@ -5494,6 +5503,13 @@
|
|
|
5494
5503
|
.filter(function (v) { return v !== null; });
|
|
5495
5504
|
return propertyValues.length ? propertyValues.reduce(function (p, v) { return p + v; }, 0) : undefined;
|
|
5496
5505
|
};
|
|
5506
|
+
var isRunOrchestrator = function (log) { return !('shouldRunOrchestrator' in log) || log.shouldRunOrchestrator; };
|
|
5507
|
+
var hasLog = function (log, withOrchestrator) {
|
|
5508
|
+
if (withOrchestrator === void 0) { withOrchestrator = true; }
|
|
5509
|
+
return !!log && ('shouldRun' in log ||
|
|
5510
|
+
'runRequired' in log ||
|
|
5511
|
+
(withOrchestrator && 'shouldRunOrchestrator' in log));
|
|
5512
|
+
};
|
|
5497
5513
|
var isRecalculated = function (values, key) {
|
|
5498
5514
|
if (key === void 0) { key = 'value'; }
|
|
5499
5515
|
return values.some(function (v) { return (__spreadArray(__spreadArray([], __read((v.added || []))), __read((v.updated || [])))).includes(key); });
|
|
@@ -5527,18 +5543,26 @@
|
|
|
5527
5543
|
var logSubValue = function (logs, key, prop) { return logs[key][prop] ? (Array.isArray(logs[key][prop]) ?
|
|
5528
5544
|
logs[key][prop].map(function (id) { return ({ key: prop, id: id }); }) :
|
|
5529
5545
|
{ key: prop, id: logs[key][prop] }) : undefined; };
|
|
5530
|
-
var
|
|
5531
|
-
|
|
5546
|
+
var logProperties = function (nodes, models) { return nodes.flatMap(function (node) { return (node.properties || []).map(function (_c) {
|
|
5547
|
+
var term = _c.term;
|
|
5548
|
+
return term['@id'];
|
|
5549
|
+
}); }).map(function (id) { return ({ key: 'property', id: id, configModels: findModels(models, id).map(function (_c) {
|
|
5550
|
+
var model = _c.model;
|
|
5551
|
+
return model;
|
|
5552
|
+
}) }); }); };
|
|
5553
|
+
var logSubValues = function (logs, original, recalculated, models) { return utils.unique(__spreadArray(__spreadArray(__spreadArray([], __read(Object.keys(logs).flatMap(function (key) { return [
|
|
5532
5554
|
logSubValue(logs, key, 'input'),
|
|
5533
5555
|
logSubValue(logs, key, 'property')
|
|
5534
5556
|
]
|
|
5535
5557
|
.flat()
|
|
5536
5558
|
.filter(Boolean)
|
|
5559
|
+
.map(function (v) { return (Object.assign(Object.assign({}, v), { configModels: [key] })); }); }))), __read(logProperties(original, models))), __read(logProperties(recalculated, models))))
|
|
5537
5560
|
.map(function (v) {
|
|
5538
5561
|
var originalValue = blankNodeValue(original, v.key, v.id);
|
|
5539
5562
|
var recalculatedValue = blankNodeValue(recalculated, v.key, v.id);
|
|
5540
|
-
return Object.assign(Object.assign({}, v), { configModels:
|
|
5541
|
-
})
|
|
5563
|
+
return Object.assign(Object.assign({}, v), { configModels: v.configModels, originalValue: originalValue, recalculatedValue: recalculatedValue, isRecalculated: !utils.isUndefined(recalculatedValue) && recalculatedValue !== originalValue });
|
|
5564
|
+
})
|
|
5565
|
+
.filter(function (v) { return v.configModels.length > 0; }); };
|
|
5542
5566
|
var logKeys = function (logs, original, recalculated) { return Object.keys(logs)
|
|
5543
5567
|
.filter(function (key) { return logs[key].isKey; })
|
|
5544
5568
|
.map(function (key) { return ({
|
|
@@ -5633,6 +5657,7 @@
|
|
|
5633
5657
|
this.terms = [];
|
|
5634
5658
|
this.baseUrl = baseUrl();
|
|
5635
5659
|
this.isExternal = isExternal();
|
|
5660
|
+
this.hasLog = hasLog;
|
|
5636
5661
|
this.loading = true;
|
|
5637
5662
|
this.blankNodes = [];
|
|
5638
5663
|
this.methodModelsCount = 0;
|
|
@@ -5709,8 +5734,11 @@
|
|
|
5709
5734
|
return model;
|
|
5710
5735
|
}))));
|
|
5711
5736
|
var keys = logKeys(termLogs, original, recalculated);
|
|
5712
|
-
var subValues = logSubValues(termLogs, original, recalculated);
|
|
5713
|
-
var isRequired = !Object.values(termLogs)
|
|
5737
|
+
var subValues = logSubValues(termLogs, original, recalculated, allModels);
|
|
5738
|
+
var isRequired = !Object.values(termLogs)
|
|
5739
|
+
// ignore models that were never going to run
|
|
5740
|
+
.filter(isRunOrchestrator)
|
|
5741
|
+
.every(function (logs) { return logs.runRequired === false; });
|
|
5714
5742
|
return {
|
|
5715
5743
|
isOpen: true,
|
|
5716
5744
|
canOpen: keys.length > 0 || subValues.length > 0,
|
|
@@ -5787,9 +5815,10 @@
|
|
|
5787
5815
|
};
|
|
5788
5816
|
/** Logs **/
|
|
5789
5817
|
NodeLogsModelsComponent.prototype.getSubvalueLogs = function (node, _c) {
|
|
5790
|
-
var id = _c.id;
|
|
5818
|
+
var id = _c.id, key = _c.key;
|
|
5791
5819
|
// try to get a more precise logs, defaults to id otherwise
|
|
5792
|
-
return get$3(this.logs, [id, node.termId].join('.'), get$3(this.logs, id, {})
|
|
5820
|
+
return get$3(this.logs, [id, node.termId].join('.'), key === 'property' ? {} : get$3(this.logs, id, {}) // property needs to be mapped to the exact node to work
|
|
5821
|
+
);
|
|
5793
5822
|
};
|
|
5794
5823
|
NodeLogsModelsComponent.prototype.getLogs = function (node, methodId, subValue) {
|
|
5795
5824
|
var logs = (subValue === null || subValue === void 0 ? void 0 : subValue.key) ? this.getSubvalueLogs(node, subValue) : node.logs || {};
|
|
@@ -5798,9 +5827,6 @@
|
|
|
5798
5827
|
NodeLogsModelsComponent.prototype.isBackground = function (log) {
|
|
5799
5828
|
return (log === null || log === void 0 ? void 0 : log.methodTier) === schema.EmissionMethodTier.background;
|
|
5800
5829
|
};
|
|
5801
|
-
NodeLogsModelsComponent.prototype.isRunOrchestrator = function (log) {
|
|
5802
|
-
return !('shouldRunOrchestrator' in log) || log.shouldRunOrchestrator;
|
|
5803
|
-
};
|
|
5804
5830
|
NodeLogsModelsComponent.prototype.isUserProvided = function (node, methodId, subValue) {
|
|
5805
5831
|
var log = this.getLogs(node, methodId, subValue);
|
|
5806
5832
|
return [
|
|
@@ -5811,13 +5837,6 @@
|
|
|
5811
5837
|
this.hasLog(log, false) // skip if contains logs other than orchestrator
|
|
5812
5838
|
].every(function (v) { return !v; });
|
|
5813
5839
|
};
|
|
5814
|
-
NodeLogsModelsComponent.prototype.validSubValue = function (node, index, subValue) {
|
|
5815
|
-
var methodId = this.getMethodIdAt(node, index, subValue);
|
|
5816
|
-
var log = get$3(node.logs[methodId], subValue === null || subValue === void 0 ? void 0 : subValue.key, null);
|
|
5817
|
-
return !(subValue === null || subValue === void 0 ? void 0 : subValue.id) || (
|
|
5818
|
-
// subValue can be an array
|
|
5819
|
-
Array.isArray(log) ? log.includes(subValue === null || subValue === void 0 ? void 0 : subValue.id) : log === (subValue === null || subValue === void 0 ? void 0 : subValue.id));
|
|
5820
|
-
};
|
|
5821
5840
|
NodeLogsModelsComponent.prototype.getMethodIdAt = function (node, index, subValue) {
|
|
5822
5841
|
var configModels = (subValue || node).configModels;
|
|
5823
5842
|
return configModels[index];
|
|
@@ -5830,12 +5849,6 @@
|
|
|
5830
5849
|
(log === null || log === void 0 ? void 0 : log.model) ||
|
|
5831
5850
|
(methodId ? methodIdLabel(methodId) : '');
|
|
5832
5851
|
};
|
|
5833
|
-
NodeLogsModelsComponent.prototype.hasLog = function (log, withOrchestrator) {
|
|
5834
|
-
if (withOrchestrator === void 0) { withOrchestrator = true; }
|
|
5835
|
-
return !!log && ('shouldRun' in log ||
|
|
5836
|
-
'runRequired' in log ||
|
|
5837
|
-
(withOrchestrator && 'shouldRunOrchestrator' in log));
|
|
5838
|
-
};
|
|
5839
5852
|
NodeLogsModelsComponent.prototype.hasLogDetails = function (node, methodId, subValue) {
|
|
5840
5853
|
var _a;
|
|
5841
5854
|
var log = this.getLogs(node, methodId, subValue);
|
|
@@ -5848,17 +5861,16 @@
|
|
|
5848
5861
|
var log = this.getLogs(node, methodId, subValue);
|
|
5849
5862
|
return this.isUserProvided(node, methodId, subValue)
|
|
5850
5863
|
? LogStatus.dataProvided
|
|
5851
|
-
: (
|
|
5852
|
-
? (
|
|
5853
|
-
?
|
|
5854
|
-
|
|
5855
|
-
|
|
5856
|
-
? log.shouldRun
|
|
5857
|
-
|
|
5858
|
-
|
|
5859
|
-
|
|
5860
|
-
|
|
5861
|
-
: LogStatus.dataProvided))
|
|
5864
|
+
: (hasLog(log)
|
|
5865
|
+
? (!node.isRequired
|
|
5866
|
+
? LogStatus.notRequired
|
|
5867
|
+
: isRunOrchestrator(log)
|
|
5868
|
+
? ('shouldRun' in log
|
|
5869
|
+
? log.shouldRun ? LogStatus.success : LogStatus.error
|
|
5870
|
+
: LogStatus.dataProvided)
|
|
5871
|
+
: node.isRecalculated
|
|
5872
|
+
? LogStatus.skipHierarchy
|
|
5873
|
+
: LogStatus.dataProvided)
|
|
5862
5874
|
: LogStatus.skipHierarchy);
|
|
5863
5875
|
};
|
|
5864
5876
|
NodeLogsModelsComponent.prototype.requirementKeys = function (requirements) {
|
|
@@ -5870,7 +5882,7 @@
|
|
|
5870
5882
|
return NodeLogsModelsComponent;
|
|
5871
5883
|
}());
|
|
5872
5884
|
NodeLogsModelsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: NodeLogsModelsComponent, deps: [{ token: HeSearchService }, { token: HeEngineService }], target: i0__namespace.ɵɵFactoryTarget.Component });
|
|
5873
|
-
NodeLogsModelsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { nodeType: "nodeType", nodeKey: "nodeKey", includeAllModels: "includeAllModels", logsUrl: "logsUrl", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", logs: "logs", filteredType: "filteredType" }, ngImport: i0__namespace, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"rowsCount\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [ngbTypeahead]=\"suggestTerm\"\n [focusFirst]=\"false\"\n (change)=\"filterResults()\"\n >\n <a class=\"icon is-small is-right\"\n [class.is-hidden]=\"!term\"\n (click)=\"term = ''; filterResults();\"\n >\n <fa-icon icon=\"times\"></fa-icon>\n </a>\n </div>\n </div>\n </th>\n <th class=\"has-border-right\">Units</th>\n <th>Original</th>\n <th>Recalculated</th>\n <th>Difference</th>\n <th *ngFor=\"let c of methodModelsCount | times; let i = index\">({{i + 1}})</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n </td>\n </tr>\n <tr *ngIf=\"!loading && blankNodes.length === 0\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <span>No data</span>\n </td>\n </tr>\n <ng-container *ngFor=\"let blankNode of blankNodes; trackBy: trackByBlankNode\">\n <tr [class.has-sub-rows]=\"blankNode.canOpen\">\n <td class=\"width-auto\" [attr.title]=\"blankNode.term.name\">\n <a class=\"is-inline-block is-align-top pr-2 open-node\"\n (click)=\"blankNode.isOpen = !blankNode.isOpen\"\n *ngIf=\"blankNode.canOpen\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!blankNode.isOpen\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"blankNode.isOpen\"></fa-icon>\n </a>\n <he-node-link class=\"is-inline-block\" [node]=\"blankNode.term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{blankNode.term.name}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\">\n <span>{{blankNode.term?.units}}</span>\n </td>\n <td>\n <span>{{blankNode.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"!blankNode.isOriginal || blankNode.isRecalculated; else notRecalculated\">\n {{blankNode.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td class=\"is-nowrap\">\n <he-blank-node-value-delta *ngIf=\"blankNode.original.length && blankNode.isRecalculated; else noValue\"\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"blankNode.originalValue\"\n ></he-blank-node-value-delta>\n </td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode}\"></ng-container>\n </tr>\n\n <ng-container *ngIf=\"blankNode.keys?.length\">\n <tr\n *ngFor=\"let subValue of blankNode.keys\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"blankNode.subValues?.length\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n\n <a class=\"is-inline-block\" *ngIf=\"blankNode.type\"\n [href]=\"baseUrl + '/schema/' + blankNode.type + '#' + subValue.key\" target=\"_blank\" [title]=\"subValue.key\"\n >\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.key}}</span>\n </a>\n <span class=\"is-inline-block is-align-top\" *ngIf=\"!blankNode.type\">{{subValue.key}}</span>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <td class=\"blank-node-index-key\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:subValue.key, logs:getLogs(blankNode, subValue.key)}\"></ng-container>\n </td>\n <td *ngIf=\"methodModelsCount > 1\" [attr.colspan]=\"methodModelsCount - 1\"></td>\n </tr>\n </ng-container>\n\n <tr\n *ngFor=\"let subValue of blankNode.subValues\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3\">{{subValue.key | keyToLabel}}</span>\n\n <ng-container *ngIf=\"subValue.id\">\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n\n <ng-container [ngSwitch]=\"subValue.key\">\n <span class=\"is-inline-block\" *ngSwitchCase=\"'backgroundData'\">{{subValue.id | keyToLabel}}</span>\n <he-node-link *ngSwitchDefault class=\"is-block pl-4\" [node]=\"{'@type':'Term','@id':subValue.id}\" [attr.title]=\"subValue.id | keyToLabel\">\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.id | keyToLabel}}</span>\n </he-node-link>\n </ng-container>\n </ng-container>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode, subValue: subValue}\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\"\n (click)=\"showLegend = !showLegend\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!showLegend\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"showLegend\"></fa-icon>\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n <ul class=\"content pl-2\" [class.is-hidden]=\"!showLegend\">\n <li\n class=\"has-text-{{logColor[status.value]}}\"\n *ngFor=\"let status of LogStatus | keys\"\n >\n <fa-icon [icon]=\"logIcon[status.value]\"></fa-icon>\n <span class=\"pl-1\">{{status.value}}</span>\n </li>\n </ul>\n </div>\n <div class=\"column has-text-right\" *ngIf=\"filteredType\">\n <label class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"onlyWithData\"\n (change)=\"filterResults()\"\n [disabled]=\"!!term\"\n >\n <span class=\"ml-2\">Show only relevant {{filteredType | pluralize}}</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-blankNode=\"blankNode\" let-subValue=\"subValue\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"validSubValue(blankNode, i, subValue); else noValue\">\n <ng-container *ngIf=\"getMethodIdAt(blankNode, i, subValue); let methodId; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:methodId, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </ng-template>\n <div *ngIf=\"methodId | isArray; else modelSerie\">\n <p *ngFor=\"let value of methodId\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:value, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-blankNode=\"blankNode\" let-methodId=\"methodId\" let-subValue=\"subValue\" let-logs=\"logs\">\n <span\n [class.trigger-popover]=\"hasLogDetails(blankNode, methodId, subValue)\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"hasLogDetails(blankNode, methodId, subValue) ? togglePopover(p, { logs }) : null\"\n >\n <span class=\"is-capitalized\">{{methodName(blankNode, methodId, subValue)}}</span>\n <span class=\"pl-1\" *ngIf=\"hasLog(logs) && logs?.methodTier\">[{{logs.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[logStatus(blankNode, methodId, subValue)]}}\">\n <fa-icon [icon]=\"logIcon[logStatus(blankNode, methodId, subValue)]\"></fa-icon>\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notRecalculated>not recalculated</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs.requirements\">\n <p class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\">\n {{key}}: {{logs.requirements[key]}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.logs\">\n <p class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n {{key.key}}: {{key.value}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.missingLookups?.length\">\n <p class=\"mt-2\">Missing lookups:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}::ng-deep tr.has-sub-rows td{border-bottom-style:dotted}::ng-deep td he-node-link{width:190px}::ng-deep td .open-node+he-node-link{width:170px}\n"], components: [{ type: i1__namespace.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11__namespace.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i1__namespace$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i11__namespace.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }], pipes: { "times": TimesPipe, "default": DefaultPipe, "precision": PrecisionPipe, "keyToLabel": KeyToLabelPipe, "keys": KeysPipe, "pluralize": PluralizePipe, "isArray": IsArrayPipe } });
|
|
5885
|
+
NodeLogsModelsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { nodeType: "nodeType", nodeKey: "nodeKey", includeAllModels: "includeAllModels", logsUrl: "logsUrl", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", logs: "logs", filteredType: "filteredType" }, ngImport: i0__namespace, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"rowsCount\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [ngbTypeahead]=\"suggestTerm\"\n [focusFirst]=\"false\"\n (change)=\"filterResults()\"\n >\n <a class=\"icon is-small is-right\"\n [class.is-hidden]=\"!term\"\n (click)=\"term = ''; filterResults();\"\n >\n <fa-icon icon=\"times\"></fa-icon>\n </a>\n </div>\n </div>\n </th>\n <th class=\"has-border-right\">Units</th>\n <th>Original</th>\n <th>Recalculated</th>\n <th>Difference</th>\n <th *ngFor=\"let c of methodModelsCount | times; let i = index\">({{i + 1}})</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n </td>\n </tr>\n <tr *ngIf=\"!loading && blankNodes.length === 0\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <span>No data</span>\n </td>\n </tr>\n <ng-container *ngFor=\"let blankNode of blankNodes; trackBy: trackByBlankNode\">\n <tr [class.has-sub-rows]=\"blankNode.canOpen\">\n <td class=\"width-auto\" [attr.title]=\"blankNode.term.name\">\n <a class=\"is-inline-block is-align-top pr-2 open-node\"\n (click)=\"blankNode.isOpen = !blankNode.isOpen\"\n *ngIf=\"blankNode.canOpen\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!blankNode.isOpen\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"blankNode.isOpen\"></fa-icon>\n </a>\n <he-node-link class=\"is-inline-block\" [node]=\"blankNode.term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{blankNode.term.name}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\">\n <span>{{blankNode.term?.units}}</span>\n </td>\n <td>\n <span>{{blankNode.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"!blankNode.isOriginal || blankNode.isRecalculated; else notRecalculated\">\n {{blankNode.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td class=\"is-nowrap\">\n <he-blank-node-value-delta *ngIf=\"blankNode.original.length && blankNode.isRecalculated; else noValue\"\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"blankNode.originalValue\"\n ></he-blank-node-value-delta>\n </td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode}\"></ng-container>\n </tr>\n\n <ng-container *ngIf=\"blankNode.keys?.length\">\n <tr\n *ngFor=\"let subValue of blankNode.keys\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"blankNode.subValues?.length\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n\n <a class=\"is-inline-block\" *ngIf=\"blankNode.type\"\n [href]=\"baseUrl + '/schema/' + blankNode.type + '#' + subValue.key\" target=\"_blank\" [title]=\"subValue.key\"\n >\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.key}}</span>\n </a>\n <span class=\"is-inline-block is-align-top\" *ngIf=\"!blankNode.type\">{{subValue.key}}</span>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <td class=\"blank-node-index-key\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:subValue.key, logs:getLogs(blankNode, subValue.key)}\"></ng-container>\n </td>\n <td *ngIf=\"methodModelsCount > 1\" [attr.colspan]=\"methodModelsCount - 1\"></td>\n </tr>\n </ng-container>\n\n <tr\n *ngFor=\"let subValue of blankNode.subValues\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3\">{{subValue.key | keyToLabel}}</span>\n\n <ng-container *ngIf=\"subValue.id\">\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n\n <ng-container [ngSwitch]=\"subValue.key\">\n <span class=\"is-inline-block\" *ngSwitchCase=\"'backgroundData'\">{{subValue.id | keyToLabel}}</span>\n <he-node-link *ngSwitchDefault class=\"is-block pl-4\" [node]=\"{'@type':'Term','@id':subValue.id}\" [attr.title]=\"subValue.id | keyToLabel\">\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.id | keyToLabel}}</span>\n </he-node-link>\n </ng-container>\n </ng-container>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode, subValue: subValue}\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\"\n (click)=\"showLegend = !showLegend\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!showLegend\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"showLegend\"></fa-icon>\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n <ul class=\"content pl-2\" [class.is-hidden]=\"!showLegend\">\n <li\n class=\"has-text-{{logColor[status.value]}}\"\n *ngFor=\"let status of LogStatus | keys\"\n >\n <fa-icon [icon]=\"logIcon[status.value]\"></fa-icon>\n <span class=\"pl-1\">{{status.value}}</span>\n </li>\n </ul>\n </div>\n <div class=\"column has-text-right\" *ngIf=\"filteredType\">\n <label class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"onlyWithData\"\n (change)=\"filterResults()\"\n [disabled]=\"!!term\"\n >\n <span class=\"ml-2\">Show only relevant {{filteredType | pluralize}}</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-blankNode=\"blankNode\" let-subValue=\"subValue\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"getMethodIdAt(blankNode, i, subValue); let methodId; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:methodId, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </ng-template>\n <div *ngIf=\"methodId | isArray; else modelSerie\">\n <p *ngFor=\"let value of methodId\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:value, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-blankNode=\"blankNode\" let-methodId=\"methodId\" let-subValue=\"subValue\" let-logs=\"logs\">\n <span\n [class.trigger-popover]=\"hasLogDetails(blankNode, methodId, subValue)\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"hasLogDetails(blankNode, methodId, subValue) ? togglePopover(p, { logs }) : null\"\n >\n <span class=\"is-capitalized\">{{methodName(blankNode, methodId, subValue)}}</span>\n <span class=\"pl-1\" *ngIf=\"hasLog(logs) && logs?.methodTier\">[{{logs.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[logStatus(blankNode, methodId, subValue)]}}\">\n <fa-icon [icon]=\"logIcon[logStatus(blankNode, methodId, subValue)]\"></fa-icon>\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notRecalculated>not recalculated</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs.requirements\">\n <p class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\">\n {{key}}: {{logs.requirements[key]}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.logs\">\n <p class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n {{key.key}}: {{key.value}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.missingLookups?.length\">\n <p class=\"mt-2\">Missing lookups:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}::ng-deep tr.has-sub-rows td{border-bottom-style:dotted}::ng-deep td he-node-link{width:190px}::ng-deep td .open-node+he-node-link{width:170px}\n"], components: [{ type: i1__namespace.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11__namespace.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i1__namespace$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i11__namespace.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }], pipes: { "times": TimesPipe, "default": DefaultPipe, "precision": PrecisionPipe, "keyToLabel": KeyToLabelPipe, "keys": KeysPipe, "pluralize": PluralizePipe, "isArray": IsArrayPipe } });
|
|
5874
5886
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: NodeLogsModelsComponent, decorators: [{
|
|
5875
5887
|
type: i0.Component,
|
|
5876
5888
|
args: [{
|
|
@@ -5941,7 +5953,7 @@
|
|
|
5941
5953
|
'methodModelDescription', 'description',
|
|
5942
5954
|
'primary', 'emissionDuration', 'observations', 'statsDefinition',
|
|
5943
5955
|
'term', 'source', 'variety', 'reliability', 'price', 'currency', 'cost', 'revenue', 'economicValueShare',
|
|
5944
|
-
'impactAssessment'
|
|
5956
|
+
'impactAssessment', 'properties'
|
|
5945
5957
|
];
|
|
5946
5958
|
var tableKeys = [
|
|
5947
5959
|
'inputs', 'transformation', 'value', 'dates', 'methodModel', 'methodTier', 'statsDefinition'
|
|
@@ -7617,6 +7629,7 @@
|
|
|
7617
7629
|
propertyValueType(Object.assign(Object.assign({}, schema), { type: [schema.items.type] })) :
|
|
7618
7630
|
schema.type) : typeof value); };
|
|
7619
7631
|
var propertyTypeParseValue = {
|
|
7632
|
+
undefined: function () { return undefined; },
|
|
7620
7633
|
object: function (val) { return safeJSONParse(val); },
|
|
7621
7634
|
array: function (val, schema) {
|
|
7622
7635
|
var items = schema.items;
|
|
@@ -9054,7 +9067,7 @@
|
|
|
9054
9067
|
var parseLog = function (data) { return ({
|
|
9055
9068
|
modelId: data.model,
|
|
9056
9069
|
impactTermId: data['key/term'] || data.term || data.indicator,
|
|
9057
|
-
|
|
9070
|
+
blankNodeTermId: data.node,
|
|
9058
9071
|
coefficient: +data.coefficient,
|
|
9059
9072
|
value: +data.value * +data.coefficient
|
|
9060
9073
|
}); };
|
|
@@ -9076,10 +9089,10 @@
|
|
|
9076
9089
|
], __read(logs
|
|
9077
9090
|
.sort(function (a, b) { return a.impactTermId.localeCompare(b.impactTermId); })
|
|
9078
9091
|
.flatMap(function (_d) {
|
|
9079
|
-
var impactTermId = _d.impactTermId, impactTermUnits = _d.impactTermUnits, modelId = _d.modelId,
|
|
9092
|
+
var impactTermId = _d.impactTermId, impactTermUnits = _d.impactTermUnits, modelId = _d.modelId, blankNodeTermId = _d.blankNodeTermId, value = _d.value, inputs = _d.inputs;
|
|
9080
9093
|
return __spreadArray([
|
|
9081
|
-
[impactTermId, impactTermUnits, modelId,
|
|
9082
|
-
], __read((inputs.map(function (v) { return [impactTermId, impactTermUnits, modelId,
|
|
9094
|
+
[impactTermId, impactTermUnits, modelId, blankNodeTermId, value, '', '']
|
|
9095
|
+
], __read((inputs.map(function (v) { return [impactTermId, impactTermUnits, modelId, blankNodeTermId, '', v.name, v.value]; }))));
|
|
9083
9096
|
})
|
|
9084
9097
|
.map(function (v) {
|
|
9085
9098
|
var _a;
|
|
@@ -9098,19 +9111,25 @@
|
|
|
9098
9111
|
this.indicators = [];
|
|
9099
9112
|
this.loading = true;
|
|
9100
9113
|
this.terms = [];
|
|
9114
|
+
this.methods = [];
|
|
9101
9115
|
this.noData = false;
|
|
9102
9116
|
}
|
|
9103
9117
|
ImpactAssessmentsIndicatorBreakdownChartComponent.prototype.ngOnInit = function () {
|
|
9104
9118
|
return __awaiter(this, void 0, void 0, function () {
|
|
9105
|
-
var _d, results;
|
|
9119
|
+
var impacts, _d, results;
|
|
9106
9120
|
var _this = this;
|
|
9107
9121
|
return __generator(this, function (_e) {
|
|
9108
9122
|
switch (_e.label) {
|
|
9109
9123
|
case 0:
|
|
9110
|
-
this.terms = this.indicators.map(function (_d) {
|
|
9124
|
+
this.terms = utils.unique(this.indicators.map(function (_d) {
|
|
9111
9125
|
var term = _d.term;
|
|
9112
9126
|
return term;
|
|
9113
|
-
});
|
|
9127
|
+
}).filter(Boolean));
|
|
9128
|
+
this.methods = utils.unique(this.indicators.map(function (_d) {
|
|
9129
|
+
var methodModel = _d.methodModel;
|
|
9130
|
+
return methodModel;
|
|
9131
|
+
}).filter(Boolean));
|
|
9132
|
+
impacts = __spreadArray(__spreadArray([], __read(this.impactAssessment.impacts || [])), __read(this.impactAssessment.endpoints || []));
|
|
9114
9133
|
_d = this;
|
|
9115
9134
|
return [4 /*yield*/, rxjs.of(Object.assign(Object.assign({}, this.impactAssessment), { dataState: api.DataState.recalculated })).pipe(operators.mergeMap(function (node) { return _this.nodeService.getLog(node); }), operators.map(function (value) { return value ? parseLines(value) : []; }), operators.mergeAll(), operators.filter(function (_d) {
|
|
9116
9135
|
var data = _d.data;
|
|
@@ -9118,20 +9137,19 @@
|
|
|
9118
9137
|
}), operators.map(function (_d) {
|
|
9119
9138
|
var data = _d.data;
|
|
9120
9139
|
return parseMessage(data.message);
|
|
9121
|
-
}), operators.filter(function (message) { return 'node' in message; }), operators.map(parseLog), operators.filter(function (log) { return !!log.impactTermId && !!log.
|
|
9122
|
-
var _a
|
|
9140
|
+
}), operators.filter(function (message) { return 'node' in message; }), operators.map(parseLog), operators.filter(function (log) { return !!log.impactTermId && !!log.blankNodeTermId && !isNaN(log.value) && log.value > 0; }), operators.groupBy(function (log) { return [log.impactTermId, log.blankNodeTermId, log.modelId].join('/'); }), operators.mergeMap(function (group) { return group.pipe(operators.toArray()); }), operators.map(function (values) {
|
|
9141
|
+
var _a;
|
|
9123
9142
|
var log = values[0];
|
|
9124
9143
|
var total = values.reduce(function (prev, curr) { return prev + curr.value; }, 0);
|
|
9125
|
-
var
|
|
9126
|
-
.filter(function (v) { return v.term['@id'] === log.
|
|
9127
|
-
var inputs =
|
|
9144
|
+
var blankNodes = (__spreadArray(__spreadArray([], __read(_this.impactAssessment.emissionsResourceUse || [])), __read(_this.impactAssessment.impacts || [])))
|
|
9145
|
+
.filter(function (v) { return v.term['@id'] === log.blankNodeTermId; });
|
|
9146
|
+
var inputs = blankNodes
|
|
9128
9147
|
.filter(function (v) { var _a; return (_a = v.inputs) === null || _a === void 0 ? void 0 : _a.length; })
|
|
9129
9148
|
.map(function (v) { return ({ name: v.inputs.map(function (i) { return i['@id']; }).join(';'), value: v.value * log.coefficient }); });
|
|
9130
9149
|
var inputsValue = inputs.reduce(function (prev, curr) { return prev + curr.value; }, 0);
|
|
9131
|
-
var
|
|
9132
|
-
.filter(function (v) { return v.term['@id'] === log.impactTermId; });
|
|
9150
|
+
var impact = impacts.find(function (v) { return v.term['@id'] === log.impactTermId; });
|
|
9133
9151
|
// logs might exist but impact was not added => skip logs
|
|
9134
|
-
return
|
|
9152
|
+
return impact ? Object.assign(Object.assign({}, log), { impactTermUnits: (_a = impact.term) === null || _a === void 0 ? void 0 : _a.units, value: total, inputs: inputs, inputsValue: inputsValue }) : null;
|
|
9135
9153
|
}), operators.filter(function (log) { return !!log; }), operators.toArray()).toPromise()];
|
|
9136
9154
|
case 1:
|
|
9137
9155
|
_d.logs = (_e.sent());
|
|
@@ -9172,16 +9190,16 @@
|
|
|
9172
9190
|
var _a, _b, _c;
|
|
9173
9191
|
var logs = this.logs
|
|
9174
9192
|
.filter(function (_d) {
|
|
9175
|
-
var impactTermId = _d.impactTermId;
|
|
9176
|
-
return impactTermId === _this.selectedTerm['@id'];
|
|
9193
|
+
var impactTermId = _d.impactTermId, modelId = _d.modelId;
|
|
9194
|
+
return impactTermId === _this.selectedTerm['@id'] && (!_this.selectedMethod || modelId === _this.selectedMethod['@id']);
|
|
9177
9195
|
})
|
|
9178
9196
|
.sort(function (a, b) { return b.value - a.value; });
|
|
9179
9197
|
this.noData = logs.length === 0;
|
|
9180
9198
|
var total = logs.reduce(function (prev, curr) { return prev + curr.value; }, 0);
|
|
9181
9199
|
var labels = logs.map(function (_d) {
|
|
9182
|
-
var
|
|
9200
|
+
var blankNodeTermId = _d.blankNodeTermId;
|
|
9183
9201
|
var _a;
|
|
9184
|
-
return ((_a = _this.emissions.find(function (v) { return v['@id'] ===
|
|
9202
|
+
return ((_a = _this.emissions.find(function (v) { return v['@id'] === blankNodeTermId; })) === null || _a === void 0 ? void 0 : _a.name) || blankNodeTermId;
|
|
9185
9203
|
});
|
|
9186
9204
|
// display the breakdown by input
|
|
9187
9205
|
// const inputs = logs.flatMap(v => v.inputs.map(i => i.name));
|
|
@@ -9264,7 +9282,7 @@
|
|
|
9264
9282
|
return ImpactAssessmentsIndicatorBreakdownChartComponent;
|
|
9265
9283
|
}());
|
|
9266
9284
|
ImpactAssessmentsIndicatorBreakdownChartComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ImpactAssessmentsIndicatorBreakdownChartComponent, deps: [{ token: i0__namespace.NgZone }, { token: i1__namespace$2.DomSanitizer }, { token: HeSearchService }, { token: HeNodeService }], target: i0__namespace.ɵɵFactoryTarget.Component });
|
|
9267
|
-
ImpactAssessmentsIndicatorBreakdownChartComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: { impactAssessment: "impactAssessment", indicators: "indicators" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], ngImport: i0__namespace, template: "<div class=\"p-3\" [class.is-hidden]=\"loading || !terms?.length\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select an Indicator</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth is-small\">\n <select (change)=\"updateChart()\" [(ngModel)]=\"selectedTerm\" id=\"selectedTerm\">\n <option *ngFor=\"let term of terms\" [ngValue]=\"term\">{{term.name}} ({{term.units}})</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <a class=\"button is-dark is-outlined is-small\" [href]=\"csvContent\" [download]=\"id + '-logs.csv'\">\n <fa-icon icon=\"download\"></fa-icon>\n <span class=\"pl-2\">Download All (CSV)</span>\n </a>\n </div>\n </div>\n\n <div class=\"mt-1\">\n <p *ngIf=\"noData\" class=\"has-text-centered\">No breakdown available for {{selectedTerm?.name}}
|
|
9285
|
+
ImpactAssessmentsIndicatorBreakdownChartComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: { impactAssessment: "impactAssessment", indicators: "indicators" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], ngImport: i0__namespace, template: "<div class=\"p-3\" [class.is-hidden]=\"loading || !terms?.length\">\n <div class=\"columns\">\n <div class=\"column\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Select an Indicator</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-fullwidth is-small\">\n <select (change)=\"updateChart()\" [(ngModel)]=\"selectedTerm\" id=\"selectedTerm\">\n <option *ngFor=\"let term of terms\" [ngValue]=\"term\">{{term.name}} ({{term.units}})</option>\n </select>\n </div>\n </div>\n <div class=\"control is-expanded\" *ngIf=\"methods?.length\">\n <div class=\"select is-fullwidth is-small\">\n <select (change)=\"updateChart()\" [(ngModel)]=\"selectedMethod\" id=\"selectedMethod\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methods\" [ngValue]=\"term\">{{term.name}}</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-narrow\">\n <a class=\"button is-dark is-outlined is-small\" [href]=\"csvContent\" [download]=\"id + '-logs.csv'\">\n <fa-icon icon=\"download\"></fa-icon>\n <span class=\"pl-2\">Download All (CSV)</span>\n </a>\n </div>\n </div>\n\n <p class=\"is-size-7\" *ngIf=\"!selectedMethod\">\n <i>Selecting a Model is recommended to avoid duplicated entries.</i>\n </p>\n\n <div class=\"mt-1\">\n <p *ngIf=\"noData\" class=\"has-text-centered\">\n <span>No breakdown available for {{selectedTerm?.name}}</span>\n <span class=\"pl-1\" *ngIf=\"selectedMethod\">({{selectedMethod.name}})</span>\n <span>.</span>\n </p>\n <div class=\"chart-container h-100\">\n <canvas #chart></canvas>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"loading\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-container>\n", styles: [":host{display:block;overflow:visible}.chart-container{height:400px;position:relative}\n"], components: [{ type: i1__namespace.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i1__namespace$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1__namespace$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
9268
9286
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ImpactAssessmentsIndicatorBreakdownChartComponent, decorators: [{
|
|
9269
9287
|
type: i0.Component,
|
|
9270
9288
|
args: [{
|
|
@@ -9623,7 +9641,7 @@
|
|
|
9623
9641
|
};
|
|
9624
9642
|
Object.defineProperty(ImpactAssessmentsProductsComponent.prototype, "enableBreakdown", {
|
|
9625
9643
|
get: function () {
|
|
9626
|
-
return !this.isOriginal && this.impactAssessments.length === 1 && this.key
|
|
9644
|
+
return !this.isOriginal && this.impactAssessments.length === 1 && this.key !== 'emissionsResourceUse';
|
|
9627
9645
|
},
|
|
9628
9646
|
enumerable: false,
|
|
9629
9647
|
configurable: true
|
|
@@ -9885,6 +9903,7 @@
|
|
|
9885
9903
|
exports.filterError = filterError;
|
|
9886
9904
|
exports.filterParams = filterParams;
|
|
9887
9905
|
exports.findConfigModels = findConfigModels;
|
|
9906
|
+
exports.findModels = findModels;
|
|
9888
9907
|
exports.findProperty = findProperty;
|
|
9889
9908
|
exports.findPropertyById = findPropertyById;
|
|
9890
9909
|
exports.formatCustomErrorMessage = formatCustomErrorMessage;
|