@serve.zone/dcrouter 11.10.3 → 11.10.7
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/dist_serve/bundle.js +5102 -5102
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/cache/classes.cache.cleaner.js +1 -1
- package/dist_ts/cache/classes.cached.document.js +1 -1
- package/dist_ts/cache/classes.cachedb.js +1 -1
- package/dist_ts/cache/documents/classes.cached.email.js +1 -1
- package/dist_ts/cache/documents/classes.cached.ip.reputation.js +1 -1
- package/dist_ts/classes.dcrouter.js +3 -3
- package/dist_ts/config/classes.route-config-manager.d.ts +1 -1
- package/dist_ts/config/validator.js +1 -1
- package/dist_ts/errors/base.errors.js +2 -2
- package/dist_ts/monitoring/classes.metricsmanager.d.ts +6 -1
- package/dist_ts/monitoring/classes.metricsmanager.js +69 -31
- package/dist_ts/opsserver/classes.opsserver.js +2 -2
- package/dist_ts/opsserver/handlers/admin.handler.js +1 -1
- package/dist_ts/opsserver/handlers/certificate.handler.js +1 -1
- package/dist_ts/opsserver/handlers/radius.handler.js +1 -1
- package/dist_ts/opsserver/handlers/stats.handler.js +1 -1
- package/dist_ts/radius/classes.accounting.manager.js +1 -1
- package/dist_ts/radius/classes.radius.server.js +1 -1
- package/dist_ts/radius/classes.vlan.manager.js +1 -1
- package/dist_ts/security/classes.contentscanner.js +3 -3
- package/dist_ts/security/classes.ipreputationchecker.js +4 -4
- package/dist_ts/security/classes.securitylogger.js +5 -3
- package/dist_ts/sms/classes.smsservice.js +2 -2
- package/dist_ts/storage/classes.storagemanager.d.ts +1 -1
- package/dist_ts/storage/classes.storagemanager.js +2 -4
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.js +9 -6
- package/dist_ts_web/elements/ops-dashboard.js +3 -2
- package/dist_ts_web/elements/ops-view-certificates.js +1 -1
- package/dist_ts_web/elements/ops-view-config.js +1 -1
- package/dist_ts_web/elements/ops-view-emails.js +1 -1
- package/dist_ts_web/elements/ops-view-network.js +1 -1
- package/dist_ts_web/elements/ops-view-remoteingress.js +1 -1
- package/dist_ts_web/router.js +1 -1
- package/license +21 -0
- package/package.json +15 -15
- package/readme.hints.md +1 -1
- package/readme.md +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/cache/classes.cache.cleaner.ts +10 -10
- package/ts/cache/classes.cached.document.ts +1 -1
- package/ts/cache/classes.cachedb.ts +6 -6
- package/ts/cache/documents/classes.cached.email.ts +14 -14
- package/ts/cache/documents/classes.cached.ip.reputation.ts +10 -10
- package/ts/classes.dcrouter.ts +31 -31
- package/ts/config/validator.ts +5 -5
- package/ts/errors/base.errors.ts +1 -1
- package/ts/monitoring/classes.metricsmanager.ts +70 -33
- package/ts/opsserver/classes.opsserver.ts +13 -13
- package/ts/opsserver/handlers/admin.handler.ts +1 -1
- package/ts/opsserver/handlers/certificate.handler.ts +6 -6
- package/ts/opsserver/handlers/radius.handler.ts +4 -4
- package/ts/opsserver/handlers/stats.handler.ts +1 -1
- package/ts/radius/classes.accounting.manager.ts +10 -10
- package/ts/radius/classes.radius.server.ts +2 -2
- package/ts/radius/classes.vlan.manager.ts +5 -5
- package/ts/readme.md +1 -1
- package/ts/security/classes.contentscanner.ts +12 -12
- package/ts/security/classes.ipreputationchecker.ts +26 -26
- package/ts/security/classes.securitylogger.ts +6 -4
- package/ts/sms/classes.smsservice.ts +3 -3
- package/ts/storage/classes.storagemanager.ts +23 -25
- package/ts_apiclient/readme.md +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +136 -133
- package/ts_web/elements/ops-dashboard.ts +15 -14
- package/ts_web/elements/ops-view-certificates.ts +10 -10
- package/ts_web/elements/ops-view-config.ts +8 -8
- package/ts_web/elements/ops-view-emails.ts +2 -2
- package/ts_web/elements/ops-view-network.ts +2 -2
- package/ts_web/elements/ops-view-remoteingress.ts +6 -6
- package/ts_web/readme.md +1 -1
- package/ts_web/router.ts +3 -3
- /package/{npmextra.json → .smartconfig.json} +0 -0
|
@@ -195,17 +195,18 @@ export class OpsDashboard extends DeesElement {
|
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
public async firstUpdated() {
|
|
198
|
-
const simpleLogin = this.shadowRoot
|
|
199
|
-
simpleLogin.addEventListener('login', (e:
|
|
198
|
+
const simpleLogin = this.shadowRoot!.querySelector('dees-simple-login') as any;
|
|
199
|
+
simpleLogin.addEventListener('login', (e: Event) => {
|
|
200
200
|
// Handle logout event
|
|
201
|
-
|
|
201
|
+
const detail = (e as CustomEvent).detail;
|
|
202
|
+
this.login(detail.data.username, detail.data.password);
|
|
202
203
|
});
|
|
203
204
|
|
|
204
205
|
// Handle view changes
|
|
205
|
-
const appDash = this.shadowRoot
|
|
206
|
+
const appDash = this.shadowRoot!.querySelector('dees-simple-appdash');
|
|
206
207
|
if (appDash) {
|
|
207
|
-
appDash.addEventListener('view-select', (e:
|
|
208
|
-
const viewName = e.detail.view.name.toLowerCase();
|
|
208
|
+
appDash.addEventListener('view-select', (e: Event) => {
|
|
209
|
+
const viewName = (e as CustomEvent).detail.view.name.toLowerCase();
|
|
209
210
|
// Use router for navigation instead of direct state update
|
|
210
211
|
appRouter.navigateToView(viewName);
|
|
211
212
|
});
|
|
@@ -217,7 +218,7 @@ export class OpsDashboard extends DeesElement {
|
|
|
217
218
|
}
|
|
218
219
|
|
|
219
220
|
// Handle initial state - check if we have a stored session that's still valid
|
|
220
|
-
const loginState = appstate.loginStatePart.getState()
|
|
221
|
+
const loginState = appstate.loginStatePart.getState()!;
|
|
221
222
|
if (loginState.identity?.jwt) {
|
|
222
223
|
if (loginState.identity.expiresAt > Date.now()) {
|
|
223
224
|
// Client-side expiry looks valid — verify with server (keypair may have changed)
|
|
@@ -229,7 +230,7 @@ export class OpsDashboard extends DeesElement {
|
|
|
229
230
|
if (response.valid) {
|
|
230
231
|
// JWT confirmed valid by server
|
|
231
232
|
this.loginState = loginState;
|
|
232
|
-
await simpleLogin.switchToSlottedContent();
|
|
233
|
+
await (simpleLogin as any).switchToSlottedContent();
|
|
233
234
|
await appstate.statsStatePart.dispatchAction(appstate.fetchAllStatsAction, null);
|
|
234
235
|
await appstate.configStatePart.dispatchAction(appstate.fetchConfigurationAction, null);
|
|
235
236
|
} else {
|
|
@@ -250,8 +251,8 @@ export class OpsDashboard extends DeesElement {
|
|
|
250
251
|
private async login(username: string, password: string) {
|
|
251
252
|
const domtools = await this.domtoolsPromise;
|
|
252
253
|
console.log(`Attempting to login...`);
|
|
253
|
-
const simpleLogin = this.shadowRoot
|
|
254
|
-
const form = simpleLogin.shadowRoot
|
|
254
|
+
const simpleLogin = this.shadowRoot!.querySelector('dees-simple-login') as any;
|
|
255
|
+
const form = simpleLogin.shadowRoot!.querySelector('dees-form') as any;
|
|
255
256
|
form.setStatus('pending', 'Logging in...');
|
|
256
257
|
|
|
257
258
|
const state = await appstate.loginStatePart.dispatchAction(appstate.loginAction, {
|
|
@@ -262,14 +263,14 @@ export class OpsDashboard extends DeesElement {
|
|
|
262
263
|
if (state.identity) {
|
|
263
264
|
console.log('Login successful');
|
|
264
265
|
this.loginState = state;
|
|
265
|
-
form
|
|
266
|
-
await simpleLogin
|
|
266
|
+
form!.setStatus('success', 'Logged in!');
|
|
267
|
+
await simpleLogin!.switchToSlottedContent();
|
|
267
268
|
await appstate.statsStatePart.dispatchAction(appstate.fetchAllStatsAction, null);
|
|
268
269
|
await appstate.configStatePart.dispatchAction(appstate.fetchConfigurationAction, null);
|
|
269
270
|
} else {
|
|
270
|
-
form
|
|
271
|
+
form!.setStatus('error', 'Login failed!');
|
|
271
272
|
await domtools.convenience.smartdelay.delayFor(2000);
|
|
272
|
-
form
|
|
273
|
+
form!.reset();
|
|
273
274
|
}
|
|
274
275
|
}
|
|
275
276
|
}
|
|
@@ -21,7 +21,7 @@ declare global {
|
|
|
21
21
|
@customElement('ops-view-certificates')
|
|
22
22
|
export class OpsViewCertificates extends DeesElement {
|
|
23
23
|
@state()
|
|
24
|
-
accessor certState: appstate.ICertificateState = appstate.certificateStatePart.getState()
|
|
24
|
+
accessor certState: appstate.ICertificateState = appstate.certificateStatePart.getState()!;
|
|
25
25
|
|
|
26
26
|
constructor() {
|
|
27
27
|
super();
|
|
@@ -264,10 +264,10 @@ export class OpsViewCertificates extends DeesElement {
|
|
|
264
264
|
{
|
|
265
265
|
name: 'Import',
|
|
266
266
|
iconName: 'lucide:upload',
|
|
267
|
-
action: async (modal) => {
|
|
267
|
+
action: async (modal: any) => {
|
|
268
268
|
const { DeesToast } = await import('@design.estate/dees-catalog');
|
|
269
269
|
try {
|
|
270
|
-
const form = modal.shadowRoot
|
|
270
|
+
const form = modal.shadowRoot!.querySelector('dees-form') as any;
|
|
271
271
|
const formData = await form.collectFormData();
|
|
272
272
|
const files = formData.certJsonFile;
|
|
273
273
|
if (!files || files.length === 0) {
|
|
@@ -287,8 +287,8 @@ export class OpsViewCertificates extends DeesElement {
|
|
|
287
287
|
);
|
|
288
288
|
DeesToast.show({ message: `Certificate imported for ${cert.domainName}`, type: 'success', duration: 3000 });
|
|
289
289
|
modal.destroy();
|
|
290
|
-
} catch (err) {
|
|
291
|
-
DeesToast.show({ message: `Import failed: ${err.message}`, type: 'error', duration: 4000 });
|
|
290
|
+
} catch (err: unknown) {
|
|
291
|
+
DeesToast.show({ message: `Import failed: ${(err as Error).message}`, type: 'error', duration: 4000 });
|
|
292
292
|
}
|
|
293
293
|
},
|
|
294
294
|
},
|
|
@@ -339,8 +339,8 @@ export class OpsViewCertificates extends DeesElement {
|
|
|
339
339
|
} else {
|
|
340
340
|
DeesToast.show({ message: response.message || 'Export failed', type: 'error', duration: 4000 });
|
|
341
341
|
}
|
|
342
|
-
} catch (err) {
|
|
343
|
-
DeesToast.show({ message: `Export failed: ${err.message}`, type: 'error', duration: 4000 });
|
|
342
|
+
} catch (err: unknown) {
|
|
343
|
+
DeesToast.show({ message: `Export failed: ${(err as Error).message}`, type: 'error', duration: 4000 });
|
|
344
344
|
}
|
|
345
345
|
},
|
|
346
346
|
},
|
|
@@ -363,7 +363,7 @@ export class OpsViewCertificates extends DeesElement {
|
|
|
363
363
|
{
|
|
364
364
|
name: 'Delete',
|
|
365
365
|
iconName: 'lucide:trash-2',
|
|
366
|
-
action: async (modal) => {
|
|
366
|
+
action: async (modal: any) => {
|
|
367
367
|
try {
|
|
368
368
|
await appstate.certificateStatePart.dispatchAction(
|
|
369
369
|
appstate.deleteCertificateAction,
|
|
@@ -371,8 +371,8 @@ export class OpsViewCertificates extends DeesElement {
|
|
|
371
371
|
);
|
|
372
372
|
DeesToast.show({ message: `Certificate deleted for ${cert.domain}`, type: 'success', duration: 3000 });
|
|
373
373
|
modal.destroy();
|
|
374
|
-
} catch (err) {
|
|
375
|
-
DeesToast.show({ message: `Delete failed: ${err.message}`, type: 'error', duration: 4000 });
|
|
374
|
+
} catch (err: unknown) {
|
|
375
|
+
DeesToast.show({ message: `Delete failed: ${(err as Error).message}`, type: 'error', duration: 4000 });
|
|
376
376
|
}
|
|
377
377
|
},
|
|
378
378
|
},
|
|
@@ -102,7 +102,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
102
102
|
`;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
private renderSystemSection(sys: appstate.IConfigState['config']['system']): TemplateResult {
|
|
105
|
+
private renderSystemSection(sys: NonNullable<appstate.IConfigState['config']>['system']): TemplateResult {
|
|
106
106
|
// Annotate proxy IPs with source hint when Remote Ingress is active
|
|
107
107
|
const ri = this.configState.config?.remoteIngress;
|
|
108
108
|
let proxyIpValues: string[] | null = sys.proxyIps.length > 0 ? [...sys.proxyIps] : null;
|
|
@@ -133,7 +133,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
133
133
|
`;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
private renderSmartProxySection(proxy: appstate.IConfigState['config']['smartProxy']): TemplateResult {
|
|
136
|
+
private renderSmartProxySection(proxy: NonNullable<appstate.IConfigState['config']>['smartProxy']): TemplateResult {
|
|
137
137
|
const fields: IConfigField[] = [
|
|
138
138
|
{ key: 'Route Count', value: proxy.routeCount },
|
|
139
139
|
];
|
|
@@ -164,7 +164,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
164
164
|
`;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
private renderEmailSection(email: appstate.IConfigState['config']['email']): TemplateResult {
|
|
167
|
+
private renderEmailSection(email: NonNullable<appstate.IConfigState['config']>['email']): TemplateResult {
|
|
168
168
|
const fields: IConfigField[] = [
|
|
169
169
|
{ key: 'Ports', value: email.ports.length > 0 ? email.ports.map(String) : null, type: 'pills' },
|
|
170
170
|
{ key: 'Hostname', value: email.hostname },
|
|
@@ -196,7 +196,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
196
196
|
`;
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
private renderDnsSection(dns: appstate.IConfigState['config']['dns']): TemplateResult {
|
|
199
|
+
private renderDnsSection(dns: NonNullable<appstate.IConfigState['config']>['dns']): TemplateResult {
|
|
200
200
|
const fields: IConfigField[] = [
|
|
201
201
|
{ key: 'Port', value: dns.port },
|
|
202
202
|
{ key: 'NS Domains', value: dns.nsDomains.length > 0 ? dns.nsDomains : null, type: 'pills' },
|
|
@@ -216,7 +216,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
216
216
|
`;
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
private renderTlsSection(tls: appstate.IConfigState['config']['tls']): TemplateResult {
|
|
219
|
+
private renderTlsSection(tls: NonNullable<appstate.IConfigState['config']>['tls']): TemplateResult {
|
|
220
220
|
const fields: IConfigField[] = [
|
|
221
221
|
{ key: 'Contact Email', value: tls.contactEmail },
|
|
222
222
|
{ key: 'Domain', value: tls.domain },
|
|
@@ -242,7 +242,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
242
242
|
`;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
private renderCacheSection(cache: appstate.IConfigState['config']['cache']): TemplateResult {
|
|
245
|
+
private renderCacheSection(cache: NonNullable<appstate.IConfigState['config']>['cache']): TemplateResult {
|
|
246
246
|
const fields: IConfigField[] = [
|
|
247
247
|
{ key: 'Storage Path', value: cache.storagePath },
|
|
248
248
|
{ key: 'DB Name', value: cache.dbName },
|
|
@@ -267,7 +267,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
267
267
|
`;
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
private renderRadiusSection(radius: appstate.IConfigState['config']['radius']): TemplateResult {
|
|
270
|
+
private renderRadiusSection(radius: NonNullable<appstate.IConfigState['config']>['radius']): TemplateResult {
|
|
271
271
|
const fields: IConfigField[] = [
|
|
272
272
|
{ key: 'Auth Port', value: radius.authPort },
|
|
273
273
|
{ key: 'Accounting Port', value: radius.acctPort },
|
|
@@ -296,7 +296,7 @@ export class OpsViewConfig extends DeesElement {
|
|
|
296
296
|
`;
|
|
297
297
|
}
|
|
298
298
|
|
|
299
|
-
private renderRemoteIngressSection(ri: appstate.IConfigState['config']['remoteIngress']): TemplateResult {
|
|
299
|
+
private renderRemoteIngressSection(ri: NonNullable<appstate.IConfigState['config']>['remoteIngress']): TemplateResult {
|
|
300
300
|
const fields: IConfigField[] = [
|
|
301
301
|
{ key: 'Tunnel Port', value: ri.tunnelPort },
|
|
302
302
|
{ key: 'Hub Domain', value: ri.hubDomain },
|
|
@@ -83,13 +83,13 @@ export class OpsViewEmails extends DeesElement {
|
|
|
83
83
|
private async handleEmailClick(e: CustomEvent<interfaces.requests.IEmail>) {
|
|
84
84
|
const emailSummary = e.detail;
|
|
85
85
|
try {
|
|
86
|
-
const context = appstate.loginStatePart.getState()
|
|
86
|
+
const context = appstate.loginStatePart.getState()!;
|
|
87
87
|
const request = new plugins.domtools.plugins.typedrequest.TypedRequest<
|
|
88
88
|
interfaces.requests.IReq_GetEmailDetail
|
|
89
89
|
>('/typedrequest', 'getEmailDetail');
|
|
90
90
|
|
|
91
91
|
const response = await request.fire({
|
|
92
|
-
identity: context.identity
|
|
92
|
+
identity: context.identity!,
|
|
93
93
|
emailId: emailSummary.id,
|
|
94
94
|
});
|
|
95
95
|
|
|
@@ -29,10 +29,10 @@ interface INetworkRequest {
|
|
|
29
29
|
@customElement('ops-view-network')
|
|
30
30
|
export class OpsViewNetwork extends DeesElement {
|
|
31
31
|
@state()
|
|
32
|
-
accessor statsState = appstate.statsStatePart.getState()
|
|
32
|
+
accessor statsState = appstate.statsStatePart.getState()!;
|
|
33
33
|
|
|
34
34
|
@state()
|
|
35
|
-
accessor networkState = appstate.networkStatePart.getState()
|
|
35
|
+
accessor networkState = appstate.networkStatePart.getState()!;
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
@state()
|
|
@@ -21,7 +21,7 @@ declare global {
|
|
|
21
21
|
@customElement('ops-view-remoteingress')
|
|
22
22
|
export class OpsViewRemoteIngress extends DeesElement {
|
|
23
23
|
@state()
|
|
24
|
-
accessor riState: appstate.IRemoteIngressState = appstate.remoteIngressStatePart.getState()
|
|
24
|
+
accessor riState: appstate.IRemoteIngressState = appstate.remoteIngressStatePart.getState()!;
|
|
25
25
|
|
|
26
26
|
constructor() {
|
|
27
27
|
super();
|
|
@@ -184,7 +184,7 @@ export class OpsViewRemoteIngress extends DeesElement {
|
|
|
184
184
|
@click=${async () => {
|
|
185
185
|
const { DeesToast } = await import('@design.estate/dees-catalog');
|
|
186
186
|
try {
|
|
187
|
-
const response = await appstate.fetchConnectionToken(this.riState.newEdgeId);
|
|
187
|
+
const response = await appstate.fetchConnectionToken(this.riState.newEdgeId!);
|
|
188
188
|
if (response.success && response.token) {
|
|
189
189
|
if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') {
|
|
190
190
|
await navigator.clipboard.writeText(response.token);
|
|
@@ -202,8 +202,8 @@ export class OpsViewRemoteIngress extends DeesElement {
|
|
|
202
202
|
} else {
|
|
203
203
|
DeesToast.show({ message: response.message || 'Failed to get token', type: 'error', duration: 4000 });
|
|
204
204
|
}
|
|
205
|
-
} catch (err) {
|
|
206
|
-
DeesToast.show({ message: `Failed: ${err.message}`, type: 'error', duration: 4000 });
|
|
205
|
+
} catch (err: unknown) {
|
|
206
|
+
DeesToast.show({ message: `Failed: ${(err as Error).message}`, type: 'error', duration: 4000 });
|
|
207
207
|
}
|
|
208
208
|
}}
|
|
209
209
|
>Copy Connection Token</dees-button>
|
|
@@ -399,8 +399,8 @@ export class OpsViewRemoteIngress extends DeesElement {
|
|
|
399
399
|
} else {
|
|
400
400
|
DeesToast.show({ message: response.message || 'Failed to get token', type: 'error', duration: 4000 });
|
|
401
401
|
}
|
|
402
|
-
} catch (err) {
|
|
403
|
-
DeesToast.show({ message: `Failed: ${err.message}`, type: 'error', duration: 4000 });
|
|
402
|
+
} catch (err: unknown) {
|
|
403
|
+
DeesToast.show({ message: `Failed: ${(err as Error).message}`, type: 'error', duration: 4000 });
|
|
404
404
|
}
|
|
405
405
|
},
|
|
406
406
|
},
|
package/ts_web/readme.md
CHANGED
|
@@ -237,7 +237,7 @@ export class OpsViewMyView extends DeesElement {
|
|
|
237
237
|
|
|
238
238
|
## License and Legal Information
|
|
239
239
|
|
|
240
|
-
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [
|
|
240
|
+
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [license](../license) file.
|
|
241
241
|
|
|
242
242
|
**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
|
|
243
243
|
|
package/ts_web/router.ts
CHANGED
|
@@ -71,12 +71,12 @@ class AppRouter {
|
|
|
71
71
|
|
|
72
72
|
private updateViewState(view: string): void {
|
|
73
73
|
this.suppressStateUpdate = true;
|
|
74
|
-
const currentState = appstate.uiStatePart.getState()
|
|
74
|
+
const currentState = appstate.uiStatePart.getState()!;
|
|
75
75
|
if (currentState.activeView !== view) {
|
|
76
76
|
appstate.uiStatePart.setState({
|
|
77
77
|
...currentState,
|
|
78
78
|
activeView: view,
|
|
79
|
-
});
|
|
79
|
+
} as appstate.IUiState);
|
|
80
80
|
}
|
|
81
81
|
this.suppressStateUpdate = false;
|
|
82
82
|
}
|
|
@@ -94,7 +94,7 @@ class AppRouter {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
public getCurrentView(): string {
|
|
97
|
-
return appstate.uiStatePart.getState()
|
|
97
|
+
return appstate.uiStatePart.getState()!.activeView;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
public destroy(): void {
|
|
File without changes
|