From 93729d7ba9254c631ac60316807a97b889074306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Tue, 2 Jan 2018 10:11:17 -0300 Subject: [PATCH] [V4] Feature: collect email --- src/app/app.module.ts | 4 +- .../collect-email.html} | 0 .../collect-email.scss} | 2 +- .../onboarding/collect-email/collect-email.ts | 91 +++++++++++++++++++ src/pages/onboarding/email/email.ts | 70 -------------- src/pages/onboarding/tour/tour.ts | 4 +- 6 files changed, 96 insertions(+), 75 deletions(-) rename src/pages/onboarding/{email/email.html => collect-email/collect-email.html} (100%) rename src/pages/onboarding/{email/email.scss => collect-email/collect-email.scss} (89%) create mode 100644 src/pages/onboarding/collect-email/collect-email.ts delete mode 100644 src/pages/onboarding/email/email.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index cb64e6fcb..8025d18ac 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -37,7 +37,7 @@ import { BuyAndSellPage } from '../pages/buy-and-sell/buy-and-sell'; import { CreateWalletPage } from '../pages/add/create-wallet/create-wallet'; import { CopayersPage } from '../pages/add/copayers/copayers'; import { DisclaimerPage } from '../pages/onboarding/disclaimer/disclaimer'; -import { EmailPage } from '../pages/onboarding/email/email'; +import { CollectEmailPage } from '../pages/onboarding/collect-email/collect-email'; import { FeeWarningPage } from '../pages/send/fee-warning/fee-warning'; import { IncomingDataMenuPage } from '../pages/incoming-data-menu/incoming-data-menu'; import { ImportWalletPage } from '../pages/add/import-wallet/import-wallet'; @@ -241,7 +241,7 @@ let pages: any = [ CustomAmountPage, CopayApp, DisclaimerPage, - EmailPage, + CollectEmailPage, FeeWarningPage, GlideraPage, FingerprintModalPage, diff --git a/src/pages/onboarding/email/email.html b/src/pages/onboarding/collect-email/collect-email.html similarity index 100% rename from src/pages/onboarding/email/email.html rename to src/pages/onboarding/collect-email/collect-email.html diff --git a/src/pages/onboarding/email/email.scss b/src/pages/onboarding/collect-email/collect-email.scss similarity index 89% rename from src/pages/onboarding/email/email.scss rename to src/pages/onboarding/collect-email/collect-email.scss index f314c480e..1eb5d6fa1 100644 --- a/src/pages/onboarding/email/email.scss +++ b/src/pages/onboarding/collect-email/collect-email.scss @@ -1,4 +1,4 @@ -page-email { +page-collect-email { text-align: center; .toolbar-background{ background-color: transparent; diff --git a/src/pages/onboarding/collect-email/collect-email.ts b/src/pages/onboarding/collect-email/collect-email.ts new file mode 100644 index 000000000..fe9319428 --- /dev/null +++ b/src/pages/onboarding/collect-email/collect-email.ts @@ -0,0 +1,91 @@ +import { Component } from '@angular/core'; +import { NavController, NavParams } from 'ionic-angular'; +import { Validators, FormBuilder, FormGroup } from '@angular/forms'; +import { Logger } from '@nsalaun/ng-logger'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; + +//providers +import { AppProvider } from '../../../providers/app/app'; + +//pages +import { BackupRequestPage } from '../backup-request/backup-request'; +import { EmailNotificationsProvider } from '../../../providers/email-notifications/email-notifications'; + +@Component({ + selector: 'page-collect-email', + templateUrl: 'collect-email.html', +}) +export class CollectEmailPage { + public showConfirmForm: boolean; + + private walletId: string; + private emailForm: FormGroup; + private URL: string; + private accept: boolean; + + constructor( + private navCtrl: NavController, + private navParams: NavParams, + private logger: Logger, + private fb: FormBuilder, + private appProvider: AppProvider, + private http: HttpClient, + private emailProvider: EmailNotificationsProvider + ) { + this.walletId = this.navParams.data.walletId; + let regex: RegExp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; + this.emailForm = this.fb.group({ + email: [null, [Validators.required, Validators.pattern(regex)]], + accept: [true], + }); + this.showConfirmForm = false; + // Get more info: https://mashe.hawksey.info/2014/07/google-sheets-as-a-database-insert-with-apps-script-using-postget-methods-with-ajax-example/ + this.URL = "https://script.google.com/macros/s/AKfycbwQXvUw6-Ix0cRLMi7hBB8dlgNTCTgwfNIQRds6RypPV7dO8evW/exec"; + } + + ionViewDidLoad() { + this.logger.info('ionViewDidLoad CollectEmailPage'); + } + + public skip(): void { + this.goToBackupRequestPage() + } + + public showConfirm(): void { + this.showConfirmForm = !this.showConfirmForm; + } + + public save(): void { + + let opts = { + enabled: true, + email: this.emailForm.value.email + }; + this.emailProvider.updateEmail(opts); + + if (this.accept) this.collectEmail(); + this.goToBackupRequestPage(); + } + + private goToBackupRequestPage(): void { + this.navCtrl.push(BackupRequestPage, { walletId: this.walletId }); + } + + private collectEmail(): void { + const headers: any = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }); + const urlSearchParams = new HttpParams() + .set('App', this.appProvider.info.nameCase) + .set('Email', this.emailForm.value.email) + .set('Platform', 'ionic.Platform.platform()') //TODO ionic.Platform.platform() + .set('DeviceVersion', 'ionic.Platform.version()') //TODO ionic.Platform.version() + + this.http.post(this.URL, null, { + params: urlSearchParams, + headers: headers + }).subscribe(() => { + this.logger.info("SUCCESS: Email collected"); + }, (err) => { + this.logger.error("ERROR: Could not collect email"); + }); + }; +} diff --git a/src/pages/onboarding/email/email.ts b/src/pages/onboarding/email/email.ts deleted file mode 100644 index d3a86ea91..000000000 --- a/src/pages/onboarding/email/email.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Component } from '@angular/core'; -import { NavController, NavParams, ActionSheetController } from 'ionic-angular'; -import { Validators, FormBuilder, FormGroup } from '@angular/forms'; -import { Logger } from '@nsalaun/ng-logger'; - -import { BackupRequestPage } from '../backup-request/backup-request'; - -@Component({ - selector: 'page-email', - templateUrl: 'email.html', -}) -export class EmailPage { - public showConfirmForm: boolean; - - private walletId: string; - private emailForm: FormGroup; - - constructor( - private navCtrl: NavController, - private navParams: NavParams, - private actionSheet: ActionSheetController, - private logger: Logger, - private fb: FormBuilder - ) { - this.walletId = this.navParams.data.walletId; - let regex: RegExp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; - this.emailForm = this.fb.group({ - email: [null, [Validators.required, Validators.pattern(regex)]], - accept: [true], - }); - this.showConfirmForm = false; - } - - ngOnInit() { - }; - - ionViewDidLoad() { - this.logger.info('ionViewDidLoad EmailPage'); - } - - skip() { - this.navCtrl.push(BackupRequestPage, { walletId: this.walletId }); - } - - showActionSheet() { - let actionSheet = this.actionSheet.create({ - buttons: [ - { - text: 'Continue', - role: 'destructor', - handler: () => { - this.logger.debug('Continue clicked'); - } - } - ] - }); - actionSheet.present(); - } - - showConfirm() { - // TODO Fix form validation - if (!this.emailForm.value.email) return; - this.showConfirmForm = !this.showConfirmForm; - } - - save() { - // TODO SAVE EMAIL - this.navCtrl.push(BackupRequestPage, { walletId: this.walletId }); - } -} diff --git a/src/pages/onboarding/tour/tour.ts b/src/pages/onboarding/tour/tour.ts index cb19bdcd1..3e558a86a 100644 --- a/src/pages/onboarding/tour/tour.ts +++ b/src/pages/onboarding/tour/tour.ts @@ -2,7 +2,7 @@ import { Component, ViewChild } from '@angular/core'; import { NavController, LoadingController, Slides, Navbar } from 'ionic-angular'; import { Logger } from '@nsalaun/ng-logger'; -import { EmailPage } from '../email/email'; +import { CollectEmailPage } from '../collect-email/collect-email'; import { ProfileProvider } from '../../../providers/profile/profile'; @Component({ @@ -56,7 +56,7 @@ export class TourPage { this.profileProvider.createDefaultWallet().then((wallet) => { loading.dismiss(); - this.navCtrl.push(EmailPage, {walletId: wallet.id}); + this.navCtrl.push(CollectEmailPage, { walletId: wallet.id }); }) }