Browse Source

Feature/refactor public routes: pricing (#4931)

* Refactor public routes: pricing
pull/4932/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
74b51fe1dd
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      apps/client/src/app/app-routing.module.ts
  2. 4
      apps/client/src/app/app.component.ts
  3. 4
      apps/client/src/app/components/admin-settings/admin-settings.component.ts
  4. 4
      apps/client/src/app/components/header/header.component.ts
  5. 4
      apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts
  6. 4
      apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
  7. 2
      apps/client/src/app/core/auth.guard.ts
  8. 4
      apps/client/src/app/core/http-response.interceptor.ts
  9. 4
      apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts
  10. 4
      apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts
  11. 4
      apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.component.ts
  12. 4
      apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts
  13. 2
      apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts
  14. 2
      apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts
  15. 2
      apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts
  16. 2
      apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts
  17. 4
      apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
  18. 2
      apps/client/src/app/pages/faq/saas/saas-page.component.ts
  19. 4
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts
  20. 6
      libs/common/src/lib/routes/routes.ts
  21. 4
      libs/ui/src/lib/membership-card/membership-card.component.ts
  22. 4
      libs/ui/src/lib/premium-indicator/premium-indicator.component.ts

2
apps/client/src/app/app-routing.module.ts

@ -111,7 +111,7 @@ const routes: Routes = [
) )
}, },
{ {
path: ghostfolioRoutes.pricing, path: publicRoutes.pricing.path,
loadChildren: () => loadChildren: () =>
import('./pages/pricing/pricing-page.module').then( import('./pages/pricing/pricing-page.module').then(
(m) => m.PricingPageModule (m) => m.PricingPageModule

4
apps/client/src/app/app.component.ts

@ -83,7 +83,7 @@ export class AppComponent implements OnDestroy, OnInit {
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkMarkets = ['/' + routes.markets]; public routerLinkMarkets = ['/' + routes.markets];
public routerLinkOpenStartup = publicRoutes.openStartup.routerLink; public routerLinkOpenStartup = publicRoutes.openStartup.routerLink;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
public routerLinkRegister = publicRoutes.register.routerLink; public routerLinkRegister = publicRoutes.register.routerLink;
public routerLinkResources = ['/' + routes.resources]; public routerLinkResources = ['/' + routes.resources];
public showFooter = false; public showFooter = false;
@ -216,7 +216,7 @@ export class AppComponent implements OnDestroy, OnInit {
this.currentRoute === routes.markets || this.currentRoute === routes.markets ||
this.currentRoute === publicRoutes.openStartup.path || this.currentRoute === publicRoutes.openStartup.path ||
this.currentRoute === routes.public || this.currentRoute === routes.public ||
this.currentRoute === routes.pricing || this.currentRoute === publicRoutes.pricing.path ||
this.currentRoute === publicRoutes.register.path || this.currentRoute === publicRoutes.register.path ||
this.currentRoute === routes.start) && this.currentRoute === routes.start) &&
this.deviceType !== 'mobile'; this.deviceType !== 'mobile';

4
apps/client/src/app/components/admin-settings/admin-settings.component.ts

@ -10,7 +10,7 @@ import {
DataProviderInfo, DataProviderInfo,
User User
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
@ -72,7 +72,7 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
const languageCode = this.user.settings.language; const languageCode = this.user.settings.language;
this.pricingUrl = `https://ghostfol.io/${languageCode}/${routes.pricing}`; this.pricingUrl = `https://ghostfol.io/${languageCode}/${publicRoutes.pricing.path}`;
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
} }

4
apps/client/src/app/components/header/header.component.ts

@ -88,7 +88,7 @@ export class HeaderComponent implements OnChanges {
public routeAbout = routes.about; public routeAbout = routes.about;
public routeFeatures = publicRoutes.features.path; public routeFeatures = publicRoutes.features.path;
public routeMarkets = routes.markets; public routeMarkets = routes.markets;
public routePricing = routes.pricing; public routePricing = publicRoutes.pricing.path;
public routeResources = routes.resources; public routeResources = routes.resources;
public routerLinkAbout = ['/' + routes.about]; public routerLinkAbout = ['/' + routes.about];
public routerLinkAccount = internalRoutes.account.routerLink; public routerLinkAccount = internalRoutes.account.routerLink;
@ -97,7 +97,7 @@ export class HeaderComponent implements OnChanges {
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkMarkets = ['/' + routes.markets]; public routerLinkMarkets = ['/' + routes.markets];
public routerLinkPortfolio = internalRoutes.portfolio.routerLink; public routerLinkPortfolio = internalRoutes.portfolio.routerLink;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
public routerLinkRegister = publicRoutes.register.routerLink; public routerLinkRegister = publicRoutes.register.routerLink;
public routerLinkResources = ['/' + routes.resources]; public routerLinkResources = ['/' + routes.resources];
public routes = routes; public routes = routes;

4
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
@ -28,7 +28,7 @@ export class SubscriptionInterstitialDialog implements OnInit {
public remainingSkipButtonDelay = public remainingSkipButtonDelay =
SubscriptionInterstitialDialog.SKIP_BUTTON_DELAY_IN_SECONDS; SubscriptionInterstitialDialog.SKIP_BUTTON_DELAY_IN_SECONDS;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
public variantIndex: number; public variantIndex: number;
private unsubscribeSubject = new Subject<void>(); private unsubscribeSubject = new Subject<void>();

4
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts

@ -5,7 +5,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service';
import { getDateFormatString } from '@ghostfolio/common/helper'; import { getDateFormatString } from '@ghostfolio/common/helper';
import { User } from '@ghostfolio/common/interfaces'; import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
@ -37,7 +37,7 @@ export class UserAccountMembershipComponent implements OnDestroy {
public hasPermissionToUpdateUserSettings: boolean; public hasPermissionToUpdateUserSettings: boolean;
public price: number; public price: number;
public priceId: string; public priceId: string;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
public trySubscriptionMail = public trySubscriptionMail =
'mailto:hi@ghostfol.io?Subject=Ghostfolio Premium Trial&body=Hello%0D%0DI am interested in Ghostfolio Premium. Can you please send me a coupon code to try it for some time?%0D%0DKind regards'; 'mailto:hi@ghostfol.io?Subject=Ghostfolio Premium Trial&body=Hello%0D%0DI am interested in Ghostfolio Premium. Can you please send me a coupon code to try it for some time?%0D%0DKind regards';
public user: User; public user: User;

2
apps/client/src/app/core/auth.guard.ts

@ -26,7 +26,7 @@ export class AuthGuard {
`/${publicRoutes.features.path}`, `/${publicRoutes.features.path}`,
`/${routes.markets}`, `/${routes.markets}`,
`/${publicRoutes.openStartup.path}`, `/${publicRoutes.openStartup.path}`,
`/${routes.pricing}`, `/${publicRoutes.pricing.path}`,
`/${routes.public}`, `/${routes.public}`,
`/${publicRoutes.register.path}`, `/${publicRoutes.register.path}`,
`/${routes.resources}` `/${routes.resources}`

4
apps/client/src/app/core/http-response.interceptor.ts

@ -2,7 +2,7 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { InfoItem } from '@ghostfolio/common/interfaces'; import { InfoItem } from '@ghostfolio/common/interfaces';
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
import { import {
HTTP_INTERCEPTORS, HTTP_INTERCEPTORS,
@ -75,7 +75,7 @@ export class HttpResponseInterceptor implements HttpInterceptor {
}); });
this.snackBarRef.onAction().subscribe(() => { this.snackBarRef.onAction().subscribe(() => {
this.router.navigate(['/' + routes.pricing]); this.router.navigate(publicRoutes.pricing.routerLink);
}); });
} }
} else if (error.status === StatusCodes.INTERNAL_SERVER_ERROR) { } else if (error.status === StatusCodes.INTERNAL_SERVER_ERROR) {

4
apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
@ -12,6 +12,6 @@ import { RouterModule } from '@angular/router';
}) })
export class HalloGhostfolioPageComponent { export class HalloGhostfolioPageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
public routerLinkResources = ['/' + routes.resources]; public routerLinkResources = ['/' + routes.resources];
} }

4
apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
@ -12,6 +12,6 @@ import { RouterModule } from '@angular/router';
}) })
export class HelloGhostfolioPageComponent { export class HelloGhostfolioPageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
public routerLinkResources = ['/' + routes.resources]; public routerLinkResources = ['/' + routes.resources];
} }

4
apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
@ -12,5 +12,5 @@ import { RouterModule } from '@angular/router';
}) })
export class FirstMonthsInOpenSourcePageComponent { export class FirstMonthsInOpenSourcePageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
} }

4
apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
@ -13,5 +13,5 @@ import { RouterModule } from '@angular/router';
export class FiveHundredStarsOnGitHubPageComponent { export class FiveHundredStarsOnGitHubPageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkMarkets = ['/' + routes.markets]; public routerLinkMarkets = ['/' + routes.markets];
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
} }

2
apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts

@ -14,5 +14,5 @@ import { RouterModule } from '@angular/router';
export class BlackFriday2022PageComponent { export class BlackFriday2022PageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
} }

2
apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts

@ -13,5 +13,5 @@ import { RouterModule } from '@angular/router';
export class ThousandStarsOnGitHubPageComponent { export class ThousandStarsOnGitHubPageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
} }

2
apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts

@ -14,5 +14,5 @@ import { RouterModule } from '@angular/router';
export class BlackWeek2023PageComponent { export class BlackWeek2023PageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
} }

2
apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts

@ -14,5 +14,5 @@ import { RouterModule } from '@angular/router';
export class BlackWeeks2024PageComponent { export class BlackWeeks2024PageComponent {
public routerLinkBlog = ['/' + routes.blog]; public routerLinkBlog = ['/' + routes.blog];
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
} }

4
apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts

@ -1,6 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces'; import { User } from '@ghostfolio/common/interfaces';
import { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
import { Subject, takeUntil } from 'rxjs'; import { Subject, takeUntil } from 'rxjs';
@ -13,7 +13,7 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false standalone: false
}) })
export class FaqOverviewPageComponent implements OnDestroy { export class FaqOverviewPageComponent implements OnDestroy {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${routes.pricing}`; public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public user: User; public user: User;

2
apps/client/src/app/pages/faq/saas/saas-page.component.ts

@ -17,7 +17,7 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false standalone: false
}) })
export class SaasPageComponent implements OnDestroy { export class SaasPageComponent implements OnDestroy {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${routes.pricing}`; public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
public routerLinkAccount = internalRoutes.account.routerLink; public routerLinkAccount = internalRoutes.account.routerLink;
public routerLinkAccountMembership = [ public routerLinkAccountMembership = [
'/' + internalRoutes.account.path, '/' + internalRoutes.account.path,

4
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Component, OnDestroy } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@ -11,7 +11,7 @@ import { Subject } from 'rxjs';
standalone: false standalone: false
}) })
export class SelfHostingPageComponent implements OnDestroy { export class SelfHostingPageComponent implements OnDestroy {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${routes.pricing}`; public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
private unsubscribeSubject = new Subject<void>(); private unsubscribeSubject = new Subject<void>();

6
libs/common/src/lib/routes/routes.ts

@ -31,7 +31,6 @@ export const routes = {
license: $localize`:kebab-case:license`, license: $localize`:kebab-case:license`,
markets: $localize`:kebab-case:markets`, markets: $localize`:kebab-case:markets`,
openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to`, openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to`,
pricing: $localize`:kebab-case:pricing`,
privacyPolicy: $localize`:kebab-case:privacy-policy`, privacyPolicy: $localize`:kebab-case:privacy-policy`,
resources: $localize`:kebab-case:resources`, resources: $localize`:kebab-case:resources`,
selfHosting: $localize`:kebab-case:self-hosting`, selfHosting: $localize`:kebab-case:self-hosting`,
@ -141,6 +140,11 @@ export const publicRoutes = {
routerLink: ['/open'], routerLink: ['/open'],
title: 'Open Startup' title: 'Open Startup'
}, },
pricing: {
path: $localize`:kebab-case:pricing`,
routerLink: ['/' + $localize`:kebab-case:pricing`],
title: $localize`Pricing`
},
register: { register: {
path: $localize`:kebab-case:register`, path: $localize`:kebab-case:register`,
routerLink: ['/' + $localize`:kebab-case:register`], routerLink: ['/' + $localize`:kebab-case:register`],

4
libs/ui/src/lib/membership-card/membership-card.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { import {
@ -29,7 +29,7 @@ export class GfMembershipCardComponent {
@Output() generateApiKeyClicked = new EventEmitter<void>(); @Output() generateApiKeyClicked = new EventEmitter<void>();
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
public onGenerateApiKey(event: MouseEvent) { public onGenerateApiKey(event: MouseEvent) {
event.preventDefault(); event.preventDefault();

4
libs/ui/src/lib/premium-indicator/premium-indicator.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { import {
@ -20,5 +20,5 @@ import { RouterModule } from '@angular/router';
export class GfPremiumIndicatorComponent { export class GfPremiumIndicatorComponent {
@Input() enableLink = true; @Input() enableLink = true;
public routerLinkPricing = ['/' + routes.pricing]; public routerLinkPricing = publicRoutes.pricing.routerLink;
} }

Loading…
Cancel
Save