diff --git a/angular/src/app/directives/download-app.directive.ts b/angular/src/app/directives/download-app.directive.ts index fd31670..a97740a 100644 --- a/angular/src/app/directives/download-app.directive.ts +++ b/angular/src/app/directives/download-app.directive.ts @@ -6,13 +6,12 @@ import { Renderer2, Inject, } from '@angular/core'; -import { lastValueFrom } from 'rxjs'; -import { MatSnackBar } from '@angular/material/snack-bar'; + import { MessageService } from 'primeng/api'; import { CookiesService } from 'src/app/services/cookies.service'; -import { RpcService, JsonrpcService } from 'src/app/services/jsonrpc.service'; -import { DOCUMENT } from '@angular/common'; + import { AppleWalletService } from 'src/app/services/apple-wallet.service'; +import { getTypeDevice } from 'src/app/utils'; @Directive({ selector: '[appDownloadApp]', @@ -25,21 +24,16 @@ export class DownloadAppDirective implements OnInit { private messageService: MessageService, public renderer: Renderer2, private el: ElementRef, - private _snackBar: MatSnackBar, - private appleWallet: AppleWalletService, - private cookiesService: CookiesService, - @Inject(DOCUMENT) private document: Document, - private jsonrpc: JsonrpcService, ) { } ngOnInit(): void { - this.getTypeDevice(); + getTypeDevice(); if (this.deviceType === 'ios') { this.el.nativeElement.style.display = 'block'; } - if (window.matchMedia('(display-mode: standalone)').matches) { - this.el.nativeElement.style.display = 'none'; - } + if (window.matchMedia('(display-mode: standalone)').matches) { + this.el.nativeElement.style.display = 'none'; + } } @HostListener('window:beforeinstallprompt', ['$event']) @@ -56,76 +50,29 @@ export class DownloadAppDirective implements OnInit { // Prevent Chrome 67 and earlier from automatically showing the prompt e.preventDefault(); // Stash the event so it can be triggered later. - this.deferredPrompt = e; + this.deferredPrompt = e; this.el.nativeElement.style.display = 'none'; } - getTypeDevice() { - const userAgent = window.navigator.userAgent.toLowerCase(); - const ios = /iphone|ipod|ipad/.test(userAgent); - this.deviceType = ios ? 'ios' : 'android'; - } - @HostListener('click', ['$event']) async downloadApp(event: MouseEvent) { - if (event) { - event.preventDefault(); - } - - if (this.deviceType === 'ios') { - await this.addCardToWallet(); - return; - } if (!this.deferredPrompt) { this.messageService.add({ severity: 'error', summary: 'Не поддерживается в Вашем браузере!', }); - this._snackBar.open('Не поддерживается в Вашем браузере!', '', { - duration: 3000, - }); return; } this.deferredPrompt.prompt(); this.deferredPrompt.userChoice.then((res: any) => { if (res.outcome === 'accepted') { - this._snackBar.open('Спасибо за установку!', '', { - duration: 3000, + this.messageService.add({ + severity: 'success', + summary: 'Спасибо за установку!', }); } this.deferredPrompt = null; }); } - async addCardToWallet() { - const token = this.cookiesService.getItem('token'); - try { - const accountData = ( - await lastValueFrom( - this.jsonrpc.rpc( - { - method: 'getTokenData', - params: [], - }, - RpcService.authService, - true - ) - ) - ).data; - - if (token && accountData.user_id) { - this.appleWallet.generateCard(token, accountData.user_id).subscribe({ - next: (res: any) => { - this.document.location.href = res.url; - }, - error: (err) => { - console.log('Error: ', err); - }, - }); - } - } catch (e) { - console.log(e); - } - - } } diff --git a/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.html b/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.html new file mode 100644 index 0000000..7443bf7 --- /dev/null +++ b/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.html @@ -0,0 +1,3 @@ + diff --git a/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.scss b/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.scss new file mode 100644 index 0000000..80f9464 --- /dev/null +++ b/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.scss @@ -0,0 +1,20 @@ +.menu-item { + display: flex; + gap: 10px; + align-items: center; + padding: 10px; + cursor: pointer; + transition: background-color 0.1s; + + &:hover { + background-color: var(--main-color_hover); + } + + .title { + color: var(--text-color); + } + + .icon { + + } +} diff --git a/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.ts b/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.ts new file mode 100644 index 0000000..e376ca0 --- /dev/null +++ b/angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.ts @@ -0,0 +1,18 @@ +import { Component, Input, HostListener, } from "@angular/core"; + +@Component({ + selector: 'menu-item', + templateUrl: './menu_item.component.html', + styleUrls: ['./menu_item.component.scss'], +}) +export class MenuItemComponent { + @Input() + handler?: (e: any) => void; + + @HostListener('click', ['$event']) + onClick(e: any) { + if (this.handler) { + this.handler(e); + } + } +} diff --git a/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.html b/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.html index 005236d..57622b1 100644 --- a/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.html +++ b/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.html @@ -2,7 +2,44 @@

{{title}}

-
+
+ +