@hestia-earth/ui-components 0.2.4 → 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 +99 -72
- 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-error.model.js +18 -9
- 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 +46 -46
- package/esm2015/node/node-value-details/node-value-details.component.js +2 -2
- package/fesm2015/hestia-earth-ui-components.js +103 -76
- 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;
|
|
@@ -5704,13 +5729,16 @@
|
|
|
5704
5729
|
var original = originalValues.filter(function (v) { return termId === v.term['@id']; });
|
|
5705
5730
|
var recalculated = recalculatedValues.filter(function (v) { return termId === v.term['@id']; });
|
|
5706
5731
|
var hasData = !!original.length || !!recalculated.length || Object.keys(termLogs).length > 0;
|
|
5707
|
-
var configModels = utils.unique(__spreadArray(__spreadArray([], __read(findConfigModels(_this.config, termId, _this.nodeKey, allModels).map(function (_c) {
|
|
5732
|
+
var configModels = utils.unique(__spreadArray(__spreadArray([], __read(Object.keys(termLogs).filter(function (key) { return isModelLog(termLogs[key]); }))), __read(findConfigModels(_this.config, termId, _this.nodeKey, allModels).map(function (_c) {
|
|
5708
5733
|
var model = _c.model;
|
|
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,
|
|
@@ -5779,16 +5807,18 @@
|
|
|
5779
5807
|
setTimeout(function () {
|
|
5780
5808
|
_this.blankNodes = _this.allBlankNodes.filter(function (_c) {
|
|
5781
5809
|
var hasData = _c.hasData, isRequired = _c.isRequired, name = _c.term.name;
|
|
5782
|
-
return
|
|
5783
|
-
(
|
|
5810
|
+
return _this.term
|
|
5811
|
+
? name.toLowerCase().includes(_this.term.toLowerCase())
|
|
5812
|
+
: !_this.onlyWithData || !_this.filteredType || (hasData && isRequired);
|
|
5784
5813
|
});
|
|
5785
5814
|
});
|
|
5786
5815
|
};
|
|
5787
5816
|
/** Logs **/
|
|
5788
5817
|
NodeLogsModelsComponent.prototype.getSubvalueLogs = function (node, _c) {
|
|
5789
|
-
var id = _c.id;
|
|
5818
|
+
var id = _c.id, key = _c.key;
|
|
5790
5819
|
// try to get a more precise logs, defaults to id otherwise
|
|
5791
|
-
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
|
+
);
|
|
5792
5822
|
};
|
|
5793
5823
|
NodeLogsModelsComponent.prototype.getLogs = function (node, methodId, subValue) {
|
|
5794
5824
|
var logs = (subValue === null || subValue === void 0 ? void 0 : subValue.key) ? this.getSubvalueLogs(node, subValue) : node.logs || {};
|
|
@@ -5797,9 +5827,6 @@
|
|
|
5797
5827
|
NodeLogsModelsComponent.prototype.isBackground = function (log) {
|
|
5798
5828
|
return (log === null || log === void 0 ? void 0 : log.methodTier) === schema.EmissionMethodTier.background;
|
|
5799
5829
|
};
|
|
5800
|
-
NodeLogsModelsComponent.prototype.isRunOrchestrator = function (log) {
|
|
5801
|
-
return !('shouldRunOrchestrator' in log) || log.shouldRunOrchestrator;
|
|
5802
|
-
};
|
|
5803
5830
|
NodeLogsModelsComponent.prototype.isUserProvided = function (node, methodId, subValue) {
|
|
5804
5831
|
var log = this.getLogs(node, methodId, subValue);
|
|
5805
5832
|
return [
|
|
@@ -5810,13 +5837,6 @@
|
|
|
5810
5837
|
this.hasLog(log, false) // skip if contains logs other than orchestrator
|
|
5811
5838
|
].every(function (v) { return !v; });
|
|
5812
5839
|
};
|
|
5813
|
-
NodeLogsModelsComponent.prototype.validSubValue = function (node, index, subValue) {
|
|
5814
|
-
var methodId = this.getMethodIdAt(node, index, subValue);
|
|
5815
|
-
var log = get$3(node.logs[methodId], subValue === null || subValue === void 0 ? void 0 : subValue.key, null);
|
|
5816
|
-
return !(subValue === null || subValue === void 0 ? void 0 : subValue.id) || (
|
|
5817
|
-
// subValue can be an array
|
|
5818
|
-
Array.isArray(log) ? log.includes(subValue === null || subValue === void 0 ? void 0 : subValue.id) : log === (subValue === null || subValue === void 0 ? void 0 : subValue.id));
|
|
5819
|
-
};
|
|
5820
5840
|
NodeLogsModelsComponent.prototype.getMethodIdAt = function (node, index, subValue) {
|
|
5821
5841
|
var configModels = (subValue || node).configModels;
|
|
5822
5842
|
return configModels[index];
|
|
@@ -5829,12 +5849,6 @@
|
|
|
5829
5849
|
(log === null || log === void 0 ? void 0 : log.model) ||
|
|
5830
5850
|
(methodId ? methodIdLabel(methodId) : '');
|
|
5831
5851
|
};
|
|
5832
|
-
NodeLogsModelsComponent.prototype.hasLog = function (log, withOrchestrator) {
|
|
5833
|
-
if (withOrchestrator === void 0) { withOrchestrator = true; }
|
|
5834
|
-
return !!log && ('shouldRun' in log ||
|
|
5835
|
-
'runRequired' in log ||
|
|
5836
|
-
(withOrchestrator && 'shouldRunOrchestrator' in log));
|
|
5837
|
-
};
|
|
5838
5852
|
NodeLogsModelsComponent.prototype.hasLogDetails = function (node, methodId, subValue) {
|
|
5839
5853
|
var _a;
|
|
5840
5854
|
var log = this.getLogs(node, methodId, subValue);
|
|
@@ -5847,17 +5861,16 @@
|
|
|
5847
5861
|
var log = this.getLogs(node, methodId, subValue);
|
|
5848
5862
|
return this.isUserProvided(node, methodId, subValue)
|
|
5849
5863
|
? LogStatus.dataProvided
|
|
5850
|
-
: (
|
|
5851
|
-
? (
|
|
5852
|
-
?
|
|
5853
|
-
|
|
5854
|
-
|
|
5855
|
-
? log.shouldRun
|
|
5856
|
-
|
|
5857
|
-
|
|
5858
|
-
|
|
5859
|
-
|
|
5860
|
-
: 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)
|
|
5861
5874
|
: LogStatus.skipHierarchy);
|
|
5862
5875
|
};
|
|
5863
5876
|
NodeLogsModelsComponent.prototype.requirementKeys = function (requirements) {
|
|
@@ -5869,7 +5882,7 @@
|
|
|
5869
5882
|
return NodeLogsModelsComponent;
|
|
5870
5883
|
}());
|
|
5871
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 });
|
|
5872
|
-
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 [editable]=\"false\"\n [ngbTypeahead]=\"suggestTerm\"\n (selectItem)=\"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 >\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 } });
|
|
5873
5886
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: NodeLogsModelsComponent, decorators: [{
|
|
5874
5887
|
type: i0.Component,
|
|
5875
5888
|
args: [{
|
|
@@ -5940,7 +5953,7 @@
|
|
|
5940
5953
|
'methodModelDescription', 'description',
|
|
5941
5954
|
'primary', 'emissionDuration', 'observations', 'statsDefinition',
|
|
5942
5955
|
'term', 'source', 'variety', 'reliability', 'price', 'currency', 'cost', 'revenue', 'economicValueShare',
|
|
5943
|
-
'impactAssessment'
|
|
5956
|
+
'impactAssessment', 'properties'
|
|
5944
5957
|
];
|
|
5945
5958
|
var tableKeys = [
|
|
5946
5959
|
'inputs', 'transformation', 'value', 'dates', 'methodModel', 'methodTier', 'statsDefinition'
|
|
@@ -7244,7 +7257,8 @@
|
|
|
7244
7257
|
},
|
|
7245
7258
|
_g['the measurement provided might be in error'] = function (_g, errorCount) {
|
|
7246
7259
|
var params = _g.params;
|
|
7247
|
-
|
|
7260
|
+
var _a;
|
|
7261
|
+
return "The expected value for " + code(params === null || params === void 0 ? void 0 : params.term.name) + "\n " + (((_a = params === null || params === void 0 ? void 0 : params.model) === null || _a === void 0 ? void 0 : _a.name) ? "using " + modelLink(params === null || params === void 0 ? void 0 : params.term, params === null || params === void 0 ? void 0 : params.model) + " " : '') + "\n from the data provided in the upload is " + (errorCount === 1 ?
|
|
7248
7262
|
code(utils.toPrecision(params === null || params === void 0 ? void 0 : params.expected, 3)) + ", but the value in the upload is " + code(utils.toPrecision(params === null || params === void 0 ? void 0 : params.current, 3)) + ".\n " + ((params === null || params === void 0 ? void 0 : params.threshold) ? "Our threshold is \u00B1" + threshold(params === null || params === void 0 ? void 0 : params.threshold) + "." : '') :
|
|
7249
7263
|
"not consistent with the model result.");
|
|
7250
7264
|
},
|
|
@@ -7255,15 +7269,15 @@
|
|
|
7255
7269
|
var params = _g.params;
|
|
7256
7270
|
var _a, _b;
|
|
7257
7271
|
return (errorCount === 1 ?
|
|
7258
|
-
|
|
7259
|
-
|
|
7272
|
+
"You have stated that " + code((_a = params === null || params === void 0 ? void 0 : params.term) === null || _a === void 0 ? void 0 : _a.name) + " was created by the following Inputs " + ((_b = params === null || params === void 0 ? void 0 : params.expected) === null || _b === void 0 ? void 0 : _b.map(function (e) { return code(e.name); }).join(' , ')) :
|
|
7273
|
+
'You have stated some Emissions were created by some Inputs') + ".\n However, these Inputs do not exist in the Cycle.\n Please add these Inputs, even if you do not have a value for them.";
|
|
7260
7274
|
},
|
|
7261
7275
|
_g['must add the linked transformations to the cycle'] = function (_g, errorCount) {
|
|
7262
7276
|
var level = _g.level, params = _g.params;
|
|
7263
7277
|
var _a, _b;
|
|
7264
7278
|
return (errorCount === 1 ?
|
|
7265
|
-
|
|
7266
|
-
|
|
7279
|
+
"You have specified that" + code((_a = params === null || params === void 0 ? void 0 : params.term) === null || _a === void 0 ? void 0 : _a.name) + " was created during a Transformation with the Term name " + code((_b = params === null || params === void 0 ? void 0 : params.expected) === null || _b === void 0 ? void 0 : _b.name) :
|
|
7280
|
+
'You have stated some Emissions were created by some Transformations') + ".\n However, we cannot find a Transformation within the Cycle with this Term name.\n " + (level === 'error' ?
|
|
7267
7281
|
'Please check the Terms used in the Emissions and/or the Transformations.' :
|
|
7268
7282
|
'You may want to add this Transformation.');
|
|
7269
7283
|
},
|
|
@@ -7322,6 +7336,12 @@
|
|
|
7322
7336
|
return "We recommend adding a Source to all data items.\n This can be done by adding the " + code(params === null || params === void 0 ? void 0 : params.current) + " field.\n Sources can also be specified for each data item (i.e., each Input, Emission, Product, Practice, Measurement, or Infrastructure).";
|
|
7323
7337
|
},
|
|
7324
7338
|
_g['cover crop cycle contains non cover crop product'] = function () { return "You have specified that this crop is a cover crop using a Practice.\n A cover crop is defined as \"a crop which is left in the field without any fraction harvested by the end of the Cycle\".\n The Products of this Cycle are incompatible with this crop being a cover crop.\n Please check the Products or the Practices."; },
|
|
7339
|
+
_g['should be included in the cycle products'] = function (_g, errorCount) {
|
|
7340
|
+
var params = _g.params;
|
|
7341
|
+
return (errorCount === 1 ?
|
|
7342
|
+
"The Product " + code(params.product.name) + " does not exist in the Cycle with id " + code(params.node.id) :
|
|
7343
|
+
'The ImpactAssessment Product does not exist in the linked Cycle') + ".\n Please add the Product in the Cycle or remove the link with the Cycle.";
|
|
7344
|
+
},
|
|
7325
7345
|
_g);
|
|
7326
7346
|
var formatCustomErrorMessage = function (message, error, errorCount) {
|
|
7327
7347
|
if (errorCount === void 0) { errorCount = 1; }
|
|
@@ -7609,6 +7629,7 @@
|
|
|
7609
7629
|
propertyValueType(Object.assign(Object.assign({}, schema), { type: [schema.items.type] })) :
|
|
7610
7630
|
schema.type) : typeof value); };
|
|
7611
7631
|
var propertyTypeParseValue = {
|
|
7632
|
+
undefined: function () { return undefined; },
|
|
7612
7633
|
object: function (val) { return safeJSONParse(val); },
|
|
7613
7634
|
array: function (val, schema) {
|
|
7614
7635
|
var items = schema.items;
|
|
@@ -9046,7 +9067,7 @@
|
|
|
9046
9067
|
var parseLog = function (data) { return ({
|
|
9047
9068
|
modelId: data.model,
|
|
9048
9069
|
impactTermId: data['key/term'] || data.term || data.indicator,
|
|
9049
|
-
|
|
9070
|
+
blankNodeTermId: data.node,
|
|
9050
9071
|
coefficient: +data.coefficient,
|
|
9051
9072
|
value: +data.value * +data.coefficient
|
|
9052
9073
|
}); };
|
|
@@ -9068,10 +9089,10 @@
|
|
|
9068
9089
|
], __read(logs
|
|
9069
9090
|
.sort(function (a, b) { return a.impactTermId.localeCompare(b.impactTermId); })
|
|
9070
9091
|
.flatMap(function (_d) {
|
|
9071
|
-
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;
|
|
9072
9093
|
return __spreadArray([
|
|
9073
|
-
[impactTermId, impactTermUnits, modelId,
|
|
9074
|
-
], __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]; }))));
|
|
9075
9096
|
})
|
|
9076
9097
|
.map(function (v) {
|
|
9077
9098
|
var _a;
|
|
@@ -9090,19 +9111,25 @@
|
|
|
9090
9111
|
this.indicators = [];
|
|
9091
9112
|
this.loading = true;
|
|
9092
9113
|
this.terms = [];
|
|
9114
|
+
this.methods = [];
|
|
9093
9115
|
this.noData = false;
|
|
9094
9116
|
}
|
|
9095
9117
|
ImpactAssessmentsIndicatorBreakdownChartComponent.prototype.ngOnInit = function () {
|
|
9096
9118
|
return __awaiter(this, void 0, void 0, function () {
|
|
9097
|
-
var _d, results;
|
|
9119
|
+
var impacts, _d, results;
|
|
9098
9120
|
var _this = this;
|
|
9099
9121
|
return __generator(this, function (_e) {
|
|
9100
9122
|
switch (_e.label) {
|
|
9101
9123
|
case 0:
|
|
9102
|
-
this.terms = this.indicators.map(function (_d) {
|
|
9124
|
+
this.terms = utils.unique(this.indicators.map(function (_d) {
|
|
9103
9125
|
var term = _d.term;
|
|
9104
9126
|
return term;
|
|
9105
|
-
});
|
|
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 || []));
|
|
9106
9133
|
_d = this;
|
|
9107
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) {
|
|
9108
9135
|
var data = _d.data;
|
|
@@ -9110,20 +9137,19 @@
|
|
|
9110
9137
|
}), operators.map(function (_d) {
|
|
9111
9138
|
var data = _d.data;
|
|
9112
9139
|
return parseMessage(data.message);
|
|
9113
|
-
}), operators.filter(function (message) { return 'node' in message; }), operators.map(parseLog), operators.filter(function (log) { return !!log.impactTermId && !!log.
|
|
9114
|
-
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;
|
|
9115
9142
|
var log = values[0];
|
|
9116
9143
|
var total = values.reduce(function (prev, curr) { return prev + curr.value; }, 0);
|
|
9117
|
-
var
|
|
9118
|
-
.filter(function (v) { return v.term['@id'] === log.
|
|
9119
|
-
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
|
|
9120
9147
|
.filter(function (v) { var _a; return (_a = v.inputs) === null || _a === void 0 ? void 0 : _a.length; })
|
|
9121
9148
|
.map(function (v) { return ({ name: v.inputs.map(function (i) { return i['@id']; }).join(';'), value: v.value * log.coefficient }); });
|
|
9122
9149
|
var inputsValue = inputs.reduce(function (prev, curr) { return prev + curr.value; }, 0);
|
|
9123
|
-
var
|
|
9124
|
-
.filter(function (v) { return v.term['@id'] === log.impactTermId; });
|
|
9150
|
+
var impact = impacts.find(function (v) { return v.term['@id'] === log.impactTermId; });
|
|
9125
9151
|
// logs might exist but impact was not added => skip logs
|
|
9126
|
-
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;
|
|
9127
9153
|
}), operators.filter(function (log) { return !!log; }), operators.toArray()).toPromise()];
|
|
9128
9154
|
case 1:
|
|
9129
9155
|
_d.logs = (_e.sent());
|
|
@@ -9164,16 +9190,16 @@
|
|
|
9164
9190
|
var _a, _b, _c;
|
|
9165
9191
|
var logs = this.logs
|
|
9166
9192
|
.filter(function (_d) {
|
|
9167
|
-
var impactTermId = _d.impactTermId;
|
|
9168
|
-
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']);
|
|
9169
9195
|
})
|
|
9170
9196
|
.sort(function (a, b) { return b.value - a.value; });
|
|
9171
9197
|
this.noData = logs.length === 0;
|
|
9172
9198
|
var total = logs.reduce(function (prev, curr) { return prev + curr.value; }, 0);
|
|
9173
9199
|
var labels = logs.map(function (_d) {
|
|
9174
|
-
var
|
|
9200
|
+
var blankNodeTermId = _d.blankNodeTermId;
|
|
9175
9201
|
var _a;
|
|
9176
|
-
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;
|
|
9177
9203
|
});
|
|
9178
9204
|
// display the breakdown by input
|
|
9179
9205
|
// const inputs = logs.flatMap(v => v.inputs.map(i => i.name));
|
|
@@ -9256,7 +9282,7 @@
|
|
|
9256
9282
|
return ImpactAssessmentsIndicatorBreakdownChartComponent;
|
|
9257
9283
|
}());
|
|
9258
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 });
|
|
9259
|
-
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"] }] });
|
|
9260
9286
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ImpactAssessmentsIndicatorBreakdownChartComponent, decorators: [{
|
|
9261
9287
|
type: i0.Component,
|
|
9262
9288
|
args: [{
|
|
@@ -9615,7 +9641,7 @@
|
|
|
9615
9641
|
};
|
|
9616
9642
|
Object.defineProperty(ImpactAssessmentsProductsComponent.prototype, "enableBreakdown", {
|
|
9617
9643
|
get: function () {
|
|
9618
|
-
return !this.isOriginal && this.impactAssessments.length === 1 && this.key
|
|
9644
|
+
return !this.isOriginal && this.impactAssessments.length === 1 && this.key !== 'emissionsResourceUse';
|
|
9619
9645
|
},
|
|
9620
9646
|
enumerable: false,
|
|
9621
9647
|
configurable: true
|
|
@@ -9877,6 +9903,7 @@
|
|
|
9877
9903
|
exports.filterError = filterError;
|
|
9878
9904
|
exports.filterParams = filterParams;
|
|
9879
9905
|
exports.findConfigModels = findConfigModels;
|
|
9906
|
+
exports.findModels = findModels;
|
|
9880
9907
|
exports.findProperty = findProperty;
|
|
9881
9908
|
exports.findPropertyById = findPropertyById;
|
|
9882
9909
|
exports.formatCustomErrorMessage = formatCustomErrorMessage;
|