cloud-ide-layout 0.0.1 → 1.0.1
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 +466 -13
- package/esm2022/lib/cloud-ide-layout.routes.mjs +24 -10
- package/esm2022/lib/layout/console/console-wrapper/console-wrapper.component.mjs +6 -6
- package/esm2022/lib/layout/console/console.service.mjs +28 -0
- package/esm2022/lib/layout/footer/footer-wrapper/footer-wrapper.component.mjs +16 -8
- package/esm2022/lib/layout/footer/footer.service.mjs +28 -0
- package/esm2022/lib/layout/header/header-wrapper/header-wrapper.component.mjs +69 -18
- package/esm2022/lib/layout/header/header.service.mjs +17 -6
- package/esm2022/lib/layout/home/home-wrapper/home-wrapper.component.mjs +194 -7
- package/esm2022/lib/layout/layout/layout-wrapper/layout-wrapper.component.mjs +18 -9
- package/esm2022/lib/layout/request/request-wrapper/request-wrapper.component.mjs +54 -6
- package/esm2022/lib/layout/request/request.service.mjs +235 -0
- package/esm2022/lib/layout/request/tab-content/tab-content.component.mjs +84 -0
- package/esm2022/lib/layout/shared/shared-wrapper/shared-wrapper.component.mjs +32 -20
- package/esm2022/lib/layout/shared/shared.service.mjs +490 -14
- package/esm2022/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.mjs +480 -15
- package/esm2022/lib/layout/sidebar/sidebar.service.mjs +20 -7
- package/esm2022/lib/layout/sidedrawer/cide-lyt-drawer-base.class.mjs +40 -0
- package/esm2022/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.mjs +296 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.mjs +175 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.mjs +51 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.mjs +254 -9
- package/esm2022/lib/layout/sidedrawer/sidedrawer.service.mjs +70 -0
- package/esm2022/lib/services/app-state/app-state-helper.service.mjs +222 -0
- package/esm2022/lib/services/app-state/app-state.service.mjs +256 -0
- package/esm2022/lib/services/app-state/index.mjs +3 -0
- package/esm2022/lib/services/cache-manager/cache-manager.service.mjs +112 -0
- package/esm2022/lib/services/file-manager/file-manager.service.mjs +7 -7
- package/esm2022/lib/services/tab-state.service.mjs +128 -0
- package/esm2022/lib/services/theme/theme.service.mjs +151 -0
- package/esm2022/lib/services/user-status/user-status.service.mjs +135 -0
- package/esm2022/lib/utils/custom-route-reuse-strategy.mjs +61 -0
- package/esm2022/lib/utils/index.mjs +2 -0
- package/esm2022/public-api.mjs +7 -1
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-DqL3A73V.mjs +2914 -0
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-DqL3A73V.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-drawer-theme.component-xd8IG3WP.mjs +443 -0
- package/fesm2022/cloud-ide-layout-drawer-theme.component-xd8IG3WP.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-DEdsEiaq.mjs +197 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-DEdsEiaq.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-ds12wZbh.mjs +260 -0
- package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-ds12wZbh.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout.mjs +1 -261
- package/fesm2022/cloud-ide-layout.mjs.map +1 -1
- package/lib/cloud-ide-layout.routes.d.ts +1 -0
- package/lib/layout/console/console-wrapper/console-wrapper.component.d.ts +3 -3
- package/lib/layout/console/console.service.d.ts +9 -0
- package/lib/layout/footer/footer-wrapper/footer-wrapper.component.d.ts +7 -3
- package/lib/layout/footer/footer.service.d.ts +9 -0
- package/lib/layout/header/header-wrapper/header-wrapper.component.d.ts +17 -9
- package/lib/layout/header/header.service.d.ts +4 -3
- package/lib/layout/home/home-wrapper/home-wrapper.component.d.ts +90 -1
- package/lib/layout/request/request-wrapper/request-wrapper.component.d.ts +10 -1
- package/lib/layout/request/request.service.d.ts +60 -0
- package/lib/layout/request/tab-content/tab-content.component.d.ts +19 -0
- package/lib/layout/shared/shared-wrapper/shared-wrapper.component.d.ts +4 -5
- package/lib/layout/shared/shared.service.d.ts +104 -6
- package/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.d.ts +135 -6
- package/lib/layout/sidebar/sidebar.service.d.ts +3 -2
- package/lib/layout/sidedrawer/cide-lyt-drawer-base.class.d.ts +16 -0
- package/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.d.ts +71 -0
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.d.ts +48 -0
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.d.ts +13 -0
- package/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.d.ts +28 -3
- package/lib/layout/sidedrawer/sidedrawer.service.d.ts +30 -0
- package/lib/services/app-state/app-state-helper.service.d.ts +150 -0
- package/lib/services/app-state/app-state.service.d.ts +85 -0
- package/lib/services/app-state/index.d.ts +3 -0
- package/lib/services/cache-manager/cache-manager.service.d.ts +64 -0
- package/lib/services/file-manager/file-manager.service.d.ts +0 -2
- package/lib/services/tab-state.service.d.ts +79 -0
- package/lib/services/theme/theme.service.d.ts +71 -0
- package/lib/services/user-status/user-status.service.d.ts +57 -0
- package/lib/utils/custom-route-reuse-strategy.d.ts +15 -0
- package/lib/utils/index.d.ts +1 -0
- package/package.json +2 -2
- package/public-api.d.ts +4 -0
- package/src/lib/assets/css/cide-lyt-style.scss +182 -0
- package/src/lib/assets/css/cide-lyt-variable.scss +119 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-BV7ptL0Y.mjs +0 -14
- package/fesm2022/cloud-ide-layout-home-wrapper.component-BV7ptL0Y.mjs.map +0 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { AppStateService } from './app-state.service';
|
|
3
|
+
import { CideLytSidebarService } from '../../layout/sidebar/sidebar.service';
|
|
4
|
+
import { map } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class AppStateHelperService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.appStateService = inject(AppStateService);
|
|
9
|
+
this.sidebarService = inject(CideLytSidebarService);
|
|
10
|
+
// Computed signals for derived state
|
|
11
|
+
this.currentUser = this.appStateService.currentUser;
|
|
12
|
+
this.isAuthenticated = this.appStateService.isAuthenticated;
|
|
13
|
+
this.userInfo = this.appStateService.userInfo;
|
|
14
|
+
this.activeModule = this.appStateService.activeModule;
|
|
15
|
+
this.activeModuleInfo = this.appStateService.activeModuleInfo;
|
|
16
|
+
this.activeEntity = this.appStateService.activeEntity;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get current user value (non-reactive)
|
|
20
|
+
*/
|
|
21
|
+
getCurrentUser() {
|
|
22
|
+
return this.appStateService.getUserValue();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Set user data
|
|
26
|
+
*/
|
|
27
|
+
setUser(user) {
|
|
28
|
+
this.appStateService.setUser(user);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Update user data (partial update)
|
|
32
|
+
*/
|
|
33
|
+
updateUser(updates) {
|
|
34
|
+
this.appStateService.updateUser(updates);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Clear user data
|
|
38
|
+
*/
|
|
39
|
+
clearUser() {
|
|
40
|
+
this.appStateService.clearUser();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if user is authenticated
|
|
44
|
+
*/
|
|
45
|
+
isUserAuthenticated() {
|
|
46
|
+
return this.appStateService.isAuthenticated();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get user info object
|
|
50
|
+
*/
|
|
51
|
+
getUserInfo() {
|
|
52
|
+
return this.appStateService.userInfo();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get user ID
|
|
56
|
+
*/
|
|
57
|
+
getUserId() {
|
|
58
|
+
const user = this.getCurrentUser();
|
|
59
|
+
return user?._id || null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get user name
|
|
63
|
+
*/
|
|
64
|
+
getUserName() {
|
|
65
|
+
const userInfo = this.getUserInfo();
|
|
66
|
+
return userInfo?.name || null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get user email
|
|
70
|
+
*/
|
|
71
|
+
getUserEmail() {
|
|
72
|
+
const userInfo = this.getUserInfo();
|
|
73
|
+
return userInfo?.email || null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get user username
|
|
77
|
+
*/
|
|
78
|
+
getUserUsername() {
|
|
79
|
+
const user = this.getCurrentUser();
|
|
80
|
+
return user?.user_username || null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get user full name
|
|
84
|
+
*/
|
|
85
|
+
getUserFullName() {
|
|
86
|
+
const user = this.getCurrentUser();
|
|
87
|
+
return user?.user_fullname || null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get user first name
|
|
91
|
+
*/
|
|
92
|
+
getUserFirstName() {
|
|
93
|
+
const user = this.getCurrentUser();
|
|
94
|
+
return user?.user_firstname || null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get user last name
|
|
98
|
+
*/
|
|
99
|
+
getUserLastName() {
|
|
100
|
+
const user = this.getCurrentUser();
|
|
101
|
+
return user?.user_lastname || null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get user mobile number
|
|
105
|
+
*/
|
|
106
|
+
getUserMobile() {
|
|
107
|
+
const user = this.getCurrentUser();
|
|
108
|
+
return user?.user_mobileno || null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Set the active module
|
|
112
|
+
*/
|
|
113
|
+
setActiveModule(module) {
|
|
114
|
+
this.appStateService.setActiveModule(module);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get active module value (non-reactive)
|
|
118
|
+
*/
|
|
119
|
+
getActiveModule() {
|
|
120
|
+
return this.appStateService.getActiveModuleValue();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get active module info
|
|
124
|
+
*/
|
|
125
|
+
getActiveModuleInfo() {
|
|
126
|
+
return this.appStateService.activeModuleInfo();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get active module ID
|
|
130
|
+
*/
|
|
131
|
+
getActiveModuleId() {
|
|
132
|
+
const module = this.getActiveModule();
|
|
133
|
+
return module?._id || null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get active module title
|
|
137
|
+
*/
|
|
138
|
+
getActiveModuleTitle() {
|
|
139
|
+
const moduleInfo = this.getActiveModuleInfo();
|
|
140
|
+
return moduleInfo?.title || null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get active module icon
|
|
144
|
+
*/
|
|
145
|
+
getActiveModuleIcon() {
|
|
146
|
+
const moduleInfo = this.getActiveModuleInfo();
|
|
147
|
+
return moduleInfo?.icon || null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Set a module as active by its ID
|
|
151
|
+
* This replaces the previous isModuleActive method to use setActiveModule instead of getActiveModuleId
|
|
152
|
+
*/
|
|
153
|
+
setActiveModuleById(moduleId) {
|
|
154
|
+
return this.sidebarService.getSidebarMenues({ syme_type: "module", sort: 'asc', syme_title: "" }).pipe(map(response => {
|
|
155
|
+
const modules = response?.data || [];
|
|
156
|
+
const targetModule = modules.find(module => module._id === moduleId);
|
|
157
|
+
if (targetModule) {
|
|
158
|
+
this.setActiveModule(targetModule);
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.warn(`Module with ID "${moduleId}" not found`);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check if a module is active (keeping the original functionality for backward compatibility)
|
|
169
|
+
*/
|
|
170
|
+
isModuleActive(moduleId) {
|
|
171
|
+
const activeModuleId = this.getActiveModuleId();
|
|
172
|
+
return activeModuleId === moduleId;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Set the active entity
|
|
176
|
+
*/
|
|
177
|
+
setActiveEntity(entity) {
|
|
178
|
+
this.appStateService.setActiveEntity(entity);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get active entity value (non-reactive)
|
|
182
|
+
*/
|
|
183
|
+
getActiveEntity() {
|
|
184
|
+
return this.appStateService.getActiveEntityValue();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get active entity ID
|
|
188
|
+
*/
|
|
189
|
+
getActiveEntityId() {
|
|
190
|
+
const entity = this.getActiveEntity();
|
|
191
|
+
return entity?._id || '';
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get active entity name
|
|
195
|
+
*/
|
|
196
|
+
getActiveEntityName() {
|
|
197
|
+
const entity = this.getActiveEntity();
|
|
198
|
+
return entity?.syen_name || null;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get active entity code
|
|
202
|
+
*/
|
|
203
|
+
getActiveEntityCode() {
|
|
204
|
+
const entity = this.getActiveEntity();
|
|
205
|
+
return entity?.syen_entity_code || null;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Manually refresh state from localStorage
|
|
209
|
+
*/
|
|
210
|
+
refreshFromLocalStorage() {
|
|
211
|
+
this.appStateService.refreshFromLocalStorage();
|
|
212
|
+
}
|
|
213
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppStateHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
214
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppStateHelperService, providedIn: 'root' }); }
|
|
215
|
+
}
|
|
216
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppStateHelperService, decorators: [{
|
|
217
|
+
type: Injectable,
|
|
218
|
+
args: [{
|
|
219
|
+
providedIn: 'root'
|
|
220
|
+
}]
|
|
221
|
+
}] });
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXN0YXRlLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL3NlcnZpY2VzL2FwcC1zdGF0ZS9hcHAtc3RhdGUtaGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLckMsTUFBTSxPQUFPLHFCQUFxQjtJQUhsQztRQUlVLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFdkQscUNBQXFDO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFDL0Msb0JBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUN2RCxhQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDekMsaUJBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztRQUNqRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1FBQ3pELGlCQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7S0FvT2xFO0lBbE9DOztPQUVHO0lBQ0gsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFP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ZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0QyxPQUFPLE1BQU0sRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEMsT0FBTyxNQUFNLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QjtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakQsQ0FBQzs4R0E3T1UscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9hcHAtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBJVXNlciwgbWVudVJlc3BvbnNlRGF0YSwgSUNvcmVTeWVuIH0gZnJvbSAnY2xvdWQtaWRlLWxtcy1tb2RlbCc7XG5pbXBvcnQgeyBDaWRlTHl0U2lkZWJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXlvdXQvc2lkZWJhci9zaWRlYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBTdGF0ZUhlbHBlclNlcnZpY2Uge1xuICBwcml2YXRlIGFwcFN0YXRlU2VydmljZSA9IGluamVjdChBcHBTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHNpZGViYXJTZXJ2aWNlID0gaW5qZWN0KENpZGVMeXRTaWRlYmFyU2VydmljZSk7XG5cbiAgLy8gQ29tcHV0ZWQgc2lnbmFscyBmb3IgZGVyaXZlZCBzdGF0ZVxuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFVzZXIgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VXNlcjtcbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmlzQXV0aGVudGljYXRlZDtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJJbmZvID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UudXNlckluZm87XG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVNb2R1bGUgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5hY3RpdmVNb2R1bGU7XG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVNb2R1bGVJbmZvID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuYWN0aXZlTW9kdWxlSW5mbztcbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZUVudGl0eSA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmFjdGl2ZUVudGl0eTtcblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdXNlciB2YWx1ZSAobm9uLXJlYWN0aXZlKVxuICAgKi9cbiAgZ2V0Q3VycmVudFVzZXIoKTogSVVzZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuZ2V0VXNlclZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVzZXIgZGF0YVxuICAgKi9cbiAgc2V0VXNlcih1c2VyOiBJVXNlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmFwcFN0YXRlU2VydmljZS5zZXRVc2VyKHVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB1c2VyIGRhdGEgKHBhcnRpYWwgdXBkYXRlKVxuICAgKi9cbiAgdXBkYXRlVXNlcih1cGRhdGVzOiBQYXJ0aWFsPElVc2VyPik6IHZvaWQge1xuICAgIHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnVwZGF0ZVVzZXIodXBkYXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdXNlciBkYXRhXG4gICAqL1xuICBjbGVhclVzZXIoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY2xlYXJVc2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBpcyBhdXRoZW50aWNhdGVkXG4gICAqL1xuICBpc1VzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwcFN0YXRlU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBpbmZvIG9iamVjdFxuICAgKi9cbiAgZ2V0VXNlckluZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnVzZXJJbmZvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgSURcbiAgICovXG4gIGdldFVzZXJJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB1c2VyPy5faWQgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBuYW1lXG4gICAqL1xuICBnZXRVc2VyTmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuZ2V0VXNlckluZm8oKTtcbiAgICByZXR1cm4gdXNlckluZm8/Lm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBlbWFpbFxuICAgKi9cbiAgZ2V0VXNlckVtYWlsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5nZXRVc2VySW5mbygpO1xuICAgIHJldHVybiB1c2VySW5mbz8uZW1haWwgfHwgbnVsbDtcbiAgfVxuXG5cblxuICAvKipcbiAgICogR2V0IHVzZXIgdXNlcm5hbWVcbiAgICovXG4gIGdldFVzZXJVc2VybmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB1c2VyPy51c2VyX3VzZXJuYW1lIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgZnVsbCBuYW1lXG4gICAqL1xuICBnZXRVc2VyRnVsbE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICByZXR1cm4gdXNlcj8udXNlcl9mdWxsbmFtZSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGZpcnN0IG5hbWVcbiAgICovXG4gIGdldFVzZXJGaXJzdE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICByZXR1cm4gdXNlcj8udXNlcl9maXJzdG5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBsYXN0IG5hbWVcbiAgICovXG4gIGdldFVzZXJMYXN0TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB1c2VyPy51c2VyX2xhc3RuYW1lIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgbW9iaWxlIG51bWJlclxuICAgKi9cbiAgZ2V0VXNlck1vYmlsZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB1c2VyPy51c2VyX21vYmlsZW5vIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBhY3RpdmUgbW9kdWxlXG4gICAqL1xuICBzZXRBY3RpdmVNb2R1bGUobW9kdWxlOiBtZW51UmVzcG9uc2VEYXRhIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnNldEFjdGl2ZU1vZHVsZShtb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgbW9kdWxlIHZhbHVlIChub24tcmVhY3RpdmUpXG4gICAqL1xuICBnZXRBY3RpdmVNb2R1bGUoKTogbWVudVJlc3BvbnNlRGF0YSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmFwcFN0YXRlU2VydmljZS5nZXRBY3RpdmVNb2R1bGVWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgbW9kdWxlIGluZm9cbiAgICovXG4gIGdldEFjdGl2ZU1vZHVsZUluZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmFjdGl2ZU1vZHVsZUluZm8oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIG1vZHVsZSBJRFxuICAgKi9cbiAgZ2V0QWN0aXZlTW9kdWxlSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbW9kdWxlID0gdGhpcy5nZXRBY3RpdmVNb2R1bGUoKTtcbiAgICByZXR1cm4gbW9kdWxlPy5faWQgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIG1vZHVsZSB0aXRsZVxuICAgKi9cbiAgZ2V0QWN0aXZlTW9kdWxlVGl0bGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbW9kdWxlSW5mbyA9IHRoaXMuZ2V0QWN0aXZlTW9kdWxlSW5mbygpO1xuICAgIHJldHVybiBtb2R1bGVJbmZvPy50aXRsZSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgbW9kdWxlIGljb25cbiAgICovXG4gIGdldEFjdGl2ZU1vZHVsZUljb24oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbW9kdWxlSW5mbyA9IHRoaXMuZ2V0QWN0aXZlTW9kdWxlSW5mbygpO1xuICAgIHJldHVybiBtb2R1bGVJbmZvPy5pY29uIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbW9kdWxlIGFzIGFjdGl2ZSBieSBpdHMgSURcbiAgICogVGhpcyByZXBsYWNlcyB0aGUgcHJldmlvdXMgaXNNb2R1bGVBY3RpdmUgbWV0aG9kIHRvIHVzZSBzZXRBY3RpdmVNb2R1bGUgaW5zdGVhZCBvZiBnZXRBY3RpdmVNb2R1bGVJZFxuICAgKi9cbiAgc2V0QWN0aXZlTW9kdWxlQnlJZChtb2R1bGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2lkZWJhclNlcnZpY2UuZ2V0U2lkZWJhck1lbnVlcyh7IHN5bWVfdHlwZTogXCJtb2R1bGVcIiwgc29ydDogJ2FzYycsIHN5bWVfdGl0bGU6IFwiXCIgfSkucGlwZShcbiAgICAgIG1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSByZXNwb25zZT8uZGF0YSB8fCBbXTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kdWxlID0gbW9kdWxlcy5maW5kKG1vZHVsZSA9PiBtb2R1bGUuX2lkID09PSBtb2R1bGVJZCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGFyZ2V0TW9kdWxlKSB7XG4gICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb2R1bGUodGFyZ2V0TW9kdWxlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYE1vZHVsZSB3aXRoIElEIFwiJHttb2R1bGVJZH1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1vZHVsZSBpcyBhY3RpdmUgKGtlZXBpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAqL1xuICBpc01vZHVsZUFjdGl2ZShtb2R1bGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWN0aXZlTW9kdWxlSWQgPSB0aGlzLmdldEFjdGl2ZU1vZHVsZUlkKCk7XG4gICAgcmV0dXJuIGFjdGl2ZU1vZHVsZUlkID09PSBtb2R1bGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFjdGl2ZSBlbnRpdHlcbiAgICovXG4gIHNldEFjdGl2ZUVudGl0eShlbnRpdHk6IElDb3JlU3llbiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmFwcFN0YXRlU2VydmljZS5zZXRBY3RpdmVFbnRpdHkoZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIGVudGl0eSB2YWx1ZSAobm9uLXJlYWN0aXZlKVxuICAgKi9cbiAgZ2V0QWN0aXZlRW50aXR5KCk6IElDb3JlU3llbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmFwcFN0YXRlU2VydmljZS5nZXRBY3RpdmVFbnRpdHlWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgZW50aXR5IElEXG4gICAqL1xuICBnZXRBY3RpdmVFbnRpdHlJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0QWN0aXZlRW50aXR5KCk7XG4gICAgcmV0dXJuIGVudGl0eT8uX2lkIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgZW50aXR5IG5hbWVcbiAgICovXG4gIGdldEFjdGl2ZUVudGl0eU5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXRBY3RpdmVFbnRpdHkoKTtcbiAgICByZXR1cm4gZW50aXR5Py5zeWVuX25hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIGVudGl0eSBjb2RlXG4gICAqL1xuICBnZXRBY3RpdmVFbnRpdHlDb2RlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0QWN0aXZlRW50aXR5KCk7XG4gICAgcmV0dXJuIGVudGl0eT8uc3llbl9lbnRpdHlfY29kZSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IHJlZnJlc2ggc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHJlZnJlc2hGcm9tTG9jYWxTdG9yYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnJlZnJlc2hGcm9tTG9jYWxTdG9yYWdlKCk7XG4gIH1cbn0gIl19
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { Injectable, signal, computed, effect } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class AppStateService {
|
|
4
|
+
constructor() {
|
|
5
|
+
// Private signal for current user
|
|
6
|
+
this.currentUserSignal = signal(null);
|
|
7
|
+
// Private signal for active module
|
|
8
|
+
this.activeModuleSignal = signal(null);
|
|
9
|
+
// Private signal for active entity
|
|
10
|
+
this.activeEntitySignal = signal(null);
|
|
11
|
+
// Public computed signal for current user, for other services to get the user value
|
|
12
|
+
this.currentUser = computed(() => this.currentUserSignal());
|
|
13
|
+
// Public computed signal for active module
|
|
14
|
+
this.activeModule = computed(() => this.activeModuleSignal());
|
|
15
|
+
// Public computed signal for active entity
|
|
16
|
+
this.activeEntity = computed(() => this.activeEntitySignal());
|
|
17
|
+
// Computed signals for derived state
|
|
18
|
+
this.isAuthenticated = computed(() => !!this.currentUserSignal());
|
|
19
|
+
this.userInfo = computed(() => {
|
|
20
|
+
const user = this.currentUserSignal();
|
|
21
|
+
if (!user)
|
|
22
|
+
return null;
|
|
23
|
+
return {
|
|
24
|
+
id: user._id,
|
|
25
|
+
name: user.user_fullname || `${user.user_firstname} ${user.user_lastname}`,
|
|
26
|
+
email: user.user_emailid,
|
|
27
|
+
role: user.user_id_role
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
// Computed signal for active module info
|
|
31
|
+
this.activeModuleInfo = computed(() => {
|
|
32
|
+
const module = this.activeModuleSignal();
|
|
33
|
+
if (!module)
|
|
34
|
+
return null;
|
|
35
|
+
return {
|
|
36
|
+
id: module._id,
|
|
37
|
+
title: module.syme_title,
|
|
38
|
+
icon: module.syme_icon,
|
|
39
|
+
path: module.syme_path,
|
|
40
|
+
type: module.syme_type
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
// Load initial state from localStorage
|
|
44
|
+
this.loadFromLocalStorage();
|
|
45
|
+
// Save to localStorage whenever state changes
|
|
46
|
+
effect(() => {
|
|
47
|
+
const currentUser = this.currentUserSignal();
|
|
48
|
+
const activeModule = this.activeModuleSignal();
|
|
49
|
+
const activeEntity = this.activeEntitySignal();
|
|
50
|
+
this.saveToLocalStorage({
|
|
51
|
+
user: currentUser,
|
|
52
|
+
activeModule: activeModule,
|
|
53
|
+
activeEntity: activeEntity
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
// Listen for localStorage changes from other tabs/windows
|
|
57
|
+
this.setupStorageListener();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Set the current user
|
|
61
|
+
*/
|
|
62
|
+
setUser(user) {
|
|
63
|
+
this.currentUserSignal.set(user);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Update user data (partial update)
|
|
67
|
+
*/
|
|
68
|
+
updateUser(updates) {
|
|
69
|
+
const currentUser = this.currentUserSignal();
|
|
70
|
+
if (currentUser) {
|
|
71
|
+
this.currentUserSignal.set({ ...currentUser, ...updates });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Clear user data
|
|
76
|
+
*/
|
|
77
|
+
clearUser() {
|
|
78
|
+
this.currentUserSignal.set(null);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get current user value (non-reactive)
|
|
82
|
+
*/
|
|
83
|
+
getUserValue() {
|
|
84
|
+
return this.currentUserSignal();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Set the active module
|
|
88
|
+
*/
|
|
89
|
+
setActiveModule(module) {
|
|
90
|
+
this.activeModuleSignal.set(module);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get active module value (non-reactive)
|
|
94
|
+
*/
|
|
95
|
+
getActiveModuleValue() {
|
|
96
|
+
return this.activeModuleSignal();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Set the active entity
|
|
100
|
+
*/
|
|
101
|
+
setActiveEntity(entity) {
|
|
102
|
+
this.activeEntitySignal.set(entity);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get active entity value (non-reactive)
|
|
106
|
+
*/
|
|
107
|
+
getActiveEntityValue() {
|
|
108
|
+
return this.activeEntitySignal();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Manually refresh state from localStorage
|
|
112
|
+
* Call this method when you need to sync with external localStorage changes
|
|
113
|
+
*/
|
|
114
|
+
refreshFromLocalStorage() {
|
|
115
|
+
this.loadFromLocalStorage();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if localStorage is available (browser environment)
|
|
119
|
+
*/
|
|
120
|
+
isLocalStorageAvailable() {
|
|
121
|
+
try {
|
|
122
|
+
return typeof window !== 'undefined' && typeof localStorage !== 'undefined';
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Save state to localStorage
|
|
130
|
+
*/
|
|
131
|
+
saveToLocalStorage(data) {
|
|
132
|
+
if (!this.isLocalStorageAvailable()) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
if (data.user !== undefined) {
|
|
137
|
+
if (data.user) {
|
|
138
|
+
localStorage.setItem('cide_auth_user', JSON.stringify(data.user));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
localStorage.removeItem('cide_auth_user');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (data.activeModule !== undefined) {
|
|
145
|
+
if (data.activeModule) {
|
|
146
|
+
localStorage.setItem('cide_active_module', JSON.stringify(data.activeModule));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
localStorage.removeItem('cide_active_module');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (data.activeEntity !== undefined) {
|
|
153
|
+
if (data.activeEntity) {
|
|
154
|
+
localStorage.setItem('cide_active_entity', JSON.stringify(data.activeEntity));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
localStorage.removeItem('cide_active_entity');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error('Error saving to localStorage:', error);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Load state from localStorage
|
|
167
|
+
*/
|
|
168
|
+
loadFromLocalStorage() {
|
|
169
|
+
if (!this.isLocalStorageAvailable()) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
const userData = localStorage.getItem('cide_auth_user');
|
|
174
|
+
if (userData) {
|
|
175
|
+
const user = JSON.parse(userData);
|
|
176
|
+
this.currentUserSignal.set(user);
|
|
177
|
+
}
|
|
178
|
+
const moduleData = localStorage.getItem('cide_active_module');
|
|
179
|
+
if (moduleData) {
|
|
180
|
+
const module = JSON.parse(moduleData);
|
|
181
|
+
this.activeModuleSignal.set(module);
|
|
182
|
+
}
|
|
183
|
+
const entityData = localStorage.getItem('cide_active_entity');
|
|
184
|
+
if (entityData) {
|
|
185
|
+
const entity = JSON.parse(entityData);
|
|
186
|
+
this.activeEntitySignal.set(entity);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error('Error loading from localStorage:', error);
|
|
191
|
+
// Clear corrupted data
|
|
192
|
+
if (this.isLocalStorageAvailable()) {
|
|
193
|
+
localStorage.removeItem('cide_auth_user');
|
|
194
|
+
localStorage.removeItem('cide_active_module');
|
|
195
|
+
localStorage.removeItem('cide_active_entity');
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Setup storage event listener to handle external localStorage changes
|
|
201
|
+
*/
|
|
202
|
+
setupStorageListener() {
|
|
203
|
+
if (!this.isLocalStorageAvailable()) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
// Listen for storage events (triggered when localStorage is modified from other tabs/windows)
|
|
207
|
+
window.addEventListener('storage', (event) => {
|
|
208
|
+
if (!event.key)
|
|
209
|
+
return;
|
|
210
|
+
try {
|
|
211
|
+
// Handle user data changes
|
|
212
|
+
if (event.key === 'cide_auth_user') {
|
|
213
|
+
if (event.newValue) {
|
|
214
|
+
const user = JSON.parse(event.newValue);
|
|
215
|
+
this.currentUserSignal.set(user);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
this.currentUserSignal.set(null);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Handle active module changes
|
|
222
|
+
if (event.key === 'cide_active_module') {
|
|
223
|
+
if (event.newValue) {
|
|
224
|
+
const module = JSON.parse(event.newValue);
|
|
225
|
+
this.activeModuleSignal.set(module);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this.activeModuleSignal.set(null);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Handle active entity changes
|
|
232
|
+
if (event.key === 'cide_active_entity') {
|
|
233
|
+
if (event.newValue) {
|
|
234
|
+
const entity = JSON.parse(event.newValue);
|
|
235
|
+
this.activeEntitySignal.set(entity);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
this.activeEntitySignal.set(null);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
console.error('Error parsing localStorage update:', error);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
248
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppStateService, providedIn: 'root' }); }
|
|
249
|
+
}
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppStateService, decorators: [{
|
|
251
|
+
type: Injectable,
|
|
252
|
+
args: [{
|
|
253
|
+
providedIn: 'root'
|
|
254
|
+
}]
|
|
255
|
+
}], ctorParameters: () => [] });
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtbGF5b3V0L3NyYy9saWIvc2VydmljZXMvYXBwLXN0YXRlL2FwcC1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBWXJFLE1BQU0sT0FBTyxlQUFlO0lBK0MxQjtRQTlDQSxrQ0FBa0M7UUFDMUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFlLElBQUksQ0FBQyxDQUFDO1FBRXZELG1DQUFtQztRQUMzQix1QkFBa0IsR0FBRyxNQUFNLENBQTBCLElBQUksQ0FBQyxDQUFDO1FBRW5FLG1DQUFtQztRQUMzQix1QkFBa0IsR0FBRyxNQUFNLENBQW1CLElBQUksQ0FBQyxDQUFDO1FBRTVELG9GQUFvRjtRQUNwRSxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLDJDQUEyQztRQUMzQixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLDJDQUEyQztRQUMzQixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLHFDQUFxQztRQUNyQixvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM3RCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZ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ZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVVzZXIsIG1lbnVSZXNwb25zZURhdGEsIElDb3JlU3llbiB9IGZyb20gJ2Nsb3VkLWlkZS1sbXMtbW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFN0YXRlIHtcbiAgY3VycmVudFVzZXI6IElVc2VyIHwgbnVsbDtcbiAgYWN0aXZlTW9kdWxlOiBtZW51UmVzcG9uc2VEYXRhIHwgbnVsbDtcbiAgYWN0aXZlRW50aXR5OiBJQ29yZVN5ZW4gfCBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBTdGF0ZVNlcnZpY2Uge1xuICAvLyBQcml2YXRlIHNpZ25hbCBmb3IgY3VycmVudCB1c2VyXG4gIHByaXZhdGUgY3VycmVudFVzZXJTaWduYWwgPSBzaWduYWw8SVVzZXIgfCBudWxsPihudWxsKTtcblxuICAvLyBQcml2YXRlIHNpZ25hbCBmb3IgYWN0aXZlIG1vZHVsZVxuICBwcml2YXRlIGFjdGl2ZU1vZHVsZVNpZ25hbCA9IHNpZ25hbDxtZW51UmVzcG9uc2VEYXRhIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gUHJpdmF0ZSBzaWduYWwgZm9yIGFjdGl2ZSBlbnRpdHlcbiAgcHJpdmF0ZSBhY3RpdmVFbnRpdHlTaWduYWwgPSBzaWduYWw8SUNvcmVTeWVuIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gUHVibGljIGNvbXB1dGVkIHNpZ25hbCBmb3IgY3VycmVudCB1c2VyLCBmb3Igb3RoZXIgc2VydmljZXMgdG8gZ2V0IHRoZSB1c2VyIHZhbHVlXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50VXNlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudFVzZXJTaWduYWwoKSk7XG5cbiAgLy8gUHVibGljIGNvbXB1dGVkIHNpZ25hbCBmb3IgYWN0aXZlIG1vZHVsZVxuICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlTW9kdWxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3RpdmVNb2R1bGVTaWduYWwoKSk7XG5cbiAgLy8gUHVibGljIGNvbXB1dGVkIHNpZ25hbCBmb3IgYWN0aXZlIGVudGl0eVxuICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlRW50aXR5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3RpdmVFbnRpdHlTaWduYWwoKSk7XG5cbiAgLy8gQ29tcHV0ZWQgc2lnbmFscyBmb3IgZGVyaXZlZCBzdGF0ZVxuICBwdWJsaWMgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLmN1cnJlbnRVc2VyU2lnbmFsKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlckluZm8gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuY3VycmVudFVzZXJTaWduYWwoKTtcbiAgICBpZiAoIXVzZXIpIHJldHVybiBudWxsO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpZDogdXNlci5faWQsXG4gICAgICBuYW1lOiB1c2VyLnVzZXJfZnVsbG5hbWUgfHwgYCR7dXNlci51c2VyX2ZpcnN0bmFtZX0gJHt1c2VyLnVzZXJfbGFzdG5hbWV9YCxcbiAgICAgIGVtYWlsOiB1c2VyLnVzZXJfZW1haWxpZCxcbiAgICAgIHJvbGU6IHVzZXIudXNlcl9pZF9yb2xlXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQ29tcHV0ZWQgc2lnbmFsIGZvciBhY3RpdmUgbW9kdWxlIGluZm9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZU1vZHVsZUluZm8gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlID0gdGhpcy5hY3RpdmVNb2R1bGVTaWduYWwoKTtcbiAgICBpZiAoIW1vZHVsZSkgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBtb2R1bGUuX2lkLFxuICAgICAgdGl0bGU6IG1vZHVsZS5zeW1lX3RpdGxlLFxuICAgICAgaWNvbjogbW9kdWxlLnN5bWVfaWNvbixcbiAgICAgIHBhdGg6IG1vZHVsZS5zeW1lX3BhdGgsXG4gICAgICB0eXBlOiBtb2R1bGUuc3ltZV90eXBlXG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gTG9hZCBpbml0aWFsIHN0YXRlIGZyb20gbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5sb2FkRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIFxuICAgIC8vIFNhdmUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIHN0YXRlIGNoYW5nZXNcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyU2lnbmFsKCk7XG4gICAgICBjb25zdCBhY3RpdmVNb2R1bGUgPSB0aGlzLmFjdGl2ZU1vZHVsZVNpZ25hbCgpO1xuICAgICAgY29uc3QgYWN0aXZlRW50aXR5ID0gdGhpcy5hY3RpdmVFbnRpdHlTaWduYWwoKTtcbiAgICAgIHRoaXMuc2F2ZVRvTG9jYWxTdG9yYWdlKHtcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIGFjdGl2ZU1vZHVsZTogYWN0aXZlTW9kdWxlLFxuICAgICAgICBhY3RpdmVFbnRpdHk6IGFjdGl2ZUVudGl0eVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGxvY2FsU3RvcmFnZSBjaGFuZ2VzIGZyb20gb3RoZXIgdGFicy93aW5kb3dzXG4gICAgdGhpcy5zZXR1cFN0b3JhZ2VMaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB1c2VyXG4gICAqL1xuICBzZXRVc2VyKHVzZXI6IElVc2VyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFVzZXJTaWduYWwuc2V0KHVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB1c2VyIGRhdGEgKHBhcnRpYWwgdXBkYXRlKVxuICAgKi9cbiAgdXBkYXRlVXNlcih1cGRhdGVzOiBQYXJ0aWFsPElVc2VyPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlclNpZ25hbCgpO1xuICAgIGlmIChjdXJyZW50VXNlcikge1xuICAgICAgdGhpcy5jdXJyZW50VXNlclNpZ25hbC5zZXQoeyAuLi5jdXJyZW50VXNlciwgLi4udXBkYXRlcyB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdXNlciBkYXRhXG4gICAqL1xuICBjbGVhclVzZXIoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50VXNlclNpZ25hbC5zZXQobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdXNlciB2YWx1ZSAobm9uLXJlYWN0aXZlKVxuICAgKi9cbiAgZ2V0VXNlclZhbHVlKCk6IElVc2VyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJTaWduYWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFjdGl2ZSBtb2R1bGVcbiAgICovXG4gIHNldEFjdGl2ZU1vZHVsZShtb2R1bGU6IG1lbnVSZXNwb25zZURhdGEgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVNb2R1bGVTaWduYWwuc2V0KG1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFjdGl2ZSBtb2R1bGUgdmFsdWUgKG5vbi1yZWFjdGl2ZSlcbiAgICovXG4gIGdldEFjdGl2ZU1vZHVsZVZhbHVlKCk6IG1lbnVSZXNwb25zZURhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVNb2R1bGVTaWduYWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFjdGl2ZSBlbnRpdHlcbiAgICovXG4gIHNldEFjdGl2ZUVudGl0eShlbnRpdHk6IElDb3JlU3llbiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUVudGl0eVNpZ25hbC5zZXQoZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIGVudGl0eSB2YWx1ZSAobm9uLXJlYWN0aXZlKVxuICAgKi9cbiAgZ2V0QWN0aXZlRW50aXR5VmFsdWUoKTogSUNvcmVTeWVuIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRW50aXR5U2lnbmFsKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgcmVmcmVzaCBzdGF0ZSBmcm9tIGxvY2FsU3RvcmFnZVxuICAgKiBDYWxsIHRoaXMgbWV0aG9kIHdoZW4geW91IG5lZWQgdG8gc3luYyB3aXRoIGV4dGVybmFsIGxvY2FsU3RvcmFnZSBjaGFuZ2VzXG4gICAqL1xuICByZWZyZXNoRnJvbUxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRGcm9tTG9jYWxTdG9yYWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgbG9jYWxTdG9yYWdlIGlzIGF2YWlsYWJsZSAoYnJvd3NlciBlbnZpcm9ubWVudClcbiAgICovXG4gIHByaXZhdGUgaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBzdGF0ZSB0byBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgc2F2ZVRvTG9jYWxTdG9yYWdlKGRhdGE6IHtcbiAgICB1c2VyPzogSVVzZXIgfCBudWxsO1xuICAgIGFjdGl2ZU1vZHVsZT86IG1lbnVSZXNwb25zZURhdGEgfCBudWxsO1xuICAgIGFjdGl2ZUVudGl0eT86IElDb3JlU3llbiB8IG51bGw7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoZGF0YS51c2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGRhdGEudXNlcikge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjaWRlX2F1dGhfdXNlcicsIEpTT04uc3RyaW5naWZ5KGRhdGEudXNlcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjaWRlX2F1dGhfdXNlcicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmFjdGl2ZU1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkYXRhLmFjdGl2ZU1vZHVsZSkge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjaWRlX2FjdGl2ZV9tb2R1bGUnLCBKU09OLnN0cmluZ2lmeShkYXRhLmFjdGl2ZU1vZHVsZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjaWRlX2FjdGl2ZV9tb2R1bGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5hY3RpdmVFbnRpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoZGF0YS5hY3RpdmVFbnRpdHkpIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2lkZV9hY3RpdmVfZW50aXR5JywgSlNPTi5zdHJpbmdpZnkoZGF0YS5hY3RpdmVFbnRpdHkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2lkZV9hY3RpdmVfZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIHRvIGxvY2FsU3RvcmFnZTonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgbG9hZEZyb21Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2lkZV9hdXRoX3VzZXInKTtcbiAgICAgIGlmICh1c2VyRGF0YSkge1xuICAgICAgICBjb25zdCB1c2VyID0gSlNPTi5wYXJzZSh1c2VyRGF0YSkgYXMgSVVzZXI7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXJTaWduYWwuc2V0KHVzZXIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtb2R1bGVEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NpZGVfYWN0aXZlX21vZHVsZScpO1xuICAgICAgaWYgKG1vZHVsZURhdGEpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gSlNPTi5wYXJzZShtb2R1bGVEYXRhKSBhcyBtZW51UmVzcG9uc2VEYXRhO1xuICAgICAgICB0aGlzLmFjdGl2ZU1vZHVsZVNpZ25hbC5zZXQobW9kdWxlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW50aXR5RGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjaWRlX2FjdGl2ZV9lbnRpdHknKTtcbiAgICAgIGlmIChlbnRpdHlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IEpTT04ucGFyc2UoZW50aXR5RGF0YSkgYXMgSUNvcmVTeWVuO1xuICAgICAgICB0aGlzLmFjdGl2ZUVudGl0eVNpZ25hbC5zZXQoZW50aXR5KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmcm9tIGxvY2FsU3RvcmFnZTonLCBlcnJvcik7XG4gICAgICAvLyBDbGVhciBjb3JydXB0ZWQgZGF0YVxuICAgICAgaWYgKHRoaXMuaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2lkZV9hdXRoX3VzZXInKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NpZGVfYWN0aXZlX21vZHVsZScpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2lkZV9hY3RpdmVfZW50aXR5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHVwIHN0b3JhZ2UgZXZlbnQgbGlzdGVuZXIgdG8gaGFuZGxlIGV4dGVybmFsIGxvY2FsU3RvcmFnZSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHNldHVwU3RvcmFnZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xvY2FsU3RvcmFnZUF2YWlsYWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIGZvciBzdG9yYWdlIGV2ZW50cyAodHJpZ2dlcmVkIHdoZW4gbG9jYWxTdG9yYWdlIGlzIG1vZGlmaWVkIGZyb20gb3RoZXIgdGFicy93aW5kb3dzKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LmtleSkgcmV0dXJuO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBIYW5kbGUgdXNlciBkYXRhIGNoYW5nZXNcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2NpZGVfYXV0aF91c2VyJykge1xuICAgICAgICAgIGlmIChldmVudC5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdXNlciA9IEpTT04ucGFyc2UoZXZlbnQubmV3VmFsdWUpIGFzIElVc2VyO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlclNpZ25hbC5zZXQodXNlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJTaWduYWwuc2V0KG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBhY3RpdmUgbW9kdWxlIGNoYW5nZXNcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2NpZGVfYWN0aXZlX21vZHVsZScpIHtcbiAgICAgICAgICBpZiAoZXZlbnQubmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IEpTT04ucGFyc2UoZXZlbnQubmV3VmFsdWUpIGFzIG1lbnVSZXNwb25zZURhdGE7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZHVsZVNpZ25hbC5zZXQobW9kdWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2R1bGVTaWduYWwuc2V0KG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBhY3RpdmUgZW50aXR5IGNoYW5nZXNcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2NpZGVfYWN0aXZlX2VudGl0eScpIHtcbiAgICAgICAgICBpZiAoZXZlbnQubmV3VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEpTT04ucGFyc2UoZXZlbnQubmV3VmFsdWUpIGFzIElDb3JlU3llbjtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRW50aXR5U2lnbmFsLnNldChlbnRpdHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUVudGl0eVNpZ25hbC5zZXQobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGxvY2FsU3RvcmFnZSB1cGRhdGU6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59ICJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { AppStateService } from './app-state.service';
|
|
2
|
+
export { AppStateHelperService } from './app-state-helper.service';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtbGF5b3V0L3NyYy9saWIvc2VydmljZXMvYXBwLXN0YXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4vYXBwLXN0YXRlLnNlcnZpY2UnO1xyXG5leHBvcnQgeyBBcHBTdGF0ZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuL2FwcC1zdGF0ZS1oZWxwZXIuc2VydmljZSc7XHJcbmV4cG9ydCB0eXBlIHsgQXBwU3RhdGUgfSBmcm9tICcuL2FwcC1zdGF0ZS5zZXJ2aWNlJzsgIl19
|