@hestia-earth/ui-components 0.0.1

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 (207) hide show
  1. package/README.md +24 -0
  2. package/auth/auth.service.d.ts +10 -0
  3. package/auth/public-api.d.ts +1 -0
  4. package/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.d.ts +40 -0
  5. package/bibliographies/bibliographies.module.d.ts +10 -0
  6. package/bibliographies/public-api.d.ts +2 -0
  7. package/bundles/hestia-earth-ui-components.umd.js +7570 -0
  8. package/bundles/hestia-earth-ui-components.umd.js.map +1 -0
  9. package/common/bind-once.directive.d.ts +10 -0
  10. package/common/blank-node-diffs/blank-node-diffs.component.d.ts +18 -0
  11. package/common/blank-node-state/blank-node-state.component.d.ts +36 -0
  12. package/common/blank-node-state-notice/blank-node-state-notice.component.d.ts +9 -0
  13. package/common/blank-node-value-delta/blank-node-value-delta.component.d.ts +13 -0
  14. package/common/click-outside.directive.d.ts +10 -0
  15. package/common/clipboard/clipboard.component.d.ts +16 -0
  16. package/common/common.module.d.ts +37 -0
  17. package/common/common.service.d.ts +11 -0
  18. package/common/default.pipe.d.ts +7 -0
  19. package/common/ellipsis.pipe.d.ts +7 -0
  20. package/common/get.pipe.d.ts +7 -0
  21. package/common/key-to-label.pipe.d.ts +7 -0
  22. package/common/keys.pipe.d.ts +7 -0
  23. package/common/link-key-value/link-key-value.component.d.ts +16 -0
  24. package/common/logs-utils.d.ts +17 -0
  25. package/common/maps-drawing-confirm/maps-drawing-confirm.component.d.ts +28 -0
  26. package/common/maps-utils.d.ts +70 -0
  27. package/common/pluralize.pipe.d.ts +7 -0
  28. package/common/popover/popover.component.d.ts +16 -0
  29. package/common/popover-confirm/popover-confirm.component.d.ts +15 -0
  30. package/common/precision.pipe.d.ts +7 -0
  31. package/common/public-api.d.ts +30 -0
  32. package/common/schema-version-link/schema-version-link.component.d.ts +10 -0
  33. package/common/skeleton-text/skeleton-text.component.d.ts +11 -0
  34. package/common/social-tags/social-tags.component.d.ts +12 -0
  35. package/common/tags-input.directive.d.ts +20 -0
  36. package/common/times.pipe.d.ts +7 -0
  37. package/common/toast/toast.component.d.ts +19 -0
  38. package/common/toast.service.d.ts +16 -0
  39. package/common/unit-converter/unit-converter.component.d.ts +25 -0
  40. package/common/utils.d.ts +88 -0
  41. package/cycles/cycles-activity/cycles-activity.component.d.ts +31 -0
  42. package/cycles/cycles-activity-logs/cycles-activity-logs.component.d.ts +25 -0
  43. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +14 -0
  44. package/cycles/cycles-emissions/cycles-emissions.component.d.ts +40 -0
  45. package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +18 -0
  46. package/cycles/cycles-emissions-logs/cycles-emissions-logs.component.d.ts +23 -0
  47. package/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.d.ts +8 -0
  48. package/cycles/cycles-result/cycles-result.component.d.ts +13 -0
  49. package/cycles/cycles-suggest-form/cycles-suggest-form.component.d.ts +24 -0
  50. package/cycles/cycles.model.d.ts +7 -0
  51. package/cycles/cycles.module.d.ts +19 -0
  52. package/cycles/public-api.d.ts +10 -0
  53. package/engine/aggregation-engine.service.d.ts +71 -0
  54. package/engine/engine.service.d.ts +61 -0
  55. package/engine/public-api.d.ts +2 -0
  56. package/esm2015/auth/auth.service.js +19 -0
  57. package/esm2015/auth/public-api.js +2 -0
  58. package/esm2015/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.js +100 -0
  59. package/esm2015/bibliographies/bibliographies.module.js +30 -0
  60. package/esm2015/bibliographies/public-api.js +3 -0
  61. package/esm2015/common/bind-once.directive.js +23 -0
  62. package/esm2015/common/blank-node-diffs/blank-node-diffs.component.js +47 -0
  63. package/esm2015/common/blank-node-state/blank-node-state.component.js +90 -0
  64. package/esm2015/common/blank-node-state-notice/blank-node-state-notice.component.js +27 -0
  65. package/esm2015/common/blank-node-value-delta/blank-node-value-delta.component.js +41 -0
  66. package/esm2015/common/click-outside.directive.js +28 -0
  67. package/esm2015/common/clipboard/clipboard.component.js +69 -0
  68. package/esm2015/common/common.module.js +144 -0
  69. package/esm2015/common/common.service.js +29 -0
  70. package/esm2015/common/default.pipe.js +23 -0
  71. package/esm2015/common/ellipsis.pipe.js +17 -0
  72. package/esm2015/common/get.pipe.js +17 -0
  73. package/esm2015/common/key-to-label.pipe.js +18 -0
  74. package/esm2015/common/keys.pipe.js +20 -0
  75. package/esm2015/common/link-key-value/link-key-value.component.js +55 -0
  76. package/esm2015/common/logs-utils.js +49 -0
  77. package/esm2015/common/maps-drawing-confirm/maps-drawing-confirm.component.js +89 -0
  78. package/esm2015/common/maps-utils.js +101 -0
  79. package/esm2015/common/pluralize.pipe.js +17 -0
  80. package/esm2015/common/popover/popover.component.js +37 -0
  81. package/esm2015/common/popover-confirm/popover-confirm.component.js +38 -0
  82. package/esm2015/common/precision.pipe.js +20 -0
  83. package/esm2015/common/public-api.js +31 -0
  84. package/esm2015/common/schema-version-link/schema-version-link.component.js +39 -0
  85. package/esm2015/common/skeleton-text/skeleton-text.component.js +44 -0
  86. package/esm2015/common/social-tags/social-tags.component.js +37 -0
  87. package/esm2015/common/tags-input.directive.js +74 -0
  88. package/esm2015/common/times.pipe.js +16 -0
  89. package/esm2015/common/toast/toast.component.js +37 -0
  90. package/esm2015/common/toast.service.js +36 -0
  91. package/esm2015/common/unit-converter/unit-converter.component.js +73 -0
  92. package/esm2015/common/utils.js +245 -0
  93. package/esm2015/cycles/cycles-activity/cycles-activity.component.js +92 -0
  94. package/esm2015/cycles/cycles-activity-logs/cycles-activity-logs.component.js +48 -0
  95. package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +41 -0
  96. package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +121 -0
  97. package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +93 -0
  98. package/esm2015/cycles/cycles-emissions-logs/cycles-emissions-logs.component.js +63 -0
  99. package/esm2015/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.js +22 -0
  100. package/esm2015/cycles/cycles-result/cycles-result.component.js +92 -0
  101. package/esm2015/cycles/cycles-suggest-form/cycles-suggest-form.component.js +83 -0
  102. package/esm2015/cycles/cycles.model.js +2 -0
  103. package/esm2015/cycles/cycles.module.js +66 -0
  104. package/esm2015/cycles/public-api.js +11 -0
  105. package/esm2015/engine/aggregation-engine.service.js +126 -0
  106. package/esm2015/engine/engine.service.js +78 -0
  107. package/esm2015/engine/public-api.js +3 -0
  108. package/esm2015/files/files-error.model.js +180 -0
  109. package/esm2015/files/files-form/files-form.component.js +439 -0
  110. package/esm2015/files/files-form.model.js +548 -0
  111. package/esm2015/files/files.module.js +42 -0
  112. package/esm2015/files/public-api.js +3 -0
  113. package/esm2015/fontawesome/fontawesome.module.js +36 -0
  114. package/esm2015/fontawesome/public-api.js +2 -0
  115. package/esm2015/hestia-earth-ui-components.js +5 -0
  116. package/esm2015/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.js +161 -0
  117. package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +142 -0
  118. package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +252 -0
  119. package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +68 -0
  120. package/esm2015/impact-assessments/impact-assessments.model.js +2 -0
  121. package/esm2015/impact-assessments/impact-assessments.module.js +47 -0
  122. package/esm2015/impact-assessments/public-api.js +7 -0
  123. package/esm2015/mendeley/mendeley.service.js +35 -0
  124. package/esm2015/mendeley/public-api.js +2 -0
  125. package/esm2015/node/node-csv-export-confirm/node-csv-export-confirm.component.js +65 -0
  126. package/esm2015/node/node-csv-select-headers/node-csv-select-headers.component.js +119 -0
  127. package/esm2015/node/node-csv.service.js +24 -0
  128. package/esm2015/node/node-diffs/node-diffs.component.js +67 -0
  129. package/esm2015/node/node-diffs/node-diffs.model.js +6 -0
  130. package/esm2015/node/node-icon/node-icon.component.js +37 -0
  131. package/esm2015/node/node-link/node-link.component.js +33 -0
  132. package/esm2015/node/node-logs-file/node-logs-file.component.js +63 -0
  133. package/esm2015/node/node-logs-models/node-logs-models.component.js +188 -0
  134. package/esm2015/node/node-missing-lookup-factors/node-missing-lookup-factors.component.js +34 -0
  135. package/esm2015/node/node-value-details/node-value-details.component.js +46 -0
  136. package/esm2015/node/node.module.js +67 -0
  137. package/esm2015/node/node.service.js +113 -0
  138. package/esm2015/node/public-api.js +13 -0
  139. package/esm2015/public-api.js +16 -0
  140. package/esm2015/schema/public-api.js +2 -0
  141. package/esm2015/schema/schema.service.js +167 -0
  142. package/esm2015/search/public-api.js +4 -0
  143. package/esm2015/search/search.model.js +204 -0
  144. package/esm2015/search/search.module.js +13 -0
  145. package/esm2015/search/search.service.js +99 -0
  146. package/esm2015/sites/public-api.js +6 -0
  147. package/esm2015/sites/sites-maps/sites-maps.component.js +162 -0
  148. package/esm2015/sites/sites-measurements/sites-measurements.component.js +78 -0
  149. package/esm2015/sites/sites-measurements-logs/sites-measurements-logs.component.js +63 -0
  150. package/esm2015/sites/sites.model.js +10 -0
  151. package/esm2015/sites/sites.module.js +42 -0
  152. package/esm2015/terms/public-api.js +2 -0
  153. package/esm2015/terms/terms.model.js +184 -0
  154. package/esm2015/users/public-api.js +2 -0
  155. package/esm2015/users/users.service.js +17 -0
  156. package/fesm2015/hestia-earth-ui-components.js +5920 -0
  157. package/fesm2015/hestia-earth-ui-components.js.map +1 -0
  158. package/files/files-error.model.d.ts +40 -0
  159. package/files/files-form/files-form.component.d.ts +94 -0
  160. package/files/files-form.model.d.ts +113 -0
  161. package/files/files.module.d.ts +13 -0
  162. package/files/public-api.d.ts +2 -0
  163. package/fontawesome/fontawesome.module.d.ts +10 -0
  164. package/fontawesome/public-api.d.ts +1 -0
  165. package/hestia-earth-ui-components.d.ts +5 -0
  166. package/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.d.ts +28 -0
  167. package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +25 -0
  168. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +77 -0
  169. package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +25 -0
  170. package/impact-assessments/impact-assessments.model.d.ts +6 -0
  171. package/impact-assessments/impact-assessments.module.d.ts +15 -0
  172. package/impact-assessments/public-api.d.ts +6 -0
  173. package/mendeley/mendeley.service.d.ts +25 -0
  174. package/mendeley/public-api.d.ts +1 -0
  175. package/node/node-csv-export-confirm/node-csv-export-confirm.component.d.ts +32 -0
  176. package/node/node-csv-select-headers/node-csv-select-headers.component.d.ts +42 -0
  177. package/node/node-csv.service.d.ts +9 -0
  178. package/node/node-diffs/node-diffs.component.d.ts +23 -0
  179. package/node/node-diffs/node-diffs.model.d.ts +4 -0
  180. package/node/node-icon/node-icon.component.d.ts +8 -0
  181. package/node/node-link/node-link.component.d.ts +11 -0
  182. package/node/node-logs-file/node-logs-file.component.d.ts +31 -0
  183. package/node/node-logs-models/node-logs-models.component.d.ts +72 -0
  184. package/node/node-missing-lookup-factors/node-missing-lookup-factors.component.d.ts +14 -0
  185. package/node/node-value-details/node-value-details.component.d.ts +17 -0
  186. package/node/node.module.d.ts +20 -0
  187. package/node/node.service.d.ts +70 -0
  188. package/node/public-api.d.ts +12 -0
  189. package/package.json +53 -0
  190. package/public-api.d.ts +15 -0
  191. package/schema/public-api.d.ts +1 -0
  192. package/schema/schema.service.d.ts +51 -0
  193. package/search/public-api.d.ts +3 -0
  194. package/search/search.model.d.ts +243 -0
  195. package/search/search.module.d.ts +7 -0
  196. package/search/search.service.d.ts +129 -0
  197. package/sites/public-api.d.ts +5 -0
  198. package/sites/sites-maps/sites-maps.component.d.ts +35 -0
  199. package/sites/sites-measurements/sites-measurements.component.d.ts +31 -0
  200. package/sites/sites-measurements-logs/sites-measurements-logs.component.d.ts +23 -0
  201. package/sites/sites.model.d.ts +10 -0
  202. package/sites/sites.module.d.ts +13 -0
  203. package/styles.scss +197 -0
  204. package/terms/public-api.d.ts +1 -0
  205. package/terms/terms.model.d.ts +21 -0
  206. package/users/public-api.d.ts +1 -0
  207. package/users/users.service.d.ts +7 -0
@@ -0,0 +1,65 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { fileToExt, SupportedExtensions } from '@hestia-earth/api';
3
+ import { toCsv } from '@hestia-earth/schema-convert';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/platform-browser";
6
+ import * as i2 from "../node-csv-select-headers/node-csv-select-headers.component";
7
+ import * as i3 from "@fortawesome/angular-fontawesome";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "@angular/router";
10
+ import * as i6 from "../../common/bind-once.directive";
11
+ export class NodeCsvExportConfirmComponent {
12
+ constructor(domSanitizer) {
13
+ this.domSanitizer = domSanitizer;
14
+ this.headers = [];
15
+ this.nodes = [];
16
+ this.filename = 'download';
17
+ this.extension = SupportedExtensions.csv;
18
+ this.isUpload = true;
19
+ this.closed = new EventEmitter();
20
+ this.showIncludeNodes = false;
21
+ this.includedNodes = [];
22
+ }
23
+ ngOnInit() {
24
+ this.includedNodes = this.nodes.map(node => ({ node, included: true }));
25
+ this.csvData = toCsv(this.nodes || [], !this.isUpload);
26
+ }
27
+ get included() {
28
+ return this.includedNodes.filter(({ included }) => included);
29
+ }
30
+ headersUpdated(headers) {
31
+ this.headers = headers;
32
+ return this.updateCsvContent();
33
+ }
34
+ updateCsvContent() {
35
+ const nodes = this.included.map(({ node }) => node);
36
+ const data = toCsv(nodes, !this.isUpload, false, this.headers);
37
+ this.csvContent = this.headers.length ? this.domSanitizer.bypassSecurityTrustResourceUrl(`data:text/html;charset=utf-8,${encodeURIComponent(data)}`) : undefined;
38
+ }
39
+ get downloadFilename() {
40
+ return fileToExt(this.filename, this.extension);
41
+ }
42
+ }
43
+ NodeCsvExportConfirmComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeCsvExportConfirmComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
44
+ NodeCsvExportConfirmComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: { nodes: "nodes", filename: "filename", headerKeys: "headerKeys", extension: "extension", isUpload: "isUpload" }, outputs: { closed: "closed" }, ngImport: i0, template: "<div class=\"modal is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Export as CSV</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.next(true)\"></button>\n </header>\n <section class=\"modal-card-body\">\n <div class=\"notification is-info\" role=\"alert\" *ngIf=\"isUpload\">\n <span i18n=\"@@files.export.notice-1\">After Download, you can edit and</span>\n <a class=\"px-1\" routerLink=\"../\">upload the CSV file</a>\n <span i18n=\"@@files.export.notice-2\">to submit your content on the Hestia platform, and your draft will remain unchanged.</span>\n\n <p>\n <span>Alternatively, you can import the CSV file right back by clicking on the \"Import from CSV\" button and selecting the exported file.</span>\n </p>\n </div>\n\n <ng-container *ngIf=\"!isUpload && includedNodes.length > 1\">\n <p class=\"mb-2\">\n <b>{{includedNodes.length}}</b>\n <span class=\"px-1\">Nodes will be included in your download.</span>\n <a (click)=\"showIncludeNodes = !showIncludeNodes\">\n <ng-container *ngIf=\"!showIncludeNodes\">Show list</ng-container>\n <ng-container *ngIf=\"showIncludeNodes\">Hide list</ng-container>\n </a>\n </p>\n\n <div class=\"table-container\" *ngIf=\"showIncludeNodes\">\n <table class=\"table is-fullwidth is-hoverable mb-0\">\n <thead class=\"has-background-black\">\n <tr>\n <th>\n <span class=\"has-text-white\" i18n=\"@@files.export.confirm.@type\">@type</span>\n </th>\n <th>\n <span class=\"has-text-white\" i18n=\"@@files.export.confirm.@id\">@id</span>\n </th>\n <th>\n <span class=\"has-text-white\" i18n=\"@@files.export.confirm.name\">Name</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let node of includedNodes\">\n <td>\n <span *bindOnce=\"node\">{{node.node['@type']}}</span>\n </td>\n <td>\n <span *bindOnce=\"node\">{{node.node['@id']}}</span>\n </td>\n <td>\n <span *bindOnce=\"node\">{{node.node.name}}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n\n <he-node-csv-select-headers [class.is-hidden]=\"isUpload\"\n [csv]=\"csvData\" [keys]=\"headerKeys\" [includeDefaultCSV]=\"isUpload\"\n (headersChanged)=\"headersUpdated($event)\"\n ></he-node-csv-select-headers>\n </section>\n <footer class=\"modal-card-foot\">\n <a class=\"button is-success\" target=\"_blank\"\n [attr.disabled]=\"csvContent ? null : true\"\n [href]=\"csvContent\"\n [attr.download]=\"csvContent ? downloadFilename : null\"\n (click)=\"closed.next(true)\"\n >\n <fa-icon class=\"mr-2\" icon=\"download\"></fa-icon>\n <span i18n=\"@@files.export.confirm\">Download CSV</span>\n </a>\n <button class=\"button\" (click)=\"closed.next(true)\">\n <span i18n=\"@@cancel\">Cancel</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: [""], components: [{ type: i2.NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: ["csv", "keys", "includeDefaultCSV"], outputs: ["headersChanged"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }] });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeCsvExportConfirmComponent, decorators: [{
46
+ type: Component,
47
+ args: [{
48
+ selector: 'he-node-csv-export-confirm',
49
+ templateUrl: './node-csv-export-confirm.component.html',
50
+ styleUrls: ['./node-csv-export-confirm.component.scss']
51
+ }]
52
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { nodes: [{
53
+ type: Input
54
+ }], filename: [{
55
+ type: Input
56
+ }], headerKeys: [{
57
+ type: Input
58
+ }], extension: [{
59
+ type: Input
60
+ }], isUpload: [{
61
+ type: Input
62
+ }], closed: [{
63
+ type: Output
64
+ }] } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQVlyRCxNQUFNLE9BQU8sNkJBQTZCO0lBc0J4QyxZQUNVLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBdEI1QixZQUFPLEdBQWEsRUFBRSxDQUFDO1FBR3ZCLFVBQUssR0FBc0IsRUFBRSxDQUFDO1FBRTlCLGFBQVEsR0FBRyxVQUFVLENBQUM7UUFJdkIsY0FBUyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztRQUVwQyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBR2hCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBSXJDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixrQkFBYSxHQUFvQixFQUFFLENBQUM7SUFJdkMsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTSxjQUFjLENBQUMsT0FBaUI7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDhCQUE4QixDQUN0RixnQ0FBZ0Msa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDM0QsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDOzsySEFsRFUsNkJBQTZCOytHQUE3Qiw2QkFBNkIsMk5DaEIxQyw4NEdBaUZBOzRGRGpFYSw2QkFBNkI7a0JBTHpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLDBDQUEwQztvQkFDdkQsU0FBUyxFQUFFLENBQUMsMENBQTBDLENBQUM7aUJBQ3hEO21HQUtTLEtBQUs7c0JBRFosS0FBSztnQkFHRSxRQUFRO3NCQURmLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLE1BQU07c0JBRFosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBmaWxlVG9FeHQsIFN1cHBvcnRlZEV4dGVuc2lvbnMgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBKU09OIGFzIEhlc3RpYUpzb24gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b0NzdiB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hLWNvbnZlcnQnO1xuXG5pbnRlcmZhY2UgSU5vZGVJbmNsdWRlZCB7XG4gIG5vZGU6IEhlc3RpYUpzb248YW55PjtcbiAgaW5jbHVkZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgaGVhZGVyczogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIG5vZGVzOiBIZXN0aWFKc29uPGFueT5bXSA9IFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGZpbGVuYW1lID0gJ2Rvd25sb2FkJztcbiAgQElucHV0KClcbiAgcHVibGljIGhlYWRlcktleXM/OiBzdHJpbmdbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGV4dGVuc2lvbiA9IFN1cHBvcnRlZEV4dGVuc2lvbnMuY3N2O1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXNVcGxvYWQgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHB1YmxpYyBjc3ZEYXRhPzogc3RyaW5nO1xuICBwdWJsaWMgY3N2Q29udGVudD86IFNhZmVSZXNvdXJjZVVybDtcbiAgcHVibGljIHNob3dJbmNsdWRlTm9kZXMgPSBmYWxzZTtcbiAgcHVibGljIGluY2x1ZGVkTm9kZXM6IElOb2RlSW5jbHVkZWRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluY2x1ZGVkTm9kZXMgPSB0aGlzLm5vZGVzLm1hcChub2RlID0+ICh7IG5vZGUsIGluY2x1ZGVkOiB0cnVlIH0pKTtcbiAgICB0aGlzLmNzdkRhdGEgPSB0b0Nzdih0aGlzLm5vZGVzIHx8IFtdLCAhdGhpcy5pc1VwbG9hZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluY2x1ZGVkKCkge1xuICAgIHJldHVybiB0aGlzLmluY2x1ZGVkTm9kZXMuZmlsdGVyKCh7IGluY2x1ZGVkIH0pID0+IGluY2x1ZGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBoZWFkZXJzVXBkYXRlZChoZWFkZXJzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQ3N2Q29udGVudCgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNzdkNvbnRlbnQoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmluY2x1ZGVkLm1hcCgoeyBub2RlIH0pID0+IG5vZGUpO1xuICAgIGNvbnN0IGRhdGEgPSB0b0Nzdihub2RlcywgIXRoaXMuaXNVcGxvYWQsIGZhbHNlLCB0aGlzLmhlYWRlcnMpO1xuICAgIHRoaXMuY3N2Q29udGVudCA9IHRoaXMuaGVhZGVycy5sZW5ndGggPyB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICBgZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudChkYXRhKX1gXG4gICAgKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZG93bmxvYWRGaWxlbmFtZSgpIHtcbiAgICByZXR1cm4gZmlsZVRvRXh0KHRoaXMuZmlsZW5hbWUsIHRoaXMuZXh0ZW5zaW9uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsIGlzLWFjdGl2ZVwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYmFja2dyb3VuZFwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtY2FyZFwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJtb2RhbC1jYXJkLWhlYWRcIj5cbiAgICAgIDxwIGNsYXNzPVwibW9kYWwtY2FyZC10aXRsZVwiPkV4cG9ydCBhcyBDU1Y8L3A+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGVsZXRlXCIgYXJpYS1sYWJlbD1cImNsb3NlXCIgKGNsaWNrKT1cImNsb3NlZC5uZXh0KHRydWUpXCI+PC9idXR0b24+XG4gICAgPC9oZWFkZXI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1jYXJkLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24gaXMtaW5mb1wiIHJvbGU9XCJhbGVydFwiICpuZ0lmPVwiaXNVcGxvYWRcIj5cbiAgICAgICAgPHNwYW4gaTE4bj1cIkBAZmlsZXMuZXhwb3J0Lm5vdGljZS0xXCI+QWZ0ZXIgRG93bmxvYWQsIHlvdSBjYW4gZWRpdCBhbmQ8L3NwYW4+XG4gICAgICAgIDxhIGNsYXNzPVwicHgtMVwiIHJvdXRlckxpbms9XCIuLi9cIj51cGxvYWQgdGhlIENTViBmaWxlPC9hPlxuICAgICAgICA8c3BhbiBpMThuPVwiQEBmaWxlcy5leHBvcnQubm90aWNlLTJcIj50byBzdWJtaXQgeW91ciBjb250ZW50IG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0sIGFuZCB5b3VyIGRyYWZ0IHdpbGwgcmVtYWluIHVuY2hhbmdlZC48L3NwYW4+XG5cbiAgICAgICAgPHA+XG4gICAgICAgICAgPHNwYW4+QWx0ZXJuYXRpdmVseSwgeW91IGNhbiBpbXBvcnQgdGhlIENTViBmaWxlIHJpZ2h0IGJhY2sgYnkgY2xpY2tpbmcgb24gdGhlIFwiSW1wb3J0IGZyb20gQ1NWXCIgYnV0dG9uIGFuZCBzZWxlY3RpbmcgdGhlIGV4cG9ydGVkIGZpbGUuPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1VwbG9hZCAmJiBpbmNsdWRlZE5vZGVzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgPGI+e3tpbmNsdWRlZE5vZGVzLmxlbmd0aH19PC9iPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHgtMVwiPk5vZGVzIHdpbGwgYmUgaW5jbHVkZWQgaW4geW91ciBkb3dubG9hZC48L3NwYW4+XG4gICAgICAgICAgPGEgKGNsaWNrKT1cInNob3dJbmNsdWRlTm9kZXMgPSAhc2hvd0luY2x1ZGVOb2Rlc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG93SW5jbHVkZU5vZGVzXCI+U2hvdyBsaXN0PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0luY2x1ZGVOb2Rlc1wiPkhpZGUgbGlzdDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiAqbmdJZj1cInNob3dJbmNsdWRlTm9kZXNcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtaG92ZXJhYmxlIG1iLTBcIj5cbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImhhcy1iYWNrZ3JvdW5kLWJsYWNrXCI+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCIgaTE4bj1cIkBAZmlsZXMuZXhwb3J0LmNvbmZpcm0uQHR5cGVcIj5AdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIiBpMThuPVwiQEBmaWxlcy5leHBvcnQuY29uZmlybS5AaWRcIj5AaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCIgaTE4bj1cIkBAZmlsZXMuZXhwb3J0LmNvbmZpcm0ubmFtZVwiPk5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbm9kZSBvZiBpbmNsdWRlZE5vZGVzXCI+XG4gICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKmJpbmRPbmNlPVwibm9kZVwiPnt7bm9kZS5ub2RlWydAdHlwZSddfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqYmluZE9uY2U9XCJub2RlXCI+e3tub2RlLm5vZGVbJ0BpZCddfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqYmluZE9uY2U9XCJub2RlXCI+e3tub2RlLm5vZGUubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxoZS1ub2RlLWNzdi1zZWxlY3QtaGVhZGVycyBbY2xhc3MuaXMtaGlkZGVuXT1cImlzVXBsb2FkXCJcbiAgICAgICAgW2Nzdl09XCJjc3ZEYXRhXCIgW2tleXNdPVwiaGVhZGVyS2V5c1wiIFtpbmNsdWRlRGVmYXVsdENTVl09XCJpc1VwbG9hZFwiXG4gICAgICAgIChoZWFkZXJzQ2hhbmdlZCk9XCJoZWFkZXJzVXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgID48L2hlLW5vZGUtY3N2LXNlbGVjdC1oZWFkZXJzPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8Zm9vdGVyIGNsYXNzPVwibW9kYWwtY2FyZC1mb290XCI+XG4gICAgICA8YSBjbGFzcz1cImJ1dHRvbiBpcy1zdWNjZXNzXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiY3N2Q29udGVudCA/IG51bGwgOiB0cnVlXCJcbiAgICAgICAgW2hyZWZdPVwiY3N2Q29udGVudFwiXG4gICAgICAgIFthdHRyLmRvd25sb2FkXT1cImNzdkNvbnRlbnQgPyBkb3dubG9hZEZpbGVuYW1lIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZWQubmV4dCh0cnVlKVwiXG4gICAgICA+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwibXItMlwiIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4gaTE4bj1cIkBAZmlsZXMuZXhwb3J0LmNvbmZpcm1cIj5Eb3dubG9hZCBDU1Y8L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlZC5uZXh0KHRydWUpXCI+XG4gICAgICAgIDxzcGFuIGkxOG49XCJAQGNhbmNlbFwiPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZm9vdGVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,119 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
4
+ import { isDefaultCSVSelected, isCSVIncluded } from '@hestia-earth/json-schema/schema-utils';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../schema/schema.service";
7
+ import * as i2 from "@fortawesome/angular-fontawesome";
8
+ import * as i3 from "@angular/forms";
9
+ import * as i4 from "../../common/click-outside.directive";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "@angular/cdk/drag-drop";
12
+ import * as i7 from "../../common/keys.pipe";
13
+ const headerGroup = (header) => {
14
+ const parts = header.split('.');
15
+ return parts.length === 2 ? '' : [parts[0], parts[1]].join('.');
16
+ };
17
+ const termFields = [
18
+ '@id', 'name', 'units', 'termType'
19
+ ];
20
+ const isTermField = (field) => ({ header }) => [
21
+ 'term', 'methodModel', 'country', 'product', 'operation', 'key'
22
+ ].some(parent => header.endsWith([parent, field].join('.')));
23
+ export class NodeCsvSelectHeadersComponent {
24
+ constructor(schemaService) {
25
+ this.schemaService = schemaService;
26
+ this.csv = '';
27
+ this.includeDefaultCSV = false;
28
+ this.headersChanged = new EventEmitter();
29
+ this.headers = {};
30
+ this.allSelected = false;
31
+ this.showSelectTermFields = false;
32
+ this.termFields = termFields;
33
+ this.termFieldSelected = {};
34
+ }
35
+ ngOnInit() {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const schemas = yield this.schemaService.schemas();
38
+ const isSelected = yield this.isSelected(schemas);
39
+ const headers = yield this.schemaService.parseHeaders(this.csv);
40
+ this.headers = headers.filter(isCSVIncluded(schemas)).reduce((prev, header) => {
41
+ const group = headerGroup(header);
42
+ prev[group] = prev[group] || { headers: [], selected: false, partialSelected: false, open: true };
43
+ prev[group].headers.push({ header, selected: isSelected(header) });
44
+ return prev;
45
+ }, {});
46
+ Object.keys(this.headers).map(groupKey => this.updateGroupHeader(groupKey));
47
+ this.termFieldSelected = termFields.reduce((prev, curr) => (Object.assign(Object.assign({}, prev), { [curr]: curr === '@id' })), {});
48
+ this.reresh();
49
+ });
50
+ }
51
+ isSelected(schemas) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const isSelected = this.includeDefaultCSV ? () => true : isDefaultCSVSelected(schemas);
54
+ return (key) => { var _a; return (!((_a = this.keys) === null || _a === void 0 ? void 0 : _a.length) || this.keys.some(v => key.startsWith(v))) && isSelected(key); };
55
+ });
56
+ }
57
+ dropHeader(event, groupKey) {
58
+ moveItemInArray(this.headers[groupKey].headers, event.previousIndex, event.currentIndex);
59
+ this.headersChanged.emit(this.selectedHeaders);
60
+ }
61
+ updateAllSelected() {
62
+ this.allSelected = Object.keys(this.headers).every(key => this.headers[key].selected);
63
+ }
64
+ toggleAll() {
65
+ return Object.keys(this.headers).map(key => {
66
+ const group = this.headers[key];
67
+ group.selected = this.allSelected;
68
+ return this.updateGroup(key);
69
+ });
70
+ }
71
+ updateGroup(groupKey) {
72
+ const group = this.headers[groupKey];
73
+ group.headers.map(header => header.selected = group.selected);
74
+ }
75
+ updateGroupHeader(groupKey) {
76
+ const group = this.headers[groupKey];
77
+ const allSelected = group.headers.every(({ selected }) => selected);
78
+ group.selected = allSelected;
79
+ group.partialSelected = !allSelected && group.headers.some(({ selected }) => selected);
80
+ }
81
+ get selectedHeaders() {
82
+ return Object.values(this.headers)
83
+ .flatMap(({ headers }) => headers)
84
+ .filter(({ selected }) => selected)
85
+ .map(({ header }) => header);
86
+ }
87
+ reresh() {
88
+ this.updateAllSelected();
89
+ this.headersChanged.emit(this.selectedHeaders);
90
+ }
91
+ // Term fields
92
+ toggleTermField(field) {
93
+ const selected = this.termFieldSelected[field];
94
+ return Object.keys(this.headers).map(key => {
95
+ const group = this.headers[key];
96
+ group.headers.filter(isTermField(field)).map(header => header.selected = selected);
97
+ return this.updateGroupHeader(key);
98
+ });
99
+ }
100
+ }
101
+ NodeCsvSelectHeadersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeCsvSelectHeadersComponent, deps: [{ token: i1.HeSchemaService }], target: i0.ɵɵFactoryTarget.Component });
102
+ NodeCsvSelectHeadersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeCsvSelectHeadersComponent, selector: "he-node-csv-select-headers", inputs: { csv: "csv", keys: "keys", includeDefaultCSV: "includeDefaultCSV" }, outputs: { headersChanged: "headersChanged" }, ngImport: i0, template: "<p class=\"mb-2\">Please select which columns you would like to include:</p>\n\n<p class=\"my-2 is-size-7\"><i>You can drag and drop the headers to sort them as they would appear in the CSV file.</i></p>\n\n<div class=\"columns toggle-all mx-4 pb-1 mb-0\">\n <div class=\"column\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"allSelected\"\n (change)=\"toggleAll(); reresh()\"\n >\n <span class=\"ml-2\">Toggle All</span>\n </label>\n </div>\n\n <div class=\"column is-narrow has-text-right\">\n <div class=\"dropdown is-right has-text-left\"\n [class.is-active]=\"showSelectTermFields\"\n (clickOutside)=\"showSelectTermFields = false\"\n >\n <div class=\"dropdown-trigger\" (click)=\"showSelectTermFields = !showSelectTermFields\">\n <button class=\"button is-small\"\n aria-haspopup=\"true\" aria-controls=\"select-menu\"\n >\n <span>Toggle Term Fields</span>\n <span class=\"icon is-small\">\n <fa-icon icon=\"filter\" aria-hidden=\"true\"></fa-icon>\n </span>\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"select-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <a class=\"dropdown-item\"\n *ngFor=\"let field of termFields\"\n >\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"termFieldSelected[field]\"\n (change)=\"toggleTermField(field)\"\n >\n <span class=\"ml-2\">{{field}}</span>\n </label>\n </a>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"drag-container\">\n <div class=\"card\" *ngFor=\"let group of headers | keys\">\n <header class=\"card-header\" *ngIf=\"group.key\">\n <div class=\"card-header-title\">\n <label class=\"checkbox ml-1\">\n <input type=\"checkbox\" class=\"selector\"\n [indeterminate]=\"group.value.partialSelected\"\n [(ngModel)]=\"group.value.selected\"\n (change)=\"updateGroup(group.key); reresh()\"\n >\n <span class=\"ml-2\">{{group.key}}</span>\n </label>\n </div>\n <span class=\"card-header-icon has-text-link\" aria-label=\"open / close\"\n (click)=\"group.value.open = !group.value.open\" pointer\n >\n <span class=\"icon\">\n <fa-icon icon=\"angle-down\" [class.is-hidden]=\"!group.value.open\"></fa-icon>\n <fa-icon icon=\"angle-left\" [class.is-hidden]=\"group.value.open\"></fa-icon>\n </span>\n </span>\n </header>\n\n <div class=\"card-content p-3\" [class.is-hidden]=\"!group.value.open\">\n <ul cdkDropList (cdkDropListDropped)=\"dropHeader($event, group.key)\">\n <li *ngFor=\"let header of group.value.headers\" cdkDrag>\n <label class=\"checkbox ml-2\">\n <input type=\"checkbox\" class=\"selector\"\n [(ngModel)]=\"header.selected\"\n (change)=\"updateGroupHeader(group.key); reresh()\"\n >\n <span class=\"ml-2\">{{header.header}}</span>\n </label>\n </li>\n </ul>\n </div>\n </div>\n</div>\n", styles: [".toggle-all{border-bottom:1px solid #7a7a7a}.drag-container,.table-container{max-height:45vh;overflow-y:auto}.cdk-drag-preview{border-radius:2px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;list-style:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], pipes: { "keys": i7.KeysPipe } });
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeCsvSelectHeadersComponent, decorators: [{
104
+ type: Component,
105
+ args: [{
106
+ selector: 'he-node-csv-select-headers',
107
+ templateUrl: './node-csv-select-headers.component.html',
108
+ styleUrls: ['./node-csv-select-headers.component.scss']
109
+ }]
110
+ }], ctorParameters: function () { return [{ type: i1.HeSchemaService }]; }, propDecorators: { csv: [{
111
+ type: Input
112
+ }], keys: [{
113
+ type: Input
114
+ }], includeDefaultCSV: [{
115
+ type: Input
116
+ }], headersChanged: [{
117
+ type: Output
118
+ }] } });
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMvbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7O0FBa0I3RixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7SUFDakIsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVTtDQUNuQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQVcsRUFBRSxFQUFFLENBQUM7SUFDOUQsTUFBTSxFQUFFLGFBQWEs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QUMsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDbkYsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzsySEE1RlUsNkJBQTZCOytHQUE3Qiw2QkFBNkIsK0xDdkMxQyxxd0dBdUZBOzRGRGhEYSw2QkFBNkI7a0JBTHpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLDBDQUEwQztvQkFDdkQsU0FBUyxFQUFFLENBQUMsMENBQTBDLENBQUM7aUJBQ3hEO3NHQUdTLEdBQUc7c0JBRFYsS0FBSztnQkFHRSxJQUFJO3NCQURYLEtBQUs7Z0JBR0UsaUJBQWlCO3NCQUR4QixLQUFLO2dCQUlDLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBkZWZpbml0aW9ucyB9IGZyb20gJ0BoZXN0aWEtZWFydGgvanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgaXNEZWZhdWx0Q1NWU2VsZWN0ZWQsIGlzQ1NWSW5jbHVkZWQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2pzb24tc2NoZW1hL3NjaGVtYS11dGlscyc7XG5cbmltcG9ydCB7IEhlU2NoZW1hU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVtYS9zY2hlbWEuc2VydmljZSc7XG5cbmludGVyZmFjZSBJSGVhZGVyIHtcbiAgaGVhZGVyOiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSUdyb3VwZWRIZWFkZXJzIHtcbiAgW2dyb3VwOiBzdHJpbmddOiB7XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgcGFydGlhbFNlbGVjdGVkOiBib29sZWFuO1xuICAgIG9wZW46IGJvb2xlYW47XG4gICAgaGVhZGVyczogSUhlYWRlcltdO1xuICB9O1xufVxuXG5jb25zdCBoZWFkZXJHcm91cCA9IChoZWFkZXI6IHN0cmluZykgPT4ge1xuICBjb25zdCBwYXJ0cyA9IGhlYWRlci5zcGxpdCgnLicpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAyID8gJycgOiBbcGFydHNbMF0sIHBhcnRzWzFdXS5qb2luKCcuJyk7XG59O1xuXG5jb25zdCB0ZXJtRmllbGRzID0gW1xuICAnQGlkJywgJ25hbWUnLCAndW5pdHMnLCAndGVybVR5cGUnXG5dO1xuXG5jb25zdCBpc1Rlcm1GaWVsZCA9IChmaWVsZDogc3RyaW5nKSA9PiAoeyBoZWFkZXIgfTogSUhlYWRlcikgPT4gW1xuICAndGVybScsICdtZXRob2RNb2RlbCcsICdjb3VudHJ5JywgJ3Byb2R1Y3QnLCAnb3BlcmF0aW9uJywgJ2tleSdcbl0uc29tZShwYXJlbnQgPT4gaGVhZGVyLmVuZHNXaXRoKFtwYXJlbnQsIGZpZWxkXS5qb2luKCcuJykpKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1jc3Ytc2VsZWN0LWhlYWRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVDc3ZTZWxlY3RIZWFkZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjc3YgPSAnJztcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBrZXlzPzogc3RyaW5nW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgaW5jbHVkZURlZmF1bHRDU1YgPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGhlYWRlcnNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICBwdWJsaWMgaGVhZGVyczogSUdyb3VwZWRIZWFkZXJzID0ge307XG4gIHB1YmxpYyBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzaG93U2VsZWN0VGVybUZpZWxkcyA9IGZhbHNlO1xuICBwdWJsaWMgdGVybUZpZWxkcyA9IHRlcm1GaWVsZHM7XG4gIHB1YmxpYyB0ZXJtRmllbGRTZWxlY3RlZDogYW55ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzY2hlbWFTZXJ2aWNlOiBIZVNjaGVtYVNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLnNjaGVtYVNlcnZpY2Uuc2NoZW1hcygpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBhd2FpdCB0aGlzLmlzU2VsZWN0ZWQoc2NoZW1hcyk7XG4gICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IHRoaXMuc2NoZW1hU2VydmljZS5wYXJzZUhlYWRlcnModGhpcy5jc3YpO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnMuZmlsdGVyKGlzQ1NWSW5jbHVkZWQoc2NoZW1hcykpLnJlZHVjZSgocHJldiwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IGhlYWRlckdyb3VwKGhlYWRlcik7XG4gICAgICBwcmV2W2dyb3VwXSA9IHByZXZbZ3JvdXBdIHx8IHsgaGVhZGVyczogW10sIHNlbGVjdGVkOiBmYWxzZSwgcGFydGlhbFNlbGVjdGVkOiBmYWxzZSwgb3BlbjogdHJ1ZSB9O1xuICAgICAgcHJldltncm91cF0uaGVhZGVycy5wdXNoKHsgaGVhZGVyLCBzZWxlY3RlZDogaXNTZWxlY3RlZChoZWFkZXIpIH0pO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30gYXMgSUdyb3VwZWRIZWFkZXJzKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcnMpLm1hcChncm91cEtleSA9PiB0aGlzLnVwZGF0ZUdyb3VwSGVhZGVyKGdyb3VwS2V5KSk7XG4gICAgdGhpcy50ZXJtRmllbGRTZWxlY3RlZCA9IHRlcm1GaWVsZHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoeyAuLi5wcmV2LCBbY3Vycl06IGN1cnIgPT09ICdAaWQnIH0pLCB7fSk7XG4gICAgdGhpcy5yZXJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaXNTZWxlY3RlZChzY2hlbWFzOiBkZWZpbml0aW9ucykge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmluY2x1ZGVEZWZhdWx0Q1NWID8gKCkgPT4gdHJ1ZSA6IGlzRGVmYXVsdENTVlNlbGVjdGVkKHNjaGVtYXMpO1xuICAgIHJldHVybiAoa2V5OiBzdHJpbmcpID0+ICghdGhpcy5rZXlzPy5sZW5ndGggfHwgdGhpcy5rZXlzLnNvbWUodiA9PiBrZXkuc3RhcnRzV2l0aCh2KSkpICYmIGlzU2VsZWN0ZWQoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBkcm9wSGVhZGVyKGV2ZW50OiBDZGtEcmFnRHJvcDxJSGVhZGVyW10+LCBncm91cEtleTogc3RyaW5nKSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuaGVhZGVyc1tncm91cEtleV0uaGVhZGVycywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmhlYWRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZWxlY3RlZEhlYWRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBbGxTZWxlY3RlZCgpIHtcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKS5ldmVyeShrZXkgPT4gdGhpcy5oZWFkZXJzW2tleV0uc2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUFsbCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKS5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5oZWFkZXJzW2tleV07XG4gICAgICBncm91cC5zZWxlY3RlZCA9IHRoaXMuYWxsU2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVHcm91cChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUdyb3VwKGdyb3VwS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuaGVhZGVyc1tncm91cEtleV07XG4gICAgZ3JvdXAuaGVhZGVycy5tYXAoaGVhZGVyID0+IGhlYWRlci5zZWxlY3RlZCA9IGdyb3VwLnNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVHcm91cEhlYWRlcihncm91cEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmhlYWRlcnNbZ3JvdXBLZXldO1xuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gZ3JvdXAuaGVhZGVycy5ldmVyeSgoeyBzZWxlY3RlZCB9KSA9PiBzZWxlY3RlZCk7XG4gICAgZ3JvdXAuc2VsZWN0ZWQgPSBhbGxTZWxlY3RlZDtcbiAgICBncm91cC5wYXJ0aWFsU2VsZWN0ZWQgPSAhYWxsU2VsZWN0ZWQgJiYgZ3JvdXAuaGVhZGVycy5zb21lKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRIZWFkZXJzKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuaGVhZGVycylcbiAgICAgIC5mbGF0TWFwKCh7IGhlYWRlcnMgfSkgPT4gaGVhZGVycylcbiAgICAgIC5maWx0ZXIoKHsgc2VsZWN0ZWQgfSkgPT4gc2VsZWN0ZWQpXG4gICAgICAubWFwKCh7IGhlYWRlciB9KSA9PiBoZWFkZXIpO1xuICB9XG5cbiAgcHVibGljIHJlcmVzaCgpIHtcbiAgICB0aGlzLnVwZGF0ZUFsbFNlbGVjdGVkKCk7XG4gICAgdGhpcy5oZWFkZXJzQ2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0ZWRIZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFRlcm0gZmllbGRzXG5cbiAgcHVibGljIHRvZ2dsZVRlcm1GaWVsZChmaWVsZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnRlcm1GaWVsZFNlbGVjdGVkW2ZpZWxkXTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKS5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5oZWFkZXJzW2tleV07XG4gICAgICBncm91cC5oZWFkZXJzLmZpbHRlcihpc1Rlcm1GaWVsZChmaWVsZCkpLm1hcChoZWFkZXIgPT4gaGVhZGVyLnNlbGVjdGVkID0gc2VsZWN0ZWQpO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlR3JvdXBIZWFkZXIoa2V5KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHAgY2xhc3M9XCJtYi0yXCI+UGxlYXNlIHNlbGVjdCB3aGljaCBjb2x1bW5zIHlvdSB3b3VsZCBsaWtlIHRvIGluY2x1ZGU6PC9wPlxuXG48cCBjbGFzcz1cIm15LTIgaXMtc2l6ZS03XCI+PGk+WW91IGNhbiBkcmFnIGFuZCBkcm9wIHRoZSBoZWFkZXJzIHRvIHNvcnQgdGhlbSBhcyB0aGV5IHdvdWxkIGFwcGVhciBpbiB0aGUgQ1NWIGZpbGUuPC9pPjwvcD5cblxuPGRpdiBjbGFzcz1cImNvbHVtbnMgdG9nZ2xlLWFsbCBteC00IHBiLTEgbWItMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggbWwtMVwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2VsZWN0b3JcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImFsbFNlbGVjdGVkXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGwoKTsgcmVyZXNoKClcIlxuICAgICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+VG9nZ2xlIEFsbDwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBoYXMtdGV4dC1yaWdodFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93biBpcy1yaWdodCBoYXMtdGV4dC1sZWZ0XCJcbiAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwic2hvd1NlbGVjdFRlcm1GaWVsZHNcIlxuICAgICAgKGNsaWNrT3V0c2lkZSk9XCJzaG93U2VsZWN0VGVybUZpZWxkcyA9IGZhbHNlXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tdHJpZ2dlclwiIChjbGljayk9XCJzaG93U2VsZWN0VGVybUZpZWxkcyA9ICFzaG93U2VsZWN0VGVybUZpZWxkc1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtY29udHJvbHM9XCJzZWxlY3QtbWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5Ub2dnbGUgVGVybSBGaWVsZHM8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiZmlsdGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgaWQ9XCJzZWxlY3QtbWVudVwiIHJvbGU9XCJtZW51XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250ZW50XCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB0ZXJtRmllbGRzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0xXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlcm1GaWVsZFNlbGVjdGVkW2ZpZWxkXVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVUZXJtRmllbGQoZmllbGQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj57e2ZpZWxkfX08L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImRyYWctY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGhlYWRlcnMgfCBrZXlzXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCIgKm5nSWY9XCJncm91cC5rZXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci10aXRsZVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0xXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2VsZWN0b3JcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ3JvdXAudmFsdWUucGFydGlhbFNlbGVjdGVkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXAudmFsdWUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVHcm91cChncm91cC5rZXkpOyByZXJlc2goKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7Z3JvdXAua2V5fX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1oZWFkZXItaWNvbiBoYXMtdGV4dC1saW5rXCIgYXJpYS1sYWJlbD1cIm9wZW4gLyBjbG9zZVwiXG4gICAgICAgIChjbGljayk9XCJncm91cC52YWx1ZS5vcGVuID0gIWdyb3VwLnZhbHVlLm9wZW5cIiBwb2ludGVyXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPlxuICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1kb3duXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZ3JvdXAudmFsdWUub3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiYW5nbGUtbGVmdFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiZ3JvdXAudmFsdWUub3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudCBwLTNcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFncm91cC52YWx1ZS5vcGVuXCI+XG4gICAgICA8dWwgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wSGVhZGVyKCRldmVudCwgZ3JvdXAua2V5KVwiPlxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBncm91cC52YWx1ZS5oZWFkZXJzXCIgY2RrRHJhZz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveCBtbC0yXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGVyLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVHcm91cEhlYWRlcihncm91cC5rZXkpOyByZXJlc2goKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj57e2hlYWRlci5oZWFkZXJ9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { toJson } from '@hestia-earth/schema-convert';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../schema/schema.service";
6
+ export class HeNodeCsvService {
7
+ constructor(schemaService) {
8
+ this.schemaService = schemaService;
9
+ }
10
+ csvToJson(content) {
11
+ return __awaiter(this, void 0, void 0, function* () {
12
+ return toJson(yield this.schemaService.schemas(), content);
13
+ });
14
+ }
15
+ }
16
+ HeNodeCsvService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeNodeCsvService, deps: [{ token: i1.HeSchemaService }], target: i0.ɵɵFactoryTarget.Injectable });
17
+ HeNodeCsvService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeNodeCsvService, providedIn: 'root' });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeNodeCsvService, decorators: [{
19
+ type: Injectable,
20
+ args: [{
21
+ providedIn: 'root'
22
+ }]
23
+ }], ctorParameters: function () { return [{ type: i1.HeSchemaService }]; } });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jc3Yuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL25vZGUtY3N2LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7QUFPdEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUNVLGFBQThCO1FBQTlCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtJQUNwQyxDQUFDO0lBRUMsU0FBUyxDQUFDLE9BQWU7O1lBQzdCLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RCxDQUFDO0tBQUE7OzhHQVBVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9Kc29uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEtY29udmVydCc7XG5cbmltcG9ydCB7IEhlU2NoZW1hU2VydmljZSB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEhlTm9kZUNzdlNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNjaGVtYVNlcnZpY2U6IEhlU2NoZW1hU2VydmljZVxuICApIHsgfVxuXG4gIGFzeW5jIGNzdlRvSnNvbihjb250ZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdG9Kc29uKGF3YWl0IHRoaXMuc2NoZW1hU2VydmljZS5zY2hlbWFzKCksIGNvbnRlbnQpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
3
+ import { create, formatters } from 'jsondiffpatch';
4
+ import { DisplayType } from './node-diffs.model';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../node.service";
7
+ import * as i2 from "@fortawesome/angular-fontawesome";
8
+ import * as i3 from "@angular/common";
9
+ const omit = require('lodash.omit');
10
+ const ignoreProperties = [
11
+ '@type', '@id', 'type', 'id'
12
+ ];
13
+ const excludeProperties = [
14
+ // properties for indexed Node
15
+ '@context', 'uploadDate', 'validationDate', 'validationBy', 'schemaVersion', 'originalId', 'dataPrivate'
16
+ ];
17
+ const customDiff = create({
18
+ propertyFilter: name => !ignoreProperties.includes(name) && !excludeProperties.includes(name)
19
+ });
20
+ export class NodeDiffsComponent {
21
+ constructor(nodeService) {
22
+ this.nodeService = nodeService;
23
+ this.displayType = DisplayType.diffs;
24
+ this.diffsLoaded = new EventEmitter();
25
+ this.DisplayType = DisplayType;
26
+ this.loading = true;
27
+ }
28
+ ngOnInit() {
29
+ var _a;
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ this.right = this.data;
32
+ const type = ((_a = this.data) === null || _a === void 0 ? void 0 : _a.type) || this.type;
33
+ this.left = yield this.nodeService.get({ '@type': type, '@id': this.id });
34
+ this.loadDiffs();
35
+ this.loading = false;
36
+ });
37
+ }
38
+ loadDiffs() {
39
+ this.left = omit(this.left, excludeProperties);
40
+ this.right = omit(this.right, excludeProperties);
41
+ const delta = customDiff.diff(this.left, this.right);
42
+ const diffs = formatters.html.format(delta, this.left);
43
+ this.diffsLoaded.emit(diffs);
44
+ this.diffHtml = diffs || '<p>No difference.</p>';
45
+ }
46
+ }
47
+ NodeDiffsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeDiffsComponent, deps: [{ token: i1.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
48
+ NodeDiffsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeDiffsComponent, selector: "he-node-diffs", inputs: { data: "data", id: "id", type: "type", displayType: "displayType" }, outputs: { diffsLoaded: "diffsLoaded" }, ngImport: i0, template: "<div *ngIf=\"loading\" class=\"has-text-center py-3\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n</div>\n\n<ng-container *ngIf=\"left && right\">\n <ng-container [ngSwitch]=\"displayType\">\n <div *ngSwitchCase=\"DisplayType.diffs\" [innerHTML]=\"diffHtml\"></div>\n\n <div *ngSwitchCase=\"DisplayType.sideBySide\" class=\"columns\">\n <div class=\"column is-6\">\n <pre class=\"has-background-black has-text-white\"><code>{{left | json}}</code></pre>\n </div>\n <div class=\"column is-6\">\n <pre class=\"has-background-black has-text-white\"><code>{{right | json}}</code></pre>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], components: [{ type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "json": i3.JsonPipe } });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeDiffsComponent, decorators: [{
50
+ type: Component,
51
+ args: [{
52
+ selector: 'he-node-diffs',
53
+ templateUrl: './node-diffs.component.html',
54
+ styleUrls: ['./node-diffs.component.scss']
55
+ }]
56
+ }], ctorParameters: function () { return [{ type: i1.HeNodeService }]; }, propDecorators: { data: [{
57
+ type: Input
58
+ }], id: [{
59
+ type: Input
60
+ }], type: [{
61
+ type: Input
62
+ }], displayType: [{
63
+ type: Input
64
+ }], diffsLoaded: [{
65
+ type: Output
66
+ }] } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kaWZmcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbm9kZS9ub2RlLWRpZmZzL25vZGUtZGlmZnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1kaWZmcy9ub2RlLWRpZmZzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFGakQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBS3BDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSTtDQUM3QixDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRztJQUN4Qiw4QkFBOEI7SUFDOUIsVUFBVSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhO0NBQ3pHLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0NBQzlGLENBQUMsQ0FBQztBQU9ILE1BQU0sT0FBTyxrQkFBa0I7SUFtQjdCLFlBQ1UsV0FBMEI7UUFBMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFaN0IsZ0JBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBRy9CLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUxQyxnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMxQixZQUFPLEdBQUcsSUFBSSxDQUFDO0lBT2xCLENBQUM7SUFFQyxRQUFROzs7WUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdkIsTUFBTSxJQUFJLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLElBQUksS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBbUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7O0tBQ3RCO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDakQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLHVCQUF1QixDQUFDO0lBQ25ELENBQUM7O2dIQXRDVSxrQkFBa0I7b0dBQWxCLGtCQUFrQiw0S0MxQi9CLHFzQkFrQkE7NEZEUWEsa0JBQWtCO2tCQUw5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixXQUFXLEVBQUUsNkJBQTZCO29CQUMxQyxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDM0M7b0dBR1MsSUFBSTtzQkFEWCxLQUFLO2dCQUdFLEVBQUU7c0JBRFQsS0FBSztnQkFHRSxJQUFJO3NCQURYLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFJRSxXQUFXO3NCQURsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZVR5cGUsIEpTT05MRCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGNyZWF0ZSwgZm9ybWF0dGVycyB9IGZyb20gJ2pzb25kaWZmcGF0Y2gnO1xuY29uc3Qgb21pdCA9IHJlcXVpcmUoJ2xvZGFzaC5vbWl0Jyk7XG5cbmltcG9ydCB7IERpc3BsYXlUeXBlIH0gZnJvbSAnLi9ub2RlLWRpZmZzLm1vZGVsJztcbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLnNlcnZpY2UnO1xuXG5jb25zdCBpZ25vcmVQcm9wZXJ0aWVzID0gW1xuICAnQHR5cGUnLCAnQGlkJywgJ3R5cGUnLCAnaWQnXG5dO1xuXG5jb25zdCBleGNsdWRlUHJvcGVydGllcyA9IFtcbiAgLy8gcHJvcGVydGllcyBmb3IgaW5kZXhlZCBOb2RlXG4gICdAY29udGV4dCcsICd1cGxvYWREYXRlJywgJ3ZhbGlkYXRpb25EYXRlJywgJ3ZhbGlkYXRpb25CeScsICdzY2hlbWFWZXJzaW9uJywgJ29yaWdpbmFsSWQnLCAnZGF0YVByaXZhdGUnXG5dO1xuXG5jb25zdCBjdXN0b21EaWZmID0gY3JlYXRlKHtcbiAgcHJvcGVydHlGaWx0ZXI6IG5hbWUgPT4gIWlnbm9yZVByb3BlcnRpZXMuaW5jbHVkZXMobmFtZSkgJiYgIWV4Y2x1ZGVQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hbWUpXG59KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1kaWZmcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWRpZmZzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1kaWZmcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVEaWZmc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBwcml2YXRlIGlkPzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHR5cGU/OiBOb2RlVHlwZTtcbiAgQElucHV0KClcbiAgcHVibGljIGRpc3BsYXlUeXBlID0gRGlzcGxheVR5cGUuZGlmZnM7XG5cbiAgQE91dHB1dCgpXG4gIHByaXZhdGUgZGlmZnNMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwdWJsaWMgRGlzcGxheVR5cGUgPSBEaXNwbGF5VHlwZTtcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgbGVmdD86IEpTT05MRDxOb2RlVHlwZT47XG4gIHB1YmxpYyByaWdodDogYW55O1xuICBwdWJsaWMgZGlmZkh0bWw/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBub2RlU2VydmljZTogSGVOb2RlU2VydmljZVxuICApIHsgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmlnaHQgPSB0aGlzLmRhdGE7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZGF0YT8udHlwZSB8fCB0aGlzLnR5cGU7XG4gICAgdGhpcy5sZWZ0ID0gYXdhaXQgdGhpcy5ub2RlU2VydmljZS5nZXQ8SlNPTkxEPE5vZGVUeXBlPj4oeyAnQHR5cGUnOiB0eXBlLCAnQGlkJzogdGhpcy5pZCB9KTtcbiAgICB0aGlzLmxvYWREaWZmcygpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGlmZnMoKSB7XG4gICAgdGhpcy5sZWZ0ID0gb21pdCh0aGlzLmxlZnQsIGV4Y2x1ZGVQcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJpZ2h0ID0gb21pdCh0aGlzLnJpZ2h0LCBleGNsdWRlUHJvcGVydGllcyk7XG4gICAgY29uc3QgZGVsdGEgPSBjdXN0b21EaWZmLmRpZmYodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcbiAgICBjb25zdCBkaWZmcyA9IGZvcm1hdHRlcnMuaHRtbC5mb3JtYXQoZGVsdGEhLCB0aGlzLmxlZnQpO1xuICAgIHRoaXMuZGlmZnNMb2FkZWQuZW1pdChkaWZmcyk7XG4gICAgdGhpcy5kaWZmSHRtbCA9IGRpZmZzIHx8ICc8cD5ObyBkaWZmZXJlbmNlLjwvcD4nO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwiaGFzLXRleHQtY2VudGVyIHB5LTNcIj5cbiAgPGZhLWljb24gaWNvbj1cInNwaW5uZXJcIiBbcHVsc2VdPVwidHJ1ZVwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwibGVmdCAmJiByaWdodFwiPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJkaXNwbGF5VHlwZVwiPlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIkRpc3BsYXlUeXBlLmRpZmZzXCIgW2lubmVySFRNTF09XCJkaWZmSHRtbFwiPjwvZGl2PlxuXG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiRGlzcGxheVR5cGUuc2lkZUJ5U2lkZVwiIGNsYXNzPVwiY29sdW1uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy02XCI+XG4gICAgICAgIDxwcmUgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFjayBoYXMtdGV4dC13aGl0ZVwiPjxjb2RlPnt7bGVmdCB8IGpzb259fTwvY29kZT48L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy02XCI+XG4gICAgICAgIDxwcmUgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFjayBoYXMtdGV4dC13aGl0ZVwiPjxjb2RlPnt7cmlnaHQgfCBqc29ufX08L2NvZGU+PC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export var DisplayType;
2
+ (function (DisplayType) {
3
+ DisplayType["diffs"] = "diffs";
4
+ DisplayType["sideBySide"] = "side-by-side";
5
+ })(DisplayType || (DisplayType = {}));
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kaWZmcy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtZGlmZnMvbm9kZS1kaWZmcy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLDhCQUFlLENBQUE7SUFDZiwwQ0FBMkIsQ0FBQTtBQUM3QixDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBEaXNwbGF5VHlwZSB7XG4gIGRpZmZzID0gJ2RpZmZzJyxcbiAgc2lkZUJ5U2lkZSA9ICdzaWRlLWJ5LXNpZGUnXG59XG4iXX0=
@@ -0,0 +1,37 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { NodeType } from '@hestia-earth/schema';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@fortawesome/angular-fontawesome";
5
+ import * as i2 from "@angular/common";
6
+ const nodeTypeToIcon = {
7
+ [NodeType.Actor]: 'user',
8
+ [NodeType.Cycle]: 'seedling',
9
+ [NodeType.ImpactAssessment]: 'clipboard-list',
10
+ [NodeType.Organisation]: 'building',
11
+ [NodeType.Site]: 'map-marked',
12
+ [NodeType.Source]: 'book-open',
13
+ [NodeType.Term]: 'spell-check'
14
+ };
15
+ export class NodeIconComponent {
16
+ constructor() {
17
+ this.size = 'lg';
18
+ }
19
+ get icon() {
20
+ return this.type ? nodeTypeToIcon[this.type] : null;
21
+ }
22
+ }
23
+ NodeIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
24
+ NodeIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeIconComponent, selector: "he-node-icon", inputs: { type: "type", size: "size" }, ngImport: i0, template: "<ng-container *ngIf=\"icon\">\n <fa-icon [icon]=\"icon\" [size]=\"size\"></fa-icon>\n</ng-container>\n", styles: [""], components: [{ type: i1.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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeIconComponent, decorators: [{
26
+ type: Component,
27
+ args: [{
28
+ selector: 'he-node-icon',
29
+ templateUrl: './node-icon.component.html',
30
+ styleUrls: ['./node-icon.component.scss']
31
+ }]
32
+ }], propDecorators: { type: [{
33
+ type: Input
34
+ }], size: [{
35
+ type: Input
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1pY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtaWNvbi9ub2RlLWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1pY29uL25vZGUtaWNvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFFaEQsTUFBTSxjQUFjLEdBRWhCO0lBQ0YsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTTtJQUN4QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVO0lBQzVCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsZ0JBQWdCO0lBQzdDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVU7SUFDbkMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWTtJQUM3QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXO0lBQzlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWE7Q0FDL0IsQ0FBQztBQU9GLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFTUyxTQUFJLEdBQUcsSUFBSSxDQUFDO0tBS3BCO0lBSEMsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQzs7K0dBUlUsaUJBQWlCO21HQUFqQixpQkFBaUIsNEZDcEI5Qix5R0FHQTs0RkRpQmEsaUJBQWlCO2tCQUw3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixXQUFXLEVBQUUsNEJBQTRCO29CQUN6QyxTQUFTLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztpQkFDMUM7OEJBR1MsSUFBSTtzQkFEWCxLQUFLO2dCQUdDLElBQUk7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGVUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5jb25zdCBub2RlVHlwZVRvSWNvbjoge1xuICBbdHlwZSBpbiBOb2RlVHlwZV06IHN0cmluZztcbn0gPSB7XG4gIFtOb2RlVHlwZS5BY3Rvcl06ICd1c2VyJyxcbiAgW05vZGVUeXBlLkN5Y2xlXTogJ3NlZWRsaW5nJyxcbiAgW05vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnRdOiAnY2xpcGJvYXJkLWxpc3QnLFxuICBbTm9kZVR5cGUuT3JnYW5pc2F0aW9uXTogJ2J1aWxkaW5nJyxcbiAgW05vZGVUeXBlLlNpdGVdOiAnbWFwLW1hcmtlZCcsXG4gIFtOb2RlVHlwZS5Tb3VyY2VdOiAnYm9vay1vcGVuJyxcbiAgW05vZGVUeXBlLlRlcm1dOiAnc3BlbGwtY2hlY2snXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1ub2RlLWljb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1pY29uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1pY29uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTm9kZUljb25Db21wb25lbnQge1xuICBASW5wdXQoKVxuICBwcml2YXRlIHR5cGU/OiBOb2RlVHlwZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNpemUgPSAnbGcnO1xuXG4gIHB1YmxpYyBnZXQgaWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID8gbm9kZVR5cGVUb0ljb25bdGhpcy50eXBlXSA6IG51bGw7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uXCI+XG4gIDxmYS1pY29uIFtpY29uXT1cImljb25cIiBbc2l6ZV09XCJzaXplXCI+PC9mYS1pY29uPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { linkTypeEnabled } from '../../schema/schema.service';
3
+ import { baseUrl, isExternal } from '../../common/utils';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@fortawesome/angular-fontawesome";
6
+ import * as i2 from "@angular/common";
7
+ export class NodeLinkComponent {
8
+ constructor() {
9
+ this.showExternalLink = false;
10
+ this.baseUrl = baseUrl();
11
+ }
12
+ get showLink() {
13
+ return this.node && linkTypeEnabled(this.node['@type']);
14
+ }
15
+ get target() {
16
+ return this.showExternalLink || isExternal() ? '_blank' : '_self';
17
+ }
18
+ }
19
+ NodeLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ NodeLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLinkComponent, selector: "he-node-link", inputs: { node: "node", showExternalLink: "showExternalLink" }, ngImport: i0, template: "<a *ngIf=\"showLink; else content\"\n [href]=\"baseUrl + '/' + node!['@type'].toLowerCase() + '/' + node!['@id']\"\n [target]=\"target\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <fa-icon class=\"no-print ml-2 is-align-middle\" icon=\"external-link-alt\" size=\"sm\" *ngIf=\"showExternalLink\"></fa-icon>\n</a>\n\n<ng-template #content>\n <span class=\"is-align-middle\" #placeholder><ng-content></ng-content></span>\n <span class=\"is-align-middle\" *ngIf=\"placeholder.children.length === 0\">{{node!['@id']}}</span>\n</ng-template>\n", styles: [""], components: [{ type: i1.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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLinkComponent, decorators: [{
22
+ type: Component,
23
+ args: [{
24
+ selector: 'he-node-link',
25
+ templateUrl: './node-link.component.html',
26
+ styleUrls: ['./node-link.component.scss']
27
+ }]
28
+ }], propDecorators: { node: [{
29
+ type: Input
30
+ }], showExternalLink: [{
31
+ type: Input
32
+ }] } });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1saW5rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbGluay9ub2RlLWxpbmsuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1saW5rL25vZGUtbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQU96RCxNQUFNLE9BQU8saUJBQWlCO0lBTDlCO1FBU1MscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCLFlBQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQztLQVM1QjtJQVBDLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3BFLENBQUM7OytHQWRVLGlCQUFpQjttR0FBakIsaUJBQWlCLG9IQ1g5QixtbUJBYUE7NEZERmEsaUJBQWlCO2tCQUw3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixXQUFXLEVBQUUsNEJBQTRCO29CQUN6QyxTQUFTLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztpQkFDMUM7OEJBR1EsSUFBSTtzQkFEVixLQUFLO2dCQUdDLGdCQUFnQjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpTT05MRCwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmltcG9ydCB7IGxpbmtUeXBlRW5hYmxlZCB9IGZyb20gJy4uLy4uL3NjaGVtYS9zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBiYXNlVXJsLCBpc0V4dGVybmFsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS1saW5rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtbGluay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtbGluay5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVMaW5rQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgcHVibGljIG5vZGU/OiBKU09OTEQ8Tm9kZVR5cGU+O1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0V4dGVybmFsTGluayA9IGZhbHNlO1xuXG4gIHB1YmxpYyBiYXNlVXJsID0gYmFzZVVybCgpO1xuXG4gIHB1YmxpYyBnZXQgc2hvd0xpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZSAmJiBsaW5rVHlwZUVuYWJsZWQodGhpcy5ub2RlWydAdHlwZSddKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLnNob3dFeHRlcm5hbExpbmsgfHwgaXNFeHRlcm5hbCgpID8gJ19ibGFuaycgOiAnX3NlbGYnO1xuICB9XG59XG4iLCI8YSAqbmdJZj1cInNob3dMaW5rOyBlbHNlIGNvbnRlbnRcIlxuICBbaHJlZl09XCJiYXNlVXJsICsgJy8nICsgbm9kZSFbJ0B0eXBlJ10udG9Mb3dlckNhc2UoKSArICcvJyArIG5vZGUhWydAaWQnXVwiXG4gIFt0YXJnZXRdPVwidGFyZ2V0XCJcbiAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgPGZhLWljb24gY2xhc3M9XCJuby1wcmludCBtbC0yIGlzLWFsaWduLW1pZGRsZVwiIGljb249XCJleHRlcm5hbC1saW5rLWFsdFwiIHNpemU9XCJzbVwiICpuZ0lmPVwic2hvd0V4dGVybmFsTGlua1wiPjwvZmEtaWNvbj5cbjwvYT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8c3BhbiBjbGFzcz1cImlzLWFsaWduLW1pZGRsZVwiICNwbGFjZWhvbGRlcj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImlzLWFsaWduLW1pZGRsZVwiICpuZ0lmPVwicGxhY2Vob2xkZXIuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCI+e3tub2RlIVsnQGlkJ119fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,63 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, Input } from '@angular/core';
3
+ import { of } from 'rxjs';
4
+ import { map, mergeMap, tap } from 'rxjs/operators';
5
+ import { fileToExt } from '@hestia-earth/api';
6
+ import { Level, levels, parseLines, toCsv } from '../../common/logs-utils';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/platform-browser";
9
+ import * as i2 from "../node.service";
10
+ import * as i3 from "../../common/clipboard/clipboard.component";
11
+ import * as i4 from "@fortawesome/angular-fontawesome";
12
+ import * as i5 from "@angular/common";
13
+ import * as i6 from "@angular/forms";
14
+ import * as i7 from "@ng-bootstrap/ng-bootstrap";
15
+ import * as i8 from "../../common/keys.pipe";
16
+ export class NodeLogsFileComponent {
17
+ constructor(domSanitizer, nodeService) {
18
+ this.domSanitizer = domSanitizer;
19
+ this.nodeService = nodeService;
20
+ this.allLogs = [];
21
+ this.showFilters = false;
22
+ this.Level = Level;
23
+ this.modelFilter = '';
24
+ this.termFilter = '';
25
+ this.selectedLevel = Level.info;
26
+ this.loading = false;
27
+ this.nodeLogLines = [];
28
+ this.fileToExt = fileToExt;
29
+ }
30
+ ngOnInit() {
31
+ this.nodeLog = of(Object.assign(Object.assign({}, this.node), { dataState: this.dataState })).pipe(tap(() => this.loading = true), mergeMap(node => this.nodeService.getLog(node)), map(value => value || 'No logs.'), tap(value => {
32
+ this.allLogs = parseLines(value).filter(({ data }) => data.logger === 'hestia_earth.models');
33
+ this.updateCsvContent();
34
+ this.applyFilters();
35
+ }), tap(() => this.loading = false));
36
+ }
37
+ updateCsvContent() {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ this.csvContent = this.domSanitizer.bypassSecurityTrustResourceUrl(`data:text/html;charset=utf-8,${encodeURIComponent(yield toCsv(this.allLogs))}`);
40
+ });
41
+ }
42
+ applyFilters() {
43
+ this.nodeLogLines = this.allLogs
44
+ .filter(({ level }) => levels.indexOf(level) >= levels.indexOf(this.selectedLevel))
45
+ .filter(({ code }) => (!this.modelFilter || code.toLocaleLowerCase().includes(`model=${this.modelFilter.toLowerCase()}`)) &&
46
+ (!this.termFilter || code.toLocaleLowerCase().includes(`term=${this.termFilter.toLowerCase()}`)));
47
+ }
48
+ }
49
+ NodeLogsFileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLogsFileComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.HeNodeService }], target: i0.ɵɵFactoryTarget.Component });
50
+ NodeLogsFileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: NodeLogsFileComponent, selector: "he-node-logs-file", inputs: { node: "node", dataState: "dataState" }, ngImport: i0, template: "<div class=\"is-relative\">\n <div class=\"copy-clipboard\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <he-clipboard clipboardClass=\"button is-link is-small\"\n [value]=\"nodeLog | async\" [hideText]=\"true\" [icon]=\"['far', 'clone']\" size=\"lg\" rotate=\"180\"\n ></he-clipboard>\n </div>\n <ng-container *ngIf=\"showFilters\">\n <div class=\"control\">\n <input class=\"input is-link is-small\"\n [(ngModel)]=\"modelFilter\" id=\"modelFilter\"\n (input)=\"applyFilters()\"\n placeholder=\"Filter by Method / Model\"\n >\n </div>\n <div class=\"control\">\n <input class=\"input is-link is-small\"\n [(ngModel)]=\"termFilter\" id=\"termFilter\"\n (input)=\"applyFilters()\"\n placeholder=\"Filter by Term\"\n >\n </div>\n <div class=\"control\">\n <div class=\"select is-link is-small\">\n <select (change)=\"applyFilters()\"\n [(ngModel)]=\"selectedLevel\" id=\"selectedLevel\"\n >\n <option *ngFor=\"let level of Level | keys\" [value]=\"level.value\">{{level.value}}</option>\n </select>\n </div>\n </div>\n </ng-container>\n <div class=\"control\">\n <button class=\"button is-small\" (click)=\"showFilters = !showFilters\"\n [ngbTooltip]=\"showFilters ? 'Hide filters' : 'Show filters'\" placement=\"bottom\" container=\"body\"\n >\n <fa-icon icon=\"filter\"></fa-icon>\n </button>\n </div>\n <div class=\"control pl-3\">\n <a class=\"button is-dark is-outlined is-small\" target=\"_blank\"\n [href]=\"csvContent\"\n [download]=\"fileToExt(node!['@id'], 'csv')\"\n >\n <fa-icon class=\"mr-2\" icon=\"download\"></fa-icon>\n <span>Download (CSV)</span>\n </a>\n </div>\n </div>\n </div>\n\n <pre class=\"pl-3 pt-3 ml-3\"><code class=\"is-block {{line.class}}\" *ngFor=\"let line of nodeLogLines\">{{line.data.timestamp}} {{('[' + line.data.level + ']:').padEnd(9, ' ')}} {{line.data.message}}</code></pre>\n</div>\n", styles: [":host{display:block}pre{background-color:inherit;color:inherit;min-height:38px;max-height:500px}\n"], components: [{ type: i3.ClipboardComponent, selector: "he-clipboard", inputs: ["value", "disabled", "hideText", "icon", "size", "rotate", "clipboardClass"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i7.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], pipes: { "async": i5.AsyncPipe, "keys": i8.KeysPipe } });
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NodeLogsFileComponent, decorators: [{
52
+ type: Component,
53
+ args: [{
54
+ selector: 'he-node-logs-file',
55
+ templateUrl: './node-logs-file.component.html',
56
+ styleUrls: ['./node-logs-file.component.scss']
57
+ }]
58
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.HeNodeService }]; }, propDecorators: { node: [{
59
+ type: Input
60
+ }], dataState: [{
61
+ type: Input
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFhLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBUyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7OztBQU9sRixNQUFNLE9BQU8scUJBQXFCO0lBbUJoQyxZQUNVLFlBQTBCLEVBQzFCLFdBQTBCO1FBRDFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBcEI1QixZQUFPLEdBQVksRUFBRSxDQUFDO1FBT3ZCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGtCQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGlCQUFZLEdBQVksRUFBRSxDQUFDO1FBRTNCLGNBQVMsR0FBRyxTQUFTLENBQUM7SUFLekIsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsaUNBQ1osSUFBSSxDQUFDLElBQUksS0FDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFDekIsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsRUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFYSxnQkFBZ0I7O1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FDaEUsZ0NBQWdDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQ2hGLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU87YUFDN0IsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNsRixNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDakcsQ0FBQztJQUNOLENBQUM7O21IQXREVSxxQkFBcUI7dUdBQXJCLHFCQUFxQiwyR0NmbEMsMnJFQXNEQTs0RkR2Q2EscUJBQXFCO2tCQUxqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFdBQVcsRUFBRSxpQ0FBaUM7b0JBQzlDLFNBQVMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO2lCQUMvQzsrSEFLUSxJQUFJO3NCQURWLEtBQUs7Z0JBR0MsU0FBUztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFTdGF0ZSwgZmlsZVRvRXh0IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSlNPTkxELCBOb2RlVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcblxuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBJTGluZSwgTGV2ZWwsIGxldmVscywgcGFyc2VMaW5lcywgdG9Dc3YgfSBmcm9tICcuLi8uLi9jb21tb24vbG9ncy11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtbG9ncy1maWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtbG9ncy1maWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlTG9nc0ZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGFsbExvZ3M6IElMaW5lW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZT86IEpTT05MRDxOb2RlVHlwZT47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhU3RhdGU/OiBEYXRhU3RhdGU7XG5cbiAgcHVibGljIHNob3dGaWx0ZXJzID0gZmFsc2U7XG4gIHB1YmxpYyBMZXZlbCA9IExldmVsO1xuICBwdWJsaWMgbW9kZWxGaWx0ZXIgPSAnJztcbiAgcHVibGljIHRlcm1GaWx0ZXIgPSAnJztcbiAgcHVibGljIHNlbGVjdGVkTGV2ZWwgPSBMZXZlbC5pbmZvO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgbm9kZUxvZz86IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIG5vZGVMb2dMaW5lczogSUxpbmVbXSA9IFtdO1xuICBwdWJsaWMgY3N2Q29udGVudD86IFNhZmVSZXNvdXJjZVVybDtcbiAgcHVibGljIGZpbGVUb0V4dCA9IGZpbGVUb0V4dDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5vZGVMb2cgPSBvZih7XG4gICAgICAuLi50aGlzLm5vZGUsXG4gICAgICBkYXRhU3RhdGU6IHRoaXMuZGF0YVN0YXRlXG4gICAgfSkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmcgPSB0cnVlKSxcbiAgICAgIG1lcmdlTWFwKG5vZGUgPT4gdGhpcy5ub2RlU2VydmljZS5nZXRMb2cobm9kZSkpLFxuICAgICAgbWFwKHZhbHVlID0+IHZhbHVlIHx8ICdObyBsb2dzLicpLFxuICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5hbGxMb2dzID0gcGFyc2VMaW5lcyh2YWx1ZSkuZmlsdGVyKCh7IGRhdGEgfSkgPT4gZGF0YS5sb2dnZXIgPT09ICdoZXN0aWFfZWFydGgubW9kZWxzJyk7XG4gICAgICAgIHRoaXMudXBkYXRlQ3N2Q29udGVudCgpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ3N2Q29udGVudCgpIHtcbiAgICB0aGlzLmNzdkNvbnRlbnQgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICBgZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudChhd2FpdCB0b0Nzdih0aGlzLmFsbExvZ3MpKX1gXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy5ub2RlTG9nTGluZXMgPSB0aGlzLmFsbExvZ3NcbiAgICAgIC5maWx0ZXIoKHsgbGV2ZWwgfSkgPT4gbGV2ZWxzLmluZGV4T2YobGV2ZWwpID49IGxldmVscy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRMZXZlbCkpXG4gICAgICAuZmlsdGVyKCh7IGNvZGUgfSkgPT5cbiAgICAgICAgKCF0aGlzLm1vZGVsRmlsdGVyIHx8IGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhgbW9kZWw9JHt0aGlzLm1vZGVsRmlsdGVyLnRvTG93ZXJDYXNlKCl9YCkpICYmXG4gICAgICAgICghdGhpcy50ZXJtRmlsdGVyIHx8IGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhgdGVybT0ke3RoaXMudGVybUZpbHRlci50b0xvd2VyQ2FzZSgpfWApKVxuICAgICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlzLXJlbGF0aXZlXCI+XG4gIDxkaXYgY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8aGUtY2xpcGJvYXJkIGNsaXBib2FyZENsYXNzPVwiYnV0dG9uIGlzLWxpbmsgaXMtc21hbGxcIlxuICAgICAgICAgIFt2YWx1ZV09XCJub2RlTG9nIHwgYXN5bmNcIiBbaGlkZVRleHRdPVwidHJ1ZVwiIFtpY29uXT1cIlsnZmFyJywgJ2Nsb25lJ11cIiBzaXplPVwibGdcIiByb3RhdGU9XCIxODBcIlxuICAgICAgICA+PC9oZS1jbGlwYm9hcmQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RmlsdGVyc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGlzLWxpbmsgaXMtc21hbGxcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbEZpbHRlclwiIGlkPVwibW9kZWxGaWx0ZXJcIlxuICAgICAgICAgICAgKGlucHV0KT1cImFwcGx5RmlsdGVycygpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IE1ldGhvZCAvIE1vZGVsXCJcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IGlzLWxpbmsgaXMtc21hbGxcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXJtRmlsdGVyXCIgaWQ9XCJ0ZXJtRmlsdGVyXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieSBUZXJtXCJcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtbGluayBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZExldmVsXCIgaWQ9XCJzZWxlY3RlZExldmVsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbGV2ZWwgb2YgTGV2ZWwgfCBrZXlzXCIgW3ZhbHVlXT1cImxldmVsLnZhbHVlXCI+e3tsZXZlbC52YWx1ZX19PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiAoY2xpY2spPVwic2hvd0ZpbHRlcnMgPSAhc2hvd0ZpbHRlcnNcIlxuICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNob3dGaWx0ZXJzID8gJ0hpZGUgZmlsdGVycycgOiAnU2hvdyBmaWx0ZXJzJ1wiIHBsYWNlbWVudD1cImJvdHRvbVwiIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGZhLWljb24gaWNvbj1cImZpbHRlclwiPjwvZmEtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIHBsLTNcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJidXR0b24gaXMtZGFyayBpcy1vdXRsaW5lZCBpcy1zbWFsbFwiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgW2hyZWZdPVwiY3N2Q29udGVudFwiXG4gICAgICAgICAgW2Rvd25sb2FkXT1cImZpbGVUb0V4dChub2RlIVsnQGlkJ10sICdjc3YnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cIm1yLTJcIiBpY29uPVwiZG93bmxvYWRcIj48L2ZhLWljb24+XG4gICAgICAgICAgPHNwYW4+RG93bmxvYWQgKENTVik8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8cHJlIGNsYXNzPVwicGwtMyBwdC0zIG1sLTNcIj48Y29kZSBjbGFzcz1cImlzLWJsb2NrIHt7bGluZS5jbGFzc319XCIgKm5nRm9yPVwibGV0IGxpbmUgb2Ygbm9kZUxvZ0xpbmVzXCI+e3tsaW5lLmRhdGEudGltZXN0YW1wfX0ge3soJ1snICsgbGluZS5kYXRhLmxldmVsICsgJ106JykucGFkRW5kKDksICcgJyl9fSB7e2xpbmUuZGF0YS5tZXNzYWdlfX08L2NvZGU+PC9wcmU+XG48L2Rpdj5cbiJdfQ==