From 59ebcb54c657236bdc476b3c547547ddfa5b6685 Mon Sep 17 00:00:00 2001 From: Mondei1 Date: Sun, 17 Jan 2021 18:48:00 +0100 Subject: [PATCH] Crypto currency isn't static anymore - Notification when transaction got confirmed --- package-lock.json | 8 ++++++ package.json | 1 + src/app/app.module.ts | 4 ++- src/app/backend.service.ts | 24 +++++++++++++---- src/app/cart/cart.component.css | 5 ++++ src/app/cart/cart.component.html | 4 +-- src/app/payment/payment.component.html | 6 ++--- src/app/payment/payment.component.ts | 34 ++++++++++++++++++++++--- src/app/state.service.ts | 4 +-- src/assets/pay_success.mp3 | Bin 0 -> 34224 bytes 10 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 src/assets/pay_success.mp3 diff --git a/package-lock.json b/package-lock.json index ffb354d..359b040 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7527,6 +7527,14 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, + "ng-push-ivy": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ng-push-ivy/-/ng-push-ivy-1.0.7.tgz", + "integrity": "sha512-uUzIKBc6LA9Bw0sl7aj6x3eUr2UcCbXEw1PKpLFZ2OxzbnAhqh3IVX4ah0PRiDpfscFhmGUR2amLo19njAbMVg==", + "requires": { + "tslib": "^2.0.0" + } + }, "ngx-socket-io": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ngx-socket-io/-/ngx-socket-io-3.2.0.tgz", diff --git a/package.json b/package.json index 0ac198c..f7db27c 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@angular/platform-browser-dynamic": "~11.0.5", "@angular/router": "~11.0.5", "angularx-qrcode": "^10.0.11", + "ng-push-ivy": "^1.0.7", "ngx-socket-io": "^3.2.0", "rxjs": "~6.6.0", "tslib": "^2.0.0", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 06874cd..b0f97f4 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -13,6 +13,7 @@ import { HttpClientModule } from '@angular/common/http'; import { AppRoutingModule } from 'src/routes'; import { NotFoundComponent } from './not-found/not-found.component'; import { CartComponent } from './cart/cart.component'; +import { PushNotificationsModule } from 'ng-push-ivy'; const config: SocketIoConfig = { url: 'http://localhost:2009', options: {} }; @@ -31,7 +32,8 @@ const config: SocketIoConfig = { url: 'http://localhost:2009', options: {} }; QRCodeModule, HttpClientModule, AppRoutingModule, - SocketIoModule.forRoot(config) + SocketIoModule.forRoot(config), + PushNotificationsModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/backend.service.ts b/src/app/backend.service.ts index 466164f..44eb161 100644 --- a/src/app/backend.service.ts +++ b/src/app/backend.service.ts @@ -66,7 +66,7 @@ export interface IInvoice { }) export class BackendService { - SERVER_URL = 'http://localhost:2009'; + SERVER_URL = 'http://192.168.178.26:2009'; // Fill with empty data invoice: IInvoice = { @@ -138,7 +138,7 @@ export class BackendService { setInvoice(selector: string): Promise { return new Promise(async (resolve, reject) => { if (selector === undefined || selector === 'undefined' || selector === '') { - reject(); + reject('There is no selector. Please set one before calling setInvoice(...)'); return; } @@ -147,7 +147,6 @@ export class BackendService { responseType: 'json' }).toPromise().then((invoice) => { this.invoice = invoice as IInvoice; - this.invoiceUpdate.next(this.invoice); resolve(this.invoice); }).catch(err => { reject(err); @@ -224,7 +223,14 @@ export class BackendService { /** * @returns Path to icon in assets folder */ - getIcon(unit: CryptoUnits): string { + getIcon(unit?: CryptoUnits): string { + if (unit === undefined) { + if (this.invoice.paymentMethod === undefined) { + return 'assets/Bitcoin.svg'; + } + + unit = this.invoice.paymentMethod; + } switch (unit) { case CryptoUnits.BITCOIN: return 'assets/Bitcoin.svg'; @@ -241,7 +247,15 @@ export class BackendService { } } - findCryptoBySymbol(symbol: string): string | null { + findCryptoBySymbol(symbol?: string): string | null { + if (symbol === undefined) { + if (this.invoice.paymentMethod === undefined) { + return null; + } + + symbol = this.invoice.paymentMethod; + } + for (const coin in CryptoUnits) { // @ts-ignore: This actually works but I think it's too hacky for TS. Allow me this one, please. if (CryptoUnits[coin] === symbol.toUpperCase()) { diff --git a/src/app/cart/cart.component.css b/src/app/cart/cart.component.css index ea5aeff..d0d0a5b 100644 --- a/src/app/cart/cart.component.css +++ b/src/app/cart/cart.component.css @@ -47,4 +47,9 @@ .price { text-align: right; margin: auto; +} + +.quantity { + font-weight: lighter; + font-size: 10pt; } \ No newline at end of file diff --git a/src/app/cart/cart.component.html b/src/app/cart/cart.component.html index 862ef10..6d8f3cb 100644 --- a/src/app/cart/cart.component.html +++ b/src/app/cart/cart.component.html @@ -2,8 +2,8 @@ diff --git a/src/app/payment/payment.component.html b/src/app/payment/payment.component.html index b6e0eda..caaf04c 100644 --- a/src/app/payment/payment.component.html +++ b/src/app/payment/payment.component.html @@ -25,9 +25,9 @@
- + {{ this.backend.invoice?.receiveAddress }} Amount -

{{ this.backend.getAmount() }} BTC | {{ this.backend.invoice.totalPrice!.toFixed(2) }} {{ this.backend.currencyPrefix() }}

+

{{ this.backend.getAmount() }} {{ this.backend.invoice.paymentMethod }} | {{ this.backend.invoice.totalPrice!.toFixed(2) }} {{ this.backend.currencyPrefix() }}

Status

diff --git a/src/app/payment/payment.component.ts b/src/app/payment/payment.component.ts index 1b43b55..dec0c21 100644 --- a/src/app/payment/payment.component.ts +++ b/src/app/payment/payment.component.ts @@ -1,7 +1,8 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; +import { PushNotificationsService } from 'ng-push-ivy'; -import { BackendService, CryptoUnits } from '../backend.service'; +import { BackendService, CryptoUnits, PaymentStatus } from '../backend.service'; import { StateService } from '../state.service'; @Component({ @@ -15,6 +16,7 @@ export class PaymentComponent implements OnInit { confirmations = 0; status: string; ready = false; + emittedNotification = false; // XYZ class (will be xyz-out if cart is shown for example) xyzClass: string; @@ -23,7 +25,8 @@ export class PaymentComponent implements OnInit { constructor( public backend: BackendService, public state: StateService, - private route: ActivatedRoute + private route: ActivatedRoute, + private push: PushNotificationsService ) { this.status = this.backend.getStatus(); this.hideMain = false; @@ -49,9 +52,31 @@ export class PaymentComponent implements OnInit { this.xyzClass = 'xyz-in'; }, 600); } - }) + }); this.backend.invoiceUpdate.subscribe(newInvoice => { + if (newInvoice?.status === PaymentStatus.UNCONFIRMED) { + this.push.requestPermission(); + } + if (newInvoice?.status === PaymentStatus.DONE) { + if (this.emittedNotification) { return; } + this.push.create('Transaction confirmed!', { + body: 'Your transaction just got confirmed.', + lang: 'en', + icon: this.backend.getIcon(), + sticky: true, + vibrate: [250, 400, 250], + sound: 'assets/pay_success.mp3' + }).subscribe( + (res: any) => { + console.log('Success'); + }, + (err: any) => { + console.error('Error:', err); + } + ); + this.emittedNotification = true; + } this.status = this.backend.getStatus(); }); } @@ -61,7 +86,8 @@ export class PaymentComponent implements OnInit { } async get(): Promise { - await this.backend.setInvoice(this.paymentSelector); + const res = await this.backend.setInvoice(this.paymentSelector); + this.status = this.backend.getStatus(); this.backend.getConfirmation().catch(); this.ready = true; } diff --git a/src/app/state.service.ts b/src/app/state.service.ts index 6fb8c69..ebcaa43 100644 --- a/src/app/state.service.ts +++ b/src/app/state.service.ts @@ -14,13 +14,13 @@ export class StateService { constructor(private backend: BackendService) { this.showCart = new BehaviorSubject(false); - + this.backend.invoiceUpdate.subscribe(invoice => { this.showCart.next(false); // Hide cart if status changes }); } - toggleCart() { + toggleCart(): void { this.showCart.next(!this.showCart.value); } } diff --git a/src/assets/pay_success.mp3 b/src/assets/pay_success.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6b3df9d543ad1c34ed456a5c50e0d8e570d49710 GIT binary patch literal 34224 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 E11#*s2LJ#7 literal 0 HcmV?d00001