@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,58 @@
1
+ import { assertInInjectionContext, inject } from '@angular/core';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
+ import { getQueryParamsFromUrl } from '@sinequa/atomic';
4
+ /**
5
+ * Retrieves the query name from the current route.
6
+ *
7
+ * @remarks
8
+ * This function must be used within an injection context.
9
+ *
10
+ * This function traverses the route tree recursively to find the query name.
11
+ * It first checks for a query parameter `t` in the route's snapshot. If the query name is not found
12
+ * in the route data, it attempts to find it in the child routes of the "search" route.
13
+ * If the query name is still not found, it falls back to the `queryName` defined in the route's data.
14
+ *
15
+ * @returns {string | undefined} The query name if found, otherwise `undefined`.
16
+ */
17
+ export function getQueryNameFromRoute() {
18
+ assertInInjectionContext(getQueryNameFromRoute);
19
+ const route = inject(ActivatedRoute);
20
+ const routes = inject(Router);
21
+ const recursive = (route) => {
22
+ if (route?.firstChild)
23
+ return recursive(route.firstChild);
24
+ // Get query name from route data
25
+ const { t } = route.snapshot.queryParams;
26
+ // ! This is a workaround for the case where the queryName is not defined in the route data
27
+ // "search" is the parent route of the search results, and "t" is the query parameter for the tab
28
+ const { queryName } = routes.config.filter(p => p.path === "search")[0].children?.find(route => route.path === t)?.data || {};
29
+ if (queryName)
30
+ return queryName;
31
+ // fallback to queryName from route data
32
+ if (route?.snapshot.data['queryName'])
33
+ return route.snapshot.data['queryName'];
34
+ return undefined;
35
+ };
36
+ return recursive(route);
37
+ }
38
+ /**
39
+ * Builds a query object based on the provided partial query.
40
+ * If any properties are missing in the partial query, default values are used.
41
+ *
42
+ * @remarks
43
+ * This function must be used within an injection context.
44
+ *
45
+ * @param query - The partial query object.
46
+ * @returns The complete query object.
47
+ */
48
+ export function buildQuery(query) {
49
+ assertInInjectionContext(buildQuery);
50
+ const name = query?.name || getQueryNameFromRoute();
51
+ const params = getQueryParamsFromUrl(window.location.toString());
52
+ return {
53
+ ...params, // default values retrieved from the URL
54
+ ...query, // override with query
55
+ name, // override with query name
56
+ };
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3V0aWxzL3F1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUsvRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUU3QixNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQXFCLEVBQXNCLEVBQUU7UUFDOUQsSUFBSSxLQUFLLEVBQUUsVUFBVTtZQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxRCxpQ0FBaUM7UUFDakMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLDJGQUEyRjtRQUMzRixpR0FBaUc7UUFDakcsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzlILElBQUksU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRWhDLHdDQUF3QztRQUN4QyxJQUFJLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0UsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFBO0lBRUQsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBc0I7SUFDL0Msd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRSxPQUFRO1FBQ04sR0FBRyxNQUFNLEVBQUcsd0NBQXdDO1FBQ3BELEdBQUcsS0FBSyxFQUFJLHNCQUFzQjtRQUNsQyxJQUFJLEVBQVEsMkJBQTJCO0tBQzlCLENBQUE7QUFFYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBnZXRRdWVyeVBhcmFtc0Zyb21VcmwsIFF1ZXJ5IH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHsgUXVlcnlQYXJhbXNTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcyc7XG5cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHF1ZXJ5IG5hbWUgZnJvbSB0aGUgY3VycmVudCByb3V0ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByb3V0ZSB0cmVlIHJlY3Vyc2l2ZWx5IHRvIGZpbmQgdGhlIHF1ZXJ5IG5hbWUuXG4gKiBJdCBmaXJzdCBjaGVja3MgZm9yIGEgcXVlcnkgcGFyYW1ldGVyIGB0YCBpbiB0aGUgcm91dGUncyBzbmFwc2hvdC4gSWYgdGhlIHF1ZXJ5IG5hbWUgaXMgbm90IGZvdW5kXG4gKiBpbiB0aGUgcm91dGUgZGF0YSwgaXQgYXR0ZW1wdHMgdG8gZmluZCBpdCBpbiB0aGUgY2hpbGQgcm91dGVzIG9mIHRoZSBcInNlYXJjaFwiIHJvdXRlLlxuICogSWYgdGhlIHF1ZXJ5IG5hbWUgaXMgc3RpbGwgbm90IGZvdW5kLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBgcXVlcnlOYW1lYCBkZWZpbmVkIGluIHRoZSByb3V0ZSdzIGRhdGEuXG4gKlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIHF1ZXJ5IG5hbWUgaWYgZm91bmQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5TmFtZUZyb21Sb3V0ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZ2V0UXVlcnlOYW1lRnJvbVJvdXRlKTtcblxuICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIGNvbnN0IHJvdXRlcyA9IGluamVjdChSb3V0ZXIpXG5cbiAgY29uc3QgcmVjdXJzaXZlID0gKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHJvdXRlPy5maXJzdENoaWxkKSByZXR1cm4gcmVjdXJzaXZlKHJvdXRlLmZpcnN0Q2hpbGQpO1xuXG4gICAgLy8gR2V0IHF1ZXJ5IG5hbWUgZnJvbSByb3V0ZSBkYXRhXG4gICAgY29uc3QgeyB0IH0gPSByb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAvLyAhIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgcXVlcnlOYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZSByb3V0ZSBkYXRhXG4gICAgLy8gXCJzZWFyY2hcIiBpcyB0aGUgcGFyZW50IHJvdXRlIG9mIHRoZSBzZWFyY2ggcmVzdWx0cywgYW5kIFwidFwiIGlzIHRoZSBxdWVyeSBwYXJhbWV0ZXIgZm9yIHRoZSB0YWJcbiAgICBjb25zdCB7IHF1ZXJ5TmFtZSB9ID0gcm91dGVzLmNvbmZpZy5maWx0ZXIocCA9PiBwLnBhdGggPT09IFwic2VhcmNoXCIpWzBdLmNoaWxkcmVuPy5maW5kKHJvdXRlID0+IHJvdXRlLnBhdGggPT09IHQpPy5kYXRhIHx8IHt9O1xuICAgIGlmIChxdWVyeU5hbWUpIHJldHVybiBxdWVyeU5hbWU7XG5cbiAgICAvLyBmYWxsYmFjayB0byBxdWVyeU5hbWUgZnJvbSByb3V0ZSBkYXRhXG4gICAgaWYgKHJvdXRlPy5zbmFwc2hvdC5kYXRhWydxdWVyeU5hbWUnXSkgcmV0dXJuIHJvdXRlLnNuYXBzaG90LmRhdGFbJ3F1ZXJ5TmFtZSddO1xuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiByZWN1cnNpdmUocm91dGUpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHF1ZXJ5IG9iamVjdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFydGlhbCBxdWVyeS5cbiAqIElmIGFueSBwcm9wZXJ0aWVzIGFyZSBtaXNzaW5nIGluIHRoZSBwYXJ0aWFsIHF1ZXJ5LCBkZWZhdWx0IHZhbHVlcyBhcmUgdXNlZC5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBwYXJ0aWFsIHF1ZXJ5IG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSBxdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFF1ZXJ5KHF1ZXJ5PzogUGFydGlhbDxRdWVyeT4pOiBRdWVyeSB7XG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChidWlsZFF1ZXJ5KTtcblxuICBjb25zdCBuYW1lID0gcXVlcnk/Lm5hbWUgfHwgZ2V0UXVlcnlOYW1lRnJvbVJvdXRlKCk7XG4gIGNvbnN0IHBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zRnJvbVVybCh3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKSk7XG4gIHJldHVybiAoe1xuICAgIC4uLnBhcmFtcywgIC8vIGRlZmF1bHQgdmFsdWVzIHJldHJpZXZlZCBmcm9tIHRoZSBVUkxcbiAgICAuLi5xdWVyeSwgICAvLyBvdmVycmlkZSB3aXRoIHF1ZXJ5XG4gICAgbmFtZSwgICAgICAgLy8gb3ZlcnJpZGUgd2l0aCBxdWVyeSBuYW1lXG4gIH0gYXMgUXVlcnkpXG5cbn1cbiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { assertInInjectionContext, inject } from "@angular/core";
2
+ import { ActivatedRoute, Router } from "@angular/router";
3
+ /**
4
+ * Retrieves the current path from the Angular `ActivatedRoute` service.
5
+ *
6
+ * @returns {string | undefined} The current path as a string, or `undefined` if the path cannot be determined.
7
+ */
8
+ export function getCurrentPath() {
9
+ assertInInjectionContext(getCurrentPath);
10
+ const route = inject(ActivatedRoute);
11
+ return route?.snapshot.url.toString();
12
+ }
13
+ /**
14
+ * Retrieves the current query name based on the current path and router configuration.
15
+ *
16
+ * This function asserts that it is being called within an injection context and then
17
+ * uses Angular's dependency injection to get the router configuration. It matches the
18
+ * current path against the router's configuration to find the corresponding query name.
19
+ *
20
+ * @returns {string | undefined} The name of the current query if found, otherwise undefined.
21
+ */
22
+ export function getCurrentQueryName() {
23
+ assertInInjectionContext(getCurrentQueryName);
24
+ const routes = inject(Router).config;
25
+ const path = getCurrentPath();
26
+ return routes.find(r => r.path === 'search')?.children?.find(r => r.path === path)?.data?.['queryName'];
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi91dGlscy9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3pEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1Qix3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV6QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckMsT0FBTyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBSUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUVyQyxNQUFNLElBQUksR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUU5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBwYXRoIGZyb20gdGhlIEFuZ3VsYXIgYEFjdGl2YXRlZFJvdXRlYCBzZXJ2aWNlLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgY3VycmVudCBwYXRoIGFzIGEgc3RyaW5nLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50UGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChnZXRDdXJyZW50UGF0aCk7XHJcblxyXG4gIGNvbnN0IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuXHJcbiAgcmV0dXJuIHJvdXRlPy5zbmFwc2hvdC51cmwudG9TdHJpbmcoKTtcclxufVxyXG5cclxuXHJcblxyXG4vKipcclxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50IHF1ZXJ5IG5hbWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGF0aCBhbmQgcm91dGVyIGNvbmZpZ3VyYXRpb24uXHJcbiAqXHJcbiAqIFRoaXMgZnVuY3Rpb24gYXNzZXJ0cyB0aGF0IGl0IGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQgYW5kIHRoZW5cclxuICogdXNlcyBBbmd1bGFyJ3MgZGVwZW5kZW5jeSBpbmplY3Rpb24gdG8gZ2V0IHRoZSByb3V0ZXIgY29uZmlndXJhdGlvbi4gSXQgbWF0Y2hlcyB0aGVcclxuICogY3VycmVudCBwYXRoIGFnYWluc3QgdGhlIHJvdXRlcidzIGNvbmZpZ3VyYXRpb24gdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBuYW1lLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBxdWVyeSBpZiBmb3VuZCwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50UXVlcnlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGdldEN1cnJlbnRRdWVyeU5hbWUpO1xyXG5cclxuICBjb25zdCByb3V0ZXMgPSBpbmplY3QoUm91dGVyKS5jb25maWc7XHJcblxyXG4gIGNvbnN0IHBhdGggPSBnZXRDdXJyZW50UGF0aCgpO1xyXG5cclxuICByZXR1cm4gcm91dGVzLmZpbmQociA9PiByLnBhdGggPT09ICdzZWFyY2gnKT8uY2hpbGRyZW4/LmZpbmQociA9PiByLnBhdGggPT09IHBhdGgpPy5kYXRhPy5bJ3F1ZXJ5TmFtZSddO1xyXG59Il19
@@ -0,0 +1,6 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbHdpbmQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3V0aWxzL3RhaWx3aW5kLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QyxNQUFNLFVBQVUsRUFBRSxDQUFDLEdBQUcsTUFBb0I7SUFDeEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ2xhc3NWYWx1ZSwgY2xzeCB9IGZyb20gJ2Nsc3gnO1xyXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XHJcbiAgcmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKTtcclxufVxyXG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { effect, inject, runInInjectionContext } from "@angular/core";
2
+ import { applyThemeToNativeElement, ThemeStore } from "../stores";
3
+ export function withThemeBodyHook(app, params) {
4
+ runInInjectionContext(app.injector, () => {
5
+ const themeStore = inject(ThemeStore);
6
+ const { scope, theme } = params || { scope: 'application', theme: 'Default' };
7
+ themeStore.setCurrentTheme(scope, theme);
8
+ applyThemeToNativeElement(window.document.body, themeStore.scopes()?.[scope]?.cssVars?.light);
9
+ effect(() => {
10
+ const bodyScope = themeStore.scopes()?.[scope];
11
+ const vars = bodyScope.darkMode ? bodyScope.cssVars.dark : bodyScope.cssVars.light;
12
+ if (vars)
13
+ applyThemeToNativeElement(window.document.body, vars);
14
+ });
15
+ });
16
+ return app;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtYm9keS1ob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi91dGlscy90aGVtZS1ib2R5LWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFPbEUsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixHQUFtQixFQUNuQixNQUEyQztJQUUzQyxxQkFBcUIsQ0FDbkIsR0FBRyxDQUFDLFFBQVEsRUFDWixHQUFHLEVBQUU7UUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUU5RSxVQUFVLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV6Qyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUYsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUVuRixJQUFJLElBQUk7Z0JBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQ0YsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgYXBwbHlUaGVtZVRvTmF0aXZlRWxlbWVudCwgVGhlbWVTdG9yZSB9IGZyb20gXCIuLi9zdG9yZXNcIjtcblxuZXhwb3J0IHR5cGUgVGhlbWVCb2R5SG9va1BhcmFtZXRlcnMgPSB7XG4gIHNjb3BlOiBzdHJpbmc7XG4gIHRoZW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRoZW1lQm9keUhvb2soXG4gIGFwcDogQXBwbGljYXRpb25SZWYsXG4gIHBhcmFtczogVGhlbWVCb2R5SG9va1BhcmFtZXRlcnMgfCB1bmRlZmluZWRcbik6IEFwcGxpY2F0aW9uUmVmIHtcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0KFxuICAgIGFwcC5pbmplY3RvcixcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCB0aGVtZVN0b3JlID0gaW5qZWN0KFRoZW1lU3RvcmUpO1xuICAgICAgY29uc3QgeyBzY29wZSwgdGhlbWUgfSA9IHBhcmFtcyB8fCB7IHNjb3BlOiAnYXBwbGljYXRpb24nLCB0aGVtZTogJ0RlZmF1bHQnIH07XG5cbiAgICAgIHRoZW1lU3RvcmUuc2V0Q3VycmVudFRoZW1lKHNjb3BlLCB0aGVtZSk7XG5cbiAgICAgIGFwcGx5VGhlbWVUb05hdGl2ZUVsZW1lbnQod2luZG93LmRvY3VtZW50LmJvZHksIHRoZW1lU3RvcmUuc2NvcGVzKCk/LltzY29wZV0/LmNzc1ZhcnM/LmxpZ2h0KTtcblxuICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgYm9keVNjb3BlID0gdGhlbWVTdG9yZS5zY29wZXMoKT8uW3Njb3BlXTtcbiAgICAgICAgY29uc3QgdmFycyA9IGJvZHlTY29wZS5kYXJrTW9kZSA/IGJvZHlTY29wZS5jc3NWYXJzLmRhcmsgOiBib2R5U2NvcGUuY3NzVmFycy5saWdodDtcblxuICAgICAgICBpZiAodmFycykgYXBwbHlUaGVtZVRvTmF0aXZlRWxlbWVudCh3aW5kb3cuZG9jdW1lbnQuYm9keSwgdmFycyk7XG4gICAgICB9KVxuICAgIH1cbiAgKTtcblxuICByZXR1cm4gYXBwO1xufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { THEMES } from "../resources";
2
+ export function withThemes(app, themes) {
3
+ themes.forEach(theme => THEMES.push(theme));
4
+ return app;
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3V0aWxzL3RoZW1lLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBUyxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFtQixFQUFFLE1BQWU7SUFDN0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1QyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IFRoZW1lLCBUSEVNRVMgfSBmcm9tIFwiLi4vcmVzb3VyY2VzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGhlbWVzKGFwcDogQXBwbGljYXRpb25SZWYsIHRoZW1lczogVGhlbWVbXSk6IEFwcGxpY2F0aW9uUmVmIHtcbiAgdGhlbWVzLmZvckVhY2godGhlbWUgPT4gVEhFTUVTLnB1c2godGhlbWUpKTtcblxuICByZXR1cm4gYXBwO1xufVxuIl19
@@ -0,0 +1,104 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { catchError, map, tap, throwError } from 'rxjs';
4
+ import { escapeExpr, globalConfig } from '@sinequa/atomic';
5
+ import { AggregationsStore, AppStore } from '../stores';
6
+ import { QueryService } from './query.service';
7
+ import * as i0 from "@angular/core";
8
+ export class AggregationsService {
9
+ constructor() {
10
+ this.http = inject(HttpClient);
11
+ this.queryService = inject(QueryService);
12
+ this.appStore = inject(AppStore);
13
+ this.aggregationsStore = inject(AggregationsStore);
14
+ this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
15
+ }
16
+ loadMore(query, aggregation, audit) {
17
+ const { app } = globalConfig;
18
+ // skip cached items for computation
19
+ const skip = aggregation.items?.filter(i => !(i.$cached))?.length || 0;
20
+ const count = 10;
21
+ const aggregations = { [aggregation.name]: { skip, count } };
22
+ const q = { ...query, action: "aggregate", aggregations };
23
+ // add audit record if available
24
+ const $auditRecord = audit ? { auditEvents: [audit] } : undefined;
25
+ const body = {
26
+ app,
27
+ query: q,
28
+ $auditRecord
29
+ };
30
+ return this.http.post(this.API_URL + "/query", body).pipe(map(result => {
31
+ const { aggregations } = result;
32
+ const agg = aggregations[0];
33
+ if (agg.items) {
34
+ agg.$hasMore = agg.items.length > count;
35
+ agg.items = [...aggregation.items, ...agg.items];
36
+ }
37
+ else {
38
+ aggregation.$hasMore = false;
39
+ return aggregation;
40
+ }
41
+ return agg;
42
+ }), catchError(error => {
43
+ console.log("aggregation.loadMore failure - error: ", error);
44
+ return throwError(() => new Error(error));
45
+ }), tap(response => console.log("aggregation.loadMore success - data: ", response)));
46
+ }
47
+ open(query, aggregation, item) {
48
+ const value = `/${item.$path}/*`;
49
+ const expression = `${aggregation.column}: ${escapeExpr(value)}`;
50
+ const q = {
51
+ ...query,
52
+ action: "open",
53
+ open: [{ expression, aggregation: aggregation.name }]
54
+ };
55
+ return this.queryService.search(q).pipe(map(results => {
56
+ // find the node in the tree and replace it with the new one
57
+ const items = results.aggregations[0].items;
58
+ const newNode = this.findNode(items, item.$path);
59
+ if (!newNode) {
60
+ return aggregation;
61
+ }
62
+ // mark the node as opened
63
+ newNode.$opened = true;
64
+ return this.replaceInTree(aggregation, item.$path, newNode);
65
+ }));
66
+ }
67
+ findNode(items, path = "") {
68
+ if (!items || items.length === 0) {
69
+ return undefined;
70
+ }
71
+ for (const item of items) {
72
+ if (item.$path === path) {
73
+ return item;
74
+ }
75
+ if (item.items) {
76
+ const found = this.findNode(item.items, path);
77
+ if (found) {
78
+ return found;
79
+ }
80
+ }
81
+ }
82
+ return undefined;
83
+ }
84
+ replaceInTree(tree, valueToFind = "", newValue) {
85
+ if (tree.$path === valueToFind) {
86
+ return newValue;
87
+ }
88
+ if (tree.hasChildren && tree.items) {
89
+ for (let i = 0; i < tree.items.length; i++) {
90
+ tree.items[i] = this.replaceInTree(tree.items[i], valueToFind, newValue);
91
+ }
92
+ }
93
+ return tree;
94
+ }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AggregationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
96
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AggregationsService, providedIn: 'root' }); }
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AggregationsService, decorators: [{
99
+ type: Injectable,
100
+ args: [{
101
+ providedIn: 'root'
102
+ }]
103
+ }] });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9hZ2dyZWdhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRSxPQUFPLEVBQWlGLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLL0MsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUlxQixTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZELGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFcEMsWUFBTyxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7S0F1RzFFO0lBckdDLFFBQVEsQ0FBQyxLQUFxQixFQUFFLFdBQXdCLEVBQUUsS0FBbUI7UUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQztRQUU3QixvQ0FBb0M7UUFDcEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtB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Q0FBQztZQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQTdHVSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIG1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBBZ2dyZWdhdGlvbiwgQXVkaXRFdmVudHMsIFF1ZXJ5LCBSZXN1bHQsIFRyZWVBZ2dyZWdhdGlvbiwgVHJlZUFnZ3JlZ2F0aW9uTm9kZSwgZXNjYXBlRXhwciwgZ2xvYmFsQ29uZmlnIH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcclxuXHJcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uc1N0b3JlLCBBcHBTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4vcXVlcnkuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGlvbnNTZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlTZXJ2aWNlID0gaW5qZWN0KFF1ZXJ5U2VydmljZSk7XHJcblxyXG4gIGFwcFN0b3JlID0gaW5qZWN0KEFwcFN0b3JlKTtcclxuICBhZ2dyZWdhdGlvbnNTdG9yZSA9IGluamVjdChBZ2dyZWdhdGlvbnNTdG9yZSk7XHJcblxyXG4gIHByb3RlY3RlZCBBUElfVVJMID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9LyR7Z2xvYmFsQ29uZmlnLmFwaVBhdGh9YDtcclxuXHJcbiAgbG9hZE1vcmUocXVlcnk6IFBhcnRpYWw8UXVlcnk+LCBhZ2dyZWdhdGlvbjogQWdncmVnYXRpb24sIGF1ZGl0PzogQXVkaXRFdmVudHMpOiBPYnNlcnZhYmxlPEFnZ3JlZ2F0aW9uPiB7XHJcbiAgICBjb25zdCB7IGFwcCB9ID0gZ2xvYmFsQ29uZmlnO1xyXG5cclxuICAgIC8vIHNraXAgY2FjaGVkIGl0ZW1zIGZvciBjb21wdXRhdGlvblxyXG4gICAgY29uc3Qgc2tpcCA9IGFnZ3JlZ2F0aW9uLml0ZW1zPy5maWx0ZXIoaSA9PiAhKGkuJGNhY2hlZCkpPy5sZW5ndGggfHwgMDtcclxuICAgIGNvbnN0IGNvdW50ID0gMTA7XHJcblxyXG4gICAgY29uc3QgYWdncmVnYXRpb25zID0geyBbYWdncmVnYXRpb24ubmFtZV06IHsgc2tpcCwgY291bnQgfSB9O1xyXG5cclxuICAgIGNvbnN0IHE6IFBhcnRpYWw8UXVlcnk+ID0geyAuLi5xdWVyeSwgYWN0aW9uOiBcImFnZ3JlZ2F0ZVwiLCBhZ2dyZWdhdGlvbnMgfVxyXG5cclxuICAgIC8vIGFkZCBhdWRpdCByZWNvcmQgaWYgYXZhaWxhYmxlXHJcbiAgICBjb25zdCAkYXVkaXRSZWNvcmQgPSBhdWRpdCA/IHsgYXVkaXRFdmVudHM6IFthdWRpdF0gfSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBib2R5ID0ge1xyXG4gICAgICBhcHAsXHJcbiAgICAgIHF1ZXJ5OiBxLFxyXG4gICAgICAkYXVkaXRSZWNvcmRcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQVBJX1VSTCArIFwiL3F1ZXJ5XCIsIGJvZHkpLnBpcGUoXHJcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgYWdncmVnYXRpb25zIH0gPSByZXN1bHQgYXMgUmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IGFnZyA9IGFnZ3JlZ2F0aW9uc1swXTtcclxuXHJcbiAgICAgICAgaWYgKGFnZy5pdGVtcykge1xyXG4gICAgICAgICAgYWdnLiRoYXNNb3JlID0gYWdnLml0ZW1zLmxlbmd0aCA+IGNvdW50O1xyXG4gICAgICAgICAgYWdnLml0ZW1zID0gWy4uLmFnZ3JlZ2F0aW9uLml0ZW1zLCAuLi5hZ2cuaXRlbXNdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhZ2dyZWdhdGlvbi4kaGFzTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFnZztcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiYWdncmVnYXRpb24ubG9hZE1vcmUgZmFpbHVyZSAtIGVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJvcikpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHJlc3BvbnNlID0+IGNvbnNvbGUubG9nKFwiYWdncmVnYXRpb24ubG9hZE1vcmUgc3VjY2VzcyAtIGRhdGE6IFwiLCByZXNwb25zZSkpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9wZW4ocXVlcnk6IFBhcnRpYWw8UXVlcnk+LCBhZ2dyZWdhdGlvbjogVHJlZUFnZ3JlZ2F0aW9uLCBpdGVtOiBUcmVlQWdncmVnYXRpb25Ob2RlKTogT2JzZXJ2YWJsZTxUcmVlQWdncmVnYXRpb24+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gYC8ke2l0ZW0uJHBhdGh9LypgO1xyXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGAke2FnZ3JlZ2F0aW9uLmNvbHVtbn06ICR7ZXNjYXBlRXhwcih2YWx1ZSl9YDtcclxuXHJcbiAgICBjb25zdCBxOiBQYXJ0aWFsPFF1ZXJ5PiA9IHtcclxuICAgICAgLi4ucXVlcnksXHJcbiAgICAgIGFjdGlvbjogXCJvcGVuXCIsXHJcbiAgICAgIG9wZW46IFt7IGV4cHJlc3Npb24sIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvbi5uYW1lIH1dXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VydmljZS5zZWFyY2gocSkucGlwZShcclxuICAgICAgbWFwKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIC8vIGZpbmQgdGhlIG5vZGUgaW4gdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IG9uZVxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcmVzdWx0cy5hZ2dyZWdhdGlvbnNbMF0uaXRlbXMgYXMgVHJlZUFnZ3JlZ2F0aW9uTm9kZVtdO1xyXG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLmZpbmROb2RlKGl0ZW1zLCBpdGVtLiRwYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKCFuZXdOb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gYWdncmVnYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1hcmsgdGhlIG5vZGUgYXMgb3BlbmVkXHJcbiAgICAgICAgbmV3Tm9kZS4kb3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlSW5UcmVlKGFnZ3JlZ2F0aW9uLCBpdGVtLiRwYXRoLCBuZXdOb2RlKSBhcyBUcmVlQWdncmVnYXRpb247XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG4gIHByaXZhdGUgZmluZE5vZGUoaXRlbXM6IFRyZWVBZ2dyZWdhdGlvbk5vZGVbXSwgcGF0aDogc3RyaW5nID0gXCJcIik6IFRyZWVBZ2dyZWdhdGlvbk5vZGUgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKGl0ZW0uJHBhdGggPT09IHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgICBpZihpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmROb2RlKGl0ZW0uaXRlbXMsIHBhdGgpO1xyXG4gICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcGxhY2VJblRyZWUodHJlZTogYW55LCB2YWx1ZVRvRmluZDogc3RyaW5nID0gXCJcIiwgbmV3VmFsdWU6IFRyZWVBZ2dyZWdhdGlvbk5vZGUpIHtcclxuICAgIGlmICh0cmVlLiRwYXRoID09PSB2YWx1ZVRvRmluZCkge1xyXG4gICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRyZWUuaGFzQ2hpbGRyZW4gJiYgdHJlZS5pdGVtcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWUuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0cmVlLml0ZW1zW2ldID0gdGhpcy5yZXBsYWNlSW5UcmVlKHRyZWUuaXRlbXNbaV0sIHZhbHVlVG9GaW5kLCBuZXdWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJlZTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,48 @@
1
+ import { HttpClient, HttpParams } from '@angular/common/http';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { catchError, EMPTY } from 'rxjs';
4
+ import { globalConfig } from '@sinequa/atomic';
5
+ import * as i0 from "@angular/core";
6
+ export class AppService {
7
+ constructor() {
8
+ this.http = inject(HttpClient);
9
+ this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
10
+ }
11
+ /**
12
+ * Retrieves the application configuration from the server.
13
+ *
14
+ * @param appName - The name of the application to fetch the configuration for.
15
+ *
16
+ * @returns {Observable<CCApp>} An observable that emits the application configuration.
17
+ *
18
+ * @remarks
19
+ * This method constructs an HTTP GET request to fetch the application configuration
20
+ * using the `app` parameter from the global configuration. If the request fails,
21
+ * it logs the error to the console and returns an empty observable.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * appService.getApp().subscribe(appConfig => {
26
+ * console.log(appConfig);
27
+ * });
28
+ * ```
29
+ */
30
+ getApp(appName) {
31
+ const app = appName || globalConfig.app;
32
+ const params = new HttpParams().set('app', app || '');
33
+ return this.http.get(this.API_URL + "/app", { params })
34
+ .pipe(catchError(error => {
35
+ console.error("AppService.getApp failure - error: ", error);
36
+ return EMPTY;
37
+ }));
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
40
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AppService, providedIn: 'root' }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AppService, decorators: [{
43
+ type: Injectable,
44
+ args: [{
45
+ providedIn: 'root'
46
+ }]
47
+ }] });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9hcHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLdEQsTUFBTSxPQUFPLFVBQVU7SUFIdkI7UUFJcUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQixZQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQWtDbkY7SUFoQ0M7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixNQUFNLEdBQUcsR0FBRyxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXRELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMzRCxJQUFJLENBQ0gsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs4R0FwQ1UsVUFBVTtrSEFBVixVQUFVLGNBRlQsTUFBTTs7MkZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgRU1QVFksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IENDQXBwLCBnbG9iYWxDb25maWcgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwU2VydmljZSB7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBBUElfVVJMID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9LyR7Z2xvYmFsQ29uZmlnLmFwaVBhdGh9YDtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGZyb20gdGhlIHNlcnZlci5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gYXBwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBmZXRjaCB0aGUgY29uZmlndXJhdGlvbiBmb3IuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxDQ0FwcD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogVGhpcyBtZXRob2QgY29uc3RydWN0cyBhbiBIVFRQIEdFVCByZXF1ZXN0IHRvIGZldGNoIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uXHJcbiAgICogdXNpbmcgdGhlIGBhcHBgIHBhcmFtZXRlciBmcm9tIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbi4gSWYgdGhlIHJlcXVlc3QgZmFpbHMsXHJcbiAgICogaXQgbG9ncyB0aGUgZXJyb3IgdG8gdGhlIGNvbnNvbGUgYW5kIHJldHVybnMgYW4gZW1wdHkgb2JzZXJ2YWJsZS5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIGFwcFNlcnZpY2UuZ2V0QXBwKCkuc3Vic2NyaWJlKGFwcENvbmZpZyA9PiB7XHJcbiAgICogICBjb25zb2xlLmxvZyhhcHBDb25maWcpO1xyXG4gICAqIH0pO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIGdldEFwcChhcHBOYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDQ0FwcD4ge1xyXG4gICAgY29uc3QgYXBwID0gYXBwTmFtZSB8fCBnbG9iYWxDb25maWcuYXBwO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdhcHAnLCBhcHAgfHwgJycpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENDQXBwPih0aGlzLkFQSV9VUkwgKyBcIi9hcHBcIiwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXBwU2VydmljZS5nZXRBcHAgZmFpbHVyZSAtIGVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,122 @@
1
+ import { HttpClient } from "@angular/common/http";
2
+ import { Injectable, computed, inject } from "@angular/core";
3
+ import { Router } from "@angular/router";
4
+ import { getState } from "@ngrx/signals";
5
+ import { globalConfig } from "@sinequa/atomic";
6
+ import { AppStore } from '../stores/app.store';
7
+ import * as i0 from "@angular/core";
8
+ export class AuditService {
9
+ constructor() {
10
+ this.appStore = inject(AppStore);
11
+ this.app = computed(() => getState(this.appStore));
12
+ this.http = inject(HttpClient);
13
+ this.router = inject(Router);
14
+ this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
15
+ this.lastClickTime = 0;
16
+ }
17
+ /**
18
+ * Notify the Sinequa server of a set of audit events
19
+ *
20
+ * @param auditEvents The audit events
21
+ */
22
+ notify(auditEvents) {
23
+ this.http.post(this.API_URL + "/audit.notify", {
24
+ event: "None", // AuditEventType.None,
25
+ app: this.app().name,
26
+ $auditRecord: { auditEvents: [auditEvents] }
27
+ }).subscribe();
28
+ }
29
+ /**
30
+ * It sends an audit event to the Audit Service.
31
+ */
32
+ notifyLogin() {
33
+ this.notify({
34
+ type: "Login_Success_Form" // AuditEventType.Search_Login_Success
35
+ });
36
+ }
37
+ /**
38
+ * Notify logout
39
+ */
40
+ notifyLogout() {
41
+ this.notify({
42
+ type: "Search_Exit_Logout" // AuditEventType.Search_Exit_Logout
43
+ });
44
+ }
45
+ /**
46
+ * Notify the Sinequa server of a document event
47
+ *
48
+ * @param evt The audit event type
49
+ * @param doc The document (article) in question
50
+ * @param resultId The resultid that contain the document
51
+ * @param parameters Additional parameters
52
+ */
53
+ notifyDocument(auditEventType, doc, resultsOrId, parameters, rfmParameters) {
54
+ let resultId;
55
+ let result;
56
+ if (typeof resultsOrId == "string") {
57
+ resultId = resultsOrId;
58
+ }
59
+ else {
60
+ result = resultsOrId;
61
+ resultId = result ? result.id : null;
62
+ }
63
+ const detail = {
64
+ docid: doc.id,
65
+ rank: doc.rank,
66
+ title: doc.title,
67
+ source: doc.collection[0].split("/")[0],
68
+ collection: doc.collection[0],
69
+ resultId,
70
+ filename: doc.filename,
71
+ fileext: doc.fileext,
72
+ index: doc.databasealias,
73
+ resultcount: result?.totalRowCount
74
+ };
75
+ if (parameters) {
76
+ Object.keys(parameters).forEach(key => detail[key] = parameters[key]);
77
+ }
78
+ const data = {
79
+ type: auditEventType,
80
+ detail
81
+ };
82
+ if (rfmParameters) {
83
+ const rfmDetail = {}; // Add index signature
84
+ Object.keys(rfmParameters).forEach(key => rfmDetail[key] = rfmParameters[key]);
85
+ data.rfmDetail = rfmDetail;
86
+ }
87
+ this.lastClickTime = Date.now();
88
+ // Listen to the navigation event outside the app
89
+ document.addEventListener('visibilitychange', () => {
90
+ // Capture the navigation even triggered just after the click
91
+ if (document.visibilityState === 'hidden' && (Date.now() - this.lastClickTime) < 1000) {
92
+ // Second event triggered when we come back
93
+ document.addEventListener('visibilitychange', () => {
94
+ if (document.visibilityState === 'visible') {
95
+ this.notify({ type: "Navigation_Return" /* AuditEventType.Navigation_Return */ });
96
+ }
97
+ }, { once: true });
98
+ }
99
+ }, { once: true });
100
+ this.notify(data);
101
+ }
102
+ /**
103
+ * Notify route change
104
+ */
105
+ notifyRouteChange(url) {
106
+ this.notify({
107
+ type: "Navigation_Route", // AuditEventType.Navigation_Route,
108
+ detail: {
109
+ detail: url
110
+ }
111
+ });
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
114
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AuditService, providedIn: 'root' }); }
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AuditService, decorators: [{
117
+ type: Injectable,
118
+ args: [{
119
+ providedIn: 'root'
120
+ }]
121
+ }] });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvd2ViLXNlcnZpY2VzL2F1ZGl0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWlGLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLL0MsTUFBTSxPQUFPLFlBQVk7SUFIekI7UUFJRSxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLFFBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQVUsQ0FBQyxDQUFDO1FBRXBDLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixZQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV4RSxrQkFBYSxHQUFHLENBQUMsQ0FBQztLQWtIN0I7SUFoSEM7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUF3QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLGVBQWUsRUFBRTtZQUNuRCxLQUFLLEVBQUUsTUFBTSxFQUFF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USxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtvQkFDakQsSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSw0REFBa0MsRUFBRSxDQUFDLENBQUM7b0JBQzFELENBQUM7Z0JBQ0gsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ1YsSUFBSSxFQUFFLGtCQUFrQixFQUFFLG1DQUFtQztZQUM3RCxNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLEdBQUc7YUFDWjtTQUNGLENBQUMsQ0FBQztJQUVMLENBQUM7OEdBekhVLFlBQVk7a0hBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBnZXRTdGF0ZSB9IGZyb20gXCJAbmdyeC9zaWduYWxzXCI7XHJcbmltcG9ydCB7IEFydGljbGUsIEF1ZGl0RXZlbnQsIEF1ZGl0RXZlbnRzLCBBdWRpdEV2ZW50VHlwZSwgQXVkaXRFdmVudFR5cGVWYWx1ZXMsIENDQXBwLCBnbG9iYWxDb25maWcsIFJlc3VsdCB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcclxuaW1wb3J0IHsgQXBwU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXBwLnN0b3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0U2VydmljZSB7XHJcbiAgYXBwU3RvcmUgPSBpbmplY3QoQXBwU3RvcmUpO1xyXG4gIGFwcCA9IGNvbXB1dGVkKCgpID0+IGdldFN0YXRlKHRoaXMuYXBwU3RvcmUpIGFzIENDQXBwKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBBUElfVVJMID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9LyR7Z2xvYmFsQ29uZmlnLmFwaVBhdGh9YDtcclxuXHJcbiAgcHJvdGVjdGVkIGxhc3RDbGlja1RpbWUgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBOb3RpZnkgdGhlIFNpbmVxdWEgc2VydmVyIG9mIGEgc2V0IG9mIGF1ZGl0IGV2ZW50c1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGF1ZGl0RXZlbnRzIFRoZSBhdWRpdCBldmVudHNcclxuICAgKi9cclxuICBub3RpZnkoYXVkaXRFdmVudHM6IEF1ZGl0RXZlbnRzKSB7XHJcbiAgICB0aGlzLmh0dHAucG9zdDx2b2lkPih0aGlzLkFQSV9VUkwgKyBcIi9hdWRpdC5ub3RpZnlcIiwge1xyXG4gICAgICBldmVudDogXCJOb25lXCIsIC8vIEF1ZGl0RXZlbnRUeXBlLk5vbmUsXHJcbiAgICAgIGFwcDogdGhpcy5hcHAoKS5uYW1lLFxyXG4gICAgICAkYXVkaXRSZWNvcmQ6IHthdWRpdEV2ZW50czogW2F1ZGl0RXZlbnRzXX1cclxuICAgIH0pLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgc2VuZHMgYW4gYXVkaXQgZXZlbnQgdG8gdGhlIEF1ZGl0IFNlcnZpY2UuXHJcbiAgICovXHJcbiAgbm90aWZ5TG9naW4oKSB7XHJcbiAgICB0aGlzLm5vdGlmeSh7XHJcbiAgICAgIHR5cGU6IFwiTG9naW5fU3VjY2Vzc19Gb3JtXCIgLy8gQXVkaXRFdmVudFR5cGUuU2VhcmNoX0xvZ2luX1N1Y2Nlc3NcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOb3RpZnkgbG9nb3V0XHJcbiAgICovXHJcbiAgbm90aWZ5TG9nb3V0KCkge1xyXG4gICAgdGhpcy5ub3RpZnkoe1xyXG4gICAgICB0eXBlOiBcIlNlYXJjaF9FeGl0X0xvZ291dFwiIC8vIEF1ZGl0RXZlbnRUeXBlLlNlYXJjaF9FeGl0X0xvZ291dFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICAqIE5vdGlmeSB0aGUgU2luZXF1YSBzZXJ2ZXIgb2YgYSBkb2N1bWVudCBldmVudFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldnQgVGhlIGF1ZGl0IGV2ZW50IHR5cGVcclxuICAgICAqIEBwYXJhbSBkb2MgVGhlIGRvY3VtZW50IChhcnRpY2xlKSBpbiBxdWVzdGlvblxyXG4gICAgICogQHBhcmFtIHJlc3VsdElkIFRoZSByZXN1bHRpZCB0aGF0IGNvbnRhaW4gdGhlIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBZGRpdGlvbmFsIHBhcmFtZXRlcnNcclxuICAgICAqL1xyXG4gIG5vdGlmeURvY3VtZW50KFxyXG4gICAgYXVkaXRFdmVudFR5cGU6IEF1ZGl0RXZlbnRUeXBlIHwgQXVkaXRFdmVudFR5cGVWYWx1ZXMgfCB7fSAmIFJlY29yZDxuZXZlciwgbmV2ZXI+LFxyXG4gICAgZG9jOiBBcnRpY2xlLFxyXG4gICAgcmVzdWx0c09ySWQ6IFJlc3VsdCB8IHN0cmluZyxcclxuICAgIHBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPixcclxuICAgIHJmbVBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPikge1xyXG4gICAgbGV0IHJlc3VsdElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgbGV0IHJlc3VsdDogUmVzdWx0IHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHR5cGVvZiByZXN1bHRzT3JJZCA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHJlc3VsdElkID0gcmVzdWx0c09ySWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0c09ySWQ7XHJcbiAgICAgIHJlc3VsdElkID0gcmVzdWx0ID8gcmVzdWx0LmlkIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZXRhaWw6IGFueSA9IHtcclxuICAgICAgZG9jaWQ6IGRvYy5pZCxcclxuICAgICAgcmFuazogZG9jLnJhbmssXHJcbiAgICAgIHRpdGxlOiBkb2MudGl0bGUsXHJcbiAgICAgIHNvdXJjZTogZG9jLmNvbGxlY3Rpb25bMF0uc3BsaXQoXCIvXCIpWzBdLFxyXG4gICAgICBjb2xsZWN0aW9uOiBkb2MuY29sbGVjdGlvblswXSxcclxuICAgICAgcmVzdWx0SWQsXHJcbiAgICAgIGZpbGVuYW1lOiBkb2MuZmlsZW5hbWUsXHJcbiAgICAgIGZpbGVleHQ6IGRvYy5maWxlZXh0LFxyXG4gICAgICBpbmRleDogZG9jLmRhdGFiYXNlYWxpYXMsXHJcbiAgICAgIHJlc3VsdGNvdW50OiByZXN1bHQ/LnRvdGFsUm93Q291bnRcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHBhcmFtZXRlcnMpIHtcclxuICAgICAgT2JqZWN0LmtleXMocGFyYW1ldGVycykuZm9yRWFjaChrZXkgPT4gZGV0YWlsW2tleV0gPSBwYXJhbWV0ZXJzW2tleV0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YTogQXVkaXRFdmVudCA9IHtcclxuICAgICAgdHlwZTogYXVkaXRFdmVudFR5cGUsXHJcbiAgICAgIGRldGFpbFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocmZtUGFyYW1ldGVycykge1xyXG4gICAgICBjb25zdCByZm1EZXRhaWw6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0ge307IC8vIEFkZCBpbmRleCBzaWduYXR1cmVcclxuICAgICAgT2JqZWN0LmtleXMocmZtUGFyYW1ldGVycykuZm9yRWFjaChrZXkgPT4gcmZtRGV0YWlsW2tleV0gPSByZm1QYXJhbWV0ZXJzW2tleV0pO1xyXG4gICAgICBkYXRhLnJmbURldGFpbCA9IHJmbURldGFpbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhc3RDbGlja1RpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgIC8vIExpc3RlbiB0byB0aGUgbmF2aWdhdGlvbiBldmVudCBvdXRzaWRlIHRoZSBhcHBcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgIC8vIENhcHR1cmUgdGhlIG5hdmlnYXRpb24gZXZlbiB0cmlnZ2VyZWQganVzdCBhZnRlciB0aGUgY2xpY2tcclxuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicgJiYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RDbGlja1RpbWUpIDwgMTAwMCkge1xyXG4gICAgICAgIC8vIFNlY29uZCBldmVudCB0cmlnZ2VyZWQgd2hlbiB3ZSBjb21lIGJhY2tcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogQXVkaXRFdmVudFR5cGUuTmF2aWdhdGlvbl9SZXR1cm4gfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCB7IG9uY2U6IHRydWUgfSk7XHJcblxyXG4gICAgdGhpcy5ub3RpZnkoZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOb3RpZnkgcm91dGUgY2hhbmdlXHJcbiAgICovXHJcbiAgbm90aWZ5Um91dGVDaGFuZ2UodXJsOiBzdHJpbmcsKSB7XHJcbiAgICB0aGlzLm5vdGlmeSh7XHJcbiAgICAgIHR5cGU6IFwiTmF2aWdhdGlvbl9Sb3V0ZVwiLCAvLyBBdWRpdEV2ZW50VHlwZS5OYXZpZ2F0aW9uX1JvdXRlLFxyXG4gICAgICBkZXRhaWw6IHtcclxuICAgICAgICBkZXRhaWw6IHVybFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG59Il19
@@ -0,0 +1,10 @@
1
+ export * from "./aggregations.service";
2
+ export * from "./app.service";
3
+ export * from "./json-method-plugin.service";
4
+ export * from "./preview.service";
5
+ export * from "./principal.service";
6
+ export * from "./query.service";
7
+ export * from "./text-chunck.service";
8
+ export * from "./audit.service";
9
+ export * from "./audit.service";
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0ICogZnJvbSBcIi4vYWdncmVnYXRpb25zLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vYXBwLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vanNvbi1tZXRob2QtcGx1Z2luLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vcHJldmlldy5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3ByaW5jaXBhbC5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3F1ZXJ5LnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vdGV4dC1jaHVuY2suc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9hdWRpdC5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2F1ZGl0LnNlcnZpY2VcIjsiXX0=
@@ -0,0 +1,54 @@
1
+ import { HttpClient, HttpParams } from '@angular/common/http';
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { globalConfig, isObject } from '@sinequa/atomic';
4
+ import { throwError } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ export class JsonMethodPluginService {
7
+ constructor() {
8
+ this.http = inject(HttpClient);
9
+ this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
10
+ }
11
+ /**
12
+ * Call a JsonMethod plugin using an HTTP POST
13
+ *
14
+ * @param method The name of the JsonMethod plugin
15
+ * @param query Parameters to pass to the plugin
16
+ * @param options HTTP options for the request
17
+ * @returns An observable of the plugin's return value
18
+ */
19
+ post(method, query, options) {
20
+ if (!isObject(query)) {
21
+ return throwError(() => ({ error: "invalid query object" }));
22
+ }
23
+ return this.http.post(`${this.API_URL}/plugin/${method}`, query, options);
24
+ }
25
+ /**
26
+ * Call a JsonMethod plugin using an HTTP GET
27
+ *
28
+ * @param method The name of the JsonMethod plugin
29
+ * @param query Parameters to pass to the plugin
30
+ * @param options HTTP options for the request
31
+ * @returns An observable of the plugin's return value
32
+ */
33
+ get(method, query, options) {
34
+ const params = new HttpParams();
35
+ for (const key in query) {
36
+ if (query[key] !== undefined) {
37
+ params.set(key, query[key]);
38
+ }
39
+ }
40
+ return this.http.get(`${this.API_URL}/plugin/${method}`, {
41
+ params: params,
42
+ ...options
43
+ });
44
+ }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: JsonMethodPluginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
46
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: JsonMethodPluginService, providedIn: 'root' }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: JsonMethodPluginService, decorators: [{
49
+ type: Injectable,
50
+ args: [{
51
+ providedIn: 'root'
52
+ }]
53
+ }] });
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1tZXRob2QtcGx1Z2luLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9qc29uLW1ldGhvZC1wbHVnaW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUE0QixVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBbUI5QyxNQUFNLE9BQU8sdUJBQXVCO0lBSHBDO1FBSXFCLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUIsWUFBTyxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7S0FzQ25GO0lBcENDOzs7Ozs7O09BT0c7SUFDSCxJQUFJLENBQUksTUFBYyxFQUFFLEtBQVEsRUFBRSxPQUFpQjtRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxzQkFBc0IsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFdBQVcsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQWMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsR0FBRyxDQUFrRixNQUFjLEVBQUUsS0FBUSxFQUFFLE9BQWlCO1FBQzlILE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBUSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sV0FBVyxNQUFNLEVBQUUsRUFBRTtZQUN2RCxNQUFNLEVBQUUsTUFBTTtZQUNkLEdBQUcsT0FBYztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXhDVSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cENvbnRleHQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IGdsb2JhbENvbmZpZywgaXNPYmplY3QgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcblxyXG50eXBlIE9wdGlvbnMgPSB7XHJcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xyXG4gICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIH0sXHJcbiAgY29udGV4dD86IEh0dHBDb250ZXh0LFxyXG4gIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZScsXHJcbiAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcclxuICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPlxyXG4gIH0sXHJcbiAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxyXG4gIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICd0ZXh0JyB8ICdqc29uJyxcclxuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpzb25NZXRob2RQbHVnaW5TZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEFQSV9VUkwgPSBgJHtnbG9iYWxDb25maWcuYmFja2VuZFVybH0vJHtnbG9iYWxDb25maWcuYXBpUGF0aH1gO1xyXG5cclxuICAvKipcclxuICAgKiBDYWxsIGEgSnNvbk1ldGhvZCBwbHVnaW4gdXNpbmcgYW4gSFRUUCBQT1NUXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBKc29uTWV0aG9kIHBsdWdpblxyXG4gICAqIEBwYXJhbSBxdWVyeSBQYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHBsdWdpblxyXG4gICAqIEBwYXJhbSBvcHRpb25zIEhUVFAgb3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIG9mIHRoZSBwbHVnaW4ncyByZXR1cm4gdmFsdWVcclxuICAgKi9cclxuICBwb3N0PFU+KG1ldGhvZDogc3RyaW5nLCBxdWVyeTogVSwgb3B0aW9ucz86IE9wdGlvbnMpIDogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICghaXNPYmplY3QocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7ZXJyb3I6IFwiaW52YWxpZCBxdWVyeSBvYmplY3RcIn0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLkFQSV9VUkx9L3BsdWdpbi8ke21ldGhvZH1gLCBxdWVyeSwgb3B0aW9ucyBhcyBhbnkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbCBhIEpzb25NZXRob2QgcGx1Z2luIHVzaW5nIGFuIEhUVFAgR0VUXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBKc29uTWV0aG9kIHBsdWdpblxyXG4gICAqIEBwYXJhbSBxdWVyeSBQYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHBsdWdpblxyXG4gICAqIEBwYXJhbSBvcHRpb25zIEhUVFAgb3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIG9mIHRoZSBwbHVnaW4ncyByZXR1cm4gdmFsdWVcclxuICAgKi9cclxuICBnZXQ8VSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBEYXRlIHwgb2JqZWN0IHwgdW5kZWZpbmVkPj4obWV0aG9kOiBzdHJpbmcsIHF1ZXJ5OiBVLCBvcHRpb25zPzogT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcXVlcnkpIHtcclxuICAgICAgaWYgKHF1ZXJ5W2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHBhcmFtcy5zZXQoa2V5LCBxdWVyeVtrZXldIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLkFQSV9VUkx9L3BsdWdpbi8ke21ldGhvZH1gLCB7XHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgICAuLi5vcHRpb25zIGFzIGFueVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==