@net7/boilerplate-arianna 4.9.7 → 5.0.0

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 (216) hide show
  1. package/esm2022/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +29 -0
  2. package/{esm2020 → esm2022}/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/chart-tippy/chart-tippy.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/components/extended-tree/extended-tree.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/components/gallery-breadcrumbs-tooltip/gallery-breadcrumbs-tooltip.mjs +4 -4
  6. package/esm2022/lib/components/pdf-viewer/pdf-viewer.mjs +31 -0
  7. package/esm2022/lib/components/scheda-dropdown/scheda-dropdown.mjs +26 -0
  8. package/{esm2020 → esm2022}/lib/components/scheda-image-navigator/scheda-image-navigator.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/components/scheda-search/scheda-search.mjs +4 -4
  10. package/esm2022/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +82 -0
  11. package/esm2022/lib/config/apollo.config.mjs +738 -0
  12. package/esm2022/lib/data-sources/autocomplete-wrapper.ds.mjs +48 -0
  13. package/esm2022/lib/data-sources/aw-facets-wrapper.ds.mjs +162 -0
  14. package/esm2022/lib/data-sources/bubble-chart.ds.mjs +95 -0
  15. package/esm2022/lib/data-sources/carousel.ds.mjs +74 -0
  16. package/esm2022/lib/data-sources/entita-nav.ds.mjs +74 -0
  17. package/esm2022/lib/data-sources/extended-tree.ds.mjs +157 -0
  18. package/esm2022/lib/data-sources/gallery-results.ds.mjs +103 -0
  19. package/esm2022/lib/data-sources/home-autocomplete.ds.mjs +80 -0
  20. package/esm2022/lib/data-sources/home-facets-wrapper.ds.mjs +190 -0
  21. package/esm2022/lib/data-sources/linked-objects.ds.mjs +219 -0
  22. package/{esm2020 → esm2022}/lib/data-sources/map.ds.mjs +1 -1
  23. package/{esm2020 → esm2022}/lib/data-sources/related-entities.ds.mjs +2 -2
  24. package/{esm2020 → esm2022}/lib/data-sources/scheda-breadcrumbs.ds.mjs +1 -1
  25. package/{esm2020 → esm2022}/lib/data-sources/scheda-dropdown.ds.mjs +1 -1
  26. package/esm2022/lib/data-sources/scheda-image-navigator.ds.mjs +82 -0
  27. package/{esm2020 → esm2022}/lib/data-sources/scheda-image.ds.mjs +1 -1
  28. package/esm2022/lib/data-sources/scheda-pdf.ds.mjs +54 -0
  29. package/esm2022/lib/data-sources/scheda-search.ds.mjs +141 -0
  30. package/{esm2020 → esm2022}/lib/data-sources/sidebar-header.ds.mjs +1 -1
  31. package/esm2022/lib/data-sources/timeline.ds.mjs +106 -0
  32. package/esm2022/lib/data-sources/tree.ds.mjs +154 -0
  33. package/esm2022/lib/event-handlers/autocomplete-wrapper.eh.mjs +18 -0
  34. package/esm2022/lib/event-handlers/aw-facets-wrapper.eh.mjs +88 -0
  35. package/esm2022/lib/event-handlers/bubble-chart.eh.mjs +98 -0
  36. package/esm2022/lib/event-handlers/chart-tippy.eh.mjs +64 -0
  37. package/{esm2020 → esm2022}/lib/event-handlers/entita-nav.eh.mjs +1 -1
  38. package/esm2022/lib/event-handlers/extended-tree.eh.mjs +23 -0
  39. package/esm2022/lib/event-handlers/gallery-results.eh.mjs +38 -0
  40. package/esm2022/lib/event-handlers/hero.eh.mjs +25 -0
  41. package/{esm2020 → esm2022}/lib/event-handlers/home-autocomplete.eh.mjs +1 -1
  42. package/esm2022/lib/event-handlers/home-facets-wrapper.eh.mjs +125 -0
  43. package/{esm2020 → esm2022}/lib/event-handlers/home-item-tags-wrapper.eh.mjs +1 -1
  44. package/esm2022/lib/event-handlers/linked-objects.eh.mjs +60 -0
  45. package/esm2022/lib/event-handlers/map.eh.mjs +23 -0
  46. package/{esm2020 → esm2022}/lib/event-handlers/scheda-breadcrumbs.eh.mjs +1 -1
  47. package/esm2022/lib/event-handlers/scheda-dropdown.eh.mjs +17 -0
  48. package/esm2022/lib/event-handlers/scheda-image-navigator.eh.mjs +18 -0
  49. package/esm2022/lib/event-handlers/scheda-pdf.eh.mjs +14 -0
  50. package/{esm2020 → esm2022}/lib/event-handlers/scheda-search.eh.mjs +1 -1
  51. package/{esm2020 → esm2022}/lib/event-handlers/sidebar-header.eh.mjs +1 -1
  52. package/esm2022/lib/event-handlers/timeline.eh.mjs +46 -0
  53. package/esm2022/lib/event-handlers/tree.eh.mjs +119 -0
  54. package/esm2022/lib/helpers/metadata.helper.mjs +89 -0
  55. package/esm2022/lib/helpers/node.helper.mjs +14 -0
  56. package/esm2022/lib/helpers/title.helper.mjs +12 -0
  57. package/esm2022/lib/layouts/collection-layout/collection-layout.ds.mjs +185 -0
  58. package/esm2022/lib/layouts/collection-layout/collection-layout.eh.mjs +27 -0
  59. package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.mjs +5 -5
  60. package/esm2022/lib/layouts/entita-layout/entita-layout.ds.mjs +320 -0
  61. package/esm2022/lib/layouts/entita-layout/entita-layout.eh.mjs +119 -0
  62. package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.mjs +5 -5
  63. package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-facets.config.mjs +3 -3
  64. package/esm2022/lib/layouts/gallery-layout/gallery-layout.ds.mjs +48 -0
  65. package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.mjs +5 -5
  66. package/esm2022/lib/layouts/home-layout/home-layout.ds.mjs +298 -0
  67. package/esm2022/lib/layouts/home-layout/home-layout.eh.mjs +245 -0
  68. package/{esm2020 → esm2022}/lib/layouts/home-layout/home-layout.mjs +5 -5
  69. package/esm2022/lib/layouts/map-layout/map-layout.ds.mjs +122 -0
  70. package/esm2022/lib/layouts/map-layout/map-layout.eh.mjs +44 -0
  71. package/{esm2020 → esm2022}/lib/layouts/map-layout/map-layout.mjs +5 -5
  72. package/esm2022/lib/layouts/scheda-layout/scheda-layout.ds.mjs +472 -0
  73. package/esm2022/lib/layouts/scheda-layout/scheda-layout.eh.mjs +347 -0
  74. package/{esm2020 → esm2022}/lib/layouts/scheda-layout/scheda-layout.mjs +5 -5
  75. package/{esm2020 → esm2022}/lib/layouts/search-layout/search-facets.config.mjs +3 -3
  76. package/esm2022/lib/layouts/search-layout/search-layout.ds.mjs +306 -0
  77. package/esm2022/lib/layouts/search-layout/search-layout.eh.mjs +175 -0
  78. package/{esm2020 → esm2022}/lib/layouts/search-layout/search-layout.mjs +5 -5
  79. package/esm2022/lib/layouts/timeline-layout/timeline-layout.ds.mjs +143 -0
  80. package/esm2022/lib/layouts/timeline-layout/timeline-layout.eh.mjs +41 -0
  81. package/{esm2020 → esm2022}/lib/layouts/timeline-layout/timeline-layout.mjs +5 -5
  82. package/{esm2020 → esm2022}/lib/n7-boilerplate-arianna.module.mjs +48 -48
  83. package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-checkbox.mjs +1 -1
  84. package/esm2022/lib/search/aw-facet-inputs/aw-facet-input-link.mjs +89 -0
  85. package/esm2022/lib/search/aw-facet-inputs/aw-facet-input.mjs +30 -0
  86. package/esm2022/lib/search/aw-search.model.mjs +331 -0
  87. package/esm2022/lib/search/aw-search.service.mjs +42 -0
  88. package/esm2022/lib/search/entity-links.helper.mjs +126 -0
  89. package/{fesm2020 → fesm2022}/net7-boilerplate-arianna.mjs +170 -159
  90. package/fesm2022/net7-boilerplate-arianna.mjs.map +1 -0
  91. package/lib/components/aw-facets-wrapper/aw-facets-wrapper.d.ts +1 -1
  92. package/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.d.ts +1 -1
  93. package/lib/components/chart-tippy/chart-tippy.d.ts +1 -1
  94. package/lib/components/extended-tree/extended-tree.d.ts +2 -2
  95. package/lib/components/gallery-breadcrumbs-tooltip/gallery-breadcrumbs-tooltip.d.ts +2 -2
  96. package/lib/components/pdf-viewer/pdf-viewer.d.ts +3 -3
  97. package/lib/components/scheda-dropdown/scheda-dropdown.d.ts +2 -2
  98. package/lib/components/scheda-image-navigator/scheda-image-navigator.d.ts +2 -2
  99. package/lib/components/scheda-search/scheda-search.d.ts +2 -2
  100. package/lib/components/smart-breadcrumbs/smart-breadcrumbs.d.ts +1 -1
  101. package/lib/config-types/arianna/app.d.ts +4 -4
  102. package/lib/config-types/arianna/layouts.d.ts +1 -1
  103. package/lib/data-sources/carousel.ds.d.ts +2 -2
  104. package/lib/data-sources/extended-tree.ds.d.ts +2 -2
  105. package/lib/layouts/collection-layout/collection-layout.d.ts +1 -1
  106. package/lib/layouts/collection-layout/collection-layout.types.d.ts +2 -2
  107. package/lib/layouts/entita-layout/entita-layout.d.ts +1 -1
  108. package/lib/layouts/entita-layout/entita-layout.types.d.ts +2 -2
  109. package/lib/layouts/gallery-layout/gallery-layout.d.ts +1 -1
  110. package/lib/layouts/home-layout/home-layout.d.ts +1 -1
  111. package/lib/layouts/map-layout/map-layout.d.ts +1 -1
  112. package/lib/layouts/map-layout/map-layout.ds.d.ts +1 -1
  113. package/lib/layouts/scheda-layout/scheda-layout.d.ts +1 -1
  114. package/lib/layouts/search-layout/search-layout.d.ts +1 -1
  115. package/lib/layouts/search-layout/search-layout.ds.d.ts +1 -1
  116. package/lib/layouts/timeline-layout/timeline-layout.d.ts +1 -1
  117. package/lib/layouts/timeline-layout/timeline-layout.ds.d.ts +1 -1
  118. package/lib/search/aw-search.model.d.ts +3 -3
  119. package/package.json +5 -11
  120. package/esm2020/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +0 -29
  121. package/esm2020/lib/components/pdf-viewer/pdf-viewer.mjs +0 -31
  122. package/esm2020/lib/components/scheda-dropdown/scheda-dropdown.mjs +0 -26
  123. package/esm2020/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +0 -82
  124. package/esm2020/lib/config/apollo.config.mjs +0 -738
  125. package/esm2020/lib/data-sources/autocomplete-wrapper.ds.mjs +0 -48
  126. package/esm2020/lib/data-sources/aw-facets-wrapper.ds.mjs +0 -162
  127. package/esm2020/lib/data-sources/bubble-chart.ds.mjs +0 -95
  128. package/esm2020/lib/data-sources/carousel.ds.mjs +0 -74
  129. package/esm2020/lib/data-sources/entita-nav.ds.mjs +0 -74
  130. package/esm2020/lib/data-sources/extended-tree.ds.mjs +0 -157
  131. package/esm2020/lib/data-sources/gallery-results.ds.mjs +0 -103
  132. package/esm2020/lib/data-sources/home-autocomplete.ds.mjs +0 -80
  133. package/esm2020/lib/data-sources/home-facets-wrapper.ds.mjs +0 -190
  134. package/esm2020/lib/data-sources/linked-objects.ds.mjs +0 -219
  135. package/esm2020/lib/data-sources/scheda-image-navigator.ds.mjs +0 -82
  136. package/esm2020/lib/data-sources/scheda-pdf.ds.mjs +0 -54
  137. package/esm2020/lib/data-sources/scheda-search.ds.mjs +0 -141
  138. package/esm2020/lib/data-sources/timeline.ds.mjs +0 -106
  139. package/esm2020/lib/data-sources/tree.ds.mjs +0 -154
  140. package/esm2020/lib/event-handlers/autocomplete-wrapper.eh.mjs +0 -18
  141. package/esm2020/lib/event-handlers/aw-facets-wrapper.eh.mjs +0 -88
  142. package/esm2020/lib/event-handlers/bubble-chart.eh.mjs +0 -98
  143. package/esm2020/lib/event-handlers/chart-tippy.eh.mjs +0 -64
  144. package/esm2020/lib/event-handlers/extended-tree.eh.mjs +0 -23
  145. package/esm2020/lib/event-handlers/gallery-results.eh.mjs +0 -38
  146. package/esm2020/lib/event-handlers/hero.eh.mjs +0 -25
  147. package/esm2020/lib/event-handlers/home-facets-wrapper.eh.mjs +0 -125
  148. package/esm2020/lib/event-handlers/linked-objects.eh.mjs +0 -60
  149. package/esm2020/lib/event-handlers/map.eh.mjs +0 -23
  150. package/esm2020/lib/event-handlers/scheda-dropdown.eh.mjs +0 -17
  151. package/esm2020/lib/event-handlers/scheda-image-navigator.eh.mjs +0 -18
  152. package/esm2020/lib/event-handlers/scheda-pdf.eh.mjs +0 -14
  153. package/esm2020/lib/event-handlers/timeline.eh.mjs +0 -46
  154. package/esm2020/lib/event-handlers/tree.eh.mjs +0 -119
  155. package/esm2020/lib/helpers/metadata.helper.mjs +0 -89
  156. package/esm2020/lib/helpers/node.helper.mjs +0 -14
  157. package/esm2020/lib/helpers/title.helper.mjs +0 -12
  158. package/esm2020/lib/layouts/collection-layout/collection-layout.ds.mjs +0 -185
  159. package/esm2020/lib/layouts/collection-layout/collection-layout.eh.mjs +0 -27
  160. package/esm2020/lib/layouts/entita-layout/entita-layout.ds.mjs +0 -320
  161. package/esm2020/lib/layouts/entita-layout/entita-layout.eh.mjs +0 -119
  162. package/esm2020/lib/layouts/gallery-layout/gallery-layout.ds.mjs +0 -48
  163. package/esm2020/lib/layouts/home-layout/home-layout.ds.mjs +0 -298
  164. package/esm2020/lib/layouts/home-layout/home-layout.eh.mjs +0 -245
  165. package/esm2020/lib/layouts/map-layout/map-layout.ds.mjs +0 -122
  166. package/esm2020/lib/layouts/map-layout/map-layout.eh.mjs +0 -44
  167. package/esm2020/lib/layouts/scheda-layout/scheda-layout.ds.mjs +0 -472
  168. package/esm2020/lib/layouts/scheda-layout/scheda-layout.eh.mjs +0 -347
  169. package/esm2020/lib/layouts/search-layout/search-layout.ds.mjs +0 -306
  170. package/esm2020/lib/layouts/search-layout/search-layout.eh.mjs +0 -175
  171. package/esm2020/lib/layouts/timeline-layout/timeline-layout.ds.mjs +0 -143
  172. package/esm2020/lib/layouts/timeline-layout/timeline-layout.eh.mjs +0 -41
  173. package/esm2020/lib/search/aw-facet-inputs/aw-facet-input-link.mjs +0 -89
  174. package/esm2020/lib/search/aw-facet-inputs/aw-facet-input.mjs +0 -30
  175. package/esm2020/lib/search/aw-search.model.mjs +0 -331
  176. package/esm2020/lib/search/aw-search.service.mjs +0 -42
  177. package/esm2020/lib/search/entity-links.helper.mjs +0 -126
  178. package/fesm2015/net7-boilerplate-arianna.mjs +0 -8551
  179. package/fesm2015/net7-boilerplate-arianna.mjs.map +0 -1
  180. package/fesm2020/net7-boilerplate-arianna.mjs.map +0 -1
  181. /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
  182. /package/{esm2020 → esm2022}/lib/config-types/arianna/app.mjs +0 -0
  183. /package/{esm2020 → esm2022}/lib/config-types/arianna/index.mjs +0 -0
  184. /package/{esm2020 → esm2022}/lib/config-types/arianna/layouts.mjs +0 -0
  185. /package/{esm2020 → esm2022}/lib/config-types/index.mjs +0 -0
  186. /package/{esm2020 → esm2022}/lib/data-sources/chart-tippy.ds.mjs +0 -0
  187. /package/{esm2020 → esm2022}/lib/data-sources/entita-metadata-viewer.ds.mjs +0 -0
  188. /package/{esm2020 → esm2022}/lib/data-sources/hero.ds.mjs +0 -0
  189. /package/{esm2020 → esm2022}/lib/data-sources/home-hero-patrimonio.ds.mjs +0 -0
  190. /package/{esm2020 → esm2022}/lib/data-sources/home-item-tags-wrapper.ds.mjs +0 -0
  191. /package/{esm2020 → esm2022}/lib/data-sources/index.mjs +0 -0
  192. /package/{esm2020 → esm2022}/lib/data-sources/scheda-inner-title.ds.mjs +0 -0
  193. /package/{esm2020 → esm2022}/lib/data-sources/scheda-metadata.ds.mjs +0 -0
  194. /package/{esm2020 → esm2022}/lib/data-sources/search-layout-tabs.ds.mjs +0 -0
  195. /package/{esm2020 → esm2022}/lib/data-sources/table.ds.mjs +0 -0
  196. /package/{esm2020 → esm2022}/lib/event-handlers/home-hero-patrimonio.eh.mjs +0 -0
  197. /package/{esm2020 → esm2022}/lib/event-handlers/index.mjs +0 -0
  198. /package/{esm2020 → esm2022}/lib/event-handlers/search-layout-tabs.eh.mjs +0 -0
  199. /package/{esm2020 → esm2022}/lib/event-handlers/table.eh.mjs +0 -0
  200. /package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.config.mjs +0 -0
  201. /package/{esm2020 → esm2022}/lib/layouts/collection-layout/collection-layout.types.mjs +0 -0
  202. /package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.config.mjs +0 -0
  203. /package/{esm2020 → esm2022}/lib/layouts/entita-layout/entita-layout.types.mjs +0 -0
  204. /package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.config.mjs +0 -0
  205. /package/{esm2020 → esm2022}/lib/layouts/gallery-layout/gallery-layout.eh.mjs +0 -0
  206. /package/{esm2020 → esm2022}/lib/layouts/home-layout/home-layout.config.mjs +0 -0
  207. /package/{esm2020 → esm2022}/lib/layouts/index.mjs +0 -0
  208. /package/{esm2020 → esm2022}/lib/layouts/map-layout/map-layout.config.mjs +0 -0
  209. /package/{esm2020 → esm2022}/lib/layouts/scheda-layout/scheda-layout.config.mjs +0 -0
  210. /package/{esm2020 → esm2022}/lib/layouts/search-layout/search-layout.config.mjs +0 -0
  211. /package/{esm2020 → esm2022}/lib/layouts/timeline-layout/timeline-layout.config.mjs +0 -0
  212. /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-select.mjs +0 -0
  213. /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/aw-facet-input-text.mjs +0 -0
  214. /package/{esm2020 → esm2022}/lib/search/aw-facet-inputs/index.mjs +0 -0
  215. /package/{esm2020 → esm2022}/net7-boilerplate-arianna.mjs +0 -0
  216. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,298 +0,0 @@
1
- import { LayoutDataSource } from '@net7/core';
2
- import { Subject, forkJoin, fromEvent } from 'rxjs';
3
- import { debounceTime, takeUntil } from 'rxjs/operators';
4
- import { helpers } from '@net7/boilerplate-common';
5
- import { getHeadTitle } from '../../helpers/title.helper';
6
- export class AwHomeLayoutDS extends LayoutDataSource {
7
- constructor() {
8
- super(...arguments);
9
- this.facetInputs = {};
10
- this.autocompletePopoverOpen = false;
11
- this.autocompleteChanged$ = new Subject();
12
- this.configId = 'home-layout';
13
- this.numOfItemsStr = null;
14
- this.currentHoverEntity = null;
15
- this.hasScrollBackground = false;
16
- this.resultsLimit = -1;
17
- this.selectedEntitiesIds = [];
18
- this.destroyed$ = new Subject();
19
- this.homeAutocompleteIsLoading = false;
20
- this.resultsListIsLoading = false;
21
- /** Enabled from: arianna-config/features-enabled/carousel */
22
- this.carouselEnabled = false;
23
- // ===== BUBBLE CHART =====
24
- this.bubblesEnabled = false; // true if this Arianna Web project has the bubble chart module
25
- this.selectedBubbles = []; // array of IDs
26
- this.updateComponent = (id, data, options) => {
27
- // update components from EH
28
- if (options) {
29
- this.one(id).updateOptions(options);
30
- }
31
- this.one(id).update(data);
32
- };
33
- }
34
- // ========================
35
- onInit({ communication, mainState, configuration, tippy, }) {
36
- this.communication = communication;
37
- this.configuration = configuration;
38
- // this.facetData = [];
39
- this.mainState = mainState;
40
- this.tippy = tippy;
41
- this.resultsLimit = this.configuration.get(this.configId)['results-limit'];
42
- this.bubblesEnabled = this.configuration.get('features-enabled')?.bubblechart;
43
- this.carouselEnabled = this.configuration.get('features-enabled')?.carousel;
44
- if (this.carouselEnabled) {
45
- this.loadCarousel();
46
- }
47
- this.one('aw-hero').update(this.configuration.get(this.configId)['top-hero']);
48
- this.one('aw-home-hero-patrimonio').update(this.configuration.get(this.configId)['bottom-hero']);
49
- // update streams
50
- this.mainState.updateCustom('currentNav', 'home');
51
- this.setHeadTitle();
52
- // listen autocomplete changes
53
- this._listenAutoCompleteChanges();
54
- this.outerLinks = this.configuration.get(this.configId)['outer-links'].test;
55
- this.outerLinksTitle = this.configuration.get(this.configId)['outer-links'].title;
56
- this.outerLinksDescription = this.configuration.get(this.configId)['outer-links'].description;
57
- this.one('aw-bubble-chart').updateOptions({
58
- selectable: true,
59
- config: this.configuration,
60
- limit: this.configuration.get('bubble-chart').bubbleLimit,
61
- });
62
- this.one('aw-chart-tippy').updateOptions({
63
- basePath: this.configuration.get('paths').entitaBasePath,
64
- selectable: true,
65
- });
66
- }
67
- onDestroy() {
68
- this.destroyed$.next();
69
- }
70
- makeRequest$(query, params) {
71
- // make request from EH
72
- return this.communication.request$(query, {
73
- onError: (error) => console.error(error),
74
- params,
75
- });
76
- }
77
- initialFilterRequest() {
78
- return this.communication.request$('globalFilter', {
79
- onError: (error) => console.error(error),
80
- params: {
81
- entitiesListSize: this.configuration.get('bubble-chart').bubbleLimit,
82
- },
83
- });
84
- }
85
- parseInitialRequest(response) {
86
- this.firstBubbleResponse = response.entitiesData;
87
- const facetData = [];
88
- response.typeOfEntityData.forEach((toe) => {
89
- const TOEconfigData = this.configuration.get('config-keys')[toe.type];
90
- facetData.push({
91
- ...toe,
92
- enabled: true,
93
- locked: false,
94
- ...TOEconfigData,
95
- });
96
- });
97
- this.one('aw-home-facets-wrapper').updateOptions({
98
- pageConfig: this.configuration.get(this.configId),
99
- paths: this.configuration.get('paths')
100
- });
101
- this.one('aw-home-facets-wrapper').update(facetData);
102
- }
103
- renderPreviewsFromApolloQuery(response) {
104
- if (!response || !response.itemsPagination) {
105
- return;
106
- }
107
- let numOfItems = response.itemsPagination.totalCount;
108
- if (numOfItems > 0) {
109
- let numOfThousand = 0;
110
- while (numOfItems > 999) {
111
- numOfItems -= 1000;
112
- numOfThousand += 1;
113
- }
114
- let numOfItemsTmpStr = `${numOfItems}`;
115
- if (numOfItems < 10)
116
- numOfItemsTmpStr = `00${numOfItems}`;
117
- else if (numOfItems < 100)
118
- numOfItemsTmpStr = `0${numOfItems}`;
119
- if (numOfThousand > 0)
120
- this.numOfItemsStr = `${numOfThousand}.${numOfItemsTmpStr}`;
121
- else
122
- this.numOfItemsStr = `${numOfItems}`;
123
- }
124
- else {
125
- this.numOfItemsStr = '0';
126
- }
127
- this.one('aw-linked-objects').updateOptions({
128
- context: 'home',
129
- config: this.configuration,
130
- });
131
- this.one('aw-linked-objects').update(response.itemsPagination);
132
- // scroll control
133
- setTimeout(() => {
134
- this._scrollBackgroundControl();
135
- });
136
- }
137
- updateTags(onlyBubbles) {
138
- if (!onlyBubbles) {
139
- this.renderItemTags();
140
- }
141
- }
142
- handleFacetSearchChange(change) {
143
- const payload = change.inputPayload;
144
- const { value } = change;
145
- // store the entered text in facetInputs
146
- this.facetInputs[payload] = value;
147
- }
148
- renderItemTags() {
149
- /*
150
- Try to build an item tag for each selected query looking at the data from the
151
- first response. If the needed bubble data cannot be found, ask the backend
152
- for that bubble's data.
153
- */
154
- const queryList = []; // list of pending queries
155
- const tagsData = []; // list of tags data built from query
156
- this.selectedBubbles.forEach((b) => {
157
- const theBubble = this.firstBubbleResponse.find((el) => el.entity.id === b);
158
- if (theBubble) { // if a bubble was found
159
- const bubbleConfig = this.configuration.get('config-keys')[theBubble.entity.typeOfEntity];
160
- tagsData.push({
161
- label: theBubble.entity.label,
162
- icon: 'n7-icon-close',
163
- payload: b,
164
- classes: `tag-${bubbleConfig['class-name']}`,
165
- });
166
- }
167
- else { // if the bubble was not found, make a query
168
- const params = { entityId: b, entitiesListSize: 1 };
169
- queryList.push(this.makeRequest$('getMissingBubble', params));
170
- }
171
- });
172
- if (queryList.length > 0) { // if there are pending bubble queries
173
- forkJoin(queryList).subscribe((forkres) => {
174
- forkres.forEach((r) => {
175
- const bubbleConfig = this.configuration.get('config-keys')[r.typeOfEntity];
176
- tagsData.push({
177
- label: r.label,
178
- icon: 'n7-icon-close',
179
- payload: r.id,
180
- classes: `tag-${bubbleConfig['class-name']}`,
181
- });
182
- });
183
- this.one('aw-home-item-tags-wrapper').update(tagsData);
184
- });
185
- }
186
- else {
187
- this.one('aw-home-item-tags-wrapper').update(tagsData);
188
- }
189
- }
190
- /**
191
- * Loads data for the carousel component
192
- */
193
- loadCarousel() {
194
- const baseUrls = this.configuration.get('baseUrls') || {};
195
- const baseUrl = baseUrls.portaleMatriceServer || null;
196
- this.communication.request$('getSlider', baseUrl ? {
197
- params: { baseUrl }
198
- } : {}).subscribe({
199
- next: (res) => {
200
- if (res) {
201
- this.one('aw-carousel').update(res);
202
- }
203
- },
204
- error: (err) => {
205
- console.error(err);
206
- this.carouselEnabled = false;
207
- },
208
- });
209
- }
210
- onHeroChange(value) {
211
- if (value) {
212
- const escapedValue = helpers.escapeQuotes(value);
213
- this.autocompleteChanged$.next(escapedValue);
214
- this.homeAutocompleteIsLoading = true;
215
- this.homeAutocompleteQuery = escapedValue;
216
- if (!this.autocompletePopoverOpen) {
217
- this._toggleAutocompletePopover();
218
- }
219
- }
220
- else if (this.autocompletePopoverOpen) {
221
- this._toggleAutocompletePopover();
222
- }
223
- }
224
- _scrollBackgroundControl() {
225
- const node = document.getElementById('bubble-results-list');
226
- if (!node)
227
- return;
228
- const source$ = fromEvent(node, 'scroll');
229
- // height control
230
- setTimeout(() => {
231
- this._setHasScrollBackground(node);
232
- }, 500);
233
- // scroll listen
234
- source$.pipe(debounceTime(50)).subscribe(({ target }) => {
235
- this._setHasScrollBackground(target);
236
- });
237
- }
238
- _setHasScrollBackground(target) {
239
- this.hasScrollBackground = target ? (target.scrollHeight > (target.scrollTop + target.clientHeight)) : false;
240
- }
241
- _listenAutoCompleteChanges() {
242
- this.one('aw-home-autocomplete').updateOptions({
243
- keys: this.configuration.get('config-keys'),
244
- config: this.configuration,
245
- labels: this.configuration.get('labels'),
246
- paths: this.configuration.get('paths'),
247
- });
248
- this.autocompleteChanged$.pipe(debounceTime(500), takeUntil(this.destroyed$)).subscribe((value) => {
249
- this.communication.request$('autoComplete', {
250
- onError: (error) => console.error(error),
251
- params: {
252
- input: value,
253
- itemsPagination: { offset: 0, limit: this.configuration.get(this.configId)['results-limit'] },
254
- },
255
- }).subscribe((response) => {
256
- this.homeAutocompleteIsLoading = false;
257
- this.one('aw-home-autocomplete').update({
258
- response,
259
- query: value,
260
- });
261
- });
262
- });
263
- }
264
- _toggleAutocompletePopover() {
265
- if (!this.autocompletePopover) {
266
- const template = document.getElementById('aw-home-advanced-autocomplete-popover');
267
- template.style.display = 'block';
268
- const [popOver] = this.tippy('.aw-home__top-hero .n7-hero__input', {
269
- content: template,
270
- trigger: 'manual',
271
- interactive: true,
272
- arrow: false,
273
- flip: false,
274
- appendTo: 'parent',
275
- theme: 'light-border',
276
- placement: 'bottom-start',
277
- maxWidth: '100%',
278
- onHidden: () => { this.autocompletePopoverOpen = false; },
279
- });
280
- this.autocompletePopover = popOver;
281
- }
282
- if (this.autocompletePopoverOpen) {
283
- this.autocompletePopover.hide();
284
- }
285
- else {
286
- this.autocompletePopover.show();
287
- }
288
- this.autocompletePopoverOpen = !this.autocompletePopoverOpen;
289
- }
290
- setHeadTitle() {
291
- this.mainState.update('headTitle', getHeadTitle({
292
- name: this.configuration.get('customer'),
293
- pageName: this.configuration.get(this.configId)?.pageName,
294
- pageDefault: 'Homepage',
295
- }));
296
- }
297
- }
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS1sYXlvdXQuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uNy1ib2lsZXJwbGF0ZS1hcmlhbm5hL3NyYy9saWIvbGF5b3V0cy9ob21lLWxheW91dC9ob21lLWxheW91dC5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUF3QixPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFBcEQ7O1FBU1UsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFJdEIsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBRWhDLHlCQUFvQixHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXZELGFBQVEsR0FBRyxhQUFhLENBQUM7UUFFekIsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFFN0IsdUJBQWtCLEdBQVEsSUFBSSxDQUFDO1FBRS9CLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUU1QixpQkFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQVV4QixlQUFVLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFMUMsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBRWxDLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUVwQyw2REFBNkQ7UUFDdEQsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFL0IsMkJBQTJCO1FBQ3BCLG1CQUFjLEdBQUcsS0FB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dUIsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUMvRCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDeEMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRO1lBQ3pELFdBQVcsRUFBRSxVQUFVO1NBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGF5b3V0RGF0YVNvdXJjZSB9IGZyb20gJ0BuZXQ3L2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZm9ya0pvaW4sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uU2VydmljZSwgaGVscGVycyB9IGZyb20gJ0BuZXQ3L2JvaWxlcnBsYXRlLWNvbW1vbic7XG5pbXBvcnQgeyBnZXRIZWFkVGl0bGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3RpdGxlLmhlbHBlcic7XG5cbmV4cG9ydCBjbGFzcyBBd0hvbWVMYXlvdXREUyBleHRlbmRzIExheW91dERhdGFTb3VyY2Uge1xuICBwcml2YXRlIGNvbW11bmljYXRpb246IENvbW11bmljYXRpb25TZXJ2aWNlO1xuXG4gIHByaXZhdGUgbWFpblN0YXRlOiBhbnk7XG5cbiAgcHJpdmF0ZSB0aXBweTogYW55O1xuXG4gIHByaXZhdGUgY29uZmlndXJhdGlvbjogYW55O1xuXG4gIHByaXZhdGUgZmFjZXRJbnB1dHM6IGFueSA9IHt9O1xuXG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlUG9wb3ZlcjogYW55O1xuXG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlUG9wb3Zlck9wZW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGF1dG9jb21wbGV0ZUNoYW5nZWQkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBjb25maWdJZCA9ICdob21lLWxheW91dCc7XG5cbiAgcHVibGljIG51bU9mSXRlbXNTdHI6IHN0cmluZyA9IG51bGw7XG5cbiAgcHVibGljIGN1cnJlbnRIb3ZlckVudGl0eTogYW55ID0gbnVsbDtcblxuICBwdWJsaWMgaGFzU2Nyb2xsQmFja2dyb3VuZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZXN1bHRzTGltaXQgPSAtMTtcblxuICBwdWJsaWMgc2VsZWN0ZWRFbnRpdGllc0lkcyA9IFtdO1xuXG4gIHB1YmxpYyBvdXRlckxpbmtzOiBhbnk7XG5cbiAgcHVibGljIG91dGVyTGlua3NUaXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBvdXRlckxpbmtzRGVzY3JpcHRpb246IHN0cmluZztcblxuICBwdWJsaWMgaG9tZUF1dG9jb21wbGV0ZVF1ZXJ5OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBkZXN0cm95ZWQkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBob21lQXV0b2NvbXBsZXRlSXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgcHVibGljIHJlc3VsdHNMaXN0SXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqIEVuYWJsZWQgZnJvbTogYXJpYW5uYS1jb25maWcvZmVhdHVyZXMtZW5hYmxlZC9jYXJvdXNlbCAqL1xuICBwdWJsaWMgY2Fyb3VzZWxFbmFibGVkID0gZmFsc2U7XG5cbiAgLy8gPT09PT0gQlVCQkxFIENIQVJUID09PT09XG4gIHB1YmxpYyBidWJibGVzRW5hYmxlZCA9IGZhbHNlOyAvLyB0cnVlIGlmIHRoaXMgQXJpYW5uYSBXZWIgcHJvamVjdCBoYXMgdGhlIGJ1YmJsZSBjaGFydCBtb2R1bGVcblxuICBwdWJsaWMgc2VsZWN0ZWRCdWJibGVzOiBhbnlbXSA9IFtdOyAvLyBhcnJheSBvZiBJRHNcblxuICAvLyBzdG9yZSBsYXN0IGJ1YmJsZSByZXNwb25zZSB0byByZWZyZXNoIHRoZSBncmFwaCB3aXRoIHRoZSBzYW1lIGRhdGFcbiAgcHVibGljIGxhc3RCdWJibGVSZXNwb25zZTogYW55O1xuXG4gIC8vIHN0b3JlIHRoZSBmaXJzdCBhcnJheSBvZiBidWJibGVzLCB0byBmaW5kIHRoZW0gaW4gY2FzZSBvZiBubyByZXN1bHRzLlxuICBwdWJsaWMgZmlyc3RCdWJibGVSZXNwb25zZTogYW55O1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvbkluaXQoe1xuICAgIGNvbW11bmljYXRpb24sIG1haW5TdGF0ZSwgY29uZmlndXJhdGlvbiwgdGlwcHksXG4gIH0pIHtcbiAgICB0aGlzLmNvbW11bmljYXRpb24gPSBjb21tdW5pY2F0aW9uO1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgLy8gdGhpcy5mYWNldERhdGEgPSBbXTtcbiAgICB0aGlzLm1haW5TdGF0ZSA9IG1haW5TdGF0ZTtcbiAgICB0aGlzLnRpcHB5ID0gdGlwcHk7XG4gICAgdGhpcy5yZXN1bHRzTGltaXQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KHRoaXMuY29uZmlnSWQpWydyZXN1bHRzLWxpbWl0J107XG4gICAgdGhpcy5idWJibGVzRW5hYmxlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2ZlYXR1cmVzLWVuYWJsZWQnKT8uYnViYmxlY2hhcnQ7XG4gICAgdGhpcy5jYXJvdXNlbEVuYWJsZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdmZWF0dXJlcy1lbmFibGVkJyk/LmNhcm91c2VsO1xuICAgIGlmICh0aGlzLmNhcm91c2VsRW5hYmxlZCkge1xuICAgICAgdGhpcy5sb2FkQ2Fyb3VzZWwoKTtcbiAgICB9XG4gICAgdGhpcy5vbmUoJ2F3LWhlcm8nKS51cGRhdGUodGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKVsndG9wLWhlcm8nXSk7XG4gICAgdGhpcy5vbmUoJ2F3LWhvbWUtaGVyby1wYXRyaW1vbmlvJykudXBkYXRlKHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZClbJ2JvdHRvbS1oZXJvJ10pO1xuICAgIC8vIHVwZGF0ZSBzdHJlYW1zXG4gICAgdGhpcy5tYWluU3RhdGUudXBkYXRlQ3VzdG9tKCdjdXJyZW50TmF2JywgJ2hvbWUnKTtcbiAgICB0aGlzLnNldEhlYWRUaXRsZSgpO1xuICAgIC8vIGxpc3RlbiBhdXRvY29tcGxldGUgY2hhbmdlc1xuICAgIHRoaXMuX2xpc3RlbkF1dG9Db21wbGV0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLm91dGVyTGlua3MgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KHRoaXMuY29uZmlnSWQpWydvdXRlci1saW5rcyddLnRlc3Q7XG4gICAgdGhpcy5vdXRlckxpbmtzVGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KHRoaXMuY29uZmlnSWQpWydvdXRlci1saW5rcyddLnRpdGxlO1xuICAgIHRoaXMub3V0ZXJMaW5rc0Rlc2NyaXB0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCh0aGlzLmNvbmZpZ0lkKVsnb3V0ZXItbGlua3MnXS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLm9uZSgnYXctYnViYmxlLWNoYXJ0JykudXBkYXRlT3B0aW9ucyh7XG4gICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICBsaW1pdDogdGhpcy5jb25maWd1cmF0aW9uLmdldCgnYnViYmxlLWNoYXJ0JykuYnViYmxlTGltaXQsXG4gICAgfSk7XG4gICAgdGhpcy5vbmUoJ2F3LWNoYXJ0LXRpcHB5JykudXBkYXRlT3B0aW9ucyh7XG4gICAgICBiYXNlUGF0aDogdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5lbnRpdGFCYXNlUGF0aCxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBtYWtlUmVxdWVzdCQocXVlcnksIHBhcmFtcykge1xuICAgIC8vIG1ha2UgcmVxdWVzdCBmcm9tIEVIXG4gICAgcmV0dXJuIHRoaXMuY29tbXVuaWNhdGlvbi5yZXF1ZXN0JChxdWVyeSwge1xuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSxcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVDb21wb25lbnQgPSAoaWQsIGRhdGEsIG9wdGlvbnM/KSA9PiB7XG4gICAgLy8gdXBkYXRlIGNvbXBvbmVudHMgZnJvbSBFSFxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLm9uZShpZCkudXBkYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5vbmUoaWQpLnVwZGF0ZShkYXRhKTtcbiAgfTtcblxuICBpbml0aWFsRmlsdGVyUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tdW5pY2F0aW9uLnJlcXVlc3QkKCdnbG9iYWxGaWx0ZXInLCB7XG4gICAgICBvbkVycm9yOiAoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoZXJyb3IpLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGVudGl0aWVzTGlzdFNpemU6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2J1YmJsZS1jaGFydCcpLmJ1YmJsZUxpbWl0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlSW5pdGlhbFJlcXVlc3QocmVzcG9uc2UpIHtcbiAgICB0aGlzLmZpcnN0QnViYmxlUmVzcG9uc2UgPSByZXNwb25zZS5lbnRpdGllc0RhdGE7XG4gICAgY29uc3QgZmFjZXREYXRhID0gW107XG4gICAgcmVzcG9uc2UudHlwZU9mRW50aXR5RGF0YS5mb3JFYWNoKCh0b2UpID0+IHtcbiAgICAgIGNvbnN0IFRPRWNvbmZpZ0RhdGEgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdjb25maWcta2V5cycpW3RvZS50eXBlXTtcbiAgICAgIGZhY2V0RGF0YS5wdXNoKHtcbiAgICAgICAgLi4udG9lLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBsb2NrZWQ6IGZhbHNlLFxuICAgICAgICAuLi5UT0Vjb25maWdEYXRhLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5vbmUoJ2F3LWhvbWUtZmFjZXRzLXdyYXBwZXInKS51cGRhdGVPcHRpb25zKHtcbiAgICAgIHBhZ2VDb25maWc6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZCksXG4gICAgICBwYXRoczogdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKVxuICAgIH0pO1xuICAgIHRoaXMub25lKCdhdy1ob21lLWZhY2V0cy13cmFwcGVyJykudXBkYXRlKGZhY2V0RGF0YSk7XG4gIH1cblxuICByZW5kZXJQcmV2aWV3c0Zyb21BcG9sbG9RdWVyeShyZXNwb25zZTogYW55KSB7XG4gICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuaXRlbXNQYWdpbmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBudW1PZkl0ZW1zID0gcmVzcG9uc2UuaXRlbXNQYWdpbmF0aW9uLnRvdGFsQ291bnQ7XG4gICAgaWYgKG51bU9mSXRlbXMgPiAwKSB7XG4gICAgICBsZXQgbnVtT2ZUaG91c2FuZCA9IDA7XG4gICAgICB3aGlsZSAobnVtT2ZJdGVtcyA+IDk5OSkge1xuICAgICAgICBudW1PZkl0ZW1zIC09IDEwMDA7XG4gICAgICAgIG51bU9mVGhvdXNhbmQgKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBudW1PZkl0ZW1zVG1wU3RyID0gYCR7bnVtT2ZJdGVtc31gO1xuICAgICAgaWYgKG51bU9mSXRlbXMgPCAxMCkgbnVtT2ZJdGVtc1RtcFN0ciA9IGAwMCR7bnVtT2ZJdGVtc31gO1xuICAgICAgZWxzZSBpZiAobnVtT2ZJdGVtcyA8IDEwMCkgbnVtT2ZJdGVtc1RtcFN0ciA9IGAwJHtudW1PZkl0ZW1zfWA7XG4gICAgICBpZiAobnVtT2ZUaG91c2FuZCA+IDApIHRoaXMubnVtT2ZJdGVtc1N0ciA9IGAke251bU9mVGhvdXNhbmR9LiR7bnVtT2ZJdGVtc1RtcFN0cn1gO1xuICAgICAgZWxzZSB0aGlzLm51bU9mSXRlbXNTdHIgPSBgJHtudW1PZkl0ZW1zfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubnVtT2ZJdGVtc1N0ciA9ICcwJztcbiAgICB9XG4gICAgdGhpcy5vbmUoJ2F3LWxpbmtlZC1vYmplY3RzJykudXBkYXRlT3B0aW9ucyh7XG4gICAgICBjb250ZXh0OiAnaG9tZScsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICB9KTtcbiAgICB0aGlzLm9uZSgnYXctbGlua2VkLW9iamVjdHMnKS51cGRhdGUocmVzcG9uc2UuaXRlbXNQYWdpbmF0aW9uKTtcblxuICAgIC8vIHNjcm9sbCBjb250cm9sXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9zY3JvbGxCYWNrZ3JvdW5kQ29udHJvbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVRhZ3Mob25seUJ1YmJsZXM/OiBib29sZWFuKSB7XG4gICAgaWYgKCFvbmx5QnViYmxlcykge1xuICAgICAgdGhpcy5yZW5kZXJJdGVtVGFncygpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZhY2V0U2VhcmNoQ2hhbmdlKGNoYW5nZSkge1xuICAgIGNvbnN0IHBheWxvYWQ6IHN0cmluZyA9IGNoYW5nZS5pbnB1dFBheWxvYWQ7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gY2hhbmdlO1xuICAgIC8vIHN0b3JlIHRoZSBlbnRlcmVkIHRleHQgaW4gZmFjZXRJbnB1dHNcbiAgICB0aGlzLmZhY2V0SW5wdXRzW3BheWxvYWRdID0gdmFsdWU7XG4gIH1cblxuICByZW5kZXJJdGVtVGFncygpIHtcbiAgICAvKlxuICAgICAgICAgIFRyeSB0byBidWlsZCBhbiBpdGVtIHRhZyBmb3IgZWFjaCBzZWxlY3RlZCBxdWVyeSBsb29raW5nIGF0IHRoZSBkYXRhIGZyb20gdGhlXG4gICAgICAgICAgZmlyc3QgcmVzcG9uc2UuIElmIHRoZSBuZWVkZWQgYnViYmxlIGRhdGEgY2Fubm90IGJlIGZvdW5kLCBhc2sgdGhlIGJhY2tlbmRcbiAgICAgICAgICBmb3IgdGhhdCBidWJibGUncyBkYXRhLlxuICAgICAgKi9cbiAgICBjb25zdCBxdWVyeUxpc3QgPSBbXTsgLy8gbGlzdCBvZiBwZW5kaW5nIHF1ZXJpZXNcbiAgICBjb25zdCB0YWdzRGF0YSA9IFtdOyAvLyBsaXN0IG9mIHRhZ3MgZGF0YSBidWlsdCBmcm9tIHF1ZXJ5XG4gICAgdGhpcy5zZWxlY3RlZEJ1YmJsZXMuZm9yRWFjaCgoYikgPT4geyAvLyB0cnkgdG8gZ2V0IHRoZSBkYXRhIG9mIGVhY2ggc2VsZWN0ZWQgYnViYmxlXG4gICAgICBjb25zdCB0aGVCdWJibGUgPSB0aGlzLmZpcnN0QnViYmxlUmVzcG9uc2UuZmluZCgoZWwpID0+IGVsLmVudGl0eS5pZCA9PT0gYik7XG4gICAgICBpZiAodGhlQnViYmxlKSB7IC8vIGlmIGEgYnViYmxlIHdhcyBmb3VuZFxuICAgICAgICBjb25zdCBidWJibGVDb25maWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdjb25maWcta2V5cycpW3RoZUJ1YmJsZS5lbnRpdHkudHlwZU9mRW50aXR5XTtcbiAgICAgICAgdGFnc0RhdGEucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHRoZUJ1YmJsZS5lbnRpdHkubGFiZWwsXG4gICAgICAgICAgaWNvbjogJ243LWljb24tY2xvc2UnLFxuICAgICAgICAgIHBheWxvYWQ6IGIsXG4gICAgICAgICAgY2xhc3NlczogYHRhZy0ke2J1YmJsZUNvbmZpZ1snY2xhc3MtbmFtZSddfWAsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHsgLy8gaWYgdGhlIGJ1YmJsZSB3YXMgbm90IGZvdW5kLCBtYWtlIGEgcXVlcnlcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBlbnRpdHlJZDogYiwgZW50aXRpZXNMaXN0U2l6ZTogMSB9O1xuICAgICAgICBxdWVyeUxpc3QucHVzaCh0aGlzLm1ha2VSZXF1ZXN0JCgnZ2V0TWlzc2luZ0J1YmJsZScsIHBhcmFtcykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChxdWVyeUxpc3QubGVuZ3RoID4gMCkgeyAvLyBpZiB0aGVyZSBhcmUgcGVuZGluZyBidWJibGUgcXVlcmllc1xuICAgICAgZm9ya0pvaW4ocXVlcnlMaXN0KS5zdWJzY3JpYmUoKGZvcmtyZXMpID0+IHtcbiAgICAgICAgZm9ya3Jlcy5mb3JFYWNoKChyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBidWJibGVDb25maWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdjb25maWcta2V5cycpW3IudHlwZU9mRW50aXR5XTtcbiAgICAgICAgICB0YWdzRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiByLmxhYmVsLFxuICAgICAgICAgICAgaWNvbjogJ243LWljb24tY2xvc2UnLFxuICAgICAgICAgICAgcGF5bG9hZDogci5pZCxcbiAgICAgICAgICAgIGNsYXNzZXM6IGB0YWctJHtidWJibGVDb25maWdbJ2NsYXNzLW5hbWUnXX1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbmUoJ2F3LWhvbWUtaXRlbS10YWdzLXdyYXBwZXInKS51cGRhdGUodGFnc0RhdGEpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25lKCdhdy1ob21lLWl0ZW0tdGFncy13cmFwcGVyJykudXBkYXRlKHRhZ3NEYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgZGF0YSBmb3IgdGhlIGNhcm91c2VsIGNvbXBvbmVudFxuICAgKi9cbiAgbG9hZENhcm91c2VsKCkge1xuICAgIGNvbnN0IGJhc2VVcmxzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgnYmFzZVVybHMnKSB8fCB7fTtcbiAgICBjb25zdCBiYXNlVXJsID0gYmFzZVVybHMucG9ydGFsZU1hdHJpY2VTZXJ2ZXIgfHwgbnVsbDtcbiAgICB0aGlzLmNvbW11bmljYXRpb24ucmVxdWVzdCQoJ2dldFNsaWRlcicsIGJhc2VVcmwgPyB7XG4gICAgICBwYXJhbXM6IHsgYmFzZVVybCB9XG4gICAgfSA6IHt9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5vbmUoJ2F3LWNhcm91c2VsJykudXBkYXRlKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWxFbmFibGVkID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25IZXJvQ2hhbmdlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBlc2NhcGVkVmFsdWUgPSBoZWxwZXJzLmVzY2FwZVF1b3Rlcyh2YWx1ZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUNoYW5nZWQkLm5leHQoZXNjYXBlZFZhbHVlKTtcbiAgICAgIHRoaXMuaG9tZUF1dG9jb21wbGV0ZUlzTG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmhvbWVBdXRvY29tcGxldGVRdWVyeSA9IGVzY2FwZWRWYWx1ZTtcbiAgICAgIGlmICghdGhpcy5hdXRvY29tcGxldGVQb3BvdmVyT3Blbikge1xuICAgICAgICB0aGlzLl90b2dnbGVBdXRvY29tcGxldGVQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmF1dG9jb21wbGV0ZVBvcG92ZXJPcGVuKSB7XG4gICAgICB0aGlzLl90b2dnbGVBdXRvY29tcGxldGVQb3BvdmVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsQmFja2dyb3VuZENvbnRyb2woKSB7XG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWJibGUtcmVzdWx0cy1saXN0Jyk7XG4gICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgY29uc3Qgc291cmNlJCA9IGZyb21FdmVudChub2RlLCAnc2Nyb2xsJyk7XG5cbiAgICAvLyBoZWlnaHQgY29udHJvbFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fc2V0SGFzU2Nyb2xsQmFja2dyb3VuZChub2RlKTtcbiAgICB9LCA1MDApO1xuXG4gICAgLy8gc2Nyb2xsIGxpc3RlblxuICAgIHNvdXJjZSQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgKS5zdWJzY3JpYmUoKHsgdGFyZ2V0IH06IHsgdGFyZ2V0OiBhbnkgfSkgPT4ge1xuICAgICAgdGhpcy5fc2V0SGFzU2Nyb2xsQmFja2dyb3VuZCh0YXJnZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0SGFzU2Nyb2xsQmFja2dyb3VuZCh0YXJnZXQpIHtcbiAgICB0aGlzLmhhc1Njcm9sbEJhY2tncm91bmQgPSB0YXJnZXQgPyAoXG4gICAgICB0YXJnZXQuc2Nyb2xsSGVpZ2h0ID4gKHRhcmdldC5zY3JvbGxUb3AgKyB0YXJnZXQuY2xpZW50SGVpZ2h0KVxuICAgICkgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkF1dG9Db21wbGV0ZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5vbmUoJ2F3LWhvbWUtYXV0b2NvbXBsZXRlJykudXBkYXRlT3B0aW9ucyh7XG4gICAgICBrZXlzOiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdjb25maWcta2V5cycpLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICBsYWJlbHM6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2xhYmVscycpLFxuICAgICAgcGF0aHM6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJyksXG4gICAgfSk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVDaGFuZ2VkJC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICApLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuY29tbXVuaWNhdGlvbi5yZXF1ZXN0JCgnYXV0b0NvbXBsZXRlJywge1xuICAgICAgICBvbkVycm9yOiAoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoZXJyb3IpLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBpbnB1dDogdmFsdWUsXG4gICAgICAgICAgaXRlbXNQYWdpbmF0aW9uOiB7IG9mZnNldDogMCwgbGltaXQ6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZClbJ3Jlc3VsdHMtbGltaXQnXSB9LFxuICAgICAgICB9LFxuICAgICAgfSkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmhvbWVBdXRvY29tcGxldGVJc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbmUoJ2F3LWhvbWUtYXV0b2NvbXBsZXRlJykudXBkYXRlKHtcbiAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICBxdWVyeTogdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVBdXRvY29tcGxldGVQb3BvdmVyKCkge1xuICAgIGlmICghdGhpcy5hdXRvY29tcGxldGVQb3BvdmVyKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdy1ob21lLWFkdmFuY2VkLWF1dG9jb21wbGV0ZS1wb3BvdmVyJyk7XG4gICAgICB0ZW1wbGF0ZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIGNvbnN0IFtwb3BPdmVyXSA9IHRoaXMudGlwcHkoJy5hdy1ob21lX190b3AtaGVybyAubjctaGVyb19faW5wdXQnLCB7XG4gICAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLFxuICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGFycm93OiBmYWxzZSxcbiAgICAgICAgZmxpcDogZmFsc2UsXG4gICAgICAgIGFwcGVuZFRvOiAncGFyZW50JyxcbiAgICAgICAgdGhlbWU6ICdsaWdodC1ib3JkZXInLFxuICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICBvbkhpZGRlbjogKCkgPT4geyB0aGlzLmF1dG9jb21wbGV0ZVBvcG92ZXJPcGVuID0gZmFsc2U7IH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlUG9wb3ZlciA9IHBvcE92ZXI7XG4gICAgfVxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVBvcG92ZXJPcGVuKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVBvcG92ZXIuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVBvcG92ZXIuc2hvdygpO1xuICAgIH1cbiAgICB0aGlzLmF1dG9jb21wbGV0ZVBvcG92ZXJPcGVuID0gIXRoaXMuYXV0b2NvbXBsZXRlUG9wb3Zlck9wZW47XG4gIH1cblxuICBwcml2YXRlIHNldEhlYWRUaXRsZSgpIHtcbiAgICB0aGlzLm1haW5TdGF0ZS51cGRhdGUoJ2hlYWRUaXRsZScsIGdldEhlYWRUaXRsZSh7XG4gICAgICBuYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdjdXN0b21lcicpLFxuICAgICAgcGFnZU5hbWU6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQodGhpcy5jb25maWdJZCk/LnBhZ2VOYW1lLFxuICAgICAgcGFnZURlZmF1bHQ6ICdIb21lcGFnZScsXG4gICAgfSkpO1xuICB9XG59XG4iXX0=
@@ -1,245 +0,0 @@
1
- import { EventHandler } from '@net7/core';
2
- import { Subject, forkJoin } from 'rxjs';
3
- import { helpers } from '@net7/boilerplate-common';
4
- export class AwHomeLayoutEH extends EventHandler {
5
- constructor() {
6
- super(...arguments);
7
- this.destroyed$ = new Subject();
8
- this.handleSimpleAutocompleteClick = (payload) => {
9
- this.emitOuter('facetclick', payload);
10
- };
11
- this.handleChartSelection = (payload) => {
12
- const selectedEntitiesIds = payload;
13
- this.dataSource.selectedBubbles = payload;
14
- this.dataSource.resultsListIsLoading = true;
15
- this.dataSource.makeRequest$('globalFilter', {
16
- selectedEntitiesIds,
17
- entitiesListSize: this.configuration.get('bubble-chart').bubbleLimit,
18
- }).subscribe((res) => {
19
- this.dataSource.resultsListIsLoading = false;
20
- if (res && res.entitiesData.length > 0) {
21
- // if some linked objects exist for the selected entities:
22
- this.dataSource.lastBubbleResponse = res.entitiesData;
23
- this.emitOuter('filterbubbleresponse', res.entitiesData);
24
- this.dataSource.renderPreviewsFromApolloQuery(res);
25
- this.dataSource.renderItemTags();
26
- }
27
- else {
28
- // if the backend returns an empty list of results:
29
- const queryList = [];
30
- this.dataSource.selectedBubbles.forEach((b) => {
31
- const params = { entityId: b, entitiesListSize: 1 };
32
- queryList.push(// make a query for each selected bubble
33
- this.dataSource.makeRequest$('getMissingBubble', params));
34
- });
35
- // await for every missing bubble and build a custom response
36
- forkJoin(queryList).subscribe((forkres) => {
37
- const customBubbles = [];
38
- forkres.forEach((r) => { customBubbles.push({ count: 0, entity: r }); });
39
- this.emitOuter('filterbubbleresponse', customBubbles);
40
- this.dataSource.renderPreviewsFromApolloQuery(res);
41
- this.dataSource.renderItemTags();
42
- });
43
- }
44
- });
45
- };
46
- }
47
- listen() {
48
- this.innerEvents$.subscribe(({ type, payload }) => {
49
- switch (type) {
50
- case 'aw-home-layout.init':
51
- this.dataSource.onInit(payload);
52
- this.loadFilters();
53
- this.configuration = payload.configuration;
54
- // scroll top
55
- window.scrollTo(0, 0);
56
- break;
57
- case 'aw-home-layout.outerlinkclick':
58
- this.emitGlobal('navigate', {
59
- handler: 'router',
60
- path: payload,
61
- });
62
- break;
63
- case 'aw-home-layout.destroy':
64
- this.dataSource.onDestroy();
65
- break;
66
- case 'aw-home-layout.bubbleresultsviewallclick':
67
- {
68
- const entityLinks = this.dataSource.selectedBubbles.join(',');
69
- const basePath = this.configuration.get('paths').searchBasePath;
70
- this.emitGlobal('navigate', {
71
- handler: 'router',
72
- path: [basePath],
73
- queryParams: { 'entity-links': entityLinks },
74
- });
75
- }
76
- break;
77
- case 'aw-home-layout.clearselection':
78
- this.emitOuter('clearselection');
79
- break;
80
- default:
81
- console.warn('(home) unhandled inner event of type: ', type);
82
- break;
83
- }
84
- });
85
- this.outerEvents$.subscribe(({ type, payload }) => {
86
- switch (type) {
87
- case 'aw-bubble-chart.d3end': // bounce the event, from bubble-chart to chart-tippy
88
- this.emitOuter('d3end', payload);
89
- break;
90
- case 'aw-chart-tippy.select':
91
- this.emitOuter('select', payload);
92
- break;
93
- case 'aw-hero.enter':
94
- {
95
- const query = helpers.escapeQuotes(payload.value);
96
- this.emitGlobal('navigate', {
97
- handler: 'router',
98
- path: [this.configuration.get('paths').searchBasePath],
99
- queryParams: { query },
100
- });
101
- }
102
- break;
103
- case 'aw-hero.change':
104
- this.dataSource.autocompleteValue = payload.value;
105
- this.dataSource.onHeroChange(payload.value);
106
- break;
107
- case 'aw-home-facets-wrapper.click':
108
- this.emitOuter('togglefilter', payload);
109
- break;
110
- case 'aw-home-facets-wrapper.change':
111
- if (!payload.value
112
- || (typeof payload.value === 'string' && payload.value.trim().length === 0)) {
113
- this.emitOuter('facetswrapperclose', { facetId: payload });
114
- }
115
- else if (payload.value) {
116
- this.emitOuter('facetswrapperrequest', { facetId: payload });
117
- // clear autocomplete results
118
- this.dataSource.updateComponent('aw-autocomplete-wrapper', { key: payload.value, response: null });
119
- const params = {
120
- input: payload.value,
121
- typeOfEntity: payload.inputPayload.replace(/-search/g, '').replace(/-/g, ' '),
122
- itemsPagination: {
123
- offset: 0, limit: this.configuration.get('home-layout')['results-limit'],
124
- },
125
- };
126
- this.dataSource.makeRequest$('autoComplete', params).subscribe((response) => {
127
- if (response.results.length < 1) {
128
- const fallback = {
129
- totalcount: 0,
130
- results: [
131
- {
132
- entity: {
133
- id: 'fallback',
134
- label: // use fallback string from configuration
135
- this.configuration.get('home-layout')['autocomplete-fallback']
136
- ? this.configuration.get('home-layout')['autocomplete-fallback']
137
- : 'Nessun risultato trovato',
138
- },
139
- },
140
- ],
141
- };
142
- // this.emitOuter('facetswrapperresponse', { facetId: payload, response: fallback })
143
- this.dataSource.updateComponent('aw-autocomplete-wrapper', { key: payload.value, response: fallback }, { config: this.configuration });
144
- }
145
- else {
146
- // this.emitOuter('facetswrapperresponse', { facetId: payload, response })
147
- this.dataSource.updateComponent('aw-autocomplete-wrapper', // ID
148
- { key: payload.value, response }, // DATA
149
- { config: this.configuration });
150
- }
151
- });
152
- }
153
- break;
154
- case 'aw-home-item-tags-wrapper.click':
155
- this.emitOuter('tagclick', payload);
156
- break;
157
- case 'aw-linked-objects.datarequest':
158
- {
159
- const { currentPage } = payload;
160
- const params = {
161
- selectedEntitiesIds: this.dataSource.selectedBubbles,
162
- itemsPagination: {
163
- offset: currentPage * this.dataSource.resultsLimit,
164
- limit: this.dataSource.resultsLimit,
165
- },
166
- };
167
- this.dataSource.makeRequest$('globalFilter', params).subscribe((res) => {
168
- if (res) {
169
- this.emitOuter('dataresponse', { res });
170
- }
171
- else {
172
- console.warn('Unable to fetch additional data.');
173
- }
174
- });
175
- }
176
- break;
177
- case 'aw-autocomplete-wrapper.clickresult':
178
- this.handleSimpleAutocompleteClick(payload);
179
- break;
180
- case 'aw-home-autocomplete.click':
181
- {
182
- const { source, type: payloadType } = payload;
183
- let basePath;
184
- if (source === 'item') {
185
- if (payloadType === 'oggetto-culturale') {
186
- basePath = this.configuration.get('paths').schedaBasePath;
187
- }
188
- else {
189
- basePath = this.configuration.get('paths').entitaBasePath;
190
- }
191
- this.emitGlobal('navigate', {
192
- handler: 'router',
193
- path: [basePath, payload.id, helpers.slugify(payload.title)],
194
- });
195
- }
196
- else if (source === 'showMore') {
197
- const query = this.dataSource.homeAutocompleteQuery;
198
- basePath = this.configuration.get('paths').searchBasePath;
199
- this.emitGlobal('navigate', {
200
- handler: 'router',
201
- path: [basePath],
202
- queryParams: { query },
203
- });
204
- }
205
- else if (source === 'extendsearch') { // click on <Cerca in tutti i campi> (call to action)
206
- this.emitGlobal('navigate', {
207
- handler: 'router',
208
- path: [this.configuration.get('paths').searchBasePath],
209
- queryParams: {
210
- query: this.dataSource.autocompleteValue,
211
- 'query-all': 1,
212
- },
213
- });
214
- }
215
- }
216
- break;
217
- case 'aw-bubble-chart.selection':
218
- this.handleChartSelection(payload);
219
- break;
220
- case 'aw-bubble-chart.lockfilter':
221
- this.emitOuter('lockfilter', payload); // let aw-home-facets-wrapper handle this event
222
- break;
223
- default:
224
- // console.warn('(home) unhandled outer event of type', type)
225
- break;
226
- }
227
- });
228
- }
229
- loadFilters() {
230
- this.dataSource.initialFilterRequest().subscribe((response) => {
231
- // console.log('(home) Apollo responded with:', response)
232
- if (!response) {
233
- return;
234
- }
235
- this.dataSource.parseInitialRequest(response);
236
- if (this.dataSource.bubblesEnabled) {
237
- this.emitOuter('filterbubbleresponse', response.entitiesData);
238
- }
239
- });
240
- }
241
- outerLinkClick(type, payload) {
242
- window.open(payload, '_blank');
243
- }
244
- }
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS1sYXlvdXQuZWguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uNy1ib2lsZXJwbGF0ZS1hcmlhbm5hL3NyYy9saWIvbGF5b3V0cy9ob21lLWxheW91dC9ob21lLWxheW91dC5laC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sY0FBZSxTQUFRLFlBQVk7SUFBaEQ7O1FBQ1UsZUFBVSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBdU0xQyxrQ0FBNkIsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQTtRQU1NLHlCQUFvQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtnQkFDM0MsbUJBQW1CO2dCQUNuQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXO2FBQ3JFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQzdDLElB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eEMsV0FBVyxFQUFFLENBQUM7aUNBQ2Y7NkJBQ0YsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO29CQUFDLE1BQU07Z0JBQ1IsS0FBSywyQkFBMkI7b0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkMsTUFBTTtnQkFDUixLQUFLLDRCQUE0QjtvQkFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7b0JBQ3RGLE1BQU07Z0JBQ1I7b0JBQ0UsNkRBQTZEO29CQUM3RCxNQUFNO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM1RCx5REFBeUQ7WUFDekQsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFBRSxPQUFPO2FBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUMvRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQU1NLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTztRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBcUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRIYW5kbGVyIH0gZnJvbSAnQG5ldDcvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaGVscGVycyB9IGZyb20gJ0BuZXQ3L2JvaWxlcnBsYXRlLWNvbW1vbic7XG5cbmV4cG9ydCBjbGFzcyBBd0hvbWVMYXlvdXRFSCBleHRlbmRzIEV2ZW50SGFuZGxlciB7XG4gIHByaXZhdGUgZGVzdHJveWVkJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIGNvbmZpZ3VyYXRpb246IGFueTtcblxuICBwcml2YXRlIHJvdXRlOiBhbnk7XG5cbiAgcHVibGljIGxpc3RlbigpIHtcbiAgICB0aGlzLmlubmVyRXZlbnRzJC5zdWJzY3JpYmUoKHsgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXctaG9tZS1sYXlvdXQuaW5pdCc6XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLm9uSW5pdChwYXlsb2FkKTtcbiAgICAgICAgICB0aGlzLmxvYWRGaWx0ZXJzKCk7XG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gcGF5bG9hZC5jb25maWd1cmF0aW9uO1xuICAgICAgICAgIC8vIHNjcm9sbCB0b3BcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWhvbWUtbGF5b3V0Lm91dGVybGlua2NsaWNrJzpcbiAgICAgICAgICB0aGlzLmVtaXRHbG9iYWwoJ25hdmlnYXRlJywge1xuICAgICAgICAgICAgaGFuZGxlcjogJ3JvdXRlcicsXG4gICAgICAgICAgICBwYXRoOiBwYXlsb2FkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1ob21lLWxheW91dC5kZXN0cm95JzpcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2Uub25EZXN0cm95KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWhvbWUtbGF5b3V0LmJ1YmJsZXJlc3VsdHN2aWV3YWxsY2xpY2snOiB7XG4gICAgICAgICAgY29uc3QgZW50aXR5TGlua3MgPSB0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0ZWRCdWJibGVzLmpvaW4oJywnKTtcbiAgICAgICAgICBjb25zdCBiYXNlUGF0aCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJykuc2VhcmNoQmFzZVBhdGg7XG4gICAgICAgICAgdGhpcy5lbWl0R2xvYmFsKCduYXZpZ2F0ZScsIHtcbiAgICAgICAgICAgIGhhbmRsZXI6ICdyb3V0ZXInLFxuICAgICAgICAgICAgcGF0aDogW2Jhc2VQYXRoXSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7ICdlbnRpdHktbGlua3MnOiBlbnRpdHlMaW5rcyB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWhvbWUtbGF5b3V0LmNsZWFyc2VsZWN0aW9uJzpcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcignY2xlYXJzZWxlY3Rpb24nKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oJyhob21lKSB1bmhhbmRsZWQgaW5uZXIgZXZlbnQgb2YgdHlwZTogJywgdHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm91dGVyRXZlbnRzJC5zdWJzY3JpYmUoKHsgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXctYnViYmxlLWNoYXJ0LmQzZW5kJzogLy8gYm91bmNlIHRoZSBldmVudCwgZnJvbSBidWJibGUtY2hhcnQgdG8gY2hhcnQtdGlwcHlcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcignZDNlbmQnLCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXctY2hhcnQtdGlwcHkuc2VsZWN0JzpcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcignc2VsZWN0JywgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWhlcm8uZW50ZXInOiB7XG4gICAgICAgICAgY29uc3QgcXVlcnkgPSBoZWxwZXJzLmVzY2FwZVF1b3RlcyhwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICB0aGlzLmVtaXRHbG9iYWwoJ25hdmlnYXRlJywge1xuICAgICAgICAgICAgaGFuZGxlcjogJ3JvdXRlcicsXG4gICAgICAgICAgICBwYXRoOiBbdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5zZWFyY2hCYXNlUGF0aF0sXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogeyBxdWVyeSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1oZXJvLmNoYW5nZSc6XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmF1dG9jb21wbGV0ZVZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2Uub25IZXJvQ2hhbmdlKHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1ob21lLWZhY2V0cy13cmFwcGVyLmNsaWNrJzpcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcigndG9nZ2xlZmlsdGVyJywgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWhvbWUtZmFjZXRzLXdyYXBwZXIuY2hhbmdlJzpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcGF5bG9hZC52YWx1ZVxuICAgICAgICAgICAgfHwgKHR5cGVvZiBwYXlsb2FkLnZhbHVlID09PSAnc3RyaW5nJyAmJiBwYXlsb2FkLnZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRPdXRlcignZmFjZXRzd3JhcHBlcmNsb3NlJywgeyBmYWNldElkOiBwYXlsb2FkIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ2ZhY2V0c3dyYXBwZXJyZXF1ZXN0JywgeyBmYWNldElkOiBwYXlsb2FkIH0pO1xuICAgICAgICAgICAgLy8gY2xlYXIgYXV0b2NvbXBsZXRlIHJlc3VsdHNcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVDb21wb25lbnQoXG4gICAgICAgICAgICAgICdhdy1hdXRvY29tcGxldGUtd3JhcHBlcicsXG4gICAgICAgICAgICAgIHsga2V5OiBwYXlsb2FkLnZhbHVlLCByZXNwb25zZTogbnVsbCB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgIHR5cGVPZkVudGl0eTogcGF5bG9hZC5pbnB1dFBheWxvYWQucmVwbGFjZSgvLXNlYXJjaC9nLCAnJykucmVwbGFjZSgvLS9nLCAnICcpLFxuICAgICAgICAgICAgICBpdGVtc1BhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsIGxpbWl0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdob21lLWxheW91dCcpWydyZXN1bHRzLWxpbWl0J10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLm1ha2VSZXF1ZXN0JCgnYXV0b0NvbXBsZXRlJywgcGFyYW1zKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHRvdGFsY291bnQ6IDAsXG4gICAgICAgICAgICAgICAgICByZXN1bHRzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZmFsbGJhY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IC8vIHVzZSBmYWxsYmFjayBzdHJpbmcgZnJvbSBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2hvbWUtbGF5b3V0JylbJ2F1dG9jb21wbGV0ZS1mYWxsYmFjayddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdob21lLWxheW91dCcpWydhdXRvY29tcGxldGUtZmFsbGJhY2snXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ05lc3N1biByaXN1bHRhdG8gdHJvdmF0bycsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmVtaXRPdXRlcignZmFjZXRzd3JhcHBlcnJlc3BvbnNlJywgeyBmYWNldElkOiBwYXlsb2FkLCByZXNwb25zZTogZmFsbGJhY2sgfSlcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgJ2F3LWF1dG9jb21wbGV0ZS13cmFwcGVyJyxcbiAgICAgICAgICAgICAgICAgIHsga2V5OiBwYXlsb2FkLnZhbHVlLCByZXNwb25zZTogZmFsbGJhY2sgfSxcbiAgICAgICAgICAgICAgICAgIHsgY29uZmlnOiB0aGlzLmNvbmZpZ3VyYXRpb24gfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuZW1pdE91dGVyKCdmYWNldHN3cmFwcGVycmVzcG9uc2UnLCB7IGZhY2V0SWQ6IHBheWxvYWQsIHJlc3BvbnNlIH0pXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgICdhdy1hdXRvY29tcGxldGUtd3JhcHBlcicsIC8vIElEXG4gICAgICAgICAgICAgICAgICB7IGtleTogcGF5bG9hZC52YWx1ZSwgcmVzcG9uc2UgfSwgLy8gREFUQVxuICAgICAgICAgICAgICAgICAgeyBjb25maWc6IHRoaXMuY29uZmlndXJhdGlvbiB9LCAvLyBPUFRJT05TXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1ob21lLWl0ZW0tdGFncy13cmFwcGVyLmNsaWNrJzpcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcigndGFnY2xpY2snLCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXctbGlua2VkLW9iamVjdHMuZGF0YXJlcXVlc3QnOiB7XG4gICAgICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gcGF5bG9hZDtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICBzZWxlY3RlZEVudGl0aWVzSWRzOiB0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0ZWRCdWJibGVzLFxuICAgICAgICAgICAgaXRlbXNQYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIG9mZnNldDogY3VycmVudFBhZ2UgKiB0aGlzLmRhdGFTb3VyY2UucmVzdWx0c0xpbWl0LFxuICAgICAgICAgICAgICBsaW1pdDogdGhpcy5kYXRhU291cmNlLnJlc3VsdHNMaW1pdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UubWFrZVJlcXVlc3QkKCdnbG9iYWxGaWx0ZXInLCBwYXJhbXMpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdE91dGVyKCdkYXRhcmVzcG9uc2UnLCB7IHJlcyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGZldGNoIGFkZGl0aW9uYWwgZGF0YS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSAnYXctYXV0b2NvbXBsZXRlLXdyYXBwZXIuY2xpY2tyZXN1bHQnOlxuICAgICAgICAgIHRoaXMuaGFuZGxlU2ltcGxlQXV0b2NvbXBsZXRlQ2xpY2socGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWhvbWUtYXV0b2NvbXBsZXRlLmNsaWNrJzoge1xuICAgICAgICAgIGNvbnN0IHsgc291cmNlLCB0eXBlOiBwYXlsb2FkVHlwZSB9ID0gcGF5bG9hZDtcbiAgICAgICAgICBsZXQgYmFzZVBhdGg7XG4gICAgICAgICAgaWYgKHNvdXJjZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgICAgICBpZiAocGF5bG9hZFR5cGUgPT09ICdvZ2dldHRvLWN1bHR1cmFsZScpIHtcbiAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLnNjaGVkYUJhc2VQYXRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLmVudGl0YUJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0R2xvYmFsKCduYXZpZ2F0ZScsIHtcbiAgICAgICAgICAgICAgaGFuZGxlcjogJ3JvdXRlcicsXG4gICAgICAgICAgICAgIHBhdGg6IFtiYXNlUGF0aCwgcGF5bG9hZC5pZCwgaGVscGVycy5zbHVnaWZ5KHBheWxvYWQudGl0bGUpXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlID09PSAnc2hvd01vcmUnKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZGF0YVNvdXJjZS5ob21lQXV0b2NvbXBsZXRlUXVlcnk7XG4gICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJykuc2VhcmNoQmFzZVBhdGg7XG4gICAgICAgICAgICB0aGlzLmVtaXRHbG9iYWwoJ25hdmlnYXRlJywge1xuICAgICAgICAgICAgICBoYW5kbGVyOiAncm91dGVyJyxcbiAgICAgICAgICAgICAgcGF0aDogW2Jhc2VQYXRoXSxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcXVlcnkgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlID09PSAnZXh0ZW5kc2VhcmNoJykgeyAvLyBjbGljayBvbiA8Q2VyY2EgaW4gdHV0dGkgaSBjYW1waT4gKGNhbGwgdG8gYWN0aW9uKVxuICAgICAgICAgICAgdGhpcy5lbWl0R2xvYmFsKCduYXZpZ2F0ZScsIHtcbiAgICAgICAgICAgICAgaGFuZGxlcjogJ3JvdXRlcicsXG4gICAgICAgICAgICAgIHBhdGg6IFt0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLnNlYXJjaEJhc2VQYXRoXSxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5kYXRhU291cmNlLmF1dG9jb21wbGV0ZVZhbHVlLFxuICAgICAgICAgICAgICAgICdxdWVyeS1hbGwnOiAxLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1idWJibGUtY2hhcnQuc2VsZWN0aW9uJzpcbiAgICAgICAgICB0aGlzLmhhbmRsZUNoYXJ0U2VsZWN0aW9uKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1idWJibGUtY2hhcnQubG9ja2ZpbHRlcic6XG4gICAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ2xvY2tmaWx0ZXInLCBwYXlsb2FkKTsgLy8gbGV0IGF3LWhvbWUtZmFjZXRzLXdyYXBwZXIgaGFuZGxlIHRoaXMgZXZlbnRcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBjb25zb2xlLndhcm4oJyhob21lKSB1bmhhbmRsZWQgb3V0ZXIgZXZlbnQgb2YgdHlwZScsIHR5cGUpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5pbml0aWFsRmlsdGVyUmVxdWVzdCgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCcoaG9tZSkgQXBvbGxvIHJlc3BvbmRlZCB3aXRoOicsIHJlc3BvbnNlKVxuICAgICAgaWYgKCFyZXNwb25zZSkgeyByZXR1cm47IH1cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYXJzZUluaXRpYWxSZXF1ZXN0KHJlc3BvbnNlKTtcbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UuYnViYmxlc0VuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ2ZpbHRlcmJ1YmJsZXJlc3BvbnNlJywgcmVzcG9uc2UuZW50aXRpZXNEYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVTaW1wbGVBdXRvY29tcGxldGVDbGljayA9IChwYXlsb2FkKSA9PiB7XG4gICAgdGhpcy5lbWl0T3V0ZXIoJ2ZhY2V0Y2xpY2snLCBwYXlsb2FkKTtcbiAgfVxuXG4gIHB1YmxpYyBvdXRlckxpbmtDbGljayh0eXBlLCBwYXlsb2FkKSB7XG4gICAgd2luZG93Lm9wZW4ocGF5bG9hZCwgJ19ibGFuaycpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNoYXJ0U2VsZWN0aW9uID0gKHBheWxvYWQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVudGl0aWVzSWRzID0gcGF5bG9hZDtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0ZWRCdWJibGVzID0gcGF5bG9hZDtcbiAgICB0aGlzLmRhdGFTb3VyY2UucmVzdWx0c0xpc3RJc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5tYWtlUmVxdWVzdCQoJ2dsb2JhbEZpbHRlcicsIHtcbiAgICAgIHNlbGVjdGVkRW50aXRpZXNJZHMsXG4gICAgICBlbnRpdGllc0xpc3RTaXplOiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdidWJibGUtY2hhcnQnKS5idWJibGVMaW1pdCxcbiAgICB9KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnJlc3VsdHNMaXN0SXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICBpZiAocmVzICYmIHJlcy5lbnRpdGllc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiBzb21lIGxpbmtlZCBvYmplY3RzIGV4aXN0IGZvciB0aGUgc2VsZWN0ZWQgZW50aXRpZXM6XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sYXN0QnViYmxlUmVzcG9uc2UgPSByZXMuZW50aXRpZXNEYXRhO1xuICAgICAgICB0aGlzLmVtaXRPdXRlcignZmlsdGVyYnViYmxlcmVzcG9uc2UnLCByZXMuZW50aXRpZXNEYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnJlbmRlclByZXZpZXdzRnJvbUFwb2xsb1F1ZXJ5KHJlcyk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJJdGVtVGFncygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgdGhlIGJhY2tlbmQgcmV0dXJucyBhbiBlbXB0eSBsaXN0IG9mIHJlc3VsdHM6XG4gICAgICAgIGNvbnN0IHF1ZXJ5TGlzdCA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc2VsZWN0ZWRCdWJibGVzLmZvckVhY2goKGIpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGVudGl0eUlkOiBiLCBlbnRpdGllc0xpc3RTaXplOiAxIH07XG4gICAgICAgICAgcXVlcnlMaXN0LnB1c2goIC8vIG1ha2UgYSBxdWVyeSBmb3IgZWFjaCBzZWxlY3RlZCBidWJibGVcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5tYWtlUmVxdWVzdCQoJ2dldE1pc3NpbmdCdWJibGUnLCBwYXJhbXMpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhd2FpdCBmb3IgZXZlcnkgbWlzc2luZyBidWJibGUgYW5kIGJ1aWxkIGEgY3VzdG9tIHJlc3BvbnNlXG4gICAgICAgIGZvcmtKb2luKHF1ZXJ5TGlzdCkuc3Vic2NyaWJlKChmb3JrcmVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VzdG9tQnViYmxlcyA9IFtdO1xuICAgICAgICAgIGZvcmtyZXMuZm9yRWFjaCgocikgPT4geyBjdXN0b21CdWJibGVzLnB1c2goeyBjb3VudDogMCwgZW50aXR5OiByIH0pOyB9KTtcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcignZmlsdGVyYnViYmxlcmVzcG9uc2UnLCBjdXN0b21CdWJibGVzKTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucmVuZGVyUHJldmlld3NGcm9tQXBvbGxvUXVlcnkocmVzKTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucmVuZGVySXRlbVRhZ3MoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==