@luigi-project/client-support-angular 1.25.2-dev.20230180050 → 2.0.0-rc1
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/esm2020/lib/component/luigi.preload.component.mjs +13 -0
- package/esm2020/lib/luigi-mock/luigi-mock.module.mjs +178 -0
- package/esm2020/lib/luigi.angular.support.module.mjs +70 -0
- package/{esm2015/lib/route/luigi-activated-route-snapshot-helper.js → esm2020/lib/route/luigi-activated-route-snapshot-helper.mjs} +0 -0
- package/{esm2015/lib/route/luigi-route-strategy.js → esm2020/lib/route/luigi-route-strategy.mjs} +0 -0
- package/esm2020/lib/service/luigi-auto-routing.service.mjs +124 -0
- package/{esm2015/lib/service/luigi-context-service.js → esm2020/lib/service/luigi-context-service.mjs} +0 -0
- package/esm2020/lib/service/luigi-context.service.impl.mjs +69 -0
- package/esm2020/luigi-project-client-support-angular.mjs +5 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{luigi-project-client-support-angular.js → luigi-project-client-support-angular.mjs} +88 -75
- package/fesm2015/luigi-project-client-support-angular.mjs.map +1 -0
- package/fesm2020/luigi-project-client-support-angular.mjs +469 -0
- package/fesm2020/luigi-project-client-support-angular.mjs.map +1 -0
- package/{luigi-project-client-support-angular.d.ts → index.d.ts} +1 -1
- package/lib/component/luigi.preload.component.d.ts +3 -0
- package/lib/component/luigi.preload.component.d.ts.map +1 -1
- package/lib/luigi-mock/luigi-mock.module.d.ts +4 -0
- package/lib/luigi-mock/luigi-mock.module.d.ts.map +1 -1
- package/lib/luigi.angular.support.module.d.ts +6 -0
- package/lib/luigi.angular.support.module.d.ts.map +1 -1
- package/lib/service/luigi-auto-routing.service.d.ts +3 -0
- package/lib/service/luigi-auto-routing.service.d.ts.map +1 -1
- package/lib/service/luigi-context.service.impl.d.ts +3 -0
- package/lib/service/luigi-context.service.impl.d.ts.map +1 -1
- package/luigi-project-client-support-angular.d.ts.map +1 -1
- package/package.json +22 -10
- package/bundles/luigi-project-client-support-angular.umd.js +0 -848
- package/bundles/luigi-project-client-support-angular.umd.js.map +0 -1
- package/bundles/luigi-project-client-support-angular.umd.min.js +0 -2
- package/bundles/luigi-project-client-support-angular.umd.min.js.map +0 -1
- package/esm2015/lib/component/luigi.preload.component.js +0 -13
- package/esm2015/lib/luigi-mock/luigi-mock.module.js +0 -170
- package/esm2015/lib/luigi.angular.support.module.js +0 -60
- package/esm2015/lib/service/luigi-auto-routing.service.js +0 -128
- package/esm2015/lib/service/luigi-context.service.impl.js +0 -70
- package/esm2015/luigi-project-client-support-angular.js +0 -6
- package/fesm2015/luigi-project-client-support-angular.js.map +0 -1
- package/luigi-project-client-support-angular.metadata.json +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class LuigiPreloadComponent {
|
|
4
|
+
constructor() { }
|
|
5
|
+
ngOnInit() { }
|
|
6
|
+
}
|
|
7
|
+
LuigiPreloadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiPreloadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8
|
+
LuigiPreloadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LuigiPreloadComponent, selector: "lib-client-support-angular", ngImport: i0, template: "<p luigipreload=\"luigipreload\"></p>\n" });
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiPreloadComponent, decorators: [{
|
|
10
|
+
type: Component,
|
|
11
|
+
args: [{ selector: 'lib-client-support-angular', template: "<p luigipreload=\"luigipreload\"></p>\n" }]
|
|
12
|
+
}], ctorParameters: function () { return []; } });
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVpZ2kucHJlbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc3VwcG9ydC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50L2x1aWdpLnByZWxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXN1cHBvcnQtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudC9sdWlnaS5wcmVsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBT2xELE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsZ0JBQWUsQ0FBQztJQUNoQixRQUFRLEtBQVUsQ0FBQzs7bUhBRlIscUJBQXFCO3VHQUFyQixxQkFBcUIsa0VDUGxDLHlDQUNBOzRGRE1hLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY2xpZW50LXN1cHBvcnQtYW5ndWxhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9sdWlnaS5wcmVsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBMdWlnaVByZWxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIG5nT25Jbml0KCk6IHZvaWQge31cbn1cbiIsIjxwIGx1aWdpcHJlbG9hZD1cImx1aWdpcHJlbG9hZFwiPjwvcD5cbiJdfQ==
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { APP_INITIALIZER, NgModule } from '@angular/core';
|
|
2
|
+
import { LuigiMockEngine } from '@luigi-project/testing-utilities';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
// @dynamic
|
|
5
|
+
/*
|
|
6
|
+
* This class mocks Luigi Core related functionality.
|
|
7
|
+
*
|
|
8
|
+
* Micro Frontends that use Luigi Client would usually communicate with Luigi Core
|
|
9
|
+
* back and forth. When testing Luigi Client based components, Luigi Core might
|
|
10
|
+
* not be present which leads into limitations on integration/e2e testing for standalone
|
|
11
|
+
* microfrontends.
|
|
12
|
+
*
|
|
13
|
+
* This module adds a hook to the window postMessage API by adding an event listener to the
|
|
14
|
+
* global message event of the window object and mocking the callback.
|
|
15
|
+
* In the normal workflow this message would picked up by Luigi Core which then sends the response back.
|
|
16
|
+
*/
|
|
17
|
+
export class LuigiMockModule {
|
|
18
|
+
// Add a hook to the post message api to mock the LuigiCore response to the Client
|
|
19
|
+
static initPostMessageHook() {
|
|
20
|
+
return async () => {
|
|
21
|
+
// Check if Luigi Client is running standalone
|
|
22
|
+
if (window.parent === window) {
|
|
23
|
+
console.debug('Detected standalone mode');
|
|
24
|
+
// Check and skip if Luigi environment is already mocked
|
|
25
|
+
if (window.luigiMockEnvironment) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// mock target origin
|
|
29
|
+
if (window.LuigiClient) {
|
|
30
|
+
window.LuigiClient.setTargetOrigin('*');
|
|
31
|
+
}
|
|
32
|
+
window.luigiMockEnvironment = {
|
|
33
|
+
msgListener: function (e) {
|
|
34
|
+
if (e.data.msg && (e.data.msg.startsWith('luigi.') || e.data.msg === 'storage')) {
|
|
35
|
+
console.debug('Luigi msg', e.data);
|
|
36
|
+
if (e.data.msg === 'luigi.get-context') {
|
|
37
|
+
window.postMessage({
|
|
38
|
+
msg: 'luigi.init',
|
|
39
|
+
emulated: true,
|
|
40
|
+
internal: {
|
|
41
|
+
viewStackSize: 1
|
|
42
|
+
},
|
|
43
|
+
context: e.data.context
|
|
44
|
+
}, '*');
|
|
45
|
+
}
|
|
46
|
+
// vizualise retrieved event data
|
|
47
|
+
LuigiMockEngine.visualize(JSON.stringify(e.data));
|
|
48
|
+
// Check and run mocked callback if it exists
|
|
49
|
+
const mockListener = window.luigiMockEnvironment.mockListeners[e.data.msg];
|
|
50
|
+
if (mockListener) {
|
|
51
|
+
mockListener(e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
mockListeners: {
|
|
56
|
+
'luigi.navigation.pathExists': (event) => {
|
|
57
|
+
const mockData = window.sessionStorage.getItem('luigiMockData');
|
|
58
|
+
let mockDataParsed = mockData ? JSON.parse(mockData) : undefined;
|
|
59
|
+
const inputPath = event.data.data.link;
|
|
60
|
+
const pathExists = mockDataParsed && mockDataParsed.pathExists && mockDataParsed.pathExists[inputPath];
|
|
61
|
+
const response = {
|
|
62
|
+
msg: 'luigi.navigation.pathExists.answer',
|
|
63
|
+
data: {
|
|
64
|
+
correlationId: event.data.data.id,
|
|
65
|
+
pathExists: pathExists ? pathExists : false
|
|
66
|
+
},
|
|
67
|
+
emulated: true
|
|
68
|
+
};
|
|
69
|
+
window.postMessage(response, '*');
|
|
70
|
+
},
|
|
71
|
+
//ux
|
|
72
|
+
'luigi.ux.confirmationModal.show': (event) => {
|
|
73
|
+
const response = {
|
|
74
|
+
msg: 'luigi.ux.confirmationModal.hide',
|
|
75
|
+
data: event.data,
|
|
76
|
+
emulated: true
|
|
77
|
+
};
|
|
78
|
+
window.postMessage(response, '*');
|
|
79
|
+
},
|
|
80
|
+
'luigi.ux.alert.show': (event) => {
|
|
81
|
+
const response = {
|
|
82
|
+
msg: 'luigi.ux.alert.hide',
|
|
83
|
+
data: event.data,
|
|
84
|
+
emulated: true
|
|
85
|
+
};
|
|
86
|
+
window.postMessage(response, '*');
|
|
87
|
+
},
|
|
88
|
+
'luigi.ux.set-current-locale': (event) => {
|
|
89
|
+
const response = {
|
|
90
|
+
msg: 'luigi.current-locale-changed',
|
|
91
|
+
currentLocale: event.data.data.currentLocale,
|
|
92
|
+
emulated: true
|
|
93
|
+
};
|
|
94
|
+
window.postMessage(response, '*');
|
|
95
|
+
},
|
|
96
|
+
// linkManager
|
|
97
|
+
'luigi.navigation.open': (event) => {
|
|
98
|
+
const response = {
|
|
99
|
+
msg: 'luigi.navigate.ok',
|
|
100
|
+
data: event.data,
|
|
101
|
+
emulated: true
|
|
102
|
+
};
|
|
103
|
+
window.postMessage(response, '*');
|
|
104
|
+
},
|
|
105
|
+
'luigi.navigation.splitview.close': (event) => {
|
|
106
|
+
const response = {
|
|
107
|
+
msg: 'luigi.navigate.ok',
|
|
108
|
+
data: event.data,
|
|
109
|
+
emulated: true
|
|
110
|
+
};
|
|
111
|
+
window.postMessage(response, '*');
|
|
112
|
+
},
|
|
113
|
+
'luigi.navigation.splitview.collapse': (event) => {
|
|
114
|
+
const response = {
|
|
115
|
+
msg: 'luigi.navigate.ok',
|
|
116
|
+
data: event.data,
|
|
117
|
+
emulated: true
|
|
118
|
+
};
|
|
119
|
+
window.postMessage(response, '*');
|
|
120
|
+
},
|
|
121
|
+
'luigi.navigation.splitview.expand': (event) => {
|
|
122
|
+
const response = {
|
|
123
|
+
msg: 'luigi.navigate.ok',
|
|
124
|
+
data: event.data,
|
|
125
|
+
emulated: true
|
|
126
|
+
};
|
|
127
|
+
window.postMessage(response, '*');
|
|
128
|
+
},
|
|
129
|
+
// storage
|
|
130
|
+
storage: () => { }
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
// Listen to the global 'message' event of the window object
|
|
134
|
+
window.addEventListener('message', window.luigiMockEnvironment.msgListener);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/*
|
|
139
|
+
* This method takes a data object of type 'any' and vizualizes a simple container
|
|
140
|
+
* which holds data that is useful for e2e testing.
|
|
141
|
+
*/
|
|
142
|
+
static visualize(data) {
|
|
143
|
+
let luigiVisualizationContainer = document.querySelector('#luigi-debug-vis-cnt');
|
|
144
|
+
// Construct element structure if not already constructed
|
|
145
|
+
if (!luigiVisualizationContainer) {
|
|
146
|
+
luigiVisualizationContainer = document.createElement('div');
|
|
147
|
+
luigiVisualizationContainer.setAttribute('id', 'luigi-debug-vis-cnt');
|
|
148
|
+
// Hide the added DOM element to avoid interferring/overlapping with other elements during testing.
|
|
149
|
+
luigiVisualizationContainer.setAttribute('style', 'display:none');
|
|
150
|
+
document.body.appendChild(luigiVisualizationContainer);
|
|
151
|
+
}
|
|
152
|
+
const line = document.createElement('div');
|
|
153
|
+
line.textContent = data;
|
|
154
|
+
luigiVisualizationContainer.appendChild(line);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
LuigiMockModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
158
|
+
LuigiMockModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: LuigiMockModule });
|
|
159
|
+
LuigiMockModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiMockModule, providers: [
|
|
160
|
+
{
|
|
161
|
+
provide: APP_INITIALIZER,
|
|
162
|
+
useFactory: LuigiMockEngine.initPostMessageHook,
|
|
163
|
+
multi: true
|
|
164
|
+
}
|
|
165
|
+
] });
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiMockModule, decorators: [{
|
|
167
|
+
type: NgModule,
|
|
168
|
+
args: [{
|
|
169
|
+
providers: [
|
|
170
|
+
{
|
|
171
|
+
provide: APP_INITIALIZER,
|
|
172
|
+
useFactory: LuigiMockEngine.initPostMessageHook,
|
|
173
|
+
multi: true
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}]
|
|
177
|
+
}] });
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVpZ2ktbW9jay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc3VwcG9ydC1hbmd1bGFyL3NyYy9saWIvbHVpZ2ktbW9jay9sdWlnaS1tb2NrLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBRW5FLFdBQVc7QUFVWDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLGtGQUFrRjtJQUMzRSxNQUFNLENBQUMsbUJBQW1CO1FBQy9CLE9BQU8sS0FBSyxJQUFtQixFQUFFO1lBQy9CLDhDQUE4QztZQUM5QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO2dCQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBRTFDLHdEQUF3RDtnQkFDeEQsSUFBSyxNQUFjLENBQUMsb0JBQW9CLEVBQUU7b0JBQ3hDLE9BQU87aUJBQ1I7Z0JBRUQscUJBQXFCO2dCQUNyQixJQUFLLE1BQWMsQ0FBQyxXQUFXLEVBQUU7b0JBQzlCLE1BQWMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNsRDtnQkFFQSxNQUFjLENBQUMsb0JBQW9CLEdBQUc7b0JBQ3JDLFdBQVcsRUFBRSxVQUFTLENBQU07d0JBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLEVBQUU7NEJBQy9FLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENB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LEVBQUUsZUFBZTs0QkFDeEIsVUFBVSxFQUFFLGVBQWUsQ0FBQyxtQkFBbUI7NEJBQy9DLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTHVpZ2lNb2NrRW5naW5lIH0gZnJvbSAnQGx1aWdpLXByb2plY3QvdGVzdGluZy11dGlsaXRpZXMnO1xuXG4vLyBAZHluYW1pY1xuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogTHVpZ2lNb2NrRW5naW5lLmluaXRQb3N0TWVzc2FnZUhvb2ssXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbi8qXG4gKiBUaGlzIGNsYXNzIG1vY2tzIEx1aWdpIENvcmUgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIE1pY3JvIEZyb250ZW5kcyB0aGF0IHVzZSBMdWlnaSBDbGllbnQgd291bGQgdXN1YWxseSBjb21tdW5pY2F0ZSB3aXRoIEx1aWdpIENvcmVcbiAqIGJhY2sgYW5kIGZvcnRoLiBXaGVuIHRlc3RpbmcgTHVpZ2kgQ2xpZW50IGJhc2VkIGNvbXBvbmVudHMsIEx1aWdpIENvcmUgbWlnaHRcbiAqIG5vdCBiZSBwcmVzZW50IHdoaWNoIGxlYWRzIGludG8gbGltaXRhdGlvbnMgb24gaW50ZWdyYXRpb24vZTJlIHRlc3RpbmcgZm9yIHN0YW5kYWxvbmVcbiAqIG1pY3JvZnJvbnRlbmRzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGFkZHMgYSBob29rIHRvIHRoZSB3aW5kb3cgcG9zdE1lc3NhZ2UgQVBJIGJ5IGFkZGluZyBhbiBldmVudCBsaXN0ZW5lciB0byB0aGVcbiAqIGdsb2JhbCBtZXNzYWdlIGV2ZW50IG9mIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBtb2NraW5nIHRoZSBjYWxsYmFjay5cbiAqIEluIHRoZSBub3JtYWwgd29ya2Zsb3cgdGhpcyBtZXNzYWdlIHdvdWxkIHBpY2tlZCB1cCBieSBMdWlnaSBDb3JlIHdoaWNoIHRoZW4gc2VuZHMgdGhlIHJlc3BvbnNlIGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBMdWlnaU1vY2tNb2R1bGUge1xuICAvLyBBZGQgYSBob29rIHRvIHRoZSBwb3N0IG1lc3NhZ2UgYXBpIHRvIG1vY2sgdGhlIEx1aWdpQ29yZSByZXNwb25zZSB0byB0aGUgQ2xpZW50XG4gIHB1YmxpYyBzdGF0aWMgaW5pdFBvc3RNZXNzYWdlSG9vaygpIHtcbiAgICByZXR1cm4gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgTHVpZ2kgQ2xpZW50IGlzIHJ1bm5pbmcgc3RhbmRhbG9uZVxuICAgICAgaWYgKHdpbmRvdy5wYXJlbnQgPT09IHdpbmRvdykge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdEZXRlY3RlZCBzdGFuZGFsb25lIG1vZGUnKTtcblxuICAgICAgICAvLyBDaGVjayBhbmQgc2tpcCBpZiBMdWlnaSBlbnZpcm9ubWVudCBpcyBhbHJlYWR5IG1vY2tlZFxuICAgICAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLmx1aWdpTW9ja0Vudmlyb25tZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW9jayB0YXJnZXQgb3JpZ2luXG4gICAgICAgIGlmICgod2luZG93IGFzIGFueSkuTHVpZ2lDbGllbnQpIHtcbiAgICAgICAgICAod2luZG93IGFzIGFueSkuTHVpZ2lDbGllbnQuc2V0VGFyZ2V0T3JpZ2luKCcqJyk7XG4gICAgICAgIH1cblxuICAgICAgICAod2luZG93IGFzIGFueSkubHVpZ2lNb2NrRW52aXJvbm1lbnQgPSB7XG4gICAgICAgICAgbXNnTGlzdGVuZXI6IGZ1bmN0aW9uKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUuZGF0YS5tc2cgJiYgKGUuZGF0YS5tc2cuc3RhcnRzV2l0aCgnbHVpZ2kuJykgfHwgZS5kYXRhLm1zZyA9PT0gJ3N0b3JhZ2UnKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdMdWlnaSBtc2cnLCBlLmRhdGEpO1xuXG4gICAgICAgICAgICAgIGlmIChlLmRhdGEubXNnID09PSAnbHVpZ2kuZ2V0LWNvbnRleHQnKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBtc2c6ICdsdWlnaS5pbml0JyxcbiAgICAgICAgICAgICAgICAgICAgZW11bGF0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmlld1N0YWNrU2l6ZTogMVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBlLmRhdGEuY29udGV4dFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICcqJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyB2aXp1YWxpc2UgcmV0cmlldmVkIGV2ZW50IGRhdGFcbiAgICAgICAgICAgICAgTHVpZ2lNb2NrRW5naW5lLnZpc3VhbGl6ZShKU09OLnN0cmluZ2lmeShlLmRhdGEpKTtcblxuICAgICAgICAgICAgICAvLyBDaGVjayBhbmQgcnVuIG1vY2tlZCBjYWxsYmFjayBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgY29uc3QgbW9ja0xpc3RlbmVyID0gKHdpbmRvdyBhcyBhbnkpLmx1aWdpTW9ja0Vudmlyb25tZW50Lm1vY2tMaXN0ZW5lcnNbZS5kYXRhLm1zZ107XG4gICAgICAgICAgICAgIGlmIChtb2NrTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICBtb2NrTGlzdGVuZXIoZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vY2tMaXN0ZW5lcnM6IHtcbiAgICAgICAgICAgICdsdWlnaS5uYXZpZ2F0aW9uLnBhdGhFeGlzdHMnOiAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtb2NrRGF0YSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdsdWlnaU1vY2tEYXRhJyk7XG4gICAgICAgICAgICAgIGxldCBtb2NrRGF0YVBhcnNlZCA9IG1vY2tEYXRhID8gSlNPTi5wYXJzZShtb2NrRGF0YSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIGNvbnN0IGlucHV0UGF0aCA9IGV2ZW50LmRhdGEuZGF0YS5saW5rO1xuICAgICAgICAgICAgICBjb25zdCBwYXRoRXhpc3RzID0gbW9ja0RhdGFQYXJzZWQgJiYgbW9ja0RhdGFQYXJzZWQucGF0aEV4aXN0cyAmJiBtb2NrRGF0YVBhcnNlZC5wYXRoRXhpc3RzW2lucHV0UGF0aF07XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgbXNnOiAnbHVpZ2kubmF2aWdhdGlvbi5wYXRoRXhpc3RzLmFuc3dlcicsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogZXZlbnQuZGF0YS5kYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgcGF0aEV4aXN0czogcGF0aEV4aXN0cyA/IHBhdGhFeGlzdHMgOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW11bGF0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHJlc3BvbnNlLCAnKicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vdXhcbiAgICAgICAgICAgICdsdWlnaS51eC5jb25maXJtYXRpb25Nb2RhbC5zaG93JzogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgbXNnOiAnbHVpZ2kudXguY29uZmlybWF0aW9uTW9kYWwuaGlkZScsXG4gICAgICAgICAgICAgICAgZGF0YTogZXZlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICBlbXVsYXRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UocmVzcG9uc2UsICcqJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2x1aWdpLnV4LmFsZXJ0LnNob3cnOiAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBtc2c6ICdsdWlnaS51eC5hbGVydC5oaWRlJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIGVtdWxhdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShyZXNwb25zZSwgJyonKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbHVpZ2kudXguc2V0LWN1cnJlbnQtbG9jYWxlJzogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgbXNnOiAnbHVpZ2kuY3VycmVudC1sb2NhbGUtY2hhbmdlZCcsXG4gICAgICAgICAgICAgICAgY3VycmVudExvY2FsZTogZXZlbnQuZGF0YS5kYXRhLmN1cnJlbnRMb2NhbGUsXG4gICAgICAgICAgICAgICAgZW11bGF0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHJlc3BvbnNlLCAnKicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGxpbmtNYW5hZ2VyXG4gICAgICAgICAgICAnbHVpZ2kubmF2aWdhdGlvbi5vcGVuJzogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgbXNnOiAnbHVpZ2kubmF2aWdhdGUub2snLFxuICAgICAgICAgICAgICAgIGRhdGE6IGV2ZW50LmRhdGEsXG4gICAgICAgICAgICAgICAgZW11bGF0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHJlc3BvbnNlLCAnKicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdsdWlnaS5uYXZpZ2F0aW9uLnNwbGl0dmlldy5jbG9zZSc6IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIG1zZzogJ2x1aWdpLm5hdmlnYXRlLm9rJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIGVtdWxhdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShyZXNwb25zZSwgJyonKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbHVpZ2kubmF2aWdhdGlvbi5zcGxpdHZpZXcuY29sbGFwc2UnOiAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBtc2c6ICdsdWlnaS5uYXZpZ2F0ZS5vaycsXG4gICAgICAgICAgICAgICAgZGF0YTogZXZlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICBlbXVsYXRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UocmVzcG9uc2UsICcqJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2x1aWdpLm5hdmlnYXRpb24uc3BsaXR2aWV3LmV4cGFuZCc6IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIG1zZzogJ2x1aWdpLm5hdmlnYXRlLm9rJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBldmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIGVtdWxhdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShyZXNwb25zZSwgJyonKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBzdG9yYWdlXG4gICAgICAgICAgICBzdG9yYWdlOiAoKSA9PiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBMaXN0ZW4gdG8gdGhlIGdsb2JhbCAnbWVzc2FnZScgZXZlbnQgb2YgdGhlIHdpbmRvdyBvYmplY3RcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAod2luZG93IGFzIGFueSkubHVpZ2lNb2NrRW52aXJvbm1lbnQubXNnTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIGRhdGEgb2JqZWN0IG9mIHR5cGUgJ2FueScgYW5kIHZpenVhbGl6ZXMgYSBzaW1wbGUgY29udGFpbmVyXG4gICAqIHdoaWNoIGhvbGRzIGRhdGEgdGhhdCBpcyB1c2VmdWwgZm9yIGUyZSB0ZXN0aW5nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2aXN1YWxpemUoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGx1aWdpVmlzdWFsaXphdGlvbkNvbnRhaW5lcjogRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbHVpZ2ktZGVidWctdmlzLWNudCcpO1xuICAgIC8vIENvbnN0cnVjdCBlbGVtZW50IHN0cnVjdHVyZSBpZiBub3QgYWxyZWFkeSBjb25zdHJ1Y3RlZFxuICAgIGlmICghbHVpZ2lWaXN1YWxpemF0aW9uQ29udGFpbmVyKSB7XG4gICAgICBsdWlnaVZpc3VhbGl6YXRpb25Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGx1aWdpVmlzdWFsaXphdGlvbkNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2x1aWdpLWRlYnVnLXZpcy1jbnQnKTtcbiAgICAgIC8vIEhpZGUgdGhlIGFkZGVkIERPTSBlbGVtZW50IHRvIGF2b2lkIGludGVyZmVycmluZy9vdmVybGFwcGluZyB3aXRoIG90aGVyIGVsZW1lbnRzIGR1cmluZyB0ZXN0aW5nLlxuICAgICAgbHVpZ2lWaXN1YWxpemF0aW9uQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTpub25lJyk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGx1aWdpVmlzdWFsaXphdGlvbkNvbnRhaW5lcik7XG4gICAgfVxuICAgIGNvbnN0IGxpbmU6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbGluZS50ZXh0Q29udGVudCA9IGRhdGE7XG4gICAgbHVpZ2lWaXN1YWxpemF0aW9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGxpbmUpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { RouteReuseStrategy, RouterModule } from '@angular/router';
|
|
3
|
+
import { LuigiPreloadComponent } from './component/luigi.preload.component';
|
|
4
|
+
import { LuigiContextService } from './service/luigi-context-service';
|
|
5
|
+
import { LuigiContextServiceImpl } from './service/luigi-context.service.impl';
|
|
6
|
+
import { LuigiRouteStrategy } from './route/luigi-route-strategy';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./service/luigi-auto-routing.service";
|
|
9
|
+
import * as i2 from "./service/luigi-context-service";
|
|
10
|
+
import * as i3 from "@angular/router";
|
|
11
|
+
export const staticRoutes = [
|
|
12
|
+
/** here an example if you want to specify that this component is a virtualTree element in Luigi Core navigation*/
|
|
13
|
+
{
|
|
14
|
+
path: 'luigi-client-support-preload',
|
|
15
|
+
component: LuigiPreloadComponent,
|
|
16
|
+
data: { fromVirtualTreeRoot: true }
|
|
17
|
+
},
|
|
18
|
+
/** 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*/
|
|
19
|
+
{
|
|
20
|
+
path: 'luigi-client-support-preload',
|
|
21
|
+
component: LuigiPreloadComponent,
|
|
22
|
+
data: { luigiRoute: '/home/reload' }
|
|
23
|
+
},
|
|
24
|
+
/** 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 */
|
|
25
|
+
{
|
|
26
|
+
path: 'luigi-client-support-preload=component',
|
|
27
|
+
component: LuigiPreloadComponent,
|
|
28
|
+
data: { reuse: true }
|
|
29
|
+
},
|
|
30
|
+
/** here an example if you want to update modalPathParam on internal navigation */
|
|
31
|
+
{
|
|
32
|
+
path: 'luigi-client-support-preload',
|
|
33
|
+
component: LuigiPreloadComponent,
|
|
34
|
+
data: { updateModalPathParam: true }
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
export class LuigiAngularSupportModule {
|
|
38
|
+
constructor(navigation, context) { }
|
|
39
|
+
}
|
|
40
|
+
LuigiAngularSupportModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiAngularSupportModule, deps: [{ token: i1.LuigiAutoRoutingService }, { token: i2.LuigiContextService }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
41
|
+
LuigiAngularSupportModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: LuigiAngularSupportModule, declarations: [LuigiPreloadComponent], imports: [i3.RouterModule], exports: [LuigiPreloadComponent] });
|
|
42
|
+
LuigiAngularSupportModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiAngularSupportModule, providers: [
|
|
43
|
+
{
|
|
44
|
+
provide: LuigiContextService,
|
|
45
|
+
useClass: LuigiContextServiceImpl
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
provide: RouteReuseStrategy,
|
|
49
|
+
useClass: LuigiRouteStrategy
|
|
50
|
+
}
|
|
51
|
+
], imports: [RouterModule.forChild(staticRoutes)] });
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiAngularSupportModule, decorators: [{
|
|
53
|
+
type: NgModule,
|
|
54
|
+
args: [{
|
|
55
|
+
declarations: [LuigiPreloadComponent],
|
|
56
|
+
imports: [RouterModule.forChild(staticRoutes)],
|
|
57
|
+
providers: [
|
|
58
|
+
{
|
|
59
|
+
provide: LuigiContextService,
|
|
60
|
+
useClass: LuigiContextServiceImpl
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
provide: RouteReuseStrategy,
|
|
64
|
+
useClass: LuigiRouteStrategy
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
exports: [LuigiPreloadComponent]
|
|
68
|
+
}]
|
|
69
|
+
}], ctorParameters: function () { return [{ type: i1.LuigiAutoRoutingService }, { type: i2.LuigiContextService }]; } });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVpZ2kuYW5ndWxhci5zdXBwb3J0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zdXBwb3J0LWFuZ3VsYXIvc3JjL2xpYi9sdWlnaS5hbmd1bGFyLnN1cHBvcnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQUVsRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQVc7SUFDbEMsa0hBQWtIO0lBQ2xIO1FBQ0UsSUFBSSxFQUFFLDhCQUE4QjtRQUNwQyxTQUFTLEVBQUUscUJBQXFCO1FBQ2hDLElBQUksRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtLQUNwQztJQUNELDBJQUEwSTtJQUMxSTtRQUNFLElBQUksRUFBRSw4QkFBOEI7UUFDcEMsU0FBUyxFQUFFLHFCQUFxQjtRQUNoQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFO0tBQ3JDO0lBQ0QsMEtBQTBLO0lBQzFLO1FBQ0UsSUFBSSxFQUFFLHdDQUF3QztRQUM5QyxTQUFTLEVBQUUscUJBQXFCO1FBQ2hDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7S0FDdEI7SUFDRCxtRkFBbUY7SUFDbkY7UUFDRSxJQUFJLEVBQUUsOEJBQThCO1FBQ3BDLFNBQVMsRUFBRSxxQkFBcUI7UUFDaEMsSUFBSSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFO0tBQ3JDO0NBQ0YsQ0FBQztBQWlCRixNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLFlBQVksVUFBbUMsRUFBRSxPQUE0QixJQUFHLENBQUM7O3VIQUR0RSx5QkFBeUI7d0hBQXpCLHlCQUF5QixpQkFkckIscUJBQXFCLHlDQVkxQixxQkFBcUI7d0hBRXBCLHlCQUF5QixhQVp6QjtRQUNUO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixRQUFRLEVBQUUsdUJBQXVCO1NBQ2xDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLFFBQVEsRUFBRSxrQkFBa0I7U0FDN0I7S0FDRixZQVZTLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDOzRGQWFsQyx5QkFBeUI7a0JBZnJDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzlDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixRQUFRLEVBQUUsdUJBQXVCO3lCQUNsQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixRQUFRLEVBQUUsa0JBQWtCO3lCQUM3QjtxQkFDRjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVSZXVzZVN0cmF0ZWd5LCBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMdWlnaVByZWxvYWRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudC9sdWlnaS5wcmVsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMdWlnaUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL2x1aWdpLWNvbnRleHQtc2VydmljZSc7XG5pbXBvcnQgeyBMdWlnaUNvbnRleHRTZXJ2aWNlSW1wbCB9IGZyb20gJy4vc2VydmljZS9sdWlnaS1jb250ZXh0LnNlcnZpY2UuaW1wbCc7XG5pbXBvcnQgeyBMdWlnaUF1dG9Sb3V0aW5nU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9sdWlnaS1hdXRvLXJvdXRpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBMdWlnaVJvdXRlU3RyYXRlZ3kgfSBmcm9tICcuL3JvdXRlL2x1aWdpLXJvdXRlLXN0cmF0ZWd5JztcblxuZXhwb3J0IGNvbnN0IHN0YXRpY1JvdXRlczogUm91dGVzID0gW1xuICAvKiogaGVyZSBhbiBleGFtcGxlIGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhhdCB0aGlzIGNvbXBvbmVudCBpcyBhIHZpcnR1YWxUcmVlIGVsZW1lbnQgaW4gTHVpZ2kgQ29yZSBuYXZpZ2F0aW9uKi9cbiAge1xuICAgIHBhdGg6ICdsdWlnaS1jbGllbnQtc3VwcG9ydC1wcmVsb2FkJyxcbiAgICBjb21wb25lbnQ6IEx1aWdpUHJlbG9hZENvbXBvbmVudCxcbiAgICBkYXRhOiB7IGZyb21WaXJ0dWFsVHJlZVJvb3Q6IHRydWUgfVxuICB9LFxuICAvKiogaGVyZSBhbiBleGFtcGxlIGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhhdCB0aGlzIGNvbXBvbmVudCBpdCBpcyBhIGx1aWdpIGNvbXBvbmVudCBhbmQgdSB3YW50IHRvIGNoYW5nZSB0aGUgbmF2aWdhdGlvbiBpbiBMdWlnaSBjb3JlKi9cbiAge1xuICAgIHBhdGg6ICdsdWlnaS1jbGllbnQtc3VwcG9ydC1wcmVsb2FkJyxcbiAgICBjb21wb25lbnQ6IEx1aWdpUHJlbG9hZENvbXBvbmVudCxcbiAgICBkYXRhOiB7IGx1aWdpUm91dGU6ICcvaG9tZS9yZWxvYWQnIH1cbiAgfSxcbiAgLyoqIGhlcmUgYW4gZXhhbXBsZSBpZiB5b3Ugd2FudCB0byByZXVzZSB0aGUgY29tcG9uZW50IGFuZCBub3QgcmVjcmVhdGluZyBldmVyeSB0aW1lIHlvdSBuYXZpZ2F0ZSB0byBpdCAoYSBzaW5nbGV0b24gQ29tcG9uZW50KSBJdCByZXF1aXJlcyBpbiB5b3VyIG1vZHVsZSB0byByZWRlZmluZSAgKi9cbiAge1xuICAgIHBhdGg6ICdsdWlnaS1jbGllbnQtc3VwcG9ydC1wcmVsb2FkPWNvbXBvbmVudCcsXG4gICAgY29tcG9uZW50OiBMdWlnaVByZWxvYWRDb21wb25lbnQsXG4gICAgZGF0YTogeyByZXVzZTogdHJ1ZSB9XG4gIH0sXG4gIC8qKiBoZXJlIGFuIGV4YW1wbGUgaWYgeW91IHdhbnQgdG8gdXBkYXRlIG1vZGFsUGF0aFBhcmFtIG9uIGludGVybmFsIG5hdmlnYXRpb24gICovXG4gIHtcbiAgICBwYXRoOiAnbHVpZ2ktY2xpZW50LXN1cHBvcnQtcHJlbG9hZCcsXG4gICAgY29tcG9uZW50OiBMdWlnaVByZWxvYWRDb21wb25lbnQsXG4gICAgZGF0YTogeyB1cGRhdGVNb2RhbFBhdGhQYXJhbTogdHJ1ZSB9XG4gIH1cbl07XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0x1aWdpUHJlbG9hZENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoc3RhdGljUm91dGVzKV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEx1aWdpQ29udGV4dFNlcnZpY2UsXG4gICAgICB1c2VDbGFzczogTHVpZ2lDb250ZXh0U2VydmljZUltcGxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJvdXRlUmV1c2VTdHJhdGVneSxcbiAgICAgIHVzZUNsYXNzOiBMdWlnaVJvdXRlU3RyYXRlZ3lcbiAgICB9XG4gIF0sXG4gIGV4cG9ydHM6IFtMdWlnaVByZWxvYWRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEx1aWdpQW5ndWxhclN1cHBvcnRNb2R1bGUge1xuICBjb25zdHJ1Y3RvcihuYXZpZ2F0aW9uOiBMdWlnaUF1dG9Sb3V0aW5nU2VydmljZSwgY29udGV4dDogTHVpZ2lDb250ZXh0U2VydmljZSkge31cbn1cbiJdfQ==
|
|
File without changes
|
package/{esm2015/lib/route/luigi-route-strategy.js → esm2020/lib/route/luigi-route-strategy.mjs}
RENAMED
|
File without changes
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import { convertToParamMap, NavigationEnd } from '@angular/router';
|
|
4
|
+
import { linkManager, uxManager } from '@luigi-project/client';
|
|
5
|
+
import { filter } from 'rxjs/operators';
|
|
6
|
+
import { LuigiActivatedRouteSnapshotHelper } from '../route/luigi-activated-route-snapshot-helper';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/router";
|
|
9
|
+
import * as i2 from "./luigi-context-service";
|
|
10
|
+
export class LuigiAutoRoutingService {
|
|
11
|
+
constructor(router, luigiContextService) {
|
|
12
|
+
this.router = router;
|
|
13
|
+
this.luigiContextService = luigiContextService;
|
|
14
|
+
this.subscription = new Subscription();
|
|
15
|
+
this.subscription.add(this.router.events.pipe(this.doFilter()).subscribe(this.doSubscription.bind(this)));
|
|
16
|
+
}
|
|
17
|
+
doFilter() {
|
|
18
|
+
return filter((event) => {
|
|
19
|
+
return !!(event instanceof NavigationEnd &&
|
|
20
|
+
event.url &&
|
|
21
|
+
event.url.length > 0 &&
|
|
22
|
+
!(history.state && history.state.luigiInduced));
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* This method will be take in consideration angular route that having in data object the paramter
|
|
27
|
+
* fromVirtualTreeRoot: true, here an example:
|
|
28
|
+
* {path: 'demo', component: DemoComponent, data:{fromVirtualTreeRoot: true}}
|
|
29
|
+
* Another option is to specify the LuigiPath: if you add in route data luigiRoute:'/xxxx/xxx';
|
|
30
|
+
* in the case we will update the path in LuigiCore navigation, here an example
|
|
31
|
+
* {path: 'demo', component: DemoComponent, data:{luigiRoute: '/home/demo''}}
|
|
32
|
+
* If updateModalPathParam is specified, than modalPathParam will be updated upon internal navigation:
|
|
33
|
+
* {path: 'demo', component: DemoComponent, data:{updateModalPathParam: true}}
|
|
34
|
+
* @param event the NavigationEnd event
|
|
35
|
+
*/
|
|
36
|
+
doSubscription(event) {
|
|
37
|
+
let current = LuigiActivatedRouteSnapshotHelper.getCurrent();
|
|
38
|
+
if (!current) {
|
|
39
|
+
current = this.router.routerState.root.snapshot;
|
|
40
|
+
while (current?.children?.length > 0) {
|
|
41
|
+
// handle multiple children
|
|
42
|
+
let primary = null;
|
|
43
|
+
current?.children.forEach(childSnapshot => {
|
|
44
|
+
if (childSnapshot.outlet === 'primary') {
|
|
45
|
+
primary = childSnapshot;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
if (primary) {
|
|
49
|
+
current = primary;
|
|
50
|
+
}
|
|
51
|
+
else if (current.firstChild) {
|
|
52
|
+
current = current.firstChild;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (current?.data) {
|
|
60
|
+
const ux = uxManager();
|
|
61
|
+
let lm = linkManager().withoutSync();
|
|
62
|
+
let route;
|
|
63
|
+
if (current.data.luigiRoute) {
|
|
64
|
+
route = current.data.luigiRoute;
|
|
65
|
+
if (current.params) {
|
|
66
|
+
const pmap = convertToParamMap(current.params);
|
|
67
|
+
pmap.keys.forEach(key => {
|
|
68
|
+
const val = pmap.getAll(key).forEach(param => {
|
|
69
|
+
route = route?.replace(':' + key, param);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (current.data.fromContext) {
|
|
74
|
+
if (!this.luigiContextService.getContext()) {
|
|
75
|
+
console.debug('Ignoring auto navigation request, luigi context not set');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (current.data.fromContext === true) {
|
|
79
|
+
lm = lm.fromClosestContext();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
lm = lm.fromContext(current.data.fromContext);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (current.data.fromVirtualTreeRoot) {
|
|
87
|
+
let url = event.url;
|
|
88
|
+
const truncate = current.data.fromVirtualTreeRoot.truncate;
|
|
89
|
+
if (truncate) {
|
|
90
|
+
if (truncate.indexOf('*') === 0) {
|
|
91
|
+
const index = url.indexOf(truncate.substr(1));
|
|
92
|
+
url = url.substr(index + truncate.length - 1);
|
|
93
|
+
}
|
|
94
|
+
else if (url.indexOf(truncate) === 0) {
|
|
95
|
+
url = url.substr(truncate.length);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
route = url;
|
|
99
|
+
console.debug('Calling fromVirtualTreeRoot for url ==> ' + route);
|
|
100
|
+
lm = lm.fromVirtualTreeRoot();
|
|
101
|
+
}
|
|
102
|
+
if (ux.isModal()) {
|
|
103
|
+
if (current.data.updateModalDataPath) {
|
|
104
|
+
lm.updateModalPathInternalNavigation(route, {}, current.data.addHistoryEntry);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else if (route) {
|
|
108
|
+
lm.navigate(route);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
ngOnDestroy() {
|
|
113
|
+
this.subscription.unsubscribe();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
LuigiAutoRoutingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiAutoRoutingService, deps: [{ token: i1.Router }, { token: i2.LuigiContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
117
|
+
LuigiAutoRoutingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiAutoRoutingService, providedIn: 'root' });
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiAutoRoutingService, decorators: [{
|
|
119
|
+
type: Injectable,
|
|
120
|
+
args: [{
|
|
121
|
+
providedIn: 'root'
|
|
122
|
+
}]
|
|
123
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.LuigiContextService }]; } });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVpZ2ktYXV0by1yb3V0aW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc3VwcG9ydC1hbmd1bGFyL3NyYy9saWIvc2VydmljZS9sdWlnaS1hdXRvLXJvdXRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBcUMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQWlDLE1BQU0saUJBQWlCLENBQUM7QUFDbEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7QUFPbkcsTUFBTSxPQUFPLHVCQUF1QjtJQUdsQyxZQUFvQixNQUFjLEVBQVUsbUJBQXdDO1FBQWhFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBRjVFLGlCQUFZLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFlLENBQUMsQ0FDakcsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQXdCLEVBQUU7WUFDNUMsT0FBTyxDQUFDLENBQUMsQ0FDUCxLQUFLLFlBQVksYUFB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QixNQUFNOzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIFBhcnRpYWxPYnNlcnZlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb252ZXJ0VG9QYXJhbU1hcCwgTmF2aWdhdGlvbkVuZCwgUGFyYW1NYXAsIFJvdXRlciwgUm91dGVyRXZlbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgbGlua01hbmFnZXIsIHV4TWFuYWdlciB9IGZyb20gJ0BsdWlnaS1wcm9qZWN0L2NsaWVudCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMdWlnaUFjdGl2YXRlZFJvdXRlU25hcHNob3RIZWxwZXIgfSBmcm9tICcuLi9yb3V0ZS9sdWlnaS1hY3RpdmF0ZWQtcm91dGUtc25hcHNob3QtaGVscGVyJztcbmltcG9ydCB7IEx1aWdpQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL2x1aWdpLWNvbnRleHQtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTHVpZ2lBdXRvUm91dGluZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgbHVpZ2lDb250ZXh0U2VydmljZTogTHVpZ2lDb250ZXh0U2VydmljZSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKHRoaXMuZG9GaWx0ZXIoKSkuc3Vic2NyaWJlKHRoaXMuZG9TdWJzY3JpcHRpb24uYmluZCh0aGlzKSBhcyAoKSA9PiB2b2lkKVxuICAgICk7XG4gIH1cblxuICBkb0ZpbHRlcigpOiBPcGVyYXRvckZ1bmN0aW9uPHVua25vd24sIFJvdXRlckV2ZW50PiB7XG4gICAgcmV0dXJuIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBSb3V0ZXJFdmVudCA9PiB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJlxuICAgICAgICBldmVudC51cmwgJiZcbiAgICAgICAgZXZlbnQudXJsLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgIShoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUubHVpZ2lJbmR1Y2VkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIHRha2UgaW4gY29uc2lkZXJhdGlvbiBhbmd1bGFyIHJvdXRlIHRoYXQgaGF2aW5nIGluIGRhdGEgb2JqZWN0IHRoZSBwYXJhbXRlclxuICAgKiBmcm9tVmlydHVhbFRyZWVSb290OiB0cnVlLCBoZXJlIGFuIGV4YW1wbGU6XG4gICAqIHtwYXRoOiAnZGVtbycsIGNvbXBvbmVudDogRGVtb0NvbXBvbmVudCwgZGF0YTp7ZnJvbVZpcnR1YWxUcmVlUm9vdDogdHJ1ZX19XG4gICAqIEFub3RoZXIgb3B0aW9uIGlzIHRvIHNwZWNpZnkgdGhlIEx1aWdpUGF0aDogaWYgeW91IGFkZCBpbiByb3V0ZSBkYXRhIGx1aWdpUm91dGU6Jy94eHh4L3h4eCc7XG4gICAqIGluIHRoZSBjYXNlIHdlIHdpbGwgdXBkYXRlIHRoZSBwYXRoIGluIEx1aWdpQ29yZSBuYXZpZ2F0aW9uLCBoZXJlIGFuIGV4YW1wbGVcbiAgICoge3BhdGg6ICdkZW1vJywgY29tcG9uZW50OiBEZW1vQ29tcG9uZW50LCBkYXRhOntsdWlnaVJvdXRlOiAnL2hvbWUvZGVtbycnfX1cbiAgICogSWYgdXBkYXRlTW9kYWxQYXRoUGFyYW0gaXMgc3BlY2lmaWVkLCB0aGFuIG1vZGFsUGF0aFBhcmFtIHdpbGwgYmUgdXBkYXRlZCB1cG9uIGludGVybmFsIG5hdmlnYXRpb246XG4gICAqIHtwYXRoOiAnZGVtbycsIGNvbXBvbmVudDogRGVtb0NvbXBvbmVudCwgZGF0YTp7dXBkYXRlTW9kYWxQYXRoUGFyYW06IHRydWV9fVxuICAgKiBAcGFyYW0gZXZlbnQgdGhlIE5hdmlnYXRpb25FbmQgZXZlbnRcbiAgICovXG4gIGRvU3Vic2NyaXB0aW9uKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogdm9pZCB7XG4gICAgbGV0IGN1cnJlbnQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gTHVpZ2lBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90SGVscGVyLmdldEN1cnJlbnQoKTtcblxuICAgIGlmICghY3VycmVudCkge1xuICAgICAgY3VycmVudCA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnJvb3Quc25hcHNob3Q7XG4gICAgICB3aGlsZSAoY3VycmVudD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gaGFuZGxlIG11bHRpcGxlIGNoaWxkcmVuXG4gICAgICAgIGxldCBwcmltYXJ5OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgY3VycmVudD8uY2hpbGRyZW4uZm9yRWFjaChjaGlsZFNuYXBzaG90ID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGRTbmFwc2hvdC5vdXRsZXQgPT09ICdwcmltYXJ5Jykge1xuICAgICAgICAgICAgcHJpbWFyeSA9IGNoaWxkU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW1hcnkpIHtcbiAgICAgICAgICBjdXJyZW50ID0gcHJpbWFyeTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyZW50Py5kYXRhKSB7XG4gICAgICBjb25zdCB1eCA9IHV4TWFuYWdlcigpO1xuICAgICAgbGV0IGxtID0gbGlua01hbmFnZXIoKS53aXRob3V0U3luYygpO1xuICAgICAgbGV0IHJvdXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChjdXJyZW50LmRhdGEubHVpZ2lSb3V0ZSkge1xuICAgICAgICByb3V0ZSA9IGN1cnJlbnQuZGF0YS5sdWlnaVJvdXRlO1xuXG4gICAgICAgIGlmIChjdXJyZW50LnBhcmFtcykge1xuICAgICAgICAgIGNvbnN0IHBtYXA6IFBhcmFtTWFwID0gY29udmVydFRvUGFyYW1NYXAoY3VycmVudC5wYXJhbXMpO1xuICAgICAgICAgIHBtYXAua2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwbWFwLmdldEFsbChrZXkpLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgICAgICAgICByb3V0ZSA9IHJvdXRlPy5yZXBsYWNlKCc6JyArIGtleSwgcGFyYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQuZGF0YS5mcm9tQ29udGV4dCkge1xuICAgICAgICAgIGlmICghdGhpcy5sdWlnaUNvbnRleHRTZXJ2aWNlLmdldENvbnRleHQoKSkge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnSWdub3JpbmcgYXV0byBuYXZpZ2F0aW9uIHJlcXVlc3QsIGx1aWdpIGNvbnRleHQgbm90IHNldCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudC5kYXRhLmZyb21Db250ZXh0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBsbSA9IGxtLmZyb21DbG9zZXN0Q29udGV4dCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsbSA9IGxtLmZyb21Db250ZXh0KGN1cnJlbnQuZGF0YS5mcm9tQ29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuZGF0YS5mcm9tVmlydHVhbFRyZWVSb290KSB7XG4gICAgICAgIGxldCB1cmwgPSBldmVudC51cmw7XG4gICAgICAgIGNvbnN0IHRydW5jYXRlID0gY3VycmVudC5kYXRhLmZyb21WaXJ0dWFsVHJlZVJvb3QudHJ1bmNhdGU7XG4gICAgICAgIGlmICh0cnVuY2F0ZSkge1xuICAgICAgICAgIGlmICh0cnVuY2F0ZS5pbmRleE9mKCcqJykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXJsLmluZGV4T2YodHJ1bmNhdGUuc3Vic3RyKDEpKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHIoaW5kZXggKyB0cnVuY2F0ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHVybC5pbmRleE9mKHRydW5jYXRlKSA9PT0gMCkge1xuICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cih0cnVuY2F0ZS5sZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb3V0ZSA9IHVybDtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnQ2FsbGluZyBmcm9tVmlydHVhbFRyZWVSb290IGZvciB1cmwgPT0+ICcgKyByb3V0ZSk7XG4gICAgICAgIGxtID0gbG0uZnJvbVZpcnR1YWxUcmVlUm9vdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXguaXNNb2RhbCgpKSB7XG4gICAgICAgIGlmIChjdXJyZW50LmRhdGEudXBkYXRlTW9kYWxEYXRhUGF0aCkge1xuICAgICAgICAgIGxtLnVwZGF0ZU1vZGFsUGF0aEludGVybmFsTmF2aWdhdGlvbihyb3V0ZSBhcyBzdHJpbmcsIHt9LCBjdXJyZW50LmRhdGEuYWRkSGlzdG9yeUVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyb3V0ZSkge1xuICAgICAgICBsbS5uYXZpZ2F0ZShyb3V0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
|
|
File without changes
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { ReplaySubject } from 'rxjs';
|
|
3
|
+
import { first } from 'rxjs/operators';
|
|
4
|
+
import { addInitListener, addContextUpdateListener } from '@luigi-project/client';
|
|
5
|
+
import { ILuigiContextTypes } from './luigi-context-service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class LuigiContextServiceImpl {
|
|
8
|
+
constructor(zone) {
|
|
9
|
+
this.zone = zone;
|
|
10
|
+
this.subject = new ReplaySubject(1);
|
|
11
|
+
this.currentContext = null;
|
|
12
|
+
addInitListener(initContext => {
|
|
13
|
+
this.addListener(ILuigiContextTypes.INIT, initContext);
|
|
14
|
+
});
|
|
15
|
+
addContextUpdateListener(updateContext => {
|
|
16
|
+
this.addListener(ILuigiContextTypes.UPDATE, updateContext);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
contextObservable() {
|
|
20
|
+
return this.subject.asObservable();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get latest context object retrieved from luigi core application or none, if not yet set.
|
|
24
|
+
*/
|
|
25
|
+
getContext() {
|
|
26
|
+
return this.currentContext && this.currentContext.context;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get a promise that resolves when context is set.
|
|
30
|
+
*/
|
|
31
|
+
getContextAsync() {
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
if (this.getContext()) {
|
|
34
|
+
resolve(this.getContext());
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this.contextObservable()
|
|
38
|
+
.pipe(first())
|
|
39
|
+
.subscribe(ctx => {
|
|
40
|
+
resolve(ctx.context);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Set current context
|
|
47
|
+
*/
|
|
48
|
+
setContext(obj) {
|
|
49
|
+
this.zone.run(() => {
|
|
50
|
+
this.currentContext = obj;
|
|
51
|
+
this.subject.next(obj);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
addListener(contextType, context) {
|
|
55
|
+
this.setContext({
|
|
56
|
+
contextType,
|
|
57
|
+
context
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
LuigiContextServiceImpl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiContextServiceImpl, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
62
|
+
LuigiContextServiceImpl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiContextServiceImpl, providedIn: 'root' });
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LuigiContextServiceImpl, decorators: [{
|
|
64
|
+
type: Injectable,
|
|
65
|
+
args: [{
|
|
66
|
+
providedIn: 'root'
|
|
67
|
+
}]
|
|
68
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVpZ2ktY29udGV4dC5zZXJ2aWNlLmltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc3VwcG9ydC1hbmd1bGFyL3NyYy9saWIvc2VydmljZS9sdWlnaS1jb250ZXh0LnNlcnZpY2UuaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBVyxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRixPQUFPLEVBQW1CLGtCQUFrQixFQUF1QixNQUFNLHlCQUF5QixDQUFDOztBQUtuRyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBSHhCLFlBQU8sR0FBbUMsSUFBSSxhQUFhLENBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLG1CQUFjLEdBQXFCLElBQW1DLENBQUM7UUFHN0UsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsd0JBQXdCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtxQkFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNiLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxVQUFVLENBQUMsR0FBb0I7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxXQUErQixFQUFFLE9BQWdCO1FBQzNELElBQUksQ0FBQyxVQUFVLENBQUM7WUFDZCxXQUFXO1lBQ1gsT0FBTztTQUNXLENBQUMsQ0FBQztJQUN4QixDQUFDOztxSEF4RFUsdUJBQXVCO3lIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRleHQsIGFkZEluaXRMaXN0ZW5lciwgYWRkQ29udGV4dFVwZGF0ZUxpc3RlbmVyIH0gZnJvbSAnQGx1aWdpLXByb2plY3QvY2xpZW50JztcbmltcG9ydCB7IElDb250ZXh0TWVzc2FnZSwgSUx1aWdpQ29udGV4dFR5cGVzLCBMdWlnaUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9sdWlnaS1jb250ZXh0LXNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMdWlnaUNvbnRleHRTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEx1aWdpQ29udGV4dFNlcnZpY2Uge1xuICBwcml2YXRlIHN1YmplY3Q6IFJlcGxheVN1YmplY3Q8SUNvbnRleHRNZXNzYWdlPiA9IG5ldyBSZXBsYXlTdWJqZWN0PElDb250ZXh0TWVzc2FnZT4oMSk7XG4gIHByaXZhdGUgY3VycmVudENvbnRleHQ6IElDb250ZXh0TWVzc2FnZSA9IChudWxsIGFzIHVua25vd24pIGFzIElDb250ZXh0TWVzc2FnZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgIGFkZEluaXRMaXN0ZW5lcihpbml0Q29udGV4dCA9PiB7XG4gICAgICB0aGlzLmFkZExpc3RlbmVyKElMdWlnaUNvbnRleHRUeXBlcy5JTklULCBpbml0Q29udGV4dCk7XG4gICAgfSk7XG4gICAgYWRkQ29udGV4dFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUNvbnRleHQgPT4ge1xuICAgICAgdGhpcy5hZGRMaXN0ZW5lcihJTHVpZ2lDb250ZXh0VHlwZXMuVVBEQVRFLCB1cGRhdGVDb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb250ZXh0T2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPElDb250ZXh0TWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLnN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxhdGVzdCBjb250ZXh0IG9iamVjdCByZXRyaWV2ZWQgZnJvbSBsdWlnaSBjb3JlIGFwcGxpY2F0aW9uIG9yIG5vbmUsIGlmIG5vdCB5ZXQgc2V0LlxuICAgKi9cbiAgcHVibGljIGdldENvbnRleHQoKTogQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENvbnRleHQgJiYgdGhpcy5jdXJyZW50Q29udGV4dC5jb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGNvbnRleHQgaXMgc2V0LlxuICAgKi9cbiAgcHVibGljIGdldENvbnRleHRBc3luYygpOiBQcm9taXNlPENvbnRleHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q29udGV4dD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ2V0Q29udGV4dCgpKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250ZXh0T2JzZXJ2YWJsZSgpXG4gICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKGN0eCA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGN0eC5jb250ZXh0KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY3VycmVudCBjb250ZXh0XG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0Q29udGV4dChvYmo6IElDb250ZXh0TWVzc2FnZSk6IHZvaWQge1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dCA9IG9iajtcbiAgICAgIHRoaXMuc3ViamVjdC5uZXh0KG9iaik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRMaXN0ZW5lcihjb250ZXh0VHlwZTogSUx1aWdpQ29udGV4dFR5cGVzLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb250ZXh0KHtcbiAgICAgIGNvbnRleHRUeXBlLFxuICAgICAgY29udGV4dFxuICAgIH0gYXMgSUNvbnRleHRNZXNzYWdlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVpZ2ktcHJvamVjdC1jbGllbnQtc3VwcG9ydC1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXN1cHBvcnQtYW5ndWxhci9zcmMvbHVpZ2ktcHJvamVjdC1jbGllbnQtc3VwcG9ydC1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
File without changes
|