File

projects/storefrontlib/cms-structure/pwa/services/add-to-home-screen.service.ts

Index

Properties
Methods

Constructor

constructor(config: PWAModuleConfig, globalMessageService: GlobalMessageService, winRef: WindowRef)
Parameters :
Name Type Optional
config PWAModuleConfig No
globalMessageService GlobalMessageService No
winRef WindowRef No

Methods

disableAddToHomeScreen
disableAddToHomeScreen()
Returns : void
enableAddToHomeScreen
enableAddToHomeScreen()
Returns : void
firePrompt
firePrompt()
Returns : void
init
init()
Returns : void

Properties

Protected canPrompt
Default value : new BehaviorSubject<boolean>(false)
canPrompt$
Type : Observable<boolean>
Default value : this.canPrompt.asObservable()
Protected deferredEvent
Type : any
import { Injectable } from '@angular/core';
import {
  GlobalMessageService,
  GlobalMessageType,
  WindowRef,
} from '@spartacus/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { PWAModuleConfig } from '../pwa.module-config';

@Injectable({
  providedIn: 'root',
})
export class AddToHomeScreenService {
  protected deferredEvent: any;

  protected canPrompt = new BehaviorSubject<boolean>(false);

  canPrompt$: Observable<boolean> = this.canPrompt.asObservable();

  constructor(
    protected config: PWAModuleConfig,
    protected globalMessageService: GlobalMessageService,
    protected winRef: WindowRef
  ) {
    if (this.config.pwa.addToHomeScreen) {
      this.init();
    }
  }

  init() {
    if (this.winRef.nativeWindow) {
      this.winRef.nativeWindow.addEventListener(
        'beforeinstallprompt',
        (event) => {
          event.preventDefault();
          this.deferredEvent = event;
          this.enableAddToHomeScreen();
        }
      );

      this.winRef.nativeWindow.addEventListener('appinstalled', () => {
        this.globalMessageService.add(
          { key: 'pwa.addedToHomeScreen' },
          GlobalMessageType.MSG_TYPE_CONFIRMATION
        );

        this.disableAddToHomeScreen();
        this.deferredEvent = null;
      });
    }
  }

  enableAddToHomeScreen(): void {
    this.canPrompt.next(true);
  }

  disableAddToHomeScreen(): void {
    this.canPrompt.next(false);
  }

  firePrompt(): void {
    if (this.deferredEvent) {
      this.deferredEvent.prompt();
    }
  }
}

result-matching ""

    No results matching ""