@sinequa/atomic-angular 0.0.146 → 0.1.3

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 +145 -0
  2. package/components/no-result/i18n/en.json +5 -0
  3. package/components/no-result/i18n/fr.json +5 -0
  4. package/components/sort-selector/i18n/en.json +3 -0
  5. package/components/sort-selector/i18n/fr.json +3 -0
  6. package/components/source/i18n/en.json +3 -0
  7. package/components/source/i18n/fr.json +3 -0
  8. package/features/alerts/i18n/en.json +33 -0
  9. package/features/alerts/i18n/fr.json +33 -0
  10. package/features/bookmarks/i18n/en.json +11 -0
  11. package/features/bookmarks/i18n/fr.json +11 -0
  12. package/features/collections/i18n/en.json +17 -0
  13. package/features/collections/i18n/fr.json +16 -0
  14. package/features/dialogs/i18n/en.json +15 -0
  15. package/features/dialogs/i18n/fr.json +15 -0
  16. package/features/did-you-mean/i18n/en.json +5 -0
  17. package/features/did-you-mean/i18n/fr.json +5 -0
  18. package/features/drawer/i18n/en.json +22 -0
  19. package/features/drawer/i18n/fr.json +22 -0
  20. package/features/export/i18n/en.json +7 -0
  21. package/features/export/i18n/fr.json +7 -0
  22. package/features/feedback/i18n/en.json +26 -0
  23. package/features/feedback/i18n/fr.json +26 -0
  24. package/features/filters/i18n/en.json +14 -0
  25. package/features/filters/i18n/fr.json +14 -0
  26. package/features/labels/i18n/en.json +8 -0
  27. package/features/labels/i18n/fr.json +8 -0
  28. package/features/recent-searches/i18n/en.json +6 -0
  29. package/features/recent-searches/i18n/fr.json +6 -0
  30. package/features/saved-searches/i18n/en.json +8 -0
  31. package/features/saved-searches/i18n/fr.json +8 -0
  32. package/features/sign-in/i18n/en.json +12 -0
  33. package/features/sign-in/i18n/fr.json +14 -0
  34. package/fesm2022/sinequa-atomic-angular.mjs +8021 -2672
  35. package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
  36. package/index.d.ts +6036 -3
  37. package/package.json +68 -10
  38. package/assets/tailwind.css +0 -334
  39. package/esm2022/lib/assistant/index.mjs +0 -2
  40. package/esm2022/lib/assistant/signalR.web.service.mjs +0 -81
  41. package/esm2022/lib/components/dropdown-input.mjs +0 -97
  42. package/esm2022/lib/components/dropdown-list.mjs +0 -35
  43. package/esm2022/lib/components/dropdown.mjs +0 -127
  44. package/esm2022/lib/components/index.mjs +0 -7
  45. package/esm2022/lib/components/menu/index.mjs +0 -3
  46. package/esm2022/lib/components/menu/menu-item.mjs +0 -22
  47. package/esm2022/lib/components/menu/menu.mjs +0 -99
  48. package/esm2022/lib/components/metadata/index.mjs +0 -2
  49. package/esm2022/lib/components/metadata/metadata.component.mjs +0 -65
  50. package/esm2022/lib/components/theme/index.mjs +0 -3
  51. package/esm2022/lib/components/theme/theme-selector.component.mjs +0 -67
  52. package/esm2022/lib/components/theme/theme-toggle.component.mjs +0 -67
  53. package/esm2022/lib/directives/index.mjs +0 -5
  54. package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -47
  55. package/esm2022/lib/directives/select-article-on-click.directive.mjs +0 -39
  56. package/esm2022/lib/directives/show-bookmark.directive.mjs +0 -55
  57. package/esm2022/lib/directives/theme-provider.directive.mjs +0 -31
  58. package/esm2022/lib/guards/auth.guard.mjs +0 -27
  59. package/esm2022/lib/guards/index.mjs +0 -3
  60. package/esm2022/lib/guards/initialization.guard.mjs +0 -41
  61. package/esm2022/lib/interceptors/audit.interceptor.mjs +0 -23
  62. package/esm2022/lib/interceptors/auth.interceptor.mjs +0 -49
  63. package/esm2022/lib/interceptors/body.interceptor.mjs +0 -24
  64. package/esm2022/lib/interceptors/error.interceptor.mjs +0 -35
  65. package/esm2022/lib/interceptors/index.mjs +0 -7
  66. package/esm2022/lib/interceptors/toast.interceptor.mjs +0 -27
  67. package/esm2022/lib/models/aggregation.mjs +0 -2
  68. package/esm2022/lib/models/article-metadata.mjs +0 -2
  69. package/esm2022/lib/models/autocomplete.mjs +0 -2
  70. package/esm2022/lib/models/custom-json.mjs +0 -2
  71. package/esm2022/lib/models/filter-dropdown.mjs +0 -2
  72. package/esm2022/lib/models/index.mjs +0 -7
  73. package/esm2022/lib/models/user-settings.mjs +0 -2
  74. package/esm2022/lib/pipes/highlight-word.pipe.mjs +0 -33
  75. package/esm2022/lib/pipes/index.mjs +0 -3
  76. package/esm2022/lib/pipes/source-icon.pipe.mjs +0 -43
  77. package/esm2022/lib/public-api.mjs +0 -18
  78. package/esm2022/lib/resolvers/index.mjs +0 -2
  79. package/esm2022/lib/resolvers/query-name-resolver.mjs +0 -14
  80. package/esm2022/lib/resources/index.mjs +0 -2
  81. package/esm2022/lib/resources/themes.mjs +0 -53
  82. package/esm2022/lib/services/application.service.mjs +0 -245
  83. package/esm2022/lib/services/autocomplete.service.mjs +0 -85
  84. package/esm2022/lib/services/drawer/backdrop.service.mjs +0 -23
  85. package/esm2022/lib/services/drawer/drawer-stack.service.mjs +0 -152
  86. package/esm2022/lib/services/drawer/drawer.service.mjs +0 -38
  87. package/esm2022/lib/services/index.mjs +0 -12
  88. package/esm2022/lib/services/label.service.mjs +0 -161
  89. package/esm2022/lib/services/navigation.service.mjs +0 -59
  90. package/esm2022/lib/services/saved-searches.service.mjs +0 -75
  91. package/esm2022/lib/services/search.service.mjs +0 -89
  92. package/esm2022/lib/services/selection-history.service.mjs +0 -92
  93. package/esm2022/lib/services/selection.service.mjs +0 -87
  94. package/esm2022/lib/stores/aggregations.store.mjs +0 -59
  95. package/esm2022/lib/stores/app.store.mjs +0 -270
  96. package/esm2022/lib/stores/application.store.mjs +0 -87
  97. package/esm2022/lib/stores/index.mjs +0 -9
  98. package/esm2022/lib/stores/principal.store.mjs +0 -47
  99. package/esm2022/lib/stores/query-params.store.mjs +0 -207
  100. package/esm2022/lib/stores/selection.store.mjs +0 -45
  101. package/esm2022/lib/stores/theme.store.mjs +0 -116
  102. package/esm2022/lib/stores/user-settings.store.mjs +0 -391
  103. package/esm2022/lib/tokens/highlights.mjs +0 -32
  104. package/esm2022/lib/tokens/index.mjs +0 -2
  105. package/esm2022/lib/utils/debounced-signal.mjs +0 -38
  106. package/esm2022/lib/utils/index.mjs +0 -8
  107. package/esm2022/lib/utils/inline-worker.mjs +0 -40
  108. package/esm2022/lib/utils/query.mjs +0 -58
  109. package/esm2022/lib/utils/routes.mjs +0 -28
  110. package/esm2022/lib/utils/tailwind-utils.mjs +0 -6
  111. package/esm2022/lib/utils/theme-body-hook.mjs +0 -18
  112. package/esm2022/lib/utils/theme-registry.mjs +0 -6
  113. package/esm2022/lib/web-services/aggregations.service.mjs +0 -104
  114. package/esm2022/lib/web-services/app.service.mjs +0 -48
  115. package/esm2022/lib/web-services/audit.service.mjs +0 -122
  116. package/esm2022/lib/web-services/index.mjs +0 -10
  117. package/esm2022/lib/web-services/json-method-plugin.service.mjs +0 -54
  118. package/esm2022/lib/web-services/preview.service.mjs +0 -327
  119. package/esm2022/lib/web-services/principal.service.mjs +0 -46
  120. package/esm2022/lib/web-services/query.service.mjs +0 -123
  121. package/esm2022/lib/web-services/text-chunck.service.mjs +0 -46
  122. package/esm2022/public-api.mjs +0 -5
  123. package/esm2022/sinequa-atomic-angular.mjs +0 -5
  124. package/lib/assistant/index.d.ts +0 -1
  125. package/lib/assistant/signalR.web.service.d.ts +0 -46
  126. package/lib/components/dropdown-input.d.ts +0 -18
  127. package/lib/components/dropdown-list.d.ts +0 -8
  128. package/lib/components/dropdown.d.ts +0 -50
  129. package/lib/components/index.d.ts +0 -6
  130. package/lib/components/menu/index.d.ts +0 -2
  131. package/lib/components/menu/menu-item.d.ts +0 -8
  132. package/lib/components/menu/menu.d.ts +0 -24
  133. package/lib/components/metadata/index.d.ts +0 -1
  134. package/lib/components/metadata/metadata.component.d.ts +0 -24
  135. package/lib/components/theme/index.d.ts +0 -2
  136. package/lib/components/theme/theme-selector.component.d.ts +0 -70
  137. package/lib/components/theme/theme-toggle.component.d.ts +0 -10
  138. package/lib/directives/index.d.ts +0 -4
  139. package/lib/directives/infinite-scroll.directive.d.ts +0 -30
  140. package/lib/directives/select-article-on-click.directive.d.ts +0 -14
  141. package/lib/directives/show-bookmark.directive.d.ts +0 -60
  142. package/lib/directives/theme-provider.directive.d.ts +0 -20
  143. package/lib/guards/auth.guard.d.ts +0 -7
  144. package/lib/guards/index.d.ts +0 -2
  145. package/lib/guards/initialization.guard.d.ts +0 -20
  146. package/lib/interceptors/audit.interceptor.d.ts +0 -13
  147. package/lib/interceptors/auth.interceptor.d.ts +0 -14
  148. package/lib/interceptors/body.interceptor.d.ts +0 -11
  149. package/lib/interceptors/error.interceptor.d.ts +0 -9
  150. package/lib/interceptors/index.d.ts +0 -5
  151. package/lib/interceptors/toast.interceptor.d.ts +0 -13
  152. package/lib/models/aggregation.d.ts +0 -12
  153. package/lib/models/article-metadata.d.ts +0 -5
  154. package/lib/models/autocomplete.d.ts +0 -5
  155. package/lib/models/custom-json.d.ts +0 -69
  156. package/lib/models/filter-dropdown.d.ts +0 -10
  157. package/lib/models/index.d.ts +0 -6
  158. package/lib/models/user-settings.d.ts +0 -38
  159. package/lib/pipes/highlight-word.pipe.d.ts +0 -22
  160. package/lib/pipes/index.d.ts +0 -2
  161. package/lib/pipes/source-icon.pipe.d.ts +0 -51
  162. package/lib/public-api.d.ts +0 -14
  163. package/lib/resolvers/index.d.ts +0 -1
  164. package/lib/resolvers/query-name-resolver.d.ts +0 -9
  165. package/lib/resources/index.d.ts +0 -1
  166. package/lib/resources/themes.d.ts +0 -51
  167. package/lib/services/application.service.d.ts +0 -183
  168. package/lib/services/autocomplete.service.d.ts +0 -96
  169. package/lib/services/drawer/backdrop.service.d.ts +0 -9
  170. package/lib/services/drawer/drawer-stack.service.d.ts +0 -70
  171. package/lib/services/drawer/drawer.service.d.ts +0 -15
  172. package/lib/services/index.d.ts +0 -11
  173. package/lib/services/label.service.d.ts +0 -114
  174. package/lib/services/navigation.service.d.ts +0 -33
  175. package/lib/services/saved-searches.service.d.ts +0 -149
  176. package/lib/services/search.service.d.ts +0 -159
  177. package/lib/services/selection-history.service.d.ts +0 -50
  178. package/lib/services/selection.service.d.ts +0 -123
  179. package/lib/stores/aggregations.store.d.ts +0 -25
  180. package/lib/stores/app.store.d.ts +0 -110
  181. package/lib/stores/application.store.d.ts +0 -83
  182. package/lib/stores/index.d.ts +0 -8
  183. package/lib/stores/principal.store.d.ts +0 -47
  184. package/lib/stores/query-params.store.d.ts +0 -128
  185. package/lib/stores/selection.store.d.ts +0 -52
  186. package/lib/stores/theme.store.d.ts +0 -66
  187. package/lib/stores/user-settings.store.d.ts +0 -111
  188. package/lib/tokens/highlights.d.ts +0 -8
  189. package/lib/tokens/index.d.ts +0 -1
  190. package/lib/utils/debounced-signal.d.ts +0 -25
  191. package/lib/utils/index.d.ts +0 -7
  192. package/lib/utils/inline-worker.d.ts +0 -11
  193. package/lib/utils/query.d.ts +0 -26
  194. package/lib/utils/routes.d.ts +0 -16
  195. package/lib/utils/tailwind-utils.d.ts +0 -2
  196. package/lib/utils/theme-body-hook.d.ts +0 -6
  197. package/lib/utils/theme-registry.d.ts +0 -3
  198. package/lib/web-services/aggregations.service.d.ts +0 -57
  199. package/lib/web-services/app.service.d.ts +0 -30
  200. package/lib/web-services/audit.service.d.ts +0 -72
  201. package/lib/web-services/index.d.ts +0 -9
  202. package/lib/web-services/json-method-plugin.service.d.ts +0 -41
  203. package/lib/web-services/preview.service.d.ts +0 -283
  204. package/lib/web-services/principal.service.d.ts +0 -28
  205. package/lib/web-services/query.service.d.ts +0 -29
  206. package/lib/web-services/text-chunck.service.d.ts +0 -22
  207. package/public-api.d.ts +0 -1
@@ -1,152 +0,0 @@
1
- import { EventEmitter, Injectable, inject } from '@angular/core';
2
- import { BehaviorSubject, Subscription } from 'rxjs';
3
- import { getState } from '@ngrx/signals';
4
- import { SelectionHistoryService } from '../selection-history.service';
5
- import { SelectionService } from '../selection.service';
6
- import { NavigationService } from '../navigation.service';
7
- import { SelectionStore } from '../../stores/selection.store';
8
- import { BackdropService } from './backdrop.service';
9
- import * as i0 from "@angular/core";
10
- export class DrawerStackService {
11
- constructor() {
12
- this.isOpened = new BehaviorSubject(false);
13
- this.toggleTopDrawerExtension$ = new EventEmitter();
14
- this.forceTopDrawerCollapse$ = new EventEmitter();
15
- this.closeTopDrawer$ = new EventEmitter();
16
- this.closeAllDrawers$ = new EventEmitter();
17
- this.isChatOpened = new BehaviorSubject(false);
18
- this.openChatDrawer$ = new EventEmitter();
19
- this.closeChatDrawer$ = new EventEmitter();
20
- this.askAI$ = new EventEmitter();
21
- this.selection = inject(SelectionService);
22
- this.selectionHistory = inject(SelectionHistoryService);
23
- this.selectionStore = inject(SelectionStore);
24
- this.navigationService = inject(NavigationService);
25
- this.backdropService = inject(BackdropService);
26
- this.subscriptions = new Subscription();
27
- // on new search, close all drawers including chat drawer
28
- this.subscriptions.add(this.navigationService.navigationEnd$.subscribe(() => {
29
- this.closeAssistant();
30
- this.closeAll();
31
- }));
32
- }
33
- ngOnDestroy() {
34
- this.subscriptions.unsubscribe();
35
- }
36
- /**
37
- * Sets current drawer stack status to open
38
- */
39
- open(componentType) {
40
- this.componentType = componentType;
41
- this.isOpened.next(true);
42
- }
43
- /**
44
- * Emits event to extend the top drawer
45
- */
46
- extend() {
47
- this.toggleTopDrawerExtension$.next();
48
- }
49
- /**
50
- * Emits event to close the top drawer, checks if history is empty, if so,
51
- * sets current drawer stack status to closed and clears history and current
52
- * selection
53
- */
54
- close() {
55
- this.closeTopDrawer$.next();
56
- if (this.selectionHistory.getCurrentSelectionIndex() === -1) {
57
- this.isOpened.next(false);
58
- this.selectionHistory.clearHistory();
59
- }
60
- }
61
- /**
62
- * Emits event to close the top drawer
63
- */
64
- closeTop() {
65
- this.closeTopDrawer$.next();
66
- }
67
- /**
68
- * Sets current drawer stack status to closed, clears history and emits event
69
- * to close all drawers
70
- *
71
- * @param keepDrawerOpen if true, do not trigger layout animation
72
- */
73
- closeAll(keepDrawerOpen = false) {
74
- if (!keepDrawerOpen)
75
- this.isOpened.next(false);
76
- this.selectionHistory.clearHistory();
77
- this.closeAllDrawers$.next();
78
- }
79
- /**
80
- * Replace the current selection with the given article by closing all
81
- * drawers and opening the drawer with the new selection without triggering
82
- * layout animation
83
- *
84
- * @param article the article to replace the current selection with
85
- */
86
- replace(article) {
87
- const { id } = getState(this.selectionStore);
88
- if (id && (!article || article.id === id))
89
- return;
90
- // close everything without trigger layout animation
91
- this.closeAll(true);
92
- // set selection
93
- this.selection.setCurrentArticle(article);
94
- // open drawer
95
- this.open();
96
- }
97
- /**
98
- * Stack the given article by setting the current selection and opening the
99
- * drawer
100
- *
101
- * @param article the article to stack
102
- */
103
- stack(article, withQueryText) {
104
- const { id } = getState(this.selectionStore);
105
- if (id && (!article || article.id === id))
106
- return;
107
- // force top drawer to collapse
108
- this.forceTopDrawerCollapse$.next();
109
- // set selection
110
- this.selection.setCurrentArticle(article, withQueryText);
111
- // open drawer
112
- this.open();
113
- }
114
- toggleAssistant() {
115
- if (this.isChatOpened.getValue()) {
116
- this.backdropService.hide();
117
- this.closeAssistant();
118
- }
119
- else {
120
- this.backdropService.show();
121
- this.openAssistant();
122
- }
123
- }
124
- openAssistant() {
125
- this.isChatOpened.next(true);
126
- this.isOpened.next(true);
127
- this.openChatDrawer$.next();
128
- this.backdropService.show();
129
- }
130
- closeAssistant(keepDrawerOpen = false) {
131
- this.isChatOpened.next(false);
132
- if (!keepDrawerOpen && this.selectionHistory.getCurrentSelectionIndex() === -1) {
133
- this.isOpened.next(false);
134
- this.closeAllDrawers$.next();
135
- }
136
- this.closeChatDrawer$.next();
137
- this.backdropService.hide();
138
- }
139
- askAI(text) {
140
- this.openAssistant();
141
- this.askAI$.next(text);
142
- }
143
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DrawerStackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
144
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DrawerStackService, providedIn: 'root' }); }
145
- }
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DrawerStackService, decorators: [{
147
- type: Injectable,
148
- args: [{
149
- providedIn: 'root'
150
- }]
151
- }], ctorParameters: () => [] });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLXN0YWNrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL2RyYXdlci9kcmF3ZXItc3RhY2suc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBbUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFNckQsTUFBTSxPQUFPLGtCQUFrQjtJQXNCN0I7UUFyQmdCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMvQyw4QkFBeUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3JELDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzNDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFNUMsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0MscUJBQWdCLEdBQUcsSUFBSSxZ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QUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBWTtRQUN2QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQzs4R0EvSlUsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBUeXBlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRTdGF0ZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuXG5pbXBvcnQgeyBBcnRpY2xlIH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHsgU2VsZWN0aW9uSGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24taGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdG9yZSB9IGZyb20gJy4uLy4uL3N0b3Jlcy9zZWxlY3Rpb24uc3RvcmUnO1xuaW1wb3J0IHsgQmFja2Ryb3BTZXJ2aWNlIH0gZnJvbSAnLi9iYWNrZHJvcC5zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEcmF3ZXJTdGFja1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgcmVhZG9ubHkgaXNPcGVuZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHRvZ2dsZVRvcERyYXdlckV4dGVuc2lvbiQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JjZVRvcERyYXdlckNvbGxhcHNlJCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGNsb3NlVG9wRHJhd2VyJCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGNsb3NlQWxsRHJhd2VycyQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzQ2hhdE9wZW5lZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlbkNoYXREcmF3ZXIkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xvc2VDaGF0RHJhd2VyJCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGFza0FJJCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGlvbkhpc3RvcnkgPSBpbmplY3QoU2VsZWN0aW9uSGlzdG9yeVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGlvblN0b3JlID0gaW5qZWN0KFNlbGVjdGlvblN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBuYXZpZ2F0aW9uU2VydmljZSA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFja2Ryb3BTZXJ2aWNlID0gaW5qZWN0KEJhY2tkcm9wU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBjb21wb25lbnRUeXBlPzogVHlwZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIG9uIG5ldyBzZWFyY2gsIGNsb3NlIGFsbCBkcmF3ZXJzIGluY2x1ZGluZyBjaGF0IGRyYXdlclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLm5hdmlnYXRpb25FbmQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VBc3Npc3RhbnQoKTtcbiAgICAgICAgdGhpcy5jbG9zZUFsbCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjdXJyZW50IGRyYXdlciBzdGFjayBzdGF0dXMgdG8gb3BlblxuICAgKi9cbiAgcHVibGljIG9wZW4oY29tcG9uZW50VHlwZT86IFR5cGU8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7XG4gICAgdGhpcy5pc09wZW5lZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHRvIGV4dGVuZCB0aGUgdG9wIGRyYXdlclxuICAgKi9cbiAgcHVibGljIGV4dGVuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVRvcERyYXdlckV4dGVuc2lvbiQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHRvIGNsb3NlIHRoZSB0b3AgZHJhd2VyLCBjaGVja3MgaWYgaGlzdG9yeSBpcyBlbXB0eSwgaWYgc28sXG4gICAqIHNldHMgY3VycmVudCBkcmF3ZXIgc3RhY2sgc3RhdHVzIHRvIGNsb3NlZCBhbmQgY2xlYXJzIGhpc3RvcnkgYW5kIGN1cnJlbnRcbiAgICogc2VsZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZVRvcERyYXdlciQubmV4dCgpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSGlzdG9yeS5nZXRDdXJyZW50U2VsZWN0aW9uSW5kZXgoKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuaXNPcGVuZWQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhpc3RvcnkuY2xlYXJIaXN0b3J5KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHRvIGNsb3NlIHRoZSB0b3AgZHJhd2VyXG4gICAqL1xuICBwdWJsaWMgY2xvc2VUb3AoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZVRvcERyYXdlciQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY3VycmVudCBkcmF3ZXIgc3RhY2sgc3RhdHVzIHRvIGNsb3NlZCwgY2xlYXJzIGhpc3RvcnkgYW5kIGVtaXRzIGV2ZW50XG4gICAqIHRvIGNsb3NlIGFsbCBkcmF3ZXJzXG4gICAqXG4gICAqIEBwYXJhbSBrZWVwRHJhd2VyT3BlbiBpZiB0cnVlLCBkbyBub3QgdHJpZ2dlciBsYXlvdXQgYW5pbWF0aW9uXG4gICAqL1xuICBwdWJsaWMgY2xvc2VBbGwoa2VlcERyYXdlck9wZW46IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICgha2VlcERyYXdlck9wZW4pIHRoaXMuaXNPcGVuZWQubmV4dChmYWxzZSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkhpc3RvcnkuY2xlYXJIaXN0b3J5KCk7XG5cbiAgICB0aGlzLmNsb3NlQWxsRHJhd2VycyQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHdpdGggdGhlIGdpdmVuIGFydGljbGUgYnkgY2xvc2luZyBhbGxcbiAgICogZHJhd2VycyBhbmQgb3BlbmluZyB0aGUgZHJhd2VyIHdpdGggdGhlIG5ldyBzZWxlY3Rpb24gd2l0aG91dCB0cmlnZ2VyaW5nXG4gICAqIGxheW91dCBhbmltYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGFydGljbGUgdGhlIGFydGljbGUgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2l0aFxuICAgKi9cbiAgcHVibGljIHJlcGxhY2UoYXJ0aWNsZTogQXJ0aWNsZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgaWQgfSA9IGdldFN0YXRlKHRoaXMuc2VsZWN0aW9uU3RvcmUpO1xuXG4gICAgaWYgKGlkICYmICghYXJ0aWNsZSB8fCBhcnRpY2xlLmlkID09PSBpZCkpIHJldHVybjtcblxuICAgIC8vIGNsb3NlIGV2ZXJ5dGhpbmcgd2l0aG91dCB0cmlnZ2VyIGxheW91dCBhbmltYXRpb25cbiAgICB0aGlzLmNsb3NlQWxsKHRydWUpO1xuXG4gICAgLy8gc2V0IHNlbGVjdGlvblxuICAgIHRoaXMuc2VsZWN0aW9uLnNldEN1cnJlbnRBcnRpY2xlKGFydGljbGUpO1xuICAgIC8vIG9wZW4gZHJhd2VyXG4gICAgdGhpcy5vcGVuKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhY2sgdGhlIGdpdmVuIGFydGljbGUgYnkgc2V0dGluZyB0aGUgY3VycmVudCBzZWxlY3Rpb24gYW5kIG9wZW5pbmcgdGhlXG4gICAqIGRyYXdlclxuICAgKlxuICAgKiBAcGFyYW0gYXJ0aWNsZSB0aGUgYXJ0aWNsZSB0byBzdGFja1xuICAgKi9cbiAgcHVibGljIHN0YWNrKGFydGljbGU6IEFydGljbGUgfCB1bmRlZmluZWQsIHdpdGhRdWVyeVRleHQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgeyBpZCB9ID0gZ2V0U3RhdGUodGhpcy5zZWxlY3Rpb25TdG9yZSk7XG5cbiAgICBpZiAoaWQgJiYgKCFhcnRpY2xlIHx8IGFydGljbGUuaWQgPT09IGlkKSkgcmV0dXJuO1xuXG4gICAgLy8gZm9yY2UgdG9wIGRyYXdlciB0byBjb2xsYXBzZVxuICAgIHRoaXMuZm9yY2VUb3BEcmF3ZXJDb2xsYXBzZSQubmV4dCgpO1xuICAgIC8vIHNldCBzZWxlY3Rpb25cbiAgICB0aGlzLnNlbGVjdGlvbi5zZXRDdXJyZW50QXJ0aWNsZShhcnRpY2xlLCB3aXRoUXVlcnlUZXh0KTtcbiAgICAvLyBvcGVuIGRyYXdlclxuICAgIHRoaXMub3BlbigpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUFzc2lzdGFudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NoYXRPcGVuZWQuZ2V0VmFsdWUoKSkge1xuICAgICAgdGhpcy5iYWNrZHJvcFNlcnZpY2UuaGlkZSgpO1xuICAgICAgdGhpcy5jbG9zZUFzc2lzdGFudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJhY2tkcm9wU2VydmljZS5zaG93KCk7XG4gICAgICB0aGlzLm9wZW5Bc3Npc3RhbnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbkFzc2lzdGFudCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2hhdE9wZW5lZC5uZXh0KHRydWUpO1xuICAgIHRoaXMuaXNPcGVuZWQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9wZW5DaGF0RHJhd2VyJC5uZXh0KCk7XG5cbiAgICB0aGlzLmJhY2tkcm9wU2VydmljZS5zaG93KCk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VBc3Npc3RhbnQoa2VlcERyYXdlck9wZW46IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuaXNDaGF0T3BlbmVkLm5leHQoZmFsc2UpO1xuXG4gICAgaWYgKCFrZWVwRHJhd2VyT3BlbiAmJiB0aGlzLnNlbGVjdGlvbkhpc3RvcnkuZ2V0Q3VycmVudFNlbGVjdGlvbkluZGV4KCkgPT09IC0xKSB7XG4gICAgICB0aGlzLmlzT3BlbmVkLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5jbG9zZUFsbERyYXdlcnMkLm5leHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlQ2hhdERyYXdlciQubmV4dCgpO1xuICAgIHRoaXMuYmFja2Ryb3BTZXJ2aWNlLmhpZGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc2tBSSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5Bc3Npc3RhbnQoKTtcbiAgICB0aGlzLmFza0FJJC5uZXh0KHRleHQpO1xuICB9XG59XG4iXX0=
@@ -1,38 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { BackdropService } from './backdrop.service';
4
- import * as i0 from "@angular/core";
5
- export class DrawerService {
6
- constructor() {
7
- this.isOpened = new BehaviorSubject(false);
8
- this.isExtended = new BehaviorSubject(false);
9
- this.backdrop = inject(BackdropService);
10
- }
11
- open() {
12
- this.isOpened.next(true);
13
- }
14
- close() {
15
- this.collapse();
16
- this.isOpened.next(false);
17
- }
18
- toggle() {
19
- this.isOpened.getValue() ? this.close() : this.open();
20
- }
21
- extend() {
22
- this.isExtended.next(true);
23
- this.backdrop.show();
24
- }
25
- collapse() {
26
- this.backdrop.hide();
27
- this.isExtended.next(false);
28
- }
29
- toggleExtension() {
30
- this.isExtended.getValue() ? this.collapse() : this.extend();
31
- }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
33
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DrawerService }); }
34
- }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DrawerService, decorators: [{
36
- type: Injectable
37
- }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL2RyYXdlci9kcmF3ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFHckQsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFFa0IsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQy9DLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVoRCxhQUFRLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBNEJyRDtJQTFCUSxJQUFJO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9ELENBQUM7OEdBL0JVLGFBQWE7a0hBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhY2tkcm9wU2VydmljZSB9IGZyb20gJy4vYmFja2Ryb3Auc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEcmF3ZXJTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzT3BlbmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBpc0V4dGVuZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBiYWNrZHJvcCA9IGluamVjdChCYWNrZHJvcFNlcnZpY2UpO1xuXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuZWQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgdGhpcy5pc09wZW5lZC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW5lZC5nZXRWYWx1ZSgpID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XG4gIH1cblxuICBwdWJsaWMgZXh0ZW5kKCk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHRlbmRlZC5uZXh0KHRydWUpO1xuICAgIHRoaXMuYmFja2Ryb3Auc2hvdygpO1xuICB9XG5cbiAgcHVibGljIGNvbGxhcHNlKCk6IHZvaWQge1xuICAgIHRoaXMuYmFja2Ryb3AuaGlkZSgpO1xuICAgIHRoaXMuaXNFeHRlbmRlZC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFeHRlbnNpb24oKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4dGVuZGVkLmdldFZhbHVlKCkgPyB0aGlzLmNvbGxhcHNlKCkgOiB0aGlzLmV4dGVuZCgpO1xuICB9XG59XG4iXX0=
@@ -1,12 +0,0 @@
1
- export * from "./application.service";
2
- export * from "./autocomplete.service";
3
- export * from "./label.service";
4
- export * from "./navigation.service";
5
- export * from "./saved-searches.service";
6
- export * from "./search.service";
7
- export * from "./selection.service";
8
- export * from "./selection-history.service";
9
- export * from "./drawer/drawer-stack.service";
10
- export * from "./drawer/backdrop.service";
11
- export * from "./drawer/drawer.service";
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2FwcGxpY2F0aW9uLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vYXV0b2NvbXBsZXRlLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vbGFiZWwuc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vc2F2ZWQtc2VhcmNoZXMuc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9zZWFyY2guc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9zZWxlY3Rpb24uc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9zZWxlY3Rpb24taGlzdG9yeS5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9kcmF3ZXIvZHJhd2VyLXN0YWNrLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vZHJhd2VyL2JhY2tkcm9wLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vZHJhd2VyL2RyYXdlci5zZXJ2aWNlXCI7XHJcbiJdfQ==
@@ -1,161 +0,0 @@
1
- import { Injectable, inject, signal } from '@angular/core';
2
- import { AppStore } from '../stores/app.store';
3
- import { fetchLabels, labels } from '@sinequa/atomic';
4
- import { from, map, of, switchMap } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- ;
7
- export class LabelService {
8
- constructor() {
9
- this.appStore = inject(AppStore);
10
- this.hasAccess = signal(undefined);
11
- }
12
- /**
13
- * Check user rights to verify if they can access labels handling
14
- * @returns if has the rights
15
- */
16
- async canHandleLabels() {
17
- if (this.hasAccess() !== undefined)
18
- return this.hasAccess();
19
- const service = this.appStore.getWebServiceByType('labels');
20
- if (!service)
21
- return false;
22
- try {
23
- const rights = await labels.getUserRights();
24
- this.hasAccess.set(rights.canEditPublicLabels || rights.canManagePublicLabels);
25
- return this.hasAccess();
26
- }
27
- catch (error) {
28
- console.log("labels.canHandleLabels failure - error: ", error);
29
- return false;
30
- }
31
- }
32
- /**
33
- * Get relevant config info from the labels web service
34
- * @returns the LabelsConfig or undefined if no rights
35
- */
36
- getLabelsConfig() {
37
- return from(this.canHandleLabels())
38
- .pipe(map((canHandle) => {
39
- if (!canHandle)
40
- return undefined;
41
- const { allowPublicLabelsCreation, allowPublicLabelsModification, privateLabelsField, publicLabelsField, defaultPublicLabels, labelsAutoSuggestMaxCount, labelsAutoSuggestWildcard } = this.appStore.getWebServiceByType('labels');
42
- return {
43
- allowPublicLabelsCreation,
44
- allowPublicLabelsModification,
45
- privateLabelsField,
46
- publicLabelsField,
47
- defaultPublicLabels,
48
- labelsAutoSuggestMaxCount,
49
- labelsAutoSuggestWildcard
50
- };
51
- }));
52
- }
53
- /**
54
- * Fetch labels from string
55
- * @param prefix the string prefix to filter with
56
- * @param publicOnly whether they should be public or not
57
- * @param locale optional locale filtering
58
- * @returns list of label strings
59
- */
60
- fetch(prefix, publicOnly = true, locale) {
61
- return from(fetchLabels(prefix, publicOnly, locale));
62
- }
63
- /**
64
- * Add some labels to many documents
65
- * @param labelsToAdd list of labels to add
66
- * @param ids list of document id to add the label
67
- * @param publicOnly whether the operation should be public only
68
- * @returns a promise that resolves when the operation is complete
69
- */
70
- add(labelsToAdd, ids, publicOnly) {
71
- return from(this.canHandleLabels())
72
- .pipe(switchMap((canHandle) => {
73
- if (!canHandle)
74
- return of(undefined);
75
- return from(labels.add(labelsToAdd, ids, publicOnly));
76
- }));
77
- }
78
- /**
79
- * Remove some labels from many documents
80
- * @param labelsToRemove list of labels to remove
81
- * @param ids list of document id to add the label
82
- * @param publicOnly whether the operation should be public only
83
- * @returns a promise that resolves when the operation is complete
84
- */
85
- remove(labelsToRemove, ids, publicOnly) {
86
- return from(this.canHandleLabels())
87
- .pipe(switchMap((canHandle) => {
88
- if (!canHandle)
89
- return of(undefined);
90
- return from(labels.remove(labelsToRemove, ids, publicOnly));
91
- }));
92
- }
93
- /**
94
- * Name some labels to a new name
95
- * @param labelsToRename list of labels to rename
96
- * @param newLabel the new label name
97
- * @param publicOnly whether the operation should be public only
98
- * @returns a promise that resolves when the operation is complete
99
- */
100
- rename(labelsToRename, newLabel, publicOnly) {
101
- return from(this.canHandleLabels())
102
- .pipe(switchMap((canHandle) => {
103
- if (!canHandle)
104
- return of(undefined);
105
- return from(labels.rename(labelsToRename, newLabel, publicOnly));
106
- }));
107
- }
108
- /**
109
- * Delete some labels
110
- * @param labelsToDelete the labels to delete
111
- * @param publicOnly whether the operation should be public only
112
- * @returns a promise that resolves when the operation is complete
113
- */
114
- delete(labelsToDelete, publicOnly) {
115
- return from(this.canHandleLabels())
116
- .pipe(switchMap((canHandle) => {
117
- if (!canHandle)
118
- return of(undefined);
119
- return from(labels.delete(labelsToDelete, publicOnly));
120
- }));
121
- }
122
- /**
123
- * Create some labels for a query
124
- * @param labelstoAdd the labels to create
125
- * @param query the query object to which the labels will be added
126
- * @param publicOnly whether the operation should be public only
127
- * @returns a promise that resolves when the operation is complete
128
- */
129
- bulkAdd(labelstoAdd, query, publicOnly) {
130
- return from(this.canHandleLabels())
131
- .pipe(switchMap((canHandle) => {
132
- if (!canHandle)
133
- return of(undefined);
134
- return from(labels.bulkAdd(labelstoAdd, query, publicOnly));
135
- }));
136
- }
137
- /**
138
- * Delete some labels from a query
139
- * @param labelsToRemove the labels to remove
140
- * @param query the query object to which the labels will be removed
141
- * @param publicOnly whether the operation should be public only
142
- * @returns a promise that resolves when the operation is complete
143
- */
144
- bulkRemove(labelsToRemove, query, publicOnly) {
145
- return from(this.canHandleLabels())
146
- .pipe(switchMap((canHandle) => {
147
- if (!canHandle)
148
- return of(undefined);
149
- return from(labels.bulkRemove(labelsToRemove, query, publicOnly));
150
- }));
151
- }
152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: LabelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
153
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: LabelService, providedIn: 'root' }); }
154
- }
155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: LabelService, decorators: [{
156
- type: Injectable,
157
- args: [{
158
- providedIn: 'root'
159
- }]
160
- }] });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvbGFiZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLE1BQU0sRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RixPQUFPLEVBQThCLElBQUksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFpQm5HLENBQUM7QUFLRixNQUFNLE9BQU8sWUFBWTtJQUh6QjtRQUlFLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsY0FBUyxHQUFHLE1BQU0sQ0FBc0IsU0FBUyxDQUFDLENBQUM7S0FxS3BEO0lBbktDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUcsQ0FBQztRQUU3RCxNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBc0IsQ0FBQztRQUNsRixJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTNCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMvRSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUcsQ0FBQztRQUMzQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDaEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFNBQWtCLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUVqQyxNQUFNLEVBQUUseUJBQXlCLEVBQUUsNkJBQTZCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQ3JHLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLEdBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQXNCLENBQUM7WUFFbEosT0FBTztnQkFDTCx5QkFBeUI7Z0JBQ3pCLDZCQUE2QjtnQkFDN0Isa0JBQWtCO2dCQUNsQixpQkFBaUI7Z0JBQ2pCLG1CQUFtQjtnQkFDbkIseUJBQXlCO2dCQUN6Qix5QkFBeUI7YUFDMUIsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE1BQWMsRUFBRSxhQUFzQixJQUFJLEVBQUUsTUFBZTtRQUMvRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxHQUFHLENBQUMsV0FBcUIsRUFBRSxHQUFhLEVBQUUsVUFBb0I7UUFDNUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ2hDLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxTQUFrQixFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsY0FBd0IsRUFBRSxHQUFhLEVBQUUsVUFBb0I7UUFDbEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ2hDLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxTQUFrQixFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsY0FBd0IsRUFBRSxRQUFnQixFQUFFLFVBQW9CO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUNoQyxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsU0FBa0IsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXJDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsY0FBd0IsRUFBRSxVQUFvQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDaEMsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLFNBQWtCLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBTyxDQUFDLFdBQXFCLEVBQUUsS0FBWSxFQUFFLFVBQW9CO1FBQy9ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUNoQyxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsU0FBa0IsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXJDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUFDLGNBQXdCLEVBQUUsS0FBWSxFQUFFLFVBQW9CO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUNoQyxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsU0FBa0IsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXJDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDOzhHQXZLVSxZQUFZO2tIQUFaLFlBQVksY0FGWCxNQUFNOzsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2FwcC5zdG9yZSc7XG5pbXBvcnQgeyBDQ1dlYlNlcnZpY2UsIGZldGNoTGFiZWxzLCBsYWJlbHMsIExhYmVsc1JpZ2h0cywgUXVlcnkgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlyc3RWYWx1ZUZyb20sIGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG50eXBlIExhYmVsc1dlYlNlcnZpY2UgPSBDQ1dlYlNlcnZpY2UgJiBMYWJlbHNDb25maWcgJiB7XG4gIGFsbG93ZWRXaXRoQW55U0JBPzogYm9vbGVhbixcbiAgbGFiZWxzQnVsa0RvY0xpbWl0Pzogc3RyaW5nLFxuICByZXZpc2lvbj86IG51bWJlcixcbiAgdXNlRGlzdHJpYnV0aW9uUmVnZXg/OiBib29sZWFuLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsc0NvbmZpZyB7XG4gIGFsbG93UHVibGljTGFiZWxzQ3JlYXRpb24/OiBib29sZWFuO1xuICBhbGxvd1B1YmxpY0xhYmVsc01vZGlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHByaXZhdGVMYWJlbHNGaWVsZD86IHN0cmluZztcbiAgcHVibGljTGFiZWxzRmllbGQ/OiBzdHJpbmc7XG4gIGRlZmF1bHRQdWJsaWNMYWJlbHM/OiBzdHJpbmc7XG4gIGxhYmVsc0F1dG9TdWdnZXN0TWF4Q291bnQ/OiBzdHJpbmc7XG4gIGxhYmVsc0F1dG9TdWdnZXN0V2lsZGNhcmQ/OiBzdHJpbmc7XG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMYWJlbFNlcnZpY2Uge1xuICBhcHBTdG9yZSA9IGluamVjdChBcHBTdG9yZSk7XG5cbiAgaGFzQWNjZXNzID0gc2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIENoZWNrIHVzZXIgcmlnaHRzIHRvIHZlcmlmeSBpZiB0aGV5IGNhbiBhY2Nlc3MgbGFiZWxzIGhhbmRsaW5nXG4gICAqIEByZXR1cm5zIGlmIGhhcyB0aGUgcmlnaHRzXG4gICAqL1xuICBhc3luYyBjYW5IYW5kbGVMYWJlbHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuaGFzQWNjZXNzKCkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuaGFzQWNjZXNzKCkhO1xuXG4gICAgY29uc3Qgc2VydmljZSA9ICh0aGlzLmFwcFN0b3JlLmdldFdlYlNlcnZpY2VCeVR5cGUoJ2xhYmVscycpIGFzIExhYmVsc1dlYlNlcnZpY2UpO1xuICAgIGlmICghc2VydmljZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJpZ2h0cyA9IGF3YWl0IGxhYmVscy5nZXRVc2VyUmlnaHRzKCk7XG4gICAgICB0aGlzLmhhc0FjY2Vzcy5zZXQocmlnaHRzLmNhbkVkaXRQdWJsaWNMYWJlbHMgfHwgcmlnaHRzLmNhbk1hbmFnZVB1YmxpY0xhYmVscyk7XG4gICAgICByZXR1cm4gdGhpcy5oYXNBY2Nlc3MoKSE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwibGFiZWxzLmNhbkhhbmRsZUxhYmVscyBmYWlsdXJlIC0gZXJyb3I6IFwiLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWxldmFudCBjb25maWcgaW5mbyBmcm9tIHRoZSBsYWJlbHMgd2ViIHNlcnZpY2VcbiAgICogQHJldHVybnMgdGhlIExhYmVsc0NvbmZpZyBvciB1bmRlZmluZWQgaWYgbm8gcmlnaHRzXG4gICAqL1xuICBnZXRMYWJlbHNDb25maWcoKTogT2JzZXJ2YWJsZTxMYWJlbHNDb25maWcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNhbkhhbmRsZUxhYmVscygpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY2FuSGFuZGxlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5IYW5kbGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBjb25zdCB7IGFsbG93UHVibGljTGFiZWxzQ3JlYXRpb24sIGFsbG93UHVibGljTGFiZWxzTW9kaWZpY2F0aW9uLCBwcml2YXRlTGFiZWxzRmllbGQsIHB1YmxpY0xhYmVsc0ZpZWxkLFxuICAgICAgICAgICAgZGVmYXVsdFB1YmxpY0xhYmVscywgbGFiZWxzQXV0b1N1Z2dlc3RNYXhDb3VudCwgbGFiZWxzQXV0b1N1Z2dlc3RXaWxkY2FyZCB9ID0gKHRoaXMuYXBwU3RvcmUuZ2V0V2ViU2VydmljZUJ5VHlwZSgnbGFiZWxzJykgYXMgTGFiZWxzV2ViU2VydmljZSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxsb3dQdWJsaWNMYWJlbHNDcmVhdGlvbixcbiAgICAgICAgICAgIGFsbG93UHVibGljTGFiZWxzTW9kaWZpY2F0aW9uLFxuICAgICAgICAgICAgcHJpdmF0ZUxhYmVsc0ZpZWxkLFxuICAgICAgICAgICAgcHVibGljTGFiZWxzRmllbGQsXG4gICAgICAgICAgICBkZWZhdWx0UHVibGljTGFiZWxzLFxuICAgICAgICAgICAgbGFiZWxzQXV0b1N1Z2dlc3RNYXhDb3VudCxcbiAgICAgICAgICAgIGxhYmVsc0F1dG9TdWdnZXN0V2lsZGNhcmRcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGxhYmVscyBmcm9tIHN0cmluZ1xuICAgKiBAcGFyYW0gcHJlZml4IHRoZSBzdHJpbmcgcHJlZml4IHRvIGZpbHRlciB3aXRoXG4gICAqIEBwYXJhbSBwdWJsaWNPbmx5IHdoZXRoZXIgdGhleSBzaG91bGQgYmUgcHVibGljIG9yIG5vdFxuICAgKiBAcGFyYW0gbG9jYWxlIG9wdGlvbmFsIGxvY2FsZSBmaWx0ZXJpbmdcbiAgICogQHJldHVybnMgbGlzdCBvZiBsYWJlbCBzdHJpbmdzXG4gICAqL1xuICBmZXRjaChwcmVmaXg6IHN0cmluZywgcHVibGljT25seTogYm9vbGVhbiA9IHRydWUsIGxvY2FsZT86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gZnJvbShmZXRjaExhYmVscyhwcmVmaXgsIHB1YmxpY09ubHksIGxvY2FsZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBzb21lIGxhYmVscyB0byBtYW55IGRvY3VtZW50c1xuICAgKiBAcGFyYW0gbGFiZWxzVG9BZGQgbGlzdCBvZiBsYWJlbHMgdG8gYWRkXG4gICAqIEBwYXJhbSBpZHMgbGlzdCBvZiBkb2N1bWVudCBpZCB0byBhZGQgdGhlIGxhYmVsXG4gICAqIEBwYXJhbSBwdWJsaWNPbmx5IHdoZXRoZXIgdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcHVibGljIG9ubHlcbiAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBhZGQobGFiZWxzVG9BZGQ6IHN0cmluZ1tdLCBpZHM6IHN0cmluZ1tdLCBwdWJsaWNPbmx5PzogYm9vbGVhbik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMuY2FuSGFuZGxlTGFiZWxzKCkpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChjYW5IYW5kbGU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAoIWNhbkhhbmRsZSkgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICByZXR1cm4gZnJvbShsYWJlbHMuYWRkKGxhYmVsc1RvQWRkLCBpZHMsIHB1YmxpY09ubHkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHNvbWUgbGFiZWxzIGZyb20gbWFueSBkb2N1bWVudHNcbiAgICogQHBhcmFtIGxhYmVsc1RvUmVtb3ZlIGxpc3Qgb2YgbGFiZWxzIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gaWRzIGxpc3Qgb2YgZG9jdW1lbnQgaWQgdG8gYWRkIHRoZSBsYWJlbFxuICAgKiBAcGFyYW0gcHVibGljT25seSB3aGV0aGVyIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHB1YmxpYyBvbmx5XG4gICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgcmVtb3ZlKGxhYmVsc1RvUmVtb3ZlOiBzdHJpbmdbXSwgaWRzOiBzdHJpbmdbXSwgcHVibGljT25seT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNhbkhhbmRsZUxhYmVscygpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY2FuSGFuZGxlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5IYW5kbGUpIHJldHVybiBvZih1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZyb20obGFiZWxzLnJlbW92ZShsYWJlbHNUb1JlbW92ZSwgaWRzLCBwdWJsaWNPbmx5KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hbWUgc29tZSBsYWJlbHMgdG8gYSBuZXcgbmFtZVxuICAgKiBAcGFyYW0gbGFiZWxzVG9SZW5hbWUgbGlzdCBvZiBsYWJlbHMgdG8gcmVuYW1lXG4gICAqIEBwYXJhbSBuZXdMYWJlbCB0aGUgbmV3IGxhYmVsIG5hbWVcbiAgICogQHBhcmFtIHB1YmxpY09ubHkgd2hldGhlciB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwdWJsaWMgb25seVxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIHJlbmFtZShsYWJlbHNUb1JlbmFtZTogc3RyaW5nW10sIG5ld0xhYmVsOiBzdHJpbmcsIHB1YmxpY09ubHk/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jYW5IYW5kbGVMYWJlbHMoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNhbkhhbmRsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmICghY2FuSGFuZGxlKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICAgIHJldHVybiBmcm9tKGxhYmVscy5yZW5hbWUobGFiZWxzVG9SZW5hbWUsIG5ld0xhYmVsLCBwdWJsaWNPbmx5KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzb21lIGxhYmVsc1xuICAgKiBAcGFyYW0gbGFiZWxzVG9EZWxldGUgdGhlIGxhYmVscyB0byBkZWxldGVcbiAgICogQHBhcmFtIHB1YmxpY09ubHkgd2hldGhlciB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwdWJsaWMgb25seVxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIGRlbGV0ZShsYWJlbHNUb0RlbGV0ZTogc3RyaW5nW10sIHB1YmxpY09ubHk/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jYW5IYW5kbGVMYWJlbHMoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNhbkhhbmRsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmICghY2FuSGFuZGxlKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICAgIHJldHVybiBmcm9tKGxhYmVscy5kZWxldGUobGFiZWxzVG9EZWxldGUsIHB1YmxpY09ubHkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHNvbWUgbGFiZWxzIGZvciBhIHF1ZXJ5XG4gICAqIEBwYXJhbSBsYWJlbHN0b0FkZCB0aGUgbGFiZWxzIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gcXVlcnkgdGhlIHF1ZXJ5IG9iamVjdCB0byB3aGljaCB0aGUgbGFiZWxzIHdpbGwgYmUgYWRkZWRcbiAgICogQHBhcmFtIHB1YmxpY09ubHkgd2hldGhlciB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwdWJsaWMgb25seVxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIGJ1bGtBZGQobGFiZWxzdG9BZGQ6IHN0cmluZ1tdLCBxdWVyeTogUXVlcnksIHB1YmxpY09ubHk/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jYW5IYW5kbGVMYWJlbHMoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNhbkhhbmRsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmICghY2FuSGFuZGxlKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICAgIHJldHVybiBmcm9tKGxhYmVscy5idWxrQWRkKGxhYmVsc3RvQWRkLCBxdWVyeSwgcHVibGljT25seSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgc29tZSBsYWJlbHMgZnJvbSBhIHF1ZXJ5XG4gICAqIEBwYXJhbSBsYWJlbHNUb1JlbW92ZSB0aGUgbGFiZWxzIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gcXVlcnkgdGhlIHF1ZXJ5IG9iamVjdCB0byB3aGljaCB0aGUgbGFiZWxzIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0gcHVibGljT25seSB3aGV0aGVyIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHB1YmxpYyBvbmx5XG4gICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgYnVsa1JlbW92ZShsYWJlbHNUb1JlbW92ZTogc3RyaW5nW10sIHF1ZXJ5OiBRdWVyeSwgcHVibGljT25seT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNhbkhhbmRsZUxhYmVscygpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY2FuSGFuZGxlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5IYW5kbGUpIHJldHVybiBvZih1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZyb20obGFiZWxzLmJ1bGtSZW1vdmUobGFiZWxzVG9SZW1vdmUsIHF1ZXJ5LCBwdWJsaWNPbmx5KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -1,59 +0,0 @@
1
- import { Injectable, inject } from "@angular/core";
2
- import { NavigationEnd, Router } from "@angular/router";
3
- import { filter, map, shareReplay, tap } from "rxjs";
4
- import { getQueryParamsFromUrl } from "@sinequa/atomic";
5
- import { AuditService } from "../web-services/audit.service";
6
- import * as i0 from "@angular/core";
7
- export class NavigationService {
8
- constructor() {
9
- this.router = inject(Router);
10
- this.auditService = inject(AuditService);
11
- // The URL after the last navigation event, used to redirect the user after login
12
- this.urlAfterNavigation = null;
13
- /**
14
- * Observable that emits events of type `NavigationEnd` from the Angular Router.
15
- *
16
- * This observable performs the following operations:
17
- * - Maps all router events to `RouterEvent`.
18
- * - Filters the events to only include instances of `NavigationEnd`.
19
- * - Taps into the event stream to extract the route name from the URL and notify the audit service of route changes,
20
- * excluding the "loading" route and duplicate navigations.
21
- * - Updates the `urlAfterNavigation` property with the current URL after navigation.
22
- * - Shares the replayed value with a buffer size of 1 to ensure subscribers receive the latest emitted value.
23
- *
24
- * @type Observable<RouterEvent>
25
- */
26
- this.navigationEnd$ = this.router.events.pipe(map(event => event), filter((event) => event instanceof NavigationEnd), tap(event => {
27
- const url = event.url.slice(1).split('?')[0]; // Extract route name
28
- if (url && (url !== "loading" && url !== this.urlAfterNavigation)) {
29
- this.auditService.notifyRouteChange(url);
30
- }
31
- }), tap(event => this.urlAfterNavigation = event.url), shareReplay(1));
32
- /**
33
- * An observable that emits the tab extracted from the URL pathname or the last part of the URL.
34
- *
35
- * This observable listens to navigation end events and processes the URL to determine the current tab.
36
- * It creates a fake URL object to extract the pathname and then uses the `getQueryParamsFromUrl` function
37
- * to extract the tab from the URL pathname or defaults to the last part of the URL if no tab is found.
38
- *
39
- * @type Observable<string> - An observable that emits the current tab as a string.
40
- */
41
- this.path$ = this.navigationEnd$.pipe(
42
- // create a fake URL object to extract the pathname
43
- map((event) => {
44
- const url = new URL(`http://localhost${event.url}`);
45
- // extract the tab from the URL pathname or use the last part of the URL
46
- const { tab = url.pathname.split('/').pop() } = getQueryParamsFromUrl(event.url) || {};
47
- return tab;
48
- }));
49
- }
50
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
51
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NavigationService, decorators: [{
54
- type: Injectable,
55
- args: [{
56
- providedIn: 'root'
57
- }]
58
- }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFLN0QsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUltQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJELGlGQUFpRjtRQUNqRix1QkFBa0IsR0FBa0IsSUFBSSxDQUFDO1FBRXpDOzs7Ozs7Ozs7Ozs7V0FZRztRQUNJLG1CQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM3QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFvQixDQUFDLEVBQ2xDLE1BQU0sQ0FBQyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDOUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCO1lBQ25FLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDakQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFRjs7Ozs7Ozs7V0FRRztRQUNJLFVBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUk7UUFDckMsbURBQW1EO1FBQ25ELEdBQUcsQ0FBQyxDQUFDLEtBQWtCLEVBQUUsRUFBRTtZQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDbkQsd0VBQXdFO1lBQ3hFLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZGLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztLQUNIOzhHQW5EWSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyRXZlbnQgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW1zRnJvbVVybCB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcblxuaW1wb3J0IHsgQXVkaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL3dlYi1zZXJ2aWNlcy9hdWRpdC5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdWRpdFNlcnZpY2UgPSBpbmplY3QoQXVkaXRTZXJ2aWNlKTtcblxuICAvLyBUaGUgVVJMIGFmdGVyIHRoZSBsYXN0IG5hdmlnYXRpb24gZXZlbnQsIHVzZWQgdG8gcmVkaXJlY3QgdGhlIHVzZXIgYWZ0ZXIgbG9naW5cbiAgdXJsQWZ0ZXJOYXZpZ2F0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGV2ZW50cyBvZiB0eXBlIGBOYXZpZ2F0aW9uRW5kYCBmcm9tIHRoZSBBbmd1bGFyIFJvdXRlci5cbiAgICpcbiAgICogVGhpcyBvYnNlcnZhYmxlIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczpcbiAgICogLSBNYXBzIGFsbCByb3V0ZXIgZXZlbnRzIHRvIGBSb3V0ZXJFdmVudGAuXG4gICAqIC0gRmlsdGVycyB0aGUgZXZlbnRzIHRvIG9ubHkgaW5jbHVkZSBpbnN0YW5jZXMgb2YgYE5hdmlnYXRpb25FbmRgLlxuICAgKiAtIFRhcHMgaW50byB0aGUgZXZlbnQgc3RyZWFtIHRvIGV4dHJhY3QgdGhlIHJvdXRlIG5hbWUgZnJvbSB0aGUgVVJMIGFuZCBub3RpZnkgdGhlIGF1ZGl0IHNlcnZpY2Ugb2Ygcm91dGUgY2hhbmdlcyxcbiAgICogICBleGNsdWRpbmcgdGhlIFwibG9hZGluZ1wiIHJvdXRlIGFuZCBkdXBsaWNhdGUgbmF2aWdhdGlvbnMuXG4gICAqIC0gVXBkYXRlcyB0aGUgYHVybEFmdGVyTmF2aWdhdGlvbmAgcHJvcGVydHkgd2l0aCB0aGUgY3VycmVudCBVUkwgYWZ0ZXIgbmF2aWdhdGlvbi5cbiAgICogLSBTaGFyZXMgdGhlIHJlcGxheWVkIHZhbHVlIHdpdGggYSBidWZmZXIgc2l6ZSBvZiAxIHRvIGVuc3VyZSBzdWJzY3JpYmVycyByZWNlaXZlIHRoZSBsYXRlc3QgZW1pdHRlZCB2YWx1ZS5cbiAgICpcbiAgICogQHR5cGUgT2JzZXJ2YWJsZTxSb3V0ZXJFdmVudD5cbiAgICovXG4gIHB1YmxpYyBuYXZpZ2F0aW9uRW5kJCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgIG1hcChldmVudCA9PiBldmVudCBhcyBSb3V0ZXJFdmVudCksXG4gICAgZmlsdGVyKChldmVudDogUm91dGVyRXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgdGFwKGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IGV2ZW50LnVybC5zbGljZSgxKS5zcGxpdCgnPycpWzBdOyAvLyBFeHRyYWN0IHJvdXRlIG5hbWVcbiAgICAgIGlmICh1cmwgJiYgKHVybCAhPT0gXCJsb2FkaW5nXCIgJiYgdXJsICE9PSB0aGlzLnVybEFmdGVyTmF2aWdhdGlvbikpIHtcbiAgICAgICAgdGhpcy5hdWRpdFNlcnZpY2Uubm90aWZ5Um91dGVDaGFuZ2UodXJsKVxuICAgICAgfVxuICAgIH0pLFxuICAgIHRhcChldmVudCA9PiB0aGlzLnVybEFmdGVyTmF2aWdhdGlvbiA9IGV2ZW50LnVybCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB0YWIgZXh0cmFjdGVkIGZyb20gdGhlIFVSTCBwYXRobmFtZSBvciB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBVUkwuXG4gICAqXG4gICAqIFRoaXMgb2JzZXJ2YWJsZSBsaXN0ZW5zIHRvIG5hdmlnYXRpb24gZW5kIGV2ZW50cyBhbmQgcHJvY2Vzc2VzIHRoZSBVUkwgdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHRhYi5cbiAgICogSXQgY3JlYXRlcyBhIGZha2UgVVJMIG9iamVjdCB0byBleHRyYWN0IHRoZSBwYXRobmFtZSBhbmQgdGhlbiB1c2VzIHRoZSBgZ2V0UXVlcnlQYXJhbXNGcm9tVXJsYCBmdW5jdGlvblxuICAgKiB0byBleHRyYWN0IHRoZSB0YWIgZnJvbSB0aGUgVVJMIHBhdGhuYW1lIG9yIGRlZmF1bHRzIHRvIHRoZSBsYXN0IHBhcnQgb2YgdGhlIFVSTCBpZiBubyB0YWIgaXMgZm91bmQuXG4gICAqXG4gICAqIEB0eXBlIE9ic2VydmFibGU8c3RyaW5nPiAtIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY3VycmVudCB0YWIgYXMgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgcGF0aCQgPSB0aGlzLm5hdmlnYXRpb25FbmQkLnBpcGUoXG4gICAgLy8gY3JlYXRlIGEgZmFrZSBVUkwgb2JqZWN0IHRvIGV4dHJhY3QgdGhlIHBhdGhuYW1lXG4gICAgbWFwKChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYGh0dHA6Ly9sb2NhbGhvc3Qke2V2ZW50LnVybH1gKVxuICAgICAgLy8gZXh0cmFjdCB0aGUgdGFiIGZyb20gdGhlIFVSTCBwYXRobmFtZSBvciB1c2UgdGhlIGxhc3QgcGFydCBvZiB0aGUgVVJMXG4gICAgICBjb25zdCB7IHRhYiA9IHVybC5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpIH0gPSBnZXRRdWVyeVBhcmFtc0Zyb21VcmwoZXZlbnQudXJsKSB8fCB7fTtcbiAgICAgIHJldHVybiB0YWI7XG4gICAgfSlcbiAgKTtcbn1cbiJdfQ==
@@ -1,75 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { toast } from 'ngx-sonner';
3
- import { getState } from '@ngrx/signals';
4
- import { QueryParamsStore, UserSettingsStore } from '../stores';
5
- import * as i0 from "@angular/core";
6
- const SAVED_SEARCHES_MAX_STORAGE = 100;
7
- export class SavedSearchesService {
8
- constructor() {
9
- this.userSettingsStore = inject(UserSettingsStore);
10
- this.queryParamsStore = inject(QueryParamsStore);
11
- }
12
- /**
13
- * Retrieves the list of saved searches from the user settings store.
14
- *
15
- * @returns {SavedSearch[]} An array of saved searches.
16
- */
17
- getSavedSearches() {
18
- return this.userSettingsStore.savedSearches();
19
- }
20
- /**
21
- * Saves the current search query to the user's saved searches.
22
- *
23
- * This method retrieves the current search text from the query parameters store.
24
- * If the search text is empty, it logs an error and exits.
25
- * Otherwise, it creates a new saved search object with the current URL, date, and search text.
26
- *
27
- * The new saved search is added to the beginning of the saved searches array.
28
- * If the array exceeds the maximum allowed storage, the oldest search is removed.
29
- *
30
- * Finally, the updated saved searches array is saved back to the user settings store,
31
- * and a success message is displayed to the user.
32
- *
33
- * @throws {Error} If saving an empty search is attempted.
34
- */
35
- saveSearch() {
36
- const { text } = getState(this.queryParamsStore);
37
- if (!text) {
38
- console.error('Saving empty search is not allowed');
39
- return;
40
- }
41
- const savedSearch = { url: window.location.hash.substring(1), date: new Date().toISOString(), display: text };
42
- const savedSearches = this.userSettingsStore.savedSearches();
43
- if (savedSearches.length >= SAVED_SEARCHES_MAX_STORAGE) {
44
- savedSearches.pop();
45
- }
46
- savedSearches.unshift(savedSearch);
47
- this.userSettingsStore.updateSavedSearches(savedSearches);
48
- toast.success('Search successfully saved');
49
- }
50
- /**
51
- * Updates the saved searches in the user settings store.
52
- *
53
- * @param savedSearches - An array of SavedSearch objects to update.
54
- */
55
- updateSavedSearches(savedSearches) {
56
- this.userSettingsStore.updateSavedSearches(savedSearches);
57
- }
58
- /**
59
- * Deletes a saved search from the user settings store.
60
- *
61
- * @param index - The index of the saved search to delete.
62
- */
63
- deleteSavedSearch(index) {
64
- this.userSettingsStore.deleteSavedSearch(index);
65
- }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SavedSearchesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
67
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SavedSearchesService, providedIn: 'root' }); }
68
- }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SavedSearchesService, decorators: [{
70
- type: Injectable,
71
- args: [{
72
- providedIn: 'root'
73
- }]
74
- }] });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtc2VhcmNoZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvc2F2ZWQtc2VhcmNoZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUdoRSxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUt2QyxNQUFNLE9BQU8sb0JBQW9CO0lBSGpDO1FBSXFCLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBZ0VoRTtJQTlEQzs7OztPQUlHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQy9DLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFVBQVU7UUFDZixNQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUNwRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDOUcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTdELElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSwwQkFBMEIsRUFBQyxDQUFDO1lBQ3RELGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CLENBQUMsYUFBNEI7UUFDckQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsS0FBYTtRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0FqRVUsb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICduZ3gtc29ubmVyJztcbmltcG9ydCB7IGdldFN0YXRlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5cbmltcG9ydCB7IFF1ZXJ5UGFyYW1zU3RvcmUsIFVzZXJTZXR0aW5nc1N0b3JlIH0gZnJvbSAnLi4vc3RvcmVzJztcbmltcG9ydCB7IFNhdmVkU2VhcmNoIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuY29uc3QgU0FWRURfU0VBUkNIRVNfTUFYX1NUT1JBR0UgPSAxMDA7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkU2VhcmNoZXNTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHVzZXJTZXR0aW5nc1N0b3JlID0gaW5qZWN0KFVzZXJTZXR0aW5nc1N0b3JlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5UGFyYW1zU3RvcmUgPSBpbmplY3QoUXVlcnlQYXJhbXNTdG9yZSk7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBzYXZlZCBzZWFyY2hlcyBmcm9tIHRoZSB1c2VyIHNldHRpbmdzIHN0b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2F2ZWRTZWFyY2hbXX0gQW4gYXJyYXkgb2Ygc2F2ZWQgc2VhcmNoZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0U2F2ZWRTZWFyY2hlcygpOiBTYXZlZFNlYXJjaFtdIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2V0dGluZ3NTdG9yZS5zYXZlZFNlYXJjaGVzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY3VycmVudCBzZWFyY2ggcXVlcnkgdG8gdGhlIHVzZXIncyBzYXZlZCBzZWFyY2hlcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBjdXJyZW50IHNlYXJjaCB0ZXh0IGZyb20gdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgc3RvcmUuXG4gICAqIElmIHRoZSBzZWFyY2ggdGV4dCBpcyBlbXB0eSwgaXQgbG9ncyBhbiBlcnJvciBhbmQgZXhpdHMuXG4gICAqIE90aGVyd2lzZSwgaXQgY3JlYXRlcyBhIG5ldyBzYXZlZCBzZWFyY2ggb2JqZWN0IHdpdGggdGhlIGN1cnJlbnQgVVJMLCBkYXRlLCBhbmQgc2VhcmNoIHRleHQuXG4gICAqXG4gICAqIFRoZSBuZXcgc2F2ZWQgc2VhcmNoIGlzIGFkZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhdmVkIHNlYXJjaGVzIGFycmF5LlxuICAgKiBJZiB0aGUgYXJyYXkgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHN0b3JhZ2UsIHRoZSBvbGRlc3Qgc2VhcmNoIGlzIHJlbW92ZWQuXG4gICAqXG4gICAqIEZpbmFsbHksIHRoZSB1cGRhdGVkIHNhdmVkIHNlYXJjaGVzIGFycmF5IGlzIHNhdmVkIGJhY2sgdG8gdGhlIHVzZXIgc2V0dGluZ3Mgc3RvcmUsXG4gICAqIGFuZCBhIHN1Y2Nlc3MgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzYXZpbmcgYW4gZW1wdHkgc2VhcmNoIGlzIGF0dGVtcHRlZC5cbiAgICovXG4gIHB1YmxpYyBzYXZlU2VhcmNoKCkge1xuICAgIGNvbnN0ICB7IHRleHQgfSA9IGdldFN0YXRlKHRoaXMucXVlcnlQYXJhbXNTdG9yZSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTYXZpbmcgZW1wdHkgc2VhcmNoIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZWRTZWFyY2ggPSB7IHVybDogd2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpLCBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGRpc3BsYXk6IHRleHQgfTtcbiAgICBjb25zdCBzYXZlZFNlYXJjaGVzID0gdGhpcy51c2VyU2V0dGluZ3NTdG9yZS5zYXZlZFNlYXJjaGVzKCk7XG5cbiAgICBpZiAoc2F2ZWRTZWFyY2hlcy5sZW5ndGggPj0gU0FWRURfU0VBUkNIRVNfTUFYX1NUT1JBR0Upe1xuICAgICAgc2F2ZWRTZWFyY2hlcy5wb3AoKTtcbiAgICB9XG5cbiAgICBzYXZlZFNlYXJjaGVzLnVuc2hpZnQoc2F2ZWRTZWFyY2gpO1xuXG4gICAgdGhpcy51c2VyU2V0dGluZ3NTdG9yZS51cGRhdGVTYXZlZFNlYXJjaGVzKHNhdmVkU2VhcmNoZXMpO1xuXG4gICAgdG9hc3Quc3VjY2VzcygnU2VhcmNoIHN1Y2Nlc3NmdWxseSBzYXZlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHNhdmVkIHNlYXJjaGVzIGluIHRoZSB1c2VyIHNldHRpbmdzIHN0b3JlLlxuICAgKlxuICAgKiBAcGFyYW0gc2F2ZWRTZWFyY2hlcyAtIEFuIGFycmF5IG9mIFNhdmVkU2VhcmNoIG9iamVjdHMgdG8gdXBkYXRlLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVNhdmVkU2VhcmNoZXMoc2F2ZWRTZWFyY2hlczogU2F2ZWRTZWFyY2hbXSkge1xuICAgIHRoaXMudXNlclNldHRpbmdzU3RvcmUudXBkYXRlU2F2ZWRTZWFyY2hlcyhzYXZlZFNlYXJjaGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgc2F2ZWQgc2VhcmNoIGZyb20gdGhlIHVzZXIgc2V0dGluZ3Mgc3RvcmUuXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgc2F2ZWQgc2VhcmNoIHRvIGRlbGV0ZS5cbiAgICovXG4gIHB1YmxpYyBkZWxldGVTYXZlZFNlYXJjaChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy51c2VyU2V0dGluZ3NTdG9yZS5kZWxldGVTYXZlZFNlYXJjaChpbmRleCk7XG4gIH1cbn0iXX0=