import { brandingConfig } from '@/branding/branding.config'; import { PwaInstallService } from '@/core/services'; import { Component, effect, EventEmitter, inject, Output } from '@angular/core'; import { ButtonDirective } from 'primeng/button'; import { finalize, forkJoin } from 'rxjs'; import images from 'src/assets/images'; import { PosInfoStore, PosProfileStore } from '../store'; import { DeviceInfoStore } from '../store/device.store'; @Component({ selector: 'pos-splash', templateUrl: 'splash.component.html', imports: [ButtonDirective], }) export class PosSplashComponent { @Output() onComplete = new EventEmitter(); private readonly posProfileStore = inject(PosProfileStore); private readonly posInfoStore = inject(PosInfoStore); private readonly deviceInfoStore = inject(DeviceInfoStore); private readonly pwaInstallService = inject(PwaInstallService); logo = images.logo; // requireInstall = false; requireInstall = brandingConfig.enableInstallPrompt; pwaInstalled = this.pwaInstallService.isInstalled; canInstall = this.pwaInstallService.canInstall; private installPromptShown = false; constructor() { effect(() => { if (!this.requireInstall || this.pwaInstalled() || this.installPromptShown) { this.getData(); return; } if (this.canInstall()) { this.installPromptShown = true; this.pwaInstallService.openInstallConfirm(); } }); } async ngOnInit() { const data = await this.deviceInfoStore.getData(); if (!this.requireInstall || this.pwaInstalled()) { this.getData(); } if (this.canInstall()) { this.pwaInstallService.openInstallConfirm(); this.installPromptShown = true; } } async getData() { const profileObs = await this.posProfileStore.getData(); const infoObs = await this.posInfoStore.getData(); forkJoin([profileObs, infoObs]) .pipe( finalize(() => { this.onComplete.emit(); }), ) .subscribe(([profileResult, infoResult]) => {}); } installPwa() { this.pwaInstallService.openInstallConfirm(); } continueAfterInstall() { if (this.pwaInstalled()) { this.onComplete.emit(); } } }