diff --git a/apps/api/src/app/sitemap/sitemap.controller.ts b/apps/api/src/app/sitemap/sitemap.controller.ts index 7975573d1..ea21906ef 100644 --- a/apps/api/src/app/sitemap/sitemap.controller.ts +++ b/apps/api/src/app/sitemap/sitemap.controller.ts @@ -1,8 +1,10 @@ +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DATE_FORMAT, getYesterday, interpolate } from '@ghostfolio/common/helper'; +import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; import { Controller, Get, Res, VERSION_NEUTRAL, Version } from '@nestjs/common'; import { format } from 'date-fns'; @@ -14,7 +16,9 @@ import * as path from 'path'; export class SitemapController { public sitemapXml = ''; - public constructor() { + public constructor( + private readonly configurationService: ConfigurationService + ) { try { this.sitemapXml = fs.readFileSync( path.join(__dirname, 'assets', 'sitemap.xml'), @@ -25,11 +29,51 @@ export class SitemapController { @Get() @Version(VERSION_NEUTRAL) - public async flushCache(@Res() response: Response): Promise { + public async getSitemapXml(@Res() response: Response): Promise { + const currentDate = format(getYesterday(), DATE_FORMAT); + response.setHeader('content-type', 'application/xml'); response.send( interpolate(this.sitemapXml, { - currentDate: format(getYesterday(), DATE_FORMAT) + currentDate, + personalFinanceTools: this.configurationService.get( + 'ENABLE_FEATURE_SUBSCRIPTION' + ) + ? personalFinanceTools + .map(({ alias, key }) => { + return [ + '', + ` https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/es/recursos/personal-finance-tools/alternativa-de-software-libre-a-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/fr/ressources/personal-finance-tools/alternative-open-source-a-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/pt/recursos/personal-finance-tools/alternativa-de-software-livre-ao-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '' + ].join('\n'); + }) + .join('\n') + : '' }) ); } diff --git a/apps/api/src/app/sitemap/sitemap.module.ts b/apps/api/src/app/sitemap/sitemap.module.ts index e04e3f6b3..d1059d408 100644 --- a/apps/api/src/app/sitemap/sitemap.module.ts +++ b/apps/api/src/app/sitemap/sitemap.module.ts @@ -1,8 +1,11 @@ +import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; + import { Module } from '@nestjs/common'; import { SitemapController } from './sitemap.controller'; @Module({ - controllers: [SitemapController] + controllers: [SitemapController], + imports: [ConfigurationModule] }) export class SitemapModule {} diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 1f13b93e6..7510b180e 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -54,230 +54,6 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools ${currentDate}T00:00:00+00:00 - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-8figures - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-allinvestview - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-allvue-systems - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-altoo - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-basil-finance - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-beanvest - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-capitally - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-capmon - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-compound-planning - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-copilot-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-de.fi - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-delta - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-divvydiary - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-empower - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-exirio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-fina - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-finary - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-finwise - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-folishare - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-getquin - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-gospatz - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-intuit-mint - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-justetf - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-koyfin - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-kubera - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-magnifi - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-markets.sh - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-maybe-finance - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-monarch-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-monse - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-navexa - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-parqet - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-plannix - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-portfolio-dividend-tracker - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-portfolio-visualizer - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-portseido - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-projectionlab - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-rocket-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-seeking-alpha - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-sharesight - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-simple-portfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-snowball-analytics - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-stock-events - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-stockle - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-stockmarketeye - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-stonksfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-sumio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-tiller - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-utluna - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-vyzer - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-wallmine - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-wealthfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-wealthica - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-whal - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-yeekatee - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-ynab - ${currentDate}T00:00:00+00:00 - https://ghostfol.io/de/ueber-uns ${currentDate}T00:00:00+00:00 @@ -433,937 +209,277 @@ ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-8figures - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-allinvestview + https://ghostfol.io/es ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-allvue-systems + https://ghostfol.io/es/funcionalidades ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-altoo + https://ghostfol.io/es/mercados + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-basil-finance + https://ghostfol.io/es/open + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-beanvest + https://ghostfol.io/es/precios ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-capitally + https://ghostfol.io/es/preguntas-mas-frecuentes ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-capmon + https://ghostfol.io/es/recursos ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-compound-planning + https://ghostfol.io/es/recursos/personal-finance-tools ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-copilot-money + https://ghostfol.io/es/registro ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-de.fi + https://ghostfol.io/es/sobre ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-delta + https://ghostfol.io/es/sobre/changelog ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-divvydiary + https://ghostfol.io/es/sobre/licencia ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-empower + https://ghostfol.io/es/sobre/oss-friends ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-exirio + https://ghostfol.io/es/sobre/politica-de-privacidad ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-fina + https://ghostfol.io/fr ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-finary + https://ghostfol.io/fr/a-propos ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-finwise + https://ghostfol.io/fr/a-propos/changelog ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-folishare + https://ghostfol.io/fr/a-propos/licence ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-getquin + https://ghostfol.io/fr/a-propos/oss-friends ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-gospatz + https://ghostfol.io/fr/a-propos/politique-de-confidentialite ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-intuit-mint + https://ghostfol.io/fr/enregistrement ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-justetf + https://ghostfol.io/fr/fonctionnalites ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-koyfin + https://ghostfol.io/fr/foire-aux-questions ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-kubera + https://ghostfol.io/fr/marches + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-magnifi + https://ghostfol.io/fr/open + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-markets.sh + https://ghostfol.io/fr/prix ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-maybe-finance + https://ghostfol.io/fr/ressources ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-monarch-money + https://ghostfol.io/fr/ressources/personal-finance-tools ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-monse + https://ghostfol.io/it ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-navexa + https://ghostfol.io/it/domande-piu-frequenti ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-parqet + https://ghostfol.io/it/funzionalita ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-plannix + https://ghostfol.io/it/informazioni-su ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-portfolio-dividend-tracker + https://ghostfol.io/it/informazioni-su/changelog ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-portfolio-visualizer + https://ghostfol.io/it/informazioni-su/informativa-sulla-privacy ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-portseido + https://ghostfol.io/it/informazioni-su/licenza ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-projectionlab + https://ghostfol.io/it/informazioni-su/oss-friends ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-rocket-money + https://ghostfol.io/it/iscrizione ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-seeking-alpha + https://ghostfol.io/it/mercati + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-sharesight + https://ghostfol.io/it/open + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-simple-portfolio + https://ghostfol.io/it/prezzi ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-snowball-analytics + https://ghostfol.io/it/risorse ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-stock-events + https://ghostfol.io/it/risorse/personal-finance-tools ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-stockle + https://ghostfol.io/nl ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-stockmarketeye + https://ghostfol.io/nl/bronnen ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-stonksfolio + https://ghostfol.io/nl/bronnen/personal-finance-tools ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-sumio + https://ghostfol.io/nl/functionaliteiten ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-tiller + https://ghostfol.io/nl/markten + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-utluna + https://ghostfol.io/nl/open + daily ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-vyzer + https://ghostfol.io/nl/over ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-wallmine + https://ghostfol.io/nl/over/changelog ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-wealthfolio + https://ghostfol.io/nl/over/licentie ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-wealthica + https://ghostfol.io/nl/over/oss-friends ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-whal + https://ghostfol.io/nl/over/privacybeleid ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-yeekatee + https://ghostfol.io/nl/prijzen ${currentDate}T00:00:00+00:00 - https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-ynab + https://ghostfol.io/nl/registratie ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es + https://ghostfol.io/nl/veelgestelde-vragen ${currentDate}T00:00:00+00:00 + - https://ghostfol.io/es/mercados - daily + https://ghostfol.io/pt ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/open - daily + https://ghostfol.io/pt/blog ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/precios + https://ghostfol.io/pt/funcionalidades ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/preguntas-mas-frecuentes + https://ghostfol.io/pt/mercados ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/recursos + https://ghostfol.io/pt/open ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/registro + https://ghostfol.io/pt/perguntas-mais-frequentes ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/sobre + https://ghostfol.io/pt/precos ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/sobre/changelog + https://ghostfol.io/pt/recursos ${currentDate}T00:00:00+00:00 - https://ghostfol.io/es/sobre/licencia - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/es/sobre/oss-friends - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/es/sobre/politica-de-privacidad - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/a-propos - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/a-propos/changelog - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/a-propos/licence - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/a-propos/oss-friends - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/a-propos/politique-de-confidentialite - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/enregistrement - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/fonctionnalites - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/foire-aux-questions - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/marches - daily - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/open - daily - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/prix - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/fr/ressources - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/domande-piu-frequenti - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/funzionalita - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/informazioni-su - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/informazioni-su/changelog - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/informazioni-su/informativa-sulla-privacy - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/informazioni-su/licenza - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/informazioni-su/oss-friends - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/iscrizione - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/mercati - daily - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/open - daily - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/prezzi - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-8figures - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-allinvestview - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-allvue-systems - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-altoo - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-basil-finance - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-beanvest - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-capitally - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-capmon - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-compound-planning - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-copilot-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-de.fi - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-delta - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-divvydiary - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-empower - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-exirio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-fina - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-finary - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-finwise - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-folishare - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-getquin - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-gospatz - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-intuit-mint - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-justetf - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-koyfin - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-kubera - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-magnifi - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-markets.sh - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-maybe-finance - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-monarch-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-monse - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-navexa - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-parqet - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-plannix - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-portfolio-dividend-tracker - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-portfolio-visualizer - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-portseido - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-projectionlab - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-rocket-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-seeking-alpha - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-sharesight - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-simple-portfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-snowball-analytics - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-stock-events - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-stockle - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-stockmarketeye - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-stonksfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-sumio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-tiller - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-utluna - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-vyzer - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-wallmine - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-wealthfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-wealthica - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-whal - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-yeekatee - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-ynab - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-8figures - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-allinvestview - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-allvue-systems - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-altoo - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-basil-finance - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-beanvest - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-capitally - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-capmon - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-compound-planning - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-copilot-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-de.fi - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-delta - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-divvydiary - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-empower - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-exirio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-fina - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-finary - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-finwise - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-folishare - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-getquin - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-gospatz - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-intuit-mint - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-justetf - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-koyfin - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-kubera - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-magnifi - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-markets.sh - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-maybe-finance - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-monarch-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-monse - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-navexa - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-parqet - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-plannix - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-portfolio-dividend-tracker - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-portfolio-visualizer - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-portseido - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-projectionlab - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-rocket-money - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-seeking-alpha - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-sharesight - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-simple-portfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-snowball-analytics - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-stock-events - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-stockle - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-stockmarketeye - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-stonksfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-sumio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-tiller - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-utluna - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-vyzer - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-wallmine - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-wealthfolio - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-wealthica - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-whal - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-yeekatee - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-ynab - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/functionaliteiten - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/markten - daily - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/open - daily - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/over - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/over/changelog - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/over/licentie - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/over/oss-friends - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/over/privacybeleid - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/prijzen - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/registratie - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/nl/veelgestelde-vragen - ${currentDate}T00:00:00+00:00 - - - - https://ghostfol.io/pt - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/pt/blog - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/pt/funcionalidades - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/pt/mercados - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/pt/open - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/pt/perguntas-mais-frequentes - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/pt/precos - ${currentDate}T00:00:00+00:00 - - - https://ghostfol.io/pt/recursos + https://ghostfol.io/pt/recursos/personal-finance-tools ${currentDate}T00:00:00+00:00 @@ -1400,4 +516,5 @@ ${currentDate}T00:00:00+00:00 --> + ${personalFinanceTools} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts index 548ffc1fa..01d920460 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts @@ -1,10 +1,10 @@ import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { PersonalFinanceToolsPageComponent } from './personal-finance-tools-page.component'; -import { products } from './products'; const routes: Routes = [ { @@ -13,19 +13,20 @@ const routes: Routes = [ path: '', title: $localize`Personal Finance Tools` }, - ...products - .filter(({ key }) => { - return key !== 'ghostfolio'; - }) - .map(({ alias, component, key, name }) => { - return { - canActivate: [AuthGuard], - path: $localize`open-source-alternative-to` + `-${alias ?? key}`, - loadComponent: () => - import(`./products/${key}-page.component`).then(() => component), - title: $localize`Open Source Alternative to ${name}` - }; - }) + ...personalFinanceTools.map(({ alias, key, name }) => { + return { + canActivate: [AuthGuard], + data: { key }, + loadComponent: () => + import('./product-page.component').then( + ({ GfProductPageComponent }) => { + return GfProductPageComponent; + } + ), + path: $localize`open-source-alternative-to` + `-${alias ?? key}`, + title: $localize`Open Source Alternative to ${name}` + }; + }) ]; @NgModule({ diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts index 173b5426f..596ac310e 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts @@ -1,8 +1,8 @@ +import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; + import { Component, OnDestroy } from '@angular/core'; import { Subject } from 'rxjs'; -import { products } from './products'; - @Component({ host: { class: 'page' }, selector: 'gf-personal-finance-tools-page', @@ -12,13 +12,9 @@ import { products } from './products'; export class PersonalFinanceToolsPageComponent implements OnDestroy { public pathAlternativeTo = $localize`open-source-alternative-to` + '-'; public pathResources = '/' + $localize`resources`; - public products = products - .filter(({ key }) => { - return key !== 'ghostfolio'; - }) - .sort((a, b) => { - return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }); - }); + public personalFinanceTools = personalFinanceTools.sort((a, b) => { + return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }); + }); public routerLinkAbout = ['/' + $localize`about`]; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html index ec224ae6c..90b7b3ad1 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html @@ -18,25 +18,29 @@ with Ghostfolio.

- @for (product of products; track product) { + @for ( + personalFinanceTool of personalFinanceTools; + track personalFinanceTool + ) {
- Open Source Alternative to {{ product.name }} + Open Source Alternative to {{ personalFinanceTool.name }}
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts new file mode 100644 index 000000000..3004a3ec4 --- /dev/null +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -0,0 +1,68 @@ +import { DataService } from '@ghostfolio/client/services/data.service'; +import { Product } from '@ghostfolio/common/interfaces'; +import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; + +import { CommonModule } from '@angular/common'; +import { Component, OnInit } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { ActivatedRoute, RouterModule } from '@angular/router'; + +@Component({ + host: { class: 'page' }, + imports: [CommonModule, MatButtonModule, RouterModule], + selector: 'gf-product-page', + standalone: true, + styleUrls: ['./product-page.scss'], + templateUrl: './product-page.html' +}) +export class GfProductPageComponent implements OnInit { + public key: string; + public price: number; + public product1: Product; + public product2: Product; + public routerLinkAbout = ['/' + $localize`about`]; + public routerLinkFeatures = ['/' + $localize`features`]; + public routerLinkResourcesPersonalFinanceTools = [ + '/' + $localize`resources`, + 'personal-finance-tools' + ]; + + public constructor( + private dataService: DataService, + private route: ActivatedRoute + ) {} + + public ngOnInit() { + const { subscriptions } = this.dataService.fetchInfo(); + + this.price = subscriptions?.default?.price; + + this.product1 = { + founded: 2021, + hasFreePlan: true, + hasSelfHostingAbility: true, + isOpenSource: true, + key: 'ghostfolio', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Nederlands', + 'Português', + 'Türkçe', + '简体中文' + ], + name: 'Ghostfolio', + origin: $localize`Switzerland`, + region: $localize`Global`, + slogan: 'Open Source Wealth Management', + useAnonymously: true + }; + + this.product2 = personalFinanceTools.find(({ key }) => { + return key === this.route.snapshot.data['key']; + }); + } +} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html similarity index 100% rename from apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html rename to apps/client/src/app/pages/resources/personal-finance-tools/product-page.html diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.scss b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.scss similarity index 100% rename from apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.scss rename to apps/client/src/app/pages/resources/personal-finance-tools/product-page.scss diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/allinvestview-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/allinvestview-page.component.ts deleted file mode 100644 index d946883f2..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/allinvestview-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-allinvestview-systems-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class AllInvestViewPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'allinvestview'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/allvue-systems-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/allvue-systems-page.component.ts deleted file mode 100644 index 399abe975..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/allvue-systems-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-allvue-systems-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class AllvueSystemsPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'allvue-systems'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts deleted file mode 100644 index 1d1164e79..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-altoo-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class AltooPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'altoo'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/base-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/base-page.component.ts deleted file mode 100644 index 840a40e3e..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/base-page.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { DataService } from '@ghostfolio/client/services/data.service'; - -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'gf-base-product-page', - template: '' -}) -export class BaseProductPageComponent implements OnInit { - public price: number; - - public constructor(private dataService: DataService) {} - - public ngOnInit() { - const { subscriptions } = this.dataService.fetchInfo(); - - this.price = subscriptions?.default?.price; - } -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/basil-finance-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/basil-finance-page.component.ts deleted file mode 100644 index 1712f0013..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/basil-finance-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-basil-finance-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class BasilFinancePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'basil-finance'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/beanvest-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/beanvest-page.component.ts deleted file mode 100644 index 26b3b7fa3..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/beanvest-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-beanvest-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class BeanvestPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'beanvest'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/capitally-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/capitally-page.component.ts deleted file mode 100644 index 37501d4f0..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/capitally-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-capitally-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class CapitallyPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'capitally'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/capmon-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/capmon-page.component.ts deleted file mode 100644 index d021e2078..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/capmon-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-capmon-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class CapMonPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'capmon'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/compound-planning-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/compound-planning-page.component.ts deleted file mode 100644 index 0d455e127..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/compound-planning-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-compound-planning-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class CompoundPlanningPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'compound-planning'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/copilot-money-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/copilot-money-page.component.ts deleted file mode 100644 index f1c05855f..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/copilot-money-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-copilot-money-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class CopilotMoneyPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'copilot-money'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/de.fi-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/de.fi-page.component.ts deleted file mode 100644 index b2a0d62ec..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/de.fi-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-de-fi-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class DeFiPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'de.fi'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/delta-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/delta-page.component.ts deleted file mode 100644 index fe11152d3..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/delta-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-delta-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class DeltaPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'delta'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/divvydiary-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/divvydiary-page.component.ts deleted file mode 100644 index e128650de..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/divvydiary-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-divvy-diary-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class DivvyDiaryPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'divvydiary'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts deleted file mode 100644 index 933e1ac4b..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/eightfigures-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-eightfigures-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class EightFiguresPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'eightfigures'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/empower-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/empower-page.component.ts deleted file mode 100644 index ea02c8b17..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/empower-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-empower-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class EmpowerPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'empower'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/exirio-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/exirio-page.component.ts deleted file mode 100644 index 7844350df..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/exirio-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-exirio-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class ExirioPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'exirio'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/fina-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/fina-page.component.ts deleted file mode 100644 index 328d9896e..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/fina-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-fina-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class FinaPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'fina'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/finary-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/finary-page.component.ts deleted file mode 100644 index 4e64d8c8f..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/finary-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-finary-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class FinaryPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'finary'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/finwise-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/finwise-page.component.ts deleted file mode 100644 index 70f46d132..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/finwise-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-finwise-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class FinWisePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'finwise'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/folishare-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/folishare-page.component.ts deleted file mode 100644 index dfddfc2a0..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/folishare-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-folishare-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class FolisharePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'folishare'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/getquin-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/getquin-page.component.ts deleted file mode 100644 index 86ae168b6..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/getquin-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-getquin-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class GetquinPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'getquin'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/gospatz-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/gospatz-page.component.ts deleted file mode 100644 index 8bb604b11..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/gospatz-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-gospatz-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class GoSpatzPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'gospatz'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/intuit-mint-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/intuit-mint-page.component.ts deleted file mode 100644 index a142bec5c..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/intuit-mint-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-intuit-mint-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class IntuitMintPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'intuit-mint'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/justetf-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/justetf-page.component.ts deleted file mode 100644 index f87ec5f43..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/justetf-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-justetf-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class JustEtfPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'justetf'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/koyfin-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/koyfin-page.component.ts deleted file mode 100644 index b88496b8e..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/koyfin-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-koyfin-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class KoyfinPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'koyfin'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/kubera-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/kubera-page.component.ts deleted file mode 100644 index cb0511d4f..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/kubera-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-kubera-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class KuberaPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'kubera'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/magnifi-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/magnifi-page.component.ts deleted file mode 100644 index 4e688c11e..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/magnifi-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-magnifi-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class MagnifiPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'magnifi'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/markets.sh-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/markets.sh-page.component.ts deleted file mode 100644 index 94bc581e4..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/markets.sh-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-markets-sh-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class MarketsShPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'markets.sh'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/maybe-finance-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/maybe-finance-page.component.ts deleted file mode 100644 index 86738e136..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/maybe-finance-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-maybe-finance-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class MaybeFinancePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'maybe-finance'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/monarch-money-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/monarch-money-page.component.ts deleted file mode 100644 index 095584fbe..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/monarch-money-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-monarch-money-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class MonarchMoneyPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'monarch-money'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/monse-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/monse-page.component.ts deleted file mode 100644 index 588854e3d..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/monse-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-monse-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class MonsePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'monse'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/navexa-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/navexa-page.component.ts deleted file mode 100644 index 0ffb17bbe..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/navexa-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-navexa-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class NavexaPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'navexa'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/parqet-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/parqet-page.component.ts deleted file mode 100644 index f6e956023..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/parqet-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-parqet-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class ParqetPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'parqet'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/plannix-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/plannix-page.component.ts deleted file mode 100644 index 106818ea0..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/plannix-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-plannix-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class PlannixPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'plannix'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/portfolio-dividend-tracker-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/portfolio-dividend-tracker-page.component.ts deleted file mode 100644 index da41c1604..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/portfolio-dividend-tracker-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-portfolio-dividend-tracker-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class PortfolioDividendTrackerPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'portfolio-dividend-tracker'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/portfolio-visualizer-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/portfolio-visualizer-page.component.ts deleted file mode 100644 index 4baeb4de9..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/portfolio-visualizer-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-portfolio-visualizer-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class PortfolioVisualizerPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'portfolio-visualizer'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/portseido-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/portseido-page.component.ts deleted file mode 100644 index 7fb7703b2..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/portseido-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-portseido-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class PortseidoPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'portseido'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/projectionlab-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/projectionlab-page.component.ts deleted file mode 100644 index 6cd22b8f4..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/projectionlab-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-projection-lab-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class ProjectionLabPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'projectionlab'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-money-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-money-page.component.ts deleted file mode 100644 index 7dc279444..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/rocket-money-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-rocket-money-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class RocketMoneyPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'rocket-money'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/seeking-alpha-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/seeking-alpha-page.component.ts deleted file mode 100644 index 825eacb34..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/seeking-alpha-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-seeking-alpha-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class SeekingAlphaPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'seeking-alpha'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/sharesight-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/sharesight-page.component.ts deleted file mode 100644 index 5b0554179..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/sharesight-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-sharesight-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class SharesightPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'sharesight'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/simple-portfolio-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/simple-portfolio-page.component.ts deleted file mode 100644 index 8a1ae2790..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/simple-portfolio-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-simple-portfolio-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class SimplePortfolioPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'simple-portfolio'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/snowball-analytics-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/snowball-analytics-page.component.ts deleted file mode 100644 index 9892af41d..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/snowball-analytics-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-snowball-analytics-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class SnowballAnalyticsPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'snowball-analytics'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/stock-events-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/stock-events-page.component.ts deleted file mode 100644 index ea8aa753b..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/stock-events-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-stock-events-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class StockEventsPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'stock-events'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/stockle-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/stockle-page.component.ts deleted file mode 100644 index e06ec527b..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/stockle-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-stockle-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class StocklePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'stockle'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/stockmarketeye-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/stockmarketeye-page.component.ts deleted file mode 100644 index 1c70efc04..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/stockmarketeye-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-stockmarketeye-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class StockMarketEyePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'stockmarketeye'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/stonksfolio-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/stonksfolio-page.component.ts deleted file mode 100644 index f62c3f3bd..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/stonksfolio-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-stonksfolio-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class StonksfolioPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'stonksfolio'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/sumio-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/sumio-page.component.ts deleted file mode 100644 index acf23f772..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/sumio-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-sumio-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class SumioPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'sumio'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/tiller-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/tiller-page.component.ts deleted file mode 100644 index 69ba2759b..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/tiller-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-tiller-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class TillerPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'tiller'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/utluna-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/utluna-page.component.ts deleted file mode 100644 index 8ce62c741..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/utluna-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-utluna-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class UtlunaPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'utluna'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/vyzer-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/vyzer-page.component.ts deleted file mode 100644 index 37b8c4a72..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/vyzer-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-vyzer-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class VyzerPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'vyzer'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/wallmine-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/wallmine-page.component.ts deleted file mode 100644 index 5c75c80fb..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/wallmine-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-wallmine-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class WallminePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'wallmine'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/wealthfolio-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/wealthfolio-page.component.ts deleted file mode 100644 index d888e2f93..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/wealthfolio-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-wealthfolio-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class WealthfolioPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'wealthfolio'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/wealthica-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/wealthica-page.component.ts deleted file mode 100644 index cea5ddf7a..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/wealthica-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-wealthica-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class WealthicaPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'wealthica'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/whal-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/whal-page.component.ts deleted file mode 100644 index b336c07a0..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/whal-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-whal-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class WhalPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'whal'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/yeekatee-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/yeekatee-page.component.ts deleted file mode 100644 index bd95a70f9..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/yeekatee-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-yeekatee-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class YeekateePageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'yeekatee'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/ynab-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/ynab-page.component.ts deleted file mode 100644 index 0c343b4e6..000000000 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products/ynab-page.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; - -import { products } from '../products'; -import { BaseProductPageComponent } from './base-page.component'; - -@Component({ - host: { class: 'page' }, - imports: [CommonModule, MatButtonModule, RouterModule], - selector: 'gf-ynab-page', - standalone: true, - styleUrls: ['../product-page-template.scss'], - templateUrl: '../product-page-template.html' -}) -export class YnabPageComponent extends BaseProductPageComponent { - public product1 = products.find(({ key }) => { - return key === 'ghostfolio'; - }); - - public product2 = products.find(({ key }) => { - return key === 'ynab'; - }); - - public routerLinkAbout = ['/' + $localize`about`]; - public routerLinkFeatures = ['/' + $localize`features`]; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + $localize`resources`, - 'personal-finance-tools' - ]; -} diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 3b9123218..803e71757 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -5500,7 +5500,7 @@ ✅ Yes - ✅ Yes + ✅ Sí apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 109 @@ -7296,7 +7296,7 @@ ❌ No - ❌ No + ❌ No apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 111 @@ -12216,7 +12216,7 @@ Open Source Alternative to - Open Source Alternative to + Alternativa de software libre a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 38 @@ -12224,7 +12224,7 @@ Open Source Alternative to - Open Source Alternative to + Alternativa de software libre a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 26 @@ -12232,7 +12232,7 @@ The Open Source Alternative to - The Open Source Alternative to + La alternativa de software libre a apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 8 @@ -13144,7 +13144,7 @@ open-source-alternative-to - open-source-alternative-to + alternativa-de-software-libre-a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 23 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 0a084f24d..20c37025b 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -3,7 +3,7 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. - Le risque de perte en investissant peut être important. Il est déconseillé d'investir de l'argent dont vous pourriez avoir besoin à court terme. + Le risque de perte en investissant peut être important. Il est déconseillé d’investir de l’argent dont vous pourriez avoir besoin à court terme. apps/client/src/app/app.component.html 182 @@ -459,7 +459,7 @@ Asset Profiles - Profil d'Actifs + Profil d’Actifs libs/ui/src/lib/assistant/assistant.html 67 @@ -627,7 +627,7 @@ Asset Class - Classe d'Actifs + Classe d’Actifs apps/client/src/app/components/admin-market-data/admin-market-data.html 60 @@ -651,7 +651,7 @@ Asset Sub Class - Sous-classe d'Actifs + Sous-classe d’Actifs apps/client/src/app/components/admin-market-data/admin-market-data.html 69 @@ -695,7 +695,7 @@ Activities Count - Nombre d'Activités + Nombre d’Activités apps/client/src/app/components/admin-market-data/admin-market-data.html 87 @@ -895,7 +895,7 @@ User Count - Nombre d'Utilisateurs + Nombre d’Utilisateurs apps/client/src/app/components/admin-overview/admin-overview.html 13 @@ -903,7 +903,7 @@ Activity Count - Nombre d'Activités + Nombre d’Activités apps/client/src/app/components/admin-overview/admin-overview.html 23 @@ -1623,7 +1623,7 @@ Upgrade Plan - Mettre à niveau l'Abonnement + Mettre à niveau l’Abonnement apps/client/src/app/components/home-summary/home-summary.component.ts 115 @@ -1651,7 +1651,7 @@ Savings Rate - Taux d'Épargne + Taux d’Épargne apps/client/src/app/components/investment-chart/investment-chart.component.ts 214 @@ -1807,7 +1807,7 @@ Emergency Fund - Fonds d'Urgence + Fonds d’Urgence apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 190 @@ -1823,7 +1823,7 @@ Buying Power - Pouvoir d'Achat + Pouvoir d’Achat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 237 @@ -1831,7 +1831,7 @@ Excluded from Analysis - Exclus de l'Analyse + Exclus de l’Analyse apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 249 @@ -1879,7 +1879,7 @@ Please enter the amount of your emergency fund: - Veuillez entrer le montant de votre fonds d'urgence : + Veuillez entrer le montant de votre fonds d’urgence : apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts 57 @@ -1947,7 +1947,7 @@ Today - Aujourd'hui + Aujourd’hui apps/client/src/app/components/toggle/toggle.component.ts 22 @@ -2031,7 +2031,7 @@ Oops! Something went wrong. - Oups! Quelque chose s'est mal passé. + Oups! Quelque chose s’est mal passé. apps/client/src/app/core/http-response.interceptor.ts 89 @@ -2043,7 +2043,7 @@ Okay - D'accord + D’accord apps/client/src/app/core/http-response.interceptor.ts 92 @@ -2143,7 +2143,7 @@ Could not redeem coupon code - Le code promotionnel n'a pas pu être appliqué + Le code promotionnel n’a pas pu être appliqué apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 121 @@ -2299,7 +2299,7 @@ Date and number format - Format de date et d'heure + Format de date et d’heure apps/client/src/app/components/user-account-settings/user-account-settings.html 123 @@ -2367,7 +2367,7 @@ User ID - ID d'utilisateur + ID d’utilisateur apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 45 @@ -2739,7 +2739,7 @@ Import has been completed - L'import est terminé + L’import est terminé apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 128 @@ -2835,7 +2835,7 @@ By Asset Class - Par Classe d'Actifs + Par Classe d’Actifs apps/client/src/app/pages/portfolio/allocations/allocations-page.html 86 @@ -3070,8 +3070,8 @@ - Hello, has shared a Portfolio with you! - Bonjour, a partagé un Portefeuille avec vous ! + Hello, has shared a Portfolio with you! + Bonjour, a partagé un Portefeuille avec vous ! apps/client/src/app/pages/public/public-page.html 4 @@ -3187,7 +3187,7 @@ Oops, authentication has failed. - Oups, l'identification a échoué. + Oups, l’identification a échoué. apps/client/src/app/pages/webauthn/webauthn-page.html 19 @@ -3203,7 +3203,7 @@ Go back to Home Page - Retour à la Page d'Accueil + Retour à la Page d’Accueil apps/client/src/app/pages/webauthn/webauthn-page.html 31 @@ -3319,7 +3319,7 @@ Annual Interest Rate - Taux d'Intérêt Annuel + Taux d’Intérêt Annuel libs/ui/src/lib/fire-calculator/fire-calculator.component.html 21 @@ -3387,7 +3387,7 @@ Asset Class - Classe d'Actifs + Classe d’Actifs libs/ui/src/lib/i18n.ts 6 @@ -3395,7 +3395,7 @@ Asset Sub Class - Sous-classe d'Actifs + Sous-classe d’Actifs libs/ui/src/lib/i18n.ts 7 @@ -3403,7 +3403,7 @@ Emergency Fund - Fonds d'Urgence + Fonds d’Urgence libs/ui/src/lib/i18n.ts 13 @@ -3583,7 +3583,7 @@ Time to add your first activity. - Il est temps d'ajouter votre première activité. + Il est temps d’ajouter votre première activité. libs/ui/src/lib/no-transactions-info/no-transactions-info.component.html 12 @@ -3635,7 +3635,7 @@ Valid until - Valide jusqu'au + Valide jusqu’au libs/ui/src/lib/membership-card/membership-card.component.html 23 @@ -3715,7 +3715,7 @@ Are you an ambitious investor who needs the full picture? - Êtes-vous un investisseur ambitieux qui a besoin d'une vue complète ? + Êtes-vous un investisseur ambitieux qui a besoin d’une vue complète ? apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 12 @@ -3771,7 +3771,7 @@ and more Features... - et d'autres fonctionnalités... + et d’autres fonctionnalités... apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 42 @@ -3795,7 +3795,7 @@ Upgrade Plan - Mettre à niveau l'Abonnement + Mettre à niveau l’Abonnement apps/client/src/app/components/header/header.component.html 182 @@ -3815,7 +3815,7 @@ For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. - Pour les investisseurs à l'aise avec la technologie qui préfèrent héberger Ghostfolio sur leur propre infrastructure. + Pour les investisseurs à l’aise avec la technologie qui préfèrent héberger Ghostfolio sur leur propre infrastructure. apps/client/src/app/pages/pricing/pricing-page.html 36 @@ -3911,7 +3911,7 @@ For ambitious investors who need the full picture of their financial assets. - Pour les investisseurs ambitieux qui ont besoin d'une vue complète de leurs actifs financiers. + Pour les investisseurs ambitieux qui ont besoin d’une vue complète de leurs actifs financiers. apps/client/src/app/pages/pricing/pricing-page.html 180 @@ -3935,7 +3935,7 @@ It’s free. - C'est gratuit. + C’est gratuit. apps/client/src/app/pages/pricing/pricing-page.html 294 @@ -3979,7 +3979,7 @@ Savings Rate per Month - Taux d'Épargne mensuel + Taux d’Épargne mensuel libs/ui/src/lib/fire-calculator/fire-calculator.component.html 10 @@ -4051,7 +4051,7 @@ Oops! Could not get the historical exchange rate from - Oups ! Nous n'avons pas pu obtenir le taux de change historique à partir de + Oups ! Nous n’avons pas pu obtenir le taux de change historique à partir de apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 292 @@ -4095,7 +4095,7 @@ Renew Plan - Renouveler l'Abonnement + Renouveler l’Abonnement apps/client/src/app/components/header/header.component.html 190 @@ -4111,7 +4111,7 @@ Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover the costs of the hosting infrastructure and to fund ongoing development. - Notre offre Ghostfolio Premium cloud est la manière la plus simple de débuter. Grâce au temps qu'elle économise, ce sera la meilleure option pour la plupart des gens. Les revenus sont utilisés pour couvrir les frais d'infrastructures et financer le développement continu de Ghostfolio. + Notre offre Ghostfolio Premium cloud est la manière la plus simple de débuter. Grâce au temps qu’elle économise, ce sera la meilleure option pour la plupart des gens. Les revenus sont utilisés pour couvrir les frais d’infrastructures et financer le développement continu de Ghostfolio. apps/client/src/app/pages/pricing/pricing-page.html 6 @@ -4127,7 +4127,7 @@ Delete User - Supprimer l'Utilisateur + Supprimer l’Utilisateur apps/client/src/app/components/admin-users/admin-users.html 232 @@ -4143,7 +4143,7 @@ By ETF Provider - Par Émetteur d'ETF + Par Émetteur d’ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html 314 @@ -4215,7 +4215,7 @@ Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience: - Mettez à niveau vers Ghostfolio Premium aujourd'hui et gagnez accès à des fonctionnalités exclusives pour améliorer votre expérience d'investissement: + Mettez à niveau vers Ghostfolio Premium aujourd’hui et gagnez accès à des fonctionnalités exclusives pour améliorer votre expérience d’investissement: apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 15 @@ -4223,7 +4223,7 @@ Get the tools to effectively manage your finances and refine your personal investment strategy. - Obtenez les outils pour gérer efficacement vos finances et affinez votre stratégie d'investissement personnelle. + Obtenez les outils pour gérer efficacement vos finances et affinez votre stratégie d’investissement personnelle. apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 45 @@ -5499,7 +5499,7 @@ ✅ Yes - ✅ Yes + ✅ Oui apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 109 @@ -7295,7 +7295,7 @@ ❌ No - ❌ No + ❌ Non apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 111 @@ -12215,7 +12215,7 @@ Open Source Alternative to - Open Source Alternative to + Alternative open source à apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 38 @@ -12223,7 +12223,7 @@ Open Source Alternative to - Open Source Alternative to + Alternative open source à apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 26 @@ -12231,7 +12231,7 @@ The Open Source Alternative to - The Open Source Alternative to + L’alternative open source à apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 8 @@ -13143,7 +13143,7 @@ open-source-alternative-to - open-source-alternative-to + alternative-open-source-a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 23 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index e996ec68e..a5a4d5d3b 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -5499,7 +5499,7 @@ ✅ Yes - ✅ Yes + ✅ Sim apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 109 @@ -7295,7 +7295,7 @@ ❌ No - ❌ No + ❌ Não apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 111 @@ -12215,7 +12215,7 @@ Open Source Alternative to - Open Source Alternative to + Alternativa de software livre ao apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 38 @@ -12223,7 +12223,7 @@ Open Source Alternative to - Open Source Alternative to + Alternativa de software livre ao apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 26 @@ -12231,7 +12231,7 @@ The Open Source Alternative to - The Open Source Alternative to + A alternativa de software livre ao apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 8 @@ -13143,7 +13143,7 @@ open-source-alternative-to - open-source-alternative-to + alternativa-de-software-livre-ao apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 23 diff --git a/libs/common/src/lib/interfaces/product.ts b/libs/common/src/lib/interfaces/product.ts index 274ee8207..0723abf95 100644 --- a/libs/common/src/lib/interfaces/product.ts +++ b/libs/common/src/lib/interfaces/product.ts @@ -1,6 +1,5 @@ export interface Product { alias?: string; - component: any; founded?: number; hasFreePlan?: boolean; hasSelfHostingAbility?: boolean; diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts b/libs/common/src/lib/personal-finance-tools.ts similarity index 55% rename from apps/client/src/app/pages/resources/personal-finance-tools/products.ts rename to libs/common/src/lib/personal-finance-tools.ts index 521659611..f7d10366d 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -1,89 +1,7 @@ import { Product } from '@ghostfolio/common/interfaces'; -import { AllInvestViewPageComponent } from './products/allinvestview-page.component'; -import { AllvueSystemsPageComponent } from './products/allvue-systems-page.component'; -import { AltooPageComponent } from './products/altoo-page.component'; -import { BasilFinancePageComponent } from './products/basil-finance-page.component'; -import { BeanvestPageComponent } from './products/beanvest-page.component'; -import { CapitallyPageComponent } from './products/capitally-page.component'; -import { CapMonPageComponent } from './products/capmon-page.component'; -import { CompoundPlanningPageComponent } from './products/compound-planning-page.component'; -import { CopilotMoneyPageComponent } from './products/copilot-money-page.component'; -import { DeFiPageComponent } from './products/de.fi-page.component'; -import { DeltaPageComponent } from './products/delta-page.component'; -import { DivvyDiaryPageComponent } from './products/divvydiary-page.component'; -import { EightFiguresPageComponent } from './products/eightfigures-page.component'; -import { EmpowerPageComponent } from './products/empower-page.component'; -import { ExirioPageComponent } from './products/exirio-page.component'; -import { FinaPageComponent } from './products/fina-page.component'; -import { FinaryPageComponent } from './products/finary-page.component'; -import { FinWisePageComponent } from './products/finwise-page.component'; -import { FolisharePageComponent } from './products/folishare-page.component'; -import { GetquinPageComponent } from './products/getquin-page.component'; -import { GoSpatzPageComponent } from './products/gospatz-page.component'; -import { IntuitMintPageComponent } from './products/intuit-mint-page.component'; -import { JustEtfPageComponent } from './products/justetf-page.component'; -import { KoyfinPageComponent } from './products/koyfin-page.component'; -import { KuberaPageComponent } from './products/kubera-page.component'; -import { MagnifiPageComponent } from './products/magnifi-page.component'; -import { MarketsShPageComponent } from './products/markets.sh-page.component'; -import { MaybeFinancePageComponent } from './products/maybe-finance-page.component'; -import { MonarchMoneyPageComponent } from './products/monarch-money-page.component'; -import { MonsePageComponent } from './products/monse-page.component'; -import { NavexaPageComponent } from './products/navexa-page.component'; -import { ParqetPageComponent } from './products/parqet-page.component'; -import { PlannixPageComponent } from './products/plannix-page.component'; -import { PortfolioDividendTrackerPageComponent } from './products/portfolio-dividend-tracker-page.component'; -import { PortfolioVisualizerPageComponent } from './products/portfolio-visualizer-page.component'; -import { PortseidoPageComponent } from './products/portseido-page.component'; -import { ProjectionLabPageComponent } from './products/projectionlab-page.component'; -import { RocketMoneyPageComponent } from './products/rocket-money-page.component'; -import { SeekingAlphaPageComponent } from './products/seeking-alpha-page.component'; -import { SharesightPageComponent } from './products/sharesight-page.component'; -import { SimplePortfolioPageComponent } from './products/simple-portfolio-page.component'; -import { SnowballAnalyticsPageComponent } from './products/snowball-analytics-page.component'; -import { StockEventsPageComponent } from './products/stock-events-page.component'; -import { StocklePageComponent } from './products/stockle-page.component'; -import { StockMarketEyePageComponent } from './products/stockmarketeye-page.component'; -import { StonksfolioPageComponent } from './products/stonksfolio-page.component'; -import { SumioPageComponent } from './products/sumio-page.component'; -import { TillerPageComponent } from './products/tiller-page.component'; -import { UtlunaPageComponent } from './products/utluna-page.component'; -import { VyzerPageComponent } from './products/vyzer-page.component'; -import { WallminePageComponent } from './products/wallmine-page.component'; -import { WealthfolioPageComponent } from './products/wealthfolio-page.component'; -import { WealthicaPageComponent } from './products/wealthica-page.component'; -import { WhalPageComponent } from './products/whal-page.component'; -import { YeekateePageComponent } from './products/yeekatee-page.component'; -import { YnabPageComponent } from './products/ynab-page.component'; - -export const products: Product[] = [ - { - component: undefined, - founded: 2021, - hasFreePlan: true, - hasSelfHostingAbility: true, - isOpenSource: true, - key: 'ghostfolio', - languages: [ - 'Deutsch', - 'English', - 'Español', - 'Français', - 'Italiano', - 'Nederlands', - 'Português', - 'Türkçe', - '简体中文' - ], - name: 'Ghostfolio', - origin: $localize`Switzerland`, - region: $localize`Global`, - slogan: 'Open Source Wealth Management', - useAnonymously: true - }, +export const personalFinanceTools: Product[] = [ { - component: AllInvestViewPageComponent, founded: 2023, hasSelfHostingAbility: false, key: 'allinvestview', @@ -92,26 +10,23 @@ export const products: Product[] = [ slogan: 'All your Investments in One View' }, { - component: AllvueSystemsPageComponent, founded: 2019, hasFreePlan: false, hasSelfHostingAbility: false, key: 'allvue-systems', name: 'Allvue Systems', - origin: $localize`United States`, + origin: `United States`, slogan: 'Investment Software Suite' }, { - component: AltooPageComponent, founded: 2017, hasSelfHostingAbility: false, key: 'altoo', name: 'Altoo Wealth Platform', - origin: $localize`Switzerland`, + origin: `Switzerland`, slogan: 'Simplicity for Complex Wealth' }, { - component: BasilFinancePageComponent, founded: 2022, hasFreePlan: true, hasSelfHostingAbility: false, @@ -120,56 +35,50 @@ export const products: Product[] = [ slogan: 'The ultimate solution for tracking and managing your investments' }, { - component: BeanvestPageComponent, founded: 2020, hasFreePlan: true, hasSelfHostingAbility: false, key: 'beanvest', name: 'Beanvest', - origin: $localize`France`, + origin: `France`, pricingPerYear: '$100', slogan: 'Stock Portfolio Tracker for Smart Investors' }, { - component: CapitallyPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'capitally', name: 'Capitally', - origin: $localize`Poland`, + origin: `Poland`, pricingPerYear: '€50', slogan: 'Optimize your investments performance' }, { - component: CapMonPageComponent, founded: 2022, key: 'capmon', name: 'CapMon.org', - origin: $localize`Germany`, + origin: `Germany`, note: 'CapMon.org has discontinued in 2023', slogan: 'Next Generation Assets Tracking' }, { - component: CompoundPlanningPageComponent, founded: 2019, key: 'compound-planning', name: 'Compound Planning', - origin: $localize`United States`, + origin: `United States`, slogan: 'Modern Wealth & Investment Management' }, { - component: CopilotMoneyPageComponent, founded: 2019, hasFreePlan: false, hasSelfHostingAbility: false, key: 'copilot-money', name: 'Copilot Money', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$70', slogan: 'Do money better with Copilot' }, { - component: DeFiPageComponent, founded: 2020, key: 'de.fi', languages: ['English'], @@ -177,215 +86,195 @@ export const products: Product[] = [ slogan: 'DeFi Portfolio Tracker' }, { - component: DeltaPageComponent, founded: 2017, hasFreePlan: true, hasSelfHostingAbility: false, key: 'delta', name: 'Delta Investment Tracker', note: 'Acquired by eToro', - origin: $localize`Belgium`, + origin: `Belgium`, slogan: 'The app to track all your investments. Make smart moves only.' }, { - component: DivvyDiaryPageComponent, founded: 2019, hasFreePlan: true, hasSelfHostingAbility: false, key: 'divvydiary', languages: ['Deutsch', 'English'], name: 'DivvyDiary', - origin: $localize`Germany`, + origin: `Germany`, pricingPerYear: '€65', slogan: 'Your personal Dividend Calendar' }, { - component: EmpowerPageComponent, founded: 2009, hasSelfHostingAbility: false, key: 'empower', name: 'Empower', note: 'Originally named as Personal Capital', - origin: $localize`United States`, + origin: `United States`, slogan: 'Get answers to your money questions' }, { alias: '8figures', - component: EightFiguresPageComponent, founded: 2022, key: 'eightfigures', name: '8FIGURES', - origin: $localize`United States`, + origin: `United States`, slogan: 'Portfolio Tracker Designed by Professional Investors' }, { - component: ExirioPageComponent, founded: 2020, hasFreePlan: true, hasSelfHostingAbility: false, key: 'exirio', name: 'Exirio', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$100', slogan: 'All your wealth, in one place.' }, { - component: FinaPageComponent, founded: 2023, hasFreePlan: true, hasSelfHostingAbility: false, key: 'fina', languages: ['English'], name: 'Fina', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$115', slogan: 'Flexible Financial Management' }, { - component: FinaryPageComponent, founded: 2020, key: 'finary', languages: ['Deutsch', 'English', 'Français'], name: 'Finary', - origin: $localize`United States`, + origin: `United States`, slogan: 'Real-Time Portfolio Tracker & Stock Tracker' }, { - component: FinWisePageComponent, founded: 2023, hasFreePlan: true, key: 'finwise', name: 'FinWise', - origin: $localize`South Africa`, + origin: `South Africa`, pricingPerYear: '€69.99', slogan: 'Personal finances, simplified' }, { - component: FolisharePageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'folishare', languages: ['Deutsch', 'English'], name: 'folishare', - origin: $localize`Austria`, + origin: `Austria`, pricingPerYear: '$65', slogan: 'Take control over your investments' }, { - component: GetquinPageComponent, founded: 2020, hasFreePlan: true, hasSelfHostingAbility: false, key: 'getquin', languages: ['Deutsch', 'English'], name: 'getquin', - origin: $localize`Germany`, + origin: `Germany`, pricingPerYear: '€48', slogan: 'Portfolio Tracker, Analysis & Community' }, { - component: GoSpatzPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'gospatz', name: 'goSPATZ', - origin: $localize`Germany`, + origin: `Germany`, slogan: 'Volle Kontrolle über deine Investitionen' }, { - component: IntuitMintPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'intuit-mint', name: 'Intuit Mint', note: 'Intuit Mint has discontinued in 2023', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$60', slogan: 'Managing money, made simple' }, { - component: JustEtfPageComponent, founded: 2011, hasFreePlan: true, hasSelfHostingAbility: false, key: 'justetf', name: 'justETF', - origin: $localize`Germany`, + origin: `Germany`, pricingPerYear: '€119', slogan: 'ETF portfolios made simple' }, { - component: KoyfinPageComponent, founded: 2016, hasFreePlan: true, hasSelfHostingAbility: false, key: 'koyfin', name: 'Koyfin', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$468', slogan: 'Comprehensive financial data analysis' }, { - component: KuberaPageComponent, founded: 2019, hasFreePlan: false, hasSelfHostingAbility: false, key: 'kubera', name: 'Kubera®', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$150', slogan: 'The Time Machine for your Net Worth' }, { - component: MagnifiPageComponent, founded: 2018, hasFreePlan: false, hasSelfHostingAbility: false, key: 'magnifi', name: 'Magnifi', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$132', slogan: 'AI Investing Assistant' }, { - component: MarketsShPageComponent, founded: 2022, hasFreePlan: true, hasSelfHostingAbility: false, key: 'markets.sh', languages: ['English'], name: 'markets.sh', - origin: $localize`Germany`, + origin: `Germany`, pricingPerYear: '€168', - region: $localize`Global`, + region: `Global`, slogan: 'Track your investments' }, { - component: MaybeFinancePageComponent, founded: 2021, hasSelfHostingAbility: false, key: 'maybe-finance', languages: ['English'], name: 'Maybe Finance', note: 'Maybe Finance has discontinued in 2023', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$145', - region: $localize`United States`, + region: `United States`, slogan: 'Your financial future, in your control' }, { - component: MonarchMoneyPageComponent, founded: 2019, hasFreePlan: false, hasSelfHostingAbility: false, key: 'monarch-money', name: 'Monarch Money', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$99.99', slogan: 'The modern way to manage your money' }, { - component: MonsePageComponent, hasFreePlan: false, hasSelfHostingAbility: false, key: 'monse', @@ -394,51 +283,46 @@ export const products: Product[] = [ slogan: 'Gain financial control and keep your data private.' }, { - component: NavexaPageComponent, founded: 2017, hasFreePlan: false, hasSelfHostingAbility: false, key: 'navexa', name: 'Navexa', - origin: $localize`Australia`, + origin: `Australia`, pricingPerYear: '$90', slogan: 'The Intelligent Portfolio Tracker' }, { - component: ParqetPageComponent, founded: 2020, hasSelfHostingAbility: false, hasFreePlan: true, key: 'parqet', name: 'Parqet', note: 'Originally named as Tresor One', - origin: $localize`Germany`, + origin: `Germany`, pricingPerYear: '€88', region: 'Austria, Germany, Switzerland', slogan: 'Dein Vermögen immer im Blick' }, { - component: PlannixPageComponent, founded: 2023, hasSelfHostingAbility: false, key: 'plannix', name: 'Plannix', - origin: $localize`Italy`, + origin: `Italy`, slogan: 'Your Personal Finance Hub' }, { - component: PortfolioDividendTrackerPageComponent, hasFreePlan: false, hasSelfHostingAbility: false, key: 'portfolio-dividend-tracker', languages: ['English', 'Nederlands'], name: 'Portfolio Dividend Tracker', - origin: $localize`Netherlands`, + origin: `Netherlands`, pricingPerYear: '€60', slogan: 'Manage all your portfolios' }, { - component: PortfolioVisualizerPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'portfolio-visualizer', @@ -448,172 +332,155 @@ export const products: Product[] = [ slogan: 'Tools for Better Investors' }, { - component: PortseidoPageComponent, founded: 2021, hasFreePlan: true, hasSelfHostingAbility: false, key: 'portseido', languages: ['Deutsch', 'English', 'Français', 'Nederlands'], name: 'Portseido', - origin: $localize`Thailand`, + origin: `Thailand`, pricingPerYear: '$96', slogan: 'Portfolio Performance and Dividend Tracker' }, { - component: ProjectionLabPageComponent, founded: 2021, hasFreePlan: true, hasSelfHostingAbility: true, key: 'projectionlab', name: 'ProjectionLab', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$108', slogan: 'Build Financial Plans You Love.' }, { - component: RocketMoneyPageComponent, founded: 2015, hasSelfHostingAbility: false, key: 'rocket-money', name: 'Rocket Money', - origin: $localize`United States`, + origin: `United States`, slogan: 'Track your net worth' }, { - component: SeekingAlphaPageComponent, founded: 2004, hasFreePlan: false, hasSelfHostingAbility: false, key: 'seeking-alpha', name: 'Seeking Alpha', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$239', slogan: 'Stock Market Analysis & Tools for Investors' }, { - component: SharesightPageComponent, founded: 2007, hasFreePlan: true, hasSelfHostingAbility: false, key: 'sharesight', name: 'Sharesight', - origin: $localize`New Zealand`, + origin: `New Zealand`, pricingPerYear: '$135', - region: $localize`Global`, + region: `Global`, slogan: 'Stock Portfolio Tracker' }, { - component: SimplePortfolioPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'simple-portfolio', name: 'Simple Portfolio', - origin: $localize`Czech Republic`, + origin: `Czech Republic`, pricingPerYear: '€80', slogan: 'Stock Portfolio Tracker' }, { - component: SnowballAnalyticsPageComponent, founded: 2021, hasFreePlan: true, hasSelfHostingAbility: false, key: 'snowball-analytics', name: 'Snowball Analytics', - origin: $localize`France`, + origin: `France`, pricingPerYear: '$80', slogan: 'Simple and powerful portfolio tracker' }, { - component: StockEventsPageComponent, founded: 2019, hasSelfHostingAbility: false, key: 'stock-events', name: 'Stock Events', - origin: $localize`Germany`, + origin: `Germany`, slogan: 'Track all your Investments' }, { - component: StocklePageComponent, key: 'stockle', name: 'Stockle', - origin: $localize`Finland`, + origin: `Finland`, slogan: 'Supercharge your investments tracking experience' }, { - component: StockMarketEyePageComponent, founded: 2008, key: 'stockmarketeye', name: 'StockMarketEye', - origin: $localize`France`, + origin: `France`, note: 'StockMarketEye has discontinued in 2023', slogan: 'A Powerful Portfolio & Investment Tracking App' }, { - component: StonksfolioPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'stonksfolio', languages: ['English'], name: 'Stonksfolio', - origin: $localize`Bulgaria`, + origin: `Bulgaria`, pricingPerYear: '€49.90', slogan: 'Visualize all of your portfolios' }, { - component: SumioPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'sumio', name: 'Sumio', - origin: $localize`Czech Republic`, + origin: `Czech Republic`, pricingPerYear: '$20', slogan: 'Sum up and build your wealth.' }, { - component: TillerPageComponent, founded: 2016, hasFreePlan: false, key: 'tiller', name: 'Tiller', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$79', slogan: 'Your financial life in a spreadsheet, automatically updated each day' }, { - component: UtlunaPageComponent, hasFreePlan: true, hasSelfHostingAbility: false, key: 'utluna', languages: ['Deutsch', 'English', 'Français'], name: 'Utluna', - origin: $localize`Switzerland`, + origin: `Switzerland`, pricingPerYear: '$300', slogan: 'Your Portfolio. Revealed.', useAnonymously: true }, { - component: VyzerPageComponent, founded: 2020, hasFreePlan: true, key: 'vyzer', name: 'Vyzer', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$348', slogan: 'Virtual Family Office for Smart Wealth Management' }, { - component: WallminePageComponent, hasSelfHostingAbility: false, key: 'wallmine', languages: ['English'], name: 'wallmine', - origin: $localize`Czech Republic`, + origin: `Czech Republic`, pricingPerYear: '$600', slogan: 'Make Smarter Investments' }, { - component: WealthfolioPageComponent, hasSelfHostingAbility: true, key: 'wealthfolio', languages: ['English'], @@ -621,44 +488,40 @@ export const products: Product[] = [ slogan: 'Desktop Investment Tracker' }, { - component: WealthicaPageComponent, founded: 2015, hasFreePlan: true, hasSelfHostingAbility: false, key: 'wealthica', languages: ['English', 'Français'], name: 'Wealthica', - origin: $localize`Canada`, + origin: `Canada`, pricingPerYear: '$50', slogan: 'See all your investments in one place' }, { - component: WhalPageComponent, key: 'whal', name: 'Whal', - origin: $localize`United States`, + origin: `United States`, slogan: 'Manage your investments in one place' }, { - component: YeekateePageComponent, founded: 2021, hasFreePlan: true, hasSelfHostingAbility: false, key: 'yeekatee', languages: ['Deutsch', 'English', 'Español', 'Français', 'Italiano'], name: 'yeekatee', - origin: $localize`Switzerland`, - region: $localize`Global`, + origin: `Switzerland`, + region: `Global`, slogan: 'Connect. Share. Invest.' }, { - component: YnabPageComponent, founded: 2004, hasFreePlan: false, hasSelfHostingAbility: false, key: 'ynab', name: 'YNAB (You Need a Budget)', - origin: $localize`United States`, + origin: `United States`, pricingPerYear: '$99', slogan: 'Change Your Relationship With Money' }