angular-base-lib 21.0.1 → 21.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,280 +1,280 @@
1
- # AngularBaseDao
2
-
3
- This library helps you to create dao-services that include all **CURDL** methods out of the box without needing to implement them by your own.
4
- Complex models that are received from the REST requests can simply be **converted/mapped** using the provided **HttpBaseDao** and **IConverter**.
5
-
6
- > **CURLD** => **C**reate **R**ead **U**pdate **D**elete **L**ist
7
-
8
- ## Basic Usage
9
-
10
- To create a service that provides all CRUDL functions out of the box follow these steps:
11
-
12
- **Step 1: Create an entity-class which implements the **IIdentifiable** interface**
13
-
14
- ```ts
15
- export interface UserModel implements IIdentifiable {
16
- id: string;
17
- name: string;
18
- }
19
- ```
20
-
21
- **Step 2: Create an entity-dao-service, which extends from the NoConversionHttpBaseDao-class**
22
-
23
- By default, the service will set **withCredentials** to true, to make use of http-only cookie authentication.
24
- If this is not wanted, you can specify it in the super-constructor call.
25
-
26
- If you prefer a different kind of authentication method, you can pass custom http-headers to the affected **CRUDL** method. (`this.dao.list(false, { ...httpOptions })`)
27
-
28
- ```ts
29
- @Injectable({ providedIn: 'root' })
30
- export class UserDaoService extends NoConversionHttpBaseDao<UserModel> {
31
- constructor() {
32
- super('https://api.net/user');
33
- }
34
- }
35
- ```
36
-
37
- **Step 3: Use the service**
38
-
39
- ```ts
40
- @Component(...)
41
- export class AppComponent {
42
- private readonly userDao = inject(UserDaoService);
43
-
44
- constructor() {
45
- this.userDao.create({ name: 'Max' }); // returns Promise<UserModel>
46
- this.userDao.read('my-id'); // returns Promise<UserModel>
47
- this.userDao.update({ id: 'max-id', name: 'Max' }); // returns Promise<UserModel>
48
- this.userDao.delete({ id: 'max-id', name: 'Max' }); // returns Promise<void>
49
- this.userDao.list(); // returns Promise<UserModel[]>
50
- }
51
- }
52
- ```
53
-
54
- ### Using converters to convert http body to models (optional)
55
-
56
- **Step 1: Create the request interface that the server sends back to the client**
57
-
58
- ```ts
59
- export interface UserResponse implements IIdentifiable {
60
- id: string;
61
- creationDateString: string; // ISO string
62
- }
63
- ```
64
-
65
- **Step 2: Create the interface that the dao-service should return**
66
-
67
- ```ts
68
- export interface UserModel implements IIdentifiable {
69
- id: string;
70
- creationDate: Date; // Real date object
71
- }
72
- ```
73
-
74
- **Step 3: Create a mapper-service that maps between those two models**
75
-
76
- ```ts
77
- @Injectable({ providedIn: 'root' })
78
- export class PersonConverterService implements IConverter<UserResponse, UserModel> {
79
- // Converts the model that was returned by the server to the model that should be used in the applciation
80
- fromJson(response: UserResponse): UserModel {
81
- return {
82
- id: response.id,
83
- creationDate: new Date(response.creationDateString), // Converts the date-string to a date
84
- };
85
- }
86
-
87
- // Prepares the object that will be sent to the server for CREATE or UPDATE
88
- toJson(model: UserModel): unknown {
89
- return {
90
- id: model.id,
91
- creationDate: model.creationDate.toISOString(),
92
- };
93
- }
94
- }
95
- ```
96
-
97
- **Step 4: Create the entity-dao-service and provide the created converter-service**
98
-
99
- ```ts
100
- @Injectable({ providedIn: 'root' })
101
- export class UserDaoService extends HttpBaseDao<UserResponse, PersonModel> {
102
- constructor() {
103
- super('https://api.net/user', inject(HttpClient), inject(PersonConverterService));
104
- }
105
- }
106
- ```
107
-
108
- ## Server Requirements
109
-
110
- - REST server
111
- - HTTP methods are used to differentiate between the different CRUDL request
112
-
113
- - **POST** (CREATE)
114
-
115
- - url: https://api.net/entity
116
- - request body: **json object**
117
- - response body: **json object**
118
-
119
- - **GET** (READ)
120
-
121
- - url: https://api.net/entity/:id
122
- - request body: -
123
- - response body: **json object**
124
-
125
- - **PUT** (UPDATE)
126
-
127
- - url: https://api.net/entity/:id
128
- - request body: **json object**
129
- - response body: **json object**
130
-
131
- - **DELETE** (DELETE)
132
-
133
- - url: https://api.net/entity/:id
134
- - request body: -
135
- - response body: -
136
-
137
- - **GET** (LIST)
138
-
139
- - url: https://api.net/entity
140
- - request body: -
141
- - response body: **json array**
142
-
143
- # Angular Base Authentication
144
- This library contains an abstract auth-service and guards that can be used out of the box, by just extending the `BaseAuthService<TUSER>`.
145
-
146
- ## Usage
147
-
148
- **Step 1: Create a user model**
149
-
150
- ```js
151
- interface UserModel {
152
- id: string;
153
- email: string;
154
- isAdmin: boolean;
155
- }
156
- ```
157
-
158
- **Step 2: Extend the base-auth-service using the user-model**
159
-
160
- ```js
161
- @Injectable({ providedIn: 'root' })
162
- export class MyOwnAuthService extends BaseAuthService<UserModel>...
163
- ```
164
-
165
- **Step 3: Set the initial login state inside the constructor**
166
-
167
- With local auth-cookie:
168
- ```js
169
- constructor() {
170
- const user = loginUsingAuthCookie(); // Validate and check your local auth-cookie
171
- if (user) {
172
- this.userLoggedIn(user); // Sets the login state to logged-in
173
- } else {
174
- this.userLoggedOut(); // Sets the login state to logged-out
175
- }
176
- }
177
- ```
178
-
179
- Without local tokens:
180
- ```js
181
- constructor() {
182
- this.userLoggedOut(); // Sets the initial login state to logged-out
183
- }
184
- ```
185
-
186
- > Important: Make sure the initial login state is set right after the application is started by calling `userLoggedIn`or `userLoggedOut`. If you do NOT do this the login-state will be `pending` and the provided auth-guards be waiting for the 'readyLoginState$' forever.
187
-
188
- ****
189
-
190
- ```js
191
- constructor() {
192
- this.userLoggedOut(); // If you do not do this, the login-state will be pending
193
- }
194
- ```
195
-
196
- **Step 4: Implement the login-logout functions and call the provided functions of the base-class**
197
-
198
- ```js
199
- async login(loginData): Promise<void> {
200
- try {
201
- const result$ = this.http.post<UserModel>(login, loginData);
202
- const user = await firstValueFrom(result$);
203
- this.userLoggedIn(user); // Sets the login state to logged-in
204
- } catch (ex) {
205
- this.userLoggedOut(); // Sets the login state to logged-out
206
- return ex;
207
- }
208
- }
209
- ```
210
-
211
- **Step 5: Provide your service implementation as `BaseAuthService`**
212
- app.config.ts
213
- ```js
214
- export const appConfig: ApplicationConfig = {
215
- providers: [
216
- provideHttpClient(),
217
- {
218
- provide: BaseAuthService,
219
- useExisting: MyOwnAuthService
220
- },
221
- ...
222
- ]
223
- };
224
- ```
225
-
226
- **Step 6: Use it**
227
-
228
- Now you can use the provided route-guards without any configuration.
229
- ```js
230
- {
231
- ...
232
- path: 'login',
233
- canActivate: [loggedOutGuardFn], //Only allow when logged-out
234
- ...
235
- },
236
- {
237
- ...
238
- path: 'account',
239
- canActivate: [loggedInGuardFn], // Only allow when logged-in
240
- ...
241
- },
242
- ```
243
-
244
- The `BaseAuthService` also provides a list of handy observables that represent the current auth-state like:
245
- ```js
246
- loginState$(): Observable<LoginState>
247
- readyLoginState$(): Observable<LoginState>
248
- readyAuthState$(): Observable<BaseAuthState<T>>
249
- user$(): Observable<T | null>
250
- isLoggedIn$(): Observable<boolean>
251
- loginRoute(): string
252
- ```
253
-
254
- ### loginState$ vs readyLoginState$
255
-
256
- #### loginState$
257
-
258
- Emits all login states. Initial value will be `{ loginState: 'pending', user: null }`
259
-
260
- #### readyLoginState$
261
-
262
- Only emits non `pending` auth-states. Therefor handy for auth-guards.
263
-
264
- #### Explanation
265
-
266
- When a page is initially loaded, and the user is logged in using the stored auth-cookie. The auth state will be `pending` until the cookie is verified, until this the auth guard should not check if the route can be activated. Only if `this.userLoggedOut()` or `this.userLoggedIn(user)` was called, the auth guard will check the access. This prevents the application from blocking a page from the user because login-state is not settled jet.
267
-
268
- # angular-base
269
-
270
- Library with different abstract components and utilities that come in handy for simple angular-applications.
271
-
272
- # model-component
273
-
274
- A collection of abstract classes(components) that can reflect the different action pages(list/add/edit) for a subject(model).
275
-
276
- # navigation-service
277
-
278
- Keeps track of visited pages and navigates back to the previous page if 'back' is called. If back is called on the initial page, the fallback route is used.
279
- For example if the user is on the route '/users/edit' and clicks on the back button, the router will navigate to '/users'.
280
- These base paths can be defined in the implementation of the base-model-components.
1
+ # AngularBaseDao
2
+
3
+ This library helps you to create dao-services that include all **CURDL** methods out of the box without needing to implement them by your own.
4
+ Complex models that are received from the REST requests can simply be **converted/mapped** using the provided **HttpBaseDao** and **IConverter**.
5
+
6
+ > **CURLD** => **C**reate **R**ead **U**pdate **D**elete **L**ist
7
+
8
+ ## Basic Usage
9
+
10
+ To create a service that provides all CRUDL functions out of the box follow these steps:
11
+
12
+ **Step 1: Create an entity-class which implements the **IIdentifiable** interface**
13
+
14
+ ```ts
15
+ export interface UserModel implements IIdentifiable {
16
+ id: string;
17
+ name: string;
18
+ }
19
+ ```
20
+
21
+ **Step 2: Create an entity-dao-service, which extends from the NoConversionHttpBaseDao-class**
22
+
23
+ By default, the service will set **withCredentials** to true, to make use of http-only cookie authentication.
24
+ If this is not wanted, you can specify it in the super-constructor call.
25
+
26
+ If you prefer a different kind of authentication method, you can pass custom http-headers to the affected **CRUDL** method. (`this.dao.list(false, { ...httpOptions })`)
27
+
28
+ ```ts
29
+ @Injectable({ providedIn: 'root' })
30
+ export class UserDaoService extends NoConversionHttpBaseDao<UserModel> {
31
+ constructor() {
32
+ super('https://api.net/user');
33
+ }
34
+ }
35
+ ```
36
+
37
+ **Step 3: Use the service**
38
+
39
+ ```ts
40
+ @Component(...)
41
+ export class AppComponent {
42
+ private readonly userDao = inject(UserDaoService);
43
+
44
+ constructor() {
45
+ this.userDao.create({ name: 'Max' }); // returns Promise<UserModel>
46
+ this.userDao.read('my-id'); // returns Promise<UserModel>
47
+ this.userDao.update({ id: 'max-id', name: 'Max' }); // returns Promise<UserModel>
48
+ this.userDao.delete({ id: 'max-id', name: 'Max' }); // returns Promise<void>
49
+ this.userDao.list(); // returns Promise<UserModel[]>
50
+ }
51
+ }
52
+ ```
53
+
54
+ ### Using converters to convert http body to models (optional)
55
+
56
+ **Step 1: Create the request interface that the server sends back to the client**
57
+
58
+ ```ts
59
+ export interface UserResponse implements IIdentifiable {
60
+ id: string;
61
+ creationDateString: string; // ISO string
62
+ }
63
+ ```
64
+
65
+ **Step 2: Create the interface that the dao-service should return**
66
+
67
+ ```ts
68
+ export interface UserModel implements IIdentifiable {
69
+ id: string;
70
+ creationDate: Date; // Real date object
71
+ }
72
+ ```
73
+
74
+ **Step 3: Create a mapper-service that maps between those two models**
75
+
76
+ ```ts
77
+ @Injectable({ providedIn: 'root' })
78
+ export class PersonConverterService implements IConverter<UserResponse, UserModel> {
79
+ // Converts the model that was returned by the server to the model that should be used in the applciation
80
+ fromJson(response: UserResponse): UserModel {
81
+ return {
82
+ id: response.id,
83
+ creationDate: new Date(response.creationDateString), // Converts the date-string to a date
84
+ };
85
+ }
86
+
87
+ // Prepares the object that will be sent to the server for CREATE or UPDATE
88
+ toJson(model: UserModel): unknown {
89
+ return {
90
+ id: model.id,
91
+ creationDate: model.creationDate.toISOString(),
92
+ };
93
+ }
94
+ }
95
+ ```
96
+
97
+ **Step 4: Create the entity-dao-service and provide the created converter-service**
98
+
99
+ ```ts
100
+ @Injectable({ providedIn: 'root' })
101
+ export class UserDaoService extends HttpBaseDao<UserResponse, PersonModel> {
102
+ constructor() {
103
+ super('https://api.net/user', inject(HttpClient), inject(PersonConverterService));
104
+ }
105
+ }
106
+ ```
107
+
108
+ ## Server Requirements
109
+
110
+ - REST server
111
+ - HTTP methods are used to differentiate between the different CRUDL request
112
+
113
+ - **POST** (CREATE)
114
+
115
+ - url: https://api.net/entity
116
+ - request body: **json object**
117
+ - response body: **json object**
118
+
119
+ - **GET** (READ)
120
+
121
+ - url: https://api.net/entity/:id
122
+ - request body: -
123
+ - response body: **json object**
124
+
125
+ - **PUT** (UPDATE)
126
+
127
+ - url: https://api.net/entity/:id
128
+ - request body: **json object**
129
+ - response body: **json object**
130
+
131
+ - **DELETE** (DELETE)
132
+
133
+ - url: https://api.net/entity/:id
134
+ - request body: -
135
+ - response body: -
136
+
137
+ - **GET** (LIST)
138
+
139
+ - url: https://api.net/entity
140
+ - request body: -
141
+ - response body: **json array**
142
+
143
+ # Angular Base Authentication
144
+ This library contains an abstract auth-service and guards that can be used out of the box, by just extending the `BaseAuthService<TUSER>`.
145
+
146
+ ## Usage
147
+
148
+ **Step 1: Create a user model**
149
+
150
+ ```js
151
+ interface UserModel {
152
+ id: string;
153
+ email: string;
154
+ isAdmin: boolean;
155
+ }
156
+ ```
157
+
158
+ **Step 2: Extend the base-auth-service using the user-model**
159
+
160
+ ```js
161
+ @Injectable({ providedIn: 'root' })
162
+ export class MyOwnAuthService extends BaseAuthService<UserModel>...
163
+ ```
164
+
165
+ **Step 3: Set the initial login state inside the constructor**
166
+
167
+ With local auth-cookie:
168
+ ```js
169
+ constructor() {
170
+ const user = loginUsingAuthCookie(); // Validate and check your local auth-cookie
171
+ if (user) {
172
+ this.userLoggedIn(user); // Sets the login state to logged-in
173
+ } else {
174
+ this.userLoggedOut(); // Sets the login state to logged-out
175
+ }
176
+ }
177
+ ```
178
+
179
+ Without local tokens:
180
+ ```js
181
+ constructor() {
182
+ this.userLoggedOut(); // Sets the initial login state to logged-out
183
+ }
184
+ ```
185
+
186
+ > Important: Make sure the initial login state is set right after the application is started by calling `userLoggedIn`or `userLoggedOut`. If you do NOT do this the login-state will be `pending` and the provided auth-guards be waiting for the 'readyLoginState$' forever.
187
+
188
+ ****
189
+
190
+ ```js
191
+ constructor() {
192
+ this.userLoggedOut(); // If you do not do this, the login-state will be pending
193
+ }
194
+ ```
195
+
196
+ **Step 4: Implement the login-logout functions and call the provided functions of the base-class**
197
+
198
+ ```js
199
+ async login(loginData): Promise<void> {
200
+ try {
201
+ const result$ = this.http.post<UserModel>(login, loginData);
202
+ const user = await firstValueFrom(result$);
203
+ this.userLoggedIn(user); // Sets the login state to logged-in
204
+ } catch (ex) {
205
+ this.userLoggedOut(); // Sets the login state to logged-out
206
+ return ex;
207
+ }
208
+ }
209
+ ```
210
+
211
+ **Step 5: Provide your service implementation as `BaseAuthService`**
212
+ app.config.ts
213
+ ```js
214
+ export const appConfig: ApplicationConfig = {
215
+ providers: [
216
+ provideHttpClient(),
217
+ {
218
+ provide: BaseAuthService,
219
+ useExisting: MyOwnAuthService
220
+ },
221
+ ...
222
+ ]
223
+ };
224
+ ```
225
+
226
+ **Step 6: Use it**
227
+
228
+ Now you can use the provided route-guards without any configuration.
229
+ ```js
230
+ {
231
+ ...
232
+ path: 'login',
233
+ canActivate: [loggedOutGuardFn], //Only allow when logged-out
234
+ ...
235
+ },
236
+ {
237
+ ...
238
+ path: 'account',
239
+ canActivate: [loggedInGuardFn], // Only allow when logged-in
240
+ ...
241
+ },
242
+ ```
243
+
244
+ The `BaseAuthService` also provides a list of handy observables that represent the current auth-state like:
245
+ ```js
246
+ loginState$(): Observable<LoginState>
247
+ readyLoginState$(): Observable<LoginState>
248
+ readyAuthState$(): Observable<BaseAuthState<T>>
249
+ user$(): Observable<T | null>
250
+ isLoggedIn$(): Observable<boolean>
251
+ loginRoute(): string
252
+ ```
253
+
254
+ ### loginState$ vs readyLoginState$
255
+
256
+ #### loginState$
257
+
258
+ Emits all login states. Initial value will be `{ loginState: 'pending', user: null }`
259
+
260
+ #### readyLoginState$
261
+
262
+ Only emits non `pending` auth-states. Therefor handy for auth-guards.
263
+
264
+ #### Explanation
265
+
266
+ When a page is initially loaded, and the user is logged in using the stored auth-cookie. The auth state will be `pending` until the cookie is verified, until this the auth guard should not check if the route can be activated. Only if `this.userLoggedOut()` or `this.userLoggedIn(user)` was called, the auth guard will check the access. This prevents the application from blocking a page from the user because login-state is not settled jet.
267
+
268
+ # angular-base
269
+
270
+ Library with different abstract components and utilities that come in handy for simple angular-applications.
271
+
272
+ # model-component
273
+
274
+ A collection of abstract classes(components) that can reflect the different action pages(list/add/edit) for a subject(model).
275
+
276
+ # navigation-service
277
+
278
+ Keeps track of visited pages and navigates back to the previous page if 'back' is called. If back is called on the initial page, the fallback route is used.
279
+ For example if the user is on the route '/users/edit' and clicks on the back button, the router will navigate to '/users'.
280
+ These base paths can be defined in the implementation of the base-model-components.
@@ -30,10 +30,10 @@ class NavigationService {
30
30
  this.router.navigate([fallbackRoute]);
31
31
  }
32
32
  }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NavigationService, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: NavigationService, decorators: [{
37
37
  type: Injectable,
38
38
  args: [{ providedIn: 'root' }]
39
39
  }], ctorParameters: () => [] });
@@ -156,10 +156,10 @@ class BackButtonDirective {
156
156
  onClick() {
157
157
  this.navigation.back();
158
158
  }
159
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
160
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: BackButtonDirective, isStandalone: true, selector: "[ngBackButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
159
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
160
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.6", type: BackButtonDirective, isStandalone: true, selector: "[ngBackButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
161
161
  }
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: BackButtonDirective, decorators: [{
162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: BackButtonDirective, decorators: [{
163
163
  type: Directive,
164
164
  args: [{
165
165
  selector: '[ngBackButton]',
@@ -542,10 +542,10 @@ class BaseControlValueAccessor {
542
542
  setDisabledState(isDisabled) {
543
543
  this.disabled = isDisabled;
544
544
  }
545
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: BaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
546
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: BaseControlValueAccessor, isStandalone: true, inputs: { value: "value" }, outputs: { valueChanged: "valueChanged" }, ngImport: i0 }); }
545
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: BaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
546
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.6", type: BaseControlValueAccessor, isStandalone: true, inputs: { value: "value" }, outputs: { valueChanged: "valueChanged" }, ngImport: i0 }); }
547
547
  }
548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
548
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
549
549
  type: Directive
550
550
  }], propDecorators: { valueChanged: [{ type: i0.Output, args: ["valueChanged"] }], value: [{
551
551
  type: Input
@@ -555,8 +555,8 @@ class SignalBaseControlValueAccessor {
555
555
  constructor() {
556
556
  this.onChange = null;
557
557
  this.onTouched = null;
558
- this.value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
559
- this.disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
558
+ this.value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
559
+ this.disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
560
560
  }
561
561
  /**
562
562
  * Function that will be called by the input to update the value of the form-control and the model
@@ -585,10 +585,10 @@ class SignalBaseControlValueAccessor {
585
585
  setDisabledState(disabled) {
586
586
  this.disabled.set(disabled);
587
587
  }
588
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SignalBaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
589
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: SignalBaseControlValueAccessor, isStandalone: true, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0 }); }
588
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: SignalBaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
589
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.6", type: SignalBaseControlValueAccessor, isStandalone: true, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0 }); }
590
590
  }
591
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SignalBaseControlValueAccessor, decorators: [{
591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: SignalBaseControlValueAccessor, decorators: [{
592
592
  type: Directive
593
593
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
594
594
 
@@ -596,8 +596,8 @@ class NgAspectRatioDirective {
596
596
  constructor() {
597
597
  this.renderer = inject(Renderer2);
598
598
  this.hostElem = inject(ElementRef);
599
- this.ngAspectRatio = input.required(...(ngDevMode ? [{ debugName: "ngAspectRatio" }] : []));
600
- this.sizingMode = input('match-parent', ...(ngDevMode ? [{ debugName: "sizingMode" }] : []));
599
+ this.ngAspectRatio = input.required(...(ngDevMode ? [{ debugName: "ngAspectRatio" }] : /* istanbul ignore next */ []));
600
+ this.sizingMode = input('match-parent', ...(ngDevMode ? [{ debugName: "sizingMode" }] : /* istanbul ignore next */ []));
601
601
  this.containerWidthChanged = output();
602
602
  this.containerHeightChanged = output();
603
603
  this.targetRatio = this.ngAspectRatio;
@@ -657,10 +657,10 @@ class NgAspectRatioDirective {
657
657
  this.containerHeightChanged.emit(height);
658
658
  this.renderer.setStyle(this.hostElem.nativeElement, 'height', `${height}px`);
659
659
  }
660
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgAspectRatioDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
661
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: NgAspectRatioDirective, isStandalone: true, selector: "[ngAspectRatio]", inputs: { ngAspectRatio: { classPropertyName: "ngAspectRatio", publicName: "ngAspectRatio", isSignal: true, isRequired: true, transformFunction: null }, sizingMode: { classPropertyName: "sizingMode", publicName: "sizingMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { containerWidthChanged: "containerWidthChanged", containerHeightChanged: "containerHeightChanged" }, ngImport: i0 }); }
660
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: NgAspectRatioDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
661
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.6", type: NgAspectRatioDirective, isStandalone: true, selector: "[ngAspectRatio]", inputs: { ngAspectRatio: { classPropertyName: "ngAspectRatio", publicName: "ngAspectRatio", isSignal: true, isRequired: true, transformFunction: null }, sizingMode: { classPropertyName: "sizingMode", publicName: "sizingMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { containerWidthChanged: "containerWidthChanged", containerHeightChanged: "containerHeightChanged" }, ngImport: i0 }); }
662
662
  }
663
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgAspectRatioDirective, decorators: [{
663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: NgAspectRatioDirective, decorators: [{
664
664
  type: Directive,
665
665
  args: [{
666
666
  selector: '[ngAspectRatio]'
@@ -1 +1 @@
1
- {"version":3,"file":"angular-base-lib.mjs","sources":["../../../../libs/angular-base/src/lib/navigation/navigation.service.ts","../../../../libs/angular-base/src/lib/model-component/base-model-detail.component.ts","../../../../libs/angular-base/src/lib/model-component/base.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-edit.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-list.component.ts","../../../../libs/angular-base/src/lib/navigation/back-button.directive.ts","../../../../libs/angular-base/src/lib/util/is-nil.ts","../../../../libs/angular-base/src/lib/util/remove-nil-values-recursively.ts","../../../../libs/angular-base/src/lib/forms/form-util.ts","../../../../libs/angular-base/src/lib/util/prepare-optional-string.ts","../../../../libs/angular-base/src/lib/auth/models/pending-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/not-logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/base-auth.service.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-in.guard.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-out.guard.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao-options.ts","../../../../libs/angular-base/src/lib/dao/internal/internal-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converter.ts","../../../../libs/angular-base/src/lib/base/base-control-value-accessor.ts","../../../../libs/angular-base/src/lib/base/signal-base-control-value-accessor.ts","../../../../libs/angular-base/src/lib/aspect-container/ng-aspect-ratio.directive.ts","../../../../libs/angular-base/src/lib/aspect-container/alignment-flex-mapping.ts","../../../../libs/angular-base/src/angular-base-lib.ts"],"sourcesContent":["import { NavigationEnd, Router } from '@angular/router';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NavigationService {\r\n private history: string[] = [];\r\n private readonly router = inject(Router);\r\n private readonly location = inject(Location);\r\n\r\n constructor() {\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 reset(): void {\r\n this.history = [];\r\n }\r\n\r\n back(fallbackRoute = '/'): void {\r\n this.history.pop();\r\n if (this.history.length > 0) {\r\n this.location.back();\r\n } else {\r\n this.router.navigate([fallbackRoute]);\r\n }\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { NavigationService } from '../navigation/navigation.service';\r\nimport { ModelAction } from './action';\r\nimport { Identifiable } from 'angular-base-dao';\r\n\r\nexport abstract class BaseModelDetailComponent<TM extends Identifiable> {\r\n model: TM | null = null;\r\n\r\n protected readonly router = inject(Router);\r\n protected readonly navigationService = inject(NavigationService);\r\n\r\n protected constructor(protected baseRoute: string) {}\r\n\r\n handleModelAction(modelAction: ModelAction<TM>): void {\r\n switch (modelAction.action) {\r\n case 'show':\r\n this.showList();\r\n break;\r\n\r\n case 'edit':\r\n this.editModel();\r\n break;\r\n\r\n case 'delete':\r\n this.deleteModel();\r\n break;\r\n }\r\n }\r\n\r\n showList(): void {\r\n this.router.navigate([this.baseRoute]);\r\n }\r\n\r\n async editModel(): Promise<void> {\r\n if (!this.model) {\r\n return;\r\n }\r\n\r\n await this.router.navigate([`${this.baseRoute}/edit`, this.model.id]);\r\n }\r\n\r\n async deleteModel(): Promise<void> {\r\n const model = this.model;\r\n\r\n if (!model) {\r\n return;\r\n }\r\n\r\n if (await this.handleDeleteModel(model)) {\r\n await this.router.navigate([`${this.baseRoute}`]);\r\n }\r\n }\r\n\r\n goBack(): void {\r\n this.navigationService.back(this.baseRoute);\r\n }\r\n\r\n abstract handleDeleteModel(model: TM): Promise<boolean>;\r\n}\r\n","/**\r\n * Component used for all pages that can directly navigate back to the home page if no other route was found\r\n */\r\nimport { inject } from '@angular/core';\r\nimport { NavigationService } from '../navigation/navigation.service';\r\n\r\nexport abstract class BaseComponent {\r\n backRoute = '/';\r\n\r\n protected readonly navigationService = inject(NavigationService);\r\n\r\n goBack(): void {\r\n this.navigationService.back(this.backRoute);\r\n }\r\n}\r\n","import { Router } from '@angular/router';\r\nimport { BaseComponent } from './base.component';\r\nimport { inject } from '@angular/core';\r\nimport { ModelAction } from './action';\r\n\r\nexport abstract class BaseModelComponent<TM> extends BaseComponent {\r\n protected readonly router = inject(Router);\r\n\r\n protected constructor(protected baseRoute: string) {\r\n super();\r\n this.backRoute = this.baseRoute;\r\n }\r\n\r\n showList(): void {\r\n this.router.navigate([this.baseRoute]);\r\n }\r\n\r\n handleModelAction(modelAction: ModelAction<TM>): void {\r\n switch (modelAction.action) {\r\n case 'back_to-list':\r\n this.showList();\r\n break;\r\n }\r\n }\r\n}\r\n","import { BaseModelComponent } from './base-model.component';\r\nimport { Identifiable } from 'angular-base-dao';\r\n\r\nexport abstract class BaseModelEditComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\r\n model: TM | null = null;\r\n}\r\n","import { BaseModelComponent } from './base-model.component';\r\nimport { ModelAction } from './action';\r\nimport { DaoId, Identifiable } from 'angular-base-dao';\r\n\r\nexport abstract class BaseModelListComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\r\n protected constructor(baseRoute: string) {\r\n super(baseRoute);\r\n\r\n this.backRoute = '/';\r\n }\r\n\r\n override handleModelAction(modelAction: ModelAction<TM>): void {\r\n switch (modelAction.action) {\r\n case 'show':\r\n this.showDetail(modelAction.model.id);\r\n break;\r\n\r\n case 'edit':\r\n this.editModel(modelAction.model.id);\r\n break;\r\n\r\n case 'delete':\r\n this.deleteModel(modelAction.model);\r\n break;\r\n }\r\n }\r\n\r\n showDetail(id: DaoId): void {\r\n this.router.navigate([this.baseRoute, id]);\r\n }\r\n\r\n editModel(id: DaoId): void {\r\n this.router.navigate([`${this.baseRoute}/edit`, id]);\r\n }\r\n\r\n createModel(): void {\r\n this.router.navigate([`${this.baseRoute}/add`]);\r\n }\r\n\r\n abstract deleteModel(model: TM): Promise<boolean>;\r\n}\r\n","import { Directive, HostListener, inject } from '@angular/core';\r\nimport { NavigationService } from './navigation.service';\r\n\r\n@Directive({\r\n selector: '[ngBackButton]',\r\n standalone: true\r\n})\r\nexport class BackButtonDirective {\r\n private readonly navigation = inject(NavigationService);\r\n\r\n @HostListener('click')\r\n onClick(): void {\r\n this.navigation.back();\r\n }\r\n}\r\n","export const isNil = (obj: unknown): boolean => obj === null || obj === undefined;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { isNil } from './is-nil';\r\n\r\nexport const removeNullValuesRecursively = (object: any): any => {\r\n if (Array.isArray(object)) {\r\n const newObject = [];\r\n\r\n for (const obj of object) {\r\n newObject.push(removeNullValuesRecursively(obj));\r\n }\r\n\r\n return newObject;\r\n } else if (typeof object === 'object') {\r\n const newObject: any = {};\r\n\r\n for (const key in object) {\r\n if (isNil(object[key])) {\r\n continue;\r\n }\r\n\r\n if (typeof object[key] === 'object') {\r\n const objectToSet = removeNullValuesRecursively(object[key]);\r\n if (Object.keys(objectToSet)?.length) {\r\n newObject[key] = objectToSet;\r\n }\r\n } else {\r\n newObject[key] = object[key];\r\n }\r\n }\r\n\r\n return newObject;\r\n } else {\r\n return object;\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { removeNullValuesRecursively } from '../util/remove-nil-values-recursively';\r\n\r\nexport class FormUtil {\r\n static markAllControlsAsTouched(formGroup: FormGroup, recursive = true): void {\r\n Object.values(formGroup.controls).forEach((control: AbstractControl) => {\r\n if (recursive && control instanceof FormGroup) {\r\n FormUtil.markAllControlsAsTouched(control);\r\n } else {\r\n control.patchValue(control.value);\r\n control.markAllAsTouched();\r\n }\r\n });\r\n }\r\n\r\n static getUpdatedFormData(objectToAdd: any, oldData: any, newData: any): any {\r\n for (const newKey in newData) {\r\n const [, changed] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\r\n if (changed && newData[newKey]) {\r\n objectToAdd[newKey] = removeNullValuesRecursively(newData[newKey]);\r\n }\r\n }\r\n return objectToAdd;\r\n }\r\n\r\n static getDifferenceRecursively(oldData: any, newData: any): [any, boolean] {\r\n let changed = false;\r\n let object: any = {};\r\n\r\n if (typeof newData !== typeof oldData) {\r\n changed = true;\r\n object = newData;\r\n } else if (newData && typeof newData === 'object') {\r\n const allKeys = new Set([...Object.keys(newData), ...Object.keys(oldData)]);\r\n for (const newKey of allKeys) {\r\n if (!newData[newKey] && !oldData[newKey]) {\r\n continue;\r\n }\r\n\r\n // Check recursively\r\n const [innerDiff, innerChanged] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\r\n if (innerChanged) {\r\n changed = true;\r\n object[newKey] = innerDiff;\r\n }\r\n }\r\n } else if (newData !== oldData) {\r\n changed = true;\r\n object = newData;\r\n }\r\n\r\n return [object, changed];\r\n }\r\n}\r\n","export const prepareOptionalString = (value: string | null | undefined): string | undefined => {\r\n if (value === null || value === '') {\r\n // eslint-disable-next-line no-undefined\r\n return undefined;\r\n }\r\n\r\n return value;\r\n};\r\n","import { BaseAuthState } from './base-auth-state';\r\nimport { LoginState } from './login-state.type';\r\n\r\nexport class PendingAuthState implements BaseAuthState<unknown> {\r\n readonly loginState: LoginState = 'pending';\r\n readonly user = null;\r\n}\r\n","import { BaseAuthState } from './base-auth-state';\r\nimport { LoginState } from './login-state.type';\r\n\r\nexport class LoggedInAuthState<T> implements BaseAuthState<T> {\r\n readonly loginState: LoginState = 'logged-in';\r\n readonly user: T;\r\n\r\n constructor(user: T) {\r\n this.user = user;\r\n }\r\n}\r\n","import { BaseAuthState } from './base-auth-state';\r\nimport { LoginState } from './login-state.type';\r\n\r\nexport class NotLoggedInAuthState implements BaseAuthState<unknown> {\r\n readonly loginState: LoginState = 'logged-out';\r\n readonly user = null;\r\n}\r\n","import { BehaviorSubject, filter, Observable } from 'rxjs';\r\nimport { BaseAuthState, LoggedInAuthState, LoginState, NotLoggedInAuthState, PendingAuthState } from './models';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport abstract class BaseAuthService<T> {\r\n private readonly authStateSubject = new BehaviorSubject<BaseAuthState<T>>(new PendingAuthState());\r\n private readonly _authState$: Observable<BaseAuthState<T>>;\r\n private readonly _loginState$: Observable<LoginState>;\r\n private readonly _readyLoginState$: Observable<LoginState>;\r\n private readonly _readyAuthState$: Observable<BaseAuthState<T>>;\r\n private readonly _user$: Observable<T | null>;\r\n private readonly _readyUser$: Observable<T | null>;\r\n private readonly _isLoggedIn$: Observable<boolean>;\r\n private readonly defaultLoginRoute = '/auth/login';\r\n\r\n get authState$(): Observable<BaseAuthState<T>> {\r\n return this._authState$;\r\n }\r\n\r\n get loginState$(): Observable<LoginState> {\r\n return this._loginState$;\r\n }\r\n\r\n get readyLoginState$(): Observable<LoginState> {\r\n return this._readyLoginState$;\r\n }\r\n\r\n get readyAuthState$(): Observable<BaseAuthState<T>> {\r\n return this._readyAuthState$;\r\n }\r\n\r\n get user$(): Observable<T | null> {\r\n return this._user$;\r\n }\r\n\r\n get readyUser$(): Observable<T | null> {\r\n return this._readyUser$;\r\n }\r\n\r\n get isLoggedIn$(): Observable<boolean> {\r\n return this._isLoggedIn$;\r\n }\r\n\r\n get loginRoute(): string {\r\n return this.defaultLoginRoute;\r\n }\r\n\r\n protected constructor() {\r\n this._authState$ = this.authStateSubject.asObservable();\r\n this._user$ = this._authState$.pipe(map((elem) => elem.user));\r\n this._loginState$ = this._authState$.pipe(map((elem) => elem.loginState));\r\n this._isLoggedIn$ = this._loginState$.pipe(map((state) => state === 'logged-in'));\r\n\r\n this._readyAuthState$ = this._authState$.pipe(filter((elem) => elem.loginState !== 'pending'));\r\n this._readyLoginState$ = this._readyAuthState$.pipe(map((elem) => elem.loginState));\r\n this._readyUser$ = this._readyAuthState$.pipe(map((elem) => elem.user));\r\n }\r\n\r\n protected userLoggedIn(user: T): void {\r\n this.authStateSubject.next(new LoggedInAuthState<T>(user));\r\n }\r\n\r\n protected userLoggedOut(): void {\r\n this.authStateSubject.next(new NotLoggedInAuthState());\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { BaseAuthService } from '../base-auth.service';\r\nexport const loggedInGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\r\n const router = inject(Router);\r\n return inject(BaseAuthService).readyAuthState$.pipe(\r\n map((state) => {\r\n if (state.loginState === 'logged-in') {\r\n return true;\r\n }\r\n\r\n return router.createUrlTree(['/auth/login']);\r\n }),\r\n );\r\n};\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { BaseAuthService } from '../base-auth.service';\r\n\r\nexport const loggedOutGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\r\n const router = inject(Router);\r\n return inject(BaseAuthService).readyLoginState$.pipe(\r\n map((state) => {\r\n if (state !== 'logged-in') {\r\n return true;\r\n }\r\n\r\n return router.createUrlTree(['/']);\r\n }),\r\n );\r\n};\r\n","import { HttpHeaders } from '@angular/common/http';\r\n\r\nexport interface HttpBaseDaoOptions {\r\n withCredentials?: boolean;\r\n headers?: HttpHeaders;\r\n}\r\n\r\nexport const DEFAULT_OPTIONS: HttpBaseDaoOptions = {\r\n withCredentials: true,\r\n};\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { inject } from '@angular/core';\r\nimport { DEFAULT_OPTIONS, HttpBaseDaoOptions } from '../http-base-dao-options';\r\nimport { DaoId } from '../dao-id';\r\n\r\nexport abstract class InternalHttpBaseDao<TI> {\r\n protected readonly http = inject(HttpClient);\r\n protected readonly options: HttpBaseDaoOptions;\r\n protected readonly routeUrl: string;\r\n\r\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\r\n this.routeUrl = routeUrl;\r\n this.options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n };\r\n }\r\n\r\n protected listInternal(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\r\n return this.http.get<TI[]>(this.routeUrl, this.mergeCustomOptions(customOptions));\r\n }\r\n\r\n protected createInternal(data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n if (!data) {\r\n throw new Error('Entry must exist to be created');\r\n }\r\n\r\n return this.http.post<TI>(this.routeUrl, data, this.mergeCustomOptions(customOptions));\r\n }\r\n\r\n protected updateInternal(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n if (!id) {\r\n throw new Error('Entry must exist to be updated');\r\n }\r\n\r\n return this.http.put<TI>(this.routeUrl + '/' + id, data, this.mergeCustomOptions(customOptions));\r\n }\r\n\r\n protected deleteInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n if (!id) {\r\n throw new Error('Entry must exist to be deleted');\r\n }\r\n return this.http.delete<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\r\n }\r\n\r\n protected readInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n return this.http.get<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\r\n }\r\n\r\n private mergeCustomOptions(customOptions: HttpBaseDaoOptions): HttpBaseDaoOptions {\r\n return {\r\n ...this.options,\r\n ...customOptions\r\n };\r\n }\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\r\nimport { DaoId } from './dao-id';\r\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\r\n\r\nexport abstract class HttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\r\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\r\n super(routeUrl, options);\r\n }\r\n\r\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\r\n return this.listInternal(customOptions);\r\n }\r\n\r\n create(entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n return this.createInternal(entry, customOptions);\r\n }\r\n\r\n update(id: DaoId, entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n return this.updateInternal(id, entry, customOptions);\r\n }\r\n\r\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n return this.deleteInternal(id, customOptions);\r\n }\r\n\r\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\r\n return this.readInternal(id, customOptions);\r\n }\r\n}\r\n","import { firstValueFrom } from 'rxjs';\r\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\r\nimport { DaoId } from './dao-id';\r\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\r\n\r\nexport abstract class PromiseHttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\r\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\r\n super(routeUrl, options);\r\n }\r\n\r\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TI[]> {\r\n return firstValueFrom(this.listInternal(customOptions));\r\n }\r\n\r\n create(data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\r\n return firstValueFrom(this.createInternal(data, customOptions));\r\n }\r\n\r\n update(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\r\n return firstValueFrom(this.updateInternal(id, data, customOptions));\r\n }\r\n\r\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\r\n return firstValueFrom(this.deleteInternal(id, customOptions));\r\n }\r\n\r\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\r\n return firstValueFrom(this.readInternal(id, customOptions));\r\n }\r\n}\r\n","import { map, Observable } from 'rxjs';\r\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\r\nimport { DaoId } from './dao-id';\r\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\r\nimport { Converter } from './converter';\r\n\r\nexport abstract class ConvertedHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\r\n protected readonly converter: Converter<TI, TM>;\r\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\r\n super(routeUrl, options);\r\n this.converter = converter;\r\n }\r\n\r\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TM[]> {\r\n return this.listInternal(customOptions).pipe((result) => this.mapServerInterfaceListToModelList(result));\r\n }\r\n\r\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\r\n const createData = this.converter.toJson(entry);\r\n return this.createInternal(createData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\r\n }\r\n\r\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\r\n const updateData = this.converter.toJson(entry);\r\n return this.updateInternal(id, updateData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\r\n }\r\n\r\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\r\n return this.deleteInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\r\n }\r\n\r\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\r\n return this.readInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\r\n }\r\n\r\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\r\n return source$.pipe(\r\n map((list) => {\r\n if (!list?.length) {\r\n return [];\r\n }\r\n\r\n return list.map((elem) => this.converter.fromJson(elem));\r\n })\r\n );\r\n }\r\n\r\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\r\n return source$.pipe(map((element) => this.converter.fromJson(element)));\r\n }\r\n}\r\n","import { firstValueFrom, map, Observable } from 'rxjs';\r\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\r\nimport { DaoId } from './dao-id';\r\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\r\nimport { Converter } from './converter';\r\n\r\nexport abstract class ConvertedPromiseHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\r\n protected readonly converter: Converter<TI, TM>;\r\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\r\n super(routeUrl, options);\r\n this.converter = converter;\r\n }\r\n\r\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TM[]> {\r\n return firstValueFrom(this.listInternal(customOptions).pipe(this.mapServerInterfaceListToModelList.bind(this)));\r\n }\r\n\r\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\r\n const createData = this.converter.toJson(entry);\r\n return firstValueFrom(\r\n this.createInternal(createData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\r\n );\r\n }\r\n\r\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\r\n const updateData = this.converter.toJson(entry);\r\n return firstValueFrom(\r\n this.updateInternal(id, updateData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\r\n );\r\n }\r\n\r\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\r\n return firstValueFrom(this.deleteInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\r\n }\r\n\r\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\r\n return firstValueFrom(this.readInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\r\n }\r\n\r\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\r\n return source$.pipe(\r\n map((list) => {\r\n if (!list?.length) {\r\n return [];\r\n }\r\n\r\n return list.map((elem) => this.converter.fromJson(elem));\r\n }),\r\n );\r\n }\r\n\r\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\r\n return source$.pipe(map((element) => this.converter.fromJson(element)));\r\n }\r\n}\r\n","export abstract class Converter<TI, TM> {\r\n abstract fromJson(response: TI): TM;\r\n abstract toJson(model: Partial<TM>): Partial<TI>;\r\n}\r\n","import { ControlValueAccessor } from '@angular/forms';\r\nimport { Directive, Input, output } from '@angular/core';\r\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\r\n\r\n@Directive()\r\nexport abstract class BaseControlValueAccessor<T = string> implements ControlValueAccessor {\r\n valueChanged = output<T>();\r\n\r\n onChange: ValueChangeCallback<T> | null = null;\r\n onTouched: VoidFunction | null = null;\r\n\r\n disabled = false;\r\n protected _value!: T;\r\n\r\n get value(): T {\r\n return this._value;\r\n }\r\n\r\n @Input() set value(value: T) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (this._value === value) {\r\n return;\r\n }\r\n\r\n this._value = value;\r\n this.onTouched?.();\r\n this.onChange?.(this._value);\r\n this.valueChanged.emit(this._value);\r\n }\r\n\r\n writeValue(value: T): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(onChange: ValueChangeCallback<T>): void {\r\n this.onChange = onChange;\r\n }\r\n\r\n registerOnTouched(onTouched: VoidFunction): void {\r\n this.onTouched = onTouched;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n this.disabled = isDisabled;\r\n }\r\n}\r\n","import { ControlValueAccessor } from '@angular/forms';\r\nimport { Directive, model, signal } from '@angular/core';\r\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\r\n\r\n@Directive()\r\nexport abstract class SignalBaseControlValueAccessor<T = string> implements ControlValueAccessor {\r\n protected onChange: ValueChangeCallback<T> | null = null;\r\n protected onTouched: VoidFunction | null = null;\r\n\r\n value = model<T>();\r\n\r\n readonly disabled = signal(false);\r\n\r\n /**\r\n * Function that will be called by the input to update the value of the form-control and the model\r\n * @param value The new input value passed by $event in the template\r\n */\r\n valueChanged(value: T): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n if (value === this.value()) {\r\n return;\r\n }\r\n\r\n this.onTouched?.();\r\n this.onChange?.(value);\r\n this.value.set(value);\r\n }\r\n\r\n writeValue(value: T): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(onChange: ValueChangeCallback<T>): void {\r\n this.onChange = onChange;\r\n }\r\n\r\n registerOnTouched(onTouched: VoidFunction): void {\r\n this.onTouched = onTouched;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled.set(disabled);\r\n }\r\n}\r\n","import { ElementRef, AfterViewInit, Renderer2, OnDestroy, Directive, input, inject, output } from '@angular/core';\r\nimport { SizingMode } from './sizing-mode';\r\n\r\n@Directive({\r\n selector: '[ngAspectRatio]'\r\n})\r\nexport class NgAspectRatioDirective implements AfterViewInit, OnDestroy {\r\n private readonly renderer = inject(Renderer2);\r\n private readonly hostElem = inject(ElementRef);\r\n private readonly observer: ResizeObserver;\r\n\r\n ngAspectRatio = input.required<number>();\r\n sizingMode = input<SizingMode>('match-parent');\r\n\r\n containerWidthChanged = output<number>();\r\n containerHeightChanged = output<number>();\r\n\r\n private readonly targetRatio = this.ngAspectRatio;\r\n\r\n constructor() {\r\n this.observer = new ResizeObserver(() => {\r\n this.calculateAndSetAspect();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.observer.observe(this.hostElem.nativeElement.parentElement);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.observer.disconnect();\r\n }\r\n\r\n public calculateAndSetAspect(): void {\r\n this.renderer.removeStyle(this.hostElem.nativeElement, 'width');\r\n this.renderer.removeStyle(this.hostElem.nativeElement, 'height');\r\n\r\n let targetWidth: number;\r\n let targetHeight: number;\r\n\r\n if (this.sizingMode() === 'match-parent') {\r\n const hostWidth = this.hostElem.nativeElement.parentElement.offsetWidth;\r\n const hostHeight = this.hostElem.nativeElement.parentElement.offsetHeight;\r\n const hostAspectRatio = hostWidth / hostHeight;\r\n\r\n if (hostAspectRatio >= this.targetRatio()) {\r\n // use full height as base\r\n targetHeight = hostHeight;\r\n targetWidth = targetHeight * this.targetRatio();\r\n } else {\r\n // use full width as base\r\n targetWidth = hostWidth;\r\n targetHeight = targetWidth * (1 / this.targetRatio());\r\n }\r\n } else {\r\n // Add +1 to the dimensions because decimals get rounded\r\n const contentWidth = this.hostElem.nativeElement.offsetWidth + 1;\r\n const contentHeight = this.hostElem.nativeElement.offsetHeight + 1;\r\n\r\n const currentRatio = contentWidth / contentHeight;\r\n if (currentRatio >= this.targetRatio()) {\r\n targetWidth = contentWidth;\r\n targetHeight = targetWidth * (1 / this.targetRatio());\r\n } else {\r\n targetHeight = contentHeight;\r\n targetWidth = targetHeight * this.targetRatio();\r\n }\r\n }\r\n // Set calculated dimensions\r\n this.setAcInnerWidth(targetWidth);\r\n this.setAcInnerHeight(targetHeight);\r\n }\r\n\r\n private setAcInnerWidth(width: number) {\r\n this.containerWidthChanged.emit(width);\r\n this.renderer.setStyle(this.hostElem.nativeElement, 'width', `${width}px`);\r\n }\r\n\r\n private setAcInnerHeight(height: number) {\r\n this.containerHeightChanged.emit(height);\r\n this.renderer.setStyle(this.hostElem.nativeElement, 'height', `${height}px`);\r\n }\r\n}\r\n","import { HorizontalAlignment } from './horizontal-alignment';\r\nimport { VerticalAlignment } from './vertical-alignment';\r\n\r\nexport type FlexAlignment = 'center' | 'flex-start' | 'flex-end';\r\n\r\nexport const alignmentFlexMapping = new Map<HorizontalAlignment | VerticalAlignment, FlexAlignment>([\r\n ['center', 'center'],\r\n ['left', 'flex-start'],\r\n ['right', 'flex-end'],\r\n ['right', 'flex-end'],\r\n ['top', 'flex-start'],\r\n ['bottom', 'flex-end'],\r\n]);\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
1
+ {"version":3,"file":"angular-base-lib.mjs","sources":["../../../../libs/angular-base/src/lib/navigation/navigation.service.ts","../../../../libs/angular-base/src/lib/model-component/base-model-detail.component.ts","../../../../libs/angular-base/src/lib/model-component/base.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-edit.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-list.component.ts","../../../../libs/angular-base/src/lib/navigation/back-button.directive.ts","../../../../libs/angular-base/src/lib/util/is-nil.ts","../../../../libs/angular-base/src/lib/util/remove-nil-values-recursively.ts","../../../../libs/angular-base/src/lib/forms/form-util.ts","../../../../libs/angular-base/src/lib/util/prepare-optional-string.ts","../../../../libs/angular-base/src/lib/auth/models/pending-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/not-logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/base-auth.service.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-in.guard.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-out.guard.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao-options.ts","../../../../libs/angular-base/src/lib/dao/internal/internal-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converter.ts","../../../../libs/angular-base/src/lib/base/base-control-value-accessor.ts","../../../../libs/angular-base/src/lib/base/signal-base-control-value-accessor.ts","../../../../libs/angular-base/src/lib/aspect-container/ng-aspect-ratio.directive.ts","../../../../libs/angular-base/src/lib/aspect-container/alignment-flex-mapping.ts","../../../../libs/angular-base/src/angular-base-lib.ts"],"sourcesContent":["import { NavigationEnd, Router } from '@angular/router';\nimport { inject, Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private history: string[] = [];\n private readonly router = inject(Router);\n private readonly location = inject(Location);\n\n constructor() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n reset(): void {\n this.history = [];\n }\n\n back(fallbackRoute = '/'): void {\n this.history.pop();\n if (this.history.length > 0) {\n this.location.back();\n } else {\n this.router.navigate([fallbackRoute]);\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NavigationService } from '../navigation/navigation.service';\nimport { ModelAction } from './action';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelDetailComponent<TM extends Identifiable> {\n model: TM | null = null;\n\n protected readonly router = inject(Router);\n protected readonly navigationService = inject(NavigationService);\n\n protected constructor(protected baseRoute: string) {}\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showList();\n break;\n\n case 'edit':\n this.editModel();\n break;\n\n case 'delete':\n this.deleteModel();\n break;\n }\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n async editModel(): Promise<void> {\n if (!this.model) {\n return;\n }\n\n await this.router.navigate([`${this.baseRoute}/edit`, this.model.id]);\n }\n\n async deleteModel(): Promise<void> {\n const model = this.model;\n\n if (!model) {\n return;\n }\n\n if (await this.handleDeleteModel(model)) {\n await this.router.navigate([`${this.baseRoute}`]);\n }\n }\n\n goBack(): void {\n this.navigationService.back(this.baseRoute);\n }\n\n abstract handleDeleteModel(model: TM): Promise<boolean>;\n}\n","/**\n * Component used for all pages that can directly navigate back to the home page if no other route was found\n */\nimport { inject } from '@angular/core';\nimport { NavigationService } from '../navigation/navigation.service';\n\nexport abstract class BaseComponent {\n backRoute = '/';\n\n protected readonly navigationService = inject(NavigationService);\n\n goBack(): void {\n this.navigationService.back(this.backRoute);\n }\n}\n","import { Router } from '@angular/router';\nimport { BaseComponent } from './base.component';\nimport { inject } from '@angular/core';\nimport { ModelAction } from './action';\n\nexport abstract class BaseModelComponent<TM> extends BaseComponent {\n protected readonly router = inject(Router);\n\n protected constructor(protected baseRoute: string) {\n super();\n this.backRoute = this.baseRoute;\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'back_to-list':\n this.showList();\n break;\n }\n }\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelEditComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n model: TM | null = null;\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { ModelAction } from './action';\nimport { DaoId, Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelListComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n protected constructor(baseRoute: string) {\n super(baseRoute);\n\n this.backRoute = '/';\n }\n\n override handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showDetail(modelAction.model.id);\n break;\n\n case 'edit':\n this.editModel(modelAction.model.id);\n break;\n\n case 'delete':\n this.deleteModel(modelAction.model);\n break;\n }\n }\n\n showDetail(id: DaoId): void {\n this.router.navigate([this.baseRoute, id]);\n }\n\n editModel(id: DaoId): void {\n this.router.navigate([`${this.baseRoute}/edit`, id]);\n }\n\n createModel(): void {\n this.router.navigate([`${this.baseRoute}/add`]);\n }\n\n abstract deleteModel(model: TM): Promise<boolean>;\n}\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { NavigationService } from './navigation.service';\n\n@Directive({\n selector: '[ngBackButton]',\n standalone: true\n})\nexport class BackButtonDirective {\n private readonly navigation = inject(NavigationService);\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","export const isNil = (obj: unknown): boolean => obj === null || obj === undefined;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNil } from './is-nil';\n\nexport const removeNullValuesRecursively = (object: any): any => {\n if (Array.isArray(object)) {\n const newObject = [];\n\n for (const obj of object) {\n newObject.push(removeNullValuesRecursively(obj));\n }\n\n return newObject;\n } else if (typeof object === 'object') {\n const newObject: any = {};\n\n for (const key in object) {\n if (isNil(object[key])) {\n continue;\n }\n\n if (typeof object[key] === 'object') {\n const objectToSet = removeNullValuesRecursively(object[key]);\n if (Object.keys(objectToSet)?.length) {\n newObject[key] = objectToSet;\n }\n } else {\n newObject[key] = object[key];\n }\n }\n\n return newObject;\n } else {\n return object;\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { removeNullValuesRecursively } from '../util/remove-nil-values-recursively';\n\nexport class FormUtil {\n static markAllControlsAsTouched(formGroup: FormGroup, recursive = true): void {\n Object.values(formGroup.controls).forEach((control: AbstractControl) => {\n if (recursive && control instanceof FormGroup) {\n FormUtil.markAllControlsAsTouched(control);\n } else {\n control.patchValue(control.value);\n control.markAllAsTouched();\n }\n });\n }\n\n static getUpdatedFormData(objectToAdd: any, oldData: any, newData: any): any {\n for (const newKey in newData) {\n const [, changed] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\n if (changed && newData[newKey]) {\n objectToAdd[newKey] = removeNullValuesRecursively(newData[newKey]);\n }\n }\n return objectToAdd;\n }\n\n static getDifferenceRecursively(oldData: any, newData: any): [any, boolean] {\n let changed = false;\n let object: any = {};\n\n if (typeof newData !== typeof oldData) {\n changed = true;\n object = newData;\n } else if (newData && typeof newData === 'object') {\n const allKeys = new Set([...Object.keys(newData), ...Object.keys(oldData)]);\n for (const newKey of allKeys) {\n if (!newData[newKey] && !oldData[newKey]) {\n continue;\n }\n\n // Check recursively\n const [innerDiff, innerChanged] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\n if (innerChanged) {\n changed = true;\n object[newKey] = innerDiff;\n }\n }\n } else if (newData !== oldData) {\n changed = true;\n object = newData;\n }\n\n return [object, changed];\n }\n}\n","export const prepareOptionalString = (value: string | null | undefined): string | undefined => {\n if (value === null || value === '') {\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n return value;\n};\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class PendingAuthState implements BaseAuthState<unknown> {\n readonly loginState: LoginState = 'pending';\n readonly user = null;\n}\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class LoggedInAuthState<T> implements BaseAuthState<T> {\n readonly loginState: LoginState = 'logged-in';\n readonly user: T;\n\n constructor(user: T) {\n this.user = user;\n }\n}\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class NotLoggedInAuthState implements BaseAuthState<unknown> {\n readonly loginState: LoginState = 'logged-out';\n readonly user = null;\n}\n","import { BehaviorSubject, filter, Observable } from 'rxjs';\nimport { BaseAuthState, LoggedInAuthState, LoginState, NotLoggedInAuthState, PendingAuthState } from './models';\nimport { map } from 'rxjs/operators';\n\nexport abstract class BaseAuthService<T> {\n private readonly authStateSubject = new BehaviorSubject<BaseAuthState<T>>(new PendingAuthState());\n private readonly _authState$: Observable<BaseAuthState<T>>;\n private readonly _loginState$: Observable<LoginState>;\n private readonly _readyLoginState$: Observable<LoginState>;\n private readonly _readyAuthState$: Observable<BaseAuthState<T>>;\n private readonly _user$: Observable<T | null>;\n private readonly _readyUser$: Observable<T | null>;\n private readonly _isLoggedIn$: Observable<boolean>;\n private readonly defaultLoginRoute = '/auth/login';\n\n get authState$(): Observable<BaseAuthState<T>> {\n return this._authState$;\n }\n\n get loginState$(): Observable<LoginState> {\n return this._loginState$;\n }\n\n get readyLoginState$(): Observable<LoginState> {\n return this._readyLoginState$;\n }\n\n get readyAuthState$(): Observable<BaseAuthState<T>> {\n return this._readyAuthState$;\n }\n\n get user$(): Observable<T | null> {\n return this._user$;\n }\n\n get readyUser$(): Observable<T | null> {\n return this._readyUser$;\n }\n\n get isLoggedIn$(): Observable<boolean> {\n return this._isLoggedIn$;\n }\n\n get loginRoute(): string {\n return this.defaultLoginRoute;\n }\n\n protected constructor() {\n this._authState$ = this.authStateSubject.asObservable();\n this._user$ = this._authState$.pipe(map((elem) => elem.user));\n this._loginState$ = this._authState$.pipe(map((elem) => elem.loginState));\n this._isLoggedIn$ = this._loginState$.pipe(map((state) => state === 'logged-in'));\n\n this._readyAuthState$ = this._authState$.pipe(filter((elem) => elem.loginState !== 'pending'));\n this._readyLoginState$ = this._readyAuthState$.pipe(map((elem) => elem.loginState));\n this._readyUser$ = this._readyAuthState$.pipe(map((elem) => elem.user));\n }\n\n protected userLoggedIn(user: T): void {\n this.authStateSubject.next(new LoggedInAuthState<T>(user));\n }\n\n protected userLoggedOut(): void {\n this.authStateSubject.next(new NotLoggedInAuthState());\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BaseAuthService } from '../base-auth.service';\nexport const loggedInGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\n const router = inject(Router);\n return inject(BaseAuthService).readyAuthState$.pipe(\n map((state) => {\n if (state.loginState === 'logged-in') {\n return true;\n }\n\n return router.createUrlTree(['/auth/login']);\n }),\n );\n};\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BaseAuthService } from '../base-auth.service';\n\nexport const loggedOutGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\n const router = inject(Router);\n return inject(BaseAuthService).readyLoginState$.pipe(\n map((state) => {\n if (state !== 'logged-in') {\n return true;\n }\n\n return router.createUrlTree(['/']);\n }),\n );\n};\n","import { HttpHeaders } from '@angular/common/http';\n\nexport interface HttpBaseDaoOptions {\n withCredentials?: boolean;\n headers?: HttpHeaders;\n}\n\nexport const DEFAULT_OPTIONS: HttpBaseDaoOptions = {\n withCredentials: true,\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { inject } from '@angular/core';\nimport { DEFAULT_OPTIONS, HttpBaseDaoOptions } from '../http-base-dao-options';\nimport { DaoId } from '../dao-id';\n\nexport abstract class InternalHttpBaseDao<TI> {\n protected readonly http = inject(HttpClient);\n protected readonly options: HttpBaseDaoOptions;\n protected readonly routeUrl: string;\n\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n this.routeUrl = routeUrl;\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options\n };\n }\n\n protected listInternal(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\n return this.http.get<TI[]>(this.routeUrl, this.mergeCustomOptions(customOptions));\n }\n\n protected createInternal(data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!data) {\n throw new Error('Entry must exist to be created');\n }\n\n return this.http.post<TI>(this.routeUrl, data, this.mergeCustomOptions(customOptions));\n }\n\n protected updateInternal(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!id) {\n throw new Error('Entry must exist to be updated');\n }\n\n return this.http.put<TI>(this.routeUrl + '/' + id, data, this.mergeCustomOptions(customOptions));\n }\n\n protected deleteInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!id) {\n throw new Error('Entry must exist to be deleted');\n }\n return this.http.delete<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\n }\n\n protected readInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.http.get<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\n }\n\n private mergeCustomOptions(customOptions: HttpBaseDaoOptions): HttpBaseDaoOptions {\n return {\n ...this.options,\n ...customOptions\n };\n }\n}\n","import { Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\n\nexport abstract class HttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\n return this.listInternal(customOptions);\n }\n\n create(entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.createInternal(entry, customOptions);\n }\n\n update(id: DaoId, entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.updateInternal(id, entry, customOptions);\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.deleteInternal(id, customOptions);\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.readInternal(id, customOptions);\n }\n}\n","import { firstValueFrom } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\n\nexport abstract class PromiseHttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TI[]> {\n return firstValueFrom(this.listInternal(customOptions));\n }\n\n create(data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.createInternal(data, customOptions));\n }\n\n update(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.updateInternal(id, data, customOptions));\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.deleteInternal(id, customOptions));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.readInternal(id, customOptions));\n }\n}\n","import { map, Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\nimport { Converter } from './converter';\n\nexport abstract class ConvertedHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\n protected readonly converter: Converter<TI, TM>;\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n this.converter = converter;\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TM[]> {\n return this.listInternal(customOptions).pipe((result) => this.mapServerInterfaceListToModelList(result));\n }\n\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n const createData = this.converter.toJson(entry);\n return this.createInternal(createData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n const updateData = this.converter.toJson(entry);\n return this.updateInternal(id, updateData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n return this.deleteInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n return this.readInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\n return source$.pipe(\n map((list) => {\n if (!list?.length) {\n return [];\n }\n\n return list.map((elem) => this.converter.fromJson(elem));\n })\n );\n }\n\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\n return source$.pipe(map((element) => this.converter.fromJson(element)));\n }\n}\n","import { firstValueFrom, map, Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\nimport { Converter } from './converter';\n\nexport abstract class ConvertedPromiseHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\n protected readonly converter: Converter<TI, TM>;\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n this.converter = converter;\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TM[]> {\n return firstValueFrom(this.listInternal(customOptions).pipe(this.mapServerInterfaceListToModelList.bind(this)));\n }\n\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n const createData = this.converter.toJson(entry);\n return firstValueFrom(\n this.createInternal(createData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\n );\n }\n\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n const updateData = this.converter.toJson(entry);\n return firstValueFrom(\n this.updateInternal(id, updateData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\n );\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n return firstValueFrom(this.deleteInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n return firstValueFrom(this.readInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\n }\n\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\n return source$.pipe(\n map((list) => {\n if (!list?.length) {\n return [];\n }\n\n return list.map((elem) => this.converter.fromJson(elem));\n }),\n );\n }\n\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\n return source$.pipe(map((element) => this.converter.fromJson(element)));\n }\n}\n","export abstract class Converter<TI, TM> {\n abstract fromJson(response: TI): TM;\n abstract toJson(model: Partial<TM>): Partial<TI>;\n}\n","import { ControlValueAccessor } from '@angular/forms';\nimport { Directive, Input, output } from '@angular/core';\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\n\n@Directive()\nexport abstract class BaseControlValueAccessor<T = string> implements ControlValueAccessor {\n valueChanged = output<T>();\n\n onChange: ValueChangeCallback<T> | null = null;\n onTouched: VoidFunction | null = null;\n\n disabled = false;\n protected _value!: T;\n\n get value(): T {\n return this._value;\n }\n\n @Input() set value(value: T) {\n if (this.disabled) {\n return;\n }\n\n if (this._value === value) {\n return;\n }\n\n this._value = value;\n this.onTouched?.();\n this.onChange?.(this._value);\n this.valueChanged.emit(this._value);\n }\n\n writeValue(value: T): void {\n this.value = value;\n }\n\n registerOnChange(onChange: ValueChangeCallback<T>): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: VoidFunction): void {\n this.onTouched = onTouched;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n}\n","import { ControlValueAccessor } from '@angular/forms';\nimport { Directive, model, signal } from '@angular/core';\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\n\n@Directive()\nexport abstract class SignalBaseControlValueAccessor<T = string> implements ControlValueAccessor {\n protected onChange: ValueChangeCallback<T> | null = null;\n protected onTouched: VoidFunction | null = null;\n\n value = model<T>();\n\n readonly disabled = signal(false);\n\n /**\n * Function that will be called by the input to update the value of the form-control and the model\n * @param value The new input value passed by $event in the template\n */\n valueChanged(value: T): void {\n if (this.disabled()) {\n return;\n }\n\n if (value === this.value()) {\n return;\n }\n\n this.onTouched?.();\n this.onChange?.(value);\n this.value.set(value);\n }\n\n writeValue(value: T): void {\n this.value.set(value);\n }\n\n registerOnChange(onChange: ValueChangeCallback<T>): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: VoidFunction): void {\n this.onTouched = onTouched;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled.set(disabled);\n }\n}\n","import { ElementRef, AfterViewInit, Renderer2, OnDestroy, Directive, input, inject, output } from '@angular/core';\nimport { SizingMode } from './sizing-mode';\n\n@Directive({\n selector: '[ngAspectRatio]'\n})\nexport class NgAspectRatioDirective implements AfterViewInit, OnDestroy {\n private readonly renderer = inject(Renderer2);\n private readonly hostElem = inject(ElementRef);\n private readonly observer: ResizeObserver;\n\n ngAspectRatio = input.required<number>();\n sizingMode = input<SizingMode>('match-parent');\n\n containerWidthChanged = output<number>();\n containerHeightChanged = output<number>();\n\n private readonly targetRatio = this.ngAspectRatio;\n\n constructor() {\n this.observer = new ResizeObserver(() => {\n this.calculateAndSetAspect();\n });\n }\n\n ngAfterViewInit() {\n this.observer.observe(this.hostElem.nativeElement.parentElement);\n }\n\n ngOnDestroy() {\n this.observer.disconnect();\n }\n\n public calculateAndSetAspect(): void {\n this.renderer.removeStyle(this.hostElem.nativeElement, 'width');\n this.renderer.removeStyle(this.hostElem.nativeElement, 'height');\n\n let targetWidth: number;\n let targetHeight: number;\n\n if (this.sizingMode() === 'match-parent') {\n const hostWidth = this.hostElem.nativeElement.parentElement.offsetWidth;\n const hostHeight = this.hostElem.nativeElement.parentElement.offsetHeight;\n const hostAspectRatio = hostWidth / hostHeight;\n\n if (hostAspectRatio >= this.targetRatio()) {\n // use full height as base\n targetHeight = hostHeight;\n targetWidth = targetHeight * this.targetRatio();\n } else {\n // use full width as base\n targetWidth = hostWidth;\n targetHeight = targetWidth * (1 / this.targetRatio());\n }\n } else {\n // Add +1 to the dimensions because decimals get rounded\n const contentWidth = this.hostElem.nativeElement.offsetWidth + 1;\n const contentHeight = this.hostElem.nativeElement.offsetHeight + 1;\n\n const currentRatio = contentWidth / contentHeight;\n if (currentRatio >= this.targetRatio()) {\n targetWidth = contentWidth;\n targetHeight = targetWidth * (1 / this.targetRatio());\n } else {\n targetHeight = contentHeight;\n targetWidth = targetHeight * this.targetRatio();\n }\n }\n // Set calculated dimensions\n this.setAcInnerWidth(targetWidth);\n this.setAcInnerHeight(targetHeight);\n }\n\n private setAcInnerWidth(width: number) {\n this.containerWidthChanged.emit(width);\n this.renderer.setStyle(this.hostElem.nativeElement, 'width', `${width}px`);\n }\n\n private setAcInnerHeight(height: number) {\n this.containerHeightChanged.emit(height);\n this.renderer.setStyle(this.hostElem.nativeElement, 'height', `${height}px`);\n }\n}\n","import { HorizontalAlignment } from './horizontal-alignment';\nimport { VerticalAlignment } from './vertical-alignment';\n\nexport type FlexAlignment = 'center' | 'flex-start' | 'flex-end';\n\nexport const alignmentFlexMapping = new Map<HorizontalAlignment | VerticalAlignment, FlexAlignment>([\n ['center', 'center'],\n ['left', 'flex-start'],\n ['right', 'flex-end'],\n ['right', 'flex-end'],\n ['top', 'flex-start'],\n ['bottom', 'flex-end'],\n]);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-base-lib",
3
- "version": "21.0.1",
3
+ "version": "21.0.3",
4
4
  "description": "Angular dao-feature, auth, model-components, navigation-service and other abstract helpers",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -39,6 +39,7 @@
39
39
  "default": "./fesm2022/angular-base-lib.mjs"
40
40
  }
41
41
  },
42
+ "type": "module",
42
43
  "dependencies": {
43
44
  "tslib": "^2.3.0"
44
45
  }