ngx-cho-common 1.0.10 → 1.0.11

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 CHANGED
@@ -1,24 +1,142 @@
1
1
  # NgxChoCommon
2
2
 
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
3
+ This library provides common utilities, models, services, and directives shared across CHO Angular applications.
4
4
 
5
- ## Code scaffolding
5
+ Generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
6
6
 
7
- Run `ng generate component component-name --project ngx-cho-common` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-cho-common`.
8
- > Note: Don't forget to add `--project ngx-cho-common` or else it will be added to the default project in your `angular.json` file.
7
+ ## Overview
8
+
9
+ NgxChoCommon is a foundational library that contains:
10
+ - Common models and interfaces
11
+ - Utility services (error handling, session storage, etc.)
12
+ - Reusable directives
13
+ - Configuration interfaces
14
+ - Shared pipes and guards
15
+
16
+ ## Dependencies
17
+
18
+ This library has **no dependencies** on other workspace libraries and should be built first.
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ npm install ngx-cho-common
24
+ ```
9
25
 
10
26
  ## Build
11
27
 
12
- Run `ng build ngx-cho-common` to build the project. The build artifacts will be stored in the `dist/` directory.
28
+ **Important**: This library should be built before any other libraries in the workspace that depend on it.
29
+
30
+ ```bash
31
+ ng build ngx-cho-common
32
+ ```
33
+
34
+ Build artifacts will be stored in the `dist/ngx-cho-common` directory.
35
+
36
+ ## Development
37
+
38
+ ### Code Scaffolding
39
+
40
+ ```bash
41
+ ng generate component component-name --project ngx-cho-common
42
+ ng generate service service-name --project ngx-cho-common
43
+ ng generate directive directive-name --project ngx-cho-common
44
+ ```
45
+
46
+ > Note: Always include `--project ngx-cho-common` or the component will be added to the default project.
47
+
48
+ ### Running Tests
49
+
50
+ ```bash
51
+ ng test ngx-cho-common
52
+ ```
13
53
 
14
54
  ## Publishing
15
55
 
16
- After building your library with `ng build ngx-cho-common`, go to the dist folder `cd dist/ngx-cho-common` and run `npm publish`.
56
+ 1. **Update version** in `projects/ngx-cho-common/package.json`
57
+ 2. **Build the library**:
58
+ ```bash
59
+ ng build ngx-cho-common --configuration production
60
+ ```
61
+ 3. **Publish to npm**:
62
+ ```bash
63
+ cd dist/ngx-cho-common
64
+ npm publish
65
+ ```
66
+
67
+ ## Usage in Other Libraries
68
+
69
+ Other libraries in this workspace depend on ngx-cho-common:
70
+ - ngx-cho-security
71
+ - ngx-cho-components
72
+
73
+ Make sure to build ngx-cho-common first before building dependent libraries.
74
+
75
+ ## Filter <-> URL sync (ChoSearchService and choFilterSync)
76
+
77
+ Provides shared, reusable filter-to-URL synchronization for both standalone and NgModule apps.
78
+
79
+ ### Standalone component
80
+
81
+ ```ts
82
+ @Component({
83
+ standalone: true,
84
+ selector: 'app-list',
85
+ templateUrl: './list.component.html',
86
+ imports: [CommonModule, FormsModule, ChoFilterSyncDirective],
87
+ })
88
+ export class ListComponent {
89
+ filters = {
90
+ q: null as string | null,
91
+ status: null as number | null,
92
+ includeInactive: null as boolean | null,
93
+ };
94
+ applyTick = 0;
95
+ onChange() { this.applyTick++; }
96
+ clear() { this.filters = { q: null, status: null, includeInactive: null }; this.applyTick++; }
97
+ }
98
+ ```
99
+
100
+ ```html
101
+ <div
102
+ [choFilterSync]="filters"
103
+ [choFilterSyncMap]="{ q: 'q', status: 's', includeInactive: 'i' }"
104
+ [choFilterSyncTypes]="{ q: 'string', status: 'number', includeInactive: 'boolean' }"
105
+ [choFilterSyncApply]="applyTick"
106
+ (choFilterSyncChange)="/* optional */">
107
+ <!-- inputs binding to filters; call onChange() on edits -->
108
+ ...
109
+ </div>
110
+ ```
111
+
112
+ ### NgModule consumer (without wrapper module)
113
+
114
+ ```ts
115
+ @NgModule({
116
+ imports: [CommonModule, FormsModule, ChoFilterSyncDirective],
117
+ })
118
+ export class FeatureModule {}
119
+ ```
120
+
121
+ ### NgModule consumer (with wrapper module)
122
+
123
+ ```ts
124
+ @NgModule({
125
+ imports: [CommonModule, FormsModule, ChoSearchModule],
126
+ })
127
+ export class FeatureModule {}
128
+ ```
17
129
 
18
- ## Running unit tests
130
+ ### Migration checklist for apps
19
131
 
20
- Run `ng test ngx-cho-common` to execute the unit tests via [Karma](https://karma-runner.github.io).
132
+ - Install updated `ngx-cho-common`.
133
+ - Import `ChoFilterSyncDirective` (standalone) or `ChoSearchModule` (module).
134
+ - Replace ad-hoc query param code with directive bindings:
135
+ - `[choFilterSync]`, `[choFilterSyncMap]`, optional `[choFilterSyncDefaults]`/`[choFilterSyncTypes]`
136
+ - Trigger writes by incrementing a token bound to `[choFilterSyncApply]`
137
+ - Optional: handle `(choFilterSyncChange)` after init
21
138
 
22
- ## Further help
139
+ ## Further Help
23
140
 
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
141
+ - [Angular CLI Overview and Command Reference](https://angular.io/cli)
142
+ - [Angular Library Development Guide](https://angular.io/guide/creating-libraries)
@@ -0,0 +1,49 @@
1
+ import { Directive, EventEmitter, Input, Output, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../services/cho-search.service";
4
+ export class ChoFilterSyncDirective {
5
+ constructor(searchService) {
6
+ this.searchService = searchService;
7
+ this.choFilterSyncChange = new EventEmitter();
8
+ }
9
+ ngOnInit() {
10
+ if (!this.choFilterSync || !this.choFilterSyncMap)
11
+ return;
12
+ const initial = this.searchService.readFromRoute(this.choFilterSyncMap, this.choFilterSyncDefaults, this.choFilterSyncTypes);
13
+ Object.assign(this.choFilterSync, initial);
14
+ this.choFilterSyncChange.emit(this.choFilterSync);
15
+ }
16
+ ngOnChanges(changes) {
17
+ if (changes['choFilterSyncApply'] && !changes['choFilterSyncApply'].firstChange) {
18
+ this.apply();
19
+ }
20
+ }
21
+ apply() {
22
+ if (!this.choFilterSync || !this.choFilterSyncMap)
23
+ return;
24
+ this.searchService.writeToRoute(this.choFilterSync, this.choFilterSyncMap);
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoFilterSyncDirective, deps: [{ token: i1.ChoSearchService }], target: i0.ɵɵFactoryTarget.Directive }); }
27
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ChoFilterSyncDirective, isStandalone: true, selector: "[choFilterSync]", inputs: { choFilterSync: "choFilterSync", choFilterSyncMap: "choFilterSyncMap", choFilterSyncDefaults: "choFilterSyncDefaults", choFilterSyncTypes: "choFilterSyncTypes", choFilterSyncApply: "choFilterSyncApply" }, outputs: { choFilterSyncChange: "choFilterSyncChange" }, exportAs: ["choFilterSync"], usesOnChanges: true, ngImport: i0 }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoFilterSyncDirective, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ selector: '[choFilterSync]',
33
+ exportAs: 'choFilterSync',
34
+ standalone: true,
35
+ }]
36
+ }], ctorParameters: () => [{ type: i1.ChoSearchService }], propDecorators: { choFilterSync: [{
37
+ type: Input
38
+ }], choFilterSyncMap: [{
39
+ type: Input
40
+ }], choFilterSyncDefaults: [{
41
+ type: Input
42
+ }], choFilterSyncTypes: [{
43
+ type: Input
44
+ }], choFilterSyncApply: [{
45
+ type: Input
46
+ }], choFilterSyncChange: [{
47
+ type: Output
48
+ }] } });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvLWZpbHRlci1zeW5jLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9saWIvZGlyZWN0aXZlcy9jaG8tZmlsdGVyLXN5bmMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7OztBQVF2QixNQUFNLE9BQU8sc0JBQXNCO0lBUS9CLFlBQTZCLGFBQStCO1FBQS9CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUZsRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztJQUViLENBQUM7SUFFaEUsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU87UUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQzVDLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLHFCQUFxQixFQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQzFCLENBQUM7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU87UUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRSxDQUFDOytHQTlCUSxzQkFBc0I7bUdBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFMbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ25CO3FGQUVZLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBEaXJlY3RpdmUsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENob1NlYXJjaFNlcnZpY2UsIEZpbHRlclR5cGUgfSBmcm9tICcuLi9zZXJ2aWNlcy9jaG8tc2VhcmNoLnNlcnZpY2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tjaG9GaWx0ZXJTeW5jXScsXHJcbiAgICBleHBvcnRBczogJ2Nob0ZpbHRlclN5bmMnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENob0ZpbHRlclN5bmNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSBjaG9GaWx0ZXJTeW5jITogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgICBASW5wdXQoKSBjaG9GaWx0ZXJTeW5jTWFwITogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAgIEBJbnB1dCgpIGNob0ZpbHRlclN5bmNEZWZhdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG4gICAgQElucHV0KCkgY2hvRmlsdGVyU3luY1R5cGVzPzogUmVjb3JkPHN0cmluZywgRmlsdGVyVHlwZT47XHJcbiAgICBASW5wdXQoKSBjaG9GaWx0ZXJTeW5jQXBwbHk/OiB1bmtub3duO1xyXG4gICAgQE91dHB1dCgpIGNob0ZpbHRlclN5bmNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoU2VydmljZTogQ2hvU2VhcmNoU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hvRmlsdGVyU3luYyB8fCAhdGhpcy5jaG9GaWx0ZXJTeW5jTWFwKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IHRoaXMuc2VhcmNoU2VydmljZS5yZWFkRnJvbVJvdXRlKFxyXG4gICAgICAgICAgICB0aGlzLmNob0ZpbHRlclN5bmNNYXAsXHJcbiAgICAgICAgICAgIHRoaXMuY2hvRmlsdGVyU3luY0RlZmF1bHRzLFxyXG4gICAgICAgICAgICB0aGlzLmNob0ZpbHRlclN5bmNUeXBlc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNob0ZpbHRlclN5bmMsIGluaXRpYWwpO1xyXG4gICAgICAgIHRoaXMuY2hvRmlsdGVyU3luY0NoYW5nZS5lbWl0KHRoaXMuY2hvRmlsdGVyU3luYyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzWydjaG9GaWx0ZXJTeW5jQXBwbHknXSAmJiAhY2hhbmdlc1snY2hvRmlsdGVyU3luY0FwcGx5J10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNob0ZpbHRlclN5bmMgfHwgIXRoaXMuY2hvRmlsdGVyU3luY01hcCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS53cml0ZVRvUm91dGUodGhpcy5jaG9GaWx0ZXJTeW5jLCB0aGlzLmNob0ZpbHRlclN5bmNNYXApO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuIl19
@@ -0,0 +1,16 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ChoFilterSyncDirective } from './cho-filter-sync.directive';
3
+ import * as i0 from "@angular/core";
4
+ export class ChoSearchModule {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule, imports: [ChoFilterSyncDirective], exports: [ChoFilterSyncDirective] }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule }); }
8
+ }
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{
12
+ imports: [ChoFilterSyncDirective],
13
+ exports: [ChoFilterSyncDirective],
14
+ }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvLXNlYXJjaC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY2hvLWNvbW1vbi9zcmMvbGliL2RpcmVjdGl2ZXMvY2hvLXNlYXJjaC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFNckUsTUFBTSxPQUFPLGVBQWU7K0dBQWYsZUFBZTtnSEFBZixlQUFlLFlBSGQsc0JBQXNCLGFBQ3RCLHNCQUFzQjtnSEFFdkIsZUFBZTs7NEZBQWYsZUFBZTtrQkFKM0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hvRmlsdGVyU3luY0RpcmVjdGl2ZSB9IGZyb20gJy4vY2hvLWZpbHRlci1zeW5jLmRpcmVjdGl2ZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW0Nob0ZpbHRlclN5bmNEaXJlY3RpdmVdLFxyXG4gICAgZXhwb3J0czogW0Nob0ZpbHRlclN5bmNEaXJlY3RpdmVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hvU2VhcmNoTW9kdWxlIHt9XHJcblxyXG5cclxuIl19
@@ -0,0 +1,75 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./cho-route-param.service";
4
+ import * as i2 from "./cho-navigation.service";
5
+ export class ChoSearchService {
6
+ constructor(routeParamService, navigationService) {
7
+ this.routeParamService = routeParamService;
8
+ this.navigationService = navigationService;
9
+ }
10
+ readFromRoute(map, defaults, types) {
11
+ const result = { ...(defaults || {}) };
12
+ Object.keys(map).forEach(prop => {
13
+ const qp = map[prop];
14
+ const desiredType = types?.[prop] || this.inferType(defaults, prop);
15
+ const value = this.getQueryParamValue(qp, desiredType);
16
+ if (value !== undefined) {
17
+ result[prop] = value;
18
+ }
19
+ });
20
+ return result;
21
+ }
22
+ writeToRoute(filters, map) {
23
+ const qp = {};
24
+ Object.keys(map).forEach(prop => {
25
+ const key = map[prop];
26
+ const val = filters[prop];
27
+ qp[key] = this.normalizeQueryValue(val);
28
+ });
29
+ this.navigationService.setQueryParams(qp);
30
+ }
31
+ resetWithDefaults(defaults) {
32
+ return { ...(defaults || {}) };
33
+ }
34
+ getQueryParamValue(key, type) {
35
+ switch (type) {
36
+ case 'number': {
37
+ return this.routeParamService.getQueryParameterNumber(key) ?? undefined;
38
+ }
39
+ case 'boolean': {
40
+ return this.routeParamService.getQueryParameterBoolean(key) ?? undefined;
41
+ }
42
+ case 'string':
43
+ default: {
44
+ const v = this.routeParamService.getQueryParameterValue(key);
45
+ return v !== undefined && v !== null ? v : undefined;
46
+ }
47
+ }
48
+ }
49
+ inferType(defaults, prop) {
50
+ if (!defaults)
51
+ return undefined;
52
+ const v = defaults[prop];
53
+ if (v === null || v === undefined)
54
+ return undefined;
55
+ if (typeof v === 'number')
56
+ return 'number';
57
+ if (typeof v === 'boolean')
58
+ return 'boolean';
59
+ return 'string';
60
+ }
61
+ normalizeQueryValue(val) {
62
+ if (val === undefined || val === '')
63
+ return null;
64
+ if (typeof val === 'boolean')
65
+ return val ? true : null;
66
+ return val ?? null;
67
+ }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchService, deps: [{ token: i1.ChoRouteParamService }, { token: i2.ChoNavigationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
69
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchService, providedIn: 'root' }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchService, decorators: [{
72
+ type: Injectable,
73
+ args: [{ providedIn: 'root' }]
74
+ }], ctorParameters: () => [{ type: i1.ChoRouteParamService }, { type: i2.ChoNavigationService }] });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvLXNlYXJjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9jaG8tc2VhcmNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU8zQyxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFlBQ3FCLGlCQUF1QyxFQUN2QyxpQkFBdUM7UUFEdkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO0lBQ3pELENBQUM7SUFFRyxhQUFhLENBQ2hCLEdBQTJCLEVBQzNCLFFBQXFCLEVBQ3JCLEtBQTRDO1FBRTVDLE1BQU0sTUFBTSxHQUE0QixFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1QixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsTUFBTSxXQUFXLEdBQ1osS0FBSyxFQUFFLENBQUMsSUFBd0IsQ0FBZ0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBZ0IsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQVcsQ0FBQztJQUN2QixDQUFDO0lBRU0sWUFBWSxDQUNmLE9BQVUsRUFDVixHQUEyQjtRQUUzQixNQUFNLEVBQUUsR0FBNEIsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixNQUFNLEdBQUcsR0FBSSxPQUFtQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxpQkFBaUIsQ0FBb0MsUUFBcUI7UUFDN0UsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEVBQU8sQ0FBQztJQUN4QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBVyxFQUFFLElBQTRCO1FBQ2hFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDWCxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQzVFLENBQUM7WUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQzdFLENBQUM7WUFDRCxLQUFLLFFBQVEsQ0FBQztZQUNkLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RCxPQUFPLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sU0FBUyxDQUFJLFFBQWdDLEVBQUUsSUFBWTtRQUMvRCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFJLFFBQW9DLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDcEQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDM0MsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDN0MsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVk7UUFDcEMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDakQsSUFBSSxPQUFPLEdBQUcsS0FBSyxTQUFTO1lBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZELE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOytHQXRFUSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaG9OYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vY2hvLW5hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENob1JvdXRlUGFyYW1TZXJ2aWNlIH0gZnJvbSAnLi9jaG8tcm91dGUtcGFyYW0uc2VydmljZSc7XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJUeXBlID0gJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBDaG9TZWFyY2hTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVQYXJhbVNlcnZpY2U6IENob1JvdXRlUGFyYW1TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmF2aWdhdGlvblNlcnZpY2U6IENob05hdmlnYXRpb25TZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgcHVibGljIHJlYWRGcm9tUm91dGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcclxuICAgICAgICBtYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXHJcbiAgICAgICAgZGVmYXVsdHM/OiBQYXJ0aWFsPFQ+LFxyXG4gICAgICAgIHR5cGVzPzogUmVjb3JkPGtleW9mIFQgJiBzdHJpbmcsIEZpbHRlclR5cGU+XHJcbiAgICApOiBUIHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi4oZGVmYXVsdHMgfHwge30pIH07XHJcbiAgICAgICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBxcCA9IG1hcFtwcm9wXTtcclxuICAgICAgICAgICAgY29uc3QgZGVzaXJlZFR5cGUgPVxyXG4gICAgICAgICAgICAgICAgKHR5cGVzPy5bcHJvcCBhcyBrZXlvZiBUICYgc3RyaW5nXSBhcyBGaWx0ZXJUeXBlKSB8fCB0aGlzLmluZmVyVHlwZShkZWZhdWx0cywgcHJvcCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRRdWVyeVBhcmFtVmFsdWUocXAsIGRlc2lyZWRUeXBlKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IHZhbHVlIGFzIHVua25vd247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlVG9Sb3V0ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxyXG4gICAgICAgIGZpbHRlcnM6IFQsXHJcbiAgICAgICAgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBxcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1hcFtwcm9wXTtcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gKGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3BdO1xyXG4gICAgICAgICAgICBxcFtrZXldID0gdGhpcy5ub3JtYWxpemVRdWVyeVZhbHVlKHZhbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zZXRRdWVyeVBhcmFtcyhxcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0V2l0aERlZmF1bHRzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oZGVmYXVsdHM/OiBQYXJ0aWFsPFQ+KTogVCB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uKGRlZmF1bHRzIHx8IHt9KSB9IGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRRdWVyeVBhcmFtVmFsdWUoa2V5OiBzdHJpbmcsIHR5cGU6IEZpbHRlclR5cGUgfCB1bmRlZmluZWQpOiB1bmtub3duIHtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVQYXJhbVNlcnZpY2UuZ2V0UXVlcnlQYXJhbWV0ZXJOdW1iZXIoa2V5KSA/PyB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUGFyYW1TZXJ2aWNlLmdldFF1ZXJ5UGFyYW1ldGVyQm9vbGVhbihrZXkpID8/IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy5yb3V0ZVBhcmFtU2VydmljZS5nZXRRdWVyeVBhcmFtZXRlclZhbHVlKGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgPyB2IDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5mZXJUeXBlPFQ+KGRlZmF1bHRzOiBQYXJ0aWFsPFQ+IHwgdW5kZWZpbmVkLCBwcm9wOiBzdHJpbmcpOiBGaWx0ZXJUeXBlIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAoIWRlZmF1bHRzKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IHYgPSAoZGVmYXVsdHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3BdO1xyXG4gICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSByZXR1cm4gJ251bWJlcic7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHJldHVybiAnYm9vbGVhbic7XHJcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbm9ybWFsaXplUXVlcnlWYWx1ZSh2YWw6IHVua25vd24pOiB1bmtub3duIHtcclxuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbCA/IHRydWUgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB2YWwgPz8gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -29,4 +29,8 @@ export { ChoObjectService } from './lib/services/cho-object.service';
29
29
  export { ChoRestClientService } from './lib/services/cho-rest-client.service';
30
30
  export { ChoRouteParamService } from './lib/services/cho-route-param.service';
31
31
  export { ChoSessionStorageService } from './lib/services/cho-session-storage.service';
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHlCQUF5QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQVloRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUNILGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsZUFBZSxHQUNsQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtY2hvLWNvbW1vblxyXG4gKi9cclxuZXhwb3J0IHsgQ0hPX0NPTU1PTl9DT05GSUcsIENob0NvbW1vbkNvbmZpZyB9IGZyb20gJy4vbmd4LWNoby1jb21tb24uY29uZmlnJztcclxuXHJcbmV4cG9ydCB7IENob0F1dG9Gb2N1c0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvY2hvLWF1dG8tZm9jdXMuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgQ2hvRm9ybUZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9jaG8tZm9ybS1mb2N1cy5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBDaG9LZXlQcmVzc0VudGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9jaG8ta2V5LXByZXNzLWVudGVyLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCB7IENob0tleVByZXNzRXNjYXBlRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9jaG8ta2V5LXByZXNzLWVzY2FwZS5kaXJlY3RpdmUnO1xyXG5cclxuZXhwb3J0IHsgQ2hvRmVhdHVyZUd1YXJkIH0gZnJvbSAnLi9saWIvZ3VhcmRzL2Noby1mZWF0dXJlLmd1YXJkJztcclxuZXhwb3J0IHsgQ2hvVW5zYXZlZENoYW5nZXNHdWFyZCB9IGZyb20gJy4vbGliL2d1YXJkcy9jaG8tdW5zYXZlZC1jaGFuZ2VzLmd1YXJkJztcclxuXHJcbmV4cG9ydCB7IElEZWFjdGl2YXRhYmxlIH0gZnJvbSAnLi9saWIvbW9kZWxzL2RlYWN0aXZhdGFibGUuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCB7IElQaG9uZUluZm8gfSBmcm9tICcuL2xpYi9tb2RlbHMvcGhvbmUtaW5mby5tb2RlbCc7XHJcbmV4cG9ydCB7IElOb3RlSW5mbyB9IGZyb20gJy4vbGliL21vZGVscy9ub3RlLWluZm8ubW9kZWwnO1xyXG5leHBvcnQgeyBJRW1haWxJbmZvIH0gZnJvbSAnLi9saWIvbW9kZWxzL2VtYWlsLWluZm8ubW9kZWwnO1xyXG5leHBvcnQgeyBJQ29udGFjdEluZm8gfSBmcm9tICcuL2xpYi9tb2RlbHMvY29udGFjdC1pbmZvLm1vZGVsJztcclxuZXhwb3J0IHsgQmFzaWNTZWFyY2hGaWx0ZXIgfSBmcm9tICcuL2xpYi9tb2RlbHMvYmFzaWMtc2VhcmNoLWZpbHRlci5tb2RlbCc7XHJcbmV4cG9ydCB7IEFwcEZpbGUgfSBmcm9tICcuL2xpYi9tb2RlbHMvYXBwLWZpbGUubW9kZWwnO1xyXG5leHBvcnQgeyBJQWRkcmVzcyB9IGZyb20gJy4vbGliL21vZGVscy9hZGRyZXNzLm1vZGVsJztcclxuZXhwb3J0IHsgSU5vdGUgfSBmcm9tICcuL2xpYi9tb2RlbHMvbm90ZS5tb2RlbCc7XHJcbmV4cG9ydCB7IFV1aWQgfSBmcm9tICcuL2xpYi9tb2RlbHMvdXVpZC5tb2RlbCc7XHJcblxyXG5leHBvcnQgeyBDaG9BY3RpdmVGaWx0ZXJQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY2hvLWFjdGl2ZS1maWx0ZXIucGlwZSc7XHJcbmV4cG9ydCB7IENob0Jvb2xlYW5QaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY2hvLWJvb2xlYW4ucGlwZSc7XHJcbmV4cG9ydCB7IENob0RhdGVQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY2hvLWRhdGUucGlwZSc7XHJcbmV4cG9ydCB7IENob0ZpbHRlclBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jaG8tZmlsdGVyLnBpcGUnO1xyXG5leHBvcnQgeyBDaG9Gb3JtYXRLZXlQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY2hvLWZvcm1hdC1rZXkucGlwZSc7XHJcbmV4cG9ydCB7IENob0xvd2VyS2ViYWJDYXNlUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL2Noby1sb3dlci1rZWJhYi1jYXNlLnBpcGUnO1xyXG5leHBvcnQgeyBDaG9TdW1CeVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jaG8tc3VtLWJ5LnBpcGUnO1xyXG5leHBvcnQgeyBDaG9UZXh0RmlsdGVyUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL2Noby10ZXh0LWZpbHRlci5waXBlJztcclxuXHJcbmV4cG9ydCB7IENob0RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLWRhdGUuc2VydmljZSc7XHJcbmV4cG9ydCB7IENob0Rvd25sb2FkU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Noby1kb3dubG9hZC5zZXJ2aWNlJztcclxuZXhwb3J0IHsgQ2hvRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLWVycm9yLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9GZWF0dXJlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Noby1mZWF0dXJlLnNlcnZpY2UnO1xyXG5leHBvcnQge1xyXG4gICAgQ2hvSW50ZXJ2YWxTZXJ2aWNlLFxyXG4gICAgSW50ZXJ2YWxUaW1lcixcclxuICAgIEZpcmVJbW1lZGlhdGVseSxcclxufSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8taW50ZXJ2YWwuc2VydmljZSc7XHJcbmV4cG9ydCB7IENob0xvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuZXhwb3J0IHsgQ2hvTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLW1vZGFsLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9OYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Noby1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9PYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLW9iamVjdC5zZXJ2aWNlJztcclxuZXhwb3J0IHsgQ2hvUmVzdENsaWVudFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tcmVzdC1jbGllbnQuc2VydmljZSc7XHJcbmV4cG9ydCB7IENob1JvdXRlUGFyYW1TZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLXJvdXRlLXBhcmFtLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9TZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSAnLi9saWIvdHlwZXMvaW5kZXhhYmxlLnR5cGUnO1xyXG5leHBvcnQgeyBOYW1lVmFsdWVJdGVtIH0gZnJvbSAnLi9saWIvdHlwZXMvbmFtZS12YWx1ZS1pdGVtLnR5cGUnO1xyXG4iXX0=
32
+ // Search utilities
33
+ export { ChoSearchService } from './lib/services/cho-search.service';
34
+ export { ChoFilterSyncDirective } from './lib/directives/cho-filter-sync.directive';
35
+ export { ChoSearchModule } from './lib/directives/cho-search.module';
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHlCQUF5QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQVloRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUNILGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsZUFBZSxHQUNsQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUt0RixtQkFBbUI7QUFDbkIsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1jaG8tY29tbW9uXHJcbiAqL1xyXG5leHBvcnQgeyBDSE9fQ09NTU9OX0NPTkZJRywgQ2hvQ29tbW9uQ29uZmlnIH0gZnJvbSAnLi9uZ3gtY2hvLWNvbW1vbi5jb25maWcnO1xyXG5cclxuZXhwb3J0IHsgQ2hvQXV0b0ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9jaG8tYXV0by1mb2N1cy5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBDaG9Gb3JtRm9jdXNEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2Noby1mb3JtLWZvY3VzLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCB7IENob0tleVByZXNzRW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2Noby1rZXktcHJlc3MtZW50ZXIuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgQ2hvS2V5UHJlc3NFc2NhcGVEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2Noby1rZXktcHJlc3MtZXNjYXBlLmRpcmVjdGl2ZSc7XHJcblxyXG5leHBvcnQgeyBDaG9GZWF0dXJlR3VhcmQgfSBmcm9tICcuL2xpYi9ndWFyZHMvY2hvLWZlYXR1cmUuZ3VhcmQnO1xyXG5leHBvcnQgeyBDaG9VbnNhdmVkQ2hhbmdlc0d1YXJkIH0gZnJvbSAnLi9saWIvZ3VhcmRzL2Noby11bnNhdmVkLWNoYW5nZXMuZ3VhcmQnO1xyXG5cclxuZXhwb3J0IHsgSURlYWN0aXZhdGFibGUgfSBmcm9tICcuL2xpYi9tb2RlbHMvZGVhY3RpdmF0YWJsZS5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IHsgSVBob25lSW5mbyB9IGZyb20gJy4vbGliL21vZGVscy9waG9uZS1pbmZvLm1vZGVsJztcclxuZXhwb3J0IHsgSU5vdGVJbmZvIH0gZnJvbSAnLi9saWIvbW9kZWxzL25vdGUtaW5mby5tb2RlbCc7XHJcbmV4cG9ydCB7IElFbWFpbEluZm8gfSBmcm9tICcuL2xpYi9tb2RlbHMvZW1haWwtaW5mby5tb2RlbCc7XHJcbmV4cG9ydCB7IElDb250YWN0SW5mbyB9IGZyb20gJy4vbGliL21vZGVscy9jb250YWN0LWluZm8ubW9kZWwnO1xyXG5leHBvcnQgeyBCYXNpY1NlYXJjaEZpbHRlciB9IGZyb20gJy4vbGliL21vZGVscy9iYXNpYy1zZWFyY2gtZmlsdGVyLm1vZGVsJztcclxuZXhwb3J0IHsgQXBwRmlsZSB9IGZyb20gJy4vbGliL21vZGVscy9hcHAtZmlsZS5tb2RlbCc7XHJcbmV4cG9ydCB7IElBZGRyZXNzIH0gZnJvbSAnLi9saWIvbW9kZWxzL2FkZHJlc3MubW9kZWwnO1xyXG5leHBvcnQgeyBJTm90ZSB9IGZyb20gJy4vbGliL21vZGVscy9ub3RlLm1vZGVsJztcclxuZXhwb3J0IHsgVXVpZCB9IGZyb20gJy4vbGliL21vZGVscy91dWlkLm1vZGVsJztcclxuXHJcbmV4cG9ydCB7IENob0FjdGl2ZUZpbHRlclBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jaG8tYWN0aXZlLWZpbHRlci5waXBlJztcclxuZXhwb3J0IHsgQ2hvQm9vbGVhblBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jaG8tYm9vbGVhbi5waXBlJztcclxuZXhwb3J0IHsgQ2hvRGF0ZVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jaG8tZGF0ZS5waXBlJztcclxuZXhwb3J0IHsgQ2hvRmlsdGVyUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL2Noby1maWx0ZXIucGlwZSc7XHJcbmV4cG9ydCB7IENob0Zvcm1hdEtleVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jaG8tZm9ybWF0LWtleS5waXBlJztcclxuZXhwb3J0IHsgQ2hvTG93ZXJLZWJhYkNhc2VQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY2hvLWxvd2VyLWtlYmFiLWNhc2UucGlwZSc7XHJcbmV4cG9ydCB7IENob1N1bUJ5UGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL2Noby1zdW0tYnkucGlwZSc7XHJcbmV4cG9ydCB7IENob1RleHRGaWx0ZXJQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY2hvLXRleHQtZmlsdGVyLnBpcGUnO1xyXG5cclxuZXhwb3J0IHsgQ2hvRGF0ZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tZGF0ZS5zZXJ2aWNlJztcclxuZXhwb3J0IHsgQ2hvRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLWRvd25sb2FkLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9FcnJvclNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tZXJyb3Iuc2VydmljZSc7XHJcbmV4cG9ydCB7IENob0ZlYXR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLWZlYXR1cmUuc2VydmljZSc7XHJcbmV4cG9ydCB7XHJcbiAgICBDaG9JbnRlcnZhbFNlcnZpY2UsXHJcbiAgICBJbnRlcnZhbFRpbWVyLFxyXG4gICAgRmlyZUltbWVkaWF0ZWx5LFxyXG59IGZyb20gJy4vbGliL3NlcnZpY2VzL2Noby1pbnRlcnZhbC5zZXJ2aWNlJztcclxuZXhwb3J0IHsgQ2hvTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Noby1sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9Nb2RhbFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tbW9kYWwuc2VydmljZSc7XHJcbmV4cG9ydCB7IENob05hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY2hvLW5hdmlnYXRpb24uc2VydmljZSc7XHJcbmV4cG9ydCB7IENob09iamVjdFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tb2JqZWN0LnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9SZXN0Q2xpZW50U2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Noby1yZXN0LWNsaWVudC5zZXJ2aWNlJztcclxuZXhwb3J0IHsgQ2hvUm91dGVQYXJhbVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tcm91dGUtcGFyYW0uc2VydmljZSc7XHJcbmV4cG9ydCB7IENob1Nlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Noby1zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XHJcblxyXG5leHBvcnQgeyBJbmRleGFibGUgfSBmcm9tICcuL2xpYi90eXBlcy9pbmRleGFibGUudHlwZSc7XHJcbmV4cG9ydCB7IE5hbWVWYWx1ZUl0ZW0gfSBmcm9tICcuL2xpYi90eXBlcy9uYW1lLXZhbHVlLWl0ZW0udHlwZSc7XHJcblxyXG4vLyBTZWFyY2ggdXRpbGl0aWVzXHJcbmV4cG9ydCB7IENob1NlYXJjaFNlcnZpY2UsIEZpbHRlclR5cGUgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jaG8tc2VhcmNoLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBDaG9GaWx0ZXJTeW5jRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9jaG8tZmlsdGVyLXN5bmMuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgQ2hvU2VhcmNoTW9kdWxlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9jaG8tc2VhcmNoLm1vZHVsZSc7Il19
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Directive, HostListener, EventEmitter, Output, Injectable, Inject, Pipe } from '@angular/core';
2
+ import { InjectionToken, Directive, HostListener, EventEmitter, Output, Injectable, Inject, Pipe, Input, NgModule } from '@angular/core';
3
3
  import { lastValueFrom, take, retry, BehaviorSubject, shareReplay } from 'rxjs';
4
4
  import * as i1 from '@angular/common/http';
5
5
  import { HttpHeaders, HttpParams } from '@angular/common/http';
@@ -1006,6 +1006,136 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1006
1006
  args: [{ providedIn: 'root' }]
1007
1007
  }] });
1008
1008
 
1009
+ class ChoSearchService {
1010
+ constructor(routeParamService, navigationService) {
1011
+ this.routeParamService = routeParamService;
1012
+ this.navigationService = navigationService;
1013
+ }
1014
+ readFromRoute(map, defaults, types) {
1015
+ const result = { ...(defaults || {}) };
1016
+ Object.keys(map).forEach(prop => {
1017
+ const qp = map[prop];
1018
+ const desiredType = types?.[prop] || this.inferType(defaults, prop);
1019
+ const value = this.getQueryParamValue(qp, desiredType);
1020
+ if (value !== undefined) {
1021
+ result[prop] = value;
1022
+ }
1023
+ });
1024
+ return result;
1025
+ }
1026
+ writeToRoute(filters, map) {
1027
+ const qp = {};
1028
+ Object.keys(map).forEach(prop => {
1029
+ const key = map[prop];
1030
+ const val = filters[prop];
1031
+ qp[key] = this.normalizeQueryValue(val);
1032
+ });
1033
+ this.navigationService.setQueryParams(qp);
1034
+ }
1035
+ resetWithDefaults(defaults) {
1036
+ return { ...(defaults || {}) };
1037
+ }
1038
+ getQueryParamValue(key, type) {
1039
+ switch (type) {
1040
+ case 'number': {
1041
+ return this.routeParamService.getQueryParameterNumber(key) ?? undefined;
1042
+ }
1043
+ case 'boolean': {
1044
+ return this.routeParamService.getQueryParameterBoolean(key) ?? undefined;
1045
+ }
1046
+ case 'string':
1047
+ default: {
1048
+ const v = this.routeParamService.getQueryParameterValue(key);
1049
+ return v !== undefined && v !== null ? v : undefined;
1050
+ }
1051
+ }
1052
+ }
1053
+ inferType(defaults, prop) {
1054
+ if (!defaults)
1055
+ return undefined;
1056
+ const v = defaults[prop];
1057
+ if (v === null || v === undefined)
1058
+ return undefined;
1059
+ if (typeof v === 'number')
1060
+ return 'number';
1061
+ if (typeof v === 'boolean')
1062
+ return 'boolean';
1063
+ return 'string';
1064
+ }
1065
+ normalizeQueryValue(val) {
1066
+ if (val === undefined || val === '')
1067
+ return null;
1068
+ if (typeof val === 'boolean')
1069
+ return val ? true : null;
1070
+ return val ?? null;
1071
+ }
1072
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchService, deps: [{ token: ChoRouteParamService }, { token: ChoNavigationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1073
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchService, providedIn: 'root' }); }
1074
+ }
1075
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchService, decorators: [{
1076
+ type: Injectable,
1077
+ args: [{ providedIn: 'root' }]
1078
+ }], ctorParameters: () => [{ type: ChoRouteParamService }, { type: ChoNavigationService }] });
1079
+
1080
+ class ChoFilterSyncDirective {
1081
+ constructor(searchService) {
1082
+ this.searchService = searchService;
1083
+ this.choFilterSyncChange = new EventEmitter();
1084
+ }
1085
+ ngOnInit() {
1086
+ if (!this.choFilterSync || !this.choFilterSyncMap)
1087
+ return;
1088
+ const initial = this.searchService.readFromRoute(this.choFilterSyncMap, this.choFilterSyncDefaults, this.choFilterSyncTypes);
1089
+ Object.assign(this.choFilterSync, initial);
1090
+ this.choFilterSyncChange.emit(this.choFilterSync);
1091
+ }
1092
+ ngOnChanges(changes) {
1093
+ if (changes['choFilterSyncApply'] && !changes['choFilterSyncApply'].firstChange) {
1094
+ this.apply();
1095
+ }
1096
+ }
1097
+ apply() {
1098
+ if (!this.choFilterSync || !this.choFilterSyncMap)
1099
+ return;
1100
+ this.searchService.writeToRoute(this.choFilterSync, this.choFilterSyncMap);
1101
+ }
1102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoFilterSyncDirective, deps: [{ token: ChoSearchService }], target: i0.ɵɵFactoryTarget.Directive }); }
1103
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ChoFilterSyncDirective, isStandalone: true, selector: "[choFilterSync]", inputs: { choFilterSync: "choFilterSync", choFilterSyncMap: "choFilterSyncMap", choFilterSyncDefaults: "choFilterSyncDefaults", choFilterSyncTypes: "choFilterSyncTypes", choFilterSyncApply: "choFilterSyncApply" }, outputs: { choFilterSyncChange: "choFilterSyncChange" }, exportAs: ["choFilterSync"], usesOnChanges: true, ngImport: i0 }); }
1104
+ }
1105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoFilterSyncDirective, decorators: [{
1106
+ type: Directive,
1107
+ args: [{
1108
+ selector: '[choFilterSync]',
1109
+ exportAs: 'choFilterSync',
1110
+ standalone: true,
1111
+ }]
1112
+ }], ctorParameters: () => [{ type: ChoSearchService }], propDecorators: { choFilterSync: [{
1113
+ type: Input
1114
+ }], choFilterSyncMap: [{
1115
+ type: Input
1116
+ }], choFilterSyncDefaults: [{
1117
+ type: Input
1118
+ }], choFilterSyncTypes: [{
1119
+ type: Input
1120
+ }], choFilterSyncApply: [{
1121
+ type: Input
1122
+ }], choFilterSyncChange: [{
1123
+ type: Output
1124
+ }] } });
1125
+
1126
+ class ChoSearchModule {
1127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1128
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule, imports: [ChoFilterSyncDirective], exports: [ChoFilterSyncDirective] }); }
1129
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule }); }
1130
+ }
1131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChoSearchModule, decorators: [{
1132
+ type: NgModule,
1133
+ args: [{
1134
+ imports: [ChoFilterSyncDirective],
1135
+ exports: [ChoFilterSyncDirective],
1136
+ }]
1137
+ }] });
1138
+
1009
1139
  /*
1010
1140
  * Public API Surface of ngx-cho-common
1011
1141
  */
@@ -1014,5 +1144,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1014
1144
  * Generated bundle index. Do not edit.
1015
1145
  */
1016
1146
 
1017
- export { CHO_COMMON_CONFIG, ChoActiveFilterPipe, ChoAutoFocusDirective, ChoBooleanPipe, ChoDatePipe, ChoDateService, ChoDownloadService, ChoErrorService, ChoFeatureGuard, ChoFeatureService, ChoFilterPipe, ChoFormFocusDirective, ChoFormatKeyPipe, ChoIntervalService, ChoKeyPressEnterDirective, ChoKeyPressEscapeDirective, ChoLocalStorageService, ChoLowerKebabCasePipe, ChoModalService, ChoNavigationService, ChoObjectService, ChoRestClientService, ChoRouteParamService, ChoSessionStorageService, ChoSumByPipe, ChoTextFilterPipe, ChoUnsavedChangesGuard, FireImmediately, IntervalTimer, Uuid };
1147
+ export { CHO_COMMON_CONFIG, ChoActiveFilterPipe, ChoAutoFocusDirective, ChoBooleanPipe, ChoDatePipe, ChoDateService, ChoDownloadService, ChoErrorService, ChoFeatureGuard, ChoFeatureService, ChoFilterPipe, ChoFilterSyncDirective, ChoFormFocusDirective, ChoFormatKeyPipe, ChoIntervalService, ChoKeyPressEnterDirective, ChoKeyPressEscapeDirective, ChoLocalStorageService, ChoLowerKebabCasePipe, ChoModalService, ChoNavigationService, ChoObjectService, ChoRestClientService, ChoRouteParamService, ChoSearchModule, ChoSearchService, ChoSessionStorageService, ChoSumByPipe, ChoTextFilterPipe, ChoUnsavedChangesGuard, FireImmediately, IntervalTimer, Uuid };
1018
1148
  //# sourceMappingURL=ngx-cho-common.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-cho-common.mjs","sources":["../../../projects/ngx-cho-common/src/ngx-cho-common.config.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-auto-focus.directive.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-form-focus.directive.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-key-press-enter.directive.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-key-press-escape.directive.ts","../../../projects/ngx-cho-common/src/lib/services/cho-rest-client.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-feature.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-navigation.service.ts","../../../projects/ngx-cho-common/src/lib/guards/cho-feature.guard.ts","../../../projects/ngx-cho-common/src/lib/guards/cho-unsaved-changes.guard.ts","../../../projects/ngx-cho-common/src/lib/models/uuid.model.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-active-filter.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-boolean.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-date.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-filter.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-format-key.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-lower-kebab-case.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-sum-by.pipe.ts","../../../projects/ngx-cho-common/src/lib/services/cho-object.service.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-text-filter.pipe.ts","../../../projects/ngx-cho-common/src/lib/services/cho-date.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-download.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-error.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-interval.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-local-storage.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-modal.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-route-param.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-session-storage.service.ts","../../../projects/ngx-cho-common/src/public-api.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport interface ChoCommonConfig {\r\n webAppUrl: string;\r\n webApiUrl: string;\r\n}\r\n\r\nexport const CHO_COMMON_CONFIG = new InjectionToken<ChoCommonConfig>('ChoCommonConfig');\r\n","// from https://stackblitz.com/edit/angular-inline-edit?file=src%2Fapp%2Fautofocus.directive.ts\r\nimport { Directive, ElementRef, OnInit } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choAutoFocus]',\r\n standalone: true,\r\n})\r\nexport class ChoAutoFocusDirective implements OnInit {\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n ngOnInit(): void {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n}\r\n","// from https://timdeschryver.dev/blog/auto-focus-a-form-control-with-an-angular-directive\r\nimport { Directive, ElementRef, HostListener, AfterViewInit } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choFormFocus]',\r\n standalone: true,\r\n})\r\nexport class ChoFormFocusDirective implements AfterViewInit {\r\n focusables = ['input', 'select', 'textarea'];\r\n\r\n constructor(private element: ElementRef) {}\r\n\r\n ngAfterViewInit() {\r\n const input = this.element.nativeElement.querySelector(this.focusables.join(','));\r\n\r\n if (input) {\r\n input.focus();\r\n return;\r\n }\r\n\r\n // focus on first available button if no other focusable element\r\n const button = this.element.nativeElement.querySelector('button');\r\n if (button) {\r\n button.focus();\r\n }\r\n }\r\n\r\n @HostListener('submit')\r\n submit() {\r\n const input = this.element.nativeElement.querySelector(\r\n this.focusables.map(x => `${x}.ng-invalid`).join(',')\r\n );\r\n if (input) {\r\n input.focus();\r\n }\r\n }\r\n}\r\n","import { Directive, HostListener, Output, EventEmitter } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choKeyPressEnter]',\r\n standalone: true,\r\n})\r\nexport class ChoKeyPressEnterDirective {\r\n @Output('appKeyPressEnter') emitter = new EventEmitter();\r\n\r\n @HostListener('window:keypress', ['$event'])\r\n keyEvent(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.emitter.emit();\r\n }\r\n }\r\n}\r\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choKeyPressEscape]',\r\n standalone: true,\r\n})\r\nexport class ChoKeyPressEscapeDirective {\r\n @Output('appKeyPressEscape') emitter = new EventEmitter();\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n keyEvent(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.emitter.emit();\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-types */\r\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { lastValueFrom, Observable, retry, RetryConfig, take } from 'rxjs';\r\n\r\ntype RequestParameters = {\r\n body?: unknown;\r\n queryParameters?: {};\r\n apiVersion?: {};\r\n headers?: {};\r\n cacheLifetimeSeconds?: number;\r\n retry?: RetryConfig;\r\n showSpinner?: {};\r\n};\r\n\r\ntype DeleteRequestParameters = Omit<RequestParameters, 'body' | 'cacheLifetimeSeconds'>;\r\ntype GetRequestParameters = Omit<RequestParameters, 'body'>;\r\n\r\n@Injectable({ providedIn: 'any' })\r\nexport class ChoRestClientService {\r\n private readonly defaultRetry = { count: 0, delay: 1000 };\r\n\r\n constructor(private readonly httpClient: HttpClient) {}\r\n\r\n /**\r\n * Sends a delete request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public delete(url: string, options?: DeleteRequestParameters): Promise<void> {\r\n return lastValueFrom(this.request('DELETE', url, options));\r\n }\r\n\r\n /**\r\n * Retrieves data from the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public get<T>(url: string, options?: GetRequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('GET', url, options));\r\n }\r\n\r\n /**\r\n * Sends a patch request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public patch<T>(url: string, options?: RequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('PATCH', url, options));\r\n }\r\n\r\n /**\r\n * Sends a post request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public post<T>(url: string, options?: RequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('POST', url, options));\r\n }\r\n\r\n /**\r\n * Sends a put request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public put<T>(url: string, options?: RequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('PUT', url, options));\r\n }\r\n\r\n /**\r\n * Sends a request to the specified REST service\r\n *\r\n * @param method DELETE, GET, POST, PUT, or PATCH\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public request<T>(\r\n method: 'DELETE',\r\n url: string,\r\n options?: DeleteRequestParameters\r\n ): Observable<T>;\r\n public request<T>(method: 'GET', url: string, options?: GetRequestParameters): Observable<T>;\r\n public request<T>(\r\n method: 'POST' | 'PUT' | 'PATCH',\r\n url: string,\r\n options?: RequestParameters\r\n ): Observable<T>;\r\n\r\n public request<T>(\r\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT',\r\n url: string,\r\n options?: RequestParameters\r\n ): Observable<T> {\r\n return this.httpClient\r\n .request<T>(method, url, {\r\n body: options?.body ? JSON.stringify(options.body) : undefined,\r\n headers: this.createRequestHeaders(options),\r\n params: this.createRequestParams(options?.queryParameters),\r\n })\r\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\r\n }\r\n\r\n /**\r\n *\r\n * @param url\r\n * @param options\r\n * @returns\r\n */\r\n public getResponse<T>(\r\n method: 'GET' | 'PATCH' | 'POST' | 'PUT',\r\n url: string,\r\n options?: RequestParameters\r\n ): Observable<HttpResponse<T>> {\r\n return this.httpClient\r\n .request<T>(method, url, {\r\n observe: 'response',\r\n body: options?.body ? JSON.stringify(options.body) : undefined,\r\n headers: this.createRequestHeaders(options),\r\n params: this.createRequestParams(options?.queryParameters),\r\n })\r\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\r\n }\r\n\r\n /**\r\n * Creates request headers based on the provided options.\r\n *\r\n * @param options\r\n * @returns\r\n */\r\n private createRequestHeaders(options?: RequestParameters): HttpHeaders {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const headers: any = Object.assign(\r\n {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n options?.headers\r\n );\r\n\r\n if (options?.apiVersion) {\r\n const versionString = `; version=${options.apiVersion}`;\r\n\r\n headers.Accept += versionString;\r\n headers['Content-Type'] += versionString;\r\n }\r\n\r\n if (options?.showSpinner === false) {\r\n headers['x-spinner'] = 'false';\r\n }\r\n\r\n if (options?.cacheLifetimeSeconds) {\r\n headers['x-cache-ttl'] = options?.cacheLifetimeSeconds;\r\n }\r\n\r\n return new HttpHeaders(headers);\r\n }\r\n\r\n /**\r\n * Converts one or more objects to an HttpParams object.\r\n *\r\n * @param sources The objects to convert\r\n * @returns\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private createRequestParams(...sources: any[]): HttpParams {\r\n let params = new HttpParams();\r\n\r\n for (const source of sources) {\r\n if (source == null) {\r\n continue;\r\n }\r\n\r\n for (const key of Object.keys(source)) {\r\n const value = source[key];\r\n\r\n if (value != null) {\r\n params = params.set(key, value.toString());\r\n }\r\n }\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ChoRestClientService } from './cho-rest-client.service';\r\nimport { CHO_COMMON_CONFIG, ChoCommonConfig } from '../../ngx-cho-common.config';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoFeatureService {\r\n public readonly featureStream = new BehaviorSubject<string[]>([]);\r\n\r\n private _enabledFeatures: string[] = [];\r\n private _isInitialized = false;\r\n private readonly routePrefix;\r\n\r\n constructor(\r\n @Inject(CHO_COMMON_CONFIG) private choCommonConfig: ChoCommonConfig,\r\n private readonly restClient: ChoRestClientService\r\n ) {\r\n this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;\r\n this.checkEnabledFeatures();\r\n }\r\n\r\n /**\r\n * Gets the enabled features.\r\n */\r\n get enabledFeatures(): string[] {\r\n return this._enabledFeatures;\r\n }\r\n\r\n /**\r\n * Sets the enabled features.\r\n */\r\n private set enabledFeatures(enabledFeatures: string[]) {\r\n this._enabledFeatures = enabledFeatures;\r\n this._isInitialized = true;\r\n\r\n this.featureStream.next(enabledFeatures);\r\n }\r\n\r\n /**\r\n * Gets whether features have been initialized\r\n */\r\n get isInitialized(): boolean {\r\n return this._isInitialized;\r\n }\r\n\r\n /**\r\n * Checks that the enabled features are set and returns the list.\r\n *\r\n * @param name\r\n * @returns\r\n */\r\n async checkEnabledFeatures(): Promise<string[]> {\r\n if (!this.isInitialized) {\r\n this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);\r\n }\r\n\r\n return this.enabledFeatures;\r\n }\r\n\r\n /**\r\n * Checks that the specified feature is enabled.\r\n *\r\n * @param name\r\n * @returns\r\n */\r\n checkFeatureIsEnabled(name: string): boolean {\r\n return this._enabledFeatures?.some(p => p === name);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { NavigationEnd, NavigationExtras, Params, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoNavigationService {\r\n private history: string[] = [];\r\n\r\n constructor(private router: Router, private location: Location) {\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationEnd) {\r\n this.history.push(event.urlAfterRedirects);\r\n }\r\n });\r\n }\r\n\r\n public go(commands: any[], extras?: NavigationExtras): Promise<boolean> {\r\n return this.router.navigate(commands, extras);\r\n }\r\n\r\n public goBack(): void {\r\n this.goBackOrDefault('/');\r\n }\r\n\r\n // based on https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page\r\n public goBackOrDefault(defaultUrl: string): void {\r\n if (this.history.length > 0) {\r\n this.history.pop();\r\n this.location.back();\r\n } else {\r\n this.router.navigateByUrl(defaultUrl);\r\n }\r\n }\r\n\r\n // based on https://medium.com/agilix/change-the-route-without-reloading-in-angular-7a4aa82a8d3e\r\n public replaceState(url: string, data: any = null): void {\r\n window.history.replaceState(data, '', url);\r\n }\r\n\r\n public setQueryParams(params: Params): void {\r\n this.router.navigate([], {\r\n queryParams: params,\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { ChoFeatureService } from '../services/cho-feature.service';\r\nimport { ChoNavigationService } from '../services/cho-navigation.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoFeatureGuard {\r\n constructor(\r\n private readonly featureService: ChoFeatureService,\r\n private readonly navigationService: ChoNavigationService,\r\n private readonly toastr: ToastrService\r\n ) {}\r\n\r\n public async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\r\n const routeFeature = route.data['feature'] as string;\r\n\r\n if (!routeFeature) {\r\n return true;\r\n }\r\n\r\n await this.featureService.checkEnabledFeatures();\r\n\r\n if (!this.featureService.checkFeatureIsEnabled(routeFeature)) {\r\n this.toastr.error(\"Oops! It doesn't look like this feature has been enabled.\");\r\n\r\n this.navigationService.goBack();\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { IDeactivatable } from '../models/deactivatable.interface';\r\n\r\n@Injectable()\r\nexport class ChoUnsavedChangesGuard {\r\n component: IDeactivatable | undefined;\r\n route: ActivatedRouteSnapshot | undefined;\r\n\r\n canDeactivate(component: IDeactivatable): Observable<boolean> | Promise<boolean> | boolean {\r\n return component.onDeactivate ? component.onDeactivate() : true;\r\n }\r\n}\r\n","export class Uuid {\r\n public static create(): string {\r\n const bytes = crypto.getRandomValues(new Uint8Array(16));\r\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\r\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\r\n\r\n let index = 0;\r\n\r\n return (\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++])\r\n );\r\n }\r\n\r\n private static toHex(byte: number): string {\r\n return (0x100 | byte).toString(16).substr(1);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choActiveFilter',\r\n standalone: true,\r\n})\r\nexport class ChoActiveFilterPipe implements PipeTransform {\r\n transform(value: any[], property?: string): any[] {\r\n if (value?.length === 0) {\r\n return value;\r\n }\r\n\r\n const filteredItems: any[] = [];\r\n\r\n for (const item of value) {\r\n if (item[property || 'isActive']) {\r\n filteredItems.push(item);\r\n }\r\n }\r\n\r\n return filteredItems;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choBoolean',\r\n standalone: true,\r\n})\r\nexport class ChoBooleanPipe implements PipeTransform {\r\n transform(value: unknown): unknown {\r\n return value ? 'Yes' : 'No';\r\n }\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choDate',\r\n standalone: true,\r\n})\r\nexport class ChoDatePipe implements PipeTransform {\r\n constructor(public datePipe: DatePipe) {}\r\n transform(\r\n value: Date | string | number,\r\n format?: string,\r\n timezone?: string,\r\n locale?: string\r\n ): string | null {\r\n switch (format ?? 'shortDate') {\r\n case 'short':\r\n format = 'MM/dd/yyyy hh:mm a';\r\n break;\r\n\r\n case 'shortDate':\r\n format = 'MM/dd/yyyy';\r\n break;\r\n }\r\n\r\n return this.datePipe.transform(value, format, timezone, locale);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choFilter',\r\n standalone: true,\r\n})\r\nexport class ChoFilterPipe implements PipeTransform {\r\n transform(items: any[], callback: (item: any) => boolean): any {\r\n if (!items || !callback) {\r\n return items;\r\n }\r\n return items.filter(item => callback(item));\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choFormatKey',\r\n standalone: true,\r\n})\r\nexport class ChoFormatKeyPipe implements PipeTransform {\r\n transform(key: string): string {\r\n let result = '';\r\n const tokenized = key.split(/(?=[A-Z])/);\r\n\r\n tokenized.forEach(item => {\r\n const uppercase = item.charAt(0).toUpperCase() + item.slice(1);\r\n result += uppercase + ' ';\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choLowerKebabCase',\r\n standalone: true,\r\n})\r\nexport class ChoLowerKebabCasePipe implements PipeTransform {\r\n transform(value: string): string {\r\n //take string and convert to lower kebab case\r\n return value\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/\\s+/g, '-')\r\n .toLowerCase();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choSumBy',\r\n standalone: true,\r\n})\r\nexport class ChoSumByPipe implements PipeTransform {\r\n transform(items: any[], attr: string): any {\r\n return items.reduce((a, b) => a + (b[attr] || 0), 0);\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoObjectService {\r\n public getNestedPropertyValue(obj: unknown, property: string): unknown {\r\n return property.split('.').reduce((acc, key) => acc && acc[key], obj);\r\n }\r\n\r\n public toValueObject(obj: object): object {\r\n const result = Object.getOwnPropertyNames(obj).reduce((p, key) => {\r\n if (obj[key]) {\r\n p[key] = obj[key];\r\n }\r\n return p;\r\n }, new Object());\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Convert Object to HttpParams\r\n * @param {object} obj\r\n * @returns {HttpParams}\r\n * see: https://stackoverflow.com/questions/45210406/angular-4-3-httpclient-set-params\r\n */\r\n public toHttpParams(obj: object): HttpParams {\r\n const temp = Object.getOwnPropertyNames(obj).reduce(\r\n (p, key) => (obj[key] == null || obj[key].length === 0 ? p : p.set(key, obj[key])),\r\n new HttpParams()\r\n );\r\n\r\n return temp;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ChoObjectService } from '../services/cho-object.service';\r\n\r\n@Pipe({\r\n name: 'choTextFilter',\r\n standalone: true,\r\n})\r\nexport class ChoTextFilterPipe implements PipeTransform {\r\n constructor(private readonly objectService: ChoObjectService) {}\r\n\r\n transform(value: any[], filterString: string | null | undefined, properties: string[]): any[] {\r\n if (value?.length === 0 || !filterString || !properties?.length) {\r\n return value;\r\n }\r\n\r\n filterString = filterString.toLowerCase();\r\n\r\n return value.filter(item => {\r\n for (const property of properties) {\r\n const propertyValue = property.includes('.')\r\n ? this.objectService.getNestedPropertyValue(item, property)\r\n : item[property];\r\n\r\n if (\r\n propertyValue &&\r\n propertyValue.toLowerCase().includes(filterString)\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport moment from 'moment';\r\n\r\nimport { NameValueItem } from '../types/name-value-item.type';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoDateService {\r\n public getMonthItems(startMonth = 1, endMonth = 12): NameValueItem<number>[] {\r\n const items: NameValueItem<number>[] = [];\r\n const d = moment().startOf('year');\r\n let i = startMonth;\r\n\r\n while (i <= endMonth) {\r\n d.set('month', i - 1);\r\n items.push({ value: i, name: d.format('MMMM') });\r\n i++;\r\n }\r\n\r\n return items;\r\n }\r\n\r\n public getYearItems(startYear?: number, endYear?: number): NameValueItem<number>[] {\r\n startYear = startYear || moment().year();\r\n endYear = endYear || moment().year();\r\n\r\n const items: NameValueItem<number>[] = [];\r\n let i = startYear;\r\n\r\n while (i <= endYear) {\r\n items.push({ value: i, name: i.toString() });\r\n i++;\r\n }\r\n\r\n return items;\r\n }\r\n\r\n public toDateString(input: moment.MomentInput): string {\r\n return moment(input).format('yyyy-MM-DD');\r\n }\r\n\r\n public toISOString(input: moment.MomentInput): string {\r\n return moment(input).toISOString();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { Observable, shareReplay } from 'rxjs';\r\nimport { saveAs } from 'file-saver';\r\n\r\n@Injectable({ providedIn: 'any' })\r\nexport class ChoDownloadService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n private octetStreamMime = 'application/octet-stream';\r\n\r\n public downloadFile(url: string, params?: HttpParams): Observable<HttpResponse<ArrayBuffer>> {\r\n const download$ = this.httpClient\r\n .get(url, {\r\n responseType: 'arraybuffer',\r\n observe: 'response',\r\n params: params,\r\n })\r\n .pipe(shareReplay());\r\n\r\n download$.subscribe(r => this.processDownload(r));\r\n\r\n return download$;\r\n }\r\n\r\n private processDownload(response: HttpResponse<ArrayBuffer>): void {\r\n const filename = this.getFileNameFromResponse(response);\r\n const contentType = response.headers.get('content-type') || this.octetStreamMime;\r\n\r\n if (response.body) {\r\n const blob = new Blob([response.body], { type: contentType });\r\n saveAs(blob, filename);\r\n }\r\n }\r\n\r\n private getFileNameFromResponse(response: HttpResponse<ArrayBuffer>): string {\r\n // attempt to get from response headers\r\n let fileName = response.headers.get('x-filename') || response.headers.get('filename');\r\n\r\n if (!fileName) {\r\n // attempt to get from content disposition\r\n const disposition = response.headers.get('content-disposition');\r\n\r\n if (disposition) {\r\n fileName = disposition.split(';')[1].split('=')[1].replace(/\"/g, '');\r\n }\r\n }\r\n\r\n return fileName || 'download.bin';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoErrorService {\r\n /**\r\n * Checks if error message contains a specific string\r\n *\r\n * @param error\r\n * @param searchString\r\n * @returns\r\n */\r\n public contains(error: unknown, searchString: string): boolean {\r\n const message = this.getErrorMessage(error);\r\n return message.includes(searchString);\r\n }\r\n\r\n /**\r\n * Gets the message from an error object or string\r\n *\r\n * @param error\r\n * @returns\r\n */\r\n public getErrorMessage(error: unknown): string {\r\n if (!error) {\r\n return 'Unknown error';\r\n }\r\n\r\n if (error instanceof Error) {\r\n return error.message;\r\n }\r\n\r\n if (typeof error === 'string' || error instanceof String) {\r\n return error as string;\r\n }\r\n\r\n console.log('Unknown error type:', error);\r\n\r\n return 'Unknown error';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport type IntervalOptions = {\r\n fireImmediately: FireImmediately;\r\n blurInterval?: number;\r\n hiddenInterval?: number;\r\n};\r\n\r\ntype Action = () => Promise<unknown>;\r\n\r\nexport enum FireImmediately {\r\n never,\r\n whenShown,\r\n whenFocused,\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoIntervalService {\r\n static readonly defaultOptions: IntervalOptions = { fireImmediately: FireImmediately.never };\r\n\r\n create(\r\n action: Action,\r\n interval: number,\r\n options: IntervalOptions = ChoIntervalService.defaultOptions\r\n ): IntervalTimer {\r\n const timer = new IntervalTimer(action, interval, options);\r\n timer.initialize();\r\n\r\n return timer;\r\n }\r\n}\r\n\r\nexport class IntervalTimer {\r\n $handle?: number;\r\n currentInterval = 0;\r\n isStopped = true;\r\n\r\n constructor(\r\n private readonly action: Action,\r\n private readonly interval: number,\r\n private readonly options: IntervalOptions\r\n ) {}\r\n\r\n initialize(): void {\r\n if (this.options.hiddenInterval != null) {\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.hidden) {\r\n this.onHidden();\r\n } else {\r\n this.onShown();\r\n }\r\n });\r\n }\r\n\r\n if (this.options.blurInterval != null) {\r\n window.addEventListener('blur', () => this.onBlur());\r\n window.addEventListener('focus', () => this.onFocus());\r\n }\r\n }\r\n\r\n start(): void {\r\n if (this.isStopped) {\r\n if (!document.hidden) {\r\n this.isStopped = false;\r\n this.onShown();\r\n } else {\r\n this.setInterval(this.interval);\r\n this.isStopped = false;\r\n }\r\n }\r\n }\r\n\r\n stop(): void {\r\n this.setInterval(0);\r\n this.isStopped = true;\r\n }\r\n\r\n private async callActionAndScheduleNext(nextInterval: number): Promise<void> {\r\n this.setInterval(0); // pause while the action runs\r\n await this.action();\r\n this.setInterval(nextInterval);\r\n }\r\n\r\n private onBlur(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n this.setInterval(this.options?.blurInterval);\r\n }\r\n\r\n private onFocus(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n if (this.options?.fireImmediately === FireImmediately.whenFocused) {\r\n this.callActionAndScheduleNext(this.interval);\r\n return;\r\n }\r\n\r\n this.setInterval(this.interval);\r\n }\r\n\r\n private onHidden(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n this.setInterval(this.options?.hiddenInterval);\r\n }\r\n\r\n private onShown(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n if (this.options.fireImmediately === FireImmediately.whenShown) {\r\n this.callActionAndScheduleNext(this.interval);\r\n return;\r\n }\r\n\r\n this.setInterval(this.interval);\r\n }\r\n\r\n private setInterval(interval?: number): void {\r\n if (this.$handle) {\r\n if (interval === this.currentInterval) {\r\n return;\r\n }\r\n\r\n window.clearTimeout(this.$handle);\r\n this.$handle = undefined;\r\n }\r\n\r\n if (!interval) {\r\n return;\r\n }\r\n\r\n this.$handle = window.setTimeout(() => this.callActionAndScheduleNext(interval), interval);\r\n this.currentInterval = interval;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoLocalStorageService {\r\n checkIfKeyExists(key: string): boolean {\r\n return globalThis.localStorage.getItem(key) !== null;\r\n }\r\n\r\n getItem<T>(key: string): T | undefined {\r\n const valueString = globalThis.localStorage.getItem(key);\r\n\r\n if (valueString === null) {\r\n return undefined;\r\n }\r\n\r\n const value = JSON.parse(valueString);\r\n return value;\r\n }\r\n\r\n setItem<T>(key: string, value: T): void {\r\n const valueString = JSON.stringify(value);\r\n globalThis.localStorage.setItem(key, valueString);\r\n }\r\n\r\n removeItem(key: string): void {\r\n globalThis.localStorage.removeItem(key);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgbModal, NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoModalService {\r\n constructor(private readonly ngbModal: NgbModal) {}\r\n\r\n public async showModal<T>(\r\n component: unknown,\r\n componentParameters?: unknown,\r\n modalOptions: NgbModalOptions = { backdrop: 'static' }\r\n ): Promise<{ result: T; componentInstance: unknown }> {\r\n const modal = this.ngbModal.open(component, modalOptions);\r\n const componentInstance = modal.componentInstance;\r\n\r\n Object.assign(componentInstance, componentParameters);\r\n\r\n let result: T;\r\n\r\n try {\r\n result = await modal.result;\r\n } catch (error) {\r\n result = null as unknown as T;\r\n if (error === undefined) {\r\n throw 'modal dismiss';\r\n }\r\n throw error;\r\n }\r\n\r\n return { result, componentInstance };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Params } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoRouteParamService {\r\n constructor(private readonly route: ActivatedRoute) {}\r\n\r\n public getParameterBoolean(params: Params, paramKey: string): boolean | null {\r\n const value = this.getParameterValue(params, paramKey);\r\n\r\n if (value) {\r\n return !!value;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getParameterNumber(params: Params, paramKey: string): number | null {\r\n const value = this.getParameterValue(params, paramKey);\r\n\r\n if (value) {\r\n return parseInt(value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getParameterValue(params: Params, paramKey: string): string | null {\r\n const value = params[paramKey];\r\n return value || null;\r\n }\r\n\r\n public getQueryParameterBoolean(paramKey: string): boolean | null {\r\n return this.getParameterBoolean(this.route.snapshot.queryParams, paramKey);\r\n }\r\n\r\n public getQueryParameterNumber(paramKey: string): number | null {\r\n return this.getParameterNumber(this.route.snapshot.queryParams, paramKey);\r\n }\r\n\r\n public getQueryParameterValue(paramKey: string): string | null {\r\n return this.getParameterValue(this.route.snapshot.queryParams, paramKey);\r\n }\r\n\r\n public getRouteParameterBoolean(route: ActivatedRoute, paramKey: string): boolean | null {\r\n return this.getParameterBoolean(route.snapshot.params, paramKey);\r\n }\r\n\r\n public getRouteParameterNumber(route: ActivatedRoute, paramKey: string): number | null {\r\n return this.getParameterNumber(route.snapshot.params, paramKey);\r\n }\r\n\r\n public getRouteParameterValue(route: ActivatedRoute, paramKey: string): string | null {\r\n return this.getParameterValue(route.snapshot.params, paramKey);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoSessionStorageService {\r\n checkIfKeyExists(key: string): boolean {\r\n return globalThis.sessionStorage.getItem(key) !== null;\r\n }\r\n\r\n getItem<T>(key: string): T | undefined {\r\n const valueString = globalThis.sessionStorage.getItem(key);\r\n\r\n if (valueString === null) {\r\n return undefined;\r\n }\r\n\r\n const value = JSON.parse(valueString);\r\n return value;\r\n }\r\n\r\n setItem<T>(key: string, value: T): void {\r\n const valueString = JSON.stringify(value);\r\n globalThis.sessionStorage.setItem(key, valueString);\r\n }\r\n\r\n removeItem(key: string): void {\r\n globalThis.sessionStorage.removeItem(key);\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-cho-common\r\n */\r\nexport { CHO_COMMON_CONFIG, ChoCommonConfig } from './ngx-cho-common.config';\r\n\r\nexport { ChoAutoFocusDirective } from './lib/directives/cho-auto-focus.directive';\r\nexport { ChoFormFocusDirective } from './lib/directives/cho-form-focus.directive';\r\nexport { ChoKeyPressEnterDirective } from './lib/directives/cho-key-press-enter.directive';\r\nexport { ChoKeyPressEscapeDirective } from './lib/directives/cho-key-press-escape.directive';\r\n\r\nexport { ChoFeatureGuard } from './lib/guards/cho-feature.guard';\r\nexport { ChoUnsavedChangesGuard } from './lib/guards/cho-unsaved-changes.guard';\r\n\r\nexport { IDeactivatable } from './lib/models/deactivatable.interface';\r\n\r\nexport { IPhoneInfo } from './lib/models/phone-info.model';\r\nexport { INoteInfo } from './lib/models/note-info.model';\r\nexport { IEmailInfo } from './lib/models/email-info.model';\r\nexport { IContactInfo } from './lib/models/contact-info.model';\r\nexport { BasicSearchFilter } from './lib/models/basic-search-filter.model';\r\nexport { AppFile } from './lib/models/app-file.model';\r\nexport { IAddress } from './lib/models/address.model';\r\nexport { INote } from './lib/models/note.model';\r\nexport { Uuid } from './lib/models/uuid.model';\r\n\r\nexport { ChoActiveFilterPipe } from './lib/pipes/cho-active-filter.pipe';\r\nexport { ChoBooleanPipe } from './lib/pipes/cho-boolean.pipe';\r\nexport { ChoDatePipe } from './lib/pipes/cho-date.pipe';\r\nexport { ChoFilterPipe } from './lib/pipes/cho-filter.pipe';\r\nexport { ChoFormatKeyPipe } from './lib/pipes/cho-format-key.pipe';\r\nexport { ChoLowerKebabCasePipe } from './lib/pipes/cho-lower-kebab-case.pipe';\r\nexport { ChoSumByPipe } from './lib/pipes/cho-sum-by.pipe';\r\nexport { ChoTextFilterPipe } from './lib/pipes/cho-text-filter.pipe';\r\n\r\nexport { ChoDateService } from './lib/services/cho-date.service';\r\nexport { ChoDownloadService } from './lib/services/cho-download.service';\r\nexport { ChoErrorService } from './lib/services/cho-error.service';\r\nexport { ChoFeatureService } from './lib/services/cho-feature.service';\r\nexport {\r\n ChoIntervalService,\r\n IntervalTimer,\r\n FireImmediately,\r\n} from './lib/services/cho-interval.service';\r\nexport { ChoLocalStorageService } from './lib/services/cho-local-storage.service';\r\nexport { ChoModalService } from './lib/services/cho-modal.service';\r\nexport { ChoNavigationService } from './lib/services/cho-navigation.service';\r\nexport { ChoObjectService } from './lib/services/cho-object.service';\r\nexport { ChoRestClientService } from './lib/services/cho-rest-client.service';\r\nexport { ChoRouteParamService } from './lib/services/cho-route-param.service';\r\nexport { ChoSessionStorageService } from './lib/services/cho-session-storage.service';\r\n\r\nexport { Indexable } from './lib/types/indexable.type';\r\nexport { NameValueItem } from './lib/types/name-value-item.type';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ChoRestClientService","i1","i1.ChoFeatureService","i2.ChoNavigationService","i1.ChoObjectService"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-cho-common.mjs","sources":["../../../projects/ngx-cho-common/src/ngx-cho-common.config.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-auto-focus.directive.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-form-focus.directive.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-key-press-enter.directive.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-key-press-escape.directive.ts","../../../projects/ngx-cho-common/src/lib/services/cho-rest-client.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-feature.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-navigation.service.ts","../../../projects/ngx-cho-common/src/lib/guards/cho-feature.guard.ts","../../../projects/ngx-cho-common/src/lib/guards/cho-unsaved-changes.guard.ts","../../../projects/ngx-cho-common/src/lib/models/uuid.model.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-active-filter.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-boolean.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-date.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-filter.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-format-key.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-lower-kebab-case.pipe.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-sum-by.pipe.ts","../../../projects/ngx-cho-common/src/lib/services/cho-object.service.ts","../../../projects/ngx-cho-common/src/lib/pipes/cho-text-filter.pipe.ts","../../../projects/ngx-cho-common/src/lib/services/cho-date.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-download.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-error.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-interval.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-local-storage.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-modal.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-route-param.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-session-storage.service.ts","../../../projects/ngx-cho-common/src/lib/services/cho-search.service.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-filter-sync.directive.ts","../../../projects/ngx-cho-common/src/lib/directives/cho-search.module.ts","../../../projects/ngx-cho-common/src/public-api.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport interface ChoCommonConfig {\r\n webAppUrl: string;\r\n webApiUrl: string;\r\n}\r\n\r\nexport const CHO_COMMON_CONFIG = new InjectionToken<ChoCommonConfig>('ChoCommonConfig');\r\n","// from https://stackblitz.com/edit/angular-inline-edit?file=src%2Fapp%2Fautofocus.directive.ts\r\nimport { Directive, ElementRef, OnInit } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choAutoFocus]',\r\n standalone: true,\r\n})\r\nexport class ChoAutoFocusDirective implements OnInit {\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n ngOnInit(): void {\r\n this.elementRef.nativeElement.focus();\r\n }\r\n}\r\n","// from https://timdeschryver.dev/blog/auto-focus-a-form-control-with-an-angular-directive\r\nimport { Directive, ElementRef, HostListener, AfterViewInit } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choFormFocus]',\r\n standalone: true,\r\n})\r\nexport class ChoFormFocusDirective implements AfterViewInit {\r\n focusables = ['input', 'select', 'textarea'];\r\n\r\n constructor(private element: ElementRef) {}\r\n\r\n ngAfterViewInit() {\r\n const input = this.element.nativeElement.querySelector(this.focusables.join(','));\r\n\r\n if (input) {\r\n input.focus();\r\n return;\r\n }\r\n\r\n // focus on first available button if no other focusable element\r\n const button = this.element.nativeElement.querySelector('button');\r\n if (button) {\r\n button.focus();\r\n }\r\n }\r\n\r\n @HostListener('submit')\r\n submit() {\r\n const input = this.element.nativeElement.querySelector(\r\n this.focusables.map(x => `${x}.ng-invalid`).join(',')\r\n );\r\n if (input) {\r\n input.focus();\r\n }\r\n }\r\n}\r\n","import { Directive, HostListener, Output, EventEmitter } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choKeyPressEnter]',\r\n standalone: true,\r\n})\r\nexport class ChoKeyPressEnterDirective {\r\n @Output('appKeyPressEnter') emitter = new EventEmitter();\r\n\r\n @HostListener('window:keypress', ['$event'])\r\n keyEvent(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.emitter.emit();\r\n }\r\n }\r\n}\r\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[choKeyPressEscape]',\r\n standalone: true,\r\n})\r\nexport class ChoKeyPressEscapeDirective {\r\n @Output('appKeyPressEscape') emitter = new EventEmitter();\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n keyEvent(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.emitter.emit();\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-types */\r\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { lastValueFrom, Observable, retry, RetryConfig, take } from 'rxjs';\r\n\r\ntype RequestParameters = {\r\n body?: unknown;\r\n queryParameters?: {};\r\n apiVersion?: {};\r\n headers?: {};\r\n cacheLifetimeSeconds?: number;\r\n retry?: RetryConfig;\r\n showSpinner?: {};\r\n};\r\n\r\ntype DeleteRequestParameters = Omit<RequestParameters, 'body' | 'cacheLifetimeSeconds'>;\r\ntype GetRequestParameters = Omit<RequestParameters, 'body'>;\r\n\r\n@Injectable({ providedIn: 'any' })\r\nexport class ChoRestClientService {\r\n private readonly defaultRetry = { count: 0, delay: 1000 };\r\n\r\n constructor(private readonly httpClient: HttpClient) {}\r\n\r\n /**\r\n * Sends a delete request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public delete(url: string, options?: DeleteRequestParameters): Promise<void> {\r\n return lastValueFrom(this.request('DELETE', url, options));\r\n }\r\n\r\n /**\r\n * Retrieves data from the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public get<T>(url: string, options?: GetRequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('GET', url, options));\r\n }\r\n\r\n /**\r\n * Sends a patch request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public patch<T>(url: string, options?: RequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('PATCH', url, options));\r\n }\r\n\r\n /**\r\n * Sends a post request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public post<T>(url: string, options?: RequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('POST', url, options));\r\n }\r\n\r\n /**\r\n * Sends a put request to the specified REST service\r\n *\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public put<T>(url: string, options?: RequestParameters): Promise<T> {\r\n return lastValueFrom(this.request('PUT', url, options));\r\n }\r\n\r\n /**\r\n * Sends a request to the specified REST service\r\n *\r\n * @param method DELETE, GET, POST, PUT, or PATCH\r\n * @param url The service endpoint\r\n * @param options Additional options\r\n */\r\n public request<T>(\r\n method: 'DELETE',\r\n url: string,\r\n options?: DeleteRequestParameters\r\n ): Observable<T>;\r\n public request<T>(method: 'GET', url: string, options?: GetRequestParameters): Observable<T>;\r\n public request<T>(\r\n method: 'POST' | 'PUT' | 'PATCH',\r\n url: string,\r\n options?: RequestParameters\r\n ): Observable<T>;\r\n\r\n public request<T>(\r\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT',\r\n url: string,\r\n options?: RequestParameters\r\n ): Observable<T> {\r\n return this.httpClient\r\n .request<T>(method, url, {\r\n body: options?.body ? JSON.stringify(options.body) : undefined,\r\n headers: this.createRequestHeaders(options),\r\n params: this.createRequestParams(options?.queryParameters),\r\n })\r\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\r\n }\r\n\r\n /**\r\n *\r\n * @param url\r\n * @param options\r\n * @returns\r\n */\r\n public getResponse<T>(\r\n method: 'GET' | 'PATCH' | 'POST' | 'PUT',\r\n url: string,\r\n options?: RequestParameters\r\n ): Observable<HttpResponse<T>> {\r\n return this.httpClient\r\n .request<T>(method, url, {\r\n observe: 'response',\r\n body: options?.body ? JSON.stringify(options.body) : undefined,\r\n headers: this.createRequestHeaders(options),\r\n params: this.createRequestParams(options?.queryParameters),\r\n })\r\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\r\n }\r\n\r\n /**\r\n * Creates request headers based on the provided options.\r\n *\r\n * @param options\r\n * @returns\r\n */\r\n private createRequestHeaders(options?: RequestParameters): HttpHeaders {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const headers: any = Object.assign(\r\n {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n options?.headers\r\n );\r\n\r\n if (options?.apiVersion) {\r\n const versionString = `; version=${options.apiVersion}`;\r\n\r\n headers.Accept += versionString;\r\n headers['Content-Type'] += versionString;\r\n }\r\n\r\n if (options?.showSpinner === false) {\r\n headers['x-spinner'] = 'false';\r\n }\r\n\r\n if (options?.cacheLifetimeSeconds) {\r\n headers['x-cache-ttl'] = options?.cacheLifetimeSeconds;\r\n }\r\n\r\n return new HttpHeaders(headers);\r\n }\r\n\r\n /**\r\n * Converts one or more objects to an HttpParams object.\r\n *\r\n * @param sources The objects to convert\r\n * @returns\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private createRequestParams(...sources: any[]): HttpParams {\r\n let params = new HttpParams();\r\n\r\n for (const source of sources) {\r\n if (source == null) {\r\n continue;\r\n }\r\n\r\n for (const key of Object.keys(source)) {\r\n const value = source[key];\r\n\r\n if (value != null) {\r\n params = params.set(key, value.toString());\r\n }\r\n }\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ChoRestClientService } from './cho-rest-client.service';\r\nimport { CHO_COMMON_CONFIG, ChoCommonConfig } from '../../ngx-cho-common.config';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoFeatureService {\r\n public readonly featureStream = new BehaviorSubject<string[]>([]);\r\n\r\n private _enabledFeatures: string[] = [];\r\n private _isInitialized = false;\r\n private readonly routePrefix;\r\n\r\n constructor(\r\n @Inject(CHO_COMMON_CONFIG) private choCommonConfig: ChoCommonConfig,\r\n private readonly restClient: ChoRestClientService\r\n ) {\r\n this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;\r\n this.checkEnabledFeatures();\r\n }\r\n\r\n /**\r\n * Gets the enabled features.\r\n */\r\n get enabledFeatures(): string[] {\r\n return this._enabledFeatures;\r\n }\r\n\r\n /**\r\n * Sets the enabled features.\r\n */\r\n private set enabledFeatures(enabledFeatures: string[]) {\r\n this._enabledFeatures = enabledFeatures;\r\n this._isInitialized = true;\r\n\r\n this.featureStream.next(enabledFeatures);\r\n }\r\n\r\n /**\r\n * Gets whether features have been initialized\r\n */\r\n get isInitialized(): boolean {\r\n return this._isInitialized;\r\n }\r\n\r\n /**\r\n * Checks that the enabled features are set and returns the list.\r\n *\r\n * @param name\r\n * @returns\r\n */\r\n async checkEnabledFeatures(): Promise<string[]> {\r\n if (!this.isInitialized) {\r\n this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);\r\n }\r\n\r\n return this.enabledFeatures;\r\n }\r\n\r\n /**\r\n * Checks that the specified feature is enabled.\r\n *\r\n * @param name\r\n * @returns\r\n */\r\n checkFeatureIsEnabled(name: string): boolean {\r\n return this._enabledFeatures?.some(p => p === name);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { NavigationEnd, NavigationExtras, Params, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoNavigationService {\r\n private history: string[] = [];\r\n\r\n constructor(private router: Router, private location: Location) {\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationEnd) {\r\n this.history.push(event.urlAfterRedirects);\r\n }\r\n });\r\n }\r\n\r\n public go(commands: any[], extras?: NavigationExtras): Promise<boolean> {\r\n return this.router.navigate(commands, extras);\r\n }\r\n\r\n public goBack(): void {\r\n this.goBackOrDefault('/');\r\n }\r\n\r\n // based on https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page\r\n public goBackOrDefault(defaultUrl: string): void {\r\n if (this.history.length > 0) {\r\n this.history.pop();\r\n this.location.back();\r\n } else {\r\n this.router.navigateByUrl(defaultUrl);\r\n }\r\n }\r\n\r\n // based on https://medium.com/agilix/change-the-route-without-reloading-in-angular-7a4aa82a8d3e\r\n public replaceState(url: string, data: any = null): void {\r\n window.history.replaceState(data, '', url);\r\n }\r\n\r\n public setQueryParams(params: Params): void {\r\n this.router.navigate([], {\r\n queryParams: params,\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { ChoFeatureService } from '../services/cho-feature.service';\r\nimport { ChoNavigationService } from '../services/cho-navigation.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoFeatureGuard {\r\n constructor(\r\n private readonly featureService: ChoFeatureService,\r\n private readonly navigationService: ChoNavigationService,\r\n private readonly toastr: ToastrService\r\n ) {}\r\n\r\n public async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\r\n const routeFeature = route.data['feature'] as string;\r\n\r\n if (!routeFeature) {\r\n return true;\r\n }\r\n\r\n await this.featureService.checkEnabledFeatures();\r\n\r\n if (!this.featureService.checkFeatureIsEnabled(routeFeature)) {\r\n this.toastr.error(\"Oops! It doesn't look like this feature has been enabled.\");\r\n\r\n this.navigationService.goBack();\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { IDeactivatable } from '../models/deactivatable.interface';\r\n\r\n@Injectable()\r\nexport class ChoUnsavedChangesGuard {\r\n component: IDeactivatable | undefined;\r\n route: ActivatedRouteSnapshot | undefined;\r\n\r\n canDeactivate(component: IDeactivatable): Observable<boolean> | Promise<boolean> | boolean {\r\n return component.onDeactivate ? component.onDeactivate() : true;\r\n }\r\n}\r\n","export class Uuid {\r\n public static create(): string {\r\n const bytes = crypto.getRandomValues(new Uint8Array(16));\r\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\r\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\r\n\r\n let index = 0;\r\n\r\n return (\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n '-' +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++]) +\r\n Uuid.toHex(bytes[index++])\r\n );\r\n }\r\n\r\n private static toHex(byte: number): string {\r\n return (0x100 | byte).toString(16).substr(1);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choActiveFilter',\r\n standalone: true,\r\n})\r\nexport class ChoActiveFilterPipe implements PipeTransform {\r\n transform(value: any[], property?: string): any[] {\r\n if (value?.length === 0) {\r\n return value;\r\n }\r\n\r\n const filteredItems: any[] = [];\r\n\r\n for (const item of value) {\r\n if (item[property || 'isActive']) {\r\n filteredItems.push(item);\r\n }\r\n }\r\n\r\n return filteredItems;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choBoolean',\r\n standalone: true,\r\n})\r\nexport class ChoBooleanPipe implements PipeTransform {\r\n transform(value: unknown): unknown {\r\n return value ? 'Yes' : 'No';\r\n }\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choDate',\r\n standalone: true,\r\n})\r\nexport class ChoDatePipe implements PipeTransform {\r\n constructor(public datePipe: DatePipe) {}\r\n transform(\r\n value: Date | string | number,\r\n format?: string,\r\n timezone?: string,\r\n locale?: string\r\n ): string | null {\r\n switch (format ?? 'shortDate') {\r\n case 'short':\r\n format = 'MM/dd/yyyy hh:mm a';\r\n break;\r\n\r\n case 'shortDate':\r\n format = 'MM/dd/yyyy';\r\n break;\r\n }\r\n\r\n return this.datePipe.transform(value, format, timezone, locale);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choFilter',\r\n standalone: true,\r\n})\r\nexport class ChoFilterPipe implements PipeTransform {\r\n transform(items: any[], callback: (item: any) => boolean): any {\r\n if (!items || !callback) {\r\n return items;\r\n }\r\n return items.filter(item => callback(item));\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choFormatKey',\r\n standalone: true,\r\n})\r\nexport class ChoFormatKeyPipe implements PipeTransform {\r\n transform(key: string): string {\r\n let result = '';\r\n const tokenized = key.split(/(?=[A-Z])/);\r\n\r\n tokenized.forEach(item => {\r\n const uppercase = item.charAt(0).toUpperCase() + item.slice(1);\r\n result += uppercase + ' ';\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choLowerKebabCase',\r\n standalone: true,\r\n})\r\nexport class ChoLowerKebabCasePipe implements PipeTransform {\r\n transform(value: string): string {\r\n //take string and convert to lower kebab case\r\n return value\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/\\s+/g, '-')\r\n .toLowerCase();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'choSumBy',\r\n standalone: true,\r\n})\r\nexport class ChoSumByPipe implements PipeTransform {\r\n transform(items: any[], attr: string): any {\r\n return items.reduce((a, b) => a + (b[attr] || 0), 0);\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoObjectService {\r\n public getNestedPropertyValue(obj: unknown, property: string): unknown {\r\n return property.split('.').reduce((acc, key) => acc && acc[key], obj);\r\n }\r\n\r\n public toValueObject(obj: object): object {\r\n const result = Object.getOwnPropertyNames(obj).reduce((p, key) => {\r\n if (obj[key]) {\r\n p[key] = obj[key];\r\n }\r\n return p;\r\n }, new Object());\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Convert Object to HttpParams\r\n * @param {object} obj\r\n * @returns {HttpParams}\r\n * see: https://stackoverflow.com/questions/45210406/angular-4-3-httpclient-set-params\r\n */\r\n public toHttpParams(obj: object): HttpParams {\r\n const temp = Object.getOwnPropertyNames(obj).reduce(\r\n (p, key) => (obj[key] == null || obj[key].length === 0 ? p : p.set(key, obj[key])),\r\n new HttpParams()\r\n );\r\n\r\n return temp;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ChoObjectService } from '../services/cho-object.service';\r\n\r\n@Pipe({\r\n name: 'choTextFilter',\r\n standalone: true,\r\n})\r\nexport class ChoTextFilterPipe implements PipeTransform {\r\n constructor(private readonly objectService: ChoObjectService) {}\r\n\r\n transform(value: any[], filterString: string | null | undefined, properties: string[]): any[] {\r\n if (value?.length === 0 || !filterString || !properties?.length) {\r\n return value;\r\n }\r\n\r\n filterString = filterString.toLowerCase();\r\n\r\n return value.filter(item => {\r\n for (const property of properties) {\r\n const propertyValue = property.includes('.')\r\n ? this.objectService.getNestedPropertyValue(item, property)\r\n : item[property];\r\n\r\n if (\r\n propertyValue &&\r\n propertyValue.toLowerCase().includes(filterString)\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport moment from 'moment';\r\n\r\nimport { NameValueItem } from '../types/name-value-item.type';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoDateService {\r\n public getMonthItems(startMonth = 1, endMonth = 12): NameValueItem<number>[] {\r\n const items: NameValueItem<number>[] = [];\r\n const d = moment().startOf('year');\r\n let i = startMonth;\r\n\r\n while (i <= endMonth) {\r\n d.set('month', i - 1);\r\n items.push({ value: i, name: d.format('MMMM') });\r\n i++;\r\n }\r\n\r\n return items;\r\n }\r\n\r\n public getYearItems(startYear?: number, endYear?: number): NameValueItem<number>[] {\r\n startYear = startYear || moment().year();\r\n endYear = endYear || moment().year();\r\n\r\n const items: NameValueItem<number>[] = [];\r\n let i = startYear;\r\n\r\n while (i <= endYear) {\r\n items.push({ value: i, name: i.toString() });\r\n i++;\r\n }\r\n\r\n return items;\r\n }\r\n\r\n public toDateString(input: moment.MomentInput): string {\r\n return moment(input).format('yyyy-MM-DD');\r\n }\r\n\r\n public toISOString(input: moment.MomentInput): string {\r\n return moment(input).toISOString();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { Observable, shareReplay } from 'rxjs';\r\nimport { saveAs } from 'file-saver';\r\n\r\n@Injectable({ providedIn: 'any' })\r\nexport class ChoDownloadService {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n private octetStreamMime = 'application/octet-stream';\r\n\r\n public downloadFile(url: string, params?: HttpParams): Observable<HttpResponse<ArrayBuffer>> {\r\n const download$ = this.httpClient\r\n .get(url, {\r\n responseType: 'arraybuffer',\r\n observe: 'response',\r\n params: params,\r\n })\r\n .pipe(shareReplay());\r\n\r\n download$.subscribe(r => this.processDownload(r));\r\n\r\n return download$;\r\n }\r\n\r\n private processDownload(response: HttpResponse<ArrayBuffer>): void {\r\n const filename = this.getFileNameFromResponse(response);\r\n const contentType = response.headers.get('content-type') || this.octetStreamMime;\r\n\r\n if (response.body) {\r\n const blob = new Blob([response.body], { type: contentType });\r\n saveAs(blob, filename);\r\n }\r\n }\r\n\r\n private getFileNameFromResponse(response: HttpResponse<ArrayBuffer>): string {\r\n // attempt to get from response headers\r\n let fileName = response.headers.get('x-filename') || response.headers.get('filename');\r\n\r\n if (!fileName) {\r\n // attempt to get from content disposition\r\n const disposition = response.headers.get('content-disposition');\r\n\r\n if (disposition) {\r\n fileName = disposition.split(';')[1].split('=')[1].replace(/\"/g, '');\r\n }\r\n }\r\n\r\n return fileName || 'download.bin';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoErrorService {\r\n /**\r\n * Checks if error message contains a specific string\r\n *\r\n * @param error\r\n * @param searchString\r\n * @returns\r\n */\r\n public contains(error: unknown, searchString: string): boolean {\r\n const message = this.getErrorMessage(error);\r\n return message.includes(searchString);\r\n }\r\n\r\n /**\r\n * Gets the message from an error object or string\r\n *\r\n * @param error\r\n * @returns\r\n */\r\n public getErrorMessage(error: unknown): string {\r\n if (!error) {\r\n return 'Unknown error';\r\n }\r\n\r\n if (error instanceof Error) {\r\n return error.message;\r\n }\r\n\r\n if (typeof error === 'string' || error instanceof String) {\r\n return error as string;\r\n }\r\n\r\n console.log('Unknown error type:', error);\r\n\r\n return 'Unknown error';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport type IntervalOptions = {\r\n fireImmediately: FireImmediately;\r\n blurInterval?: number;\r\n hiddenInterval?: number;\r\n};\r\n\r\ntype Action = () => Promise<unknown>;\r\n\r\nexport enum FireImmediately {\r\n never,\r\n whenShown,\r\n whenFocused,\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoIntervalService {\r\n static readonly defaultOptions: IntervalOptions = { fireImmediately: FireImmediately.never };\r\n\r\n create(\r\n action: Action,\r\n interval: number,\r\n options: IntervalOptions = ChoIntervalService.defaultOptions\r\n ): IntervalTimer {\r\n const timer = new IntervalTimer(action, interval, options);\r\n timer.initialize();\r\n\r\n return timer;\r\n }\r\n}\r\n\r\nexport class IntervalTimer {\r\n $handle?: number;\r\n currentInterval = 0;\r\n isStopped = true;\r\n\r\n constructor(\r\n private readonly action: Action,\r\n private readonly interval: number,\r\n private readonly options: IntervalOptions\r\n ) {}\r\n\r\n initialize(): void {\r\n if (this.options.hiddenInterval != null) {\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.hidden) {\r\n this.onHidden();\r\n } else {\r\n this.onShown();\r\n }\r\n });\r\n }\r\n\r\n if (this.options.blurInterval != null) {\r\n window.addEventListener('blur', () => this.onBlur());\r\n window.addEventListener('focus', () => this.onFocus());\r\n }\r\n }\r\n\r\n start(): void {\r\n if (this.isStopped) {\r\n if (!document.hidden) {\r\n this.isStopped = false;\r\n this.onShown();\r\n } else {\r\n this.setInterval(this.interval);\r\n this.isStopped = false;\r\n }\r\n }\r\n }\r\n\r\n stop(): void {\r\n this.setInterval(0);\r\n this.isStopped = true;\r\n }\r\n\r\n private async callActionAndScheduleNext(nextInterval: number): Promise<void> {\r\n this.setInterval(0); // pause while the action runs\r\n await this.action();\r\n this.setInterval(nextInterval);\r\n }\r\n\r\n private onBlur(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n this.setInterval(this.options?.blurInterval);\r\n }\r\n\r\n private onFocus(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n if (this.options?.fireImmediately === FireImmediately.whenFocused) {\r\n this.callActionAndScheduleNext(this.interval);\r\n return;\r\n }\r\n\r\n this.setInterval(this.interval);\r\n }\r\n\r\n private onHidden(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n this.setInterval(this.options?.hiddenInterval);\r\n }\r\n\r\n private onShown(): void {\r\n if (this.isStopped) {\r\n return;\r\n }\r\n\r\n if (this.options.fireImmediately === FireImmediately.whenShown) {\r\n this.callActionAndScheduleNext(this.interval);\r\n return;\r\n }\r\n\r\n this.setInterval(this.interval);\r\n }\r\n\r\n private setInterval(interval?: number): void {\r\n if (this.$handle) {\r\n if (interval === this.currentInterval) {\r\n return;\r\n }\r\n\r\n window.clearTimeout(this.$handle);\r\n this.$handle = undefined;\r\n }\r\n\r\n if (!interval) {\r\n return;\r\n }\r\n\r\n this.$handle = window.setTimeout(() => this.callActionAndScheduleNext(interval), interval);\r\n this.currentInterval = interval;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoLocalStorageService {\r\n checkIfKeyExists(key: string): boolean {\r\n return globalThis.localStorage.getItem(key) !== null;\r\n }\r\n\r\n getItem<T>(key: string): T | undefined {\r\n const valueString = globalThis.localStorage.getItem(key);\r\n\r\n if (valueString === null) {\r\n return undefined;\r\n }\r\n\r\n const value = JSON.parse(valueString);\r\n return value;\r\n }\r\n\r\n setItem<T>(key: string, value: T): void {\r\n const valueString = JSON.stringify(value);\r\n globalThis.localStorage.setItem(key, valueString);\r\n }\r\n\r\n removeItem(key: string): void {\r\n globalThis.localStorage.removeItem(key);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgbModal, NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoModalService {\r\n constructor(private readonly ngbModal: NgbModal) {}\r\n\r\n public async showModal<T>(\r\n component: unknown,\r\n componentParameters?: unknown,\r\n modalOptions: NgbModalOptions = { backdrop: 'static' }\r\n ): Promise<{ result: T; componentInstance: unknown }> {\r\n const modal = this.ngbModal.open(component, modalOptions);\r\n const componentInstance = modal.componentInstance;\r\n\r\n Object.assign(componentInstance, componentParameters);\r\n\r\n let result: T;\r\n\r\n try {\r\n result = await modal.result;\r\n } catch (error) {\r\n result = null as unknown as T;\r\n if (error === undefined) {\r\n throw 'modal dismiss';\r\n }\r\n throw error;\r\n }\r\n\r\n return { result, componentInstance };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Params } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChoRouteParamService {\r\n constructor(private readonly route: ActivatedRoute) {}\r\n\r\n public getParameterBoolean(params: Params, paramKey: string): boolean | null {\r\n const value = this.getParameterValue(params, paramKey);\r\n\r\n if (value) {\r\n return !!value;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getParameterNumber(params: Params, paramKey: string): number | null {\r\n const value = this.getParameterValue(params, paramKey);\r\n\r\n if (value) {\r\n return parseInt(value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getParameterValue(params: Params, paramKey: string): string | null {\r\n const value = params[paramKey];\r\n return value || null;\r\n }\r\n\r\n public getQueryParameterBoolean(paramKey: string): boolean | null {\r\n return this.getParameterBoolean(this.route.snapshot.queryParams, paramKey);\r\n }\r\n\r\n public getQueryParameterNumber(paramKey: string): number | null {\r\n return this.getParameterNumber(this.route.snapshot.queryParams, paramKey);\r\n }\r\n\r\n public getQueryParameterValue(paramKey: string): string | null {\r\n return this.getParameterValue(this.route.snapshot.queryParams, paramKey);\r\n }\r\n\r\n public getRouteParameterBoolean(route: ActivatedRoute, paramKey: string): boolean | null {\r\n return this.getParameterBoolean(route.snapshot.params, paramKey);\r\n }\r\n\r\n public getRouteParameterNumber(route: ActivatedRoute, paramKey: string): number | null {\r\n return this.getParameterNumber(route.snapshot.params, paramKey);\r\n }\r\n\r\n public getRouteParameterValue(route: ActivatedRoute, paramKey: string): string | null {\r\n return this.getParameterValue(route.snapshot.params, paramKey);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoSessionStorageService {\r\n checkIfKeyExists(key: string): boolean {\r\n return globalThis.sessionStorage.getItem(key) !== null;\r\n }\r\n\r\n getItem<T>(key: string): T | undefined {\r\n const valueString = globalThis.sessionStorage.getItem(key);\r\n\r\n if (valueString === null) {\r\n return undefined;\r\n }\r\n\r\n const value = JSON.parse(valueString);\r\n return value;\r\n }\r\n\r\n setItem<T>(key: string, value: T): void {\r\n const valueString = JSON.stringify(value);\r\n globalThis.sessionStorage.setItem(key, valueString);\r\n }\r\n\r\n removeItem(key: string): void {\r\n globalThis.sessionStorage.removeItem(key);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ChoNavigationService } from './cho-navigation.service';\r\nimport { ChoRouteParamService } from './cho-route-param.service';\r\n\r\nexport type FilterType = 'string' | 'number' | 'boolean';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ChoSearchService {\r\n constructor(\r\n private readonly routeParamService: ChoRouteParamService,\r\n private readonly navigationService: ChoNavigationService\r\n ) {}\r\n\r\n public readFromRoute<T extends Record<string, unknown>>(\r\n map: Record<string, string>,\r\n defaults?: Partial<T>,\r\n types?: Record<keyof T & string, FilterType>\r\n ): T {\r\n const result: Record<string, unknown> = { ...(defaults || {}) };\r\n Object.keys(map).forEach(prop => {\r\n const qp = map[prop];\r\n const desiredType =\r\n (types?.[prop as keyof T & string] as FilterType) || this.inferType(defaults, prop);\r\n const value = this.getQueryParamValue(qp, desiredType);\r\n if (value !== undefined) {\r\n result[prop] = value as unknown;\r\n }\r\n });\r\n return result as T;\r\n }\r\n\r\n public writeToRoute<T extends Record<string, unknown>>(\r\n filters: T,\r\n map: Record<string, string>\r\n ): void {\r\n const qp: Record<string, unknown> = {};\r\n Object.keys(map).forEach(prop => {\r\n const key = map[prop];\r\n const val = (filters as Record<string, unknown>)[prop];\r\n qp[key] = this.normalizeQueryValue(val);\r\n });\r\n this.navigationService.setQueryParams(qp);\r\n }\r\n\r\n public resetWithDefaults<T extends Record<string, unknown>>(defaults?: Partial<T>): T {\r\n return { ...(defaults || {}) } as T;\r\n }\r\n\r\n private getQueryParamValue(key: string, type: FilterType | undefined): unknown {\r\n switch (type) {\r\n case 'number': {\r\n return this.routeParamService.getQueryParameterNumber(key) ?? undefined;\r\n }\r\n case 'boolean': {\r\n return this.routeParamService.getQueryParameterBoolean(key) ?? undefined;\r\n }\r\n case 'string':\r\n default: {\r\n const v = this.routeParamService.getQueryParameterValue(key);\r\n return v !== undefined && v !== null ? v : undefined;\r\n }\r\n }\r\n }\r\n\r\n private inferType<T>(defaults: Partial<T> | undefined, prop: string): FilterType | undefined {\r\n if (!defaults) return undefined;\r\n const v = (defaults as Record<string, unknown>)[prop];\r\n if (v === null || v === undefined) return undefined;\r\n if (typeof v === 'number') return 'number';\r\n if (typeof v === 'boolean') return 'boolean';\r\n return 'string';\r\n }\r\n\r\n private normalizeQueryValue(val: unknown): unknown {\r\n if (val === undefined || val === '') return null;\r\n if (typeof val === 'boolean') return val ? true : null;\r\n return val ?? null;\r\n }\r\n}\r\n\r\n\r\n","import {\r\n Directive,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { ChoSearchService, FilterType } from '../services/cho-search.service';\r\n\r\n@Directive({\r\n selector: '[choFilterSync]',\r\n exportAs: 'choFilterSync',\r\n standalone: true,\r\n})\r\nexport class ChoFilterSyncDirective implements OnInit, OnChanges {\r\n @Input() choFilterSync!: Record<string, unknown>;\r\n @Input() choFilterSyncMap!: Record<string, string>;\r\n @Input() choFilterSyncDefaults?: Record<string, unknown>;\r\n @Input() choFilterSyncTypes?: Record<string, FilterType>;\r\n @Input() choFilterSyncApply?: unknown;\r\n @Output() choFilterSyncChange = new EventEmitter<Record<string, unknown>>();\r\n\r\n constructor(private readonly searchService: ChoSearchService) {}\r\n\r\n ngOnInit(): void {\r\n if (!this.choFilterSync || !this.choFilterSyncMap) return;\r\n const initial = this.searchService.readFromRoute(\r\n this.choFilterSyncMap,\r\n this.choFilterSyncDefaults,\r\n this.choFilterSyncTypes\r\n );\r\n Object.assign(this.choFilterSync, initial);\r\n this.choFilterSyncChange.emit(this.choFilterSync);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['choFilterSyncApply'] && !changes['choFilterSyncApply'].firstChange) {\r\n this.apply();\r\n }\r\n }\r\n\r\n public apply(): void {\r\n if (!this.choFilterSync || !this.choFilterSyncMap) return;\r\n this.searchService.writeToRoute(this.choFilterSync, this.choFilterSyncMap);\r\n }\r\n}\r\n\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { ChoFilterSyncDirective } from './cho-filter-sync.directive';\r\n\r\n@NgModule({\r\n imports: [ChoFilterSyncDirective],\r\n exports: [ChoFilterSyncDirective],\r\n})\r\nexport class ChoSearchModule {}\r\n\r\n\r\n","/*\r\n * Public API Surface of ngx-cho-common\r\n */\r\nexport { CHO_COMMON_CONFIG, ChoCommonConfig } from './ngx-cho-common.config';\r\n\r\nexport { ChoAutoFocusDirective } from './lib/directives/cho-auto-focus.directive';\r\nexport { ChoFormFocusDirective } from './lib/directives/cho-form-focus.directive';\r\nexport { ChoKeyPressEnterDirective } from './lib/directives/cho-key-press-enter.directive';\r\nexport { ChoKeyPressEscapeDirective } from './lib/directives/cho-key-press-escape.directive';\r\n\r\nexport { ChoFeatureGuard } from './lib/guards/cho-feature.guard';\r\nexport { ChoUnsavedChangesGuard } from './lib/guards/cho-unsaved-changes.guard';\r\n\r\nexport { IDeactivatable } from './lib/models/deactivatable.interface';\r\n\r\nexport { IPhoneInfo } from './lib/models/phone-info.model';\r\nexport { INoteInfo } from './lib/models/note-info.model';\r\nexport { IEmailInfo } from './lib/models/email-info.model';\r\nexport { IContactInfo } from './lib/models/contact-info.model';\r\nexport { BasicSearchFilter } from './lib/models/basic-search-filter.model';\r\nexport { AppFile } from './lib/models/app-file.model';\r\nexport { IAddress } from './lib/models/address.model';\r\nexport { INote } from './lib/models/note.model';\r\nexport { Uuid } from './lib/models/uuid.model';\r\n\r\nexport { ChoActiveFilterPipe } from './lib/pipes/cho-active-filter.pipe';\r\nexport { ChoBooleanPipe } from './lib/pipes/cho-boolean.pipe';\r\nexport { ChoDatePipe } from './lib/pipes/cho-date.pipe';\r\nexport { ChoFilterPipe } from './lib/pipes/cho-filter.pipe';\r\nexport { ChoFormatKeyPipe } from './lib/pipes/cho-format-key.pipe';\r\nexport { ChoLowerKebabCasePipe } from './lib/pipes/cho-lower-kebab-case.pipe';\r\nexport { ChoSumByPipe } from './lib/pipes/cho-sum-by.pipe';\r\nexport { ChoTextFilterPipe } from './lib/pipes/cho-text-filter.pipe';\r\n\r\nexport { ChoDateService } from './lib/services/cho-date.service';\r\nexport { ChoDownloadService } from './lib/services/cho-download.service';\r\nexport { ChoErrorService } from './lib/services/cho-error.service';\r\nexport { ChoFeatureService } from './lib/services/cho-feature.service';\r\nexport {\r\n ChoIntervalService,\r\n IntervalTimer,\r\n FireImmediately,\r\n} from './lib/services/cho-interval.service';\r\nexport { ChoLocalStorageService } from './lib/services/cho-local-storage.service';\r\nexport { ChoModalService } from './lib/services/cho-modal.service';\r\nexport { ChoNavigationService } from './lib/services/cho-navigation.service';\r\nexport { ChoObjectService } from './lib/services/cho-object.service';\r\nexport { ChoRestClientService } from './lib/services/cho-rest-client.service';\r\nexport { ChoRouteParamService } from './lib/services/cho-route-param.service';\r\nexport { ChoSessionStorageService } from './lib/services/cho-session-storage.service';\r\n\r\nexport { Indexable } from './lib/types/indexable.type';\r\nexport { NameValueItem } from './lib/types/name-value-item.type';\r\n\r\n// Search utilities\r\nexport { ChoSearchService, FilterType } from './lib/services/cho-search.service';\r\nexport { ChoFilterSyncDirective } from './lib/directives/cho-filter-sync.directive';\r\nexport { ChoSearchModule } from './lib/directives/cho-search.module';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ChoRestClientService","i1","i1.ChoFeatureService","i2.ChoNavigationService","i1.ChoObjectService","i1.ChoRouteParamService","i1.ChoSearchService"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
+ import { ChoSearchService, FilterType } from '../services/cho-search.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ChoFilterSyncDirective implements OnInit, OnChanges {
5
+ private readonly searchService;
6
+ choFilterSync: Record<string, unknown>;
7
+ choFilterSyncMap: Record<string, string>;
8
+ choFilterSyncDefaults?: Record<string, unknown>;
9
+ choFilterSyncTypes?: Record<string, FilterType>;
10
+ choFilterSyncApply?: unknown;
11
+ choFilterSyncChange: EventEmitter<Record<string, unknown>>;
12
+ constructor(searchService: ChoSearchService);
13
+ ngOnInit(): void;
14
+ ngOnChanges(changes: SimpleChanges): void;
15
+ apply(): void;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChoFilterSyncDirective, never>;
17
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ChoFilterSyncDirective, "[choFilterSync]", ["choFilterSync"], { "choFilterSync": { "alias": "choFilterSync"; "required": false; }; "choFilterSyncMap": { "alias": "choFilterSyncMap"; "required": false; }; "choFilterSyncDefaults": { "alias": "choFilterSyncDefaults"; "required": false; }; "choFilterSyncTypes": { "alias": "choFilterSyncTypes"; "required": false; }; "choFilterSyncApply": { "alias": "choFilterSyncApply"; "required": false; }; }, { "choFilterSyncChange": "choFilterSyncChange"; }, never, never, true, never>;
18
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./cho-filter-sync.directive";
3
+ export declare class ChoSearchModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChoSearchModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ChoSearchModule, never, [typeof i1.ChoFilterSyncDirective], [typeof i1.ChoFilterSyncDirective]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<ChoSearchModule>;
7
+ }
@@ -0,0 +1,17 @@
1
+ import { ChoNavigationService } from './cho-navigation.service';
2
+ import { ChoRouteParamService } from './cho-route-param.service';
3
+ import * as i0 from "@angular/core";
4
+ export type FilterType = 'string' | 'number' | 'boolean';
5
+ export declare class ChoSearchService {
6
+ private readonly routeParamService;
7
+ private readonly navigationService;
8
+ constructor(routeParamService: ChoRouteParamService, navigationService: ChoNavigationService);
9
+ readFromRoute<T extends Record<string, unknown>>(map: Record<string, string>, defaults?: Partial<T>, types?: Record<keyof T & string, FilterType>): T;
10
+ writeToRoute<T extends Record<string, unknown>>(filters: T, map: Record<string, string>): void;
11
+ resetWithDefaults<T extends Record<string, unknown>>(defaults?: Partial<T>): T;
12
+ private getQueryParamValue;
13
+ private inferType;
14
+ private normalizeQueryValue;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChoSearchService, never>;
16
+ static ɵprov: i0.ɵɵInjectableDeclaration<ChoSearchService>;
17
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-cho-common",
3
- "version": "1.0.10",
3
+ "version": "1.0.11",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0",
package/public-api.d.ts CHANGED
@@ -37,3 +37,6 @@ export { ChoRouteParamService } from './lib/services/cho-route-param.service';
37
37
  export { ChoSessionStorageService } from './lib/services/cho-session-storage.service';
38
38
  export { Indexable } from './lib/types/indexable.type';
39
39
  export { NameValueItem } from './lib/types/name-value-item.type';
40
+ export { ChoSearchService, FilterType } from './lib/services/cho-search.service';
41
+ export { ChoFilterSyncDirective } from './lib/directives/cho-filter-sync.directive';
42
+ export { ChoSearchModule } from './lib/directives/cho-search.module';