diff --git a/src/app/providers/license-interceptor.service.ts b/src/app/providers/license-interceptor.service.ts index 3dd2451..edfbbcd 100644 --- a/src/app/providers/license-interceptor.service.ts +++ b/src/app/providers/license-interceptor.service.ts @@ -25,7 +25,7 @@ export class LicenseInterceptor implements HttpInterceptor { 'snippet/syslogregex/list' ]; - constructor(private licenseService: LicenseService) {} + constructor(private licenseService: LicenseService) { } private isProEndpoint(url: string): boolean { return this.proEndpoints.some(endpoint => url.includes(endpoint)); diff --git a/src/app/shared/components/license-expired-overlay/license-expired-overlay.component.html b/src/app/shared/components/license-expired-overlay/license-expired-overlay.component.html index a81e49a..bd74c49 100644 --- a/src/app/shared/components/license-expired-overlay/license-expired-overlay.component.html +++ b/src/app/shared/components/license-expired-overlay/license-expired-overlay.component.html @@ -4,12 +4,13 @@

Pro Feature: License Expired

-

This view is restricted to pro-licensed customers. Your license has either expired or is not valid for this feature.

+

This view is restricted to pro-licensed customers. Your license has either expired or is not valid for this + feature.

- + Renew License
- + \ No newline at end of file diff --git a/src/app/views/dashboard/dashboard.component.html b/src/app/views/dashboard/dashboard.component.html index 3a84b44..7fbeb4f 100644 --- a/src/app/views/dashboard/dashboard.component.html +++ b/src/app/views/dashboard/dashboard.component.html @@ -142,102 +142,179 @@ -
+
-
+
- + - - - -
-

Version and Serial information

-
-
-
-
-
-
-
+ + + + + +
+
+
+
+
+
+
-
-
-
- Serial: {{ stats['serial'] }} - Copy -
- Not Registered - License Validation failed -
-
-
- Serial: {{ stats['serial'] }} - Copy -
- Unable connect to server/Check server internet connection -
-
-
- Serial: {{ stats['serial'] }} - Copy -
- Registered - License Type : {{stats['license']}} - Manual update - Auto update -
-
- Your Mikroman version : {{stats['version']}} - - - - - Your Mikrofront version : {{front_version}} - - - - -
-

License User name is - not set in settings read more!

-

Serial number not - submitedread more!

- +
+ +
+
+
Version & License
+
+ {{ stats['serial'] }} + + +
+
+
+ + + {{ stats?.update_mode === 'auto' ? 'Auto Updates On' : 'Manual Updates' }} + +
+
+ + +
+ +
+ + + Pro License Active + Free License Active + License Expired + Connection Error + Registration Required + + + {{ stats?.license_info?.status | uppercase }} + +
+ +
+

+ {{ stats?.license_info?.message || (stats?.license_info?.status === 'connection_error' ? 'Cannot connect + to server to verify license and updates.' : 'License information unavailable.') }} +

+ + +
+
+ + +
+
+
+
+
+ Mikroman Backend v{{stats['version']}} +
+
Up to + date
+
v{{stats['latest_version']}} Available
+
+
+ Auto-updating + + +
+
+
+ +
+
+
+
+ MikroFront UI v{{front_version}} +
+
Up to date
+
v{{stats['front_latest_version']}} Available
+
+
+ Auto-updating + + +
+
+
+
+ +
+
Local functionality only. Remote services unreachable.
+
+
+ - - + +
diff --git a/src/app/views/maps/maps.component.ts b/src/app/views/maps/maps.component.ts index dd8d2f7..c1d73be 100644 --- a/src/app/views/maps/maps.component.ts +++ b/src/app/views/maps/maps.component.ts @@ -23,6 +23,7 @@ export class MapsComponent implements OnInit, OnDestroy { public showResetModal: boolean = false; public loadingMap: boolean = false; private pollingTimer: any; + private isDestroyed: boolean = false; constructor( private data_provider: dataProvider, @@ -58,15 +59,18 @@ export class MapsComponent implements OnInit, OnDestroy { } ngOnDestroy(): void { + this.isDestroyed = true; if (this.pollingTimer) { clearTimeout(this.pollingTimer); } } loadNetworkData(): void { + if (this.isDestroyed) return; clearTimeout(this.pollingTimer); this.loadingMap = true; this.data_provider.getNetworkMap().then((res) => { + if (this.isDestroyed) return; // Normalize response - handle array or object with 'result' property const data = (res && res.result) ? res.result : res;