@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.
@@ -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
- object: function (value) { return Array.isArray(value) ? value.map(toString).join(', ') : (value instanceof Date ? value.toJSON() : (schema.isExpandable(value) ? value.name || value['@id'] : JSON.stringify(value, null, 2))); }
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 schema.isExpandable(this.value) && this.value['@id'] ?
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 <a class=\"pr-1\" [href]=\"valueLink\" *ngIf=\"valueLink; else showString\">{{valueString}}</a>\n <he-blank-node-state\n [node]=\"node\" [nodeType]=\"nodeType\" [dataKey]=\"dataKey\" [key]=\"key\"\n ></he-blank-node-state>\n </ng-container>\n</ng-container>\n\n<ng-template #showString>\n <ng-container *ngIf=\"isArray\">\n <div class=\"array-container\">\n <p *ngFor=\"let v of value\">{{toString(v) | precision:3}}</p>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isArray\">\n <span class=\"pr-1\">{{valueString | precision:3}}</span>\n </ng-container>\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 });
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 logSubValues = function (logs, original, recalculated) { return Object.keys(logs)
5531
- .flatMap(function (key) { return [
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: [key], originalValue: originalValue, recalculatedValue: recalculatedValue, isRecalculated: !utils.isUndefined(recalculatedValue) && recalculatedValue !== originalValue });
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
- }))), __read(Object.keys(termLogs).filter(function (key) { return isModelLog(termLogs[key]); }))));
5735
+ }))));
5711
5736
  var keys = logKeys(termLogs, original, recalculated);
5712
- var subValues = logSubValues(termLogs, original, recalculated);
5713
- var isRequired = !Object.values(termLogs).some(function (logs) { return logs.runRequired === false; });
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 (!_this.onlyWithData || (hasData && isRequired)) &&
5783
- (!_this.term || name === _this.term);
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
- : (this.hasLog(log)
5851
- ? (this.isRunOrchestrator(log)
5852
- ? (!node.isRequired
5853
- ? LogStatus.notRequired
5854
- : 'shouldRun' in log
5855
- ? log.shouldRun
5856
- ? LogStatus.success
5857
- : LogStatus.error
5858
- : LogStatus.dataProvided) : (node.isRecalculated
5859
- ? LogStatus.skipHierarchy
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
- return "The expected value for " + code(params === null || params === void 0 ? void 0 : params.term.name) + " from the data provided in the upload is " + (errorCount === 1 ?
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
- 'You have stated some Emissions were created by some Inputs.' :
7259
- "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(' , '))) + ".\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.";
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
- 'You have stated some Emissions were created by some Transformations.' :
7266
- "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) + ".") + ".\n However, we cannot find a Transformation within the Cycle with this Term name.\n " + (level === 'error' ?
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
- emissionsResourceUseTermId: data.node,
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, emissionsResourceUseTermId = _d.emissionsResourceUseTermId, value = _d.value, inputs = _d.inputs;
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, emissionsResourceUseTermId, value, '', '']
9074
- ], __read((inputs.map(function (v) { return [impactTermId, impactTermUnits, modelId, emissionsResourceUseTermId, '', v.name, v.value]; }))));
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.emissionsResourceUseTermId && !isNaN(log.value) && log.value > 0; }), operators.groupBy(function (log) { return [log.impactTermId, log.emissionsResourceUseTermId].join('/'); }), operators.mergeMap(function (group) { return group.pipe(operators.toArray()); }), operators.map(function (values) {
9114
- var _a, _b;
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 emissions = (_this.impactAssessment.emissionsResourceUse || [])
9118
- .filter(function (v) { return v.term['@id'] === log.emissionsResourceUseTermId; });
9119
- var inputs = emissions
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 impacts = (_this.impactAssessment.impacts || [])
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 impacts.length ? Object.assign(Object.assign({}, log), { impactTermUnits: (_b = (_a = impacts === null || impacts === void 0 ? void 0 : impacts[0]) === null || _a === void 0 ? void 0 : _a.term) === null || _b === void 0 ? void 0 : _b.units, value: total, inputs: inputs, inputsValue: inputsValue }) : null;
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 emissionsResourceUseTermId = _d.emissionsResourceUseTermId;
9200
+ var blankNodeTermId = _d.blankNodeTermId;
9175
9201
  var _a;
9176
- return ((_a = _this.emissions.find(function (v) { return v['@id'] === emissionsResourceUseTermId; })) === null || _a === void 0 ? void 0 : _a.name) || emissionsResourceUseTermId;
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}}.</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"] }] });
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 === 'impacts';
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;