1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-06 00:13:28 +00:00

[PM-25633] - [Defect] Fix premium badge in totp (#16373)

* fixes to premium upgrade

* revert change to dialog

* handle premium upgrade prompt redirect in AC

* use new input/output api
This commit is contained in:
Jordan Aasen
2025-09-11 12:15:29 -07:00
committed by GitHub
parent 31d5b639e9
commit db9061d120
5 changed files with 21 additions and 7 deletions

View File

@@ -61,7 +61,7 @@
>
<b>{{ "premiumPurchase" | i18n }}</b>
</button>
<button type="button" bitDialogClose>{{ "close" | i18n }}</button>
<button type="button" data-dismiss="modal">{{ "close" | i18n }}</button>
<div class="right" *ngIf="!(isPremium$ | async)">
<button
#refreshBtn

View File

@@ -1033,6 +1033,12 @@ export class vNextVaultComponent implements OnInit, OnDestroy {
this.refresh();
}
// When the dialog is closed for a premium upgrade, return early as the user
// should be navigated to the subscription settings elsewhere
if (result === VaultItemDialogResult.PremiumUpgrade) {
return;
}
// Clear the query params when the dialog closes
await this.go({ cipherId: null, itemId: null, action: null });
}

View File

@@ -1,4 +1,4 @@
import { Component } from "@angular/core";
import { Component, input, output } from "@angular/core";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
@@ -8,16 +8,24 @@ import { BadgeModule } from "@bitwarden/components";
selector: "app-premium-badge",
standalone: true,
template: `
<button type="button" *appNotPremium bitBadge variant="success" (click)="premiumRequired()">
<button type="button" *appNotPremium bitBadge variant="success" (click)="promptForPremium()">
{{ "premium" | i18n }}
</button>
`,
imports: [BadgeModule, JslibModule],
})
export class PremiumBadgeComponent {
/** Skip sending the premiumRequired message (default: false). */
skipMessaging = input(false);
onClick = output();
constructor(private messagingService: MessagingService) {}
premiumRequired() {
async promptForPremium() {
this.onClick.emit();
if (this.skipMessaging()) {
return;
}
this.messagingService.send("premiumRequired");
}
}

View File

@@ -124,7 +124,7 @@
<bit-label [appTextDrag]="totpCodeCopyObj?.totpCode">
<div class="tw-flex tw-items-center tw-gap-3">
{{ "verificationCodeTotp" | i18n }}
<app-premium-badge></app-premium-badge>
<app-premium-badge [skipMessaging]="true" (onClick)="getPremium()"></app-premium-badge>
</div>
</bit-label>
<input

View File

@@ -107,8 +107,8 @@ export class LoginCredentialsViewComponent implements OnChanges {
}
}
async getPremium(organizationId?: string) {
await this.premiumUpgradeService.promptForPremium(organizationId);
async getPremium() {
await this.premiumUpgradeService.promptForPremium(this.cipher.organizationId);
}
async pwToggleValue(passwordVisible: boolean) {