@hestia-earth/ui-components 0.0.20 → 0.0.23

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 (40) hide show
  1. package/bundles/hestia-earth-ui-components.umd.js +232 -463
  2. package/bundles/hestia-earth-ui-components.umd.js.map +1 -1
  3. package/cycles/cycles-activity/cycles-activity.component.d.ts +4 -2
  4. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +3 -1
  5. package/cycles/cycles-emissions/cycles-emissions.component.d.ts +3 -11
  6. package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +2 -1
  7. package/cycles/cycles-practices/cycles-practices.component.d.ts +3 -11
  8. package/cycles/cycles-result/cycles-result.component.d.ts +3 -1
  9. package/cycles/cycles.module.d.ts +5 -6
  10. package/cycles/index.d.ts +0 -1
  11. package/engine/engine.service.d.ts +10 -1
  12. package/esm2015/cycles/cycles-activity/cycles-activity.component.js +17 -23
  13. package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +9 -3
  14. package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +17 -56
  15. package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +18 -8
  16. package/esm2015/cycles/cycles-practices/cycles-practices.component.js +16 -55
  17. package/esm2015/cycles/cycles-result/cycles-result.component.js +19 -6
  18. package/esm2015/cycles/cycles.module.js +4 -8
  19. package/esm2015/cycles/index.js +1 -2
  20. package/esm2015/engine/engine.service.js +16 -2
  21. package/esm2015/files/files-error.model.js +8 -5
  22. package/esm2015/files/files-form/files-form.component.js +1 -1
  23. package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +24 -54
  24. package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +30 -131
  25. package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +6 -2
  26. package/esm2015/node/node-csv-select-headers/node-csv-select-headers.component.js +11 -7
  27. package/esm2015/node/node-logs-models/node-logs-models.component.js +11 -3
  28. package/esm2015/sites/sites-maps/sites-maps.component.js +10 -3
  29. package/esm2015/sites/sites-measurements/sites-measurements.component.js +8 -2
  30. package/fesm2015/hestia-earth-ui-components.js +160 -357
  31. package/fesm2015/hestia-earth-ui-components.js.map +1 -1
  32. package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +5 -8
  33. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +5 -30
  34. package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +3 -2
  35. package/node/node-csv-select-headers/node-csv-select-headers.component.d.ts +9 -3
  36. package/package.json +4 -4
  37. package/sites/sites-maps/sites-maps.component.d.ts +3 -1
  38. package/sites/sites-measurements/sites-measurements.component.d.ts +3 -1
  39. package/cycles/cycles-suggest-form/cycles-suggest-form.component.d.ts +0 -23
  40. package/esm2015/cycles/cycles-suggest-form/cycles-suggest-form.component.js +0 -83
@@ -3,11 +3,10 @@ import { Indicator, Term, TermTermType } from '@hestia-earth/schema';
3
3
  import { IGroupedNodes } from '../../common/utils';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class ImpactAssessmentsIndicatorsChartComponent implements AfterViewInit, OnChanges {
6
- private barChartRef?;
7
- private barChart;
8
- private pieChartRef?;
9
- private pieChart;
6
+ private chartRef?;
7
+ private chart;
10
8
  private impactAssessments;
9
+ private selected;
11
10
  private key;
12
11
  filterTermTypes?: TermTermType[];
13
12
  indicatorPerImpactAssessment: IGroupedNodes<Indicator>;
@@ -17,9 +16,7 @@ export declare class ImpactAssessmentsIndicatorsChartComponent implements AfterV
17
16
  ngOnChanges(changes: SimpleChanges): void;
18
17
  private termAllowed;
19
18
  private init;
20
- private updateBarChart;
21
- private updatePieChart;
22
- updateCharts(): void;
19
+ updateChart(): void;
23
20
  static ɵfac: i0.ɵɵFactoryDeclaration<ImpactAssessmentsIndicatorsChartComponent, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<ImpactAssessmentsIndicatorsChartComponent, "he-impact-assessments-indicators-chart", never, { "impactAssessments": "impactAssessments"; "key": "key"; "filterTermTypes": "filterTermTypes"; }, {}, never, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImpactAssessmentsIndicatorsChartComponent, "he-impact-assessments-indicators-chart", never, { "impactAssessments": "impactAssessments"; "selected": "selected"; "key": "key"; "filterTermTypes": "filterTermTypes"; }, {}, never, never>;
25
22
  }
@@ -1,11 +1,7 @@
1
1
  import { OnChanges, SimpleChanges } from '@angular/core';
2
- import { FormBuilder } from '@angular/forms';
3
- import { Observable } from 'rxjs';
4
2
  import { DataState } from '@hestia-earth/api';
5
3
  import { IImpactAssessmentJSONLD, Indicator, TermTermType, Term } from '@hestia-earth/schema';
6
4
  import { HeNodeService } from '../../node/node.service';
7
- import { HeSearchService } from '../../search/search.service';
8
- import { HeToastService } from '../../common/toast.service';
9
5
  import { IGroupedKeys } from '../../common/utils';
10
6
  import * as i0 from "@angular/core";
11
7
  declare enum View {
@@ -15,20 +11,17 @@ declare enum View {
15
11
  logs = "logs"
16
12
  }
17
13
  export declare class ImpactAssessmentsProductsComponent implements OnChanges {
18
- private formBuilder;
19
14
  private nodeService;
20
- private searchService;
21
- private toastService;
22
15
  private dataStateValues;
23
16
  private cycles?;
24
17
  impactAssessments: IImpactAssessmentJSONLD[];
18
+ selected: string[];
25
19
  key: 'impacts' | 'emissionsResourceUse';
26
20
  dataState?: DataState;
27
- enableCompare: boolean;
28
21
  filterTermTypes?: TermTermType[];
29
22
  enableFilterMethodModel: boolean;
23
+ loading: boolean;
30
24
  propertyValue: (value: string | number | (string | number)[], termId?: string) => number;
31
- itemColor: (index: number) => any;
32
25
  baseUrl: string;
33
26
  showDownload: boolean;
34
27
  View: typeof View;
@@ -36,15 +29,7 @@ export declare class ImpactAssessmentsProductsComponent implements OnChanges {
36
29
  methodModels: Term[];
37
30
  selectedMethodModel?: Term;
38
31
  indicators: IGroupedKeys<Indicator>[];
39
- form: import("@angular/forms").FormGroup;
40
- selectedImpactAssessments: IImpactAssessmentJSONLD[];
41
- loading: boolean;
42
- suggesting: boolean;
43
- formatter: ({ "@id": id }: {
44
- "@id": any;
45
- }) => any;
46
- suggestImpactAssessment: (text$: Observable<string>) => Observable<any[]>;
47
- constructor(formBuilder: FormBuilder, nodeService: HeNodeService, searchService: HeSearchService, toastService: HeToastService);
32
+ constructor(nodeService: HeNodeService);
48
33
  ngOnChanges(changes: SimpleChanges): void | Promise<void>;
49
34
  trackById(_index: number, item: IImpactAssessmentJSONLD): string;
50
35
  get isOriginal(): boolean;
@@ -59,19 +44,9 @@ export declare class ImpactAssessmentsProductsComponent implements OnChanges {
59
44
  impactName(impact: IImpactAssessmentJSONLD): any;
60
45
  cycleLabel({ '@id': id, name }: any): any;
61
46
  get enableBreakdown(): boolean;
62
- showRecalculationLogs(): Promise<void>;
63
- private selectAllImpacts;
64
- private unselectAllImpacts;
65
- toggleAllImpacts(): void;
66
- private selectImpact;
67
- private unselectImpact;
68
- toggleImpact(impact: IImpactAssessmentJSONLD): void;
69
47
  isSelected(impact: IImpactAssessmentJSONLD): boolean;
70
- private suggest;
71
- private loadImpact;
72
- private fetchCycle;
73
- addImpact(): Promise<void>;
48
+ showRecalculationLogs(): Promise<void>;
74
49
  static ɵfac: i0.ɵɵFactoryDeclaration<ImpactAssessmentsProductsComponent, never>;
75
- static ɵcmp: i0.ɵɵComponentDeclaration<ImpactAssessmentsProductsComponent, "he-impact-assessments-products", never, { "cycles": "cycles"; "impactAssessments": "impactAssessments"; "key": "key"; "dataState": "dataState"; "enableCompare": "enableCompare"; "filterTermTypes": "filterTermTypes"; "enableFilterMethodModel": "enableFilterMethodModel"; }, {}, never, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImpactAssessmentsProductsComponent, "he-impact-assessments-products", never, { "cycles": "cycles"; "impactAssessments": "impactAssessments"; "selected": "selected"; "key": "key"; "dataState": "dataState"; "filterTermTypes": "filterTermTypes"; "enableFilterMethodModel": "enableFilterMethodModel"; }, {}, never, never>;
76
51
  }
77
52
  export {};
@@ -1,5 +1,5 @@
1
1
  import { OnInit } from '@angular/core';
2
- import { Emission, ITermJSONLD, NodeType, TermTermType } from '@hestia-earth/schema';
2
+ import { Emission, ITermJSONLD, NodeType } from '@hestia-earth/schema';
3
3
  import { HeSearchService } from '../../search/search.service';
4
4
  import { HeNodeService } from '../../node/node.service';
5
5
  import * as i0 from "@angular/core";
@@ -8,7 +8,7 @@ export declare class ImpactAssessmentsProductsLogsComponent implements OnInit {
8
8
  private nodeService;
9
9
  private impactAssessment?;
10
10
  key?: string;
11
- filterTermTypes?: TermTermType[];
11
+ private filterTermTypes?;
12
12
  originalValues: Emission[];
13
13
  recalculatedValues: Emission[];
14
14
  loading: boolean;
@@ -20,6 +20,7 @@ export declare class ImpactAssessmentsProductsLogsComponent implements OnInit {
20
20
  constructor(searchService: HeSearchService, nodeService: HeNodeService);
21
21
  ngOnInit(): Promise<void>;
22
22
  private get node();
23
+ get filteredType(): string;
23
24
  static ɵfac: i0.ɵɵFactoryDeclaration<ImpactAssessmentsProductsLogsComponent, never>;
24
25
  static ɵcmp: i0.ɵɵComponentDeclaration<ImpactAssessmentsProductsLogsComponent, "he-impact-assessments-products-logs", never, { "impactAssessment": "impactAssessment"; "key": "key"; "filterTermTypes": "filterTermTypes"; "originalValues": "originalValues"; "recalculatedValues": "recalculatedValues"; }, {}, never, never>;
25
26
  }
@@ -1,10 +1,14 @@
1
- import { EventEmitter, OnInit } from '@angular/core';
1
+ import { OnInit } from '@angular/core';
2
2
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
3
3
  import { HeSchemaService } from '../../schema/schema.service';
4
4
  import * as i0 from "@angular/core";
5
5
  interface IHeader {
6
6
  header: string;
7
7
  selected: boolean;
8
+ /**
9
+ * `false` if it is an `internal` field.
10
+ */
11
+ included: boolean;
8
12
  }
9
13
  interface IGroupedHeaders {
10
14
  [group: string]: {
@@ -19,12 +23,14 @@ export declare class NodeCsvSelectHeadersComponent implements OnInit {
19
23
  private csv;
20
24
  private keys?;
21
25
  private includeDefaultCSV;
22
- headersChanged: EventEmitter<string[]>;
26
+ private headersChanged;
27
+ loading: boolean;
23
28
  headers: IGroupedHeaders;
24
29
  allSelected: boolean;
25
30
  showSelectTermFields: boolean;
26
31
  termFields: string[];
27
32
  termFieldSelected: any;
33
+ showNonIncluded: boolean;
28
34
  constructor(schemaService: HeSchemaService);
29
35
  ngOnInit(): Promise<void>;
30
36
  private isSelected;
@@ -34,7 +40,7 @@ export declare class NodeCsvSelectHeadersComponent implements OnInit {
34
40
  updateGroup(groupKey: string): void;
35
41
  updateGroupHeader(groupKey: string): void;
36
42
  get selectedHeaders(): string[];
37
- reresh(): void;
43
+ refresh(): void;
38
44
  toggleTermField(field: string): void[];
39
45
  static ɵfac: i0.ɵɵFactoryDeclaration<NodeCsvSelectHeadersComponent, never>;
40
46
  static ɵcmp: i0.ɵɵComponentDeclaration<NodeCsvSelectHeadersComponent, "he-node-csv-select-headers", never, { "csv": "csv"; "keys": "keys"; "includeDefaultCSV": "includeDefaultCSV"; }, { "headersChanged": "headersChanged"; }, never, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hestia-earth/ui-components",
3
- "version": "0.0.20",
3
+ "version": "0.0.23",
4
4
  "description": "Hestia reusable components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,9 +24,9 @@
24
24
  "@google/markerclustererplus": "^5.1.3",
25
25
  "@hestia-earth/api": ">=0.9.0",
26
26
  "@hestia-earth/glossary": "^0.2.4",
27
- "@hestia-earth/json-schema": "^7.7.0",
28
- "@hestia-earth/schema": "^7.7.0",
29
- "@hestia-earth/schema-convert": "^7.7.0",
27
+ "@hestia-earth/json-schema": "^7.8.0",
28
+ "@hestia-earth/schema": "^7.8.0",
29
+ "@hestia-earth/schema-convert": "^7.8.0",
30
30
  "@hestia-earth/ui-framework": "^1.11.0",
31
31
  "@hestia-earth/utils": "^0.10.0",
32
32
  "@ng-bootstrap/ng-bootstrap": ">=8.0.4",
@@ -8,6 +8,7 @@ export declare class SitesMapsComponent<C extends JSONLD<T>, T extends NodeType>
8
8
  private map?;
9
9
  private loadPolygons;
10
10
  private sites;
11
+ private selected;
11
12
  private nodes;
12
13
  center: {
13
14
  lat: number;
@@ -20,6 +21,7 @@ export declare class SitesMapsComponent<C extends JSONLD<T>, T extends NodeType>
20
21
  constructor(nodeService: HeNodeService);
21
22
  ngOnInit(): void;
22
23
  ngAfterViewInit(): Promise<void>;
24
+ private isSelected;
23
25
  private loadData;
24
26
  private addMarkers;
25
27
  private addTermsPolygons;
@@ -31,5 +33,5 @@ export declare class SitesMapsComponent<C extends JSONLD<T>, T extends NodeType>
31
33
  private getSites;
32
34
  private termPolygons;
33
35
  static ɵfac: i0.ɵɵFactoryDeclaration<SitesMapsComponent<any, any>, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<SitesMapsComponent<any, any>, "he-sites-maps", never, { "loadPolygons": "loadPolygons"; "sites": "sites"; "nodes": "nodes"; "center": "center"; "zoom": "zoom"; "showNotice": "showNotice"; }, {}, never, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<SitesMapsComponent<any, any>, "he-sites-maps", never, { "loadPolygons": "loadPolygons"; "sites": "sites"; "selected": "selected"; "nodes": "nodes"; "center": "center"; "zoom": "zoom"; "showNotice": "showNotice"; }, {}, never, never>;
35
37
  }
@@ -10,6 +10,7 @@ declare enum View {
10
10
  export declare class SitesMeasurementsComponent implements OnChanges {
11
11
  originalValues: ISiteJSONLD[];
12
12
  sites: ISiteJSONLD[];
13
+ selected: string[];
13
14
  dataState?: DataState;
14
15
  showDownload: boolean;
15
16
  View: typeof View;
@@ -25,7 +26,8 @@ export declare class SitesMeasurementsComponent implements OnChanges {
25
26
  private update;
26
27
  togglePopover(popover: any, context: any): any;
27
28
  get showAreaTooBig(): boolean;
29
+ isSelected(site: ISiteJSONLD): boolean;
28
30
  static ɵfac: i0.ɵɵFactoryDeclaration<SitesMeasurementsComponent, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<SitesMeasurementsComponent, "he-sites-measurements", never, { "originalValues": "originalValues"; "sites": "sites"; "dataState": "dataState"; }, {}, never, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<SitesMeasurementsComponent, "he-sites-measurements", never, { "originalValues": "originalValues"; "sites": "sites"; "selected": "selected"; "dataState": "dataState"; }, {}, never, never>;
30
32
  }
31
33
  export {};
@@ -1,23 +0,0 @@
1
- import { FormBuilder } from '@angular/forms';
2
- import { Observable } from 'rxjs';
3
- import { HeNodeService } from '../../node/node.service';
4
- import { HeSearchService } from '../../search/search.service';
5
- import * as i0 from "@angular/core";
6
- export declare class CyclesSuggestFormComponent {
7
- private formBuilder;
8
- private nodeService;
9
- private searchService;
10
- private cycles;
11
- private cycleAdded;
12
- form: import("@angular/forms").FormGroup;
13
- loading: boolean;
14
- suggesting: boolean;
15
- formatter: ({ "@id": id }: any) => any;
16
- suggestCycle: (text$: Observable<string>) => Observable<any[]>;
17
- constructor(formBuilder: FormBuilder, nodeService: HeNodeService, searchService: HeSearchService);
18
- private suggest;
19
- private loadCycle;
20
- submit(): Promise<void>;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<CyclesSuggestFormComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<CyclesSuggestFormComponent, "he-cycles-suggest-form", never, { "cycles": "cycles"; }, { "cycleAdded": "cycleAdded"; }, never, never>;
23
- }
@@ -1,83 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { Validators } from '@angular/forms';
4
- import { NodeType } from '@hestia-earth/schema';
5
- import { of } from 'rxjs';
6
- import { debounceTime, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';
7
- import { matchType, matchExactQuery, matchPhraseQuery, matchPhrasePrefixQuery, matchBoolPrefixQuery, matchAggregatedQuery } from '../../search/search.model';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
10
- import * as i2 from "../../node/node.service";
11
- import * as i3 from "../../search/search.service";
12
- import * as i4 from "@fortawesome/angular-fontawesome";
13
- import * as i5 from "@ng-bootstrap/ng-bootstrap";
14
- import * as i6 from "@angular/common";
15
- const MIN_TYPEAHEAD_LENGTH = 1;
16
- export class CyclesSuggestFormComponent {
17
- constructor(formBuilder, nodeService, searchService) {
18
- this.formBuilder = formBuilder;
19
- this.nodeService = nodeService;
20
- this.searchService = searchService;
21
- this.cycles = [];
22
- this.cycleAdded = new EventEmitter();
23
- this.form = this.formBuilder.group({
24
- search: ['', Validators.required]
25
- });
26
- this.loading = false;
27
- this.suggesting = false;
28
- this.formatter = ({ '@id': id }) => id;
29
- this.suggestCycle = (text$) => text$.pipe(debounceTime(300), distinctUntilChanged(), tap(() => this.suggesting = true), switchMap(term => this.suggest(term)), tap(() => this.suggesting = false));
30
- }
31
- suggest(term) {
32
- return term.length < MIN_TYPEAHEAD_LENGTH ?
33
- of([]) :
34
- this.searchService.suggest(term, NodeType.Cycle, [], {
35
- bool: {
36
- must: [
37
- matchType(NodeType.Cycle),
38
- matchAggregatedQuery
39
- ],
40
- must_not: this.cycles.map(({ '@id': id }) => matchExactQuery('@id', id)),
41
- should: [
42
- matchPhraseQuery(term, 100, '@id', 'name'),
43
- matchPhrasePrefixQuery(term, 20, '@id', 'name'),
44
- matchBoolPrefixQuery(term, 10, '@id', 'name')
45
- ],
46
- minimum_should_match: 1
47
- }
48
- }, 10, ['name', 'site.country.name', 'products.name', 'endDate']);
49
- }
50
- loadCycle(id) {
51
- return this.nodeService.get({
52
- '@type': NodeType.Cycle,
53
- '@id': id
54
- }, false);
55
- }
56
- submit() {
57
- var _a;
58
- return __awaiter(this, void 0, void 0, function* () {
59
- this.loading = true;
60
- const { search: { '@id': id } } = this.form.value;
61
- const cycle = yield this.loadCycle(id);
62
- this.cycleAdded.emit(cycle);
63
- (_a = this.form.get('search')) === null || _a === void 0 ? void 0 : _a.setValue('');
64
- this.form.updateValueAndValidity();
65
- this.loading = false;
66
- });
67
- }
68
- }
69
- CyclesSuggestFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesSuggestFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.HeNodeService }, { token: i3.HeSearchService }], target: i0.ɵɵFactoryTarget.Component });
70
- CyclesSuggestFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CyclesSuggestFormComponent, selector: "he-cycles-suggest-form", inputs: { cycles: "cycles" }, outputs: { cycleAdded: "cycleAdded" }, ngImport: i0, template: "<form class=\"mt-2\" [formGroup]=\"form\" (submit)=\"form.valid && submit()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <span class=\"button is-small is-static\">Compare with Aggregated Cycle</span>\n </div>\n <div class=\"control is-expanded\" [class.has-icons-right]=\"suggesting || loading\">\n <input class=\"input is-small\"\n placeholder=\"Search by name or id\"\n formControlName=\"search\" name=\"search\"\n\n [ngbTypeahead]=\"suggestCycle\"\n [inputFormatter]=\"formatter\"\n [resultTemplate]=\"suggestion\"\n [focusFirst]=\"true\"\n >\n <span class=\"icon is-small is-right has-text-grey-dark\" [class.is-hidden]=\"!(suggesting || loading)\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"sm\"></fa-icon>\n </span>\n </div>\n <div class=\"control\">\n <button class=\"button is-small\" type=\"submit\" [disabled]=\"suggesting || loading\">\n <fa-icon icon=\"plus\"></fa-icon>\n </button>\n </div>\n </div>\n</form>\n\n<ng-template #suggestion let-cycle=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"cycle.site?.country?.name\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"cycle.site.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <!-- <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.product.name\" [term]=\"t\"></ngb-highlight></span>\n </div> -->\n <div class=\"column\" *ngIf=\"cycle.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"cycle.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: i4.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i5.NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.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: i5.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "placement", "container", "editable", "focusFirst", "showHint", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CyclesSuggestFormComponent, decorators: [{
72
- type: Component,
73
- args: [{
74
- selector: 'he-cycles-suggest-form',
75
- templateUrl: './cycles-suggest-form.component.html',
76
- styleUrls: ['./cycles-suggest-form.component.scss']
77
- }]
78
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.HeNodeService }, { type: i3.HeSearchService }]; }, propDecorators: { cycles: [{
79
- type: Input
80
- }], cycleAdded: [{
81
- type: Output
82
- }] } });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLXN1Z2dlc3QtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1zdWdnZXN0LWZvcm0vY3ljbGVzLXN1Z2dlc3QtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1zdWdnZXN0LWZvcm0vY3ljbGVzLXN1Z2dlc3QtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFnQixRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXBGLE9BQU8sRUFDTCxTQUFTLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUNqSCxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztBQUVuQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQU8vQixNQUFNLE9BQU8sMEJBQTBCO0lBcUJyQyxZQUNVLFdBQXdCLEVBQ3hCLFdBQTBCLEVBQzFCLGFBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQXRCaEMsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFFNUIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBRS9DLFNB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LEdBQUcsS0FBSyxDQUFDOztLQUN0Qjs7d0hBOURVLDBCQUEwQjs0R0FBMUIsMEJBQTBCLG1JQ25CdkMsd2hFQThDQTs0RkQzQmEsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSxzQ0FBc0M7b0JBQ25ELFNBQVMsRUFBRSxDQUFDLHNDQUFzQyxDQUFDO2lCQUNwRDs0SkFHUyxNQUFNO3NCQURiLEtBQUs7Z0JBR0UsVUFBVTtzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElDeWNsZUpTT05MRCwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBIZVNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgbWF0Y2hUeXBlLCBtYXRjaEV4YWN0UXVlcnksIG1hdGNoUGhyYXNlUXVlcnksIG1hdGNoUGhyYXNlUHJlZml4UXVlcnksIG1hdGNoQm9vbFByZWZpeFF1ZXJ5LCBtYXRjaEFnZ3JlZ2F0ZWRRdWVyeVxufSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLm1vZGVsJztcblxuY29uc3QgTUlOX1RZUEVBSEVBRF9MRU5HVEggPSAxO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtc3VnZ2VzdC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1zdWdnZXN0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtc3VnZ2VzdC1mb3JtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzU3VnZ2VzdEZvcm1Db21wb25lbnQge1xuICBASW5wdXQoKVxuICBwcml2YXRlIGN5Y2xlczogSUN5Y2xlSlNPTkxEW10gPSBbXTtcbiAgQE91dHB1dCgpXG4gIHByaXZhdGUgY3ljbGVBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUN5Y2xlSlNPTkxEPigpO1xuXG4gIHB1YmxpYyBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgc2VhcmNoOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gIH0pO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgc3VnZ2VzdGluZyA9IGZhbHNlO1xuICBwdWJsaWMgZm9ybWF0dGVyID0gKHsgJ0BpZCc6IGlkIH06IGFueSkgPT4gaWQ7XG4gIHB1YmxpYyBzdWdnZXN0Q3ljbGUgPSAodGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPikgPT5cbiAgICB0ZXh0JC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuc3VnZ2VzdGluZyA9IHRydWUpLFxuICAgICAgc3dpdGNoTWFwKHRlcm0gPT4gdGhpcy5zdWdnZXN0KHRlcm0pKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN1Z2dlc3RpbmcgPSBmYWxzZSlcbiAgICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBIZVNlYXJjaFNlcnZpY2VcbiAgKSB7IH1cblxuICBwcml2YXRlIHN1Z2dlc3QodGVybTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRlcm0ubGVuZ3RoIDwgTUlOX1RZUEVBSEVBRF9MRU5HVEggP1xuICAgICAgb2YoW10pIDpcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdWdnZXN0KHRlcm0sIE5vZGVUeXBlLkN5Y2xlLCBbXSwge1xuICAgICAgICBib29sOiB7XG4gICAgICAgICAgbXVzdDogW1xuICAgICAgICAgICAgbWF0Y2hUeXBlKE5vZGVUeXBlLkN5Y2xlKSxcbiAgICAgICAgICAgIG1hdGNoQWdncmVnYXRlZFF1ZXJ5XG4gICAgICAgICAgXSxcbiAgICAgICAgICBtdXN0X25vdDogdGhpcy5jeWNsZXMubWFwKCh7ICdAaWQnOiBpZCB9KSA9PiBtYXRjaEV4YWN0UXVlcnkoJ0BpZCcsIGlkKSksXG4gICAgICAgICAgc2hvdWxkOiBbXG4gICAgICAgICAgICBtYXRjaFBocmFzZVF1ZXJ5KHRlcm0sIDEwMCwgJ0BpZCcsICduYW1lJyksXG4gICAgICAgICAgICBtYXRjaFBocmFzZVByZWZpeFF1ZXJ5KHRlcm0sIDIwLCAnQGlkJywgJ25hbWUnKSxcbiAgICAgICAgICAgIG1hdGNoQm9vbFByZWZpeFF1ZXJ5KHRlcm0sIDEwLCAnQGlkJywgJ25hbWUnKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgICAgICAgfVxuICAgICAgfSwgMTAsIFsnbmFtZScsICdzaXRlLmNvdW50cnkubmFtZScsICdwcm9kdWN0cy5uYW1lJywgJ2VuZERhdGUnXSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDeWNsZShpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZVNlcnZpY2UuZ2V0PElDeWNsZUpTT05MRD4oe1xuICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAnQGlkJzogaWRcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3VibWl0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgeyBzZWFyY2g6IHsgJ0BpZCc6IGlkIH0gfSA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICBjb25zdCBjeWNsZSA9IGF3YWl0IHRoaXMubG9hZEN5Y2xlKGlkKTtcbiAgICB0aGlzLmN5Y2xlQWRkZWQuZW1pdChjeWNsZSk7XG4gICAgdGhpcy5mb3JtLmdldCgnc2VhcmNoJyk/LnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cIm10LTJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cImZvcm0udmFsaWQgJiYgc3VibWl0KClcIj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljXCI+Q29tcGFyZSB3aXRoIEFnZ3JlZ2F0ZWQgQ3ljbGU8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIiBbY2xhc3MuaGFzLWljb25zLXJpZ2h0XT1cInN1Z2dlc3RpbmcgfHwgbG9hZGluZ1wiPlxuICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQgaXMtc21hbGxcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBuYW1lIG9yIGlkXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCIgbmFtZT1cInNlYXJjaFwiXG5cbiAgICAgICAgW25nYlR5cGVhaGVhZF09XCJzdWdnZXN0Q3ljbGVcIlxuICAgICAgICBbaW5wdXRGb3JtYXR0ZXJdPVwiZm9ybWF0dGVyXCJcbiAgICAgICAgW3Jlc3VsdFRlbXBsYXRlXT1cInN1Z2dlc3Rpb25cIlxuICAgICAgICBbZm9jdXNGaXJzdF09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbCBpcy1yaWdodCBoYXMtdGV4dC1ncmV5LWRhcmtcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiEoc3VnZ2VzdGluZyB8fCBsb2FkaW5nKVwiPlxuICAgICAgICA8ZmEtaWNvbiBpY29uPVwic3Bpbm5lclwiIFtwdWxzZV09XCJ0cnVlXCIgc2l6ZT1cInNtXCI+PC9mYS1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJzdWdnZXN0aW5nIHx8IGxvYWRpbmdcIj5cbiAgICAgICAgPGZhLWljb24gaWNvbj1cInBsdXNcIj48L2ZhLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG5cbjxuZy10ZW1wbGF0ZSAjc3VnZ2VzdGlvbiBsZXQtY3ljbGU9XCJyZXN1bHRcIiBsZXQtdD1cInRlcm1cIj5cbiAgPGRpdiBjbGFzcz1cImlzLWJsb2NrXCI+XG4gICAgPG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJjeWNsZS5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLWZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJjeWNsZS5zaXRlPy5jb3VudHJ5Py5uYW1lXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTEgaGFzLXRleHQtdW5kZXJsaW5lXCI+Q291bnRyeTo8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1mbGV4XCI+PG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJjeWNsZS5zaXRlLmNvdW50cnkubmFtZVwiIFt0ZXJtXT1cInRcIj48L25nYi1oaWdobGlnaHQ+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwiaW1wYWN0LnByb2R1Y3RcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicHItMSBoYXMtdGV4dC11bmRlcmxpbmVcIj5Qcm9kdWN0Ojwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWZsZXhcIj48bmdiLWhpZ2hsaWdodCBbcmVzdWx0XT1cImltcGFjdC5wcm9kdWN0Lm5hbWVcIiBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0Pjwvc3Bhbj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwiY3ljbGUuZW5kRGF0ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGhhcy10ZXh0LXVuZGVybGluZVwiPkRhdGU6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtZmxleFwiPjxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiY3ljbGUuZW5kRGF0ZVwiIFt0ZXJtXT1cInRcIj48L25nYi1oaWdobGlnaHQ+PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=