projects/storefrontlib/cms-structure/pwa/services/add-to-home-screen.service.ts
Properties |
|
Methods |
constructor(config: PWAModuleConfig, globalMessageService: GlobalMessageService, winRef: WindowRef)
|
||||||||||||
|
Parameters :
|
| disableAddToHomeScreen |
disableAddToHomeScreen()
|
|
Returns :
void
|
| enableAddToHomeScreen |
enableAddToHomeScreen()
|
|
Returns :
void
|
| firePrompt |
firePrompt()
|
|
Returns :
void
|
| init |
init()
|
|
Returns :
void
|
| 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();
}
}
}