[V4] Feature: collect email

This commit is contained in:
Gabriel Bazán 2018-01-02 10:11:17 -03:00
parent 06d9553107
commit 93729d7ba9
6 changed files with 96 additions and 75 deletions

View File

@ -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,

View File

@ -1,4 +1,4 @@
page-email {
page-collect-email {
text-align: center;
.toolbar-background{
background-color: transparent;

View File

@ -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");
});
};
}

View File

@ -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 });
}
}

View File

@ -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 });
})
}