diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a1111aa3..f0cfcbadc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved support for automatic deletion of unused asset profiles when deleting activities +- Migrated the coupon redemption to the notification service for prompt dialogs - Improved the language localization for German (`de`) - Eliminated `body-parser` in favor of using `@nestjs/platform-express` - Upgraded the _Stripe_ dependencies diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts index d6f85f053..6139d173e 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -164,50 +164,54 @@ export class UserAccountMembershipComponent implements OnDestroy { } public onRedeemCoupon() { - let couponCode = prompt($localize`Please enter your coupon code:`); - couponCode = couponCode?.trim(); - - if (couponCode) { - this.dataService - .redeemCoupon(couponCode) - .pipe( - catchError(() => { - this.snackBar.open( - '😞 ' + $localize`Could not redeem coupon code`, - undefined, - { - duration: ms('3 seconds') - } - ); - - return EMPTY; - }), - takeUntil(this.unsubscribeSubject) - ) - .subscribe(() => { - this.snackBarRef = this.snackBar.open( - '✅ ' + $localize`Coupon code has been redeemed`, - $localize`Reload`, - { - duration: 3000 - } - ); - - this.snackBarRef - .afterDismissed() - .pipe(takeUntil(this.unsubscribeSubject)) + this.notificationService.prompt({ + confirmFn: (value) => { + const couponCode = value?.trim(); + + if (couponCode) { + this.dataService + .redeemCoupon(couponCode) + .pipe( + catchError(() => { + this.snackBar.open( + '😞 ' + $localize`Could not redeem coupon code`, + undefined, + { + duration: ms('3 seconds') + } + ); + + return EMPTY; + }), + takeUntil(this.unsubscribeSubject) + ) .subscribe(() => { - window.location.reload(); - }); + this.snackBarRef = this.snackBar.open( + '✅ ' + $localize`Coupon code has been redeemed`, + $localize`Reload`, + { + duration: 3000 + } + ); - this.snackBarRef - .onAction() - .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe(() => { - window.location.reload(); + this.snackBarRef + .afterDismissed() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + window.location.reload(); + }); + + this.snackBarRef + .onAction() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + window.location.reload(); + }); }); - }); - } + } + }, + title: $localize`Please enter your coupon code.` + }); } public ngOnDestroy() {