diff --git a/npm/ng-packs/packages/core/src/lib/services/internet-connection-service.ts b/npm/ng-packs/packages/core/src/lib/services/internet-connection-service.ts index 9fc95e4c08..9afcdeb166 100644 --- a/npm/ng-packs/packages/core/src/lib/services/internet-connection-service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/internet-connection-service.ts @@ -1,7 +1,6 @@ import { DOCUMENT } from '@angular/common'; -import { Injectable, inject, signal } from '@angular/core'; -import { fromEvent, merge, of } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { Injectable, computed, inject, signal } from '@angular/core'; +import { Subject } from 'rxjs'; @Injectable({ providedIn: 'root', @@ -10,23 +9,29 @@ export class InternetConnectionService{ protected readonly window = inject(DOCUMENT).defaultView; protected readonly navigator = this.window.navigator; - networkStatus$ = merge( - of(navigator.onLine), - fromEvent(window, 'offline'), - fromEvent(window, 'online') - ).pipe(map(() => navigator.onLine)); -} + /* observable */ + private status$ = new Subject() -@Injectable({ - providedIn: 'root', -}) -export class InternetConnectionSignalService{ - protected readonly window = inject(DOCUMENT).defaultView; - protected readonly navigator = this.window.navigator; - readonly networkStatus = signal(navigator.onLine); + /* creates writableSignal */ + private status = signal(navigator.onLine); constructor(){ - this.window.addEventListener('offline', () => { this.networkStatus.set(navigator.onLine) }); - this.window.addEventListener('online', () => { this.networkStatus.set(navigator.onLine) }); + this.window.addEventListener('offline', () => this.setStatus() ); + this.window.addEventListener('online', () => this.setStatus() ); + } + + private setStatus(){ + this.status.set(navigator.onLine) + this.status$.next(navigator.onLine) + } + + /* returns READONLY ANGULAR SIGNAL */ + get networkStatus(){ + return computed(this.status) + } + + /* returns OBSERVABLE */ + get networkStatus$(){ + return this.status$ } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/internet-connection-status/internet-connection-status.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/internet-connection-status/internet-connection-status.component.ts index e62bc049f5..1610988a14 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/internet-connection-status/internet-connection-status.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/internet-connection-status/internet-connection-status.component.ts @@ -1,13 +1,14 @@ import { Component, inject } from '@angular/core'; -import { NgIf } from '@angular/common' -import { InternetConnectionSignalService , LocalizationModule } from '@abp/ng.core'; +import { AsyncPipe, NgIf } from '@angular/common' +import { InternetConnectionService , LocalizationModule } from '@abp/ng.core'; +import { map } from 'rxjs'; @Component({ selector: 'abp-internet-status', standalone: true, - imports:[NgIf, LocalizationModule], + imports:[NgIf, AsyncPipe, LocalizationModule], template: ` -
+
@@ -42,6 +43,6 @@ import { InternetConnectionSignalService , LocalizationModule } from '@abp/ng.co `] }) export class InternetConnectionStatusComponent{ - internetConnectionSignalService = inject(InternetConnectionSignalService); - isOnline = this.internetConnectionSignalService.networkStatus; + internetConnectionService = inject(InternetConnectionService); + isOffline = this.internetConnectionService.networkStatus }