@sinequa/atomic-angular 0.0.146 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -0
- package/components/no-result/i18n/en.json +5 -0
- package/components/no-result/i18n/fr.json +5 -0
- package/components/sort-selector/i18n/en.json +3 -0
- package/components/sort-selector/i18n/fr.json +3 -0
- package/components/source/i18n/en.json +3 -0
- package/components/source/i18n/fr.json +3 -0
- package/features/alerts/i18n/en.json +33 -0
- package/features/alerts/i18n/fr.json +33 -0
- package/features/bookmarks/i18n/en.json +11 -0
- package/features/bookmarks/i18n/fr.json +11 -0
- package/features/collections/i18n/en.json +17 -0
- package/features/collections/i18n/fr.json +16 -0
- package/features/dialogs/i18n/en.json +15 -0
- package/features/dialogs/i18n/fr.json +15 -0
- package/features/did-you-mean/i18n/en.json +5 -0
- package/features/did-you-mean/i18n/fr.json +5 -0
- package/features/drawer/i18n/en.json +22 -0
- package/features/drawer/i18n/fr.json +22 -0
- package/features/export/i18n/en.json +7 -0
- package/features/export/i18n/fr.json +7 -0
- package/features/feedback/i18n/en.json +26 -0
- package/features/feedback/i18n/fr.json +26 -0
- package/features/filters/i18n/en.json +14 -0
- package/features/filters/i18n/fr.json +14 -0
- package/features/labels/i18n/en.json +8 -0
- package/features/labels/i18n/fr.json +8 -0
- package/features/recent-searches/i18n/en.json +6 -0
- package/features/recent-searches/i18n/fr.json +6 -0
- package/features/saved-searches/i18n/en.json +8 -0
- package/features/saved-searches/i18n/fr.json +8 -0
- package/features/sign-in/i18n/en.json +12 -0
- package/features/sign-in/i18n/fr.json +14 -0
- package/fesm2022/sinequa-atomic-angular.mjs +8021 -2672
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
- package/index.d.ts +6036 -3
- package/package.json +68 -10
- package/assets/tailwind.css +0 -334
- package/esm2022/lib/assistant/index.mjs +0 -2
- package/esm2022/lib/assistant/signalR.web.service.mjs +0 -81
- package/esm2022/lib/components/dropdown-input.mjs +0 -97
- package/esm2022/lib/components/dropdown-list.mjs +0 -35
- package/esm2022/lib/components/dropdown.mjs +0 -127
- package/esm2022/lib/components/index.mjs +0 -7
- package/esm2022/lib/components/menu/index.mjs +0 -3
- package/esm2022/lib/components/menu/menu-item.mjs +0 -22
- package/esm2022/lib/components/menu/menu.mjs +0 -99
- package/esm2022/lib/components/metadata/index.mjs +0 -2
- package/esm2022/lib/components/metadata/metadata.component.mjs +0 -65
- package/esm2022/lib/components/theme/index.mjs +0 -3
- package/esm2022/lib/components/theme/theme-selector.component.mjs +0 -67
- package/esm2022/lib/components/theme/theme-toggle.component.mjs +0 -67
- package/esm2022/lib/directives/index.mjs +0 -5
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -47
- package/esm2022/lib/directives/select-article-on-click.directive.mjs +0 -39
- package/esm2022/lib/directives/show-bookmark.directive.mjs +0 -55
- package/esm2022/lib/directives/theme-provider.directive.mjs +0 -31
- package/esm2022/lib/guards/auth.guard.mjs +0 -27
- package/esm2022/lib/guards/index.mjs +0 -3
- package/esm2022/lib/guards/initialization.guard.mjs +0 -41
- package/esm2022/lib/interceptors/audit.interceptor.mjs +0 -23
- package/esm2022/lib/interceptors/auth.interceptor.mjs +0 -49
- package/esm2022/lib/interceptors/body.interceptor.mjs +0 -24
- package/esm2022/lib/interceptors/error.interceptor.mjs +0 -35
- package/esm2022/lib/interceptors/index.mjs +0 -7
- package/esm2022/lib/interceptors/toast.interceptor.mjs +0 -27
- package/esm2022/lib/models/aggregation.mjs +0 -2
- package/esm2022/lib/models/article-metadata.mjs +0 -2
- package/esm2022/lib/models/autocomplete.mjs +0 -2
- package/esm2022/lib/models/custom-json.mjs +0 -2
- package/esm2022/lib/models/filter-dropdown.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -7
- package/esm2022/lib/models/user-settings.mjs +0 -2
- package/esm2022/lib/pipes/highlight-word.pipe.mjs +0 -33
- package/esm2022/lib/pipes/index.mjs +0 -3
- package/esm2022/lib/pipes/source-icon.pipe.mjs +0 -43
- package/esm2022/lib/public-api.mjs +0 -18
- package/esm2022/lib/resolvers/index.mjs +0 -2
- package/esm2022/lib/resolvers/query-name-resolver.mjs +0 -14
- package/esm2022/lib/resources/index.mjs +0 -2
- package/esm2022/lib/resources/themes.mjs +0 -53
- package/esm2022/lib/services/application.service.mjs +0 -245
- package/esm2022/lib/services/autocomplete.service.mjs +0 -85
- package/esm2022/lib/services/drawer/backdrop.service.mjs +0 -23
- package/esm2022/lib/services/drawer/drawer-stack.service.mjs +0 -152
- package/esm2022/lib/services/drawer/drawer.service.mjs +0 -38
- package/esm2022/lib/services/index.mjs +0 -12
- package/esm2022/lib/services/label.service.mjs +0 -161
- package/esm2022/lib/services/navigation.service.mjs +0 -59
- package/esm2022/lib/services/saved-searches.service.mjs +0 -75
- package/esm2022/lib/services/search.service.mjs +0 -89
- package/esm2022/lib/services/selection-history.service.mjs +0 -92
- package/esm2022/lib/services/selection.service.mjs +0 -87
- package/esm2022/lib/stores/aggregations.store.mjs +0 -59
- package/esm2022/lib/stores/app.store.mjs +0 -270
- package/esm2022/lib/stores/application.store.mjs +0 -87
- package/esm2022/lib/stores/index.mjs +0 -9
- package/esm2022/lib/stores/principal.store.mjs +0 -47
- package/esm2022/lib/stores/query-params.store.mjs +0 -207
- package/esm2022/lib/stores/selection.store.mjs +0 -45
- package/esm2022/lib/stores/theme.store.mjs +0 -116
- package/esm2022/lib/stores/user-settings.store.mjs +0 -391
- package/esm2022/lib/tokens/highlights.mjs +0 -32
- package/esm2022/lib/tokens/index.mjs +0 -2
- package/esm2022/lib/utils/debounced-signal.mjs +0 -38
- package/esm2022/lib/utils/index.mjs +0 -8
- package/esm2022/lib/utils/inline-worker.mjs +0 -40
- package/esm2022/lib/utils/query.mjs +0 -58
- package/esm2022/lib/utils/routes.mjs +0 -28
- package/esm2022/lib/utils/tailwind-utils.mjs +0 -6
- package/esm2022/lib/utils/theme-body-hook.mjs +0 -18
- package/esm2022/lib/utils/theme-registry.mjs +0 -6
- package/esm2022/lib/web-services/aggregations.service.mjs +0 -104
- package/esm2022/lib/web-services/app.service.mjs +0 -48
- package/esm2022/lib/web-services/audit.service.mjs +0 -122
- package/esm2022/lib/web-services/index.mjs +0 -10
- package/esm2022/lib/web-services/json-method-plugin.service.mjs +0 -54
- package/esm2022/lib/web-services/preview.service.mjs +0 -327
- package/esm2022/lib/web-services/principal.service.mjs +0 -46
- package/esm2022/lib/web-services/query.service.mjs +0 -123
- package/esm2022/lib/web-services/text-chunck.service.mjs +0 -46
- package/esm2022/public-api.mjs +0 -5
- package/esm2022/sinequa-atomic-angular.mjs +0 -5
- package/lib/assistant/index.d.ts +0 -1
- package/lib/assistant/signalR.web.service.d.ts +0 -46
- package/lib/components/dropdown-input.d.ts +0 -18
- package/lib/components/dropdown-list.d.ts +0 -8
- package/lib/components/dropdown.d.ts +0 -50
- package/lib/components/index.d.ts +0 -6
- package/lib/components/menu/index.d.ts +0 -2
- package/lib/components/menu/menu-item.d.ts +0 -8
- package/lib/components/menu/menu.d.ts +0 -24
- package/lib/components/metadata/index.d.ts +0 -1
- package/lib/components/metadata/metadata.component.d.ts +0 -24
- package/lib/components/theme/index.d.ts +0 -2
- package/lib/components/theme/theme-selector.component.d.ts +0 -70
- package/lib/components/theme/theme-toggle.component.d.ts +0 -10
- package/lib/directives/index.d.ts +0 -4
- package/lib/directives/infinite-scroll.directive.d.ts +0 -30
- package/lib/directives/select-article-on-click.directive.d.ts +0 -14
- package/lib/directives/show-bookmark.directive.d.ts +0 -60
- package/lib/directives/theme-provider.directive.d.ts +0 -20
- package/lib/guards/auth.guard.d.ts +0 -7
- package/lib/guards/index.d.ts +0 -2
- package/lib/guards/initialization.guard.d.ts +0 -20
- package/lib/interceptors/audit.interceptor.d.ts +0 -13
- package/lib/interceptors/auth.interceptor.d.ts +0 -14
- package/lib/interceptors/body.interceptor.d.ts +0 -11
- package/lib/interceptors/error.interceptor.d.ts +0 -9
- package/lib/interceptors/index.d.ts +0 -5
- package/lib/interceptors/toast.interceptor.d.ts +0 -13
- package/lib/models/aggregation.d.ts +0 -12
- package/lib/models/article-metadata.d.ts +0 -5
- package/lib/models/autocomplete.d.ts +0 -5
- package/lib/models/custom-json.d.ts +0 -69
- package/lib/models/filter-dropdown.d.ts +0 -10
- package/lib/models/index.d.ts +0 -6
- package/lib/models/user-settings.d.ts +0 -38
- package/lib/pipes/highlight-word.pipe.d.ts +0 -22
- package/lib/pipes/index.d.ts +0 -2
- package/lib/pipes/source-icon.pipe.d.ts +0 -51
- package/lib/public-api.d.ts +0 -14
- package/lib/resolvers/index.d.ts +0 -1
- package/lib/resolvers/query-name-resolver.d.ts +0 -9
- package/lib/resources/index.d.ts +0 -1
- package/lib/resources/themes.d.ts +0 -51
- package/lib/services/application.service.d.ts +0 -183
- package/lib/services/autocomplete.service.d.ts +0 -96
- package/lib/services/drawer/backdrop.service.d.ts +0 -9
- package/lib/services/drawer/drawer-stack.service.d.ts +0 -70
- package/lib/services/drawer/drawer.service.d.ts +0 -15
- package/lib/services/index.d.ts +0 -11
- package/lib/services/label.service.d.ts +0 -114
- package/lib/services/navigation.service.d.ts +0 -33
- package/lib/services/saved-searches.service.d.ts +0 -149
- package/lib/services/search.service.d.ts +0 -159
- package/lib/services/selection-history.service.d.ts +0 -50
- package/lib/services/selection.service.d.ts +0 -123
- package/lib/stores/aggregations.store.d.ts +0 -25
- package/lib/stores/app.store.d.ts +0 -110
- package/lib/stores/application.store.d.ts +0 -83
- package/lib/stores/index.d.ts +0 -8
- package/lib/stores/principal.store.d.ts +0 -47
- package/lib/stores/query-params.store.d.ts +0 -128
- package/lib/stores/selection.store.d.ts +0 -52
- package/lib/stores/theme.store.d.ts +0 -66
- package/lib/stores/user-settings.store.d.ts +0 -111
- package/lib/tokens/highlights.d.ts +0 -8
- package/lib/tokens/index.d.ts +0 -1
- package/lib/utils/debounced-signal.d.ts +0 -25
- package/lib/utils/index.d.ts +0 -7
- package/lib/utils/inline-worker.d.ts +0 -11
- package/lib/utils/query.d.ts +0 -26
- package/lib/utils/routes.d.ts +0 -16
- package/lib/utils/tailwind-utils.d.ts +0 -2
- package/lib/utils/theme-body-hook.d.ts +0 -6
- package/lib/utils/theme-registry.d.ts +0 -3
- package/lib/web-services/aggregations.service.d.ts +0 -57
- package/lib/web-services/app.service.d.ts +0 -30
- package/lib/web-services/audit.service.d.ts +0 -72
- package/lib/web-services/index.d.ts +0 -9
- package/lib/web-services/json-method-plugin.service.d.ts +0 -41
- package/lib/web-services/preview.service.d.ts +0 -283
- package/lib/web-services/principal.service.d.ts +0 -28
- package/lib/web-services/query.service.d.ts +0 -29
- package/lib/web-services/text-chunck.service.d.ts +0 -22
- package/public-api.d.ts +0 -1
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Injectable, Injector, inject } from '@angular/core';
|
|
2
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
3
|
-
import { getState } from '@ngrx/signals';
|
|
4
|
-
import { catchError, map, of } from 'rxjs';
|
|
5
|
-
import { QueryParamsStore, UserSettingsStore } from '../stores';
|
|
6
|
-
import { QueryService } from '../web-services/query.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class SearchService {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.router = inject(Router);
|
|
11
|
-
this.route = inject(ActivatedRoute);
|
|
12
|
-
this.queryService = inject(QueryService);
|
|
13
|
-
// Represents the last result of a search operation with getResult().
|
|
14
|
-
this.result = {};
|
|
15
|
-
this.queryParamsStore = inject(QueryParamsStore);
|
|
16
|
-
this.userSettingsStore = inject(UserSettingsStore);
|
|
17
|
-
this.injector = inject(Injector);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Executes a search operation with the given commands and options.
|
|
21
|
-
*
|
|
22
|
-
* @param commands - An array of strings representing the search commands.
|
|
23
|
-
* @param options - An optional object containing search options.
|
|
24
|
-
* @param options.appendFilters - A boolean indicating whether to append existing filters to the search query. Defaults to true.
|
|
25
|
-
* @param options.audit - An optional audit trail object to be stored in the navigation state.
|
|
26
|
-
*
|
|
27
|
-
* The method constructs query parameters based on the current state and the provided options,
|
|
28
|
-
* then navigates to the specified commands with the constructed query parameters and audit trail.
|
|
29
|
-
*/
|
|
30
|
-
search(commands, options = { appendFilters: true }) {
|
|
31
|
-
const queryParams = {};
|
|
32
|
-
const { text, filters = [], page, sort, tab } = getState(this.queryParamsStore);
|
|
33
|
-
const { audit, appendFilters } = options;
|
|
34
|
-
this.audit = audit;
|
|
35
|
-
if (appendFilters) {
|
|
36
|
-
queryParams.f = filters.length > 0 ? JSON.stringify(filters) : undefined;
|
|
37
|
-
queryParams.p = page;
|
|
38
|
-
queryParams.s = sort;
|
|
39
|
-
queryParams.t = tab;
|
|
40
|
-
queryParams.q = text;
|
|
41
|
-
}
|
|
42
|
-
// navigation state store the audit trail
|
|
43
|
-
this.router.navigate(commands, { relativeTo: this.route, queryParamsHandling: 'merge', queryParams, state: { audit } });
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Retrieves the search result based on the provided query.
|
|
47
|
-
*
|
|
48
|
-
* @param q - A partial query object containing search parameters.
|
|
49
|
-
* @returns An Observable of the search result.
|
|
50
|
-
*
|
|
51
|
-
* This method performs the following actions:
|
|
52
|
-
* - Creates an audit event with the type "Search_Text" and the query text.
|
|
53
|
-
* - Resets the audit property to undefined.
|
|
54
|
-
* - Calls the search method of the queryService with the query, a flag to include the query name in records, and the audit event.
|
|
55
|
-
* - Handles any errors by returning an empty Result object.
|
|
56
|
-
* - Maps the search result to the service's result property.
|
|
57
|
-
*/
|
|
58
|
-
getResult(q) {
|
|
59
|
-
const audit = { type: "Search_Text", detail: { querytext: q?.text }, ...this.audit };
|
|
60
|
-
this.audit = undefined;
|
|
61
|
-
// add the query name to records, to have it available if we bookmark one
|
|
62
|
-
return this.queryService.search(q, true, audit)
|
|
63
|
-
.pipe(catchError(() => of({})), map((result) => this.result = result));
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Navigates to the specified page and returns the search result.
|
|
67
|
-
* @param page - The page number to navigate to.
|
|
68
|
-
* @returns A promise that resolves to the search result.
|
|
69
|
-
*/
|
|
70
|
-
gotoPage(page) {
|
|
71
|
-
this.queryParamsStore.patch({ page });
|
|
72
|
-
this.search([], { audit: {
|
|
73
|
-
type: "Search_GotoPage",
|
|
74
|
-
detail: {
|
|
75
|
-
page: page,
|
|
76
|
-
fromresultid: this.result ? this.result.id : null
|
|
77
|
-
}
|
|
78
|
-
} });
|
|
79
|
-
}
|
|
80
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
81
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SearchService, providedIn: 'root' }); }
|
|
82
|
-
}
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SearchService, decorators: [{
|
|
84
|
-
type: Injectable,
|
|
85
|
-
args: [{
|
|
86
|
-
providedIn: 'root'
|
|
87
|
-
}]
|
|
88
|
-
}] });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBYyxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBTyxNQUFNLE1BQU0sQ0FBQztBQUk1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQW1CN0QsTUFBTSxPQUFPLGFBQWE7SUFIMUI7UUFJbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJELHFFQUFxRTtRQUM5RCxXQUFNLEdBQVcsRUFBWSxDQUFDO1FBR2xCLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7S0EwRWhEO0lBdkVDOzs7Ozs7Ozs7O09BVUc7SUFDSSxNQUFNLENBQUMsUUFBa0IsRUFBRSxVQUF5QixFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7UUFDaEYsTUFBTSxXQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEYsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFekMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekUsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckIsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckIsV0FBVyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDcEIsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUVELHlDQUF5QztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxSCxDQUFDO0lBSUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksU0FBUyxDQUFDLENBQWlCO1FBQ2hDLE1BQU0sS0FBSyxHQUFnQixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN2Qix5RUFBeUU7UUFDekUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQzthQUM1QyxJQUFJLENBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFZLENBQUMsQ0FBQyxFQUNsQyxHQUFHLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQzlDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFO2dCQUN2QixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLElBQUk7b0JBQ1YsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUNwRDthQUNBLEVBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzs4R0FwRlUsYUFBYTtrSEFBYixhQUFhLGNBRlosTUFBTTs7MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0U3RhdGUgfSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIG1hcCwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcnRpY2xlLCBBdWRpdEV2ZW50cywgUXVlcnksIFJlc3VsdCB9IGZyb20gJ0BzaW5lcXVhL2F0b21pYyc7XG5cbmltcG9ydCB7IFF1ZXJ5UGFyYW1zU3RvcmUsIFVzZXJTZXR0aW5nc1N0b3JlIH0gZnJvbSAnLi4vc3RvcmVzJztcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL3dlYi1zZXJ2aWNlcy9xdWVyeS5zZXJ2aWNlJztcblxuXG5leHBvcnQgdHlwZSBTZWFyY2hPcHRpb25zID0ge1xuICBhcHBlbmRGaWx0ZXJzPzogYm9vbGVhbjtcbiAgYXVkaXQ/OiBBdWRpdEV2ZW50c1xufVxuXG50eXBlIFF1ZXJ5UGFyYW1zID0ge1xuICBmPzogc3RyaW5nOyAvLyBmaWx0ZXJzIGxpc3RcbiAgcD86IG51bWJlcjsgLy8gcGFnZSBudW1iZXJcbiAgcz86IHN0cmluZzsgLy8gc29ydCBuYW1lXG4gIHQ/OiBzdHJpbmc7IC8vIHRhYiBuYW1lXG4gIHE/OiBzdHJpbmc7IC8vIHF1ZXJ5IHRleHRcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5U2VydmljZSA9IGluamVjdChRdWVyeVNlcnZpY2UpO1xuXG4gIC8vIFJlcHJlc2VudHMgdGhlIGxhc3QgcmVzdWx0IG9mIGEgc2VhcmNoIG9wZXJhdGlvbiB3aXRoIGdldFJlc3VsdCgpLlxuICBwdWJsaWMgcmVzdWx0OiBSZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gIHB1YmxpYyBhdWRpdD86IEF1ZGl0RXZlbnRzO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeVBhcmFtc1N0b3JlID0gaW5qZWN0KFF1ZXJ5UGFyYW1zU3RvcmUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXNlclNldHRpbmdzU3RvcmUgPSBpbmplY3QoVXNlclNldHRpbmdzU3RvcmUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgc2VhcmNoIG9wZXJhdGlvbiB3aXRoIHRoZSBnaXZlbiBjb21tYW5kcyBhbmQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRzIC0gQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgdGhlIHNlYXJjaCBjb21tYW5kcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgY29udGFpbmluZyBzZWFyY2ggb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMuYXBwZW5kRmlsdGVycyAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXBwZW5kIGV4aXN0aW5nIGZpbHRlcnMgdG8gdGhlIHNlYXJjaCBxdWVyeS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMuYXVkaXQgLSBBbiBvcHRpb25hbCBhdWRpdCB0cmFpbCBvYmplY3QgdG8gYmUgc3RvcmVkIGluIHRoZSBuYXZpZ2F0aW9uIHN0YXRlLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGNvbnN0cnVjdHMgcXVlcnkgcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBhbmQgdGhlIHByb3ZpZGVkIG9wdGlvbnMsXG4gICAqIHRoZW4gbmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgY29tbWFuZHMgd2l0aCB0aGUgY29uc3RydWN0ZWQgcXVlcnkgcGFyYW1ldGVycyBhbmQgYXVkaXQgdHJhaWwuXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKGNvbW1hbmRzOiBzdHJpbmdbXSwgb3B0aW9uczogU2VhcmNoT3B0aW9ucyA9IHsgYXBwZW5kRmlsdGVyczogdHJ1ZSB9KTogdm9pZCB7XG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zID0ge307XG4gICAgY29uc3QgeyB0ZXh0LCBmaWx0ZXJzID0gW10sIHBhZ2UsIHNvcnQsIHRhYiB9ID0gZ2V0U3RhdGUodGhpcy5xdWVyeVBhcmFtc1N0b3JlKTtcbiAgICBjb25zdCB7IGF1ZGl0LCBhcHBlbmRGaWx0ZXJzIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5hdWRpdCA9IGF1ZGl0O1xuXG4gICAgaWYgKGFwcGVuZEZpbHRlcnMpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zLmYgPSBmaWx0ZXJzLmxlbmd0aCA+IDAgPyBKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSA6IHVuZGVmaW5lZDtcbiAgICAgIHF1ZXJ5UGFyYW1zLnAgPSBwYWdlO1xuICAgICAgcXVlcnlQYXJhbXMucyA9IHNvcnQ7XG4gICAgICBxdWVyeVBhcmFtcy50ID0gdGFiO1xuICAgICAgcXVlcnlQYXJhbXMucSA9IHRleHQ7XG4gICAgfVxuXG4gICAgLy8gbmF2aWdhdGlvbiBzdGF0ZSBzdG9yZSB0aGUgYXVkaXQgdHJhaWxcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLCBxdWVyeVBhcmFtcywgc3RhdGU6IHsgYXVkaXQgfSB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBzZWFyY2ggcmVzdWx0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHEgLSBBIHBhcnRpYWwgcXVlcnkgb2JqZWN0IGNvbnRhaW5pbmcgc2VhcmNoIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgb2YgdGhlIHNlYXJjaCByZXN1bHQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcbiAgICogLSBDcmVhdGVzIGFuIGF1ZGl0IGV2ZW50IHdpdGggdGhlIHR5cGUgXCJTZWFyY2hfVGV4dFwiIGFuZCB0aGUgcXVlcnkgdGV4dC5cbiAgICogLSBSZXNldHMgdGhlIGF1ZGl0IHByb3BlcnR5IHRvIHVuZGVmaW5lZC5cbiAgICogLSBDYWxscyB0aGUgc2VhcmNoIG1ldGhvZCBvZiB0aGUgcXVlcnlTZXJ2aWNlIHdpdGggdGhlIHF1ZXJ5LCBhIGZsYWcgdG8gaW5jbHVkZSB0aGUgcXVlcnkgbmFtZSBpbiByZWNvcmRzLCBhbmQgdGhlIGF1ZGl0IGV2ZW50LlxuICAgKiAtIEhhbmRsZXMgYW55IGVycm9ycyBieSByZXR1cm5pbmcgYW4gZW1wdHkgUmVzdWx0IG9iamVjdC5cbiAgICogLSBNYXBzIHRoZSBzZWFyY2ggcmVzdWx0IHRvIHRoZSBzZXJ2aWNlJ3MgcmVzdWx0IHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldFJlc3VsdChxOiBQYXJ0aWFsPFF1ZXJ5Pik6IE9ic2VydmFibGU8UmVzdWx0PiB7XG4gICAgY29uc3QgYXVkaXQ6IEF1ZGl0RXZlbnRzID0geyB0eXBlOiBcIlNlYXJjaF9UZXh0XCIsIGRldGFpbDogeyBxdWVyeXRleHQ6IHE/LnRleHQgfSwgIC4uLnRoaXMuYXVkaXR9O1xuICAgIHRoaXMuYXVkaXQgPSB1bmRlZmluZWQ7XG4gICAgLy8gYWRkIHRoZSBxdWVyeSBuYW1lIHRvIHJlY29yZHMsIHRvIGhhdmUgaXQgYXZhaWxhYmxlIGlmIHdlIGJvb2ttYXJrIG9uZVxuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VydmljZS5zZWFyY2gocSwgdHJ1ZSwgYXVkaXQpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7fSBhcyBSZXN1bHQpKSxcbiAgICAgICAgbWFwKChyZXN1bHQ6IFJlc3VsdCkgPT4gdGhpcy5yZXN1bHQgPSByZXN1bHQpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIHBhZ2UgYW5kIHJldHVybnMgdGhlIHNlYXJjaCByZXN1bHQuXG4gICAqIEBwYXJhbSBwYWdlIC0gVGhlIHBhZ2UgbnVtYmVyIHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgc2VhcmNoIHJlc3VsdC5cbiAgICovXG4gIHB1YmxpYyBnb3RvUGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zU3RvcmUucGF0Y2goeyBwYWdlIH0pO1xuICAgIHRoaXMuc2VhcmNoKFtdLCB7IGF1ZGl0OiB7XG4gICAgICB0eXBlOiBcIlNlYXJjaF9Hb3RvUGFnZVwiLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgIGZyb21yZXN1bHRpZDogdGhpcy5yZXN1bHQgPyB0aGlzLnJlc3VsdC5pZCA6IG51bGxcbiAgICB9XG4gICAgfX0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, Injectable, effect, inject } from '@angular/core';
|
|
2
|
-
import { getState } from '@ngrx/signals';
|
|
3
|
-
import { SelectionStore } from '../stores';
|
|
4
|
-
import { SelectionService } from './selection.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
/*
|
|
7
|
-
* The `SelectionHistoryService` class is responsible for managing the selection history.
|
|
8
|
-
*
|
|
9
|
-
* It keeps track of the history of selected articles and provides methods to navigate through the history.
|
|
10
|
-
* The service also emits events when the selection history changes.
|
|
11
|
-
* This service is used by the Drawer
|
|
12
|
-
*/
|
|
13
|
-
export class SelectionHistoryService {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.selectionHistoryEvent = new EventEmitter();
|
|
16
|
-
this.selectionService = inject(SelectionService);
|
|
17
|
-
this.selectionStore = inject(SelectionStore);
|
|
18
|
-
this.history = [];
|
|
19
|
-
effect(() => {
|
|
20
|
-
const { article } = getState(this.selectionStore);
|
|
21
|
-
if (!!article && article !== this.history[this.history.length - 1]) {
|
|
22
|
-
this.history.push(article);
|
|
23
|
-
this.selectionHistoryEvent.next('new');
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Retrieves the index of the current selection.
|
|
29
|
-
*
|
|
30
|
-
* @returns {number} The index of the current selection, which is the last element in the history array.
|
|
31
|
-
*/
|
|
32
|
-
getCurrentSelectionIndex() {
|
|
33
|
-
return this.history.length - 1;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Retrieves an article from the selection history at the specified index.
|
|
37
|
-
*
|
|
38
|
-
* @param index - The index of the article to retrieve.
|
|
39
|
-
* @returns The article at the specified index, or `undefined` if the index is out of bounds.
|
|
40
|
-
*/
|
|
41
|
-
getSelection(index) {
|
|
42
|
-
if (index < 0 || index >= this.history.length)
|
|
43
|
-
return undefined;
|
|
44
|
-
return this.history[index];
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Retrieves the length of the history array.
|
|
48
|
-
*
|
|
49
|
-
* @returns {number} The number of entries in the history.
|
|
50
|
-
*/
|
|
51
|
-
getHistoryLength() {
|
|
52
|
-
return this.history.length;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Clears the selection history and resets the current article selection.
|
|
56
|
-
*
|
|
57
|
-
* This method performs the following actions:
|
|
58
|
-
* - Empties the history array.
|
|
59
|
-
* - Calls the `clearCurrentArticle` method on the `selectionService` to reset the current article selection.
|
|
60
|
-
*/
|
|
61
|
-
clearHistory() {
|
|
62
|
-
this.history.length = 0;
|
|
63
|
-
this.selectionService.clearCurrentArticle();
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Navigates back in the selection history.
|
|
67
|
-
*
|
|
68
|
-
* Removes the most recent entry from the history. If the history is empty after this operation,
|
|
69
|
-
* it returns `undefined`. Otherwise, it sets the current article to the last entry in the history,
|
|
70
|
-
* triggers a 'back' event, and returns the last entry.
|
|
71
|
-
*
|
|
72
|
-
* @returns {Article | undefined} The last article in the history, or `undefined` if the history is empty.
|
|
73
|
-
*/
|
|
74
|
-
back() {
|
|
75
|
-
this.history.pop();
|
|
76
|
-
if (this.history.length === 0)
|
|
77
|
-
return undefined;
|
|
78
|
-
const last = this.history[this.history.length - 1];
|
|
79
|
-
this.selectionService.setCurrentArticle(last);
|
|
80
|
-
this.selectionHistoryEvent.next('back');
|
|
81
|
-
return last;
|
|
82
|
-
}
|
|
83
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SelectionHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
84
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SelectionHistoryService, providedIn: 'root' }); }
|
|
85
|
-
}
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SelectionHistoryService, decorators: [{
|
|
87
|
-
type: Injectable,
|
|
88
|
-
args: [{
|
|
89
|
-
providedIn: 'root'
|
|
90
|
-
}]
|
|
91
|
-
}], ctorParameters: () => [] });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWhpc3Rvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvc2VsZWN0aW9uLWhpc3Rvcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNdkQ7Ozs7OztHQU1HO0FBS0gsTUFBTSxPQUFPLHVCQUF1QjtJQVFsQztRQVBnQiwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUVqRSxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV4QyxZQUFPLEdBQWMsRUFBRSxDQUFDO1FBR3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUVsRCxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDL0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVoRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksWUFBWTtRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksSUFBSTtRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OEdBakZVLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRTdGF0ZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuXG5pbXBvcnQgeyBBcnRpY2xlIH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHsgU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG4vLyBiYWNrIGlzIHVzZWQgd2hlbiB0aGUgdXNlciBjbG9zZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gYW5kIHdhbnQgdG8gZ28gYmFjayB0byB0aGUgcHJldmlvdXMgb25lXG4vLyBuZXcgaXMgdXNlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdCBhIG5ldyBhcnRpY2xlXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25IaXN0b3J5RXZlbnQgPSAnYmFjaycgfCAnbmV3JztcblxuLypcbiAqIFRoZSBgU2VsZWN0aW9uSGlzdG9yeVNlcnZpY2VgIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkuXG4gKlxuICogSXQga2VlcHMgdHJhY2sgb2YgdGhlIGhpc3Rvcnkgb2Ygc2VsZWN0ZWQgYXJ0aWNsZXMgYW5kIHByb3ZpZGVzIG1ldGhvZHMgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgaGlzdG9yeS5cbiAqIFRoZSBzZXJ2aWNlIGFsc28gZW1pdHMgZXZlbnRzIHdoZW4gdGhlIHNlbGVjdGlvbiBoaXN0b3J5IGNoYW5nZXMuXG4gKiBUaGlzIHNlcnZpY2UgaXMgdXNlZCBieSB0aGUgRHJhd2VyXG4gKi9cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uSGlzdG9yeVNlcnZpY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uSGlzdG9yeUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25IaXN0b3J5RXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGlvblN0b3JlID0gaW5qZWN0KFNlbGVjdGlvblN0b3JlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhpc3Rvcnk6IEFydGljbGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB7IGFydGljbGUgfSA9IGdldFN0YXRlKHRoaXMuc2VsZWN0aW9uU3RvcmUpO1xuXG4gICAgICBpZiAoISFhcnRpY2xlICYmIGFydGljbGUgIT09IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goYXJ0aWNsZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSGlzdG9yeUV2ZW50Lm5leHQoJ25ldycpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHdoaWNoIGlzIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGhpc3RvcnkgYXJyYXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudFNlbGVjdGlvbkluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBhcnRpY2xlIGZyb20gdGhlIHNlbGVjdGlvbiBoaXN0b3J5IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYXJ0aWNsZSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMgVGhlIGFydGljbGUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VsZWN0aW9uKGluZGV4OiBudW1iZXIpOiBBcnRpY2xlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuaGlzdG9yeS5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5oaXN0b3J5W2luZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxlbmd0aCBvZiB0aGUgaGlzdG9yeSBhcnJheS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBoaXN0b3J5LlxuICAgKi9cbiAgcHVibGljIGdldEhpc3RvcnlMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oaXN0b3J5Lmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHNlbGVjdGlvbiBoaXN0b3J5IGFuZCByZXNldHMgdGhlIGN1cnJlbnQgYXJ0aWNsZSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcbiAgICogLSBFbXB0aWVzIHRoZSBoaXN0b3J5IGFycmF5LlxuICAgKiAtIENhbGxzIHRoZSBgY2xlYXJDdXJyZW50QXJ0aWNsZWAgbWV0aG9kIG9uIHRoZSBgc2VsZWN0aW9uU2VydmljZWAgdG8gcmVzZXQgdGhlIGN1cnJlbnQgYXJ0aWNsZSBzZWxlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgY2xlYXJIaXN0b3J5KCk6IHZvaWQge1xuICAgIHRoaXMuaGlzdG9yeS5sZW5ndGggPSAwO1xuICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5jbGVhckN1cnJlbnRBcnRpY2xlKCk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIGJhY2sgaW4gdGhlIHNlbGVjdGlvbiBoaXN0b3J5LlxuICAgKlxuICAgKiBSZW1vdmVzIHRoZSBtb3N0IHJlY2VudCBlbnRyeSBmcm9tIHRoZSBoaXN0b3J5LiBJZiB0aGUgaGlzdG9yeSBpcyBlbXB0eSBhZnRlciB0aGlzIG9wZXJhdGlvbixcbiAgICogaXQgcmV0dXJucyBgdW5kZWZpbmVkYC4gT3RoZXJ3aXNlLCBpdCBzZXRzIHRoZSBjdXJyZW50IGFydGljbGUgdG8gdGhlIGxhc3QgZW50cnkgaW4gdGhlIGhpc3RvcnksXG4gICAqIHRyaWdnZXJzIGEgJ2JhY2snIGV2ZW50LCBhbmQgcmV0dXJucyB0aGUgbGFzdCBlbnRyeS5cbiAgICpcbiAgICogQHJldHVybnMge0FydGljbGUgfCB1bmRlZmluZWR9IFRoZSBsYXN0IGFydGljbGUgaW4gdGhlIGhpc3RvcnksIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBoaXN0b3J5IGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGJhY2soKTogQXJ0aWNsZSB8IHVuZGVmaW5lZCB7XG4gICAgdGhpcy5oaXN0b3J5LnBvcCgpO1xuXG4gICAgaWYgKHRoaXMuaGlzdG9yeS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBsYXN0ID0gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGggLSAxXTtcblxuICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZXRDdXJyZW50QXJ0aWNsZShsYXN0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkhpc3RvcnlFdmVudC5uZXh0KCdiYWNrJyk7XG5cbiAgICByZXR1cm4gbGFzdDtcbiAgfVxufVxuIl19
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Location } from '@angular/common';
|
|
2
|
-
import { Injectable, inject } from '@angular/core';
|
|
3
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
-
import { getState } from '@ngrx/signals';
|
|
5
|
-
import { SelectionStore } from '../stores/selection.store';
|
|
6
|
-
import { QueryParamsStore } from '../stores/query-params.store';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class SelectionService {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.route = inject(ActivatedRoute);
|
|
11
|
-
this.router = inject(Router);
|
|
12
|
-
this.location = inject(Location);
|
|
13
|
-
this.selectionStore = inject(SelectionStore);
|
|
14
|
-
this.queryParamsStore = inject(QueryParamsStore);
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Sets the current article in the selection store and optionally updates the query text.
|
|
18
|
-
* If the provided article is undefined, it clears the current article.
|
|
19
|
-
*
|
|
20
|
-
* @param article - The article to set as the current article. If undefined, the current article is cleared.
|
|
21
|
-
* @param withQueryText - A boolean indicating whether to update the query text in the selection store. Defaults to true.
|
|
22
|
-
*
|
|
23
|
-
* @returns void
|
|
24
|
-
*/
|
|
25
|
-
setCurrentArticle(article, withQueryText = true) {
|
|
26
|
-
if (!article) {
|
|
27
|
-
this.clearCurrentArticle();
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
// update selection store with article and query text
|
|
31
|
-
const { text } = getState(this.queryParamsStore);
|
|
32
|
-
this.selectionStore.update({ article, id: article.id, queryText: withQueryText ? text : undefined });
|
|
33
|
-
if (article?.id)
|
|
34
|
-
this.updateArticleIdInQueryParams(article.id);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Clears the current article selection from the selection store and
|
|
38
|
-
* removes the article ID from the query parameters.
|
|
39
|
-
*
|
|
40
|
-
* @remarks
|
|
41
|
-
* This method performs two main actions:
|
|
42
|
-
* 1. Clears the current selection from the `selectionStore`.
|
|
43
|
-
* 2. Removes the article ID from the query parameters to ensure
|
|
44
|
-
* the URL does not reference the cleared article.
|
|
45
|
-
*
|
|
46
|
-
* @public
|
|
47
|
-
*/
|
|
48
|
-
clearCurrentArticle() {
|
|
49
|
-
this.selectionStore.clear();
|
|
50
|
-
this.clearArticleIdFromQueryParams();
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Updates the article ID in the query parameters of the current route.
|
|
54
|
-
* If the provided ID is undefined, it will remove the ID from the query parameters.
|
|
55
|
-
*
|
|
56
|
-
* @param id - The article ID to be set in the query parameters. If undefined, the ID will be removed.
|
|
57
|
-
*/
|
|
58
|
-
updateArticleIdInQueryParams(id) {
|
|
59
|
-
const url = this.router
|
|
60
|
-
.createUrlTree([], { relativeTo: this.route, queryParams: { id }, queryParamsHandling: 'merge' })
|
|
61
|
-
.toString();
|
|
62
|
-
this.location.replaceState(url);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Clears the 'id' parameter from the current route's query parameters.
|
|
66
|
-
*
|
|
67
|
-
* This method creates a copy of the current query parameters, removes the 'id' parameter,
|
|
68
|
-
* and then updates the browser's URL to reflect the change without reloading the page.
|
|
69
|
-
*
|
|
70
|
-
* @private
|
|
71
|
-
*/
|
|
72
|
-
clearArticleIdFromQueryParams() {
|
|
73
|
-
const queryParams = Object.assign({}, this.route.snapshot.queryParams);
|
|
74
|
-
delete queryParams['id'];
|
|
75
|
-
const url = this.router.createUrlTree([], { relativeTo: this.route, queryParams }).toString();
|
|
76
|
-
this.location.replaceState(url);
|
|
77
|
-
}
|
|
78
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
79
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
|
|
80
|
-
}
|
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SelectionService, decorators: [{
|
|
82
|
-
type: Injectable,
|
|
83
|
-
args: [{
|
|
84
|
-
providedIn: 'root'
|
|
85
|
-
}]
|
|
86
|
-
}] });
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQU1oRSxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSW1CLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBeUU3QztJQXZFQzs7Ozs7Ozs7T0FRRztJQUNJLGlCQUFpQixDQUFDLE9BQWlCLEVBQUUsZ0JBQXlCLElBQUk7UUFDdkUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFcEcsSUFBSSxPQUFPLEVBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksbUJBQW1CO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssNEJBQTRCLENBQUMsRUFBVztRQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTTthQUNwQixhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDaEcsUUFBUSxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLDZCQUE2QjtRQUNuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTlGLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBN0VVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBnZXRTdGF0ZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuXG5pbXBvcnQgeyBBcnRpY2xlIH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHsgU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvc2VsZWN0aW9uLnN0b3JlJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1zU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvcXVlcnktcGFyYW1zLnN0b3JlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGlvblN0b3JlID0gaW5qZWN0KFNlbGVjdGlvblN0b3JlKTtcbiAgcXVlcnlQYXJhbXNTdG9yZSA9IGluamVjdChRdWVyeVBhcmFtc1N0b3JlKTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudCBhcnRpY2xlIGluIHRoZSBzZWxlY3Rpb24gc3RvcmUgYW5kIG9wdGlvbmFsbHkgdXBkYXRlcyB0aGUgcXVlcnkgdGV4dC5cbiAgICogSWYgdGhlIHByb3ZpZGVkIGFydGljbGUgaXMgdW5kZWZpbmVkLCBpdCBjbGVhcnMgdGhlIGN1cnJlbnQgYXJ0aWNsZS5cbiAgICpcbiAgICogQHBhcmFtIGFydGljbGUgLSBUaGUgYXJ0aWNsZSB0byBzZXQgYXMgdGhlIGN1cnJlbnQgYXJ0aWNsZS4gSWYgdW5kZWZpbmVkLCB0aGUgY3VycmVudCBhcnRpY2xlIGlzIGNsZWFyZWQuXG4gICAqIEBwYXJhbSB3aXRoUXVlcnlUZXh0IC0gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byB1cGRhdGUgdGhlIHF1ZXJ5IHRleHQgaW4gdGhlIHNlbGVjdGlvbiBzdG9yZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHNldEN1cnJlbnRBcnRpY2xlKGFydGljbGU/OiBBcnRpY2xlLCB3aXRoUXVlcnlUZXh0OiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICghYXJ0aWNsZSkge1xuICAgICAgdGhpcy5jbGVhckN1cnJlbnRBcnRpY2xlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHNlbGVjdGlvbiBzdG9yZSB3aXRoIGFydGljbGUgYW5kIHF1ZXJ5IHRleHRcbiAgICBjb25zdCB7IHRleHQgfSA9IGdldFN0YXRlKHRoaXMucXVlcnlQYXJhbXNTdG9yZSk7XG4gICAgdGhpcy5zZWxlY3Rpb25TdG9yZS51cGRhdGUoe2FydGljbGUsIGlkOiBhcnRpY2xlLmlkLCBxdWVyeVRleHQ6IHdpdGhRdWVyeVRleHQgPyB0ZXh0IDogdW5kZWZpbmVkIH0pO1xuXG4gICAgaWYgKGFydGljbGU/LmlkKVxuICAgICAgdGhpcy51cGRhdGVBcnRpY2xlSWRJblF1ZXJ5UGFyYW1zKGFydGljbGUuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY3VycmVudCBhcnRpY2xlIHNlbGVjdGlvbiBmcm9tIHRoZSBzZWxlY3Rpb24gc3RvcmUgYW5kXG4gICAqIHJlbW92ZXMgdGhlIGFydGljbGUgSUQgZnJvbSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdHdvIG1haW4gYWN0aW9uczpcbiAgICogMS4gQ2xlYXJzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmcm9tIHRoZSBgc2VsZWN0aW9uU3RvcmVgLlxuICAgKiAyLiBSZW1vdmVzIHRoZSBhcnRpY2xlIElEIGZyb20gdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZW5zdXJlXG4gICAqICAgIHRoZSBVUkwgZG9lcyBub3QgcmVmZXJlbmNlIHRoZSBjbGVhcmVkIGFydGljbGUuXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBjbGVhckN1cnJlbnRBcnRpY2xlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU3RvcmUuY2xlYXIoKTtcblxuICAgIHRoaXMuY2xlYXJBcnRpY2xlSWRGcm9tUXVlcnlQYXJhbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhcnRpY2xlIElEIGluIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgKiBJZiB0aGUgcHJvdmlkZWQgSUQgaXMgdW5kZWZpbmVkLCBpdCB3aWxsIHJlbW92ZSB0aGUgSUQgZnJvbSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGFydGljbGUgSUQgdG8gYmUgc2V0IGluIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLiBJZiB1bmRlZmluZWQsIHRoZSBJRCB3aWxsIGJlIHJlbW92ZWQuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFydGljbGVJZEluUXVlcnlQYXJhbXMoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlclxuICAgICAgLmNyZWF0ZVVybFRyZWUoW10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHsgaWQgfSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KVxuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlICdpZCcgcGFyYW1ldGVyIGZyb20gdGhlIGN1cnJlbnQgcm91dGUncyBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgY29weSBvZiB0aGUgY3VycmVudCBxdWVyeSBwYXJhbWV0ZXJzLCByZW1vdmVzIHRoZSAnaWQnIHBhcmFtZXRlcixcbiAgICogYW5kIHRoZW4gdXBkYXRlcyB0aGUgYnJvd3NlcidzIFVSTCB0byByZWZsZWN0IHRoZSBjaGFuZ2Ugd2l0aG91dCByZWxvYWRpbmcgdGhlIHBhZ2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNsZWFyQXJ0aWNsZUlkRnJvbVF1ZXJ5UGFyYW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG5cbiAgICBkZWxldGUgcXVlcnlQYXJhbXNbJ2lkJ107XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHF1ZXJ5UGFyYW1zIH0pLnRvU3RyaW5nKCk7XG5cbiAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh1cmwpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { withDevtools } from "@angular-architects/ngrx-toolkit";
|
|
2
|
-
import { getState, patchState, signalStore, signalStoreFeature, withMethods, withState } from "@ngrx/signals";
|
|
3
|
-
export const AggregationsStore = signalStore(
|
|
4
|
-
// providing store at the root level
|
|
5
|
-
{ providedIn: 'root' }, withDevtools('Aggregations'), withAggregationsFeatures());
|
|
6
|
-
export function withAggregationsFeatures() {
|
|
7
|
-
return signalStoreFeature(withState({ aggregations: [] }), withMethods((store) => ({
|
|
8
|
-
/**
|
|
9
|
-
* Updates the state with the provided aggregations.
|
|
10
|
-
*
|
|
11
|
-
* @param {Aggregation[]} aggregations - The new aggregations to update the state with.
|
|
12
|
-
*/
|
|
13
|
-
update(aggregations) {
|
|
14
|
-
patchState(store, (state) => {
|
|
15
|
-
return { ...state, aggregations };
|
|
16
|
-
});
|
|
17
|
-
},
|
|
18
|
-
/**
|
|
19
|
-
* Updates an existing aggregation in the store.
|
|
20
|
-
*
|
|
21
|
-
* @param aggregation - The aggregation object to update.
|
|
22
|
-
* @returns void
|
|
23
|
-
*/
|
|
24
|
-
updateAggregation(aggregation) {
|
|
25
|
-
patchState(store, (state) => {
|
|
26
|
-
const index = state.aggregations.findIndex((a) => a.name === aggregation.name);
|
|
27
|
-
if (index !== -1) {
|
|
28
|
-
state.aggregations[index] = aggregation;
|
|
29
|
-
}
|
|
30
|
-
return { ...state };
|
|
31
|
-
});
|
|
32
|
-
},
|
|
33
|
-
/**
|
|
34
|
-
* Clears the aggregations in the store by setting the `aggregations` property to an empty array.
|
|
35
|
-
*
|
|
36
|
-
* @remarks
|
|
37
|
-
* This method uses the `patchState` function to update the state of the store.
|
|
38
|
-
*/
|
|
39
|
-
clear() {
|
|
40
|
-
patchState(store, (state) => {
|
|
41
|
-
return { ...state, aggregations: [] };
|
|
42
|
-
});
|
|
43
|
-
},
|
|
44
|
-
/**
|
|
45
|
-
* Retrieves an aggregation by name or column.
|
|
46
|
-
*
|
|
47
|
-
* @param name - The name or column of the aggregation to retrieve.
|
|
48
|
-
* @param kind - The kind of aggregation to retrieve. Defaults to "name".
|
|
49
|
-
* @returns The matching aggregation, or undefined if not found.
|
|
50
|
-
*/
|
|
51
|
-
getAggregation(name, kind = "name") {
|
|
52
|
-
if (kind === "column") {
|
|
53
|
-
return getState(store).aggregations.find((aggregation) => aggregation.column === name);
|
|
54
|
-
}
|
|
55
|
-
return getState(store).aggregations.find((aggregation) => aggregation.name === name);
|
|
56
|
-
}
|
|
57
|
-
})));
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb25zLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi9zdG9yZXMvYWdncmVnYXRpb25zLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVE5RyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxXQUFXO0FBQzFDLG9DQUFvQztBQUNwQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFDdEIsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUU1Qix3QkFBd0IsRUFBRSxDQUMzQixDQUFDO0FBRUYsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxPQUFPLGtCQUFrQixDQUN2QixTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBbUIsRUFBdUIsQ0FBQyxFQUNyRSxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEI7Ozs7V0FJRztRQUNILE1BQU0sQ0FBQyxZQUEyQjtZQUNoQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQTtZQUNuQyxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFDRDs7Ozs7V0FLRztRQUNILGlCQUFpQixDQUFDLFdBQXdCO1lBQ3hDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNqQixLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQTtZQUNyQixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFDRDs7Ozs7V0FLRztRQUNILEtBQUs7WUFDSCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUE7WUFDdkMsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBQ0Q7Ozs7OztXQU1HO1FBQ0gsY0FBYyxDQUFDLElBQVksRUFBRSxPQUEwQixNQUFNO1lBQzNELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ3pGLENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7S0FDRixDQUFDLENBQUMsQ0FDSixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhEZXZ0b29scyB9IGZyb20gXCJAYW5ndWxhci1hcmNoaXRlY3RzL25ncngtdG9vbGtpdFwiO1xyXG5pbXBvcnQgeyBnZXRTdGF0ZSwgcGF0Y2hTdGF0ZSwgc2lnbmFsU3RvcmUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aE1ldGhvZHMsIHdpdGhTdGF0ZSB9IGZyb20gXCJAbmdyeC9zaWduYWxzXCI7XHJcblxyXG5pbXBvcnQgeyBBZ2dyZWdhdGlvbiB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uc1N0YXRlID0ge1xyXG4gIGFnZ3JlZ2F0aW9uczogQWdncmVnYXRpb25bXVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQWdncmVnYXRpb25zU3RvcmUgPSBzaWduYWxTdG9yZShcclxuICAvLyBwcm92aWRpbmcgc3RvcmUgYXQgdGhlIHJvb3QgbGV2ZWxcclxuICB7IHByb3ZpZGVkSW46ICdyb290JyB9LFxyXG4gIHdpdGhEZXZ0b29scygnQWdncmVnYXRpb25zJyksXHJcblxyXG4gIHdpdGhBZ2dyZWdhdGlvbnNGZWF0dXJlcygpXHJcbik7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2l0aEFnZ3JlZ2F0aW9uc0ZlYXR1cmVzKCkge1xyXG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXHJcbiAgICB3aXRoU3RhdGUoeyBhZ2dyZWdhdGlvbnM6IFtdIGFzIEFnZ3JlZ2F0aW9uW10gfSBhcyBBZ2dyZWdhdGlvbnNTdGF0ZSksXHJcbiAgICB3aXRoTWV0aG9kcygoc3RvcmUpID0+ICh7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBVcGRhdGVzIHRoZSBzdGF0ZSB3aXRoIHRoZSBwcm92aWRlZCBhZ2dyZWdhdGlvbnMuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBwYXJhbSB7QWdncmVnYXRpb25bXX0gYWdncmVnYXRpb25zIC0gVGhlIG5ldyBhZ2dyZWdhdGlvbnMgdG8gdXBkYXRlIHRoZSBzdGF0ZSB3aXRoLlxyXG4gICAgICAgKi9cclxuICAgICAgdXBkYXRlKGFnZ3JlZ2F0aW9uczogQWdncmVnYXRpb25bXSkge1xyXG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIChzdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGFnZ3JlZ2F0aW9ucyB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgYWdncmVnYXRpb24gaW4gdGhlIHN0b3JlLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0gYWdncmVnYXRpb24gLSBUaGUgYWdncmVnYXRpb24gb2JqZWN0IHRvIHVwZGF0ZS5cclxuICAgICAgICogQHJldHVybnMgdm9pZFxyXG4gICAgICAgKi9cclxuICAgICAgdXBkYXRlQWdncmVnYXRpb24oYWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uKSB7XHJcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHN0YXRlLmFnZ3JlZ2F0aW9ucy5maW5kSW5kZXgoKGEpID0+IGEubmFtZSA9PT0gYWdncmVnYXRpb24ubmFtZSk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmFnZ3JlZ2F0aW9uc1tpbmRleF0gPSBhZ2dyZWdhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB7IC4uLnN0YXRlIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICAvKipcclxuICAgICAgICogQ2xlYXJzIHRoZSBhZ2dyZWdhdGlvbnMgaW4gdGhlIHN0b3JlIGJ5IHNldHRpbmcgdGhlIGBhZ2dyZWdhdGlvbnNgIHByb3BlcnR5IHRvIGFuIGVtcHR5IGFycmF5LlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcmVtYXJrc1xyXG4gICAgICAgKiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBgcGF0Y2hTdGF0ZWAgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgc3RvcmUuXHJcbiAgICAgICAqL1xyXG4gICAgICBjbGVhcigpIHtcclxuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGUpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBhZ2dyZWdhdGlvbnM6IFtdIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICAvKipcclxuICAgICAgICogUmV0cmlldmVzIGFuIGFnZ3JlZ2F0aW9uIGJ5IG5hbWUgb3IgY29sdW1uLlxyXG4gICAgICAgKiBcclxuICAgICAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvciBjb2x1bW4gb2YgdGhlIGFnZ3JlZ2F0aW9uIHRvIHJldHJpZXZlLlxyXG4gICAgICAgKiBAcGFyYW0ga2luZCAtIFRoZSBraW5kIG9mIGFnZ3JlZ2F0aW9uIHRvIHJldHJpZXZlLiBEZWZhdWx0cyB0byBcIm5hbWVcIi5cclxuICAgICAgICogQHJldHVybnMgVGhlIG1hdGNoaW5nIGFnZ3JlZ2F0aW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QWdncmVnYXRpb24obmFtZTogc3RyaW5nLCBraW5kOiBcImNvbHVtblwiIHwgXCJuYW1lXCIgPSBcIm5hbWVcIikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImNvbHVtblwiKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0U3RhdGUoc3RvcmUpLmFnZ3JlZ2F0aW9ucy5maW5kKChhZ2dyZWdhdGlvbikgPT4gYWdncmVnYXRpb24uY29sdW1uID09PSBuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdldFN0YXRlKHN0b3JlKS5hZ2dyZWdhdGlvbnMuZmluZCgoYWdncmVnYXRpb24pID0+IGFnZ3JlZ2F0aW9uLm5hbWUgPT09IG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KSlcclxuICApXHJcbn0iXX0=
|