@luigi-project/client-support-angular 21.0.2-dev.20260190039 → 21.1.0-dev.202601150036
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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This library provides several features which make it easier to run your Angular application inside the Luigi micro frontend framework.
|
|
4
4
|
If you want to know more about Luigi, please have a look at the [Luigi homepage](https://luigi-project.io/).
|
|
5
5
|
|
|
6
|
-
> **NOTE:** Starting
|
|
6
|
+
> **NOTE:** Starting with version 20, this package will be aligned with Angular's major versioning. For example, '@luigi-project/client-support-angular@^20' will support '@angular/core@^20', and so on.
|
|
7
7
|
|
|
8
8
|
## How to use the library
|
|
9
9
|
|
|
@@ -43,7 +43,32 @@ These are the features provided by the library:
|
|
|
43
43
|
|
|
44
44
|
You can inject this service inside your Angular items in order to:
|
|
45
45
|
* Get the current (latest) [context](https://docs.luigi-project.io/docs/navigation-advanced?section=contexts) that we received from Luigi Core
|
|
46
|
-
* Provide an `Observable<
|
|
46
|
+
* Provide an `Observable<IContextMessage>` and `Signal<IContextMessage>` where through subscribing, you can get any context change
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
contextSignal = signal<Context | undefined>(undefined);
|
|
50
|
+
|
|
51
|
+
constructor(private luigiContextService: LuigiContextService) {
|
|
52
|
+
// check context data via Observable
|
|
53
|
+
luigiContextService.contextObservable()
|
|
54
|
+
.pipe(takeUntilDestroyed())
|
|
55
|
+
.subscribe((data: IContextMessage) => {
|
|
56
|
+
if (data) {
|
|
57
|
+
this.contextSignal.set(data.context || {});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// check context data via Signal
|
|
62
|
+
effect(() => {
|
|
63
|
+
const data: IContextMessage = luigiContextService.contextSignal()();
|
|
64
|
+
|
|
65
|
+
if (data) {
|
|
66
|
+
this.contextSignal.set(data.context || {});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
```
|
|
47
72
|
|
|
48
73
|
**LuigiContextService** is an abstract class. Its implementation is in the **LuigiContextServiceImpl** class.
|
|
49
74
|
If you need to change or extend the implementation, you can easily create a new class extending **LuigiContextServiceImpl**:
|
|
@@ -1,25 +1,79 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component,
|
|
2
|
+
import { Component, APP_INITIALIZER, NgModule, signal, inject, NgZone, Injectable, provideZonelessChangeDetection } from '@angular/core';
|
|
3
|
+
import { LuigiMockEngine } from '@luigi-project/testing-utilities';
|
|
3
4
|
import * as i1 from '@angular/router';
|
|
4
5
|
import { BaseRouteReuseStrategy, NavigationEnd, convertToParamMap, RouterModule, RouteReuseStrategy } from '@angular/router';
|
|
5
|
-
import {
|
|
6
|
+
import { addInitListener, addContextUpdateListener, uxManager, linkManager, isLuigiClientInitialized } from '@luigi-project/client';
|
|
7
|
+
import { ReplaySubject } from 'rxjs';
|
|
6
8
|
import { first, filter } from 'rxjs/operators';
|
|
7
|
-
import {
|
|
8
|
-
import { LuigiMockEngine } from '@luigi-project/testing-utilities';
|
|
9
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
10
|
|
|
10
11
|
class LuigiPreloadComponent {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LuigiPreloadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.2", type: LuigiPreloadComponent, isStandalone: true, selector: "lib-client-support-angular", ngImport: i0, template: "<p luigipreload=\"luigipreload\"></p>\n" }); }
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiPreloadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.8", type: LuigiPreloadComponent, isStandalone: true, selector: "lib-client-support-angular", ngImport: i0, template: "<p luigipreload=\"luigipreload\"></p>\n" }); }
|
|
15
14
|
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiPreloadComponent, decorators: [{
|
|
17
16
|
type: Component,
|
|
18
17
|
args: [{ selector: 'lib-client-support-angular', template: "<p luigipreload=\"luigipreload\"></p>\n" }]
|
|
19
|
-
}]
|
|
18
|
+
}] });
|
|
19
|
+
|
|
20
|
+
// @dynamic
|
|
21
|
+
/*
|
|
22
|
+
* This class mocks Luigi Core related functionality.
|
|
23
|
+
*
|
|
24
|
+
* Micro Frontends that use Luigi Client would usually communicate with Luigi Core
|
|
25
|
+
* back and forth. When testing Luigi Client based components, Luigi Core might
|
|
26
|
+
* not be present which leads into limitations on integration/e2e testing for standalone
|
|
27
|
+
* microfrontends.
|
|
28
|
+
*
|
|
29
|
+
* This module adds a hook to the window postMessage API by adding an event listener to the
|
|
30
|
+
* global message event of the window object and mocking the callback.
|
|
31
|
+
* In the normal workflow this message would picked up by Luigi Core which then sends the response back.
|
|
32
|
+
*/
|
|
33
|
+
class LuigiMockModule {
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
35
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: LuigiMockModule }); }
|
|
36
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiMockModule, providers: [
|
|
37
|
+
{
|
|
38
|
+
provide: APP_INITIALIZER,
|
|
39
|
+
useFactory: LuigiMockEngine.initPostMessageHook,
|
|
40
|
+
multi: true
|
|
41
|
+
}
|
|
42
|
+
] }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiMockModule, decorators: [{
|
|
45
|
+
type: NgModule,
|
|
46
|
+
args: [{
|
|
47
|
+
providers: [
|
|
48
|
+
{
|
|
49
|
+
provide: APP_INITIALIZER,
|
|
50
|
+
useFactory: LuigiMockEngine.initPostMessageHook,
|
|
51
|
+
multi: true
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}]
|
|
55
|
+
}] });
|
|
56
|
+
|
|
57
|
+
class LuigiActivatedRouteSnapshotHelper {
|
|
58
|
+
static { this._current = null; }
|
|
59
|
+
static getCurrent() {
|
|
60
|
+
return LuigiActivatedRouteSnapshotHelper._current;
|
|
61
|
+
}
|
|
62
|
+
static setCurrent(current) {
|
|
63
|
+
LuigiActivatedRouteSnapshotHelper._current = current;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
class LuigiRouteStrategy extends BaseRouteReuseStrategy {
|
|
68
|
+
retrieve(route) {
|
|
69
|
+
LuigiActivatedRouteSnapshotHelper.setCurrent(route);
|
|
70
|
+
return super.retrieve(route);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
20
73
|
|
|
21
74
|
class LuigiContextService {
|
|
22
75
|
}
|
|
76
|
+
|
|
23
77
|
var ILuigiContextTypes;
|
|
24
78
|
(function (ILuigiContextTypes) {
|
|
25
79
|
ILuigiContextTypes[ILuigiContextTypes["INIT"] = 0] = "INIT";
|
|
@@ -27,17 +81,32 @@ var ILuigiContextTypes;
|
|
|
27
81
|
})(ILuigiContextTypes || (ILuigiContextTypes = {}));
|
|
28
82
|
|
|
29
83
|
class LuigiContextServiceImpl {
|
|
30
|
-
constructor(
|
|
31
|
-
this.
|
|
84
|
+
constructor() {
|
|
85
|
+
this.signalContext = signal(undefined, ...(ngDevMode ? [{ debugName: "signalContext" }] : []));
|
|
32
86
|
this.subject = new ReplaySubject(1);
|
|
33
|
-
this.
|
|
34
|
-
addInitListener(initContext => {
|
|
87
|
+
this.ngZone = inject(NgZone);
|
|
88
|
+
addInitListener((initContext) => {
|
|
35
89
|
this.addListener(ILuigiContextTypes.INIT, initContext);
|
|
36
90
|
});
|
|
37
|
-
addContextUpdateListener(updateContext => {
|
|
91
|
+
addContextUpdateListener((updateContext) => {
|
|
38
92
|
this.addListener(ILuigiContextTypes.UPDATE, updateContext);
|
|
39
93
|
});
|
|
40
94
|
}
|
|
95
|
+
addListener(contextType, context) {
|
|
96
|
+
this.setContext({
|
|
97
|
+
contextType,
|
|
98
|
+
context
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get a signal that emits when context is set.
|
|
103
|
+
*/
|
|
104
|
+
contextSignal() {
|
|
105
|
+
return this.signalContext.asReadonly();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get an observable that emits when context is set.
|
|
109
|
+
*/
|
|
41
110
|
contextObservable() {
|
|
42
111
|
return this.subject.asObservable();
|
|
43
112
|
}
|
|
@@ -45,22 +114,21 @@ class LuigiContextServiceImpl {
|
|
|
45
114
|
* Get latest context object retrieved from luigi core application or empty object, if not yet set.
|
|
46
115
|
*/
|
|
47
116
|
getContext() {
|
|
48
|
-
return
|
|
117
|
+
return this.currentContext?.context || {};
|
|
49
118
|
}
|
|
50
119
|
/**
|
|
51
120
|
* Get a promise that resolves when context is set.
|
|
52
121
|
*/
|
|
53
122
|
getContextAsync() {
|
|
54
123
|
return new Promise((resolve, reject) => {
|
|
55
|
-
|
|
124
|
+
const context = this.getContext();
|
|
125
|
+
if (this.isObject(context) && Object.keys(context)?.length) {
|
|
56
126
|
resolve(this.getContext());
|
|
57
127
|
}
|
|
58
128
|
else {
|
|
59
129
|
this.contextObservable()
|
|
60
130
|
.pipe(first())
|
|
61
|
-
.subscribe(ctx =>
|
|
62
|
-
resolve(ctx.context);
|
|
63
|
-
});
|
|
131
|
+
.subscribe((ctx) => resolve(ctx.context));
|
|
64
132
|
}
|
|
65
133
|
});
|
|
66
134
|
}
|
|
@@ -76,58 +144,32 @@ class LuigiContextServiceImpl {
|
|
|
76
144
|
* Set current context
|
|
77
145
|
*/
|
|
78
146
|
setContext(obj) {
|
|
79
|
-
this.
|
|
147
|
+
this.ngZone.run(() => {
|
|
80
148
|
this.currentContext = obj;
|
|
149
|
+
this.signalContext.set(obj);
|
|
81
150
|
this.subject.next(obj);
|
|
82
151
|
});
|
|
83
152
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
contextType,
|
|
87
|
-
context
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LuigiContextServiceImpl, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
91
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LuigiContextServiceImpl, providedIn: 'root' }); }
|
|
153
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiContextServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
154
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiContextServiceImpl, providedIn: 'root' }); }
|
|
92
155
|
}
|
|
93
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiContextServiceImpl, decorators: [{
|
|
94
157
|
type: Injectable,
|
|
95
158
|
args: [{
|
|
96
159
|
providedIn: 'root'
|
|
97
160
|
}]
|
|
98
|
-
}], ctorParameters: () => [
|
|
99
|
-
|
|
100
|
-
class LuigiActivatedRouteSnapshotHelper {
|
|
101
|
-
static { this._current = null; }
|
|
102
|
-
static getCurrent() {
|
|
103
|
-
return LuigiActivatedRouteSnapshotHelper._current;
|
|
104
|
-
}
|
|
105
|
-
static setCurrent(current) {
|
|
106
|
-
LuigiActivatedRouteSnapshotHelper._current = current;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
class LuigiRouteStrategy extends BaseRouteReuseStrategy {
|
|
111
|
-
retrieve(route) {
|
|
112
|
-
LuigiActivatedRouteSnapshotHelper.setCurrent(route);
|
|
113
|
-
return super.retrieve(route);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
161
|
+
}], ctorParameters: () => [] });
|
|
116
162
|
|
|
117
163
|
class LuigiAutoRoutingService {
|
|
118
164
|
constructor(router, luigiContextService) {
|
|
119
165
|
this.router = router;
|
|
120
166
|
this.luigiContextService = luigiContextService;
|
|
121
|
-
this.
|
|
122
|
-
|
|
167
|
+
this.router.events
|
|
168
|
+
.pipe(this.doFilter(), takeUntilDestroyed())
|
|
169
|
+
.subscribe((event) => this.doSubscription(event));
|
|
123
170
|
}
|
|
124
171
|
doFilter() {
|
|
125
|
-
return filter((event) =>
|
|
126
|
-
return !!(event instanceof NavigationEnd &&
|
|
127
|
-
event.url &&
|
|
128
|
-
event.url.length > 0 &&
|
|
129
|
-
!(history.state && history.state.luigiInduced));
|
|
130
|
-
});
|
|
172
|
+
return filter((event) => !!(event instanceof NavigationEnd && event?.url?.length && !history?.state?.luigiInduced));
|
|
131
173
|
}
|
|
132
174
|
/**
|
|
133
175
|
* This method will be take in consideration angular route that having in data object the paramter
|
|
@@ -144,11 +186,11 @@ class LuigiAutoRoutingService {
|
|
|
144
186
|
let current = LuigiActivatedRouteSnapshotHelper.getCurrent();
|
|
145
187
|
if (!current) {
|
|
146
188
|
current = this.router.routerState.root.snapshot;
|
|
147
|
-
while (current?.children?.length
|
|
189
|
+
while (current?.children?.length) {
|
|
148
190
|
// handle multiple children
|
|
149
191
|
let primary = null;
|
|
150
|
-
current
|
|
151
|
-
if (childSnapshot
|
|
192
|
+
current.children.forEach((childSnapshot) => {
|
|
193
|
+
if (childSnapshot?.outlet === 'primary') {
|
|
152
194
|
primary = childSnapshot;
|
|
153
195
|
}
|
|
154
196
|
});
|
|
@@ -163,7 +205,7 @@ class LuigiAutoRoutingService {
|
|
|
163
205
|
}
|
|
164
206
|
}
|
|
165
207
|
}
|
|
166
|
-
if (current?.data &&
|
|
208
|
+
if (current?.data && this.isClientInitialized()) {
|
|
167
209
|
const ux = uxManager();
|
|
168
210
|
let lm = linkManager().withoutSync();
|
|
169
211
|
let route;
|
|
@@ -187,11 +229,11 @@ class LuigiAutoRoutingService {
|
|
|
187
229
|
const truncate = current.data.fromVirtualTreeRoot.truncate;
|
|
188
230
|
if (truncate) {
|
|
189
231
|
if (truncate.indexOf('*') === 0) {
|
|
190
|
-
const index = url.indexOf(truncate.
|
|
191
|
-
url = url.
|
|
232
|
+
const index = url.indexOf(truncate.substring(1));
|
|
233
|
+
url = url.substring(index + truncate.length - 1);
|
|
192
234
|
}
|
|
193
235
|
else if (url.indexOf(truncate) === 0) {
|
|
194
|
-
url = url.
|
|
236
|
+
url = url.substring(truncate.length);
|
|
195
237
|
}
|
|
196
238
|
}
|
|
197
239
|
route = url;
|
|
@@ -233,13 +275,13 @@ class LuigiAutoRoutingService {
|
|
|
233
275
|
}
|
|
234
276
|
return allParams;
|
|
235
277
|
}
|
|
236
|
-
|
|
237
|
-
|
|
278
|
+
isClientInitialized() {
|
|
279
|
+
return isLuigiClientInitialized();
|
|
238
280
|
}
|
|
239
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
240
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.
|
|
281
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiAutoRoutingService, deps: [{ token: i1.Router }, { token: LuigiContextService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
282
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiAutoRoutingService, providedIn: 'root' }); }
|
|
241
283
|
}
|
|
242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiAutoRoutingService, decorators: [{
|
|
243
285
|
type: Injectable,
|
|
244
286
|
args: [{
|
|
245
287
|
providedIn: 'root'
|
|
@@ -274,9 +316,10 @@ const staticRoutes = [
|
|
|
274
316
|
];
|
|
275
317
|
class LuigiAngularSupportModule {
|
|
276
318
|
constructor(navigation, context) { }
|
|
277
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
278
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.
|
|
279
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.
|
|
319
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiAngularSupportModule, deps: [{ token: LuigiAutoRoutingService }, { token: LuigiContextService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
320
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: LuigiAngularSupportModule, imports: [i1.RouterModule] }); }
|
|
321
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiAngularSupportModule, providers: [
|
|
322
|
+
provideZonelessChangeDetection(),
|
|
280
323
|
{
|
|
281
324
|
provide: LuigiContextService,
|
|
282
325
|
useClass: LuigiContextServiceImpl
|
|
@@ -287,11 +330,12 @@ class LuigiAngularSupportModule {
|
|
|
287
330
|
}
|
|
288
331
|
], imports: [RouterModule.forChild(staticRoutes)] }); }
|
|
289
332
|
}
|
|
290
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
333
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: LuigiAngularSupportModule, decorators: [{
|
|
291
334
|
type: NgModule,
|
|
292
335
|
args: [{
|
|
293
336
|
imports: [RouterModule.forChild(staticRoutes)],
|
|
294
337
|
providers: [
|
|
338
|
+
provideZonelessChangeDetection(),
|
|
295
339
|
{
|
|
296
340
|
provide: LuigiContextService,
|
|
297
341
|
useClass: LuigiContextServiceImpl
|
|
@@ -304,43 +348,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImpor
|
|
|
304
348
|
}]
|
|
305
349
|
}], ctorParameters: () => [{ type: LuigiAutoRoutingService }, { type: LuigiContextService }] });
|
|
306
350
|
|
|
307
|
-
// @dynamic
|
|
308
|
-
/*
|
|
309
|
-
* This class mocks Luigi Core related functionality.
|
|
310
|
-
*
|
|
311
|
-
* Micro Frontends that use Luigi Client would usually communicate with Luigi Core
|
|
312
|
-
* back and forth. When testing Luigi Client based components, Luigi Core might
|
|
313
|
-
* not be present which leads into limitations on integration/e2e testing for standalone
|
|
314
|
-
* microfrontends.
|
|
315
|
-
*
|
|
316
|
-
* This module adds a hook to the window postMessage API by adding an event listener to the
|
|
317
|
-
* global message event of the window object and mocking the callback.
|
|
318
|
-
* In the normal workflow this message would picked up by Luigi Core which then sends the response back.
|
|
319
|
-
*/
|
|
320
|
-
class LuigiMockModule {
|
|
321
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LuigiMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
322
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.2", ngImport: i0, type: LuigiMockModule }); }
|
|
323
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LuigiMockModule, providers: [
|
|
324
|
-
{
|
|
325
|
-
provide: APP_INITIALIZER,
|
|
326
|
-
useFactory: LuigiMockEngine.initPostMessageHook,
|
|
327
|
-
multi: true
|
|
328
|
-
}
|
|
329
|
-
] }); }
|
|
330
|
-
}
|
|
331
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LuigiMockModule, decorators: [{
|
|
332
|
-
type: NgModule,
|
|
333
|
-
args: [{
|
|
334
|
-
providers: [
|
|
335
|
-
{
|
|
336
|
-
provide: APP_INITIALIZER,
|
|
337
|
-
useFactory: LuigiMockEngine.initPostMessageHook,
|
|
338
|
-
multi: true
|
|
339
|
-
}
|
|
340
|
-
]
|
|
341
|
-
}]
|
|
342
|
-
}] });
|
|
343
|
-
|
|
344
351
|
/*
|
|
345
352
|
* Public API Surface of client-support-angular
|
|
346
353
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"luigi-project-client-support-angular.mjs","sources":["../../../projects/client-support-angular/src/lib/component/luigi.preload.component.ts","../../../projects/client-support-angular/src/lib/component/luigi.preload.component.html","../../../projects/client-support-angular/src/lib/service/luigi-context-service.ts","../../../projects/client-support-angular/src/lib/service/luigi-context.service.impl.ts","../../../projects/client-support-angular/src/lib/route/luigi-activated-route-snapshot-helper.ts","../../../projects/client-support-angular/src/lib/route/luigi-route-strategy.ts","../../../projects/client-support-angular/src/lib/service/luigi-auto-routing.service.ts","../../../projects/client-support-angular/src/lib/luigi.angular.support.module.ts","../../../projects/client-support-angular/src/lib/luigi-mock/luigi-mock.module.ts","../../../projects/client-support-angular/src/public-api.ts","../../../projects/client-support-angular/src/luigi-project-client-support-angular.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-client-support-angular',\n templateUrl: './luigi.preload.component.html',\n styles: []\n})\nexport class LuigiPreloadComponent implements OnInit {\n constructor() {}\n ngOnInit(): void {}\n}\n","<p luigipreload=\"luigipreload\"></p>\n","import { Context } from '@luigi-project/client';\nimport { Observable } from 'rxjs';\n\nexport abstract class LuigiContextService {\n /**\n * Listen to context changes\n * Receives current value, even if the event was already dispatched earlier.\n */\n abstract contextObservable(): Observable<IContextMessage>;\n\n /**\n * Get latest set context object\n */\n abstract getContext(): Context;\n\n /**\n * Get a promise that resolves when context is set.\n */\n abstract getContextAsync(): Promise<Context>;\n}\n\nexport enum ILuigiContextTypes {\n INIT,\n UPDATE\n}\n\nexport interface IContextMessage {\n contextType: ILuigiContextTypes; // will be init or update\n context: Context;\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { ReplaySubject, Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { Context, addInitListener, addContextUpdateListener } from '@luigi-project/client';\nimport { IContextMessage, ILuigiContextTypes, LuigiContextService } from './luigi-context-service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LuigiContextServiceImpl implements LuigiContextService {\n private subject: ReplaySubject<IContextMessage> = new ReplaySubject<IContextMessage>(1);\n private currentContext: IContextMessage = (null as unknown) as IContextMessage;\n\n constructor(private zone: NgZone) {\n addInitListener(initContext => {\n this.addListener(ILuigiContextTypes.INIT, initContext);\n });\n addContextUpdateListener(updateContext => {\n this.addListener(ILuigiContextTypes.UPDATE, updateContext);\n });\n }\n\n public contextObservable(): Observable<IContextMessage> {\n return this.subject.asObservable();\n }\n\n /**\n * Get latest context object retrieved from luigi core application or empty object, if not yet set.\n */\n public getContext(): Context {\n return (this.currentContext && this.currentContext.context) || {};\n }\n\n /**\n * Get a promise that resolves when context is set.\n */\n public getContextAsync(): Promise<Context> {\n return new Promise<Context>((resolve, reject) => {\n if (this.isObject(this.getContext()) && Object.keys(this.getContext()).length > 0) {\n resolve(this.getContext());\n } else {\n this.contextObservable()\n .pipe(first())\n .subscribe(ctx => {\n resolve(ctx.context);\n });\n }\n });\n }\n\n /**\n * Checks if input is an object.\n * @param objectToCheck mixed\n * @returns {boolean}\n */\n private isObject(objectToCheck: any) {\n return !!(objectToCheck && typeof objectToCheck === 'object' && !Array.isArray(objectToCheck));\n }\n\n /**\n * Set current context\n */\n protected setContext(obj: IContextMessage): void {\n this.zone.run(() => {\n this.currentContext = obj;\n this.subject.next(obj);\n });\n }\n\n addListener(contextType: ILuigiContextTypes, context: Context): void {\n this.setContext({\n contextType,\n context\n } as IContextMessage);\n }\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport class LuigiActivatedRouteSnapshotHelper {\n private static _current: ActivatedRouteSnapshot = null as unknown as ActivatedRouteSnapshot;\n\n static getCurrent(): ActivatedRouteSnapshot {\n return LuigiActivatedRouteSnapshotHelper._current;\n }\n\n static setCurrent(current: ActivatedRouteSnapshot): void {\n LuigiActivatedRouteSnapshotHelper._current = current;\n }\n}\n","import { BaseRouteReuseStrategy } from '@angular/router';\nimport { ActivatedRouteSnapshot, DetachedRouteHandle } from '@angular/router';\nimport { LuigiActivatedRouteSnapshotHelper } from './luigi-activated-route-snapshot-helper';\n\nexport class LuigiRouteStrategy extends BaseRouteReuseStrategy {\n retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n LuigiActivatedRouteSnapshotHelper.setCurrent(route);\n return super.retrieve(route);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n NavigationEnd,\n ParamMap,\n Router,\n RouterEvent,\n convertToParamMap\n} from '@angular/router';\nimport { linkManager, uxManager, isLuigiClientInitialized } from '@luigi-project/client';\nimport { OperatorFunction, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LuigiActivatedRouteSnapshotHelper } from '../route/luigi-activated-route-snapshot-helper';\nimport { LuigiContextService } from './luigi-context-service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LuigiAutoRoutingService implements OnDestroy {\n private subscription: Subscription = new Subscription();\n\n constructor(\n private router: Router,\n private luigiContextService: LuigiContextService\n ) {\n this.subscription.add(\n this.router.events.pipe(this.doFilter() as any).subscribe(this.doSubscription.bind(this) as () => void)\n );\n }\n\n doFilter(): OperatorFunction<unknown, RouterEvent> {\n return filter((event): event is RouterEvent => {\n return !!(\n event instanceof NavigationEnd &&\n event.url &&\n event.url.length > 0 &&\n !(history.state && history.state.luigiInduced)\n );\n });\n }\n\n /**\n * This method will be take in consideration angular route that having in data object the paramter\n * fromVirtualTreeRoot: true, here an example:\n * {path: 'demo', component: DemoComponent, data:{fromVirtualTreeRoot: true}}\n * Another option is to specify the LuigiPath: if you add in route data luigiRoute:'/xxxx/xxx';\n * in the case we will update the path in LuigiCore navigation, here an example\n * {path: 'demo', component: DemoComponent, data:{luigiRoute: '/home/demo''}}\n * If updateModalPathParam is specified, than modalPathParam will be updated upon internal navigation:\n * {path: 'demo', component: DemoComponent, data:{updateModalPathParam: true}}\n * @param event the NavigationEnd event\n */\n doSubscription(event: NavigationEnd): void {\n let current: ActivatedRouteSnapshot | null = LuigiActivatedRouteSnapshotHelper.getCurrent();\n\n if (!current) {\n current = this.router.routerState.root.snapshot;\n while (current?.children?.length > 0) {\n // handle multiple children\n let primary: ActivatedRouteSnapshot | null = null;\n\n current?.children.forEach((childSnapshot) => {\n if (childSnapshot.outlet === 'primary') {\n primary = childSnapshot;\n }\n });\n if (primary) {\n current = primary;\n } else if (current.firstChild) {\n current = current.firstChild;\n } else {\n break;\n }\n }\n }\n if (current?.data && isLuigiClientInitialized()) {\n const ux = uxManager();\n let lm = linkManager().withoutSync();\n let route: string | undefined;\n\n if (current.data.luigiRoute) {\n route = this.getResolvedLuigiRoute(current);\n if (current.data.fromContext) {\n if (!this.luigiContextService.getContext()) {\n console.debug('Ignoring auto navigation request, luigi context not set');\n return;\n }\n if (current.data.fromContext === true) {\n lm = lm.fromClosestContext();\n } else {\n lm = lm.fromContext(current.data.fromContext);\n }\n }\n } else if (current.data.fromVirtualTreeRoot) {\n let url = event.url;\n const truncate = current.data.fromVirtualTreeRoot.truncate;\n if (truncate) {\n if (truncate.indexOf('*') === 0) {\n const index = url.indexOf(truncate.substr(1));\n url = url.substr(index + truncate.length - 1);\n } else if (url.indexOf(truncate) === 0) {\n url = url.substr(truncate.length);\n }\n }\n route = url;\n console.debug('Calling fromVirtualTreeRoot for url ==> ' + route);\n lm = lm.fromVirtualTreeRoot();\n }\n\n if (ux.isModal()) {\n if (current.data.updateModalDataPath) {\n lm.updateModalPathInternalNavigation(route as string, {}, current.data.addHistoryEntry);\n }\n } else if (route) {\n lm.navigate(route);\n }\n }\n }\n\n getResolvedLuigiRoute(current: ActivatedRouteSnapshot): string | undefined {\n let route: string | undefined = current.data.luigiRoute;\n const allParams = this.getAllParamsFromParents(current);\n\n if (!route || !allParams) {\n return route;\n }\n\n const pmap: ParamMap = convertToParamMap(allParams);\n\n pmap.keys.forEach((key) => {\n pmap.getAll(key).forEach((param) => {\n route = route?.replace(':' + key, param);\n });\n });\n\n return route;\n }\n\n getAllParamsFromParents(current: ActivatedRouteSnapshot): { [key: string]: string } | undefined {\n let allParams: { [key: string]: string } = {};\n let currentToCheck: ActivatedRouteSnapshot | null = current;\n\n while (currentToCheck) {\n if (currentToCheck.params) {\n allParams = { ...allParams, ...currentToCheck.params };\n }\n currentToCheck = currentToCheck.parent;\n }\n\n return allParams;\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouteReuseStrategy, RouterModule, Routes } from '@angular/router';\nimport { LuigiPreloadComponent } from './component/luigi.preload.component';\nimport { LuigiContextService } from './service/luigi-context-service';\nimport { LuigiContextServiceImpl } from './service/luigi-context.service.impl';\nimport { LuigiAutoRoutingService } from './service/luigi-auto-routing.service';\nimport { LuigiRouteStrategy } from './route/luigi-route-strategy';\n\nexport const staticRoutes: Routes = [\n /** here an example if you want to specify that this component is a virtualTree element in Luigi Core navigation*/\n {\n path: 'luigi-client-support-preload',\n component: LuigiPreloadComponent,\n data: { fromVirtualTreeRoot: true }\n },\n /** here an example if you want to specify that this component it is a luigi component and u want to change the navigation in Luigi core*/\n {\n path: 'luigi-client-support-preload',\n component: LuigiPreloadComponent,\n data: { luigiRoute: '/home/reload' }\n },\n /** here an example if you want to reuse the component and not recreating every time you navigate to it (a singleton Component) It requires in your module to redefine */\n {\n path: 'luigi-client-support-preload=component',\n component: LuigiPreloadComponent,\n data: { reuse: true }\n },\n /** here an example if you want to update modalPathParam on internal navigation */\n {\n path: 'luigi-client-support-preload',\n component: LuigiPreloadComponent,\n data: { updateModalPathParam: true }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(staticRoutes)],\n providers: [\n {\n provide: LuigiContextService,\n useClass: LuigiContextServiceImpl\n },\n {\n provide: RouteReuseStrategy,\n useClass: LuigiRouteStrategy\n }\n ]\n})\nexport class LuigiAngularSupportModule {\n constructor(navigation: LuigiAutoRoutingService, context: LuigiContextService) {}\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { LuigiMockEngine } from '@luigi-project/testing-utilities';\n\n// @dynamic\n@NgModule({\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: LuigiMockEngine.initPostMessageHook,\n multi: true\n }\n ]\n})\n/*\n * This class mocks Luigi Core related functionality.\n *\n * Micro Frontends that use Luigi Client would usually communicate with Luigi Core\n * back and forth. When testing Luigi Client based components, Luigi Core might\n * not be present which leads into limitations on integration/e2e testing for standalone\n * microfrontends.\n *\n * This module adds a hook to the window postMessage API by adding an event listener to the\n * global message event of the window object and mocking the callback.\n * In the normal workflow this message would picked up by Luigi Core which then sends the response back.\n */\nexport class LuigiMockModule {}\n","/*\n * Public API Surface of client-support-angular\n */\n\nexport * from './lib/component/luigi.preload.component';\nexport * from './lib/luigi.angular.support.module';\nexport * from './lib/service/luigi-context-service';\nexport * from './lib/service/luigi-context.service.impl';\nexport * from './lib/service/luigi-auto-routing.service';\nexport * from './lib/luigi-mock/luigi-mock.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LuigiContextService","i1.LuigiAutoRoutingService","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"luigi-project-client-support-angular.mjs","sources":["../../../projects/client-support-angular/src/lib/component/luigi.preload.component.ts","../../../projects/client-support-angular/src/lib/component/luigi.preload.component.html","../../../projects/client-support-angular/src/lib/luigi-mock/luigi-mock.module.ts","../../../projects/client-support-angular/src/lib/route/luigi-activated-route-snapshot-helper.ts","../../../projects/client-support-angular/src/lib/route/luigi-route-strategy.ts","../../../projects/client-support-angular/src/lib/service/luigi-context.service.ts","../../../projects/client-support-angular/src/lib/service/luigi-context.model.ts","../../../projects/client-support-angular/src/lib/service/luigi-context.service.impl.ts","../../../projects/client-support-angular/src/lib/service/luigi-auto-routing.service.ts","../../../projects/client-support-angular/src/lib/luigi.angular.support.module.ts","../../../projects/client-support-angular/src/public-api.ts","../../../projects/client-support-angular/src/luigi-project-client-support-angular.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-client-support-angular',\n templateUrl: './luigi.preload.component.html',\n styles: []\n})\nexport class LuigiPreloadComponent {}\n","<p luigipreload=\"luigipreload\"></p>\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { LuigiMockEngine } from '@luigi-project/testing-utilities';\n\n// @dynamic\n@NgModule({\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: LuigiMockEngine.initPostMessageHook,\n multi: true\n }\n ]\n})\n/*\n * This class mocks Luigi Core related functionality.\n *\n * Micro Frontends that use Luigi Client would usually communicate with Luigi Core\n * back and forth. When testing Luigi Client based components, Luigi Core might\n * not be present which leads into limitations on integration/e2e testing for standalone\n * microfrontends.\n *\n * This module adds a hook to the window postMessage API by adding an event listener to the\n * global message event of the window object and mocking the callback.\n * In the normal workflow this message would picked up by Luigi Core which then sends the response back.\n */\nexport class LuigiMockModule {}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport class LuigiActivatedRouteSnapshotHelper {\n private static _current: ActivatedRouteSnapshot = null as unknown as ActivatedRouteSnapshot;\n\n static getCurrent(): ActivatedRouteSnapshot {\n return LuigiActivatedRouteSnapshotHelper._current;\n }\n\n static setCurrent(current: ActivatedRouteSnapshot): void {\n LuigiActivatedRouteSnapshotHelper._current = current;\n }\n}\n","import { BaseRouteReuseStrategy } from '@angular/router';\nimport { ActivatedRouteSnapshot, DetachedRouteHandle } from '@angular/router';\nimport { LuigiActivatedRouteSnapshotHelper } from './luigi-activated-route-snapshot-helper';\n\nexport class LuigiRouteStrategy extends BaseRouteReuseStrategy {\n retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n LuigiActivatedRouteSnapshotHelper.setCurrent(route);\n return super.retrieve(route);\n }\n}\n","import { Signal } from '@angular/core';\nimport { Context } from '@luigi-project/client';\nimport { Observable } from 'rxjs';\nimport { IContextMessage } from './luigi-context.model';\n\nexport abstract class LuigiContextService {\n /**\n * Get a signal that emits when context is set.\n */\n abstract contextSignal(): Signal<IContextMessage | undefined>;\n\n /**\n * Listen to context changes\n * Receives current value, even if the event was already dispatched earlier.\n */\n abstract contextObservable(): Observable<IContextMessage>;\n\n /**\n * Get latest set context object\n */\n abstract getContext(): Context;\n\n /**\n * Get a promise that resolves when context is set.\n */\n abstract getContextAsync(): Promise<Context>;\n}\n","import { Context } from '@luigi-project/client';\n\nexport enum ILuigiContextTypes {\n INIT,\n UPDATE\n}\n\nexport interface IContextMessage {\n context: Context;\n contextType: ILuigiContextTypes;\n}\n","import { inject, Injectable, NgZone, Signal, signal, WritableSignal } from '@angular/core';\nimport { Context, addInitListener, addContextUpdateListener } from '@luigi-project/client';\nimport { ReplaySubject, Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { IContextMessage, ILuigiContextTypes } from './luigi-context.model';\nimport { LuigiContextService } from './luigi-context.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LuigiContextServiceImpl implements LuigiContextService {\n private signalContext: WritableSignal<IContextMessage | undefined> = signal<IContextMessage | undefined>(undefined);\n private subject: ReplaySubject<IContextMessage> = new ReplaySubject<IContextMessage>(1);\n private currentContext!: IContextMessage;\n private ngZone = inject(NgZone);\n\n constructor() {\n addInitListener((initContext: Context) => {\n this.addListener(ILuigiContextTypes.INIT, initContext);\n });\n addContextUpdateListener((updateContext: Context) => {\n this.addListener(ILuigiContextTypes.UPDATE, updateContext);\n });\n }\n\n public addListener(contextType: ILuigiContextTypes, context: Context): void {\n this.setContext({\n contextType,\n context\n } as IContextMessage);\n }\n\n /**\n * Get a signal that emits when context is set.\n */\n public contextSignal(): Signal<IContextMessage | undefined> {\n return this.signalContext.asReadonly();\n }\n\n /**\n * Get an observable that emits when context is set.\n */\n public contextObservable(): Observable<IContextMessage> {\n return this.subject.asObservable();\n }\n\n /**\n * Get latest context object retrieved from luigi core application or empty object, if not yet set.\n */\n public getContext(): Context {\n return this.currentContext?.context || {};\n }\n\n /**\n * Get a promise that resolves when context is set.\n */\n public getContextAsync(): Promise<Context> {\n return new Promise<Context>((resolve, reject) => {\n const context: Context = this.getContext();\n\n if (this.isObject(context) && Object.keys(context)?.length) {\n resolve(this.getContext());\n } else {\n this.contextObservable()\n .pipe(first())\n .subscribe((ctx: IContextMessage) => resolve(ctx.context));\n }\n });\n }\n\n /**\n * Checks if input is an object.\n * @param objectToCheck mixed\n * @returns {boolean}\n */\n private isObject(objectToCheck: any): boolean {\n return !!(objectToCheck && typeof objectToCheck === 'object' && !Array.isArray(objectToCheck));\n }\n\n /**\n * Set current context\n */\n protected setContext(obj: IContextMessage): void {\n this.ngZone.run(() => {\n this.currentContext = obj;\n this.signalContext.set(obj);\n this.subject.next(obj);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRouteSnapshot, Event, NavigationEnd, ParamMap, Router, convertToParamMap } from '@angular/router';\nimport { linkManager, uxManager, isLuigiClientInitialized } from '@luigi-project/client';\nimport { OperatorFunction } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LuigiActivatedRouteSnapshotHelper } from '../route/luigi-activated-route-snapshot-helper';\nimport { LuigiContextService } from './luigi-context.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LuigiAutoRoutingService {\n constructor(\n private router: Router,\n private luigiContextService: LuigiContextService\n ) {\n this.router.events\n .pipe(this.doFilter(), takeUntilDestroyed())\n .subscribe((event: NavigationEnd) => this.doSubscription(event));\n }\n\n doFilter(): OperatorFunction<Event, NavigationEnd> {\n return filter(\n (event: Event): event is NavigationEnd =>\n !!(event instanceof NavigationEnd && event?.url?.length && !history?.state?.luigiInduced)\n );\n }\n\n /**\n * This method will be take in consideration angular route that having in data object the paramter\n * fromVirtualTreeRoot: true, here an example:\n * {path: 'demo', component: DemoComponent, data:{fromVirtualTreeRoot: true}}\n * Another option is to specify the LuigiPath: if you add in route data luigiRoute:'/xxxx/xxx';\n * in the case we will update the path in LuigiCore navigation, here an example\n * {path: 'demo', component: DemoComponent, data:{luigiRoute: '/home/demo''}}\n * If updateModalPathParam is specified, than modalPathParam will be updated upon internal navigation:\n * {path: 'demo', component: DemoComponent, data:{updateModalPathParam: true}}\n * @param event the NavigationEnd event\n */\n doSubscription(event: NavigationEnd): void {\n let current: ActivatedRouteSnapshot | null = LuigiActivatedRouteSnapshotHelper.getCurrent();\n\n if (!current) {\n current = this.router.routerState.root.snapshot;\n\n while (current?.children?.length) {\n // handle multiple children\n let primary: ActivatedRouteSnapshot | null = null;\n\n current.children.forEach((childSnapshot: ActivatedRouteSnapshot) => {\n if (childSnapshot?.outlet === 'primary') {\n primary = childSnapshot;\n }\n });\n\n if (primary) {\n current = primary;\n } else if (current.firstChild) {\n current = current.firstChild;\n } else {\n break;\n }\n }\n }\n\n if (current?.data && this.isClientInitialized()) {\n const ux = uxManager();\n let lm = linkManager().withoutSync();\n let route: string | undefined;\n\n if (current.data.luigiRoute) {\n route = this.getResolvedLuigiRoute(current);\n\n if (current.data.fromContext) {\n if (!this.luigiContextService.getContext()) {\n console.debug('Ignoring auto navigation request, luigi context not set');\n return;\n }\n\n if (current.data.fromContext === true) {\n lm = lm.fromClosestContext();\n } else {\n lm = lm.fromContext(current.data.fromContext);\n }\n }\n } else if (current.data.fromVirtualTreeRoot) {\n let url = event.url;\n const truncate = current.data.fromVirtualTreeRoot.truncate;\n\n if (truncate) {\n if (truncate.indexOf('*') === 0) {\n const index = url.indexOf(truncate.substring(1));\n\n url = url.substring(index + truncate.length - 1);\n } else if (url.indexOf(truncate) === 0) {\n url = url.substring(truncate.length);\n }\n }\n\n route = url;\n console.debug('Calling fromVirtualTreeRoot for url ==> ' + route);\n lm = lm.fromVirtualTreeRoot();\n }\n\n if (ux.isModal()) {\n if (current.data.updateModalDataPath) {\n lm.updateModalPathInternalNavigation(route as string, {}, current.data.addHistoryEntry);\n }\n } else if (route) {\n lm.navigate(route);\n }\n }\n }\n\n getResolvedLuigiRoute(current: ActivatedRouteSnapshot): string | undefined {\n let route: string | undefined = current.data.luigiRoute;\n const allParams = this.getAllParamsFromParents(current);\n\n if (!route || !allParams) {\n return route;\n }\n\n const pmap: ParamMap = convertToParamMap(allParams);\n\n pmap.keys.forEach((key: string) => {\n pmap.getAll(key).forEach((param: string) => {\n route = route?.replace(':' + key, param);\n });\n });\n\n return route;\n }\n\n getAllParamsFromParents(current: ActivatedRouteSnapshot): { [key: string]: string } | undefined {\n let allParams: { [key: string]: string } = {};\n let currentToCheck: ActivatedRouteSnapshot | null = current;\n\n while (currentToCheck) {\n if (currentToCheck.params) {\n allParams = { ...allParams, ...currentToCheck.params };\n }\n\n currentToCheck = currentToCheck.parent;\n }\n\n return allParams;\n }\n\n private isClientInitialized(): boolean {\n return isLuigiClientInitialized();\n }\n}\n","import { NgModule, provideZonelessChangeDetection } from '@angular/core';\nimport { RouteReuseStrategy, RouterModule, Routes } from '@angular/router';\nimport { LuigiPreloadComponent } from './component/luigi.preload.component';\nimport { LuigiRouteStrategy } from './route/luigi-route-strategy';\nimport { LuigiAutoRoutingService } from './service/luigi-auto-routing.service';\nimport { LuigiContextService } from './service/luigi-context.service';\nimport { LuigiContextServiceImpl } from './service/luigi-context.service.impl';\n\nexport const staticRoutes: Routes = [\n /** here an example if you want to specify that this component is a virtualTree element in Luigi Core navigation*/\n {\n path: 'luigi-client-support-preload',\n component: LuigiPreloadComponent,\n data: { fromVirtualTreeRoot: true }\n },\n /** here an example if you want to specify that this component it is a luigi component and u want to change the navigation in Luigi core*/\n {\n path: 'luigi-client-support-preload',\n component: LuigiPreloadComponent,\n data: { luigiRoute: '/home/reload' }\n },\n /** here an example if you want to reuse the component and not recreating every time you navigate to it (a singleton Component) It requires in your module to redefine */\n {\n path: 'luigi-client-support-preload=component',\n component: LuigiPreloadComponent,\n data: { reuse: true }\n },\n /** here an example if you want to update modalPathParam on internal navigation */\n {\n path: 'luigi-client-support-preload',\n component: LuigiPreloadComponent,\n data: { updateModalPathParam: true }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(staticRoutes)],\n providers: [\n provideZonelessChangeDetection(),\n {\n provide: LuigiContextService,\n useClass: LuigiContextServiceImpl\n },\n {\n provide: RouteReuseStrategy,\n useClass: LuigiRouteStrategy\n }\n ]\n})\nexport class LuigiAngularSupportModule {\n constructor(navigation: LuigiAutoRoutingService, context: LuigiContextService) {}\n}\n","/*\n * Public API Surface of client-support-angular\n */\n\nexport * from './lib/component/luigi.preload.component';\nexport * from './lib/luigi-mock/luigi-mock.module';\nexport * from './lib/luigi.angular.support.module';\nexport * from './lib/service/luigi-auto-routing.service';\nexport * from './lib/service/luigi-context.model';\nexport * from './lib/service/luigi-context.service';\nexport * from './lib/service/luigi-context.service.impl';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LuigiContextService","i1.LuigiAutoRoutingService","i3"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"publishConfig": {
|
|
19
19
|
"tag": "client-support-angular"
|
|
20
20
|
},
|
|
21
|
-
"version": "21.0
|
|
21
|
+
"version": "21.1.0-dev.202601150036",
|
|
22
22
|
"module": "fesm2022/luigi-project-client-support-angular.mjs",
|
|
23
23
|
"typings": "types/luigi-project-client-support-angular.d.ts",
|
|
24
24
|
"exports": {
|
|
@@ -1,18 +1,35 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { Signal } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/router';
|
|
4
|
-
import { Router,
|
|
5
|
-
import { Context } from '@luigi-project/client';
|
|
4
|
+
import { Router, Event, NavigationEnd, ActivatedRouteSnapshot, Routes } from '@angular/router';
|
|
6
5
|
import { Observable, OperatorFunction } from 'rxjs';
|
|
6
|
+
import { Context } from '@luigi-project/client';
|
|
7
7
|
|
|
8
|
-
declare class LuigiPreloadComponent
|
|
9
|
-
constructor();
|
|
10
|
-
ngOnInit(): void;
|
|
8
|
+
declare class LuigiPreloadComponent {
|
|
11
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuigiPreloadComponent, never>;
|
|
12
10
|
static ɵcmp: i0.ɵɵComponentDeclaration<LuigiPreloadComponent, "lib-client-support-angular", never, {}, {}, never, never, true, never>;
|
|
13
11
|
}
|
|
14
12
|
|
|
13
|
+
declare class LuigiMockModule {
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LuigiMockModule, never>;
|
|
15
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<LuigiMockModule, never, never, never>;
|
|
16
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<LuigiMockModule>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare enum ILuigiContextTypes {
|
|
20
|
+
INIT = 0,
|
|
21
|
+
UPDATE = 1
|
|
22
|
+
}
|
|
23
|
+
interface IContextMessage {
|
|
24
|
+
context: Context;
|
|
25
|
+
contextType: ILuigiContextTypes;
|
|
26
|
+
}
|
|
27
|
+
|
|
15
28
|
declare abstract class LuigiContextService {
|
|
29
|
+
/**
|
|
30
|
+
* Get a signal that emits when context is set.
|
|
31
|
+
*/
|
|
32
|
+
abstract contextSignal(): Signal<IContextMessage | undefined>;
|
|
16
33
|
/**
|
|
17
34
|
* Listen to context changes
|
|
18
35
|
* Receives current value, even if the event was already dispatched earlier.
|
|
@@ -27,21 +44,12 @@ declare abstract class LuigiContextService {
|
|
|
27
44
|
*/
|
|
28
45
|
abstract getContextAsync(): Promise<Context>;
|
|
29
46
|
}
|
|
30
|
-
declare enum ILuigiContextTypes {
|
|
31
|
-
INIT = 0,
|
|
32
|
-
UPDATE = 1
|
|
33
|
-
}
|
|
34
|
-
interface IContextMessage {
|
|
35
|
-
contextType: ILuigiContextTypes;
|
|
36
|
-
context: Context;
|
|
37
|
-
}
|
|
38
47
|
|
|
39
|
-
declare class LuigiAutoRoutingService
|
|
48
|
+
declare class LuigiAutoRoutingService {
|
|
40
49
|
private router;
|
|
41
50
|
private luigiContextService;
|
|
42
|
-
private subscription;
|
|
43
51
|
constructor(router: Router, luigiContextService: LuigiContextService);
|
|
44
|
-
doFilter(): OperatorFunction<
|
|
52
|
+
doFilter(): OperatorFunction<Event, NavigationEnd>;
|
|
45
53
|
/**
|
|
46
54
|
* This method will be take in consideration angular route that having in data object the paramter
|
|
47
55
|
* fromVirtualTreeRoot: true, here an example:
|
|
@@ -58,7 +66,7 @@ declare class LuigiAutoRoutingService implements OnDestroy {
|
|
|
58
66
|
getAllParamsFromParents(current: ActivatedRouteSnapshot): {
|
|
59
67
|
[key: string]: string;
|
|
60
68
|
} | undefined;
|
|
61
|
-
|
|
69
|
+
private isClientInitialized;
|
|
62
70
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuigiAutoRoutingService, never>;
|
|
63
71
|
static ɵprov: i0.ɵɵInjectableDeclaration<LuigiAutoRoutingService>;
|
|
64
72
|
}
|
|
@@ -72,10 +80,19 @@ declare class LuigiAngularSupportModule {
|
|
|
72
80
|
}
|
|
73
81
|
|
|
74
82
|
declare class LuigiContextServiceImpl implements LuigiContextService {
|
|
75
|
-
private
|
|
83
|
+
private signalContext;
|
|
76
84
|
private subject;
|
|
77
85
|
private currentContext;
|
|
78
|
-
|
|
86
|
+
private ngZone;
|
|
87
|
+
constructor();
|
|
88
|
+
addListener(contextType: ILuigiContextTypes, context: Context): void;
|
|
89
|
+
/**
|
|
90
|
+
* Get a signal that emits when context is set.
|
|
91
|
+
*/
|
|
92
|
+
contextSignal(): Signal<IContextMessage | undefined>;
|
|
93
|
+
/**
|
|
94
|
+
* Get an observable that emits when context is set.
|
|
95
|
+
*/
|
|
79
96
|
contextObservable(): Observable<IContextMessage>;
|
|
80
97
|
/**
|
|
81
98
|
* Get latest context object retrieved from luigi core application or empty object, if not yet set.
|
|
@@ -95,16 +112,9 @@ declare class LuigiContextServiceImpl implements LuigiContextService {
|
|
|
95
112
|
* Set current context
|
|
96
113
|
*/
|
|
97
114
|
protected setContext(obj: IContextMessage): void;
|
|
98
|
-
addListener(contextType: ILuigiContextTypes, context: Context): void;
|
|
99
115
|
static ɵfac: i0.ɵɵFactoryDeclaration<LuigiContextServiceImpl, never>;
|
|
100
116
|
static ɵprov: i0.ɵɵInjectableDeclaration<LuigiContextServiceImpl>;
|
|
101
117
|
}
|
|
102
118
|
|
|
103
|
-
declare class LuigiMockModule {
|
|
104
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<LuigiMockModule, never>;
|
|
105
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<LuigiMockModule, never, never, never>;
|
|
106
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<LuigiMockModule>;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
119
|
export { ILuigiContextTypes, LuigiAngularSupportModule, LuigiAutoRoutingService, LuigiContextService, LuigiContextServiceImpl, LuigiMockModule, LuigiPreloadComponent, staticRoutes };
|
|
110
120
|
export type { IContextMessage };
|