@hestia-earth/ui-components 0.2.5 → 0.2.8

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.
Files changed (22) hide show
  1. package/bundles/hestia-earth-ui-components.umd.js +104 -77
  2. package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
  3. package/common/node-utils.d.ts +1 -1
  4. package/engine/engine.service.d.ts +1 -0
  5. package/esm2015/common/link-key-value/link-key-value.component.js +15 -6
  6. package/esm2015/common/node-utils.js +1 -1
  7. package/esm2015/engine/engine.service.js +2 -2
  8. package/esm2015/files/files-error.model.js +17 -8
  9. package/esm2015/files/files-form.model.js +2 -1
  10. package/esm2015/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.js +26 -18
  11. package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +2 -2
  12. package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +6 -5
  13. package/esm2015/node/node-logs-models/node-logs-models.component.js +45 -46
  14. package/esm2015/node/node-value-details/node-value-details.component.js +2 -2
  15. package/esm2015/terms/terms.model.js +2 -2
  16. package/fesm2015/hestia-earth-ui-components.js +107 -80
  17. package/fesm2015/hestia-earth-ui-components.js.map +1 -1
  18. package/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.d.ts +2 -0
  19. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +1 -1
  20. package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +1 -1
  21. package/node/node-logs-models/node-logs-models.component.d.ts +2 -4
  22. package/package.json +1 -1
@@ -874,7 +874,7 @@
874
874
  },
875
875
  _b$1.practice = {
876
876
  label: 'Practices',
877
- termType: 'Production Practices',
877
+ termType: 'Practices',
878
878
  children: termTypesToChildren([
879
879
  schema.TermTermType.animalManagement,
880
880
  schema.TermTermType.aquacultureManagement,
@@ -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,11 +5657,12 @@
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;
5639
5664
  this.rowsCount = 0;
5640
- this.onlyWithData = true;
5665
+ this.onlyRequired = true;
5641
5666
  this.showLegend = true;
5642
5667
  this.LogStatus = LogStatus;
5643
5668
  this.logIcon = logIcon;
@@ -5709,8 +5734,11 @@
5709
5734
  return model;
5710
5735
  }))));
5711
5736
  var keys = logKeys(termLogs, original, recalculated);
5712
- var subValues = logSubValues(termLogs, original, recalculated);
5713
- var isRequired = !Object.values(termLogs).every(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,
@@ -5778,18 +5806,19 @@
5778
5806
  var _this = this;
5779
5807
  setTimeout(function () {
5780
5808
  _this.blankNodes = _this.allBlankNodes.filter(function (_c) {
5781
- var hasData = _c.hasData, isRequired = _c.isRequired, name = _c.term.name;
5809
+ var isRequired = _c.isRequired, name = _c.term.name;
5782
5810
  return _this.term
5783
- ? _this.term === name
5784
- : !_this.onlyWithData || (hasData && isRequired);
5811
+ ? name.toLowerCase().includes(_this.term.toLowerCase())
5812
+ : !_this.onlyRequired || !_this.filteredType || isRequired;
5785
5813
  });
5786
5814
  });
5787
5815
  };
5788
5816
  /** Logs **/
5789
5817
  NodeLogsModelsComponent.prototype.getSubvalueLogs = function (node, _c) {
5790
- var id = _c.id;
5818
+ var id = _c.id, key = _c.key;
5791
5819
  // try to get a more precise logs, defaults to id otherwise
5792
- return get$3(this.logs, [id, node.termId].join('.'), get$3(this.logs, id, {}));
5820
+ return get$3(this.logs, [id, node.termId].join('.'), key === 'property' ? {} : get$3(this.logs, id, {}) // property needs to be mapped to the exact node to work
5821
+ );
5793
5822
  };
5794
5823
  NodeLogsModelsComponent.prototype.getLogs = function (node, methodId, subValue) {
5795
5824
  var logs = (subValue === null || subValue === void 0 ? void 0 : subValue.key) ? this.getSubvalueLogs(node, subValue) : node.logs || {};
@@ -5798,9 +5827,6 @@
5798
5827
  NodeLogsModelsComponent.prototype.isBackground = function (log) {
5799
5828
  return (log === null || log === void 0 ? void 0 : log.methodTier) === schema.EmissionMethodTier.background;
5800
5829
  };
5801
- NodeLogsModelsComponent.prototype.isRunOrchestrator = function (log) {
5802
- return !('shouldRunOrchestrator' in log) || log.shouldRunOrchestrator;
5803
- };
5804
5830
  NodeLogsModelsComponent.prototype.isUserProvided = function (node, methodId, subValue) {
5805
5831
  var log = this.getLogs(node, methodId, subValue);
5806
5832
  return [
@@ -5811,13 +5837,6 @@
5811
5837
  this.hasLog(log, false) // skip if contains logs other than orchestrator
5812
5838
  ].every(function (v) { return !v; });
5813
5839
  };
5814
- NodeLogsModelsComponent.prototype.validSubValue = function (node, index, subValue) {
5815
- var methodId = this.getMethodIdAt(node, index, subValue);
5816
- var log = get$3(node.logs[methodId], subValue === null || subValue === void 0 ? void 0 : subValue.key, null);
5817
- return !(subValue === null || subValue === void 0 ? void 0 : subValue.id) || (
5818
- // subValue can be an array
5819
- Array.isArray(log) ? log.includes(subValue === null || subValue === void 0 ? void 0 : subValue.id) : log === (subValue === null || subValue === void 0 ? void 0 : subValue.id));
5820
- };
5821
5840
  NodeLogsModelsComponent.prototype.getMethodIdAt = function (node, index, subValue) {
5822
5841
  var configModels = (subValue || node).configModels;
5823
5842
  return configModels[index];
@@ -5830,12 +5849,6 @@
5830
5849
  (log === null || log === void 0 ? void 0 : log.model) ||
5831
5850
  (methodId ? methodIdLabel(methodId) : '');
5832
5851
  };
5833
- NodeLogsModelsComponent.prototype.hasLog = function (log, withOrchestrator) {
5834
- if (withOrchestrator === void 0) { withOrchestrator = true; }
5835
- return !!log && ('shouldRun' in log ||
5836
- 'runRequired' in log ||
5837
- (withOrchestrator && 'shouldRunOrchestrator' in log));
5838
- };
5839
5852
  NodeLogsModelsComponent.prototype.hasLogDetails = function (node, methodId, subValue) {
5840
5853
  var _a;
5841
5854
  var log = this.getLogs(node, methodId, subValue);
@@ -5848,17 +5861,16 @@
5848
5861
  var log = this.getLogs(node, methodId, subValue);
5849
5862
  return this.isUserProvided(node, methodId, subValue)
5850
5863
  ? LogStatus.dataProvided
5851
- : (this.hasLog(log)
5852
- ? (this.isRunOrchestrator(log)
5853
- ? (!node.isRequired
5854
- ? LogStatus.notRequired
5855
- : 'shouldRun' in log
5856
- ? log.shouldRun
5857
- ? LogStatus.success
5858
- : LogStatus.error
5859
- : LogStatus.dataProvided) : (node.isRecalculated
5860
- ? LogStatus.skipHierarchy
5861
- : LogStatus.dataProvided))
5864
+ : (hasLog(log)
5865
+ ? (!node.isRequired
5866
+ ? LogStatus.notRequired
5867
+ : isRunOrchestrator(log)
5868
+ ? ('shouldRun' in log
5869
+ ? log.shouldRun ? LogStatus.success : LogStatus.error
5870
+ : LogStatus.dataProvided)
5871
+ : node.isRecalculated
5872
+ ? LogStatus.skipHierarchy
5873
+ : LogStatus.dataProvided)
5862
5874
  : LogStatus.skipHierarchy);
5863
5875
  };
5864
5876
  NodeLogsModelsComponent.prototype.requirementKeys = function (requirements) {
@@ -5870,7 +5882,7 @@
5870
5882
  return NodeLogsModelsComponent;
5871
5883
  }());
5872
5884
  NodeLogsModelsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: NodeLogsModelsComponent, deps: [{ token: HeSearchService }, { token: HeEngineService }], target: i0__namespace.ɵɵFactoryTarget.Component });
5873
- NodeLogsModelsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { nodeType: "nodeType", nodeKey: "nodeKey", includeAllModels: "includeAllModels", logsUrl: "logsUrl", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", logs: "logs", filteredType: "filteredType" }, ngImport: i0__namespace, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"rowsCount\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [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 [disabled]=\"!!term\"\n >\n <span class=\"ml-2\">Show only relevant {{filteredType | pluralize}}</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-blankNode=\"blankNode\" let-subValue=\"subValue\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"validSubValue(blankNode, i, subValue); else noValue\">\n <ng-container *ngIf=\"getMethodIdAt(blankNode, i, subValue); let methodId; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:methodId, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </ng-template>\n <div *ngIf=\"methodId | isArray; else modelSerie\">\n <p *ngFor=\"let value of methodId\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:value, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-blankNode=\"blankNode\" let-methodId=\"methodId\" let-subValue=\"subValue\" let-logs=\"logs\">\n <span\n [class.trigger-popover]=\"hasLogDetails(blankNode, methodId, subValue)\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"hasLogDetails(blankNode, methodId, subValue) ? togglePopover(p, { logs }) : null\"\n >\n <span class=\"is-capitalized\">{{methodName(blankNode, methodId, subValue)}}</span>\n <span class=\"pl-1\" *ngIf=\"hasLog(logs) && logs?.methodTier\">[{{logs.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[logStatus(blankNode, methodId, subValue)]}}\">\n <fa-icon [icon]=\"logIcon[logStatus(blankNode, methodId, subValue)]\"></fa-icon>\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notRecalculated>not recalculated</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs.requirements\">\n <p class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\">\n {{key}}: {{logs.requirements[key]}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.logs\">\n <p class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n {{key.key}}: {{key.value}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.missingLookups?.length\">\n <p class=\"mt-2\">Missing lookups:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}::ng-deep tr.has-sub-rows td{border-bottom-style:dotted}::ng-deep td he-node-link{width:190px}::ng-deep td .open-node+he-node-link{width:170px}\n"], components: [{ type: i1__namespace.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11__namespace.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i1__namespace$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i11__namespace.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }], pipes: { "times": TimesPipe, "default": DefaultPipe, "precision": PrecisionPipe, "keyToLabel": KeyToLabelPipe, "keys": KeysPipe, "pluralize": PluralizePipe, "isArray": IsArrayPipe } });
5885
+ NodeLogsModelsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: { nodeType: "nodeType", nodeKey: "nodeKey", includeAllModels: "includeAllModels", logsUrl: "logsUrl", originalValues: "originalValues", recalculatedValues: "recalculatedValues", terms: "terms", logs: "logs", filteredType: "filteredType" }, ngImport: i0__namespace, template: "<div class=\"px-3 pb-3\">\n <div class=\"has-text-right mb-2\" *ngIf=\"!isExternal\">\n <a class=\"is-size-7\" *ngIf=\"logsUrl\" [href]=\"logsUrl\" target=\"_blank\">\n <fa-icon icon=\"external-link-alt\"></fa-icon>\n <span class=\"pl-2\">Open Full Logs</span>\n </a>\n </div>\n\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"rowsCount\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr>\n <th class=\"width-auto\">\n <div class=\"field\">\n <div class=\"control is-expanded has-icons-right\">\n <input class=\"input search-input is-small\"\n [(ngModel)]=\"term\" name=\"term\"\n placeholder=\"Filter by name\"\n [ngbTypeahead]=\"suggestTerm\"\n [focusFirst]=\"false\"\n (change)=\"filterResults()\"\n >\n <a class=\"icon is-small is-right\"\n [class.is-hidden]=\"!term\"\n (click)=\"term = ''; filterResults();\"\n >\n <fa-icon icon=\"times\"></fa-icon>\n </a>\n </div>\n </div>\n </th>\n <th class=\"has-border-right\">Units</th>\n <th>Original</th>\n <th>Recalculated</th>\n <th>Difference</th>\n <th *ngFor=\"let c of methodModelsCount | times; let i = index\">({{i + 1}})</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n </td>\n </tr>\n <tr *ngIf=\"!loading && blankNodes.length === 0\">\n <td class=\"has-text-centered\" colspan=\"6\">\n <span>No data</span>\n </td>\n </tr>\n <ng-container *ngFor=\"let blankNode of blankNodes; trackBy: trackByBlankNode\">\n <tr [class.has-sub-rows]=\"blankNode.canOpen\">\n <td class=\"width-auto\" [attr.title]=\"blankNode.term.name\">\n <a class=\"is-inline-block is-align-top pr-2 open-node\"\n (click)=\"blankNode.isOpen = !blankNode.isOpen\"\n *ngIf=\"blankNode.canOpen\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!blankNode.isOpen\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"blankNode.isOpen\"></fa-icon>\n </a>\n <he-node-link class=\"is-inline-block\" [node]=\"blankNode.term\">\n <span class=\"is-nowrap has-text-ellipsis\">{{blankNode.term.name}}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\">\n <span>{{blankNode.term?.units}}</span>\n </td>\n <td>\n <span>{{blankNode.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"!blankNode.isOriginal || blankNode.isRecalculated; else notRecalculated\">\n {{blankNode.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td class=\"is-nowrap\">\n <he-blank-node-value-delta *ngIf=\"blankNode.original.length && blankNode.isRecalculated; else noValue\"\n [value]=\"blankNode.recalculatedValue\"\n [originalValue]=\"blankNode.originalValue\"\n ></he-blank-node-value-delta>\n </td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode}\"></ng-container>\n </tr>\n\n <ng-container *ngIf=\"blankNode.keys?.length\">\n <tr\n *ngFor=\"let subValue of blankNode.keys\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n [class.has-sub-rows]=\"blankNode.subValues?.length\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3 pr-1 field-node\">Field:</span>\n\n <a class=\"is-inline-block\" *ngIf=\"blankNode.type\"\n [href]=\"baseUrl + '/schema/' + blankNode.type + '#' + subValue.key\" target=\"_blank\" [title]=\"subValue.key\"\n >\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.key}}</span>\n </a>\n <span class=\"is-inline-block is-align-top\" *ngIf=\"!blankNode.type\">{{subValue.key}}</span>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <td class=\"blank-node-index-key\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:subValue.key, logs:getLogs(blankNode, subValue.key)}\"></ng-container>\n </td>\n <td *ngIf=\"methodModelsCount > 1\" [attr.colspan]=\"methodModelsCount - 1\"></td>\n </tr>\n </ng-container>\n\n <tr\n *ngFor=\"let subValue of blankNode.subValues\"\n [class.is-hidden]=\"!blankNode.isOpen\"\n >\n <td class=\"width-auto has-text-left\">\n <span class=\"is-inline-block is-align-top pl-3\">{{subValue.key | keyToLabel}}</span>\n\n <ng-container *ngIf=\"subValue.id\">\n <span class=\"is-inline-block\" class=\"is-inline-block is-align-top pr-1\">:</span>\n\n <ng-container [ngSwitch]=\"subValue.key\">\n <span class=\"is-inline-block\" *ngSwitchCase=\"'backgroundData'\">{{subValue.id | keyToLabel}}</span>\n <he-node-link *ngSwitchDefault class=\"is-block pl-4\" [node]=\"{'@type':'Term','@id':subValue.id}\" [attr.title]=\"subValue.id | keyToLabel\">\n <span class=\"is-nowrap has-text-ellipsis\">{{subValue.id | keyToLabel}}</span>\n </he-node-link>\n </ng-container>\n </ng-container>\n </td>\n <td class=\"has-border-right\"></td>\n <td>\n <span *ngIf=\"subValue.originalValue !== null; else noValue\">{{subValue.originalValue | precision:3 | default:'-'}}</span>\n </td>\n <td>\n <span *ngIf=\"subValue.isRecalculated; else notRecalculated\">\n {{subValue.recalculatedValue | precision:3 | default:'-'}}\n </span>\n </td>\n <td>-</td>\n <ng-container *ngTemplateOutlet=\"blankNodeModels; context: {blankNode: blankNode, subValue: subValue}\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <div class=\"is-size-7 is-italic\">\n <div class=\"columns is-variable is-1 my-0\">\n <div class=\"column is-narrow\">\n <p>\n <a class=\"is-inline-block pr-2\"\n (click)=\"showLegend = !showLegend\"\n >\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!showLegend\"></fa-icon>\n <fa-icon icon=\"angle-right\" [class.is-hidden]=\"showLegend\"></fa-icon>\n </a>\n <span class=\"is-inline-block\">Legend:</span>\n </p>\n <ul class=\"content pl-2\" [class.is-hidden]=\"!showLegend\">\n <li\n class=\"has-text-{{logColor[status.value]}}\"\n *ngFor=\"let status of LogStatus | keys\"\n >\n <fa-icon [icon]=\"logIcon[status.value]\"></fa-icon>\n <span class=\"pl-1\">{{status.value}}</span>\n </li>\n </ul>\n </div>\n <div class=\"column has-text-right\" *ngIf=\"filteredType\">\n <label class=\"is-inline-block checkbox\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"onlyRequired\"\n (change)=\"filterResults()\"\n [disabled]=\"!!term\"\n >\n <span class=\"ml-2\">Show only relevant {{filteredType | pluralize}}</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #blankNodeModels let-blankNode=\"blankNode\" let-subValue=\"subValue\">\n <td class=\"blank-node-index-{{i}}\" *ngFor=\"let c of methodModelsCount | times; let i = index\">\n <ng-container *ngIf=\"getMethodIdAt(blankNode, i, subValue); let methodId; else noValue\">\n <ng-template #modelSerie>\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:methodId, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </ng-template>\n <div *ngIf=\"methodId | isArray; else modelSerie\">\n <p *ngFor=\"let value of methodId\">\n <ng-container *ngTemplateOutlet=\"blankNodeModel; context: {blankNode:blankNode, methodId:value, subValue:subValue, logs:getLogs(blankNode, methodId, subValue)}\"></ng-container>\n </p>\n </div>\n </ng-container>\n </td>\n</ng-template>\n\n<ng-template #blankNodeModel let-blankNode=\"blankNode\" let-methodId=\"methodId\" let-subValue=\"subValue\" let-logs=\"logs\">\n <span\n [class.trigger-popover]=\"hasLogDetails(blankNode, methodId, subValue)\"\n [ngbPopover]=\"logDetails\" [autoClose]=\"'outside'\"\n triggers=\"manual\" #p=\"ngbPopover\" placement=\"left\" container=\"body\"\n (click)=\"hasLogDetails(blankNode, methodId, subValue) ? togglePopover(p, { logs }) : null\"\n >\n <span class=\"is-capitalized\">{{methodName(blankNode, methodId, subValue)}}</span>\n <span class=\"pl-1\" *ngIf=\"hasLog(logs) && logs?.methodTier\">[{{logs.methodTier}}]</span>\n <span class=\"pl-1 has-text-{{logColor[logStatus(blankNode, methodId, subValue)]}}\">\n <fa-icon [icon]=\"logIcon[logStatus(blankNode, methodId, subValue)]\"></fa-icon>\n </span>\n </span>\n</ng-template>\n\n<ng-template #noValue>-</ng-template>\n\n<ng-template #notRecalculated>not recalculated</ng-template>\n\n<ng-template #logDetails let-logs=\"logs\">\n <ng-container *ngIf=\"logs.requirements\">\n <p class=\"is-requirement\" *ngFor=\"let key of requirementKeys(logs.requirements)\">\n {{key}}: {{logs.requirements[key]}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.logs\">\n <p class=\"is-log\" *ngFor=\"let key of logs.logs | keys\">\n {{key.key}}: {{key.value}}\n </p>\n </ng-container>\n <ng-container *ngIf=\"logs.missingLookups?.length\">\n <p class=\"mt-2\">Missing lookups:</p>\n\n <div class=\"table-container data-table-container\">\n <table class=\"table is-fullwidth mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\">Filename</span>\n </th>\n <th>\n <span class=\"has-text-white\">Column Title</span>\n </th>\n <th>\n <span class=\"has-text-white\">Row (term.id)</span>\n </th>\n </tr>\n </thead>\n <tbody class=\"has-background-black has-text-white\">\n <tr *ngFor=\"let data of logs.missingLookups\">\n <td>{{data.filename}}</td>\n <td>{{data.column}}</td>\n <td>{{data.termId}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}::ng-deep tr.has-sub-rows td{border-bottom-style:dotted}::ng-deep td he-node-link{width:190px}::ng-deep td .open-node+he-node-link{width:170px}\n"], components: [{ type: i1__namespace.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small", "height", "width"] }, { type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink"] }, { type: BlankNodeValueDeltaComponent, selector: "he-blank-node-value-delta", inputs: ["value", "originalValue", "displayType"] }], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11__namespace.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2__namespace.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i1__namespace$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i11__namespace.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay", "ngbPopover", "popoverTitle"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }], pipes: { "times": TimesPipe, "default": DefaultPipe, "precision": PrecisionPipe, "keyToLabel": KeyToLabelPipe, "keys": KeysPipe, "pluralize": PluralizePipe, "isArray": IsArrayPipe } });
5874
5886
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: NodeLogsModelsComponent, decorators: [{
5875
5887
  type: i0.Component,
5876
5888
  args: [{
@@ -5941,7 +5953,7 @@
5941
5953
  'methodModelDescription', 'description',
5942
5954
  'primary', 'emissionDuration', 'observations', 'statsDefinition',
5943
5955
  'term', 'source', 'variety', 'reliability', 'price', 'currency', 'cost', 'revenue', 'economicValueShare',
5944
- 'impactAssessment'
5956
+ 'impactAssessment', 'properties'
5945
5957
  ];
5946
5958
  var tableKeys = [
5947
5959
  'inputs', 'transformation', 'value', 'dates', 'methodModel', 'methodTier', 'statsDefinition'
@@ -7245,7 +7257,8 @@
7245
7257
  },
7246
7258
  _g['the measurement provided might be in error'] = function (_g, errorCount) {
7247
7259
  var params = _g.params;
7248
- 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 ?
7249
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) + "." : '') :
7250
7263
  "not consistent with the model result.");
7251
7264
  },
@@ -7257,14 +7270,14 @@
7257
7270
  var _a, _b;
7258
7271
  return (errorCount === 1 ?
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(' , ')) :
7260
- '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.";
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.";
7261
7274
  },
7262
7275
  _g['must add the linked transformations to the cycle'] = function (_g, errorCount) {
7263
7276
  var level = _g.level, params = _g.params;
7264
7277
  var _a, _b;
7265
7278
  return (errorCount === 1 ?
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) + "." :
7267
- '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' ?
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' ?
7268
7281
  'Please check the Terms used in the Emissions and/or the Transformations.' :
7269
7282
  'You may want to add this Transformation.');
7270
7283
  },
@@ -7323,6 +7336,12 @@
7323
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).";
7324
7337
  },
7325
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
+ },
7326
7345
  _g);
7327
7346
  var formatCustomErrorMessage = function (message, error, errorCount) {
7328
7347
  if (errorCount === void 0) { errorCount = 1; }
@@ -7610,6 +7629,7 @@
7610
7629
  propertyValueType(Object.assign(Object.assign({}, schema), { type: [schema.items.type] })) :
7611
7630
  schema.type) : typeof value); };
7612
7631
  var propertyTypeParseValue = {
7632
+ undefined: function () { return undefined; },
7613
7633
  object: function (val) { return safeJSONParse(val); },
7614
7634
  array: function (val, schema) {
7615
7635
  var items = schema.items;
@@ -9047,7 +9067,7 @@
9047
9067
  var parseLog = function (data) { return ({
9048
9068
  modelId: data.model,
9049
9069
  impactTermId: data['key/term'] || data.term || data.indicator,
9050
- emissionsResourceUseTermId: data.node,
9070
+ blankNodeTermId: data.node,
9051
9071
  coefficient: +data.coefficient,
9052
9072
  value: +data.value * +data.coefficient
9053
9073
  }); };
@@ -9069,10 +9089,10 @@
9069
9089
  ], __read(logs
9070
9090
  .sort(function (a, b) { return a.impactTermId.localeCompare(b.impactTermId); })
9071
9091
  .flatMap(function (_d) {
9072
- 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;
9073
9093
  return __spreadArray([
9074
- [impactTermId, impactTermUnits, modelId, emissionsResourceUseTermId, value, '', '']
9075
- ], __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]; }))));
9076
9096
  })
9077
9097
  .map(function (v) {
9078
9098
  var _a;
@@ -9091,19 +9111,25 @@
9091
9111
  this.indicators = [];
9092
9112
  this.loading = true;
9093
9113
  this.terms = [];
9114
+ this.methods = [];
9094
9115
  this.noData = false;
9095
9116
  }
9096
9117
  ImpactAssessmentsIndicatorBreakdownChartComponent.prototype.ngOnInit = function () {
9097
9118
  return __awaiter(this, void 0, void 0, function () {
9098
- var _d, results;
9119
+ var impacts, _d, results;
9099
9120
  var _this = this;
9100
9121
  return __generator(this, function (_e) {
9101
9122
  switch (_e.label) {
9102
9123
  case 0:
9103
- this.terms = this.indicators.map(function (_d) {
9124
+ this.terms = utils.unique(this.indicators.map(function (_d) {
9104
9125
  var term = _d.term;
9105
9126
  return term;
9106
- });
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 || []));
9107
9133
  _d = this;
9108
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) {
9109
9135
  var data = _d.data;
@@ -9111,20 +9137,19 @@
9111
9137
  }), operators.map(function (_d) {
9112
9138
  var data = _d.data;
9113
9139
  return parseMessage(data.message);
9114
- }), 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) {
9115
- 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;
9116
9142
  var log = values[0];
9117
9143
  var total = values.reduce(function (prev, curr) { return prev + curr.value; }, 0);
9118
- var emissions = (_this.impactAssessment.emissionsResourceUse || [])
9119
- .filter(function (v) { return v.term['@id'] === log.emissionsResourceUseTermId; });
9120
- 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
9121
9147
  .filter(function (v) { var _a; return (_a = v.inputs) === null || _a === void 0 ? void 0 : _a.length; })
9122
9148
  .map(function (v) { return ({ name: v.inputs.map(function (i) { return i['@id']; }).join(';'), value: v.value * log.coefficient }); });
9123
9149
  var inputsValue = inputs.reduce(function (prev, curr) { return prev + curr.value; }, 0);
9124
- var impacts = (_this.impactAssessment.impacts || [])
9125
- .filter(function (v) { return v.term['@id'] === log.impactTermId; });
9150
+ var impact = impacts.find(function (v) { return v.term['@id'] === log.impactTermId; });
9126
9151
  // logs might exist but impact was not added => skip logs
9127
- 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;
9128
9153
  }), operators.filter(function (log) { return !!log; }), operators.toArray()).toPromise()];
9129
9154
  case 1:
9130
9155
  _d.logs = (_e.sent());
@@ -9165,16 +9190,16 @@
9165
9190
  var _a, _b, _c;
9166
9191
  var logs = this.logs
9167
9192
  .filter(function (_d) {
9168
- var impactTermId = _d.impactTermId;
9169
- 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']);
9170
9195
  })
9171
9196
  .sort(function (a, b) { return b.value - a.value; });
9172
9197
  this.noData = logs.length === 0;
9173
9198
  var total = logs.reduce(function (prev, curr) { return prev + curr.value; }, 0);
9174
9199
  var labels = logs.map(function (_d) {
9175
- var emissionsResourceUseTermId = _d.emissionsResourceUseTermId;
9200
+ var blankNodeTermId = _d.blankNodeTermId;
9176
9201
  var _a;
9177
- 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;
9178
9203
  });
9179
9204
  // display the breakdown by input
9180
9205
  // const inputs = logs.flatMap(v => v.inputs.map(i => i.name));
@@ -9257,7 +9282,7 @@
9257
9282
  return ImpactAssessmentsIndicatorBreakdownChartComponent;
9258
9283
  }());
9259
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 });
9260
- 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"] }] });
9261
9286
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ImpactAssessmentsIndicatorBreakdownChartComponent, decorators: [{
9262
9287
  type: i0.Component,
9263
9288
  args: [{
@@ -9406,11 +9431,11 @@
9406
9431
  this.loading = true;
9407
9432
  this.NodeType = schema.NodeType;
9408
9433
  this.models = [];
9409
- this.emissions = [];
9434
+ this.terms = [];
9410
9435
  }
9411
9436
  ImpactAssessmentsProductsLogsComponent.prototype.ngOnInit = function () {
9412
9437
  return __awaiter(this, void 0, void 0, function () {
9413
- var _a, emissions;
9438
+ var _a, terms, showAllEmissions;
9414
9439
  return __generator(this, function (_b) {
9415
9440
  switch (_b.label) {
9416
9441
  case 0:
@@ -9433,8 +9458,9 @@
9433
9458
  }
9434
9459
  })];
9435
9460
  case 2:
9436
- emissions = (_b.sent()).results;
9437
- this.emissions = emissions;
9461
+ terms = (_b.sent()).results;
9462
+ showAllEmissions = this.key !== 'emissionsResourceUse' || (this.filterTermTypes || []).length === 1;
9463
+ this.terms = showAllEmissions ? terms : [];
9438
9464
  this.loading = false;
9439
9465
  return [2 /*return*/];
9440
9466
  }
@@ -9465,7 +9491,7 @@
9465
9491
  return ImpactAssessmentsProductsLogsComponent;
9466
9492
  }());
9467
9493
  ImpactAssessmentsProductsLogsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ImpactAssessmentsProductsLogsComponent, deps: [{ token: HeSearchService }, { token: HeNodeService }], target: i0__namespace.ɵɵFactoryTarget.Component });
9468
- ImpactAssessmentsProductsLogsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsProductsLogsComponent, selector: "he-impact-assessments-products-logs", inputs: { impactAssessment: "impactAssessment", key: "key", filterTermTypes: "filterTermTypes", originalValues: "originalValues", recalculatedValues: "recalculatedValues" }, ngImport: i0__namespace, template: "<he-node-logs-models *ngIf=\"!loading; else loader\"\n [logsUrl]=\"logsUrl\"\n [nodeType]=\"NodeType.ImpactAssessment\"\n [nodeKey]=\"key\"\n [originalValues]=\"originalValues\"\n [recalculatedValues]=\"recalculatedValues\"\n [terms]=\"emissions\"\n [logs]=\"logs\"\n [filteredType]=\"filteredType\"\n [includeAllModels]=\"includeAllModels\"\n></he-node-logs-models>\n\n<ng-template #loader>\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["nodeType", "nodeKey", "includeAllModels", "logsUrl", "originalValues", "recalculatedValues", "terms", "logs", "filteredType"] }, { 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: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
9494
+ ImpactAssessmentsProductsLogsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ImpactAssessmentsProductsLogsComponent, selector: "he-impact-assessments-products-logs", inputs: { impactAssessment: "impactAssessment", key: "key", filterTermTypes: "filterTermTypes", originalValues: "originalValues", recalculatedValues: "recalculatedValues" }, ngImport: i0__namespace, template: "<he-node-logs-models *ngIf=\"!loading; else loader\"\n [logsUrl]=\"logsUrl\"\n [nodeType]=\"NodeType.ImpactAssessment\"\n [nodeKey]=\"key\"\n [originalValues]=\"originalValues\"\n [recalculatedValues]=\"recalculatedValues\"\n [terms]=\"terms\"\n [logs]=\"logs\"\n [filteredType]=\"filteredType\"\n [includeAllModels]=\"includeAllModels\"\n></he-node-logs-models>\n\n<ng-template #loader>\n <div class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["nodeType", "nodeKey", "includeAllModels", "logsUrl", "originalValues", "recalculatedValues", "terms", "logs", "filteredType"] }, { 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: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
9469
9495
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: ImpactAssessmentsProductsLogsComponent, decorators: [{
9470
9496
  type: i0.Component,
9471
9497
  args: [{
@@ -9616,7 +9642,7 @@
9616
9642
  };
9617
9643
  Object.defineProperty(ImpactAssessmentsProductsComponent.prototype, "enableBreakdown", {
9618
9644
  get: function () {
9619
- return !this.isOriginal && this.impactAssessments.length === 1 && this.key === 'impacts';
9645
+ return !this.isOriginal && this.impactAssessments.length === 1 && this.key !== 'emissionsResourceUse';
9620
9646
  },
9621
9647
  enumerable: false,
9622
9648
  configurable: true
@@ -9878,6 +9904,7 @@
9878
9904
  exports.filterError = filterError;
9879
9905
  exports.filterParams = filterParams;
9880
9906
  exports.findConfigModels = findConfigModels;
9907
+ exports.findModels = findModels;
9881
9908
  exports.findProperty = findProperty;
9882
9909
  exports.findPropertyById = findPropertyById;
9883
9910
  exports.formatCustomErrorMessage = formatCustomErrorMessage;