mirror of
https://github.com/bitwarden/browser
synced 2026-02-11 22:13:32 +00:00
fix(billing): prevents multiple upgrade dialogs from opening
Adds a check to prevent multiple upgrade dialogs from opening simultaneously. Ensures correct redirection to the organization vault after upgrading to Teams or Enterprise.
This commit is contained in:
@@ -31,6 +31,7 @@ import {
|
||||
BusinessSubscriptionPricingTierId,
|
||||
PersonalSubscriptionPricingTier,
|
||||
PersonalSubscriptionPricingTierId,
|
||||
PersonalSubscriptionPricingTierIds,
|
||||
} from "@bitwarden/common/billing/types/subscription-pricing-tier";
|
||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
import { UnionOfValues } from "@bitwarden/common/vault/types/union-of-values";
|
||||
@@ -192,6 +193,14 @@ export class PremiumOrgUpgradePaymentComponent implements OnInit, AfterViewInit
|
||||
) {}
|
||||
|
||||
async ngOnInit(): Promise<void> {
|
||||
// If the selected plan is Personal Premium, no upgrade is needed
|
||||
if (this.selectedPlanId() == PersonalSubscriptionPricingTierIds.Premium) {
|
||||
this.complete.emit({
|
||||
status: PremiumOrgUpgradePaymentStatus.Closed,
|
||||
organizationId: null,
|
||||
});
|
||||
}
|
||||
|
||||
combineLatest([
|
||||
this.subscriptionPricingService.getPersonalSubscriptionPricingTiers$(),
|
||||
this.subscriptionPricingService.getBusinessSubscriptionPricingTiers$(),
|
||||
|
||||
@@ -85,6 +85,11 @@ export class UnifiedUpgradePromptService {
|
||||
* @returns A promise that resolves to the dialog result if shown, or null if not shown
|
||||
*/
|
||||
async displayUpgradePromptConditionally(): Promise<UnifiedUpgradeDialogResult | null> {
|
||||
// Prevent opening multiple dialogs if one is already open
|
||||
if (this.unifiedUpgradeDialogRef) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const shouldShow = await firstValueFrom(this.shouldShowPrompt$);
|
||||
|
||||
if (shouldShow) {
|
||||
|
||||
@@ -248,10 +248,14 @@ export class UnifiedUpgradeDialogComponent implements OnInit {
|
||||
if (
|
||||
this.params.redirectOnCompletion &&
|
||||
(status === UnifiedUpgradeDialogStatus.UpgradedToPremium ||
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToFamilies)
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToFamilies ||
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToEnterprise ||
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToTeams)
|
||||
) {
|
||||
const redirectUrl =
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToFamilies
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToFamilies ||
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToEnterprise ||
|
||||
status === UnifiedUpgradeDialogStatus.UpgradedToTeams
|
||||
? `/organizations/${result.organizationId}/vault`
|
||||
: "/settings/subscription/user-subscription";
|
||||
await this.router.navigate([redirectUrl]);
|
||||
|
||||
Reference in New Issue
Block a user