diff --git a/src/app/accounts/login.component.ts b/src/app/accounts/login.component.ts index 91167db8..94025c95 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 6294b088..fa1e3d3a 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 10cd4770..c9c2018e 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 aeac2ea9..feedd797 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 d5524bcd..2fcc447c 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." } }