From b99df5905f6c85f5d34c599e48ab94f33914d134 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 20 Jul 2018 10:29:40 -0400 Subject: [PATCH] handle redirect params for create org/premium --- src/app/accounts/login.component.ts | 14 +++++++++++- src/app/accounts/register.component.html | 3 +++ src/app/accounts/register.component.ts | 9 ++++++++ src/app/accounts/two-factor.component.ts | 8 ++++++- .../settings/create-organization.component.ts | 22 ++++++++++++++----- src/locales/en/messages.json | 6 +++++ 6 files changed, 54 insertions(+), 8 deletions(-) diff --git a/src/app/accounts/login.component.ts b/src/app/accounts/login.component.ts index 91167db8c4..94025c9515 100644 --- a/src/app/accounts/login.component.ts +++ b/src/app/accounts/login.component.ts @@ -32,6 +32,12 @@ export class LoginComponent extends BaseLoginComponent { if (qParams.email != null && qParams.email.indexOf('@') > -1) { this.email = qParams.email; } + if (qParams.premium != null) { + this.stateService.save('loginRedirect', { route: '/settings/premium' }); + } else if (qParams.org != null) { + this.stateService.save('loginRedirect', + { route: '/settings/create-organization', qParams: { plan: qParams.org } }); + } await super.ngOnInit(); }); } @@ -41,7 +47,13 @@ export class LoginComponent extends BaseLoginComponent { if (invite != null) { this.router.navigate(['accept-organization'], { queryParams: invite }); } else { - this.router.navigate([this.successRoute]); + const loginRedirect = await this.stateService.get('loginRedirect'); + if (loginRedirect != null) { + this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams }); + await this.stateService.remove('loginRedirect'); + } else { + this.router.navigate([this.successRoute]); + } } } } diff --git a/src/app/accounts/register.component.html b/src/app/accounts/register.component.html index 6294b08863..fa1e3d3aac 100644 --- a/src/app/accounts/register.component.html +++ b/src/app/accounts/register.component.html @@ -4,6 +4,9 @@

{{'createAccount' | i18n}}

+ + {{'createOrganizationCreatePersonalAccount' | i18n}} +
-1) { this.email = qParams.email; } + if (qParams.premium != null) { + this.stateService.save('loginRedirect', { route: '/settings/premium' }); + } else if (qParams.org != null) { + this.showCreateOrgMessage = true; + this.stateService.save('loginRedirect', + { route: '/settings/create-organization', qParams: { plan: qParams.org } }); + } }); } } diff --git a/src/app/accounts/two-factor.component.ts b/src/app/accounts/two-factor.component.ts index 10cd47709d..c9c2018e2a 100644 --- a/src/app/accounts/two-factor.component.ts +++ b/src/app/accounts/two-factor.component.ts @@ -63,7 +63,13 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { if (invite != null) { this.router.navigate(['accept-organization'], { queryParams: invite }); } else { - this.router.navigate([this.successRoute]); + const loginRedirect = await this.stateService.get('loginRedirect'); + if (loginRedirect != null) { + this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams }); + await this.stateService.remove('loginRedirect'); + } else { + this.router.navigate([this.successRoute]); + } } } } diff --git a/src/app/settings/create-organization.component.ts b/src/app/settings/create-organization.component.ts index aeac2ea956..feedd7979f 100644 --- a/src/app/settings/create-organization.component.ts +++ b/src/app/settings/create-organization.component.ts @@ -1,11 +1,12 @@ import { Component, - EventEmitter, - Output, + OnInit, ViewChild, } from '@angular/core'; - -import { Router } from '@angular/router'; +import { + ActivatedRoute, + Router, +} from '@angular/router'; import { ToasterService } from 'angular2-toaster'; import { Angulartics2 } from 'angulartics2'; @@ -25,7 +26,7 @@ import { OrganizationCreateRequest } from 'jslib/models/request/organizationCrea selector: 'app-create-organization', templateUrl: 'create-organization.component.html', }) -export class CreateOrganizationComponent { +export class CreateOrganizationComponent implements OnInit { @ViewChild(PaymentComponent) paymentComponent: PaymentComponent; selfHosted = false; @@ -83,10 +84,19 @@ export class CreateOrganizationComponent { constructor(private apiService: ApiService, private i18nService: I18nService, private analytics: Angulartics2, private toasterService: ToasterService, platformUtilsService: PlatformUtilsService, private cryptoService: CryptoService, - private router: Router, private syncService: SyncService) { + private router: Router, private syncService: SyncService, + private route: ActivatedRoute) { this.selfHosted = platformUtilsService.isSelfHost(); } + ngOnInit() { + this.route.queryParams.subscribe(async (qParams) => { + if (qParams.plan === 'families' || qParams.plan === 'teams' || qParams.plan === 'enterprise') { + this.plan = qParams.plan; + } + }); + } + async submit() { let files: FileList = null; if (this.selfHosted) { diff --git a/src/locales/en/messages.json b/src/locales/en/messages.json index d5524bcd13..2fcc447c52 100644 --- a/src/locales/en/messages.json +++ b/src/locales/en/messages.json @@ -2325,5 +2325,11 @@ }, "upgradeOrganizationDesc": { "message": "This feature is not available for free organizations. Switch to a paid plan to unlock more features." + }, + "createOrganizationStep1": { + "message": "Create Organization: Step 1" + }, + "createOrganizationCreatePersonalAccount": { + "message": "Before creating your organization, you first need to create a free personal account." } }