From 0ae4e31cfda7ba74bac6cd483b8b3c9c89f86129 Mon Sep 17 00:00:00 2001 From: nikolay Date: Thu, 22 Jun 2023 11:09:52 +0400 Subject: [PATCH] =?UTF-8?q?dev=20#14562=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BC=D0=B5=D0=BD=D1=8E=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20iOS=20WPA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/directives/download-app.directive.ts | 75 +----- .../navbar/menu_item.component.html | 3 + .../navbar/menu_item.component.scss | 20 ++ .../components/navbar/menu_item.component.ts | 18 ++ .../components/navbar/navbar.component.html | 39 ++- .../components/navbar/navbar.component.scss | 26 ++ .../components/navbar/navbar.component.ts | 60 ++++- .../default-option/default-option.module.ts | 5 +- .../src/app/services/apple-wallet.service.ts | 46 +++- angular/src/app/utils.ts | 10 + angular/src/assets/apple_wallet.svg | 232 ++++++++++++++++++ angular/src/index.html | 2 +- angular/src/styles.scss | 2 + 13 files changed, 467 insertions(+), 71 deletions(-) create mode 100644 angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.html create mode 100644 angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.scss create mode 100644 angular/src/app/presentation-options/default-option/components/navbar/menu_item.component.ts create mode 100644 angular/src/app/utils.ts create mode 100644 angular/src/assets/apple_wallet.svg 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}}

-
+
+ +