@sinequa/atomic-angular 0.0.146

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 (174) hide show
  1. package/assets/tailwind.css +334 -0
  2. package/esm2022/lib/assistant/index.mjs +2 -0
  3. package/esm2022/lib/assistant/signalR.web.service.mjs +81 -0
  4. package/esm2022/lib/components/dropdown-input.mjs +97 -0
  5. package/esm2022/lib/components/dropdown-list.mjs +35 -0
  6. package/esm2022/lib/components/dropdown.mjs +127 -0
  7. package/esm2022/lib/components/index.mjs +7 -0
  8. package/esm2022/lib/components/menu/index.mjs +3 -0
  9. package/esm2022/lib/components/menu/menu-item.mjs +22 -0
  10. package/esm2022/lib/components/menu/menu.mjs +99 -0
  11. package/esm2022/lib/components/metadata/index.mjs +2 -0
  12. package/esm2022/lib/components/metadata/metadata.component.mjs +65 -0
  13. package/esm2022/lib/components/theme/index.mjs +3 -0
  14. package/esm2022/lib/components/theme/theme-selector.component.mjs +67 -0
  15. package/esm2022/lib/components/theme/theme-toggle.component.mjs +67 -0
  16. package/esm2022/lib/directives/index.mjs +5 -0
  17. package/esm2022/lib/directives/infinite-scroll.directive.mjs +47 -0
  18. package/esm2022/lib/directives/select-article-on-click.directive.mjs +39 -0
  19. package/esm2022/lib/directives/show-bookmark.directive.mjs +55 -0
  20. package/esm2022/lib/directives/theme-provider.directive.mjs +31 -0
  21. package/esm2022/lib/guards/auth.guard.mjs +27 -0
  22. package/esm2022/lib/guards/index.mjs +3 -0
  23. package/esm2022/lib/guards/initialization.guard.mjs +41 -0
  24. package/esm2022/lib/interceptors/audit.interceptor.mjs +23 -0
  25. package/esm2022/lib/interceptors/auth.interceptor.mjs +49 -0
  26. package/esm2022/lib/interceptors/body.interceptor.mjs +24 -0
  27. package/esm2022/lib/interceptors/error.interceptor.mjs +35 -0
  28. package/esm2022/lib/interceptors/index.mjs +7 -0
  29. package/esm2022/lib/interceptors/toast.interceptor.mjs +27 -0
  30. package/esm2022/lib/models/aggregation.mjs +2 -0
  31. package/esm2022/lib/models/article-metadata.mjs +2 -0
  32. package/esm2022/lib/models/autocomplete.mjs +2 -0
  33. package/esm2022/lib/models/custom-json.mjs +2 -0
  34. package/esm2022/lib/models/filter-dropdown.mjs +2 -0
  35. package/esm2022/lib/models/index.mjs +7 -0
  36. package/esm2022/lib/models/user-settings.mjs +2 -0
  37. package/esm2022/lib/pipes/highlight-word.pipe.mjs +33 -0
  38. package/esm2022/lib/pipes/index.mjs +3 -0
  39. package/esm2022/lib/pipes/source-icon.pipe.mjs +43 -0
  40. package/esm2022/lib/public-api.mjs +18 -0
  41. package/esm2022/lib/resolvers/index.mjs +2 -0
  42. package/esm2022/lib/resolvers/query-name-resolver.mjs +14 -0
  43. package/esm2022/lib/resources/index.mjs +2 -0
  44. package/esm2022/lib/resources/themes.mjs +53 -0
  45. package/esm2022/lib/services/application.service.mjs +245 -0
  46. package/esm2022/lib/services/autocomplete.service.mjs +85 -0
  47. package/esm2022/lib/services/drawer/backdrop.service.mjs +23 -0
  48. package/esm2022/lib/services/drawer/drawer-stack.service.mjs +152 -0
  49. package/esm2022/lib/services/drawer/drawer.service.mjs +38 -0
  50. package/esm2022/lib/services/index.mjs +12 -0
  51. package/esm2022/lib/services/label.service.mjs +161 -0
  52. package/esm2022/lib/services/navigation.service.mjs +59 -0
  53. package/esm2022/lib/services/saved-searches.service.mjs +75 -0
  54. package/esm2022/lib/services/search.service.mjs +89 -0
  55. package/esm2022/lib/services/selection-history.service.mjs +92 -0
  56. package/esm2022/lib/services/selection.service.mjs +87 -0
  57. package/esm2022/lib/stores/aggregations.store.mjs +59 -0
  58. package/esm2022/lib/stores/app.store.mjs +270 -0
  59. package/esm2022/lib/stores/application.store.mjs +87 -0
  60. package/esm2022/lib/stores/index.mjs +9 -0
  61. package/esm2022/lib/stores/principal.store.mjs +47 -0
  62. package/esm2022/lib/stores/query-params.store.mjs +207 -0
  63. package/esm2022/lib/stores/selection.store.mjs +45 -0
  64. package/esm2022/lib/stores/theme.store.mjs +116 -0
  65. package/esm2022/lib/stores/user-settings.store.mjs +391 -0
  66. package/esm2022/lib/tokens/highlights.mjs +32 -0
  67. package/esm2022/lib/tokens/index.mjs +2 -0
  68. package/esm2022/lib/utils/debounced-signal.mjs +38 -0
  69. package/esm2022/lib/utils/index.mjs +8 -0
  70. package/esm2022/lib/utils/inline-worker.mjs +40 -0
  71. package/esm2022/lib/utils/query.mjs +58 -0
  72. package/esm2022/lib/utils/routes.mjs +28 -0
  73. package/esm2022/lib/utils/tailwind-utils.mjs +6 -0
  74. package/esm2022/lib/utils/theme-body-hook.mjs +18 -0
  75. package/esm2022/lib/utils/theme-registry.mjs +6 -0
  76. package/esm2022/lib/web-services/aggregations.service.mjs +104 -0
  77. package/esm2022/lib/web-services/app.service.mjs +48 -0
  78. package/esm2022/lib/web-services/audit.service.mjs +122 -0
  79. package/esm2022/lib/web-services/index.mjs +10 -0
  80. package/esm2022/lib/web-services/json-method-plugin.service.mjs +54 -0
  81. package/esm2022/lib/web-services/preview.service.mjs +327 -0
  82. package/esm2022/lib/web-services/principal.service.mjs +46 -0
  83. package/esm2022/lib/web-services/query.service.mjs +123 -0
  84. package/esm2022/lib/web-services/text-chunck.service.mjs +46 -0
  85. package/esm2022/public-api.mjs +5 -0
  86. package/esm2022/sinequa-atomic-angular.mjs +5 -0
  87. package/fesm2022/sinequa-atomic-angular.mjs +4420 -0
  88. package/fesm2022/sinequa-atomic-angular.mjs.map +1 -0
  89. package/index.d.ts +5 -0
  90. package/lib/assistant/index.d.ts +1 -0
  91. package/lib/assistant/signalR.web.service.d.ts +46 -0
  92. package/lib/components/dropdown-input.d.ts +18 -0
  93. package/lib/components/dropdown-list.d.ts +8 -0
  94. package/lib/components/dropdown.d.ts +50 -0
  95. package/lib/components/index.d.ts +6 -0
  96. package/lib/components/menu/index.d.ts +2 -0
  97. package/lib/components/menu/menu-item.d.ts +8 -0
  98. package/lib/components/menu/menu.d.ts +24 -0
  99. package/lib/components/metadata/index.d.ts +1 -0
  100. package/lib/components/metadata/metadata.component.d.ts +24 -0
  101. package/lib/components/theme/index.d.ts +2 -0
  102. package/lib/components/theme/theme-selector.component.d.ts +70 -0
  103. package/lib/components/theme/theme-toggle.component.d.ts +10 -0
  104. package/lib/directives/index.d.ts +4 -0
  105. package/lib/directives/infinite-scroll.directive.d.ts +30 -0
  106. package/lib/directives/select-article-on-click.directive.d.ts +14 -0
  107. package/lib/directives/show-bookmark.directive.d.ts +60 -0
  108. package/lib/directives/theme-provider.directive.d.ts +20 -0
  109. package/lib/guards/auth.guard.d.ts +7 -0
  110. package/lib/guards/index.d.ts +2 -0
  111. package/lib/guards/initialization.guard.d.ts +20 -0
  112. package/lib/interceptors/audit.interceptor.d.ts +13 -0
  113. package/lib/interceptors/auth.interceptor.d.ts +14 -0
  114. package/lib/interceptors/body.interceptor.d.ts +11 -0
  115. package/lib/interceptors/error.interceptor.d.ts +9 -0
  116. package/lib/interceptors/index.d.ts +5 -0
  117. package/lib/interceptors/toast.interceptor.d.ts +13 -0
  118. package/lib/models/aggregation.d.ts +12 -0
  119. package/lib/models/article-metadata.d.ts +5 -0
  120. package/lib/models/autocomplete.d.ts +5 -0
  121. package/lib/models/custom-json.d.ts +69 -0
  122. package/lib/models/filter-dropdown.d.ts +10 -0
  123. package/lib/models/index.d.ts +6 -0
  124. package/lib/models/user-settings.d.ts +38 -0
  125. package/lib/pipes/highlight-word.pipe.d.ts +22 -0
  126. package/lib/pipes/index.d.ts +2 -0
  127. package/lib/pipes/source-icon.pipe.d.ts +51 -0
  128. package/lib/public-api.d.ts +14 -0
  129. package/lib/resolvers/index.d.ts +1 -0
  130. package/lib/resolvers/query-name-resolver.d.ts +9 -0
  131. package/lib/resources/index.d.ts +1 -0
  132. package/lib/resources/themes.d.ts +51 -0
  133. package/lib/services/application.service.d.ts +183 -0
  134. package/lib/services/autocomplete.service.d.ts +96 -0
  135. package/lib/services/drawer/backdrop.service.d.ts +9 -0
  136. package/lib/services/drawer/drawer-stack.service.d.ts +70 -0
  137. package/lib/services/drawer/drawer.service.d.ts +15 -0
  138. package/lib/services/index.d.ts +11 -0
  139. package/lib/services/label.service.d.ts +114 -0
  140. package/lib/services/navigation.service.d.ts +33 -0
  141. package/lib/services/saved-searches.service.d.ts +149 -0
  142. package/lib/services/search.service.d.ts +159 -0
  143. package/lib/services/selection-history.service.d.ts +50 -0
  144. package/lib/services/selection.service.d.ts +123 -0
  145. package/lib/stores/aggregations.store.d.ts +25 -0
  146. package/lib/stores/app.store.d.ts +110 -0
  147. package/lib/stores/application.store.d.ts +83 -0
  148. package/lib/stores/index.d.ts +8 -0
  149. package/lib/stores/principal.store.d.ts +47 -0
  150. package/lib/stores/query-params.store.d.ts +128 -0
  151. package/lib/stores/selection.store.d.ts +52 -0
  152. package/lib/stores/theme.store.d.ts +66 -0
  153. package/lib/stores/user-settings.store.d.ts +111 -0
  154. package/lib/tokens/highlights.d.ts +8 -0
  155. package/lib/tokens/index.d.ts +1 -0
  156. package/lib/utils/debounced-signal.d.ts +25 -0
  157. package/lib/utils/index.d.ts +7 -0
  158. package/lib/utils/inline-worker.d.ts +11 -0
  159. package/lib/utils/query.d.ts +26 -0
  160. package/lib/utils/routes.d.ts +16 -0
  161. package/lib/utils/tailwind-utils.d.ts +2 -0
  162. package/lib/utils/theme-body-hook.d.ts +6 -0
  163. package/lib/utils/theme-registry.d.ts +3 -0
  164. package/lib/web-services/aggregations.service.d.ts +57 -0
  165. package/lib/web-services/app.service.d.ts +30 -0
  166. package/lib/web-services/audit.service.d.ts +72 -0
  167. package/lib/web-services/index.d.ts +9 -0
  168. package/lib/web-services/json-method-plugin.service.d.ts +41 -0
  169. package/lib/web-services/preview.service.d.ts +283 -0
  170. package/lib/web-services/principal.service.d.ts +28 -0
  171. package/lib/web-services/query.service.d.ts +29 -0
  172. package/lib/web-services/text-chunck.service.d.ts +22 -0
  173. package/package.json +28 -0
  174. package/public-api.d.ts +1 -0
@@ -0,0 +1,152 @@
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=
@@ -0,0 +1,38 @@
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=
@@ -0,0 +1,12 @@
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==
@@ -0,0 +1,161 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvbGFiZWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLE1BQU0sRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RixPQUFPLEVBQThCLElBQUksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFpQm5HLENBQUM7QUFLRixNQUFNLE9BQU8sWUFBWTtJQUh6QjtRQUlFLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsY0FBUyxHQUFHLE1BQU0sQ0FBc0IsU0FBUyxDQUFDLENBQUM7S0FxS3BEO0lBbktDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUcsQ0FBQztRQUU3RCxNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBc0IsQ0FBQztRQUNsRixJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTNCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMvRSxP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O2tIQUFaLFlBQVksY0FGWCxNQUFNOzsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2FwcC5zdG9yZSc7XG5pbXBvcnQgeyBDQ1dlYlNlcnZpY2UsIGZldGNoTGFiZWxzLCBsYWJlbHMsIExhYmVsc1JpZ2h0cywgUXVlcnkgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlyc3RWYWx1ZUZyb20sIGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG50eXBlIExhYmVsc1dlYlNlcnZpY2UgPSBDQ1dlYlNlcnZpY2UgJiBMYWJlbHNDb25maWcgJiB7XG4gIGFsbG93ZWRXaXRoQW55U0JBPzogYm9vbGVhbixcbiAgbGFiZWxzQnVsa0RvY0xpbWl0Pzogc3RyaW5nLFxuICByZXZpc2lvbj86IG51bWJlcixcbiAgdXNlRGlzdHJpYnV0aW9uUmVnZXg/OiBib29sZWFuLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsc0NvbmZpZyB7XG4gIGFsbG93UHVibGljTGFiZWxzQ3JlYXRpb24/OiBib29sZWFuO1xuICBhbGxvd1B1YmxpY0xhYmVsc01vZGlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHByaXZhdGVMYWJlbHNGaWVsZD86IHN0cmluZztcbiAgcHVibGljTGFiZWxzRmllbGQ/OiBzdHJpbmc7XG4gIGRlZmF1bHRQdWJsaWNMYWJlbHM/OiBzdHJpbmc7XG4gIGxhYmVsc0F1dG9TdWdnZXN0TWF4Q291bnQ/OiBzdHJpbmc7XG4gIGxhYmVsc0F1dG9TdWdnZXN0V2lsZGNhcmQ/OiBzdHJpbmc7XG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMYWJlbFNlcnZpY2Uge1xuICBhcHBTdG9yZSA9IGluamVjdChBcHBTdG9yZSk7XG5cbiAgaGFzQWNjZXNzID0gc2lnbmFsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIENoZWNrIHVzZXIgcmlnaHRzIHRvIHZlcmlmeSBpZiB0aGV5IGNhbiBhY2Nlc3MgbGFiZWxzIGhhbmRsaW5nXG4gICAqIEByZXR1cm5zIGlmIGhhcyB0aGUgcmlnaHRzXG4gICAqL1xuICBhc3luYyBjYW5IYW5kbGVMYWJlbHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuaGFzQWNjZXNzKCkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuaGFzQWNjZXNzKCkhO1xuXG4gICAgY29uc3Qgc2VydmljZSA9ICh0aGlzLmFwcFN0b3JlLmdldFdlYlNlcnZpY2VCeVR5cGUoJ2xhYmVscycpIGFzIExhYmVsc1dlYlNlcnZpY2UpO1xuICAgIGlmICghc2VydmljZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJpZ2h0cyA9IGF3YWl0IGxhYmVscy5nZXRVc2VyUmlnaHRzKCk7XG4gICAgICB0aGlzLmhhc0FjY2Vzcy5zZXQocmlnaHRzLmNhbkVkaXRQdWJsaWNMYWJlbHMgfHwgcmlnaHRzLmNhbk1hbmFnZVB1YmxpY0xhYmVscyk7XG4gICAgICByZXR1cm4gdGhpcy5oYXNBY2Nlc3MoKSE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwibGFiZWxzLmNhbkhhbmRsZUxhYmVscyBmYWlsdXJlIC0gZXJyb3I6IFwiLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWxldmFudCBjb25maWcgaW5mbyBmcm9tIHRoZSBsYWJlbHMgd2ViIHNlcnZpY2VcbiAgICogQHJldHVybnMgdGhlIExhYmVsc0NvbmZpZyBvciB1bmRlZmluZWQgaWYgbm8gcmlnaHRzXG4gICAqL1xuICBnZXRMYWJlbHNDb25maWcoKTogT2JzZXJ2YWJsZTxMYWJlbHNDb25maWcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNhbkhhbmRsZUxhYmVscygpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY2FuSGFuZGxlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5IYW5kbGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBjb25zdCB7IGFsbG93UHVibGljTGFiZWxzQ3JlYXRpb24sIGFsbG93UHVibGljTGFiZWxzTW9kaWZpY2F0aW9uLCBwcml2YXRlTGFiZWxzRmllbGQsIHB1YmxpY0xhYmVsc0ZpZWxkLFxuICAgICAgICAgICAgZGVmYXVsdFB1YmxpY0xhYmVscywgbGFiZWxzQXV0b1N1Z2dlc3RNYXhDb3VudCwgbGFiZWxzQXV0b1N1Z2dlc3RXaWxkY2FyZCB9ID0gKHRoaXMuYXBwU3RvcmUuZ2V0V2ViU2VydmljZUJ5VHlwZSgnbGFiZWxzJykgYXMgTGFiZWxzV2ViU2VydmljZSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxsb3dQdWJsaWNMYWJlbHNDcmVhdGlvbixcbiAgICAgICAgICAgIGFsbG93UHVibGljTGFiZWxzTW9kaWZpY2F0aW9uLFxuICAgICAgICAgICAgcHJpdmF0ZUxhYmVsc0ZpZWxkLFxuICAgICAgICAgICAgcHVibGljTGFiZWxzRmllbGQsXG4gICAgICAgICAgICBkZWZhdWx0UHVibGljTGFiZWxzLFxuICAgICAgICAgICAgbGFiZWxzQXV0b1N1Z2dlc3RNYXhDb3VudCxcbiAgICAgICAgICAgIGxhYmVsc0F1dG9TdWdnZXN0V2lsZGNhcmRcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGxhYmVscyBmcm9tIHN0cmluZ1xuICAgKiBAcGFyYW0gcHJlZml4IHRoZSBzdHJpbmcgcHJlZml4IHRvIGZpbHRlciB3aXRoXG4gICAqIEBwYXJhbSBwdWJsaWNPbmx5IHdoZXRoZXIgdGhleSBzaG91bGQgYmUgcHVibGljIG9yIG5vdFxuICAgKiBAcGFyYW0gbG9jYWxlIG9wdGlvbmFsIGxvY2FsZSBmaWx0ZXJpbmdcbiAgICogQHJldHVybnMgbGlzdCBvZiBsYWJlbCBzdHJpbmdzXG4gICAqL1xuICBmZXRjaChwcmVmaXg6IHN0cmluZywgcHVibGljT25seTogYm9vbGVhbiA9IHRydWUsIGxvY2FsZT86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gZnJvbShmZXRjaExhYmVscyhwcmVmaXgsIHB1YmxpY09ubHksIGxvY2FsZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBzb21lIGxhYmVscyB0byBtYW55IGRvY3VtZW50c1xuICAgKiBAcGFyYW0gbGFiZWxzVG9BZGQgbGlzdCBvZiBsYWJlbHMgdG8gYWRkXG4gICAqIEBwYXJhbSBpZHMgbGlzdCBvZiBkb2N1bWVudCBpZCB0byBhZGQgdGhlIGxhYmVsXG4gICAqIEBwYXJhbSBwdWJsaWNPbmx5IHdoZXRoZXIgdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcHVibGljIG9ubHlcbiAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBhZGQobGFiZWxzVG9BZGQ6IHN0cmluZ1tdLCBpZHM6IHN0cmluZ1tdLCBwdWJsaWNPbmx5PzogYm9vbGVhbik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMuY2FuSGFuZGxlTGFiZWxzKCkpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChjYW5IYW5kbGU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAoIWNhbkhhbmRsZSkgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICByZXR1cm4gZnJvbShsYWJlbHMuYWRkKGxhYmVsc1RvQWRkLCBpZHMsIHB1YmxpY09ubHkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHNvbWUgbGFiZWxzIGZyb20gbWFueSBkb2N1bWVudHNcbiAgICogQHBhcmFtIGxhYmVsc1RvUmVtb3ZlIGxpc3Qgb2YgbGFiZWxzIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gaWRzIGxpc3Qgb2YgZG9jdW1lbnQgaWQgdG8gYWRkIHRoZSBsYWJlbFxuICAgKiBAcGFyYW0gcHVibGljT25seSB3aGV0aGVyIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHB1YmxpYyBvbmx5XG4gICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgcmVtb3ZlKGxhYmVsc1RvUmVtb3ZlOiBzdHJpbmdbXSwgaWRzOiBzdHJpbmdbXSwgcHVibGljT25seT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNhbkhhbmRsZUxhYmVscygpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY2FuSGFuZGxlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5IYW5kbGUpIHJldHVybiBvZih1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZyb20obGFiZWxzLnJlbW92ZShsYWJlbHNUb1JlbW92ZSwgaWRzLCBwdWJsaWNPbmx5KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hbWUgc29tZSBsYWJlbHMgdG8gYSBuZXcgbmFtZVxuICAgKiBAcGFyYW0gbGFiZWxzVG9SZW5hbWUgbGlzdCBvZiBsYWJlbHMgdG8gcmVuYW1lXG4gICAqIEBwYXJhbSBuZXdMYWJlbCB0aGUgbmV3IGxhYmVsIG5hbWVcbiAgICogQHBhcmFtIHB1YmxpY09ubHkgd2hldGhlciB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwdWJsaWMgb25seVxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIHJlbmFtZShsYWJlbHNUb1JlbmFtZTogc3RyaW5nW10sIG5ld0xhYmVsOiBzdHJpbmcsIHB1YmxpY09ubHk/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jYW5IYW5kbGVMYWJlbHMoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNhbkhhbmRsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmICghY2FuSGFuZGxlKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICAgIHJldHVybiBmcm9tKGxhYmVscy5yZW5hbWUobGFiZWxzVG9SZW5hbWUsIG5ld0xhYmVsLCBwdWJsaWNPbmx5KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzb21lIGxhYmVsc1xuICAgKiBAcGFyYW0gbGFiZWxzVG9EZWxldGUgdGhlIGxhYmVscyB0byBkZWxldGVcbiAgICogQHBhcmFtIHB1YmxpY09ubHkgd2hldGhlciB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwdWJsaWMgb25seVxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIGRlbGV0ZShsYWJlbHNUb0RlbGV0ZTogc3RyaW5nW10sIHB1YmxpY09ubHk/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jYW5IYW5kbGVMYWJlbHMoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNhbkhhbmRsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmICghY2FuSGFuZGxlKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICAgIHJldHVybiBmcm9tKGxhYmVscy5kZWxldGUobGFiZWxzVG9EZWxldGUsIHB1YmxpY09ubHkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHNvbWUgbGFiZWxzIGZvciBhIHF1ZXJ5XG4gICAqIEBwYXJhbSBsYWJlbHN0b0FkZCB0aGUgbGFiZWxzIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gcXVlcnkgdGhlIHF1ZXJ5IG9iamVjdCB0byB3aGljaCB0aGUgbGFiZWxzIHdpbGwgYmUgYWRkZWRcbiAgICogQHBhcmFtIHB1YmxpY09ubHkgd2hldGhlciB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwdWJsaWMgb25seVxuICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIGJ1bGtBZGQobGFiZWxzdG9BZGQ6IHN0cmluZ1tdLCBxdWVyeTogUXVlcnksIHB1YmxpY09ubHk/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jYW5IYW5kbGVMYWJlbHMoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNhbkhhbmRsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmICghY2FuSGFuZGxlKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICAgIHJldHVybiBmcm9tKGxhYmVscy5idWxrQWRkKGxhYmVsc3RvQWRkLCBxdWVyeSwgcHVibGljT25seSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgc29tZSBsYWJlbHMgZnJvbSBhIHF1ZXJ5XG4gICAqIEBwYXJhbSBsYWJlbHNUb1JlbW92ZSB0aGUgbGFiZWxzIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gcXVlcnkgdGhlIHF1ZXJ5IG9iamVjdCB0byB3aGljaCB0aGUgbGFiZWxzIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0gcHVibGljT25seSB3aGV0aGVyIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHB1YmxpYyBvbmx5XG4gICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgYnVsa1JlbW92ZShsYWJlbHNUb1JlbW92ZTogc3RyaW5nW10sIHF1ZXJ5OiBRdWVyeSwgcHVibGljT25seT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNhbkhhbmRsZUxhYmVscygpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY2FuSGFuZGxlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5IYW5kbGUpIHJldHVybiBvZih1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZyb20obGFiZWxzLmJ1bGtSZW1vdmUobGFiZWxzVG9SZW1vdmUsIHF1ZXJ5LCBwdWJsaWNPbmx5KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,59 @@
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==
@@ -0,0 +1,75 @@
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=