UNPKG

@rfprodz/client-pwa-offline

Version:

PWA offline feature for Angular clients.

1 lines 8.34 kB
{"version":3,"file":"rfprodz-client-pwa-offline.mjs","sources":["../../../../libs/client-pwa-offline/src/lib/components/pwa-offline/pwa-offline.component.ts","../../../../libs/client-pwa-offline/src/lib/components/pwa-offline/pwa-offline.component.html","../../../../libs/client-pwa-offline/src/lib/providers/navigator.provider.ts","../../../../libs/client-pwa-offline/src/lib/interceptors/pwa-offline.interceptor.ts","../../../../libs/client-pwa-offline/src/lib/pwa-offline-routing.module.ts","../../../../libs/client-pwa-offline/src/lib/pwa-offline.module.ts","../../../../libs/client-pwa-offline/src/rfprodz-client-pwa-offline.ts"],"sourcesContent":["import { Location } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\n\n/**\n * PWA offline component.\n * Displays a view that notifies the user of the offline network status.\n */\n@Component({\n selector: 'app-pwa-offline',\n templateUrl: './pwa-offline.component.html',\n styleUrls: ['./pwa-offline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class AppPwaOfflineComponent {\n public readonly location = inject(Location);\n\n /**\n * Loads a previous route that failed to load due to offline status.\n */\n public back(): void {\n this.location.back();\n }\n}\n","<div class=\"container\">\n <span class=\"container__message\"><mat-icon color=\"warn\">wifi_off</mat-icon></span>\n <span class=\"container__message mat-body-2\">You are offline.</span>\n <span class=\"container__message mat-body-2\">Please check your network connection.</span>\n <button mat-button (click)=\"back()\" color=\"accent\"><mat-icon>refresh</mat-icon> Retry</button>\n</div>\n","import { InjectionToken, type Provider } from '@angular/core';\n\nexport type TNavigatorToken = InjectionToken<Navigator>;\n\nexport const NAVIGATOR: TNavigatorToken = new InjectionToken<Navigator>('NAVIGATOR');\n\nexport function navigatorFactory() {\n return window.navigator;\n}\n\nexport const navigatorProvider: Provider = {\n provide: NAVIGATOR,\n useFactory: navigatorFactory,\n};\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NEVER, Observable } from 'rxjs';\n\nimport { NAVIGATOR } from '../providers/navigator.provider';\n\n/**\n * PWA offline interceptor.\n * Redirects to a dedicated view when the app goes offline.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AppPwaOfflineInterceptor implements HttpInterceptor {\n private readonly navigator = inject(NAVIGATOR);\n\n private readonly router = inject(Router);\n\n public intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n const routeLoaded = this.router.url.includes('offline');\n if (!this.navigator.onLine && !routeLoaded) {\n void this.router.navigateByUrl('/offline');\n return NEVER;\n }\n return next.handle(req);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Route, RouterModule } from '@angular/router';\n\nimport { AppPwaOfflineComponent } from './components/pwa-offline/pwa-offline.component';\n\nconst routes: Route[] = [\n {\n path: 'offline',\n component: AppPwaOfflineComponent,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class AppPwaOfflineRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { AppPwaOfflineComponent } from './components/pwa-offline/pwa-offline.component';\nimport { AppPwaOfflineInterceptor } from './interceptors/pwa-offline.interceptor';\nimport { navigatorProvider } from './providers/navigator.provider';\nimport { AppPwaOfflineRoutingModule } from './pwa-offline-routing.module';\n\n/**\n * PWA offline module.\n * Provides an interceptor that redirects to a dedicated view when the app goes offline.\n */\n@NgModule({\n imports: [CommonModule, MatIconModule, MatButtonModule, AppPwaOfflineRoutingModule],\n declarations: [AppPwaOfflineComponent],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AppPwaOfflineInterceptor,\n multi: true,\n },\n navigatorProvider,\n ],\n})\nexport class AppPwaOfflineModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}