diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts index 5059e7170..f81ddd710 100644 --- a/apps/api/src/app/info/info.service.ts +++ b/apps/api/src/app/info/info.service.ts @@ -101,7 +101,7 @@ export class InfoService { isUserSignupEnabled, platforms, statistics, - subscriptions + subscriptionOffers ] = await Promise.all([ this.benchmarkService.getBenchmarkAssetProfiles(), this.getDemoAuthToken(), @@ -110,7 +110,7 @@ export class InfoService { orderBy: { name: 'asc' } }), this.getStatistics(), - this.getSubscriptions() + this.getSubscriptionOffers() ]); if (isUserSignupEnabled) { @@ -125,7 +125,7 @@ export class InfoService { isReadOnlyMode, platforms, statistics, - subscriptions, + subscriptionOffers, baseCurrency: DEFAULT_CURRENCY, currencies: this.exchangeRateDataService.getCurrencies() }; @@ -314,7 +314,7 @@ export class InfoService { return statistics; } - private async getSubscriptions(): Promise<{ + private async getSubscriptionOffers(): Promise<{ [offer in SubscriptionOfferKey]: SubscriptionOffer; }> { if (!this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 7e0958c23..86d4282a2 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -138,8 +138,8 @@ export class AppComponent implements OnDestroy, OnInit { ); this.hasPromotion = - !!this.info?.subscriptions?.default?.coupon || - !!this.info?.subscriptions?.default?.durationExtension; + !!this.info?.subscriptionOffers?.default?.coupon || + !!this.info?.subscriptionOffers?.default?.durationExtension; this.impersonationStorageService .onChangeHasImpersonation() @@ -237,10 +237,10 @@ export class AppComponent implements OnDestroy, OnInit { this.canCreateAccount || !!this.user?.systemMessage; this.hasPromotion = - !!this.info?.subscriptions?.[ + !!this.info?.subscriptionOffers?.[ this.user?.subscription?.offer ?? 'default' ]?.coupon || - !!this.info?.subscriptions?.[ + !!this.info?.subscriptionOffers?.[ this.user?.subscription?.offer ?? 'default' ]?.durationExtension; 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 93bbe641c..bde555d8e 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 @@ -16,6 +16,7 @@ import { MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar'; +import { StringValue } from 'ms'; import { StripeService } from 'ngx-stripe'; import { EMPTY, Subject } from 'rxjs'; import { catchError, switchMap, takeUntil } from 'rxjs/operators'; @@ -31,6 +32,7 @@ export class UserAccountMembershipComponent implements OnDestroy { public coupon: number; public couponId: string; public defaultDateFormat: string; + public durationExtension: StringValue; public hasPermissionForSubscription: boolean; public hasPermissionToUpdateUserSettings: boolean; public price: number; @@ -51,7 +53,7 @@ export class UserAccountMembershipComponent implements OnDestroy { private stripeService: StripeService, private userService: UserService ) { - const { baseCurrency, globalPermissions, subscriptions } = + const { baseCurrency, globalPermissions, subscriptionOffers } = this.dataService.fetchInfo(); this.baseCurrency = baseCurrency; @@ -76,11 +78,18 @@ export class UserAccountMembershipComponent implements OnDestroy { permissions.updateUserSettings ); - this.coupon = subscriptions?.[this.user.subscription.offer]?.coupon; + this.coupon = + subscriptionOffers?.[this.user.subscription.offer]?.coupon; this.couponId = - subscriptions?.[this.user.subscription.offer]?.couponId; - this.price = subscriptions?.[this.user.subscription.offer]?.price; - this.priceId = subscriptions?.[this.user.subscription.offer]?.priceId; + subscriptionOffers?.[this.user.subscription.offer]?.couponId; + this.durationExtension = + subscriptionOffers?.[ + this.user.subscription.offer + ]?.durationExtension; + this.price = + subscriptionOffers?.[this.user.subscription.offer]?.price; + this.priceId = + subscriptionOffers?.[this.user.subscription.offer]?.priceId; this.changeDetectorRef.markForCheck(); } diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.html b/apps/client/src/app/components/user-account-membership/user-account-membership.html index d30ce7bdd..9bcf0faa2 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.html +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -34,6 +34,14 @@ per year } + @if (durationExtension) { +