From 6e87f34c6fd2f22e14bd760807af1c4fe1bcb302 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 10 Aug 2023 20:49:06 +0200 Subject: [PATCH 01/23] Feature/add more durations in coupon system (#2228) * Add 90 and 180 days * Update changelog --- CHANGELOG.md | 6 ++++++ .../src/app/components/admin-overview/admin-overview.html | 2 ++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bf25b404..671f7a85f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added more durations in the coupon system + ## 1.299.1 - 2023-08-10 ### Changed diff --git a/apps/client/src/app/components/admin-overview/admin-overview.html b/apps/client/src/app/components/admin-overview/admin-overview.html index 0f4127e51..f72c88050 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.html +++ b/apps/client/src/app/components/admin-overview/admin-overview.html @@ -169,6 +169,8 @@ 7 Days 14 Days 30 Days + 90 Days + 180 Days 1 Year From 5a23cd34ad1d35c29db9f4220acc333008e8ec8b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 11 Aug 2023 18:29:39 +0200 Subject: [PATCH 02/23] Replace variables (#2229) --- apps/client/src/index.html | 32 ++++++++++----- apps/client/src/index.template.html | 63 +++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 10 deletions(-) create mode 100644 apps/client/src/index.template.html diff --git a/apps/client/src/index.html b/apps/client/src/index.html index 55120ec08..a7d01e481 100644 --- a/apps/client/src/index.html +++ b/apps/client/src/index.html @@ -1,11 +1,14 @@ - + - ${title} + Ghostfolio – Open Source Wealth Management Software - + - - + + - + - - - - + + + + + + + ${title} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b5f01c0d151cd96da47c1cdef4a679c6b748dbb0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 11 Aug 2023 20:20:35 +0200 Subject: [PATCH 03/23] Feature/migrate requests from bent to got (#2231) * Migrate requests from bent to got * Update changelog --- CHANGELOG.md | 4 ++ apps/api/src/app/info/info.service.ts | 50 +++++++------------ apps/api/src/app/logo/logo.service.ts | 12 ++--- .../coingecko/coingecko.service.ts | 30 ++++------- .../trackinsight/trackinsight.service.ts | 32 ++++++------ .../financial-modeling-prep.service.ts | 32 ++++-------- .../data-provider/manual/manual.service.ts | 7 ++- .../rapid-api/rapid-api.service.ts | 18 +++---- package.json | 1 - yarn.lock | 14 ------ 10 files changed, 74 insertions(+), 126 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 671f7a85f..5aae4e412 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added more durations in the coupon system +### Changed + +- Migrated the remaining requests from `bent` to `got` + ## 1.299.1 - 2023-08-10 ### Changed diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts index 187135a35..7eba432f5 100644 --- a/apps/api/src/app/info/info.service.ts +++ b/apps/api/src/app/info/info.service.ts @@ -30,9 +30,9 @@ import { permissions } from '@ghostfolio/common/permissions'; import { SubscriptionOffer } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; -import * as bent from 'bent'; import * as cheerio from 'cheerio'; import { format, subDays } from 'date-fns'; +import got from 'got'; @Injectable() export class InfoService { @@ -172,17 +172,13 @@ export class InfoService { private async countDockerHubPulls(): Promise { try { - const get = bent( + const { pull_count } = await got( `https://hub.docker.com/v2/repositories/ghostfolio/ghostfolio`, - 'GET', - 'json', - 200, { - 'User-Agent': 'request' + headers: { 'User-Agent': 'request' } } - ); + ).json(); - const { pull_count } = await get(); return pull_count; } catch (error) { Logger.error(error, 'InfoService'); @@ -193,16 +189,9 @@ export class InfoService { private async countGitHubContributors(): Promise { try { - const get = bent( - 'https://github.com/ghostfolio/ghostfolio', - 'GET', - 'string', - 200, - {} - ); + const { body } = await got('https://github.com/ghostfolio/ghostfolio'); - const html = await get(); - const $ = cheerio.load(html); + const $ = cheerio.load(body); return extractNumberFromString( $( @@ -218,17 +207,13 @@ export class InfoService { private async countGitHubStargazers(): Promise { try { - const get = bent( + const { stargazers_count } = await got( `https://api.github.com/repos/ghostfolio/ghostfolio`, - 'GET', - 'json', - 200, { - 'User-Agent': 'request' + headers: { 'User-Agent': 'request' } } - ); + ).json(); - const { stargazers_count } = await get(); return stargazers_count; } catch (error) { Logger.error(error, 'InfoService'); @@ -346,22 +331,21 @@ export class InfoService { PROPERTY_BETTER_UPTIME_MONITOR_ID )) as string; - const get = bent( + const { data } = await got( `https://betteruptime.com/api/v2/monitors/${monitorId}/sla?from=${format( subDays(new Date(), 90), DATE_FORMAT )}&to${format(new Date(), DATE_FORMAT)}`, - 'GET', - 'json', - 200, + { - Authorization: `Bearer ${this.configurationService.get( - 'BETTER_UPTIME_API_KEY' - )}` + headers: { + Authorization: `Bearer ${this.configurationService.get( + 'BETTER_UPTIME_API_KEY' + )}` + } } - ); + ).json(); - const { data } = await get(); return data.attributes.availability / 100; } catch (error) { Logger.error(error, 'InfoService'); diff --git a/apps/api/src/app/logo/logo.service.ts b/apps/api/src/app/logo/logo.service.ts index d2e377fc0..166143a75 100644 --- a/apps/api/src/app/logo/logo.service.ts +++ b/apps/api/src/app/logo/logo.service.ts @@ -2,7 +2,7 @@ import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/sy import { UniqueAsset } from '@ghostfolio/common/interfaces'; import { HttpException, Injectable } from '@nestjs/common'; import { DataSource } from '@prisma/client'; -import * as bent from 'bent'; +import got from 'got'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; @Injectable() @@ -41,15 +41,11 @@ export class LogoService { } private getBuffer(aUrl: string) { - const get = bent( + return got( `https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=${aUrl}&size=64`, - 'GET', - 'buffer', - 200, { - 'User-Agent': 'request' + headers: { 'User-Agent': 'request' } } - ); - return get(); + ).buffer(); } } diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index 35083e810..492664393 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -15,8 +15,8 @@ import { DataSource, SymbolProfile } from '@prisma/client'; -import bent from 'bent'; import { format, fromUnixTime, getUnixTime } from 'date-fns'; +import got from 'got'; @Injectable() export class CoinGeckoService implements DataProviderInterface { @@ -45,8 +45,7 @@ export class CoinGeckoService implements DataProviderInterface { }; try { - const get = bent(`${this.URL}/coins/${aSymbol}`, 'GET', 'json', 200); - const { name } = await get(); + const { name } = await got(`${this.URL}/coins/${aSymbol}`).json(); response.name = name; } catch (error) { @@ -79,17 +78,13 @@ export class CoinGeckoService implements DataProviderInterface { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { try { - const get = bent( + const { prices } = await got( `${ this.URL }/coins/${aSymbol}/market_chart/range?vs_currency=${this.baseCurrency.toLowerCase()}&from=${getUnixTime( from - )}&to=${getUnixTime(to)}`, - 'GET', - 'json', - 200 - ); - const { prices } = await get(); + )}&to=${getUnixTime(to)}` + ).json(); const result: { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; @@ -132,15 +127,11 @@ export class CoinGeckoService implements DataProviderInterface { } try { - const get = bent( + const response = await got( `${this.URL}/simple/price?ids=${aSymbols.join( ',' - )}&vs_currencies=${this.baseCurrency.toLowerCase()}`, - 'GET', - 'json', - 200 - ); - const response = await get(); + )}&vs_currencies=${this.baseCurrency.toLowerCase()}` + ).json(); for (const symbol in response) { if (Object.prototype.hasOwnProperty.call(response, symbol)) { @@ -174,8 +165,9 @@ export class CoinGeckoService implements DataProviderInterface { let items: LookupItem[] = []; try { - const get = bent(`${this.URL}/search?query=${query}`, 'GET', 'json', 200); - const { coins } = await get(); + const { coins } = await got( + `${this.URL}/search?query=${query}` + ).json(); items = coins.map(({ id: symbol, name }) => { return { diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index ec68dd2eb..a18d82449 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -3,9 +3,7 @@ import { Country } from '@ghostfolio/common/interfaces/country.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { Injectable } from '@nestjs/common'; import { SymbolProfile } from '@prisma/client'; -import bent from 'bent'; - -const getJSON = bent('json'); +import got from 'got'; @Injectable() export class TrackinsightDataEnhancerService implements DataEnhancerInterface { @@ -34,11 +32,13 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { return response; } - const profile = await getJSON( + const profile = await got( `${TrackinsightDataEnhancerService.baseUrl}/data-api/funds/${symbol}.json` - ).catch(() => { - return {}; - }); + ) + .json() + .catch(() => { + return {}; + }); const isin = profile.isin?.split(';')?.[0]; @@ -46,15 +46,17 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { response.isin = isin; } - const holdings = await getJSON( + const holdings = await got( `${TrackinsightDataEnhancerService.baseUrl}/holdings/${symbol}.json` - ).catch(() => { - return getJSON( - `${TrackinsightDataEnhancerService.baseUrl}/holdings/${ - symbol.split('.')?.[0] - }.json` - ); - }); + ) + .json() + .catch(() => { + return got( + `${TrackinsightDataEnhancerService.baseUrl}/holdings/${ + symbol.split('.')?.[0] + }.json` + ); + }); if (holdings?.weight < 0.95) { // Skip if data is inaccurate diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index ed65c3f65..3d7ba65f4 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -10,8 +10,8 @@ import { DataProviderInfo } from '@ghostfolio/common/interfaces'; import { Granularity } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; -import bent from 'bent'; import { format, isAfter, isBefore, isSameDay } from 'date-fns'; +import got from 'got'; @Injectable() export class FinancialModelingPrepService implements DataProviderInterface { @@ -64,13 +64,9 @@ export class FinancialModelingPrepService implements DataProviderInterface { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { try { - const get = bent( - `${this.URL}/historical-price-full/${aSymbol}?apikey=${this.apiKey}`, - 'GET', - 'json', - 200 - ); - const { historical } = await get(); + const { historical } = await got( + `${this.URL}/historical-price-full/${aSymbol}?apikey=${this.apiKey}` + ).json(); const result: { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; @@ -115,13 +111,9 @@ export class FinancialModelingPrepService implements DataProviderInterface { } try { - const get = bent( - `${this.URL}/quote/${aSymbols.join(',')}?apikey=${this.apiKey}`, - 'GET', - 'json', - 200 - ); - const response = await get(); + const response = await got( + `${this.URL}/quote/${aSymbols.join(',')}?apikey=${this.apiKey}` + ).json(); for (const { price, symbol } of response) { results[symbol] = { @@ -153,13 +145,9 @@ export class FinancialModelingPrepService implements DataProviderInterface { let items: LookupItem[] = []; try { - const get = bent( - `${this.URL}/search?query=${query}&apikey=${this.apiKey}`, - 'GET', - 'json', - 200 - ); - const result = await get(); + const result = await got( + `${this.URL}/search?query=${query}&apikey=${this.apiKey}` + ).json(); items = result.map(({ currency, name, symbol }) => { return { diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 7b3933532..adf14e43f 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -14,10 +14,10 @@ import { import { Granularity } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; -import bent from 'bent'; import * as cheerio from 'cheerio'; import { isUUID } from 'class-validator'; import { addDays, format, isBefore } from 'date-fns'; +import got from 'got'; @Injectable() export class ManualService implements DataProviderInterface { @@ -95,10 +95,9 @@ export class ManualService implements DataProviderInterface { return {}; } - const get = bent(url, 'GET', 'string', 200, headers); + const { body } = await got(url, { headers }); - const html = await get(); - const $ = cheerio.load(html); + const $ = cheerio.load(body); const value = extractNumberFromString($(selector).text()); diff --git a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts index 053391a8a..307855aaf 100644 --- a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts +++ b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts @@ -10,8 +10,8 @@ import { DATE_FORMAT, getYesterday } from '@ghostfolio/common/helper'; import { Granularity } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; -import bent from 'bent'; import { format } from 'date-fns'; +import got from 'got'; @Injectable() export class RapidApiService implements DataProviderInterface { @@ -135,19 +135,17 @@ export class RapidApiService implements DataProviderInterface { oneYearAgo: { value: number; valueText: string }; }> { try { - const get = bent( + const { fgi } = await got( `https://fear-and-greed-index.p.rapidapi.com/v1/fgi`, - 'GET', - 'json', - 200, { - useQueryString: true, - 'x-rapidapi-host': 'fear-and-greed-index.p.rapidapi.com', - 'x-rapidapi-key': this.configurationService.get('RAPID_API_API_KEY') + headers: { + useQueryString: 'true', + 'x-rapidapi-host': 'fear-and-greed-index.p.rapidapi.com', + 'x-rapidapi-key': this.configurationService.get('RAPID_API_API_KEY') + } } - ); + ).json(); - const { fgi } = await get(); return fgi; } catch (error) { Logger.error(error, 'RapidApiService'); diff --git a/package.json b/package.json index 20f28fa44..9057f4328 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,6 @@ "@simplewebauthn/server": "5.2.1", "@stripe/stripe-js": "1.47.0", "alphavantage": "2.2.0", - "bent": "7.3.12", "big.js": "6.2.1", "body-parser": "1.20.1", "bootstrap": "4.6.0", diff --git a/yarn.lock b/yarn.lock index 44a88e311..fddf81de8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7339,15 +7339,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bent@7.3.12: - version "7.3.12" - resolved "https://registry.yarnpkg.com/bent/-/bent-7.3.12.tgz#e0a2775d4425e7674c64b78b242af4f49da6b035" - integrity sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w== - dependencies: - bytesish "^0.4.1" - caseless "~0.12.0" - is-stream "^2.0.0" - better-opn@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-2.1.1.tgz#94a55b4695dc79288f31d7d0e5f658320759f7c6" @@ -7646,11 +7637,6 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -bytesish@^0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/bytesish/-/bytesish-0.4.4.tgz#f3b535a0f1153747427aee27256748cff92347e6" - integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== - cacache@17.1.3, cacache@^17.0.0: version "17.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" From f7c04e469a039852884a78a143991ce45871c24e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 11 Aug 2023 20:24:23 +0200 Subject: [PATCH 04/23] Release 1.300.0 (#2232) --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aae4e412..0db0895aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.300.0 - 2023-08-11 ### Added diff --git a/package.json b/package.json index 9057f4328..77dcdb269 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.299.1", + "version": "1.300.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "scripts": { From 9036f53e7d351a687a6cc5b9ba3a0456e528ac28 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:50:01 +0200 Subject: [PATCH 05/23] Reset benchmark in user settings (#2233) --- apps/api/src/app/user/user.service.ts | 14 +++++++++----- .../configuration/configuration.service.ts | 3 ++- libs/common/src/lib/config.ts | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 3c1e42abf..bbb17b69c 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -4,7 +4,11 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { TagService } from '@ghostfolio/api/services/tag/tag.service'; -import { PROPERTY_IS_READ_ONLY_MODE, locale } from '@ghostfolio/common/config'; +import { + DEFAULT_CURRENCY, + PROPERTY_IS_READ_ONLY_MODE, + locale +} from '@ghostfolio/common/config'; import { User as IUser, UserSettings } from '@ghostfolio/common/interfaces'; import { getPermissions, @@ -21,8 +25,6 @@ const crypto = require('crypto'); @Injectable() export class UserService { - public static DEFAULT_CURRENCY = 'USD'; - private baseCurrency: string; public constructor( @@ -145,8 +147,7 @@ export class UserService { // Set default value for base currency if (!(user.Settings.settings as UserSettings)?.baseCurrency) { - (user.Settings.settings as UserSettings).baseCurrency = - UserService.DEFAULT_CURRENCY; + (user.Settings.settings as UserSettings).baseCurrency = DEFAULT_CURRENCY; } // Set default value for date range @@ -186,6 +187,9 @@ export class UserService { if (Analytics?.activityCount % frequency === 1) { currentPermissions.push(permissions.enableSubscriptionInterstitial); } + + // Reset benchmark + user.Settings.settings.benchmark = undefined; } if (user.subscription?.type === 'Premium') { diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index e522aeccd..fa9ada3d7 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -1,4 +1,5 @@ import { Environment } from '@ghostfolio/api/services/interfaces/environment.interface'; +import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { Injectable } from '@nestjs/common'; import { DataSource } from '@prisma/client'; import { bool, cleanEnv, host, json, num, port, str } from 'envalid'; @@ -13,7 +14,7 @@ export class ConfigurationService { ALPHA_VANTAGE_API_KEY: str({ default: '' }), BASE_CURRENCY: str({ choices: ['AUD', 'CAD', 'CNY', 'EUR', 'GBP', 'JPY', 'RUB', 'USD'], - default: 'USD' + default: DEFAULT_CURRENCY }), BETTER_UPTIME_API_KEY: str({ default: '' }), CACHE_QUOTES_TTL: num({ default: 1 }), diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 7977a2628..c5c627de8 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -35,6 +35,7 @@ export const DATA_GATHERING_QUEUE = 'DATA_GATHERING_QUEUE'; export const DATA_GATHERING_QUEUE_PRIORITY_LOW = Number.MAX_SAFE_INTEGER; export const DATA_GATHERING_QUEUE_PRIORITY_HIGH = 1; +export const DEFAULT_CURRENCY = 'USD'; export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_LANGUAGE_CODE = 'en'; export const DEFAULT_PAGE_SIZE = 50; From 183ac8fa2b976992eb25ec2bbf646f5c1175a4c8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:51:35 +0200 Subject: [PATCH 06/23] Feature/add data export to user account page (#2234) * Add data export * Update changelog --- CHANGELOG.md | 20 ++++++++----- .../pages/account/account-page.component.ts | 23 ++++++++++++++- .../src/app/pages/account/account-page.html | 8 ++++++ apps/client/src/locales/messages.de.xlf | 28 ++++++++++++------- apps/client/src/locales/messages.es.xlf | 28 ++++++++++++------- apps/client/src/locales/messages.fr.xlf | 28 ++++++++++++------- apps/client/src/locales/messages.it.xlf | 28 ++++++++++++------- apps/client/src/locales/messages.nl.xlf | 28 ++++++++++++------- apps/client/src/locales/messages.pt.xlf | 28 ++++++++++++------- apps/client/src/locales/messages.xlf | 27 +++++++++++------- 10 files changed, 168 insertions(+), 78 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0db0895aa..9cd9ed8c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added the data export feature to the user account page + ## 1.300.0 - 2023-08-11 ### Added @@ -611,7 +617,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Changed the slide toggles to checkboxes on the account page +- Changed the slide toggles to checkboxes on the user account page - Changed the slide toggles to checkboxes in the admin control panel - Increased the density of the theme - Migrated the style of various components to `@angular/material` `15` (mdc) @@ -1173,7 +1179,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Improved the language selector on the account page +- Improved the language selector on the user account page - Improved the wording in the _X-ray_ section (net worth instead of investment) - Extended the asset profile details dialog in the admin control panel - Updated the browserslist database @@ -1591,7 +1597,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Added a language selector to the account page +- Added a language selector to the user account page - Added support for translated labels in the value component ### Changed @@ -1920,7 +1926,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Added the user id to the account page +- Added the user id to the user account page - Added a new view with jobs of the queue to the admin control panel ### Changed @@ -3575,7 +3581,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Respected the cash balance on the analysis page -- Improved the settings selectors on the account page +- Improved the settings selectors on the user account page - Harmonized the slogan to "Open Source Wealth Management Software" ### Fixed @@ -4041,7 +4047,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added a gradient to the line charts -- Added a selector to set the base currency on the account page +- Added a selector to set the base currency on the user account page ## 0.81.0 - 06.04.2021 @@ -4355,7 +4361,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Added the membership status to the account page +- Added the membership status to the user account page ### Fixed diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/account/account-page.component.ts index 5ab140265..0e4527eeb 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/account/account-page.component.ts @@ -21,7 +21,7 @@ import { } from '@ghostfolio/client/services/settings-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; -import { getDateFormatString } from '@ghostfolio/common/helper'; +import { downloadAsFile, getDateFormatString } from '@ghostfolio/common/helper'; import { Access, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { uniq } from 'lodash'; @@ -31,6 +31,7 @@ import { EMPTY, Subject } from 'rxjs'; import { catchError, switchMap, takeUntil } from 'rxjs/operators'; import { CreateOrUpdateAccessDialog } from './create-or-update-access-dialog/create-or-update-access-dialog.component'; +import { format, parseISO } from 'date-fns'; @Component({ host: { class: 'page' }, @@ -237,6 +238,26 @@ export class AccountPageComponent implements OnDestroy, OnInit { }); } + public onExport() { + this.dataService + .fetchExport() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((data) => { + for (const activity of data.activities) { + delete activity.id; + } + + downloadAsFile({ + content: data, + fileName: `ghostfolio-export-${format( + parseISO(data.meta.date), + 'yyyyMMddHHmm' + )}.json`, + format: 'json' + }); + }); + } + public onRedeemCoupon() { let couponCode = prompt($localize`Please enter your coupon code:`); couponCode = couponCode?.trim(); diff --git a/apps/client/src/app/pages/account/account-page.html b/apps/client/src/app/pages/account/account-page.html index fbf14544a..aeba71320 100644 --- a/apps/client/src/app/pages/account/account-page.html +++ b/apps/client/src/app/pages/account/account-page.html @@ -273,6 +273,14 @@
User ID
{{ user?.id }}
+
+
+
+ +
+
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 683bc61b8..c5eb2bdd8 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -622,7 +622,7 @@ Hinzufügen apps/client/src/app/components/admin-overview/admin-overview.html - 181 + 183 @@ -630,7 +630,7 @@ Verwaltung apps/client/src/app/components/admin-overview/admin-overview.html - 188 + 190 @@ -638,7 +638,7 @@ Cache leeren apps/client/src/app/components/admin-overview/admin-overview.html - 192 + 194 @@ -1570,7 +1570,7 @@ Bitte gebe deinen Gutscheincode ein: apps/client/src/app/pages/account/account-page.component.ts - 241 + 262 @@ -1578,7 +1578,7 @@ Gutscheincode konnte nicht eingelöst werden apps/client/src/app/pages/account/account-page.component.ts - 251 + 272 @@ -1586,7 +1586,7 @@ Gutscheincode wurde eingelöst apps/client/src/app/pages/account/account-page.component.ts - 263 + 284 @@ -1594,7 +1594,7 @@ Neu laden apps/client/src/app/pages/account/account-page.component.ts - 264 + 285 @@ -1602,7 +1602,7 @@ Möchtest du diese Anmeldemethode wirklich löschen? apps/client/src/app/pages/account/account-page.component.ts - 310 + 331 @@ -1726,7 +1726,7 @@ Zugangsberechtigung apps/client/src/app/pages/account/account-page.html - 282 + 290 @@ -2878,7 +2878,7 @@ Automatisch apps/client/src/app/pages/account/account-page.component.ts - 46 + 47 @@ -7249,6 +7249,14 @@ 128 + + Export Data + Daten exportieren + + apps/client/src/app/pages/account/account-page.html + 280 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 2bdc4bc6d..532ad66a2 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -623,7 +623,7 @@ Añadir apps/client/src/app/components/admin-overview/admin-overview.html - 181 + 183 @@ -631,7 +631,7 @@ Tareas domésticas apps/client/src/app/components/admin-overview/admin-overview.html - 188 + 190 @@ -639,7 +639,7 @@ Limpiar caché apps/client/src/app/components/admin-overview/admin-overview.html - 192 + 194 @@ -1571,7 +1571,7 @@ Por favor, ingresa tu código de cupón: apps/client/src/app/pages/account/account-page.component.ts - 241 + 262 @@ -1579,7 +1579,7 @@ No se puede canjear este código de cupón apps/client/src/app/pages/account/account-page.component.ts - 251 + 272 @@ -1587,7 +1587,7 @@ El codigo de cupón ha sido canjeado apps/client/src/app/pages/account/account-page.component.ts - 263 + 284 @@ -1595,7 +1595,7 @@ Refrescar apps/client/src/app/pages/account/account-page.component.ts - 264 + 285 @@ -1603,7 +1603,7 @@ ¿Estás seguro de eliminar este método de acceso? apps/client/src/app/pages/account/account-page.component.ts - 310 + 331 @@ -1727,7 +1727,7 @@ Acceso concedido apps/client/src/app/pages/account/account-page.html - 282 + 290 @@ -2879,7 +2879,7 @@ Automático apps/client/src/app/pages/account/account-page.component.ts - 46 + 47 @@ -7250,6 +7250,14 @@ 128 + + Export Data + Export Data + + apps/client/src/app/pages/account/account-page.html + 280 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 5af9678fc..1a3c726c0 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -870,7 +870,7 @@ Ajouter apps/client/src/app/components/admin-overview/admin-overview.html - 181 + 183 @@ -878,7 +878,7 @@ Maintenance apps/client/src/app/components/admin-overview/admin-overview.html - 188 + 190 @@ -886,7 +886,7 @@ Vider le Cache apps/client/src/app/components/admin-overview/admin-overview.html - 192 + 194 @@ -1854,7 +1854,7 @@ Auto apps/client/src/app/pages/account/account-page.component.ts - 46 + 47 @@ -1862,7 +1862,7 @@ Veuillez entrer votre code promotionnel : apps/client/src/app/pages/account/account-page.component.ts - 241 + 262 @@ -1870,7 +1870,7 @@ Le code promotionnel n'a pas pu être appliqué apps/client/src/app/pages/account/account-page.component.ts - 251 + 272 @@ -1878,7 +1878,7 @@ Le code promotionnel a été appliqué apps/client/src/app/pages/account/account-page.component.ts - 263 + 284 @@ -1886,7 +1886,7 @@ Rafraîchir apps/client/src/app/pages/account/account-page.component.ts - 264 + 285 @@ -1894,7 +1894,7 @@ Voulez-vous vraiment supprimer cette méthode de connexion ? apps/client/src/app/pages/account/account-page.component.ts - 310 + 331 @@ -2098,7 +2098,7 @@ Accès donné apps/client/src/app/pages/account/account-page.html - 282 + 290 @@ -7249,6 +7249,14 @@ 128 + + Export Data + Export Data + + apps/client/src/app/pages/account/account-page.html + 280 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 07462d173..0850040b4 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -623,7 +623,7 @@ Aggiungi apps/client/src/app/components/admin-overview/admin-overview.html - 181 + 183 @@ -631,7 +631,7 @@ Bilancio domestico apps/client/src/app/components/admin-overview/admin-overview.html - 188 + 190 @@ -639,7 +639,7 @@ Svuota la cache apps/client/src/app/components/admin-overview/admin-overview.html - 192 + 194 @@ -1571,7 +1571,7 @@ Inserisci il tuo codice del buono: apps/client/src/app/pages/account/account-page.component.ts - 241 + 262 @@ -1579,7 +1579,7 @@ Impossibile riscattare il codice del buono apps/client/src/app/pages/account/account-page.component.ts - 251 + 272 @@ -1587,7 +1587,7 @@ Il codice del buono è stato riscattato apps/client/src/app/pages/account/account-page.component.ts - 263 + 284 @@ -1595,7 +1595,7 @@ Ricarica apps/client/src/app/pages/account/account-page.component.ts - 264 + 285 @@ -1603,7 +1603,7 @@ Vuoi davvero rimuovere questo metodo di accesso? apps/client/src/app/pages/account/account-page.component.ts - 310 + 331 @@ -1727,7 +1727,7 @@ Accesso concesso apps/client/src/app/pages/account/account-page.html - 282 + 290 @@ -2879,7 +2879,7 @@ Auto apps/client/src/app/pages/account/account-page.component.ts - 46 + 47 @@ -7250,6 +7250,14 @@ 128 + + Export Data + Export Data + + apps/client/src/app/pages/account/account-page.html + 280 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index ed453c46b..1d51a4bbe 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -622,7 +622,7 @@ Toevoegen apps/client/src/app/components/admin-overview/admin-overview.html - 181 + 183 @@ -630,7 +630,7 @@ Huishouding apps/client/src/app/components/admin-overview/admin-overview.html - 188 + 190 @@ -638,7 +638,7 @@ Cache legen apps/client/src/app/components/admin-overview/admin-overview.html - 192 + 194 @@ -1570,7 +1570,7 @@ Voer uw couponcode in: apps/client/src/app/pages/account/account-page.component.ts - 241 + 262 @@ -1578,7 +1578,7 @@ Kon kortingscode niet inwisselen apps/client/src/app/pages/account/account-page.component.ts - 251 + 272 @@ -1586,7 +1586,7 @@ Couponcode is ingewisseld apps/client/src/app/pages/account/account-page.component.ts - 263 + 284 @@ -1594,7 +1594,7 @@ Herladen apps/client/src/app/pages/account/account-page.component.ts - 264 + 285 @@ -1602,7 +1602,7 @@ Wilt u deze aanmeldingsmethode echt verwijderen? apps/client/src/app/pages/account/account-page.component.ts - 310 + 331 @@ -1726,7 +1726,7 @@ Verleende toegang apps/client/src/app/pages/account/account-page.html - 282 + 290 @@ -2878,7 +2878,7 @@ Auto apps/client/src/app/pages/account/account-page.component.ts - 46 + 47 @@ -7249,6 +7249,14 @@ 128 + + Export Data + Export Data + + apps/client/src/app/pages/account/account-page.html + 280 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index ff884ded9..4a9a2e538 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -750,7 +750,7 @@ Adicionar apps/client/src/app/components/admin-overview/admin-overview.html - 181 + 183 @@ -758,7 +758,7 @@ Manutenção apps/client/src/app/components/admin-overview/admin-overview.html - 188 + 190 @@ -766,7 +766,7 @@ Limpar Cache apps/client/src/app/components/admin-overview/admin-overview.html - 192 + 194 @@ -1838,7 +1838,7 @@ Auto apps/client/src/app/pages/account/account-page.component.ts - 46 + 47 @@ -1846,7 +1846,7 @@ Por favor, insira o seu código de cupão: apps/client/src/app/pages/account/account-page.component.ts - 241 + 262 @@ -1854,7 +1854,7 @@ Não foi possível resgatar o código de cupão apps/client/src/app/pages/account/account-page.component.ts - 251 + 272 @@ -1862,7 +1862,7 @@ Código de cupão foi resgatado apps/client/src/app/pages/account/account-page.component.ts - 263 + 284 @@ -1870,7 +1870,7 @@ Atualizar apps/client/src/app/pages/account/account-page.component.ts - 264 + 285 @@ -1878,7 +1878,7 @@ Deseja realmente remover este método de início de sessão? apps/client/src/app/pages/account/account-page.component.ts - 310 + 331 @@ -2062,7 +2062,7 @@ Acesso Concedido apps/client/src/app/pages/account/account-page.html - 282 + 290 @@ -7249,6 +7249,14 @@ 128 + + Export Data + Export Data + + apps/client/src/app/pages/account/account-page.html + 280 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 6da2b478d..a0f460764 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -572,21 +572,21 @@ Add apps/client/src/app/components/admin-overview/admin-overview.html - 181 + 183 Housekeeping apps/client/src/app/components/admin-overview/admin-overview.html - 188 + 190 Flush Cache apps/client/src/app/components/admin-overview/admin-overview.html - 192 + 194 @@ -1447,35 +1447,35 @@ Please enter your coupon code: apps/client/src/app/pages/account/account-page.component.ts - 241 + 262 Could not redeem coupon code apps/client/src/app/pages/account/account-page.component.ts - 251 + 272 Coupon code has been redeemed apps/client/src/app/pages/account/account-page.component.ts - 263 + 284 Reload apps/client/src/app/pages/account/account-page.component.ts - 264 + 285 Do you really want to remove this sign in method? apps/client/src/app/pages/account/account-page.component.ts - 310 + 331 @@ -1585,7 +1585,7 @@ Granted Access apps/client/src/app/pages/account/account-page.html - 282 + 290 @@ -2628,7 +2628,7 @@ Auto apps/client/src/app/pages/account/account-page.component.ts - 46 + 47 @@ -6789,6 +6789,13 @@ 128 + + Export Data + + apps/client/src/app/pages/account/account-page.html + 280 + + From 3e98f097ef670869176894176516e461dc15f483 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 13 Aug 2023 09:24:54 +0200 Subject: [PATCH 07/23] Refactor account page to user account page (#2235) * Refactor account page to user account page --- apps/client/src/app/app-routing.module.ts | 4 ++-- .../create-or-update-access-dialog.component.ts | 0 .../create-or-update-access-dialog.html | 0 .../create-or-update-access-dialog.module.ts | 0 .../create-or-update-access-dialog.scss | 0 .../interfaces/interfaces.ts | 0 .../user-account-page-routing.module.ts} | 6 +++--- .../user-account-page.component.ts} | 10 +++++----- .../user-account-page.html} | 0 .../user-account-page.module.ts} | 12 ++++++------ .../user-account-page.scss} | 0 11 files changed, 16 insertions(+), 16 deletions(-) rename apps/client/src/app/pages/{account => user-account}/create-or-update-access-dialog/create-or-update-access-dialog.component.ts (100%) rename apps/client/src/app/pages/{account => user-account}/create-or-update-access-dialog/create-or-update-access-dialog.html (100%) rename apps/client/src/app/pages/{account => user-account}/create-or-update-access-dialog/create-or-update-access-dialog.module.ts (100%) rename apps/client/src/app/pages/{account => user-account}/create-or-update-access-dialog/create-or-update-access-dialog.scss (100%) rename apps/client/src/app/pages/{account => user-account}/create-or-update-access-dialog/interfaces/interfaces.ts (100%) rename apps/client/src/app/pages/{account/account-page-routing.module.ts => user-account/user-account-page-routing.module.ts} (69%) rename apps/client/src/app/pages/{account/account-page.component.ts => user-account/user-account-page.component.ts} (98%) rename apps/client/src/app/pages/{account/account-page.html => user-account/user-account-page.html} (100%) rename apps/client/src/app/pages/{account/account-page.module.ts => user-account/user-account-page.module.ts} (81%) rename apps/client/src/app/pages/{account/account-page.scss => user-account/user-account-page.scss} (100%) diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index e9eed48a2..7ff6ead61 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -21,8 +21,8 @@ const routes: Routes = [ { path: 'account', loadChildren: () => - import('./pages/account/account-page.module').then( - (m) => m.AccountPageModule + import('./pages/user-account/user-account-page.module').then( + (m) => m.UserAccountPageModule ) }, { diff --git a/apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.component.ts b/apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.component.ts similarity index 100% rename from apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.component.ts rename to apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.component.ts diff --git a/apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html b/apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html similarity index 100% rename from apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html rename to apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html diff --git a/apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.module.ts b/apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.module.ts similarity index 100% rename from apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.module.ts rename to apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.module.ts diff --git a/apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.scss b/apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.scss similarity index 100% rename from apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.scss rename to apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.scss diff --git a/apps/client/src/app/pages/account/create-or-update-access-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/user-account/create-or-update-access-dialog/interfaces/interfaces.ts similarity index 100% rename from apps/client/src/app/pages/account/create-or-update-access-dialog/interfaces/interfaces.ts rename to apps/client/src/app/pages/user-account/create-or-update-access-dialog/interfaces/interfaces.ts diff --git a/apps/client/src/app/pages/account/account-page-routing.module.ts b/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts similarity index 69% rename from apps/client/src/app/pages/account/account-page-routing.module.ts rename to apps/client/src/app/pages/user-account/user-account-page-routing.module.ts index e9d07bd77..f52591d21 100644 --- a/apps/client/src/app/pages/account/account-page-routing.module.ts +++ b/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts @@ -2,12 +2,12 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { AccountPageComponent } from './account-page.component'; +import { UserAccountPageComponent } from './user-account-page.component'; const routes: Routes = [ { canActivate: [AuthGuard], - component: AccountPageComponent, + component: UserAccountPageComponent, path: '', title: $localize`My Ghostfolio` } @@ -17,4 +17,4 @@ const routes: Routes = [ imports: [RouterModule.forChild(routes)], exports: [RouterModule] }) -export class AccountPageRoutingModule {} +export class UserAccountPageRoutingModule {} diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/user-account/user-account-page.component.ts similarity index 98% rename from apps/client/src/app/pages/account/account-page.component.ts rename to apps/client/src/app/pages/user-account/user-account-page.component.ts index 0e4527eeb..f59d1ed40 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/user-account/user-account-page.component.ts @@ -24,6 +24,7 @@ import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { downloadAsFile, getDateFormatString } from '@ghostfolio/common/helper'; import { Access, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { format, parseISO } from 'date-fns'; import { uniq } from 'lodash'; import { DeviceDetectorService } from 'ngx-device-detector'; import { StripeService } from 'ngx-stripe'; @@ -31,15 +32,14 @@ import { EMPTY, Subject } from 'rxjs'; import { catchError, switchMap, takeUntil } from 'rxjs/operators'; import { CreateOrUpdateAccessDialog } from './create-or-update-access-dialog/create-or-update-access-dialog.component'; -import { format, parseISO } from 'date-fns'; @Component({ host: { class: 'page' }, - selector: 'gf-account-page', - styleUrls: ['./account-page.scss'], - templateUrl: './account-page.html' + selector: 'gf-user-account-page', + styleUrls: ['./user-account-page.scss'], + templateUrl: './user-account-page.html' }) -export class AccountPageComponent implements OnDestroy, OnInit { +export class UserAccountPageComponent implements OnDestroy, OnInit { @ViewChild('toggleSignInWithFingerprintEnabledElement') signInWithFingerprintElement: MatCheckbox; diff --git a/apps/client/src/app/pages/account/account-page.html b/apps/client/src/app/pages/user-account/user-account-page.html similarity index 100% rename from apps/client/src/app/pages/account/account-page.html rename to apps/client/src/app/pages/user-account/user-account-page.html diff --git a/apps/client/src/app/pages/account/account-page.module.ts b/apps/client/src/app/pages/user-account/user-account-page.module.ts similarity index 81% rename from apps/client/src/app/pages/account/account-page.module.ts rename to apps/client/src/app/pages/user-account/user-account-page.module.ts index 77e32f2f6..240441ada 100644 --- a/apps/client/src/app/pages/account/account-page.module.ts +++ b/apps/client/src/app/pages/user-account/user-account-page.module.ts @@ -12,14 +12,13 @@ import { GfPortfolioAccessTableModule } from '@ghostfolio/client/components/acce import { GfPremiumIndicatorModule } from '@ghostfolio/ui/premium-indicator'; import { GfValueModule } from '@ghostfolio/ui/value'; -import { AccountPageRoutingModule } from './account-page-routing.module'; -import { AccountPageComponent } from './account-page.component'; import { GfCreateOrUpdateAccessDialogModule } from './create-or-update-access-dialog/create-or-update-access-dialog.module'; +import { UserAccountPageRoutingModule } from './user-account-page-routing.module'; +import { UserAccountPageComponent } from './user-account-page.component'; @NgModule({ - declarations: [AccountPageComponent], + declarations: [UserAccountPageComponent], imports: [ - AccountPageRoutingModule, CommonModule, FormsModule, GfCreateOrUpdateAccessDialogModule, @@ -33,7 +32,8 @@ import { GfCreateOrUpdateAccessDialogModule } from './create-or-update-access-di MatFormFieldModule, MatSelectModule, ReactiveFormsModule, - RouterModule + RouterModule, + UserAccountPageRoutingModule ] }) -export class AccountPageModule {} +export class UserAccountPageModule {} diff --git a/apps/client/src/app/pages/account/account-page.scss b/apps/client/src/app/pages/user-account/user-account-page.scss similarity index 100% rename from apps/client/src/app/pages/account/account-page.scss rename to apps/client/src/app/pages/user-account/user-account-page.scss From 6c9779fb0ddd6cda08e8557058d5e35e6a16d9ec Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 15 Aug 2023 19:24:31 +0200 Subject: [PATCH 08/23] Bugfix/change date creation from string using parse iso (#2236) * Change date creation using parseISO parseISO provides consistent date parsing across different time zones * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/app/admin/admin.controller.ts | 6 +++--- apps/api/src/app/exchange-rate/exchange-rate.controller.ts | 3 ++- apps/api/src/app/symbol/symbol.controller.ts | 3 ++- .../admin-market-data-detail.component.ts | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cd9ed8c1..3b989fb80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the data export feature to the user account page +### Fixed + +- Fixed an issue with the date parsing in the historical market data editor of the admin control panel + ## 1.300.0 - 2023-08-11 ### Added diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 8e3fb2871..67e106ff8 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -38,7 +38,7 @@ import { import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; import { DataSource, MarketData, Prisma, SymbolProfile } from '@prisma/client'; -import { isDate } from 'date-fns'; +import { isDate, parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { AdminService } from './admin.service'; @@ -233,7 +233,7 @@ export class AdminController { ); } - const date = new Date(dateString); + const date = parseISO(dateString); if (!isDate(date)) { throw new HttpException( @@ -333,7 +333,7 @@ export class AdminController { ); } - const date = new Date(dateString); + const date = parseISO(dateString); return this.marketDataService.updateMarketData({ data: { marketPrice: data.marketPrice, state: 'CLOSE' }, diff --git a/apps/api/src/app/exchange-rate/exchange-rate.controller.ts b/apps/api/src/app/exchange-rate/exchange-rate.controller.ts index ca9b67ced..40ff9d3c8 100644 --- a/apps/api/src/app/exchange-rate/exchange-rate.controller.ts +++ b/apps/api/src/app/exchange-rate/exchange-rate.controller.ts @@ -10,6 +10,7 @@ import { AuthGuard } from '@nestjs/passport'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { ExchangeRateService } from './exchange-rate.service'; +import { parseISO } from 'date-fns'; @Controller('exchange-rate') export class ExchangeRateController { @@ -23,7 +24,7 @@ export class ExchangeRateController { @Param('dateString') dateString: string, @Param('symbol') symbol: string ): Promise { - const date = new Date(dateString); + const date = parseISO(dateString); const exchangeRate = await this.exchangeRateService.getExchangeRate({ date, diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index da73382a6..e09b08f5b 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/symbol/symbol.controller.ts @@ -21,6 +21,7 @@ import { isDate, isEmpty } from 'lodash'; import { LookupItem } from './interfaces/lookup-item.interface'; import { SymbolItem } from './interfaces/symbol-item.interface'; import { SymbolService } from './symbol.service'; +import { parseISO } from 'date-fns'; @Controller('symbol') export class SymbolController { @@ -93,7 +94,7 @@ export class SymbolController { @Param('dateString') dateString: string, @Param('symbol') symbol: string ): Promise { - const date = new Date(dateString); + const date = parseISO(dateString); if (!isDate(date)) { throw new HttpException( diff --git a/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts b/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts index 767891a2a..cff078e37 100644 --- a/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts +++ b/apps/client/src/app/components/admin-market-data-detail/admin-market-data-detail.component.ts @@ -154,7 +154,7 @@ export class AdminMarketDataDetailComponent implements OnChanges, OnInit { day: string; yearMonth: string; }) { - const date = new Date(`${yearMonth}-${day}`); + const date = parseISO(`${yearMonth}-${day}`); const marketPrice = this.marketDataByMonth[yearMonth]?.[day]?.marketPrice; if (isSameDay(date, new Date())) { From 18835149e2f835e70273d9c5c7d885ae5aad4d73 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 16 Aug 2023 20:32:54 +0200 Subject: [PATCH 09/23] Add repository (#2189) --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 77dcdb269..89d95aa73 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "1.300.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", + "repository": "https://github.com/ghostfolio/ghostfolio", "scripts": { "affected": "nx affected", "affected:apps": "nx affected:apps", From 0fd3db32280b34f67417e17839c05afb928de214 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 17 Aug 2023 20:23:23 +0200 Subject: [PATCH 10/23] Bugfix/fix cash position rows in holdings table (#2237) * Fix cash position rows * Update changelog --- CHANGELOG.md | 1 + .../components/home-summary/home-summary.component.ts | 2 +- .../allocations/allocations-page.component.ts | 10 +++++++++- .../pages/portfolio/allocations/allocations-page.html | 2 +- .../app/pages/portfolio/fire/fire-page.component.ts | 2 +- .../portfolio/holdings/holdings-page.component.ts | 6 +++++- apps/client/src/app/services/data.service.ts | 10 +--------- .../src/lib/interfaces/portfolio-position.interface.ts | 2 ++ .../lib/holdings-table/holdings-table.component.html | 5 ++++- .../lib/holdings-table/holdings-table.component.scss | 6 ------ .../src/lib/holdings-table/holdings-table.component.ts | 2 +- 11 files changed, 26 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b989fb80..68043fe9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed the rows with cash positions in the holdings table - Fixed an issue with the date parsing in the historical market data editor of the admin control panel ## 1.300.0 - 2023-08-11 diff --git a/apps/client/src/app/components/home-summary/home-summary.component.ts b/apps/client/src/app/components/home-summary/home-summary.component.ts index 6ea7b8847..358fd1613 100644 --- a/apps/client/src/app/components/home-summary/home-summary.component.ts +++ b/apps/client/src/app/components/home-summary/home-summary.component.ts @@ -101,7 +101,7 @@ export class HomeSummaryComponent implements OnDestroy, OnInit { this.isLoading = true; this.dataService - .fetchPortfolioDetails({}) + .fetchPortfolioDetails() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(({ summary }) => { this.summary = summary; diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index 00f7f112d..844f04d9c 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -72,7 +72,13 @@ export class AllocationsPageComponent implements OnDestroy, OnInit { public positions: { [symbol: string]: Pick< PortfolioPosition, - 'assetClass' | 'assetSubClass' | 'currency' | 'exchange' | 'name' + | 'assetClass' + | 'assetClassLabel' + | 'assetSubClass' + | 'assetSubClassLabel' + | 'currency' + | 'exchange' + | 'name' > & { etfProvider: string; value: number }; }; public sectors: { @@ -341,7 +347,9 @@ export class AllocationsPageComponent implements OnDestroy, OnInit { this.positions[symbol] = { value, assetClass: position.assetClass, + assetClassLabel: translate(position.assetClass), assetSubClass: position.assetSubClass, + assetSubClassLabel: translate(position.assetSubClass), currency: position.currency, etfProvider: this.extractEtfProvider({ assetSubClass: position.assetSubClass, diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html index 11de2c84c..f5b30ae20 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html @@ -93,7 +93,7 @@ [baseCurrency]="user?.settings?.baseCurrency" [colorScheme]="user?.settings?.colorScheme" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView" - [keys]="['assetClass', 'assetSubClass']" + [keys]="['assetClassLabel', 'assetSubClassLabel']" [locale]="user?.settings?.locale" [positions]="positions" > diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index ab632b2e8..551f2066e 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -44,7 +44,7 @@ export class FirePageComponent implements OnDestroy, OnInit { this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.dataService - .fetchPortfolioDetails({}) + .fetchPortfolioDetails() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(({ summary }) => { if (summary.cash === null || summary.currentValue === null) { diff --git a/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts b/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts index 30e91bc7a..c4201a6ca 100644 --- a/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts +++ b/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts @@ -164,7 +164,11 @@ export class HoldingsPageComponent implements OnDestroy, OnInit { for (const [symbol, position] of Object.entries( this.portfolioDetails.holdings )) { - this.positionsArray.push(position); + this.positionsArray.push({ + ...position, + assetClassLabel: translate(position.assetClass), + assetSubClassLabel: translate(position.assetSubClass) + }); } } diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 3e769dda6..82b4acca0 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -341,7 +341,7 @@ export class DataService { filters }: { filters?: Filter[]; - }): Observable { + } = {}): Observable { return this.http .get('/api/v1/portfolio/details', { params: this.buildFiltersAsQueryParams({ filters }) @@ -356,14 +356,6 @@ export class DataService { if (response.holdings) { for (const symbol of Object.keys(response.holdings)) { - response.holdings[symbol].assetClass = translate( - response.holdings[symbol].assetClass - ); - - response.holdings[symbol].assetSubClass = translate( - response.holdings[symbol].assetSubClass - ); - response.holdings[symbol].dateOfFirstActivity = response.holdings[ symbol ].dateOfFirstActivity diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts index 76334ea0b..0eebb2975 100644 --- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts @@ -7,7 +7,9 @@ import { Sector } from './sector.interface'; export interface PortfolioPosition { allocationInPercentage: number; assetClass?: AssetClass; + assetClassLabel?: string; assetSubClass?: AssetSubClass | 'CASH'; + assetSubClassLabel?: string; countries: Country[]; currency: string; dataSource: DataSource; diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.html b/libs/ui/src/lib/holdings-table/holdings-table.component.html index 29e3eeb1f..e5d7d3246 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.html +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -28,8 +28,11 @@ Name -
+
{{ element.name }} + ({{ element.assetSubClassLabel }})
{{ element.symbol }} diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.scss b/libs/ui/src/lib/holdings-table/holdings-table.component.scss index e96a64f63..a33b78aff 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.scss +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.scss @@ -14,12 +14,6 @@ } } } - - .mat-mdc-row { - &.cursor-pointer { - cursor: pointer; - } - } } } } diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.ts b/libs/ui/src/lib/holdings-table/holdings-table.component.ts index e11cf69d4..e341e21b2 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.ts +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.ts @@ -41,7 +41,7 @@ export class HoldingsTableComponent implements OnChanges, OnDestroy, OnInit { public dataSource: MatTableDataSource = new MatTableDataSource(); public displayedColumns = []; - public ignoreAssetSubClasses = [AssetClass.CASH.toString()]; + public ignoreAssetSubClasses = [AssetClass.CASH]; public isLoading = true; public routeQueryParams: Subscription; From 6cf65387190eb3ea1bd91b558595b7660cbc6b3b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 18 Aug 2023 19:33:00 +0200 Subject: [PATCH 11/23] Feature/add currencies preset to historical market data table (#2243) * Add currencies preset * Update locales * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.service.ts | 40 ++++- .../admin-market-data.component.ts | 5 + apps/client/src/locales/messages.de.xlf | 142 +++++++++--------- apps/client/src/locales/messages.es.xlf | 142 +++++++++--------- apps/client/src/locales/messages.fr.xlf | 142 +++++++++--------- apps/client/src/locales/messages.it.xlf | 142 +++++++++--------- apps/client/src/locales/messages.nl.xlf | 142 +++++++++--------- apps/client/src/locales/messages.pt.xlf | 142 +++++++++--------- apps/client/src/locales/messages.xlf | 141 ++++++++--------- .../src/lib/types/market-data-preset.type.ts | 5 +- 11 files changed, 569 insertions(+), 475 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68043fe9d..8481f343a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added the data export feature to the user account page +- Added a currencies preset to the historical market data table of the admin control panel ### Fixed diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 996914c4e..7563909dd 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -6,14 +6,12 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; -import { - DEFAULT_PAGE_SIZE, - PROPERTY_CURRENCIES -} from '@ghostfolio/common/config'; +import { PROPERTY_CURRENCIES } from '@ghostfolio/common/config'; import { AdminData, AdminMarketData, AdminMarketDataDetails, + AdminMarketDataItem, Filter, UniqueAsset } from '@ghostfolio/common/interfaces'; @@ -121,7 +119,9 @@ export class AdminService { [{ symbol: 'asc' }]; const where: Prisma.SymbolProfileWhereInput = {}; - if ( + if (presetId === 'CURRENCIES') { + return this.getMarketDataForCurrencies(); + } else if ( presetId === 'ETF_WITHOUT_COUNTRIES' || presetId === 'ETF_WITHOUT_SECTORS' ) { @@ -313,6 +313,36 @@ export class AdminService { return response; } + private async getMarketDataForCurrencies(): Promise { + const marketDataItems = await this.prismaService.marketData.groupBy({ + _count: true, + by: ['dataSource', 'symbol'] + }); + + const marketData: AdminMarketDataItem[] = this.exchangeRateDataService + .getCurrencyPairs() + .map(({ dataSource, symbol }) => { + const marketDataItemCount = + marketDataItems.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; + + return { + dataSource, + marketDataItemCount, + symbol, + assetClass: 'CASH', + countriesCount: 0, + sectorsCount: 0 + }; + }); + + return { marketData, count: marketData.length }; + } + private async getUsersWithAnalytics(): Promise { let orderBy: any = { createdAt: 'desc' diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index df2b84003..7896db655 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -60,6 +60,11 @@ export class AdminMarketDataComponent }; }) .concat([ + { + id: 'CURRENCIES', + label: $localize`Currencies`, + type: 'PRESET_ID' + }, { id: 'ETF_WITHOUT_COUNTRIES', label: $localize`ETFs without Countries`, diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index c5eb2bdd8..ab068786a 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -40,10 +40,6 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 17 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 13 @@ -52,6 +48,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + libs/ui/src/lib/activities-table/activities-table.component.html 156 @@ -404,10 +404,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 19 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 25 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 88 @@ -420,6 +416,10 @@ apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 37 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + Save @@ -440,10 +440,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 26 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 32 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 95 @@ -452,6 +448,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 333 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + First Activity @@ -1561,7 +1561,7 @@ My Ghostfolio Mein Ghostfolio - apps/client/src/app/pages/account/account-page-routing.module.ts + apps/client/src/app/pages/user-account/user-account-page-routing.module.ts 12 @@ -1569,7 +1569,7 @@ Please enter your coupon code: Bitte gebe deinen Gutscheincode ein: - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 262 @@ -1577,7 +1577,7 @@ Could not redeem coupon code Gutscheincode konnte nicht eingelöst werden - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 272 @@ -1585,7 +1585,7 @@ Coupon code has been redeemed Gutscheincode wurde eingelöst - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 284 @@ -1593,7 +1593,7 @@ Reload Neu laden - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 285 @@ -1601,21 +1601,21 @@ Do you really want to remove this sign in method? Möchtest du diese Anmeldemethode wirklich löschen? - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 331 Account Konto - - apps/client/src/app/pages/account/account-page.html - 4 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 58 + + apps/client/src/app/pages/user-account/user-account-page.html + 4 + libs/ui/src/lib/activities-table/activities-table.component.html 406 @@ -1625,7 +1625,7 @@ Membership Mitgliedschaft - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 15 @@ -1633,7 +1633,7 @@ Upgrade Upgrade - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 40 @@ -1641,7 +1641,7 @@ per year pro Jahr - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 57 @@ -1649,7 +1649,7 @@ Try Premium Premium ausprobieren - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 65 @@ -1657,7 +1657,7 @@ Redeem Coupon Gutschein einlösen - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 77 @@ -1665,7 +1665,7 @@ Presenter View Präsentationsansicht - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 84 @@ -1673,7 +1673,7 @@ Base Currency Basiswährung - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 103 @@ -1681,7 +1681,7 @@ Locale Lokalität - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 169 @@ -1689,27 +1689,27 @@ Date and number format Datums- und Zahlenformat - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 171 Zen Mode Zen Modus - - apps/client/src/app/pages/account/account-page.html - 223 - apps/client/src/app/pages/features/features-page.html 193 + + apps/client/src/app/pages/user-account/user-account-page.html + 223 + Sign in with fingerprint Einloggen mit Fingerabdruck - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 240,242 @@ -1717,7 +1717,7 @@ User ID Benutzer ID - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 273 @@ -1725,7 +1725,7 @@ Granted Access Zugangsberechtigung - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 290 @@ -1733,7 +1733,7 @@ Grant access Zugang gewähren - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -1741,7 +1741,7 @@ Public Öffentlich - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -2513,7 +2513,7 @@ Language Sprache - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 127 @@ -2778,7 +2778,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 264 + 269 @@ -2813,7 +2813,7 @@ 3 - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 6 @@ -2829,7 +2829,7 @@ Experimental Features Experimentelle Funktionen - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 258 @@ -2877,7 +2877,7 @@ Auto Automatisch - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 47 @@ -2885,7 +2885,7 @@ Appearance Aussehen - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2893,7 +2893,7 @@ Auto Automatisch - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 212 @@ -2901,7 +2901,7 @@ Light Hell - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 213 @@ -2909,7 +2909,7 @@ Dark Dunkel - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 214 @@ -3181,29 +3181,29 @@ 116 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/features/features-page.html + 260 + + + apps/client/src/app/pages/user-account/user-account-page.html 144 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 148 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 152 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 156 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 160 - - apps/client/src/app/pages/features/features-page.html - 260 - Activities Count @@ -3377,7 +3377,7 @@ Valid until Gültig bis - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 27 @@ -3433,7 +3433,7 @@ Protection for sensitive information like absolute performances and quantity values Ausblenden von sensiblen Informationen wie absoluter Performance und Stückzahl - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 85,88 @@ -3441,7 +3441,7 @@ Distraction-free experience for turbulent times Unbeschwertes Erlebnis für turbulente Zeiten - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 224,226 @@ -3449,7 +3449,7 @@ Sneak peek at upcoming functionality Vorschau auf kommende Funktionalität - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3825,7 +3825,7 @@ Renew Erneuern - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 45 @@ -7038,7 +7038,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 65 + 70 @@ -7046,7 +7046,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 70 + 75 @@ -7177,7 +7177,7 @@ Biometric Authentication Biometrische Authentifizierung - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -7253,10 +7253,18 @@ Export Data Daten exportieren - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 280 + + Currencies + Währungen + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 65 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 532ad66a2..eba5d988b 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -41,10 +41,6 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 17 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 13 @@ -53,6 +49,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + libs/ui/src/lib/activities-table/activities-table.component.html 156 @@ -405,10 +405,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 19 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 25 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 88 @@ -421,6 +417,10 @@ apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 37 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + Save @@ -441,10 +441,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 26 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 32 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 95 @@ -453,6 +449,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 333 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + First Activity @@ -1562,7 +1562,7 @@ My Ghostfolio Mi Ghostfolio - apps/client/src/app/pages/account/account-page-routing.module.ts + apps/client/src/app/pages/user-account/user-account-page-routing.module.ts 12 @@ -1570,7 +1570,7 @@ Please enter your coupon code: Por favor, ingresa tu código de cupón: - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 262 @@ -1578,7 +1578,7 @@ Could not redeem coupon code No se puede canjear este código de cupón - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 272 @@ -1586,7 +1586,7 @@ Coupon code has been redeemed El codigo de cupón ha sido canjeado - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 284 @@ -1594,7 +1594,7 @@ Reload Refrescar - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 285 @@ -1602,21 +1602,21 @@ Do you really want to remove this sign in method? ¿Estás seguro de eliminar este método de acceso? - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 331 Account Cuenta - - apps/client/src/app/pages/account/account-page.html - 4 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 58 + + apps/client/src/app/pages/user-account/user-account-page.html + 4 + libs/ui/src/lib/activities-table/activities-table.component.html 406 @@ -1626,7 +1626,7 @@ Membership Suscripción - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 15 @@ -1634,7 +1634,7 @@ Upgrade Mejorar - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 40 @@ -1642,7 +1642,7 @@ per year por año - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 57 @@ -1650,7 +1650,7 @@ Try Premium Prueba Premium - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 65 @@ -1658,7 +1658,7 @@ Redeem Coupon Canjea el cupón - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 77 @@ -1666,7 +1666,7 @@ Presenter View Vista del presentador - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 84 @@ -1674,7 +1674,7 @@ Base Currency Divisa base - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 103 @@ -1682,7 +1682,7 @@ Locale Ubicación - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 169 @@ -1690,27 +1690,27 @@ Date and number format Formato de fecha y número - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 171 Zen Mode Modo Zen - - apps/client/src/app/pages/account/account-page.html - 223 - apps/client/src/app/pages/features/features-page.html 193 + + apps/client/src/app/pages/user-account/user-account-page.html + 223 + Sign in with fingerprint Accede con huella digital - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 240,242 @@ -1718,7 +1718,7 @@ User ID ID usuario - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 273 @@ -1726,7 +1726,7 @@ Granted Access Acceso concedido - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 290 @@ -1734,7 +1734,7 @@ Grant access Conceder acceso - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -1742,7 +1742,7 @@ Public Público - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -2514,7 +2514,7 @@ Language Idioma - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 127 @@ -2795,7 +2795,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 264 + 269 @@ -2822,7 +2822,7 @@ 3 - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 6 @@ -2830,7 +2830,7 @@ Experimental Features Funcionalidades experimentales - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 258 @@ -2878,7 +2878,7 @@ Auto Automático - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 47 @@ -2886,7 +2886,7 @@ Appearance Apariencia - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2894,7 +2894,7 @@ Auto Automático - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 212 @@ -2902,7 +2902,7 @@ Light Claro - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 213 @@ -2910,7 +2910,7 @@ Dark Oscuro - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 214 @@ -3182,29 +3182,29 @@ 116 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/features/features-page.html + 260 + + + apps/client/src/app/pages/user-account/user-account-page.html 144 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 148 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 152 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 156 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 160 - - apps/client/src/app/pages/features/features-page.html - 260 - Activities Count @@ -3378,7 +3378,7 @@ Valid until Valid until - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 27 @@ -3434,7 +3434,7 @@ Protection for sensitive information like absolute performances and quantity values Protection for sensitive information like absolute performances and quantity values - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 85,88 @@ -3442,7 +3442,7 @@ Distraction-free experience for turbulent times Distraction-free experience for turbulent times - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 224,226 @@ -3450,7 +3450,7 @@ Sneak peek at upcoming functionality Sneak peek at upcoming functionality - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3826,7 +3826,7 @@ Renew Renew - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 45 @@ -7039,7 +7039,7 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 65 + 70 @@ -7047,7 +7047,7 @@ ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 70 + 75 @@ -7178,7 +7178,7 @@ Biometric Authentication Biometric Authentication - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -7254,10 +7254,18 @@ Export Data Export Data - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 280 + + Currencies + Currencies + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 65 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 1a3c726c0..16cdf0401 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -17,7 +17,7 @@ 3 - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 6 @@ -40,10 +40,6 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 17 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 13 @@ -52,6 +48,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + libs/ui/src/lib/activities-table/activities-table.component.html 156 @@ -468,10 +468,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 19 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 25 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 88 @@ -484,6 +480,10 @@ apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 37 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + Save @@ -504,10 +504,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 26 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 32 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 95 @@ -516,13 +512,17 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 333 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + Filter by... Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 264 + 269 @@ -1845,7 +1845,7 @@ My Ghostfolio Mon Ghostfolio - apps/client/src/app/pages/account/account-page-routing.module.ts + apps/client/src/app/pages/user-account/user-account-page-routing.module.ts 12 @@ -1853,7 +1853,7 @@ Auto Auto - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 47 @@ -1861,7 +1861,7 @@ Please enter your coupon code: Veuillez entrer votre code promotionnel : - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 262 @@ -1869,7 +1869,7 @@ Could not redeem coupon code Le code promotionnel n'a pas pu être appliqué - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 272 @@ -1877,7 +1877,7 @@ Coupon code has been redeemed Le code promotionnel a été appliqué - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 284 @@ -1885,7 +1885,7 @@ Reload Rafraîchir - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 285 @@ -1893,21 +1893,21 @@ Do you really want to remove this sign in method? Voulez-vous vraiment supprimer cette méthode de connexion ? - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 331 Account Compte - - apps/client/src/app/pages/account/account-page.html - 4 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 58 + + apps/client/src/app/pages/user-account/user-account-page.html + 4 + libs/ui/src/lib/activities-table/activities-table.component.html 406 @@ -1917,7 +1917,7 @@ Membership Adhésion - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 15 @@ -1925,7 +1925,7 @@ Upgrade Mettre à niveau - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 40 @@ -1933,7 +1933,7 @@ per year par an - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 57 @@ -1941,7 +1941,7 @@ Try Premium Essayer Premium - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 65 @@ -1949,7 +1949,7 @@ Redeem Coupon Utiliser un Code Promotionnel - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 77 @@ -1957,7 +1957,7 @@ Presenter View Vue de Présentation - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 84 @@ -1965,7 +1965,7 @@ Base Currency Devise de Base - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 103 @@ -1973,7 +1973,7 @@ Language Langue - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 127 @@ -1985,35 +1985,35 @@ 116 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/features/features-page.html + 260 + + + apps/client/src/app/pages/user-account/user-account-page.html 144 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 148 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 152 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 156 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 160 - - apps/client/src/app/pages/features/features-page.html - 260 - Locale Paramètres régionaux - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 169 @@ -2021,7 +2021,7 @@ Date and number format Format de date et d'heure - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 171 @@ -2029,7 +2029,7 @@ Appearance Apparence - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2037,7 +2037,7 @@ Auto Auto - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 212 @@ -2045,7 +2045,7 @@ Light Clair - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 213 @@ -2053,27 +2053,27 @@ Dark Sombre - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 214 Zen Mode Mode Zen - - apps/client/src/app/pages/account/account-page.html - 223 - apps/client/src/app/pages/features/features-page.html 193 + + apps/client/src/app/pages/user-account/user-account-page.html + 223 + Sign in with fingerprint Se connecter avec empreinte - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 240,242 @@ -2081,7 +2081,7 @@ Experimental Features Fonctionnalités expérimentales - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 258 @@ -2089,7 +2089,7 @@ User ID ID d'utilisateur - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 273 @@ -2097,7 +2097,7 @@ Granted Access Accès donné - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 290 @@ -2105,7 +2105,7 @@ Grant access Donner accès - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -2113,7 +2113,7 @@ Public Public - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -3377,7 +3377,7 @@ Valid until Valide jusqu'au - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 27 @@ -3433,7 +3433,7 @@ Protection for sensitive information like absolute performances and quantity values Protection pour les informations sensibles telles que la performance absolue et les montants - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 85,88 @@ -3441,7 +3441,7 @@ Distraction-free experience for turbulent times Expérience sans distraction pour les périodes tumultueuses - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 224,226 @@ -3449,7 +3449,7 @@ Sneak peek at upcoming functionality Avant-première de fonctionnalités futures - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3825,7 +3825,7 @@ Renew Renouveler - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 45 @@ -7038,7 +7038,7 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 65 + 70 @@ -7046,7 +7046,7 @@ ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 70 + 75 @@ -7177,7 +7177,7 @@ Biometric Authentication Biometric Authentication - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -7253,10 +7253,18 @@ Export Data Export Data - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 280 + + Currencies + Currencies + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 65 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 0850040b4..daf464c36 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -41,10 +41,6 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 17 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 13 @@ -53,6 +49,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + libs/ui/src/lib/activities-table/activities-table.component.html 156 @@ -405,10 +405,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 19 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 25 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 88 @@ -421,6 +417,10 @@ apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 37 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + Save @@ -441,10 +441,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 26 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 32 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 95 @@ -453,6 +449,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 333 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + First Activity @@ -1562,7 +1562,7 @@ My Ghostfolio Il mio Ghostfolio - apps/client/src/app/pages/account/account-page-routing.module.ts + apps/client/src/app/pages/user-account/user-account-page-routing.module.ts 12 @@ -1570,7 +1570,7 @@ Please enter your coupon code: Inserisci il tuo codice del buono: - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 262 @@ -1578,7 +1578,7 @@ Could not redeem coupon code Impossibile riscattare il codice del buono - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 272 @@ -1586,7 +1586,7 @@ Coupon code has been redeemed Il codice del buono è stato riscattato - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 284 @@ -1594,7 +1594,7 @@ Reload Ricarica - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 285 @@ -1602,21 +1602,21 @@ Do you really want to remove this sign in method? Vuoi davvero rimuovere questo metodo di accesso? - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 331 Account Account - - apps/client/src/app/pages/account/account-page.html - 4 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 58 + + apps/client/src/app/pages/user-account/user-account-page.html + 4 + libs/ui/src/lib/activities-table/activities-table.component.html 406 @@ -1626,7 +1626,7 @@ Membership Iscrizione - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 15 @@ -1634,7 +1634,7 @@ Upgrade Aggiornamento - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 40 @@ -1642,7 +1642,7 @@ per year per anno - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 57 @@ -1650,7 +1650,7 @@ Try Premium Prova Premium - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 65 @@ -1658,7 +1658,7 @@ Redeem Coupon Riscatta il buono - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 77 @@ -1666,7 +1666,7 @@ Presenter View Vista presentatore - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 84 @@ -1674,7 +1674,7 @@ Base Currency Valuta base - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 103 @@ -1682,7 +1682,7 @@ Locale Locale - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 169 @@ -1690,27 +1690,27 @@ Date and number format Formato data e numero - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 171 Zen Mode Modalità Zen - - apps/client/src/app/pages/account/account-page.html - 223 - apps/client/src/app/pages/features/features-page.html 193 + + apps/client/src/app/pages/user-account/user-account-page.html + 223 + Sign in with fingerprint Accesso con impronta digitale - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 240,242 @@ -1718,7 +1718,7 @@ User ID ID utente - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 273 @@ -1726,7 +1726,7 @@ Granted Access Accesso concesso - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 290 @@ -1734,7 +1734,7 @@ Grant access Concedi l'accesso - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -1742,7 +1742,7 @@ Public Pubblico - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -2514,7 +2514,7 @@ Language Lingua - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 127 @@ -2795,7 +2795,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 264 + 269 @@ -2822,7 +2822,7 @@ 3 - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 6 @@ -2830,7 +2830,7 @@ Experimental Features Funzionalità sperimentali - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 258 @@ -2878,7 +2878,7 @@ Auto Auto - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 47 @@ -2886,7 +2886,7 @@ Appearance Appearance - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2894,7 +2894,7 @@ Auto Auto - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 212 @@ -2902,7 +2902,7 @@ Light Light - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 213 @@ -2910,7 +2910,7 @@ Dark Dark - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 214 @@ -3182,29 +3182,29 @@ 116 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/features/features-page.html + 260 + + + apps/client/src/app/pages/user-account/user-account-page.html 144 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 148 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 152 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 156 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 160 - - apps/client/src/app/pages/features/features-page.html - 260 - Activities Count @@ -3378,7 +3378,7 @@ Valid until Valid until - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 27 @@ -3434,7 +3434,7 @@ Protection for sensitive information like absolute performances and quantity values Protection for sensitive information like absolute performances and quantity values - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 85,88 @@ -3442,7 +3442,7 @@ Distraction-free experience for turbulent times Distraction-free experience for turbulent times - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 224,226 @@ -3450,7 +3450,7 @@ Sneak peek at upcoming functionality Sneak peek at upcoming functionality - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3826,7 +3826,7 @@ Renew Renew - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 45 @@ -7039,7 +7039,7 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 65 + 70 @@ -7047,7 +7047,7 @@ ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 70 + 75 @@ -7178,7 +7178,7 @@ Biometric Authentication Biometric Authentication - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -7254,10 +7254,18 @@ Export Data Export Data - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 280 + + Currencies + Currencies + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 65 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 1d51a4bbe..747473166 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -40,10 +40,6 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 17 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 13 @@ -52,6 +48,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + libs/ui/src/lib/activities-table/activities-table.component.html 156 @@ -404,10 +404,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 19 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 25 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 88 @@ -420,6 +416,10 @@ apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 37 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + Save @@ -440,10 +440,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 26 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 32 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 95 @@ -452,6 +448,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 333 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + First Activity @@ -1561,7 +1561,7 @@ My Ghostfolio Mijn Ghostfolio - apps/client/src/app/pages/account/account-page-routing.module.ts + apps/client/src/app/pages/user-account/user-account-page-routing.module.ts 12 @@ -1569,7 +1569,7 @@ Please enter your coupon code: Voer uw couponcode in: - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 262 @@ -1577,7 +1577,7 @@ Could not redeem coupon code Kon kortingscode niet inwisselen - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 272 @@ -1585,7 +1585,7 @@ Coupon code has been redeemed Couponcode is ingewisseld - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 284 @@ -1593,7 +1593,7 @@ Reload Herladen - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 285 @@ -1601,21 +1601,21 @@ Do you really want to remove this sign in method? Wilt u deze aanmeldingsmethode echt verwijderen? - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 331 Account Account - - apps/client/src/app/pages/account/account-page.html - 4 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 58 + + apps/client/src/app/pages/user-account/user-account-page.html + 4 + libs/ui/src/lib/activities-table/activities-table.component.html 406 @@ -1625,7 +1625,7 @@ Membership Lidmaatschap - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 15 @@ -1633,7 +1633,7 @@ Upgrade Upgrade - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 40 @@ -1641,7 +1641,7 @@ per year per jaar - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 57 @@ -1649,7 +1649,7 @@ Try Premium Probeer Premium - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 65 @@ -1657,7 +1657,7 @@ Redeem Coupon Coupon inwisselen - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 77 @@ -1665,7 +1665,7 @@ Presenter View Presentatorweergave - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 84 @@ -1673,7 +1673,7 @@ Base Currency Basisvaluta - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 103 @@ -1681,7 +1681,7 @@ Locale Locale - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 169 @@ -1689,27 +1689,27 @@ Date and number format Formaat datum en getal - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 171 Zen Mode Zen-modus - - apps/client/src/app/pages/account/account-page.html - 223 - apps/client/src/app/pages/features/features-page.html 193 + + apps/client/src/app/pages/user-account/user-account-page.html + 223 + Sign in with fingerprint Aanmelden met vingerafdruk - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 240,242 @@ -1717,7 +1717,7 @@ User ID Gebruikers-ID - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 273 @@ -1725,7 +1725,7 @@ Granted Access Verleende toegang - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 290 @@ -1733,7 +1733,7 @@ Grant access Toegang verlenen - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -1741,7 +1741,7 @@ Public Openbaar - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -2513,7 +2513,7 @@ Language Taal - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 127 @@ -2794,7 +2794,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 264 + 269 @@ -2821,7 +2821,7 @@ 3 - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 6 @@ -2829,7 +2829,7 @@ Experimental Features Experimentele functies - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 258 @@ -2877,7 +2877,7 @@ Auto Auto - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 47 @@ -2885,7 +2885,7 @@ Appearance Weergave - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2893,7 +2893,7 @@ Auto Automatisch - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 212 @@ -2901,7 +2901,7 @@ Light Licht - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 213 @@ -2909,7 +2909,7 @@ Dark Donker - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 214 @@ -3181,29 +3181,29 @@ 116 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/features/features-page.html + 260 + + + apps/client/src/app/pages/user-account/user-account-page.html 144 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 148 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 152 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 156 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 160 - - apps/client/src/app/pages/features/features-page.html - 260 - Activities Count @@ -3377,7 +3377,7 @@ Valid until Valid until - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 27 @@ -3433,7 +3433,7 @@ Protection for sensitive information like absolute performances and quantity values Protection for sensitive information like absolute performances and quantity values - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 85,88 @@ -3441,7 +3441,7 @@ Distraction-free experience for turbulent times Distraction-free experience for turbulent times - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 224,226 @@ -3449,7 +3449,7 @@ Sneak peek at upcoming functionality Sneak peek at upcoming functionality - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3825,7 +3825,7 @@ Renew Renew - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 45 @@ -7038,7 +7038,7 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 65 + 70 @@ -7046,7 +7046,7 @@ ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 70 + 75 @@ -7177,7 +7177,7 @@ Biometric Authentication Biometric Authentication - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -7253,10 +7253,18 @@ Export Data Export Data - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 280 + + Currencies + Currencies + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 65 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 4a9a2e538..d803f0003 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -17,7 +17,7 @@ 3 - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 6 @@ -40,10 +40,6 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 17 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 13 @@ -52,6 +48,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + libs/ui/src/lib/activities-table/activities-table.component.html 156 @@ -468,10 +468,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 19 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 25 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 88 @@ -484,6 +480,10 @@ apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 37 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + Save @@ -504,10 +504,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 26 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 32 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 95 @@ -516,13 +512,17 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 333 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + Filter by... Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 264 + 269 @@ -1829,7 +1829,7 @@ My Ghostfolio O meu Ghostfolio - apps/client/src/app/pages/account/account-page-routing.module.ts + apps/client/src/app/pages/user-account/user-account-page-routing.module.ts 12 @@ -1837,7 +1837,7 @@ Auto Auto - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 47 @@ -1845,7 +1845,7 @@ Please enter your coupon code: Por favor, insira o seu código de cupão: - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 262 @@ -1853,7 +1853,7 @@ Could not redeem coupon code Não foi possível resgatar o código de cupão - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 272 @@ -1861,7 +1861,7 @@ Coupon code has been redeemed Código de cupão foi resgatado - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 284 @@ -1869,7 +1869,7 @@ Reload Atualizar - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 285 @@ -1877,21 +1877,21 @@ Do you really want to remove this sign in method? Deseja realmente remover este método de início de sessão? - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 331 Account Conta - - apps/client/src/app/pages/account/account-page.html - 4 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 58 + + apps/client/src/app/pages/user-account/user-account-page.html + 4 + libs/ui/src/lib/activities-table/activities-table.component.html 406 @@ -1901,7 +1901,7 @@ Membership Filiação - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 15 @@ -1909,7 +1909,7 @@ Upgrade Atualizar - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 40 @@ -1917,7 +1917,7 @@ per year por ano - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 57 @@ -1925,7 +1925,7 @@ Try Premium Experimentar Premium - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 65 @@ -1933,7 +1933,7 @@ Redeem Coupon Resgatar Cupão - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 77 @@ -1941,7 +1941,7 @@ Presenter View Vista do Apresentador - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 84 @@ -1949,7 +1949,7 @@ Base Currency Moeda Base - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 103 @@ -1957,7 +1957,7 @@ Language Língua - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 127 @@ -1977,7 +1977,7 @@ Locale Localidade - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 169 @@ -1985,27 +1985,27 @@ Date and number format Formato de números e datas - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 171 Zen Mode Modo Zen - - apps/client/src/app/pages/account/account-page.html - 223 - apps/client/src/app/pages/features/features-page.html 193 + + apps/client/src/app/pages/user-account/user-account-page.html + 223 + Appearance Aparência - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2013,7 +2013,7 @@ Auto Auto - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 212 @@ -2021,7 +2021,7 @@ Light Claro - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 213 @@ -2029,7 +2029,7 @@ Dark Escuro - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 214 @@ -2037,7 +2037,7 @@ Sign in with fingerprint Iniciar sessão com impressão digital - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 240,242 @@ -2045,7 +2045,7 @@ Experimental Features Funcionalidades Experimentais - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 258 @@ -2053,7 +2053,7 @@ User ID ID do Utilizador - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 273 @@ -2061,7 +2061,7 @@ Granted Access Acesso Concedido - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 290 @@ -2069,7 +2069,7 @@ Grant access Conceder Acesso - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 @@ -2077,7 +2077,7 @@ Public Público - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -3237,29 +3237,29 @@ 116 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/features/features-page.html + 260 + + + apps/client/src/app/pages/user-account/user-account-page.html 144 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 148 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 152 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 156 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 160 - - apps/client/src/app/pages/features/features-page.html - 260 - Market Data @@ -3377,7 +3377,7 @@ Valid until Válido até - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 27 @@ -3433,7 +3433,7 @@ Protection for sensitive information like absolute performances and quantity values Proteção para informações sensíveis, como desempenhos absolutos e valores quantitativos - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 85,88 @@ -3441,7 +3441,7 @@ Distraction-free experience for turbulent times Experiência sem distrações para tempos turbulentos - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 224,226 @@ -3449,7 +3449,7 @@ Sneak peek at upcoming functionality Acesso antecipado a funcionalidades futuras - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3825,7 +3825,7 @@ Renew Renovar - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 45 @@ -7038,7 +7038,7 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 65 + 70 @@ -7046,7 +7046,7 @@ ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 70 + 75 @@ -7177,7 +7177,7 @@ Biometric Authentication Biometric Authentication - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -7253,10 +7253,18 @@ Export Data Export Data - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 280 + + Currencies + Currencies + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 65 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index a0f460764..c3c3d2935 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -37,10 +37,6 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 17 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 13 @@ -49,6 +45,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 17 + libs/ui/src/lib/activities-table/activities-table.component.html 156 @@ -375,10 +375,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 19 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 25 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 88 @@ -391,6 +387,10 @@ apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 37 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 25 + Save @@ -410,10 +410,6 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 26 - - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html - 32 - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 95 @@ -422,6 +418,10 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 333 + + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html + 32 + First Activity @@ -1439,55 +1439,55 @@ My Ghostfolio - apps/client/src/app/pages/account/account-page-routing.module.ts + apps/client/src/app/pages/user-account/user-account-page-routing.module.ts 12 Please enter your coupon code: - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 262 Could not redeem coupon code - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 272 Coupon code has been redeemed - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 284 Reload - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 285 Do you really want to remove this sign in method? - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 331 Account - - apps/client/src/app/pages/account/account-page.html - 4 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 58 + + apps/client/src/app/pages/user-account/user-account-page.html + 4 + libs/ui/src/lib/activities-table/activities-table.component.html 406 @@ -1496,109 +1496,109 @@ Membership - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 15 Upgrade - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 40 per year - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 57 Try Premium - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 65 Redeem Coupon - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 77 Presenter View - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 84 Base Currency - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 103 Locale - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 169 Date and number format - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 171 Zen Mode - - apps/client/src/app/pages/account/account-page.html - 223 - apps/client/src/app/pages/features/features-page.html 193 + + apps/client/src/app/pages/user-account/user-account-page.html + 223 + Sign in with fingerprint - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 240,242 User ID - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 273 Granted Access - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 290 Grant access - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 2 Public - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 19 @@ -2293,7 +2293,7 @@ Language - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 127 @@ -2547,7 +2547,7 @@ Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 264 + 269 @@ -2571,14 +2571,14 @@ 3 - apps/client/src/app/pages/account/create-or-update-access-dialog/create-or-update-access-dialog.html + apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html 6 Experimental Features - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 258 @@ -2620,35 +2620,35 @@ Auto - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 212 Auto - apps/client/src/app/pages/account/account-page.component.ts + apps/client/src/app/pages/user-account/user-account-page.component.ts 47 Light - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 213 Dark - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 214 Appearance - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2888,29 +2888,29 @@ 116 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/features/features-page.html + 260 + + + apps/client/src/app/pages/user-account/user-account-page.html 144 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 148 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 152 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 156 - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 160 - - apps/client/src/app/pages/features/features-page.html - 260 - Activities Count @@ -3107,28 +3107,28 @@ Valid until - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 27 Distraction-free experience for turbulent times - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 224,226 Protection for sensitive information like absolute performances and quantity values - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 85,88 Sneak peek at upcoming functionality - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3476,7 +3476,7 @@ Renew - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 45 @@ -6603,14 +6603,14 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 65 + 70 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 70 + 75 @@ -6725,7 +6725,7 @@ Biometric Authentication - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -6792,10 +6792,17 @@ Export Data - apps/client/src/app/pages/account/account-page.html + apps/client/src/app/pages/user-account/user-account-page.html 280 + + Currencies + + apps/client/src/app/components/admin-market-data/admin-market-data.component.ts + 65 + + diff --git a/libs/common/src/lib/types/market-data-preset.type.ts b/libs/common/src/lib/types/market-data-preset.type.ts index 351f863dd..497c4cf3c 100644 --- a/libs/common/src/lib/types/market-data-preset.type.ts +++ b/libs/common/src/lib/types/market-data-preset.type.ts @@ -1 +1,4 @@ -export type MarketDataPreset = 'ETF_WITHOUT_COUNTRIES' | 'ETF_WITHOUT_SECTORS'; +export type MarketDataPreset = + | 'CURRENCIES' + | 'ETF_WITHOUT_COUNTRIES' + | 'ETF_WITHOUT_SECTORS'; From 2df27100f04f1592aaf83130f901f9809126f8e6 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 18 Aug 2023 20:27:19 +0200 Subject: [PATCH 12/23] Add middleware (#2239) * Add middleware * Update changelog --- CHANGELOG.md | 4 + apps/api/src/app/app.module.ts | 17 +- apps/api/src/app/frontend.middleware.ts | 232 ------------------ apps/api/src/main.ts | 3 + .../middlewares/html-template.middleware.ts | 128 ++++++++++ .../configuration/configuration.service.ts | 4 +- apps/client/src/index.html | 32 +-- apps/client/src/index.template.html | 63 ----- libs/common/src/lib/config.ts | 1 + libs/common/src/lib/helper.ts | 2 +- 10 files changed, 151 insertions(+), 335 deletions(-) delete mode 100644 apps/api/src/app/frontend.middleware.ts create mode 100644 apps/api/src/middlewares/html-template.middleware.ts delete mode 100644 apps/client/src/index.template.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 8481f343a..3efc198cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the data export feature to the user account page - Added a currencies preset to the historical market data table of the admin control panel +### Changed + +- Improved the localized meta data in `html` files + ### Fixed - Fixed the rows with cash positions in the holdings table diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 4b78a1e7c..a521e7fa9 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -12,7 +12,7 @@ import { SUPPORTED_LANGUAGE_CODES } from '@ghostfolio/common/config'; import { BullModule } from '@nestjs/bull'; -import { MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common'; +import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ScheduleModule } from '@nestjs/schedule'; import { ServeStaticModule } from '@nestjs/serve-static'; @@ -28,7 +28,6 @@ import { BenchmarkModule } from './benchmark/benchmark.module'; import { CacheModule } from './cache/cache.module'; import { ExchangeRateModule } from './exchange-rate/exchange-rate.module'; import { ExportModule } from './export/export.module'; -import { FrontendMiddleware } from './frontend.middleware'; import { HealthModule } from './health/health.module'; import { ImportModule } from './import/import.module'; import { InfoModule } from './info/info.module'; @@ -75,12 +74,6 @@ import { UserModule } from './user/user.module'; PrismaModule, RedisCacheModule, ScheduleModule.forRoot(), - ...SUPPORTED_LANGUAGE_CODES.map((languageCode) => { - return ServeStaticModule.forRoot({ - rootPath: join(__dirname, '..', 'client', languageCode), - serveRoot: `/${languageCode}` - }); - }), ServeStaticModule.forRoot({ exclude: ['/api*', '/sitemap.xml'], rootPath: join(__dirname, '..', 'client'), @@ -114,10 +107,4 @@ import { UserModule } from './user/user.module'; controllers: [AppController], providers: [CronService] }) -export class AppModule { - configure(consumer: MiddlewareConsumer) { - consumer - .apply(FrontendMiddleware) - .forRoutes({ path: '*', method: RequestMethod.ALL }); - } -} +export class AppModule {} diff --git a/apps/api/src/app/frontend.middleware.ts b/apps/api/src/app/frontend.middleware.ts deleted file mode 100644 index 9996445a5..000000000 --- a/apps/api/src/app/frontend.middleware.ts +++ /dev/null @@ -1,232 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; - -import { environment } from '@ghostfolio/api/environments/environment'; -import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; -import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config'; -import { DATE_FORMAT, interpolate } from '@ghostfolio/common/helper'; -import { Injectable, NestMiddleware } from '@nestjs/common'; -import { format } from 'date-fns'; -import { NextFunction, Request, Response } from 'express'; - -@Injectable() -export class FrontendMiddleware implements NestMiddleware { - public indexHtmlDe = ''; - public indexHtmlEn = ''; - public indexHtmlEs = ''; - public indexHtmlFr = ''; - public indexHtmlIt = ''; - public indexHtmlNl = ''; - public indexHtmlPt = ''; - - private static readonly DEFAULT_DESCRIPTION = - 'Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms.'; - - public constructor( - private readonly configurationService: ConfigurationService - ) { - try { - this.indexHtmlDe = fs.readFileSync( - this.getPathOfIndexHtmlFile('de'), - 'utf8' - ); - this.indexHtmlEn = fs.readFileSync( - this.getPathOfIndexHtmlFile(DEFAULT_LANGUAGE_CODE), - 'utf8' - ); - this.indexHtmlEs = fs.readFileSync( - this.getPathOfIndexHtmlFile('es'), - 'utf8' - ); - this.indexHtmlFr = fs.readFileSync( - this.getPathOfIndexHtmlFile('fr'), - 'utf8' - ); - this.indexHtmlIt = fs.readFileSync( - this.getPathOfIndexHtmlFile('it'), - 'utf8' - ); - this.indexHtmlNl = fs.readFileSync( - this.getPathOfIndexHtmlFile('nl'), - 'utf8' - ); - this.indexHtmlPt = fs.readFileSync( - this.getPathOfIndexHtmlFile('pt'), - 'utf8' - ); - } catch {} - } - - public use(request: Request, response: Response, next: NextFunction) { - const currentDate = format(new Date(), DATE_FORMAT); - let featureGraphicPath = 'assets/cover.png'; - let title = 'Ghostfolio – Open Source Wealth Management Software'; - - if (request.path.startsWith('/en/blog/2022/08/500-stars-on-github')) { - featureGraphicPath = 'assets/images/blog/500-stars-on-github.jpg'; - title = `500 Stars - ${title}`; - } else if (request.path.startsWith('/en/blog/2022/10/hacktoberfest-2022')) { - featureGraphicPath = 'assets/images/blog/hacktoberfest-2022.png'; - title = `Hacktoberfest 2022 - ${title}`; - } else if (request.path.startsWith('/en/blog/2022/11/black-friday-2022')) { - featureGraphicPath = 'assets/images/blog/black-friday-2022.jpg'; - title = `Black Friday 2022 - ${title}`; - } else if ( - request.path.startsWith( - '/en/blog/2022/12/the-importance-of-tracking-your-personal-finances' - ) - ) { - featureGraphicPath = 'assets/images/blog/20221226.jpg'; - title = `The importance of tracking your personal finances - ${title}`; - } else if ( - request.path.startsWith( - '/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt' - ) - ) { - featureGraphicPath = 'assets/images/blog/ghostfolio-x-sackgeld.png'; - title = `Ghostfolio auf Sackgeld.com vorgestellt - ${title}`; - } else if ( - request.path.startsWith('/en/blog/2023/02/ghostfolio-meets-umbrel') - ) { - featureGraphicPath = 'assets/images/blog/ghostfolio-x-umbrel.png'; - title = `Ghostfolio meets Umbrel - ${title}`; - } else if ( - request.path.startsWith( - '/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github' - ) - ) { - featureGraphicPath = 'assets/images/blog/1000-stars-on-github.jpg'; - title = `Ghostfolio reaches 1’000 Stars on GitHub - ${title}`; - } else if ( - request.path.startsWith( - '/en/blog/2023/05/unlock-your-financial-potential-with-ghostfolio' - ) - ) { - featureGraphicPath = 'assets/images/blog/20230520.jpg'; - title = `Unlock your Financial Potential with Ghostfolio - ${title}`; - } else if ( - request.path.startsWith('/en/blog/2023/07/exploring-the-path-to-fire') - ) { - featureGraphicPath = 'assets/images/blog/20230701.jpg'; - title = `Exploring the Path to FIRE - ${title}`; - } - - if ( - request.path.startsWith('/api/') || - this.isFileRequest(request.url) || - !environment.production - ) { - // Skip - next(); - } else if (request.path === '/de' || request.path.startsWith('/de/')) { - response.send( - interpolate(this.indexHtmlDe, { - currentDate, - featureGraphicPath, - title, - description: - 'Mit dem Finanz-Dashboard Ghostfolio können Sie Ihr Vermögen in Form von Aktien, ETFs oder Kryptowährungen verteilt über mehrere Finanzinstitute überwachen.', - languageCode: 'de', - path: request.path, - rootUrl: this.configurationService.get('ROOT_URL') - }) - ); - } else if (request.path === '/es' || request.path.startsWith('/es/')) { - response.send( - interpolate(this.indexHtmlEs, { - currentDate, - featureGraphicPath, - title, - description: - 'Ghostfolio es un dashboard de finanzas personales para hacer un seguimiento de tus activos como acciones, ETFs o criptodivisas a través de múltiples plataformas.', - languageCode: 'es', - path: request.path, - rootUrl: this.configurationService.get('ROOT_URL') - }) - ); - } else if (request.path === '/fr' || request.path.startsWith('/fr/')) { - response.send( - interpolate(this.indexHtmlFr, { - currentDate, - featureGraphicPath, - title, - description: - 'Ghostfolio est un dashboard de finances personnelles qui permet de suivre vos actifs comme les actions, les ETF ou les crypto-monnaies sur plusieurs plateformes.', - languageCode: 'fr', - path: request.path, - rootUrl: this.configurationService.get('ROOT_URL') - }) - ); - } else if (request.path === '/it' || request.path.startsWith('/it/')) { - response.send( - interpolate(this.indexHtmlIt, { - currentDate, - featureGraphicPath, - title, - description: - 'Ghostfolio è un dashboard di finanza personale per tenere traccia delle vostre attività come azioni, ETF o criptovalute su più piattaforme.', - languageCode: 'it', - path: request.path, - rootUrl: this.configurationService.get('ROOT_URL') - }) - ); - } else if (request.path === '/nl' || request.path.startsWith('/nl/')) { - response.send( - interpolate(this.indexHtmlNl, { - currentDate, - featureGraphicPath, - title, - description: - 'Ghostfolio is een persoonlijk financieel dashboard om uw activa zoals aandelen, ETF’s of cryptocurrencies over meerdere platforms bij te houden.', - languageCode: 'nl', - path: request.path, - rootUrl: this.configurationService.get('ROOT_URL') - }) - ); - } else if (request.path === '/pt' || request.path.startsWith('/pt/')) { - response.send( - interpolate(this.indexHtmlPt, { - currentDate, - featureGraphicPath, - title, - description: - 'Ghostfolio é um dashboard de finanças pessoais para acompanhar os seus activos como acções, ETFs ou criptomoedas em múltiplas plataformas.', - languageCode: 'pt', - path: request.path, - rootUrl: this.configurationService.get('ROOT_URL') - }) - ); - } else { - response.send( - interpolate(this.indexHtmlEn, { - currentDate, - featureGraphicPath, - title, - description: FrontendMiddleware.DEFAULT_DESCRIPTION, - languageCode: DEFAULT_LANGUAGE_CODE, - path: request.path, - rootUrl: this.configurationService.get('ROOT_URL') - }) - ); - } - } - - private getPathOfIndexHtmlFile(aLocale: string) { - return path.join(__dirname, '..', 'client', aLocale, 'index.html'); - } - - private isFileRequest(filename: string) { - if (filename === '/assets/LICENSE') { - return true; - } else if ( - filename.includes('auth/ey') || - filename.includes( - 'personal-finance-tools/open-source-alternative-to-markets.sh' - ) - ) { - return false; - } - - return filename.split('.').pop() !== filename; - } -} diff --git a/apps/api/src/main.ts b/apps/api/src/main.ts index 5d76776a1..e0e7daf2f 100644 --- a/apps/api/src/main.ts +++ b/apps/api/src/main.ts @@ -7,6 +7,7 @@ import helmet from 'helmet'; import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; +import { HtmlTemplateMiddleware } from './middlewares/html-template.middleware'; async function bootstrap() { const configApp = await NestFactory.create(AppModule); @@ -52,6 +53,8 @@ async function bootstrap() { ); } + app.use(HtmlTemplateMiddleware); + const BASE_CURRENCY = configService.get('BASE_CURRENCY'); const HOST = configService.get('HOST') || '0.0.0.0'; const PORT = configService.get('PORT') || 3333; diff --git a/apps/api/src/middlewares/html-template.middleware.ts b/apps/api/src/middlewares/html-template.middleware.ts new file mode 100644 index 000000000..efbd60fa7 --- /dev/null +++ b/apps/api/src/middlewares/html-template.middleware.ts @@ -0,0 +1,128 @@ +import * as fs from 'fs'; +import { join } from 'path'; + +import { environment } from '@ghostfolio/api/environments/environment'; +import { + DEFAULT_LANGUAGE_CODE, + DEFAULT_ROOT_URL, + SUPPORTED_LANGUAGE_CODES +} from '@ghostfolio/common/config'; +import { DATE_FORMAT, interpolate } from '@ghostfolio/common/helper'; +import { format } from 'date-fns'; +import { NextFunction, Request, Response } from 'express'; + +const descriptions = { + de: 'Mit dem Finanz-Dashboard Ghostfolio können Sie Ihr Vermögen in Form von Aktien, ETFs oder Kryptowährungen verteilt über mehrere Finanzinstitute überwachen.', + en: 'Ghostfolio is a personal finance dashboard to keep track of your assets like stocks, ETFs or cryptocurrencies across multiple platforms.', + es: 'Ghostfolio es un dashboard de finanzas personales para hacer un seguimiento de tus activos como acciones, ETFs o criptodivisas a través de múltiples plataformas.', + fr: 'Ghostfolio est un dashboard de finances personnelles qui permet de suivre vos actifs comme les actions, les ETF ou les crypto-monnaies sur plusieurs plateformes.', + it: 'Ghostfolio è un dashboard di finanza personale per tenere traccia delle vostre attività come azioni, ETF o criptovalute su più piattaforme.', + nl: 'Ghostfolio is een persoonlijk financieel dashboard om uw activa zoals aandelen, ETF’s of cryptocurrencies over meerdere platforms bij te houden.', + pt: 'Ghostfolio é um dashboard de finanças pessoais para acompanhar os seus activos como acções, ETFs ou criptomoedas em múltiplas plataformas.' +}; + +const title = 'Ghostfolio – Open Source Wealth Management Software'; +const titleShort = 'Ghostfolio'; + +let indexHtmlMap: { [languageCode: string]: string } = {}; + +try { + indexHtmlMap = SUPPORTED_LANGUAGE_CODES.reduce( + (map, languageCode) => ({ + ...map, + [languageCode]: fs.readFileSync( + join(__dirname, '..', 'client', languageCode, 'index.html'), + 'utf8' + ) + }), + {} + ); +} catch {} + +const locales = { + '/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt': { + featureGraphicPath: 'assets/images/blog/ghostfolio-x-sackgeld.png', + title: `Ghostfolio auf Sackgeld.com vorgestellt - ${titleShort}` + }, + '/en/blog/2022/08/500-stars-on-github': { + featureGraphicPath: 'assets/images/blog/500-stars-on-github.jpg', + title: `500 Stars - ${titleShort}` + }, + '/en/blog/2022/10/hacktoberfest-2022': { + featureGraphicPath: 'assets/images/blog/hacktoberfest-2022.png', + title: `Hacktoberfest 2022 - ${titleShort}` + }, + '/en/blog/2022/12/the-importance-of-tracking-your-personal-finances': { + featureGraphicPath: 'assets/images/blog/20221226.jpg', + title: `The importance of tracking your personal finances - ${titleShort}` + }, + '/en/blog/2023/02/ghostfolio-meets-umbrel': { + featureGraphicPath: 'assets/images/blog/ghostfolio-x-umbrel.png', + title: `Ghostfolio meets Umbrel - ${titleShort}` + }, + '/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github': { + featureGraphicPath: 'assets/images/blog/1000-stars-on-github.jpg', + title: `Ghostfolio reaches 1’000 Stars on GitHub - ${titleShort}` + }, + '/en/blog/2023/05/unlock-your-financial-potential-with-ghostfolio': { + featureGraphicPath: 'assets/images/blog/20230520.jpg', + title: `Unlock your Financial Potential with Ghostfolio - ${titleShort}` + }, + '/en/blog/2023/07/exploring-the-path-to-fire': { + featureGraphicPath: 'assets/images/blog/20230701.jpg', + title: `Exploring the Path to FIRE - ${titleShort}` + } +}; + +const isFileRequest = (filename: string) => { + if (filename === '/assets/LICENSE') { + return true; + } else if ( + filename.includes('auth/ey') || + filename.includes( + 'personal-finance-tools/open-source-alternative-to-markets.sh' + ) + ) { + return false; + } + + return filename.split('.').pop() !== filename; +}; + +export const HtmlTemplateMiddleware = async ( + request: Request, + response: Response, + next: NextFunction +) => { + const path = request.originalUrl.replace(/\/$/, ''); + let languageCode = path.substr(1, 2); + + if (!SUPPORTED_LANGUAGE_CODES.includes(languageCode)) { + languageCode = DEFAULT_LANGUAGE_CODE; + } + + const currentDate = format(new Date(), DATE_FORMAT); + const rootUrl = process.env.ROOT_URL || DEFAULT_ROOT_URL; + + if ( + path.startsWith('/api/') || + isFileRequest(path) || + !environment.production + ) { + // Skip + next(); + } else { + const indexHtml = interpolate(indexHtmlMap[languageCode], { + currentDate, + languageCode, + path, + rootUrl, + description: descriptions[languageCode], + featureGraphicPath: + locales[path]?.featureGraphicPath ?? 'assets/cover.png', + title: locales[path]?.title ?? title + }); + + return response.send(indexHtml); + } +}; diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index fa9ada3d7..54eedaa4d 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -1,5 +1,5 @@ import { Environment } from '@ghostfolio/api/services/interfaces/environment.interface'; -import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; +import { DEFAULT_CURRENCY, DEFAULT_ROOT_URL } from '@ghostfolio/common/config'; import { Injectable } from '@nestjs/common'; import { DataSource } from '@prisma/client'; import { bool, cleanEnv, host, json, num, port, str } from 'envalid'; @@ -47,7 +47,7 @@ export class ConfigurationService { REDIS_HOST: str({ default: 'localhost' }), REDIS_PASSWORD: str({ default: '' }), REDIS_PORT: port({ default: 6379 }), - ROOT_URL: str({ default: 'http://localhost:4200' }), + ROOT_URL: str({ default: DEFAULT_ROOT_URL }), STRIPE_PUBLIC_KEY: str({ default: '' }), STRIPE_SECRET_KEY: str({ default: '' }), TWITTER_ACCESS_TOKEN: str({ default: 'dummyAccessToken' }), diff --git a/apps/client/src/index.html b/apps/client/src/index.html index a7d01e481..55120ec08 100644 --- a/apps/client/src/index.html +++ b/apps/client/src/index.html @@ -1,14 +1,11 @@ - + - Ghostfolio – Open Source Wealth Management Software + ${title} - + - - + + - + - - - - + + + + - - - ${title} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index c5c627de8..345641f97 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -40,6 +40,7 @@ export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_LANGUAGE_CODE = 'en'; export const DEFAULT_PAGE_SIZE = 50; export const DEFAULT_REQUEST_TIMEOUT = ms('3 seconds'); +export const DEFAULT_ROOT_URL = 'http://localhost:4200'; export const EMERGENCY_FUND_TAG_ID = '4452656d-9fa4-4bd0-ba38-70492e31d180'; diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 40933e19d..d3a6c9d71 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -235,7 +235,7 @@ export function isCurrency(aSymbol = '') { } export function interpolate(template: string, context: any) { - return template.replace(/[$]{([^}]+)}/g, (_, objectPath) => { + return template?.replace(/[$]{([^}]+)}/g, (_, objectPath) => { const properties = objectPath.split('.'); return properties.reduce( (previous, current) => previous?.[current], From 9c16af81c7b5b9ee105b3fc1260bf3e2ba410073 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 18 Aug 2023 20:45:10 +0200 Subject: [PATCH 13/23] Feature/setup oss friends page (#2245) * Setup OSS Friends page * Update changelog --- CHANGELOG.md | 1 + apps/api/src/assets/sitemap.xml | 8 + .../pages/about/about-page-routing.module.ts | 7 + .../app/pages/about/about-page.component.ts | 53 ++++--- .../oss-friends-page-routing.module.ts | 20 +++ .../oss-friends/oss-friends-page.component.ts | 145 ++++++++++++++++++ .../about/oss-friends/oss-friends-page.html | 36 +++++ .../oss-friends/oss-friends-page.module.ts | 19 +++ .../about/oss-friends/oss-friends-page.scss | 3 + apps/client/src/locales/messages.de.xlf | 38 +++-- apps/client/src/locales/messages.es.xlf | 38 +++-- apps/client/src/locales/messages.fr.xlf | 38 +++-- apps/client/src/locales/messages.it.xlf | 38 +++-- apps/client/src/locales/messages.nl.xlf | 38 +++-- apps/client/src/locales/messages.pt.xlf | 38 +++-- apps/client/src/locales/messages.xlf | 36 +++-- 16 files changed, 456 insertions(+), 100 deletions(-) create mode 100644 apps/client/src/app/pages/about/oss-friends/oss-friends-page-routing.module.ts create mode 100644 apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts create mode 100644 apps/client/src/app/pages/about/oss-friends/oss-friends-page.html create mode 100644 apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts create mode 100644 apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss diff --git a/CHANGELOG.md b/CHANGELOG.md index 3efc198cd..df62dedcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the data export feature to the user account page - Added a currencies preset to the historical market data table of the admin control panel +- Added the _OSS Friends_ page ### Changed diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index cd4c9f3fb..74457def8 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -66,6 +66,10 @@ https://ghostfol.io/de/ueber-uns/lizenz ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ueber-uns/oss-friends + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en ${currentDate}T00:00:00+00:00 @@ -82,6 +86,10 @@ https://ghostfol.io/en/about/license ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/about/oss-friends + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/blog ${currentDate}T00:00:00+00:00 diff --git a/apps/client/src/app/pages/about/about-page-routing.module.ts b/apps/client/src/app/pages/about/about-page-routing.module.ts index 9183a9b47..91fc06509 100644 --- a/apps/client/src/app/pages/about/about-page-routing.module.ts +++ b/apps/client/src/app/pages/about/about-page-routing.module.ts @@ -38,6 +38,13 @@ const routes: Routes = [ (m) => m.LicensePageModule ) })), + { + path: 'oss-friends', + loadChildren: () => + import('./oss-friends/oss-friends-page.module').then( + (m) => m.OpenSourceSoftwareFriendsPageModule + ) + }, ...[ 'privacy-policy', ///// diff --git a/apps/client/src/app/pages/about/about-page.component.ts b/apps/client/src/app/pages/about/about-page.component.ts index 084623a7c..eb0536f9f 100644 --- a/apps/client/src/app/pages/about/about-page.component.ts +++ b/apps/client/src/app/pages/about/about-page.component.ts @@ -44,30 +44,31 @@ export class AboutPageComponent implements OnDestroy, OnInit { this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) .subscribe((state) => { + this.tabs = [ + { + iconName: 'reader-outline', + label: $localize`About`, + path: ['/about'] + }, + { + iconName: 'sparkles-outline', + label: $localize`Changelog`, + path: ['/about', 'changelog'] + }, + { + iconName: 'ribbon-outline', + label: $localize`License`, + path: ['/about', 'license'] + } + ]; + if (state?.user) { - this.tabs = [ - { - iconName: 'reader-outline', - label: $localize`About`, - path: ['/about'] - }, - { - iconName: 'sparkles-outline', - label: $localize`Changelog`, - path: ['/about', 'changelog'] - }, - { - iconName: 'ribbon-outline', - label: $localize`License`, - path: ['/about', 'license'] - }, - { - iconName: 'shield-checkmark-outline', - label: $localize`Privacy Policy`, - path: ['/about', 'privacy-policy'], - showCondition: this.hasPermissionForSubscription - } - ]; + this.tabs.push({ + iconName: 'shield-checkmark-outline', + label: $localize`Privacy Policy`, + path: ['/about', 'privacy-policy'], + showCondition: this.hasPermissionForSubscription + }); this.user = state.user; this.hasMessage = @@ -78,6 +79,12 @@ export class AboutPageComponent implements OnDestroy, OnInit { this.changeDetectorRef.markForCheck(); } + + this.tabs.push({ + iconName: 'happy-outline', + label: 'OSS Friends', + path: ['/about', 'oss-friends'] + }); }); } diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page-routing.module.ts b/apps/client/src/app/pages/about/oss-friends/oss-friends-page-routing.module.ts new file mode 100644 index 000000000..34aa528a5 --- /dev/null +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page-routing.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { OpenSourceSoftwareFriendsPageComponent } from './oss-friends-page.component'; + +const routes: Routes = [ + { + canActivate: [AuthGuard], + component: OpenSourceSoftwareFriendsPageComponent, + path: '', + title: 'OSS Friends' + } +]; + +@NgModule({ + exports: [RouterModule], + imports: [RouterModule.forChild(routes)] +}) +export class OpenSourceSoftwareFriendsPageRoutingModule {} diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts new file mode 100644 index 000000000..a387976db --- /dev/null +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts @@ -0,0 +1,145 @@ +import { Component, OnDestroy } from '@angular/core'; +import { Subject } from 'rxjs'; + +@Component({ + host: { class: 'page' }, + selector: 'gf-oss-friends-page', + styleUrls: ['./oss-friends-page.scss'], + templateUrl: './oss-friends-page.html' +}) +export class OpenSourceSoftwareFriendsPageComponent implements OnDestroy { + public ossFriends = [ + { + description: 'Build build custom software on top of your data.', + name: 'Appsmith', + url: 'https://www.appsmith.com' + }, + { + description: + 'BoxyHQ’s suite of APIs for security and privacy helps engineering teams build and ship compliant cloud applications faster.', + name: 'BoxyHQ', + url: 'https://boxyhq.com' + }, + { + description: + 'Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.', + name: 'Cal.com', + url: 'https://cal.com' + }, + { + description: + 'Centralize community, product, and customer data to understand which companies are engaging with your open source project.', + name: 'Crowd.dev', + url: 'https://www.crowd.dev' + }, + { + description: + 'The Open-Source DocuSign Alternative. We aim to earn your trust by enabling you to self-host the platform and examine its inner workings.', + name: 'Documenso', + url: 'https://documenso.com' + }, + { + description: + 'The Open-Source HubSpot Alternative. A single XOS enables to create unique and life-changing experiences ​​that work for all types of business.', + name: 'Erxes', + url: 'https://erxes.io' + }, + { + description: + 'Survey granular user segments at any point in the user journey. Gather up to 6x more insights with targeted micro-surveys. All open-source.', + name: 'Formbricks', + url: 'https://formbricks.com' + }, + { + description: + 'GitWonk is an open-source technical documentation tool, designed and built focusing on the developer experience.', + name: 'GitWonk', + url: 'https://gitwonk.com' + }, + { + description: + 'Open-source authentication and user management for the passkey era. Integrated in minutes, for web and mobile apps.', + name: 'Hanko', + url: 'https://www.hanko.io' + }, + { + description: + 'HTMX is a dependency-free JavaScript library that allows you to access AJAX, CSS Transitions, WebSockets, and Server Sent Events directly in HTML.', + name: 'HTMX', + url: 'https://htmx.org' + }, + { + description: + 'Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.', + name: 'Infisical', + url: 'https://infisical.com' + }, + { + description: + 'Mockoon is the easiest and quickest way to design and run mock REST APIs.', + name: 'Mockoon', + url: 'https://mockoon.com' + }, + { + description: + 'The open-source notification infrastructure for developers. Simple components and APIs for managing all communication channels in one place.', + name: 'Novu', + url: 'https://novu.co' + }, + { + description: + 'Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.', + name: 'OpenBB', + url: 'https://openbb.co' + }, + { + description: + 'Sniffnet is a network monitoring tool to help you easily keep track of your Internet traffic.', + name: 'Sniffnet', + url: 'https://www.sniffnet.net' + }, + { + description: 'Software localization from A to Z made really easy.', + name: 'Tolgee', + url: 'https://tolgee.io' + }, + { + description: + 'Create long-running Jobs directly in your codebase with features like API integrations, webhooks, scheduling and delays.', + name: 'Trigger.dev', + url: 'https://trigger.dev' + }, + { + description: + 'Typebot gives you powerful blocks to create unique chat experiences. Embed them anywhere on your apps and start collecting results like magic.', + name: 'Typebot', + url: 'https://typebot.io' + }, + { + description: + 'A modern CRM offering the flexibility of open-source, advanced features and sleek design.', + name: 'Twenty', + url: 'https://twenty.com' + }, + { + description: + 'Open-source enterprise-grade serverless CMS. Own your data. Scale effortlessly. Customize everything.', + name: 'Webiny', + url: 'https://www.webiny.com' + }, + { + description: 'Webstudio is an open source alternative to Webflow', + name: 'Webstudio', + url: 'https://webstudio.is' + } + ]; + + private unsubscribeSubject = new Subject(); + + public constructor() {} + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } +} diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html new file mode 100644 index 000000000..07f9a8347 --- /dev/null +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html @@ -0,0 +1,36 @@ +
+
+
+

+ Our OSS Friends +

+
+
+ + + {{ ossFriend.name }} + + +

{{ ossFriend.description }}

+
+ + + Visit {{ ossFriend.name + }} + + +
+
+
+
+
+
diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts new file mode 100644 index 000000000..1af5631b0 --- /dev/null +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.module.ts @@ -0,0 +1,19 @@ +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; + +import { OpenSourceSoftwareFriendsPageRoutingModule } from './oss-friends-page-routing.module'; +import { OpenSourceSoftwareFriendsPageComponent } from './oss-friends-page.component'; +import { MatCardModule } from '@angular/material/card'; +import { MatButtonModule } from '@angular/material/button'; + +@NgModule({ + declarations: [OpenSourceSoftwareFriendsPageComponent], + imports: [ + CommonModule, + MatButtonModule, + MatCardModule, + OpenSourceSoftwareFriendsPageRoutingModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class OpenSourceSoftwareFriendsPageModule {} diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index ab068786a..037f96f02 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -190,7 +190,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 71 + 74
@@ -466,7 +466,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 47 + 50 @@ -1322,7 +1322,7 @@ Allokation libs/ui/src/lib/holdings-table/holdings-table.component.html - 95 + 98 @@ -1338,7 +1338,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 116 + 119 @@ -1346,7 +1346,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 172 @@ -1430,11 +1430,11 @@ Über Ghostfolio apps/client/src/app/pages/about/about-page-routing.module.ts - 60 + 67 apps/client/src/app/pages/about/about-page.component.ts - 51 + 50 apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts @@ -1550,7 +1550,7 @@ Datenschutzbestimmungen apps/client/src/app/pages/about/about-page.component.ts - 66 + 68 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts @@ -2786,7 +2786,7 @@ Filtern nach Konto oder Tag... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts - 141 + 147 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -4158,7 +4158,7 @@ Changelog apps/client/src/app/pages/about/about-page.component.ts - 56 + 55 apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts @@ -4170,7 +4170,7 @@ Lizenz apps/client/src/app/pages/about/about-page.component.ts - 61 + 60 apps/client/src/app/pages/about/license/license-page-routing.module.ts @@ -7265,6 +7265,22 @@ 65 + + Our + Unsere + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 5 + + + + Visit + Besuche + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 26 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index eba5d988b..91bc6c798 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -191,7 +191,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 71 + 74 @@ -467,7 +467,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 47 + 50 @@ -1323,7 +1323,7 @@ Distribución libs/ui/src/lib/holdings-table/holdings-table.component.html - 95 + 98 @@ -1339,7 +1339,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 116 + 119 @@ -1347,7 +1347,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 172 @@ -1431,11 +1431,11 @@ Sobre apps/client/src/app/pages/about/about-page-routing.module.ts - 60 + 67 apps/client/src/app/pages/about/about-page.component.ts - 51 + 50 apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts @@ -1551,7 +1551,7 @@ Política de privacidad apps/client/src/app/pages/about/about-page.component.ts - 66 + 68 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts @@ -2779,7 +2779,7 @@ Filtrar por cuenta o etiqueta... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts - 141 + 147 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -4159,7 +4159,7 @@ Changelog apps/client/src/app/pages/about/about-page.component.ts - 56 + 55 apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts @@ -4171,7 +4171,7 @@ License apps/client/src/app/pages/about/about-page.component.ts - 61 + 60 apps/client/src/app/pages/about/license/license-page-routing.module.ts @@ -7266,6 +7266,22 @@ 65 + + Our + Our + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 5 + + + + Visit + Visit + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 26 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 16cdf0401..dd4adca09 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -254,7 +254,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 71 + 74 @@ -578,7 +578,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 47 + 50 @@ -970,7 +970,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 116 + 119 @@ -1782,11 +1782,11 @@ À propos apps/client/src/app/pages/about/about-page-routing.module.ts - 60 + 67 apps/client/src/app/pages/about/about-page.component.ts - 51 + 50 apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts @@ -1822,7 +1822,7 @@ Politique de Vie Privée apps/client/src/app/pages/about/about-page.component.ts - 66 + 68 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts @@ -2530,7 +2530,7 @@ Filtrer par compte ou étiquette... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts - 141 + 147 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3098,7 +3098,7 @@ Part libs/ui/src/lib/holdings-table/holdings-table.component.html - 95 + 98 @@ -3106,7 +3106,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 172 @@ -4158,7 +4158,7 @@ Historique des Modifications apps/client/src/app/pages/about/about-page.component.ts - 56 + 55 apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts @@ -4170,7 +4170,7 @@ Licence apps/client/src/app/pages/about/about-page.component.ts - 61 + 60 apps/client/src/app/pages/about/license/license-page-routing.module.ts @@ -7265,6 +7265,22 @@ 65 + + Our + Our + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 5 + + + + Visit + Visit + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 26 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index daf464c36..6d97cf344 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -191,7 +191,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 71 + 74 @@ -467,7 +467,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 47 + 50 @@ -1323,7 +1323,7 @@ Allocazione libs/ui/src/lib/holdings-table/holdings-table.component.html - 95 + 98 @@ -1339,7 +1339,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 116 + 119 @@ -1347,7 +1347,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 172 @@ -1431,11 +1431,11 @@ Informazioni su apps/client/src/app/pages/about/about-page-routing.module.ts - 60 + 67 apps/client/src/app/pages/about/about-page.component.ts - 51 + 50 apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts @@ -1551,7 +1551,7 @@ Informativa sulla privacy apps/client/src/app/pages/about/about-page.component.ts - 66 + 68 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts @@ -2779,7 +2779,7 @@ Filtra per account o tag... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts - 141 + 147 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -4159,7 +4159,7 @@ Changelog apps/client/src/app/pages/about/about-page.component.ts - 56 + 55 apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts @@ -4171,7 +4171,7 @@ License apps/client/src/app/pages/about/about-page.component.ts - 61 + 60 apps/client/src/app/pages/about/license/license-page-routing.module.ts @@ -7266,6 +7266,22 @@ 65 + + Our + Our + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 5 + + + + Visit + Visit + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 26 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 747473166..a16d4f77f 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -190,7 +190,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 71 + 74 @@ -466,7 +466,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 47 + 50 @@ -1322,7 +1322,7 @@ Toewijzing libs/ui/src/lib/holdings-table/holdings-table.component.html - 95 + 98 @@ -1338,7 +1338,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 116 + 119 @@ -1346,7 +1346,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 172 @@ -1430,11 +1430,11 @@ Over apps/client/src/app/pages/about/about-page-routing.module.ts - 60 + 67 apps/client/src/app/pages/about/about-page.component.ts - 51 + 50 apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts @@ -1550,7 +1550,7 @@ Privacybeleid apps/client/src/app/pages/about/about-page.component.ts - 66 + 68 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts @@ -2778,7 +2778,7 @@ Filter op account of tag... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts - 141 + 147 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -4158,7 +4158,7 @@ Changelog apps/client/src/app/pages/about/about-page.component.ts - 56 + 55 apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts @@ -4170,7 +4170,7 @@ License apps/client/src/app/pages/about/about-page.component.ts - 61 + 60 apps/client/src/app/pages/about/license/license-page-routing.module.ts @@ -7265,6 +7265,22 @@ 65 + + Our + Our + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 5 + + + + Visit + Visit + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 26 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index d803f0003..9f1e3b9a5 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -254,7 +254,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 71 + 74 @@ -578,7 +578,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 47 + 50 @@ -850,7 +850,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 116 + 119 @@ -1662,7 +1662,7 @@ Alocação libs/ui/src/lib/holdings-table/holdings-table.component.html - 95 + 98 @@ -1670,7 +1670,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 172 @@ -1766,11 +1766,11 @@ Sobre apps/client/src/app/pages/about/about-page-routing.module.ts - 60 + 67 apps/client/src/app/pages/about/about-page.component.ts - 51 + 50 apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts @@ -1806,7 +1806,7 @@ Política de Privacidade apps/client/src/app/pages/about/about-page.component.ts - 66 + 68 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts @@ -2450,7 +2450,7 @@ Filtrar por conta ou marcador... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts - 141 + 147 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -4158,7 +4158,7 @@ Changelog apps/client/src/app/pages/about/about-page.component.ts - 56 + 55 apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts @@ -4170,7 +4170,7 @@ License apps/client/src/app/pages/about/about-page.component.ts - 61 + 60 apps/client/src/app/pages/about/license/license-page-routing.module.ts @@ -7265,6 +7265,22 @@ 65 + + Our + Our + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 5 + + + + Visit + Visit + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 26 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index c3c3d2935..2c44497f9 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -180,7 +180,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 71 + 74 @@ -435,7 +435,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 47 + 50 @@ -1217,7 +1217,7 @@ Allocation libs/ui/src/lib/holdings-table/holdings-table.component.html - 95 + 98 @@ -1232,14 +1232,14 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 116 + 119 Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 172 @@ -1314,11 +1314,11 @@ About apps/client/src/app/pages/about/about-page-routing.module.ts - 60 + 67 apps/client/src/app/pages/about/about-page.component.ts - 51 + 50 apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts @@ -1429,7 +1429,7 @@ Privacy Policy apps/client/src/app/pages/about/about-page.component.ts - 66 + 68 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts @@ -2532,7 +2532,7 @@ Filter by account or tag... apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts - 141 + 147 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3791,7 +3791,7 @@ License apps/client/src/app/pages/about/about-page.component.ts - 61 + 60 apps/client/src/app/pages/about/license/license-page-routing.module.ts @@ -3802,7 +3802,7 @@ Changelog apps/client/src/app/pages/about/about-page.component.ts - 56 + 55 apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts @@ -6803,6 +6803,20 @@ 65 + + Visit + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 26 + + + + Our + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 5 + + From a98c788a26b62bacc36873320d3cbbb487cf0a61 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 18 Aug 2023 20:46:58 +0200 Subject: [PATCH 14/23] Release 1.301.0 (#2246) --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df62dedcc..142e0a9ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 1.301.0 - 2023-08-18 ### Added diff --git a/package.json b/package.json index 89d95aa73..c2f2de928 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.300.0", + "version": "1.301.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 4955555ddddc6019674d95574704f3a95513dc40 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 19 Aug 2023 08:49:31 +0200 Subject: [PATCH 15/23] Release 1.301.1 (#2247) --- CHANGELOG.md | 2 +- apps/client/src/app/app-routing.module.ts | 85 ++++--------------- .../admin-settings.component.html | 4 +- .../components/home-market/home-market.html | 2 +- .../components/home-summary/home-summary.html | 2 +- apps/client/src/app/core/auth.guard.ts | 25 +++--- .../pages/about/changelog/changelog-page.html | 2 +- .../app/pages/about/license/license-page.html | 2 +- .../oss-friends/oss-friends-page.component.ts | 2 +- .../about/oss-friends/oss-friends-page.html | 11 ++- .../about/overview/about-overview-page.html | 2 +- .../privacy-policy/privacy-policy-page.html | 2 +- apps/client/src/app/pages/about/routes.ts | 9 ++ .../src/app/pages/accounts/accounts-page.html | 2 +- apps/client/src/app/pages/blog/blog-page.html | 2 +- apps/client/src/app/pages/faq/faq-page.html | 4 +- apps/client/src/app/pages/faq/routes.ts | 10 +++ .../src/app/pages/features/features-page.html | 13 ++- apps/client/src/app/pages/features/routes.ts | 8 ++ apps/client/src/app/pages/markets/routes.ts | 9 ++ apps/client/src/app/pages/open/open-page.html | 4 +- .../portfolio/activities/activities-page.html | 2 +- .../allocations/allocations-page.html | 2 +- .../portfolio/analysis/analysis-page.html | 2 +- .../app/pages/portfolio/fire/fire-page.html | 4 +- .../portfolio/holdings/holdings-page.html | 2 +- .../src/app/pages/pricing/pricing-page.html | 2 +- apps/client/src/app/pages/pricing/routes.ts | 10 +++ .../src/app/pages/public/public-page.html | 4 +- apps/client/src/app/pages/register/routes.ts | 10 +++ .../personal-finance-tools-page.html | 4 +- .../app/pages/resources/resources-page.html | 2 +- apps/client/src/app/pages/resources/routes.ts | 9 ++ .../pages/user-account/user-account-page.html | 4 +- apps/client/src/locales/messages.de.xlf | 70 ++++++++++----- apps/client/src/locales/messages.es.xlf | 70 ++++++++++----- apps/client/src/locales/messages.fr.xlf | 70 ++++++++++----- apps/client/src/locales/messages.it.xlf | 70 ++++++++++----- apps/client/src/locales/messages.nl.xlf | 70 ++++++++++----- apps/client/src/locales/messages.pt.xlf | 70 ++++++++++----- apps/client/src/locales/messages.xlf | 67 ++++++++++----- package.json | 2 +- 42 files changed, 467 insertions(+), 281 deletions(-) create mode 100644 apps/client/src/app/pages/about/routes.ts create mode 100644 apps/client/src/app/pages/faq/routes.ts create mode 100644 apps/client/src/app/pages/features/routes.ts create mode 100644 apps/client/src/app/pages/markets/routes.ts create mode 100644 apps/client/src/app/pages/pricing/routes.ts create mode 100644 apps/client/src/app/pages/register/routes.ts create mode 100644 apps/client/src/app/pages/resources/routes.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 142e0a9ca..53154e038 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 1.301.0 - 2023-08-18 +## 1.301.1 - 2023-08-19 ### Added diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 7ff6ead61..b5548afd4 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -1,19 +1,18 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes, TitleStrategy } from '@angular/router'; +import { routes as aboutRoutes } from '@ghostfolio/client/pages/about/routes'; +import { routes as faqRoutes } from '@ghostfolio/client/pages/faq/routes'; +import { routes as featuresRoutes } from '@ghostfolio/client/pages/features/routes'; +import { routes as marketsRoutes } from '@ghostfolio/client/pages/markets/routes'; +import { routes as pricingRoutes } from '@ghostfolio/client/pages/pricing/routes'; +import { routes as registerRoutes } from '@ghostfolio/client/pages/register/routes'; +import { routes as resourcesRoutes } from '@ghostfolio/client/pages/resources/routes'; import { PageTitleStrategy } from '@ghostfolio/client/services/page-title.strategy'; import { ModulePreloadService } from './core/module-preload.service'; const routes: Routes = [ - ...[ - 'about', - ///// - 'a-propos', - 'informazioni-su', - 'over', - 'sobre', - 'ueber-uns' - ].map((path) => ({ + ...aboutRoutes.map((path) => ({ path, loadChildren: () => import('./pages/about/about-page.module').then((m) => m.AboutPageModule) @@ -42,38 +41,22 @@ const routes: Routes = [ loadChildren: () => import('./pages/auth/auth-page.module').then((m) => m.AuthPageModule) }, - ...['blog'].map((path) => ({ - path, + { + path: 'blog', loadChildren: () => import('./pages/blog/blog-page.module').then((m) => m.BlogPageModule) - })), + }, { path: 'demo', loadChildren: () => import('./pages/demo/demo-page.module').then((m) => m.DemoPageModule) }, - ...[ - 'faq', - ///// - 'domande-piu-frequenti', - 'foire-aux-questions', - 'haeufig-gestellte-fragen', - 'perguntas-mais-frequentes', - 'preguntas-mas-frecuentes', - 'vaak-gestelde-vragen' - ].map((path) => ({ + ...faqRoutes.map((path) => ({ path, loadChildren: () => import('./pages/faq/faq-page.module').then((m) => m.FaqPageModule) })), - ...[ - 'features', - ///// - 'fonctionnalites', - 'funcionalidades', - 'funzionalita', - 'kenmerken' - ].map((path) => ({ + ...featuresRoutes.map((path) => ({ path, loadChildren: () => import('./pages/features/features-page.module').then( @@ -85,15 +68,7 @@ const routes: Routes = [ loadChildren: () => import('./pages/home/home-page.module').then((m) => m.HomePageModule) }, - ...[ - 'markets', - ///// - 'maerkte', - 'marches', - 'markten', - 'mercados', - 'mercati' - ].map((path) => ({ + ...marketsRoutes.map((path) => ({ path, loadChildren: () => import('./pages/markets/markets-page.module').then( @@ -119,47 +94,21 @@ const routes: Routes = [ (m) => m.PortfolioPageModule ) }, - ...[ - 'pricing', - ///// - 'precios', - 'precos', - 'preise', - 'prezzi', - 'prijzen', - 'prix' - ].map((path) => ({ + ...pricingRoutes.map((path) => ({ path, loadChildren: () => import('./pages/pricing/pricing-page.module').then( (m) => m.PricingPageModule ) })), - ...[ - 'register', - ///// - 'enregistrement', - 'iscrizione', - 'registo', - 'registratie', - 'registrierung', - 'registro' - ].map((path) => ({ + ...registerRoutes.map((path) => ({ path, loadChildren: () => import('./pages/register/register-page.module').then( (m) => m.RegisterPageModule ) })), - ...[ - 'resources', - ///// - 'bronnen', - 'recursos', - 'ressourcen', - 'ressources', - 'risorse' - ].map((path) => ({ + ...resourcesRoutes.map((path) => ({ path, loadChildren: () => import('./pages/resources/resources-page.module').then( diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.html b/apps/client/src/app/components/admin-settings/admin-settings.component.html index aa4395b27..6f23a4056 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.html +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -1,14 +1,14 @@
-

Platforms

+

Platforms

diff --git a/apps/client/src/app/components/home-market/home-market.html b/apps/client/src/app/components/home-market/home-market.html index cf6603be2..377050e47 100644 --- a/apps/client/src/app/components/home-market/home-market.html +++ b/apps/client/src/app/components/home-market/home-market.html @@ -1,5 +1,5 @@
-

Markets

+

Markets

diff --git a/apps/client/src/app/components/home-summary/home-summary.html b/apps/client/src/app/components/home-summary/home-summary.html index cb6050992..b75fe5aab 100644 --- a/apps/client/src/app/components/home-summary/home-summary.html +++ b/apps/client/src/app/components/home-summary/home-summary.html @@ -1,5 +1,5 @@
-

Summary

+

Summary

diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts index 079fb816b..f5ee34f52 100644 --- a/apps/client/src/app/core/auth.guard.ts +++ b/apps/client/src/app/core/auth.guard.ts @@ -4,6 +4,13 @@ import { Router, RouterStateSnapshot } from '@angular/router'; +import { routes as aboutRoutes } from '@ghostfolio/client/pages/about/routes'; +import { routes as faqRoutes } from '@ghostfolio/client/pages/faq/routes'; +import { routes as featuresRoutes } from '@ghostfolio/client/pages/features/routes'; +import { routes as marketsRoutes } from '@ghostfolio/client/pages/markets/routes'; +import { routes as pricingRoutes } from '@ghostfolio/client/pages/pricing/routes'; +import { routes as registerRoutes } from '@ghostfolio/client/pages/register/routes'; +import { routes as resourcesRoutes } from '@ghostfolio/client/pages/resources/routes'; import { DataService } from '@ghostfolio/client/services/data.service'; import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; @@ -13,21 +20,17 @@ import { catchError } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class AuthGuard { private static PUBLIC_PAGE_ROUTES = [ - '/about', - '/about/changelog', - '/about/privacy-policy', + ...aboutRoutes.map((route) => `/${route}`), '/blog', - '/de/blog', '/demo', - '/en/blog', - '/faq', - '/features', - '/markets', + ...faqRoutes.map((route) => `/${route}`), + ...featuresRoutes.map((route) => `/${route}`), + ...marketsRoutes.map((route) => `/${route}`), '/open', '/p', - '/pricing', - '/register', - '/resources' + ...pricingRoutes.map((route) => `/${route}`), + ...registerRoutes.map((route) => `/${route}`), + ...resourcesRoutes.map((route) => `/${route}`) ]; constructor( diff --git a/apps/client/src/app/pages/about/changelog/changelog-page.html b/apps/client/src/app/pages/about/changelog/changelog-page.html index ca7519ba5..0a333f073 100644 --- a/apps/client/src/app/pages/about/changelog/changelog-page.html +++ b/apps/client/src/app/pages/about/changelog/changelog-page.html @@ -1,7 +1,7 @@
-

Changelog

+

Changelog

diff --git a/apps/client/src/app/pages/about/license/license-page.html b/apps/client/src/app/pages/about/license/license-page.html index fe2831da5..ff6315356 100644 --- a/apps/client/src/app/pages/about/license/license-page.html +++ b/apps/client/src/app/pages/about/license/license-page.html @@ -1,7 +1,7 @@
-

License

+

License

diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts index a387976db..f00952c65 100644 --- a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.component.ts @@ -10,7 +10,7 @@ import { Subject } from 'rxjs'; export class OpenSourceSoftwareFriendsPageComponent implements OnDestroy { public ossFriends = [ { - description: 'Build build custom software on top of your data.', + description: 'Build custom software on top of your data.', name: 'Appsmith', url: 'https://www.appsmith.com' }, diff --git a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html index 07f9a8347..77de91ee1 100644 --- a/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html +++ b/apps/client/src/app/pages/about/oss-friends/oss-friends-page.html @@ -1,9 +1,14 @@
-

- Our OSS Friends -

+

+ Our OSS Friends + Discover more Open Source Software projects +

-

About Ghostfolio

+

About Ghostfolio

Ghostfolio is a lightweight wealth management application for diff --git a/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html b/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html index 3dff9fd8b..ec67268ee 100644 --- a/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html +++ b/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -1,7 +1,7 @@

-

Privacy Policy

+

Privacy Policy

diff --git a/apps/client/src/app/pages/about/routes.ts b/apps/client/src/app/pages/about/routes.ts new file mode 100644 index 000000000..b0e63476d --- /dev/null +++ b/apps/client/src/app/pages/about/routes.ts @@ -0,0 +1,9 @@ +export const routes = [ + 'about', + ///// + 'a-propos', + 'informazioni-su', + 'over', + 'sobre', + 'ueber-uns' +] as const; diff --git a/apps/client/src/app/pages/accounts/accounts-page.html b/apps/client/src/app/pages/accounts/accounts-page.html index 77c487f98..6057802df 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.html +++ b/apps/client/src/app/pages/accounts/accounts-page.html @@ -1,7 +1,7 @@
-

Accounts

+

Accounts

-

Blog

+

Blog

diff --git a/apps/client/src/app/pages/faq/faq-page.html b/apps/client/src/app/pages/faq/faq-page.html index 1b441091c..5af20597f 100644 --- a/apps/client/src/app/pages/faq/faq-page.html +++ b/apps/client/src/app/pages/faq/faq-page.html @@ -1,9 +1,9 @@
-

+

Frequently Asked Questions (FAQ) -

+

Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. Discover what Ghostfolio is, diff --git a/apps/client/src/app/pages/faq/routes.ts b/apps/client/src/app/pages/faq/routes.ts new file mode 100644 index 000000000..b14b3d88b --- /dev/null +++ b/apps/client/src/app/pages/faq/routes.ts @@ -0,0 +1,10 @@ +export const routes = [ + 'faq', + ///// + 'domande-piu-frequenti', + 'foire-aux-questions', + 'haeufig-gestellte-fragen', + 'perguntas-mais-frequentes', + 'preguntas-mas-frecuentes', + 'vaak-gestelde-vragen' +] as const; diff --git a/apps/client/src/app/pages/features/features-page.html b/apps/client/src/app/pages/features/features-page.html index 9f5d2a29d..1dd0ee531 100644 --- a/apps/client/src/app/pages/features/features-page.html +++ b/apps/client/src/app/pages/features/features-page.html @@ -1,13 +1,12 @@

-

Features

-
-

- Check out the numerous features of Ghostfolio to - manage your wealth. -

-
+

+ Features + + Check out the numerous features of Ghostfolio to manage your wealth + +

diff --git a/apps/client/src/app/pages/features/routes.ts b/apps/client/src/app/pages/features/routes.ts new file mode 100644 index 000000000..b2389af0c --- /dev/null +++ b/apps/client/src/app/pages/features/routes.ts @@ -0,0 +1,8 @@ +export const routes = [ + 'features', + ///// + 'fonctionnalites', + 'funcionalidades', + 'funzionalita', + 'kenmerken' +] as const; diff --git a/apps/client/src/app/pages/markets/routes.ts b/apps/client/src/app/pages/markets/routes.ts new file mode 100644 index 000000000..68b7a6e0b --- /dev/null +++ b/apps/client/src/app/pages/markets/routes.ts @@ -0,0 +1,9 @@ +export const routes = [ + 'markets', + ///// + 'maerkte', + 'marches', + 'markten', + 'mercados', + 'mercati' +] as const; diff --git a/apps/client/src/app/pages/open/open-page.html b/apps/client/src/app/pages/open/open-page.html index 04a046181..a28e32ce4 100644 --- a/apps/client/src/app/pages/open/open-page.html +++ b/apps/client/src/app/pages/open/open-page.html @@ -1,8 +1,8 @@
-

Open Startup

-
+

Open Startup

+

At Ghostfolio, transparency is at the core of our values. We publish the source code as diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.html b/apps/client/src/app/pages/portfolio/activities/activities-page.html index dddc41b0b..a5c9201a0 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.html +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1,7 +1,7 @@

-

Activities

+

Activities

-

Allocations

+

Allocations

-

Analysis

+

Analysis

-

FIRE

+

FIRE

Calculator
-

X-ray

+

X-ray

Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio. diff --git a/apps/client/src/app/pages/portfolio/holdings/holdings-page.html b/apps/client/src/app/pages/portfolio/holdings/holdings-page.html index 77696fcbd..98b5dad87 100644 --- a/apps/client/src/app/pages/portfolio/holdings/holdings-page.html +++ b/apps/client/src/app/pages/portfolio/holdings/holdings-page.html @@ -1,7 +1,7 @@

-

Holdings

+

Holdings

-

Pricing Plans

+

Pricing Plans

Our official Ghostfolio Premium cloud offering is the easiest way to diff --git a/apps/client/src/app/pages/pricing/routes.ts b/apps/client/src/app/pages/pricing/routes.ts new file mode 100644 index 000000000..0d1bbd4f1 --- /dev/null +++ b/apps/client/src/app/pages/pricing/routes.ts @@ -0,0 +1,10 @@ +export const routes = [ + 'pricing', + ///// + 'precios', + 'precos', + 'preise', + 'prezzi', + 'prijzen', + 'prix' +] as const; diff --git a/apps/client/src/app/pages/public/public-page.html b/apps/client/src/app/pages/public/public-page.html index 5b687aa9e..7d8eacf9f 100644 --- a/apps/client/src/app/pages/public/public-page.html +++ b/apps/client/src/app/pages/public/public-page.html @@ -1,10 +1,10 @@

-

+

Hello, {{ portfolioPublicDetails?.alias ?? 'someone' }} has shared a Portfolio with you! -

+

diff --git a/apps/client/src/app/pages/register/routes.ts b/apps/client/src/app/pages/register/routes.ts new file mode 100644 index 000000000..e885d1038 --- /dev/null +++ b/apps/client/src/app/pages/register/routes.ts @@ -0,0 +1,10 @@ +export const routes = [ + 'register', + ///// + 'enregistrement', + 'iscrizione', + 'registo', + 'registratie', + 'registrierung', + 'registro' +] as const; 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 736018a91..2c0a2b825 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 @@ -1,9 +1,9 @@
-

+

Discover Open Source Alternatives for Personal Finance Tools -

+

This overview page features a curated collection of personal finance diff --git a/apps/client/src/app/pages/resources/resources-page.html b/apps/client/src/app/pages/resources/resources-page.html index 9f35c6114..3e0e5959a 100644 --- a/apps/client/src/app/pages/resources/resources-page.html +++ b/apps/client/src/app/pages/resources/resources-page.html @@ -1,7 +1,7 @@

-

Resources

+

Resources

Guides

diff --git a/apps/client/src/app/pages/resources/routes.ts b/apps/client/src/app/pages/resources/routes.ts new file mode 100644 index 000000000..acdf9cdfc --- /dev/null +++ b/apps/client/src/app/pages/resources/routes.ts @@ -0,0 +1,9 @@ +export const routes = [ + 'resources', + ///// + 'bronnen', + 'recursos', + 'ressourcen', + 'ressources', + 'risorse' +] as const; diff --git a/apps/client/src/app/pages/user-account/user-account-page.html b/apps/client/src/app/pages/user-account/user-account-page.html index aeba71320..ab3b03d0f 100644 --- a/apps/client/src/app/pages/user-account/user-account-page.html +++ b/apps/client/src/app/pages/user-account/user-account-page.html @@ -1,7 +1,7 @@
-

Account

+

Account

@@ -287,7 +287,7 @@
-

Granted Access

+

Granted Access

apps/client/src/app/pages/features/features-page.html - 4 + 5 @@ -974,7 +974,7 @@ Registrieren apps/client/src/app/pages/features/features-page.html - 299 + 298 apps/client/src/app/pages/public/public-page.html @@ -1206,7 +1206,7 @@ apps/client/src/app/pages/features/features-page.html - 90 + 89 @@ -1246,7 +1246,7 @@ apps/client/src/app/pages/features/features-page.html - 64 + 63 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1698,7 +1698,7 @@ Zen Modus apps/client/src/app/pages/features/features-page.html - 193 + 192 apps/client/src/app/pages/user-account/user-account-page.html @@ -3182,7 +3182,7 @@ apps/client/src/app/pages/features/features-page.html - 260 + 259 apps/client/src/app/pages/user-account/user-account-page.html @@ -3690,7 +3690,7 @@ apps/client/src/app/pages/features/features-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -4150,7 +4150,7 @@ apps/client/src/app/pages/features/features-page.html - 103 + 102 @@ -4182,7 +4182,7 @@ Aktien apps/client/src/app/pages/features/features-page.html - 16 + 15 @@ -4190,7 +4190,7 @@ ETFs apps/client/src/app/pages/features/features-page.html - 26 + 25 @@ -4198,7 +4198,7 @@ Anleihen apps/client/src/app/pages/features/features-page.html - 39 + 38 @@ -4206,7 +4206,7 @@ Kryptowährungen apps/client/src/app/pages/features/features-page.html - 52 + 51 @@ -4214,7 +4214,7 @@ Wertsachen apps/client/src/app/pages/features/features-page.html - 77 + 76 @@ -4222,7 +4222,7 @@ Import und Export apps/client/src/app/pages/features/features-page.html - 116,118 + 115,117 @@ -4230,7 +4230,7 @@ Unterstützung mehrerer Konten apps/client/src/app/pages/features/features-page.html - 128 + 127 @@ -4238,7 +4238,7 @@ Portfolio Berechnungen apps/client/src/app/pages/features/features-page.html - 142 + 141 @@ -4246,7 +4246,7 @@ Dark Mode apps/client/src/app/pages/features/features-page.html - 180 + 179 @@ -4254,7 +4254,7 @@ Marktstimmung apps/client/src/app/pages/features/features-page.html - 210 + 209 @@ -4262,7 +4262,7 @@ Statische Analyse apps/client/src/app/pages/features/features-page.html - 228 + 227 @@ -4270,7 +4270,7 @@ Mehrsprachigkeit apps/client/src/app/pages/features/features-page.html - 246 + 245 @@ -4278,7 +4278,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 279 + 278 @@ -7270,7 +7270,7 @@ Unsere apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 5 + 6 @@ -7278,7 +7278,31 @@ Besuche apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 26 + 31 + + + + Discover more Open Source Software projects + Entdecke weitere Open Source Software Projekte + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 + + + + Frequently Asked Questions (FAQ) + Häufig gestellte Fragen (FAQ) + + apps/client/src/app/pages/faq/faq-page.html + 4,6 + + + + Check out the numerous features of Ghostfolio to manage your wealth + Entdecke die zahlreichen Funktionen von Ghostfolio zur Vermögensverwaltung + + apps/client/src/app/pages/features/features-page.html + 6,8 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 91bc6c798..1ff5f6449 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -947,7 +947,7 @@ apps/client/src/app/pages/features/features-page.html - 4 + 5 @@ -975,7 +975,7 @@ Empezar apps/client/src/app/pages/features/features-page.html - 299 + 298 apps/client/src/app/pages/public/public-page.html @@ -1207,7 +1207,7 @@ apps/client/src/app/pages/features/features-page.html - 90 + 89 @@ -1247,7 +1247,7 @@ apps/client/src/app/pages/features/features-page.html - 64 + 63 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1699,7 +1699,7 @@ Modo Zen apps/client/src/app/pages/features/features-page.html - 193 + 192 apps/client/src/app/pages/user-account/user-account-page.html @@ -3183,7 +3183,7 @@ apps/client/src/app/pages/features/features-page.html - 260 + 259 apps/client/src/app/pages/user-account/user-account-page.html @@ -3691,7 +3691,7 @@ apps/client/src/app/pages/features/features-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -4151,7 +4151,7 @@ apps/client/src/app/pages/features/features-page.html - 103 + 102 @@ -4183,7 +4183,7 @@ Stocks apps/client/src/app/pages/features/features-page.html - 16 + 15 @@ -4191,7 +4191,7 @@ ETFs apps/client/src/app/pages/features/features-page.html - 26 + 25 @@ -4199,7 +4199,7 @@ Bonds apps/client/src/app/pages/features/features-page.html - 39 + 38 @@ -4207,7 +4207,7 @@ Cryptocurrencies apps/client/src/app/pages/features/features-page.html - 52 + 51 @@ -4215,7 +4215,7 @@ Wealth Items apps/client/src/app/pages/features/features-page.html - 77 + 76 @@ -4223,7 +4223,7 @@ Import and Export apps/client/src/app/pages/features/features-page.html - 116,118 + 115,117 @@ -4231,7 +4231,7 @@ Multi-Accounts apps/client/src/app/pages/features/features-page.html - 128 + 127 @@ -4239,7 +4239,7 @@ Portfolio Calculations apps/client/src/app/pages/features/features-page.html - 142 + 141 @@ -4247,7 +4247,7 @@ Dark Mode apps/client/src/app/pages/features/features-page.html - 180 + 179 @@ -4255,7 +4255,7 @@ Market Mood apps/client/src/app/pages/features/features-page.html - 210 + 209 @@ -4263,7 +4263,7 @@ Static Analysis apps/client/src/app/pages/features/features-page.html - 228 + 227 @@ -4271,7 +4271,7 @@ Multi-Language apps/client/src/app/pages/features/features-page.html - 246 + 245 @@ -4279,7 +4279,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 279 + 278 @@ -7271,7 +7271,7 @@ Our apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 5 + 6 @@ -7279,7 +7279,31 @@ Visit apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 26 + 31 + + + + Discover more Open Source Software projects + Discover more Open Source Software projects + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 + + + + Frequently Asked Questions (FAQ) + Frequently Asked Questions (FAQ) + + apps/client/src/app/pages/faq/faq-page.html + 4,6 + + + + Check out the numerous features of Ghostfolio to manage your wealth + Check out the numerous features of Ghostfolio to manage your wealth + + apps/client/src/app/pages/features/features-page.html + 6,8 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index dd4adca09..37c33df32 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -1238,7 +1238,7 @@ apps/client/src/app/pages/features/features-page.html - 4 + 5 @@ -1550,7 +1550,7 @@ apps/client/src/app/pages/features/features-page.html - 90 + 89 @@ -1598,7 +1598,7 @@ apps/client/src/app/pages/features/features-page.html - 64 + 63 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1986,7 +1986,7 @@ apps/client/src/app/pages/features/features-page.html - 260 + 259 apps/client/src/app/pages/user-account/user-account-page.html @@ -2062,7 +2062,7 @@ Mode Zen apps/client/src/app/pages/features/features-page.html - 193 + 192 apps/client/src/app/pages/user-account/user-account-page.html @@ -2846,7 +2846,7 @@ Démarrer apps/client/src/app/pages/features/features-page.html - 299 + 298 apps/client/src/app/pages/public/public-page.html @@ -3690,7 +3690,7 @@ apps/client/src/app/pages/features/features-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -4150,7 +4150,7 @@ apps/client/src/app/pages/features/features-page.html - 103 + 102 @@ -4182,7 +4182,7 @@ Actions apps/client/src/app/pages/features/features-page.html - 16 + 15 @@ -4190,7 +4190,7 @@ ETFs apps/client/src/app/pages/features/features-page.html - 26 + 25 @@ -4198,7 +4198,7 @@ Obligations apps/client/src/app/pages/features/features-page.html - 39 + 38 @@ -4206,7 +4206,7 @@ Cryptomonnaies apps/client/src/app/pages/features/features-page.html - 52 + 51 @@ -4214,7 +4214,7 @@ Wealth Items apps/client/src/app/pages/features/features-page.html - 77 + 76 @@ -4222,7 +4222,7 @@ Importer et Exporter apps/client/src/app/pages/features/features-page.html - 116,118 + 115,117 @@ -4230,7 +4230,7 @@ Multi-Comptes apps/client/src/app/pages/features/features-page.html - 128 + 127 @@ -4238,7 +4238,7 @@ Portfolio Calculations apps/client/src/app/pages/features/features-page.html - 142 + 141 @@ -4246,7 +4246,7 @@ Mode Sombre apps/client/src/app/pages/features/features-page.html - 180 + 179 @@ -4254,7 +4254,7 @@ Sentiment du Marché apps/client/src/app/pages/features/features-page.html - 210 + 209 @@ -4262,7 +4262,7 @@ Analyse statique apps/client/src/app/pages/features/features-page.html - 228 + 227 @@ -4270,7 +4270,7 @@ Multi-Langue apps/client/src/app/pages/features/features-page.html - 246 + 245 @@ -4278,7 +4278,7 @@ Logiciel Open Source apps/client/src/app/pages/features/features-page.html - 279 + 278 @@ -7270,7 +7270,7 @@ Our apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 5 + 6 @@ -7278,7 +7278,31 @@ Visit apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 26 + 31 + + + + Discover more Open Source Software projects + Discover more Open Source Software projects + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 + + + + Frequently Asked Questions (FAQ) + Frequently Asked Questions (FAQ) + + apps/client/src/app/pages/faq/faq-page.html + 4,6 + + + + Check out the numerous features of Ghostfolio to manage your wealth + Check out the numerous features of Ghostfolio to manage your wealth + + apps/client/src/app/pages/features/features-page.html + 6,8 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 6d97cf344..9323a1894 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -947,7 +947,7 @@ apps/client/src/app/pages/features/features-page.html - 4 + 5 @@ -975,7 +975,7 @@ Iniziare apps/client/src/app/pages/features/features-page.html - 299 + 298 apps/client/src/app/pages/public/public-page.html @@ -1207,7 +1207,7 @@ apps/client/src/app/pages/features/features-page.html - 90 + 89 @@ -1247,7 +1247,7 @@ apps/client/src/app/pages/features/features-page.html - 64 + 63 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1699,7 +1699,7 @@ Modalità Zen apps/client/src/app/pages/features/features-page.html - 193 + 192 apps/client/src/app/pages/user-account/user-account-page.html @@ -3183,7 +3183,7 @@ apps/client/src/app/pages/features/features-page.html - 260 + 259 apps/client/src/app/pages/user-account/user-account-page.html @@ -3691,7 +3691,7 @@ apps/client/src/app/pages/features/features-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -4151,7 +4151,7 @@ apps/client/src/app/pages/features/features-page.html - 103 + 102 @@ -4183,7 +4183,7 @@ Stocks apps/client/src/app/pages/features/features-page.html - 16 + 15 @@ -4191,7 +4191,7 @@ ETFs apps/client/src/app/pages/features/features-page.html - 26 + 25 @@ -4199,7 +4199,7 @@ Bonds apps/client/src/app/pages/features/features-page.html - 39 + 38 @@ -4207,7 +4207,7 @@ Cryptocurrencies apps/client/src/app/pages/features/features-page.html - 52 + 51 @@ -4215,7 +4215,7 @@ Wealth Items apps/client/src/app/pages/features/features-page.html - 77 + 76 @@ -4223,7 +4223,7 @@ Import and Export apps/client/src/app/pages/features/features-page.html - 116,118 + 115,117 @@ -4231,7 +4231,7 @@ Multi-Accounts apps/client/src/app/pages/features/features-page.html - 128 + 127 @@ -4239,7 +4239,7 @@ Portfolio Calculations apps/client/src/app/pages/features/features-page.html - 142 + 141 @@ -4247,7 +4247,7 @@ Dark Mode apps/client/src/app/pages/features/features-page.html - 180 + 179 @@ -4255,7 +4255,7 @@ Market Mood apps/client/src/app/pages/features/features-page.html - 210 + 209 @@ -4263,7 +4263,7 @@ Static Analysis apps/client/src/app/pages/features/features-page.html - 228 + 227 @@ -4271,7 +4271,7 @@ Multi-Language apps/client/src/app/pages/features/features-page.html - 246 + 245 @@ -4279,7 +4279,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 279 + 278 @@ -7271,7 +7271,7 @@ Our apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 5 + 6 @@ -7279,7 +7279,31 @@ Visit apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 26 + 31 + + + + Discover more Open Source Software projects + Discover more Open Source Software projects + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 + + + + Frequently Asked Questions (FAQ) + Frequently Asked Questions (FAQ) + + apps/client/src/app/pages/faq/faq-page.html + 4,6 + + + + Check out the numerous features of Ghostfolio to manage your wealth + Check out the numerous features of Ghostfolio to manage your wealth + + apps/client/src/app/pages/features/features-page.html + 6,8 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index a16d4f77f..83f9752f4 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -946,7 +946,7 @@ apps/client/src/app/pages/features/features-page.html - 4 + 5 @@ -974,7 +974,7 @@ Aan de slag apps/client/src/app/pages/features/features-page.html - 299 + 298 apps/client/src/app/pages/public/public-page.html @@ -1206,7 +1206,7 @@ apps/client/src/app/pages/features/features-page.html - 90 + 89 @@ -1246,7 +1246,7 @@ apps/client/src/app/pages/features/features-page.html - 64 + 63 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1698,7 +1698,7 @@ Zen-modus apps/client/src/app/pages/features/features-page.html - 193 + 192 apps/client/src/app/pages/user-account/user-account-page.html @@ -3182,7 +3182,7 @@ apps/client/src/app/pages/features/features-page.html - 260 + 259 apps/client/src/app/pages/user-account/user-account-page.html @@ -3690,7 +3690,7 @@ apps/client/src/app/pages/features/features-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -4150,7 +4150,7 @@ apps/client/src/app/pages/features/features-page.html - 103 + 102 @@ -4182,7 +4182,7 @@ Stocks apps/client/src/app/pages/features/features-page.html - 16 + 15 @@ -4190,7 +4190,7 @@ ETFs apps/client/src/app/pages/features/features-page.html - 26 + 25 @@ -4198,7 +4198,7 @@ Bonds apps/client/src/app/pages/features/features-page.html - 39 + 38 @@ -4206,7 +4206,7 @@ Cryptocurrencies apps/client/src/app/pages/features/features-page.html - 52 + 51 @@ -4214,7 +4214,7 @@ Wealth Items apps/client/src/app/pages/features/features-page.html - 77 + 76 @@ -4222,7 +4222,7 @@ Import and Export apps/client/src/app/pages/features/features-page.html - 116,118 + 115,117 @@ -4230,7 +4230,7 @@ Multi-Accounts apps/client/src/app/pages/features/features-page.html - 128 + 127 @@ -4238,7 +4238,7 @@ Portfolio Calculations apps/client/src/app/pages/features/features-page.html - 142 + 141 @@ -4246,7 +4246,7 @@ Dark Mode apps/client/src/app/pages/features/features-page.html - 180 + 179 @@ -4254,7 +4254,7 @@ Market Mood apps/client/src/app/pages/features/features-page.html - 210 + 209 @@ -4262,7 +4262,7 @@ Static Analysis apps/client/src/app/pages/features/features-page.html - 228 + 227 @@ -4270,7 +4270,7 @@ Multi-Language apps/client/src/app/pages/features/features-page.html - 246 + 245 @@ -4278,7 +4278,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 279 + 278 @@ -7270,7 +7270,7 @@ Our apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 5 + 6 @@ -7278,7 +7278,31 @@ Visit apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 26 + 31 + + + + Discover more Open Source Software projects + Discover more Open Source Software projects + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 + + + + Frequently Asked Questions (FAQ) + Frequently Asked Questions (FAQ) + + apps/client/src/app/pages/faq/faq-page.html + 4,6 + + + + Check out the numerous features of Ghostfolio to manage your wealth + Check out the numerous features of Ghostfolio to manage your wealth + + apps/client/src/app/pages/features/features-page.html + 6,8 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 9f1e3b9a5..79070e6fd 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -1118,7 +1118,7 @@ apps/client/src/app/pages/features/features-page.html - 4 + 5 @@ -1446,7 +1446,7 @@ apps/client/src/app/pages/features/features-page.html - 90 + 89 @@ -1494,7 +1494,7 @@ apps/client/src/app/pages/features/features-page.html - 64 + 63 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1994,7 +1994,7 @@ Modo Zen apps/client/src/app/pages/features/features-page.html - 193 + 192 apps/client/src/app/pages/user-account/user-account-page.html @@ -2754,7 +2754,7 @@ Começar apps/client/src/app/pages/features/features-page.html - 299 + 298 apps/client/src/app/pages/public/public-page.html @@ -3238,7 +3238,7 @@ apps/client/src/app/pages/features/features-page.html - 260 + 259 apps/client/src/app/pages/user-account/user-account-page.html @@ -3690,7 +3690,7 @@ apps/client/src/app/pages/features/features-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -4150,7 +4150,7 @@ apps/client/src/app/pages/features/features-page.html - 103 + 102 @@ -4182,7 +4182,7 @@ Stocks apps/client/src/app/pages/features/features-page.html - 16 + 15 @@ -4190,7 +4190,7 @@ ETFs apps/client/src/app/pages/features/features-page.html - 26 + 25 @@ -4198,7 +4198,7 @@ Bonds apps/client/src/app/pages/features/features-page.html - 39 + 38 @@ -4206,7 +4206,7 @@ Cryptocurrencies apps/client/src/app/pages/features/features-page.html - 52 + 51 @@ -4214,7 +4214,7 @@ Wealth Items apps/client/src/app/pages/features/features-page.html - 77 + 76 @@ -4222,7 +4222,7 @@ Import and Export apps/client/src/app/pages/features/features-page.html - 116,118 + 115,117 @@ -4230,7 +4230,7 @@ Multi-Accounts apps/client/src/app/pages/features/features-page.html - 128 + 127 @@ -4238,7 +4238,7 @@ Portfolio Calculations apps/client/src/app/pages/features/features-page.html - 142 + 141 @@ -4246,7 +4246,7 @@ Dark Mode apps/client/src/app/pages/features/features-page.html - 180 + 179 @@ -4254,7 +4254,7 @@ Market Mood apps/client/src/app/pages/features/features-page.html - 210 + 209 @@ -4262,7 +4262,7 @@ Static Analysis apps/client/src/app/pages/features/features-page.html - 228 + 227 @@ -4270,7 +4270,7 @@ Multi-Language apps/client/src/app/pages/features/features-page.html - 246 + 245 @@ -4278,7 +4278,7 @@ Open Source Software apps/client/src/app/pages/features/features-page.html - 279 + 278 @@ -7270,7 +7270,7 @@ Our apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 5 + 6 @@ -7278,7 +7278,31 @@ Visit apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 26 + 31 + + + + Discover more Open Source Software projects + Discover more Open Source Software projects + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 + + + + Frequently Asked Questions (FAQ) + Frequently Asked Questions (FAQ) + + apps/client/src/app/pages/faq/faq-page.html + 4,6 + + + + Check out the numerous features of Ghostfolio to manage your wealth + Check out the numerous features of Ghostfolio to manage your wealth + + apps/client/src/app/pages/features/features-page.html + 6,8 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 2c44497f9..fe645d3d9 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -877,7 +877,7 @@ apps/client/src/app/pages/features/features-page.html - 4 + 5 @@ -903,7 +903,7 @@ Get Started apps/client/src/app/pages/features/features-page.html - 299 + 298 apps/client/src/app/pages/public/public-page.html @@ -1111,7 +1111,7 @@ apps/client/src/app/pages/features/features-page.html - 90 + 89 @@ -1147,7 +1147,7 @@ apps/client/src/app/pages/features/features-page.html - 64 + 63 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1560,7 +1560,7 @@ Zen Mode apps/client/src/app/pages/features/features-page.html - 193 + 192 apps/client/src/app/pages/user-account/user-account-page.html @@ -2889,7 +2889,7 @@ apps/client/src/app/pages/features/features-page.html - 260 + 259 apps/client/src/app/pages/user-account/user-account-page.html @@ -3348,7 +3348,7 @@ apps/client/src/app/pages/features/features-page.html - 162 + 161 apps/client/src/app/pages/pricing/pricing-page.html @@ -3752,7 +3752,7 @@ Bonds apps/client/src/app/pages/features/features-page.html - 39 + 38 @@ -3763,28 +3763,28 @@ apps/client/src/app/pages/features/features-page.html - 103 + 102 Static Analysis apps/client/src/app/pages/features/features-page.html - 228 + 227 Multi-Accounts apps/client/src/app/pages/features/features-page.html - 128 + 127 ETFs apps/client/src/app/pages/features/features-page.html - 26 + 25 @@ -3813,56 +3813,56 @@ Cryptocurrencies apps/client/src/app/pages/features/features-page.html - 52 + 51 Stocks apps/client/src/app/pages/features/features-page.html - 16 + 15 Wealth Items apps/client/src/app/pages/features/features-page.html - 77 + 76 Open Source Software apps/client/src/app/pages/features/features-page.html - 279 + 278 Import and Export apps/client/src/app/pages/features/features-page.html - 116,118 + 115,117 Dark Mode apps/client/src/app/pages/features/features-page.html - 180 + 179 Market Mood apps/client/src/app/pages/features/features-page.html - 210 + 209 Multi-Language apps/client/src/app/pages/features/features-page.html - 246 + 245 @@ -3876,7 +3876,7 @@ Portfolio Calculations apps/client/src/app/pages/features/features-page.html - 142 + 141 @@ -6807,14 +6807,35 @@ Visit apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 26 + 31 Our apps/client/src/app/pages/about/oss-friends/oss-friends-page.html - 5 + 6 + + + + Frequently Asked Questions (FAQ) + + apps/client/src/app/pages/faq/faq-page.html + 4,6 + + + + Check out the numerous features of Ghostfolio to manage your wealth + + apps/client/src/app/pages/features/features-page.html + 6,8 + + + + Discover more Open Source Software projects + + apps/client/src/app/pages/about/oss-friends/oss-friends-page.html + 9 diff --git a/package.json b/package.json index c2f2de928..179b7a1e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "1.301.0", + "version": "1.301.1", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From ff59fd41965d351b27fd79537fff3422a64985eb Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 19 Aug 2023 19:49:40 +0200 Subject: [PATCH 16/23] Feature/improve language localization for german 20230819 (#2249) * Improve language localization * Update changelog --- CHANGELOG.md | 6 + apps/client/src/app/pages/blog/blog-page.html | 8 +- .../src/app/pages/landing/landing-page.html | 88 +++-- .../src/app/pages/pricing/pricing-page.html | 2 +- apps/client/src/locales/messages.de.xlf | 338 +++++++++++++++++- apps/client/src/locales/messages.es.xlf | 334 ++++++++++++++++- apps/client/src/locales/messages.fr.xlf | 334 ++++++++++++++++- apps/client/src/locales/messages.it.xlf | 334 ++++++++++++++++- apps/client/src/locales/messages.nl.xlf | 334 ++++++++++++++++- apps/client/src/locales/messages.pt.xlf | 334 ++++++++++++++++- apps/client/src/locales/messages.xlf | 295 ++++++++++++++- 11 files changed, 2357 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53154e038..5e1b6e2db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved the language localization for German (`de`) + ## 1.301.1 - 2023-08-19 ### Added diff --git a/apps/client/src/app/pages/blog/blog-page.html b/apps/client/src/app/pages/blog/blog-page.html index a63e072a9..26c262c1a 100644 --- a/apps/client/src/app/pages/blog/blog-page.html +++ b/apps/client/src/app/pages/blog/blog-page.html @@ -1,7 +1,13 @@
-

Blog

+

+ Blog + Discover the latest Ghostfolio updates and insights on personal + finance +

diff --git a/apps/client/src/app/pages/landing/landing-page.html b/apps/client/src/app/pages/landing/landing-page.html index 5228c41b2..53dd668c6 100644 --- a/apps/client/src/app/pages/landing/landing-page.html +++ b/apps/client/src/app/pages/landing/landing-page.html @@ -1,10 +1,10 @@
-

+

Manage your wealth like a boss

-

+

Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. @@ -31,13 +31,15 @@

@@ -53,6 +55,7 @@ [routerLink]="['/open']" >
-
As seen in
+
+ As seen in +
@@ -289,7 +299,7 @@
-

+

What our users are saying

@@ -319,7 +329,7 @@
-

+

Members from around the globe are using Ghostfolio Premium

@@ -334,17 +344,17 @@
-

+

How does Ghostfolio work?

-

Get started in only 3 steps

+

Get started in only 3 steps

-
Sign up anonymously*
-
+
Sign up anonymously*
+
* no e-mail address nor credit card required
@@ -356,7 +366,7 @@
-
+
Add any of your historical transactions
@@ -368,7 +378,7 @@
-
+
Get valuable insights of your portfolio composition
@@ -380,19 +390,19 @@
-

Are you ready?

-

+

Are you ready?

+

Join now or check out the example account

diff --git a/apps/client/src/app/pages/pricing/pricing-page.html b/apps/client/src/app/pages/pricing/pricing-page.html index d0c0024d4..7057ad5b9 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.html +++ b/apps/client/src/app/pages/pricing/pricing-page.html @@ -21,7 +21,7 @@ here with your university e-mail address.

-

+

If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 7837c9f61..973e976c2 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -1048,6 +1048,10 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 31 + + apps/client/src/app/pages/landing/landing-page.html + 404 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -1518,7 +1522,7 @@ apps/client/src/app/pages/blog/blog-page.html - 4 + 5 @@ -2359,7 +2363,7 @@ I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. - + Ich stimme zu, meinen Security Token an einem sicheren Ort hinterlegt zu haben. Sollte ich diesen verlieren, kann ich mein Konto nicht wiederherstellen. apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 31,34 @@ -6767,7 +6771,7 @@ Effortlessly track, analyze, and visualize your wealth with Ghostfolio. - Mit Ghostfolio können Sie Ihr Vermögen einfach überwachen, analysieren und visualisieren. + Mit Ghostfolio kannst du dein Vermögen einfach überwachen, analysieren und visualisieren. apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 212,215 @@ -7228,6 +7232,10 @@ Stars on GitHub Sterne auf GitHub + + apps/client/src/app/pages/landing/landing-page.html + 80 + apps/client/src/app/pages/open/open-page.html 100 @@ -7236,6 +7244,10 @@ Pulls on Docker Hub Downloads auf Docker Hub + + apps/client/src/app/pages/landing/landing-page.html + 98 + apps/client/src/app/pages/open/open-page.html 114 @@ -7305,6 +7317,326 @@ 6,8 + + Discover the latest Ghostfolio updates and insights on personal finance + Entdecke die neuesten Ghostfolio Updates und Beiträge zu persönlichen Finanzen + + apps/client/src/app/pages/blog/blog-page.html + 7,8 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + Wenn du Ghostfolio lieber auf deiner eigenen Infrastruktur betreiben möchtest, findest du den Quellcode und weitere Informationen auf GitHub. + + apps/client/src/app/pages/pricing/pricing-page.html + 24,28 + + + + Manage your wealth like a boss + Verwalte dein Vermögen wie ein Profi + + apps/client/src/app/pages/landing/landing-page.html + 4,6 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio ist ein Open Source Dashboard für deine persönlichen Finanzen mit Fokus auf Datenschutz. Analysiere deine Vermögensverteilung, ermittle dein Nettovermögen und treffe fundierte, datengestützte Investitionsentscheidungen. + + apps/client/src/app/pages/landing/landing-page.html + 7,11 + + + + Get Started + Jetzt loslegen + + apps/client/src/app/pages/landing/landing-page.html + 34,36 + + + apps/client/src/app/pages/landing/landing-page.html + 400,402 + + + + or + oder + + apps/client/src/app/pages/landing/landing-page.html + 39,41 + + + + Monthly Active Users + Monatlich aktive Nutzer + + apps/client/src/app/pages/landing/landing-page.html + 62 + + + + As seen in + Bekannt aus + + apps/client/src/app/pages/landing/landing-page.html + 106 + + + + Protect your assets. Refine your personal investment strategy. + Schützen Sie Ihr Vermögen. Optimieren Sie Ihre persönliche Anlagestrategie. + + apps/client/src/app/pages/landing/landing-page.html + 200,203 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio ermöglicht es geschäftigen Leuten, den Überblick über Aktien, ETFs oder Kryptowährungen zu behalten, ohne überwacht zu werden. + + apps/client/src/app/pages/landing/landing-page.html + 204,207 + + + + 360° View + 360° Ansicht + + apps/client/src/app/pages/landing/landing-page.html + 215 + + + + Web3 Ready + Web3 ready + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Use Ghostfolio anonymously and own your financial data. + Nutze Ghostfolio ganz anonym und behalte deine Finanzdaten. + + apps/client/src/app/pages/landing/landing-page.html + 228,230 + + + + Open Source + Open Source + + apps/client/src/app/pages/landing/landing-page.html + 236 + + + + Benefit from continuous improvements through a strong community. + Profitiere von kontinuierlichen Verbesserungen durch eine aktive Community. + + apps/client/src/app/pages/landing/landing-page.html + 238,240 + + + + Why Ghostfolio? + Warum Ghostfolio? + + apps/client/src/app/pages/landing/landing-page.html + 247 + + + + Ghostfolio is for you if you are... + Ghostfolio ist für dich geeignet, wenn du... + + apps/client/src/app/pages/landing/landing-page.html + 248,250 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + Aktien, ETFs oder Kryptowährungen auf unterschiedlichen Plattformen handelst + + apps/client/src/app/pages/landing/landing-page.html + 255,256 + + + + pursuing a buy & hold strategy + eine Buy & Hold Strategie verfolgst + + apps/client/src/app/pages/landing/landing-page.html + 261 + + + + interested in getting insights of your portfolio composition + dich für die Zusammensetzung deines Portfolios interessierst + + apps/client/src/app/pages/landing/landing-page.html + 266 + + + + valuing privacy and data ownership + Privatsphäre und Datenhoheit wertschätzt + + apps/client/src/app/pages/landing/landing-page.html + 271 + + + + into minimalism + zum Frugalismus oder Minimalismus neigst + + apps/client/src/app/pages/landing/landing-page.html + 274 + + + + caring about diversifying your financial resources + dich um die Diversifizierung deiner finanziellen Mittel kümmerst + + apps/client/src/app/pages/landing/landing-page.html + 278 + + + + interested in financial independence + Interesse an finanzieller Freiheit hast + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + saying no to spreadsheets in + Nein sagst zu Excel-Tabellen im Jahr + + apps/client/src/app/pages/landing/landing-page.html + 286 + + + + still reading this list + diese Liste bis zum Ende liest + + apps/client/src/app/pages/landing/landing-page.html + 289 + + + + Learn more about Ghostfolio + Erfahre mehr über Ghostfolio + + apps/client/src/app/pages/landing/landing-page.html + 294 + + + + What our users are saying + Was unsere Nutzer sagen + + apps/client/src/app/pages/landing/landing-page.html + 302,304 + + + + Members from around the globe are using Ghostfolio Premium + Nutzer aus aller Welt verwenden Ghostfolio Premium + + apps/client/src/app/pages/landing/landing-page.html + 332,334 + + + + How does Ghostfolio work? + Wie funktioniert Ghostfolio ? + + apps/client/src/app/pages/landing/landing-page.html + 347,349 + + + + Sign up anonymously* + Registriere dich anonym* + + apps/client/src/app/pages/landing/landing-page.html + 356 + + + + * no e-mail address nor credit card required + * Keine E-Mail-Adresse oder Kreditkarte erforderlich + + apps/client/src/app/pages/landing/landing-page.html + 358 + + + + Add any of your historical transactions + Füge historische Transaktionen hinzu + + apps/client/src/app/pages/landing/landing-page.html + 369,371 + + + + Get valuable insights of your portfolio composition + Erhalte nützliche Erkenntnisse über die Zusammensetzung deines Portfolios + + apps/client/src/app/pages/landing/landing-page.html + 381,383 + + + + Are you ready? + Bist du bereit? + + apps/client/src/app/pages/landing/landing-page.html + 393 + + + + Join now or check out the example account + Melde dich jetzt an oder probiere die Live Demo aus + + apps/client/src/app/pages/landing/landing-page.html + 394,397 + + + + Live Demo + Live Demo + + apps/client/src/app/pages/landing/landing-page.html + 42 + + + apps/client/src/app/pages/landing/landing-page.html + 405 + + + + Get the full picture of your personal finances across multiple platforms. + Verschaffe dir einen vollständigen Überblick deiner persönlichen Finanzen über mehrere Plattformen hinweg. + + apps/client/src/app/pages/landing/landing-page.html + 217,220 + + + + Get started in only 3 steps + Beginne mit nur 3 Schritten + + apps/client/src/app/pages/landing/landing-page.html + 350 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 1ff5f6449..30fb49724 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -1049,6 +1049,10 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 31 + + apps/client/src/app/pages/landing/landing-page.html + 404 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -1519,7 +1523,7 @@ apps/client/src/app/pages/blog/blog-page.html - 4 + 5 @@ -7229,6 +7233,10 @@ Stars on GitHub Stars on GitHub + + apps/client/src/app/pages/landing/landing-page.html + 80 + apps/client/src/app/pages/open/open-page.html 100 @@ -7237,6 +7245,10 @@ Pulls on Docker Hub Pulls on Docker Hub + + apps/client/src/app/pages/landing/landing-page.html + 98 + apps/client/src/app/pages/open/open-page.html 114 @@ -7306,6 +7318,326 @@ 6,8 + + Discover the latest Ghostfolio updates and insights on personal finance + Discover the latest Ghostfolio updates and insights on personal finance + + apps/client/src/app/pages/blog/blog-page.html + 7,8 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + + apps/client/src/app/pages/pricing/pricing-page.html + 24,28 + + + + Manage your wealth like a boss + Manage your wealth like a boss + + apps/client/src/app/pages/landing/landing-page.html + 4,6 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + + apps/client/src/app/pages/landing/landing-page.html + 7,11 + + + + Get Started + Get Started + + apps/client/src/app/pages/landing/landing-page.html + 34,36 + + + apps/client/src/app/pages/landing/landing-page.html + 400,402 + + + + or + or + + apps/client/src/app/pages/landing/landing-page.html + 39,41 + + + + Monthly Active Users + Monthly Active Users + + apps/client/src/app/pages/landing/landing-page.html + 62 + + + + As seen in + As seen in + + apps/client/src/app/pages/landing/landing-page.html + 106 + + + + Protect your assets. Refine your personal investment strategy. + Protect your assets. Refine your personal investment strategy. + + apps/client/src/app/pages/landing/landing-page.html + 200,203 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + + apps/client/src/app/pages/landing/landing-page.html + 204,207 + + + + 360° View + 360° View + + apps/client/src/app/pages/landing/landing-page.html + 215 + + + + Web3 Ready + Web3 Ready + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Use Ghostfolio anonymously and own your financial data. + Use Ghostfolio anonymously and own your financial data. + + apps/client/src/app/pages/landing/landing-page.html + 228,230 + + + + Open Source + Open Source + + apps/client/src/app/pages/landing/landing-page.html + 236 + + + + Benefit from continuous improvements through a strong community. + Benefit from continuous improvements through a strong community. + + apps/client/src/app/pages/landing/landing-page.html + 238,240 + + + + Why Ghostfolio? + Why Ghostfolio? + + apps/client/src/app/pages/landing/landing-page.html + 247 + + + + Ghostfolio is for you if you are... + Ghostfolio is for you if you are... + + apps/client/src/app/pages/landing/landing-page.html + 248,250 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + trading stocks, ETFs or cryptocurrencies on multiple platforms + + apps/client/src/app/pages/landing/landing-page.html + 255,256 + + + + pursuing a buy & hold strategy + pursuing a buy & hold strategy + + apps/client/src/app/pages/landing/landing-page.html + 261 + + + + interested in getting insights of your portfolio composition + interested in getting insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 266 + + + + valuing privacy and data ownership + valuing privacy and data ownership + + apps/client/src/app/pages/landing/landing-page.html + 271 + + + + into minimalism + into minimalism + + apps/client/src/app/pages/landing/landing-page.html + 274 + + + + caring about diversifying your financial resources + caring about diversifying your financial resources + + apps/client/src/app/pages/landing/landing-page.html + 278 + + + + interested in financial independence + interested in financial independence + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + saying no to spreadsheets in + saying no to spreadsheets in + + apps/client/src/app/pages/landing/landing-page.html + 286 + + + + still reading this list + still reading this list + + apps/client/src/app/pages/landing/landing-page.html + 289 + + + + Learn more about Ghostfolio + Learn more about Ghostfolio + + apps/client/src/app/pages/landing/landing-page.html + 294 + + + + What our users are saying + What our users are saying + + apps/client/src/app/pages/landing/landing-page.html + 302,304 + + + + Members from around the globe are using Ghostfolio Premium + Members from around the globe are using Ghostfolio Premium + + apps/client/src/app/pages/landing/landing-page.html + 332,334 + + + + How does Ghostfolio work? + How does Ghostfolio work? + + apps/client/src/app/pages/landing/landing-page.html + 347,349 + + + + Sign up anonymously* + Sign up anonymously* + + apps/client/src/app/pages/landing/landing-page.html + 356 + + + + * no e-mail address nor credit card required + * no e-mail address nor credit card required + + apps/client/src/app/pages/landing/landing-page.html + 358 + + + + Add any of your historical transactions + Add any of your historical transactions + + apps/client/src/app/pages/landing/landing-page.html + 369,371 + + + + Get valuable insights of your portfolio composition + Get valuable insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 381,383 + + + + Are you ready? + Are you ready? + + apps/client/src/app/pages/landing/landing-page.html + 393 + + + + Join now or check out the example account + Join now or check out the example account + + apps/client/src/app/pages/landing/landing-page.html + 394,397 + + + + Live Demo + Live Demo + + apps/client/src/app/pages/landing/landing-page.html + 42 + + + apps/client/src/app/pages/landing/landing-page.html + 405 + + + + Get the full picture of your personal finances across multiple platforms. + Get the full picture of your personal finances across multiple platforms. + + apps/client/src/app/pages/landing/landing-page.html + 217,220 + + + + Get started in only 3 steps + Get started in only 3 steps + + apps/client/src/app/pages/landing/landing-page.html + 350 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 37c33df32..0375c6ee1 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -1404,6 +1404,10 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 31 + + apps/client/src/app/pages/landing/landing-page.html + 404 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -2286,7 +2290,7 @@ apps/client/src/app/pages/blog/blog-page.html - 4 + 5 @@ -7228,6 +7232,10 @@ Stars on GitHub Stars on GitHub + + apps/client/src/app/pages/landing/landing-page.html + 80 + apps/client/src/app/pages/open/open-page.html 100 @@ -7236,6 +7244,10 @@ Pulls on Docker Hub Pulls on Docker Hub + + apps/client/src/app/pages/landing/landing-page.html + 98 + apps/client/src/app/pages/open/open-page.html 114 @@ -7305,6 +7317,326 @@ 6,8 + + Discover the latest Ghostfolio updates and insights on personal finance + Discover the latest Ghostfolio updates and insights on personal finance + + apps/client/src/app/pages/blog/blog-page.html + 7,8 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + + apps/client/src/app/pages/pricing/pricing-page.html + 24,28 + + + + Manage your wealth like a boss + Manage your wealth like a boss + + apps/client/src/app/pages/landing/landing-page.html + 4,6 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + + apps/client/src/app/pages/landing/landing-page.html + 7,11 + + + + Get Started + Get Started + + apps/client/src/app/pages/landing/landing-page.html + 34,36 + + + apps/client/src/app/pages/landing/landing-page.html + 400,402 + + + + or + or + + apps/client/src/app/pages/landing/landing-page.html + 39,41 + + + + Monthly Active Users + Monthly Active Users + + apps/client/src/app/pages/landing/landing-page.html + 62 + + + + As seen in + As seen in + + apps/client/src/app/pages/landing/landing-page.html + 106 + + + + Protect your assets. Refine your personal investment strategy. + Protect your assets. Refine your personal investment strategy. + + apps/client/src/app/pages/landing/landing-page.html + 200,203 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + + apps/client/src/app/pages/landing/landing-page.html + 204,207 + + + + 360° View + 360° View + + apps/client/src/app/pages/landing/landing-page.html + 215 + + + + Web3 Ready + Web3 Ready + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Use Ghostfolio anonymously and own your financial data. + Use Ghostfolio anonymously and own your financial data. + + apps/client/src/app/pages/landing/landing-page.html + 228,230 + + + + Open Source + Open Source + + apps/client/src/app/pages/landing/landing-page.html + 236 + + + + Benefit from continuous improvements through a strong community. + Benefit from continuous improvements through a strong community. + + apps/client/src/app/pages/landing/landing-page.html + 238,240 + + + + Why Ghostfolio? + Why Ghostfolio? + + apps/client/src/app/pages/landing/landing-page.html + 247 + + + + Ghostfolio is for you if you are... + Ghostfolio is for you if you are... + + apps/client/src/app/pages/landing/landing-page.html + 248,250 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + trading stocks, ETFs or cryptocurrencies on multiple platforms + + apps/client/src/app/pages/landing/landing-page.html + 255,256 + + + + pursuing a buy & hold strategy + pursuing a buy & hold strategy + + apps/client/src/app/pages/landing/landing-page.html + 261 + + + + interested in getting insights of your portfolio composition + interested in getting insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 266 + + + + valuing privacy and data ownership + valuing privacy and data ownership + + apps/client/src/app/pages/landing/landing-page.html + 271 + + + + into minimalism + into minimalism + + apps/client/src/app/pages/landing/landing-page.html + 274 + + + + caring about diversifying your financial resources + caring about diversifying your financial resources + + apps/client/src/app/pages/landing/landing-page.html + 278 + + + + interested in financial independence + interested in financial independence + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + saying no to spreadsheets in + saying no to spreadsheets in + + apps/client/src/app/pages/landing/landing-page.html + 286 + + + + still reading this list + still reading this list + + apps/client/src/app/pages/landing/landing-page.html + 289 + + + + Learn more about Ghostfolio + Learn more about Ghostfolio + + apps/client/src/app/pages/landing/landing-page.html + 294 + + + + What our users are saying + What our users are saying + + apps/client/src/app/pages/landing/landing-page.html + 302,304 + + + + Members from around the globe are using Ghostfolio Premium + Members from around the globe are using Ghostfolio Premium + + apps/client/src/app/pages/landing/landing-page.html + 332,334 + + + + How does Ghostfolio work? + How does Ghostfolio work? + + apps/client/src/app/pages/landing/landing-page.html + 347,349 + + + + Sign up anonymously* + Sign up anonymously* + + apps/client/src/app/pages/landing/landing-page.html + 356 + + + + * no e-mail address nor credit card required + * no e-mail address nor credit card required + + apps/client/src/app/pages/landing/landing-page.html + 358 + + + + Add any of your historical transactions + Add any of your historical transactions + + apps/client/src/app/pages/landing/landing-page.html + 369,371 + + + + Get valuable insights of your portfolio composition + Get valuable insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 381,383 + + + + Are you ready? + Are you ready? + + apps/client/src/app/pages/landing/landing-page.html + 393 + + + + Join now or check out the example account + Join now or check out the example account + + apps/client/src/app/pages/landing/landing-page.html + 394,397 + + + + Live Demo + Live Demo + + apps/client/src/app/pages/landing/landing-page.html + 42 + + + apps/client/src/app/pages/landing/landing-page.html + 405 + + + + Get the full picture of your personal finances across multiple platforms. + Get the full picture of your personal finances across multiple platforms. + + apps/client/src/app/pages/landing/landing-page.html + 217,220 + + + + Get started in only 3 steps + Get started in only 3 steps + + apps/client/src/app/pages/landing/landing-page.html + 350 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 9323a1894..0d6250e9f 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -1049,6 +1049,10 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 31 + + apps/client/src/app/pages/landing/landing-page.html + 404 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -1519,7 +1523,7 @@ apps/client/src/app/pages/blog/blog-page.html - 4 + 5 @@ -7229,6 +7233,10 @@ Stars on GitHub Stars on GitHub + + apps/client/src/app/pages/landing/landing-page.html + 80 + apps/client/src/app/pages/open/open-page.html 100 @@ -7237,6 +7245,10 @@ Pulls on Docker Hub Pulls on Docker Hub + + apps/client/src/app/pages/landing/landing-page.html + 98 + apps/client/src/app/pages/open/open-page.html 114 @@ -7306,6 +7318,326 @@ 6,8 + + Discover the latest Ghostfolio updates and insights on personal finance + Discover the latest Ghostfolio updates and insights on personal finance + + apps/client/src/app/pages/blog/blog-page.html + 7,8 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + + apps/client/src/app/pages/pricing/pricing-page.html + 24,28 + + + + Manage your wealth like a boss + Manage your wealth like a boss + + apps/client/src/app/pages/landing/landing-page.html + 4,6 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + + apps/client/src/app/pages/landing/landing-page.html + 7,11 + + + + Get Started + Get Started + + apps/client/src/app/pages/landing/landing-page.html + 34,36 + + + apps/client/src/app/pages/landing/landing-page.html + 400,402 + + + + or + or + + apps/client/src/app/pages/landing/landing-page.html + 39,41 + + + + Monthly Active Users + Monthly Active Users + + apps/client/src/app/pages/landing/landing-page.html + 62 + + + + As seen in + As seen in + + apps/client/src/app/pages/landing/landing-page.html + 106 + + + + Protect your assets. Refine your personal investment strategy. + Protect your assets. Refine your personal investment strategy. + + apps/client/src/app/pages/landing/landing-page.html + 200,203 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + + apps/client/src/app/pages/landing/landing-page.html + 204,207 + + + + 360° View + 360° View + + apps/client/src/app/pages/landing/landing-page.html + 215 + + + + Web3 Ready + Web3 Ready + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Use Ghostfolio anonymously and own your financial data. + Use Ghostfolio anonymously and own your financial data. + + apps/client/src/app/pages/landing/landing-page.html + 228,230 + + + + Open Source + Open Source + + apps/client/src/app/pages/landing/landing-page.html + 236 + + + + Benefit from continuous improvements through a strong community. + Benefit from continuous improvements through a strong community. + + apps/client/src/app/pages/landing/landing-page.html + 238,240 + + + + Why Ghostfolio? + Why Ghostfolio? + + apps/client/src/app/pages/landing/landing-page.html + 247 + + + + Ghostfolio is for you if you are... + Ghostfolio is for you if you are... + + apps/client/src/app/pages/landing/landing-page.html + 248,250 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + trading stocks, ETFs or cryptocurrencies on multiple platforms + + apps/client/src/app/pages/landing/landing-page.html + 255,256 + + + + pursuing a buy & hold strategy + pursuing a buy & hold strategy + + apps/client/src/app/pages/landing/landing-page.html + 261 + + + + interested in getting insights of your portfolio composition + interested in getting insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 266 + + + + valuing privacy and data ownership + valuing privacy and data ownership + + apps/client/src/app/pages/landing/landing-page.html + 271 + + + + into minimalism + into minimalism + + apps/client/src/app/pages/landing/landing-page.html + 274 + + + + caring about diversifying your financial resources + caring about diversifying your financial resources + + apps/client/src/app/pages/landing/landing-page.html + 278 + + + + interested in financial independence + interested in financial independence + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + saying no to spreadsheets in + saying no to spreadsheets in + + apps/client/src/app/pages/landing/landing-page.html + 286 + + + + still reading this list + still reading this list + + apps/client/src/app/pages/landing/landing-page.html + 289 + + + + Learn more about Ghostfolio + Learn more about Ghostfolio + + apps/client/src/app/pages/landing/landing-page.html + 294 + + + + What our users are saying + What our users are saying + + apps/client/src/app/pages/landing/landing-page.html + 302,304 + + + + Members from around the globe are using Ghostfolio Premium + Members from around the globe are using Ghostfolio Premium + + apps/client/src/app/pages/landing/landing-page.html + 332,334 + + + + How does Ghostfolio work? + How does Ghostfolio work? + + apps/client/src/app/pages/landing/landing-page.html + 347,349 + + + + Sign up anonymously* + Sign up anonymously* + + apps/client/src/app/pages/landing/landing-page.html + 356 + + + + * no e-mail address nor credit card required + * no e-mail address nor credit card required + + apps/client/src/app/pages/landing/landing-page.html + 358 + + + + Add any of your historical transactions + Add any of your historical transactions + + apps/client/src/app/pages/landing/landing-page.html + 369,371 + + + + Get valuable insights of your portfolio composition + Get valuable insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 381,383 + + + + Are you ready? + Are you ready? + + apps/client/src/app/pages/landing/landing-page.html + 393 + + + + Join now or check out the example account + Join now or check out the example account + + apps/client/src/app/pages/landing/landing-page.html + 394,397 + + + + Live Demo + Live Demo + + apps/client/src/app/pages/landing/landing-page.html + 42 + + + apps/client/src/app/pages/landing/landing-page.html + 405 + + + + Get the full picture of your personal finances across multiple platforms + Get the full picture of your personal finances across multiple platforms. + + apps/client/src/app/pages/landing/landing-page.html + 217,220 + + + + Get started in only 3 steps + Get started in only 3 steps + + apps/client/src/app/pages/landing/landing-page.html + 350 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 83f9752f4..c31dea8ac 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -1048,6 +1048,10 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 31 + + apps/client/src/app/pages/landing/landing-page.html + 404 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -1518,7 +1522,7 @@ apps/client/src/app/pages/blog/blog-page.html - 4 + 5 @@ -7228,6 +7232,10 @@ Stars on GitHub Stars on GitHub + + apps/client/src/app/pages/landing/landing-page.html + 80 + apps/client/src/app/pages/open/open-page.html 100 @@ -7236,6 +7244,10 @@ Pulls on Docker Hub Pulls on Docker Hub + + apps/client/src/app/pages/landing/landing-page.html + 98 + apps/client/src/app/pages/open/open-page.html 114 @@ -7305,6 +7317,326 @@ 6,8 + + Discover the latest Ghostfolio updates and insights on personal finance + Discover the latest Ghostfolio updates and insights on personal finance + + apps/client/src/app/pages/blog/blog-page.html + 7,8 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + + apps/client/src/app/pages/pricing/pricing-page.html + 24,28 + + + + Manage your wealth like a boss + Manage your wealth like a boss + + apps/client/src/app/pages/landing/landing-page.html + 4,6 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + + apps/client/src/app/pages/landing/landing-page.html + 7,11 + + + + Get Started + Get Started + + apps/client/src/app/pages/landing/landing-page.html + 34,36 + + + apps/client/src/app/pages/landing/landing-page.html + 400,402 + + + + or + or + + apps/client/src/app/pages/landing/landing-page.html + 39,41 + + + + Monthly Active Users + Monthly Active Users + + apps/client/src/app/pages/landing/landing-page.html + 62 + + + + As seen in + As seen in + + apps/client/src/app/pages/landing/landing-page.html + 106 + + + + Protect your assets. Refine your personal investment strategy. + Protect your assets. Refine your personal investment strategy. + + apps/client/src/app/pages/landing/landing-page.html + 200,203 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + + apps/client/src/app/pages/landing/landing-page.html + 204,207 + + + + 360° View + 360° View + + apps/client/src/app/pages/landing/landing-page.html + 215 + + + + Web3 Ready + Web3 Ready + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Use Ghostfolio anonymously and own your financial data. + Use Ghostfolio anonymously and own your financial data. + + apps/client/src/app/pages/landing/landing-page.html + 228,230 + + + + Open Source + Open Source + + apps/client/src/app/pages/landing/landing-page.html + 236 + + + + Benefit from continuous improvements through a strong community. + Benefit from continuous improvements through a strong community. + + apps/client/src/app/pages/landing/landing-page.html + 238,240 + + + + Why Ghostfolio? + Why Ghostfolio? + + apps/client/src/app/pages/landing/landing-page.html + 247 + + + + Ghostfolio is for you if you are... + Ghostfolio is for you if you are... + + apps/client/src/app/pages/landing/landing-page.html + 248,250 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + trading stocks, ETFs or cryptocurrencies on multiple platforms + + apps/client/src/app/pages/landing/landing-page.html + 255,256 + + + + pursuing a buy & hold strategy + pursuing a buy & hold strategy + + apps/client/src/app/pages/landing/landing-page.html + 261 + + + + interested in getting insights of your portfolio composition + interested in getting insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 266 + + + + valuing privacy and data ownership + valuing privacy and data ownership + + apps/client/src/app/pages/landing/landing-page.html + 271 + + + + into minimalism + into minimalism + + apps/client/src/app/pages/landing/landing-page.html + 274 + + + + caring about diversifying your financial resources + caring about diversifying your financial resources + + apps/client/src/app/pages/landing/landing-page.html + 278 + + + + interested in financial independence + interested in financial independence + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + saying no to spreadsheets in + saying no to spreadsheets in + + apps/client/src/app/pages/landing/landing-page.html + 286 + + + + still reading this list + still reading this list + + apps/client/src/app/pages/landing/landing-page.html + 289 + + + + Learn more about Ghostfolio + Learn more about Ghostfolio + + apps/client/src/app/pages/landing/landing-page.html + 294 + + + + What our users are saying + What our users are saying + + apps/client/src/app/pages/landing/landing-page.html + 302,304 + + + + Members from around the globe are using Ghostfolio Premium + Members from around the globe are using Ghostfolio Premium + + apps/client/src/app/pages/landing/landing-page.html + 332,334 + + + + How does Ghostfolio work? + How does Ghostfolio work? + + apps/client/src/app/pages/landing/landing-page.html + 347,349 + + + + Sign up anonymously* + Sign up anonymously* + + apps/client/src/app/pages/landing/landing-page.html + 356 + + + + * no e-mail address nor credit card required + * no e-mail address nor credit card required + + apps/client/src/app/pages/landing/landing-page.html + 358 + + + + Add any of your historical transactions + Add any of your historical transactions + + apps/client/src/app/pages/landing/landing-page.html + 369,371 + + + + Get valuable insights of your portfolio composition + Get valuable insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 381,383 + + + + Are you ready? + Are you ready? + + apps/client/src/app/pages/landing/landing-page.html + 393 + + + + Join now or check out the example account + Join now or check out the example account + + apps/client/src/app/pages/landing/landing-page.html + 394,397 + + + + Live Demo + Live Demo + + apps/client/src/app/pages/landing/landing-page.html + 42 + + + apps/client/src/app/pages/landing/landing-page.html + 405 + + + + Get the full picture of your personal finances across multiple platforms. + Get the full picture of your personal finances across multiple platforms. + + apps/client/src/app/pages/landing/landing-page.html + 217,220 + + + + Get started in only 3 steps + Get started in only 3 steps + + apps/client/src/app/pages/landing/landing-page.html + 350 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 79070e6fd..b52ff944f 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -1300,6 +1300,10 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 31 + + apps/client/src/app/pages/landing/landing-page.html + 404 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -2214,7 +2218,7 @@ apps/client/src/app/pages/blog/blog-page.html - 4 + 5 @@ -7228,6 +7232,10 @@ Stars on GitHub Stars on GitHub + + apps/client/src/app/pages/landing/landing-page.html + 80 + apps/client/src/app/pages/open/open-page.html 100 @@ -7236,6 +7244,10 @@ Pulls on Docker Hub Pulls on Docker Hub + + apps/client/src/app/pages/landing/landing-page.html + 98 + apps/client/src/app/pages/open/open-page.html 114 @@ -7305,6 +7317,326 @@ 6,8 + + Discover the latest Ghostfolio updates and insights on personal finance + Discover the latest Ghostfolio updates and insights on personal finance + + apps/client/src/app/pages/blog/blog-page.html + 7,8 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + + apps/client/src/app/pages/pricing/pricing-page.html + 24,28 + + + + Manage your wealth like a boss + Manage your wealth like a boss + + apps/client/src/app/pages/landing/landing-page.html + 4,6 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + + apps/client/src/app/pages/landing/landing-page.html + 7,11 + + + + Get Started + Get Started + + apps/client/src/app/pages/landing/landing-page.html + 34,36 + + + apps/client/src/app/pages/landing/landing-page.html + 400,402 + + + + or + or + + apps/client/src/app/pages/landing/landing-page.html + 39,41 + + + + Monthly Active Users + Monthly Active Users + + apps/client/src/app/pages/landing/landing-page.html + 62 + + + + As seen in + As seen in + + apps/client/src/app/pages/landing/landing-page.html + 106 + + + + Protect your assets. Refine your personal investment strategy. + Protect your assets. Refine your personal investment strategy. + + apps/client/src/app/pages/landing/landing-page.html + 200,203 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + + apps/client/src/app/pages/landing/landing-page.html + 204,207 + + + + 360° View + 360° View + + apps/client/src/app/pages/landing/landing-page.html + 215 + + + + Web3 Ready + Web3 Ready + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Use Ghostfolio anonymously and own your financial data. + Use Ghostfolio anonymously and own your financial data. + + apps/client/src/app/pages/landing/landing-page.html + 228,230 + + + + Open Source + Open Source + + apps/client/src/app/pages/landing/landing-page.html + 236 + + + + Benefit from continuous improvements through a strong community. + Benefit from continuous improvements through a strong community. + + apps/client/src/app/pages/landing/landing-page.html + 238,240 + + + + Why Ghostfolio? + Why Ghostfolio? + + apps/client/src/app/pages/landing/landing-page.html + 247 + + + + Ghostfolio is for you if you are... + Ghostfolio is for you if you are... + + apps/client/src/app/pages/landing/landing-page.html + 248,250 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + trading stocks, ETFs or cryptocurrencies on multiple platforms + + apps/client/src/app/pages/landing/landing-page.html + 255,256 + + + + pursuing a buy & hold strategy + pursuing a buy & hold strategy + + apps/client/src/app/pages/landing/landing-page.html + 261 + + + + interested in getting insights of your portfolio composition + interested in getting insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 266 + + + + valuing privacy and data ownership + valuing privacy and data ownership + + apps/client/src/app/pages/landing/landing-page.html + 271 + + + + into minimalism + into minimalism + + apps/client/src/app/pages/landing/landing-page.html + 274 + + + + caring about diversifying your financial resources + caring about diversifying your financial resources + + apps/client/src/app/pages/landing/landing-page.html + 278 + + + + interested in financial independence + interested in financial independence + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + saying no to spreadsheets in + saying no to spreadsheets in + + apps/client/src/app/pages/landing/landing-page.html + 286 + + + + still reading this list + still reading this list + + apps/client/src/app/pages/landing/landing-page.html + 289 + + + + Learn more about Ghostfolio + Learn more about Ghostfolio + + apps/client/src/app/pages/landing/landing-page.html + 294 + + + + What our users are saying + What our users are saying + + apps/client/src/app/pages/landing/landing-page.html + 302,304 + + + + Members from around the globe are using Ghostfolio Premium + Members from around the globe are using Ghostfolio Premium + + apps/client/src/app/pages/landing/landing-page.html + 332,334 + + + + How does Ghostfolio work? + How does Ghostfolio work? + + apps/client/src/app/pages/landing/landing-page.html + 347,349 + + + + Sign up anonymously* + Sign up anonymously* + + apps/client/src/app/pages/landing/landing-page.html + 356 + + + + * no e-mail address nor credit card required + * no e-mail address nor credit card required + + apps/client/src/app/pages/landing/landing-page.html + 358 + + + + Add any of your historical transactions + Add any of your historical transactions + + apps/client/src/app/pages/landing/landing-page.html + 369,371 + + + + Get valuable insights of your portfolio composition + Get valuable insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 381,383 + + + + Are you ready? + Are you ready? + + apps/client/src/app/pages/landing/landing-page.html + 393 + + + + Join now or check out the example account + Join now or check out the example account + + apps/client/src/app/pages/landing/landing-page.html + 394,397 + + + + Live Demo + Live Demo + + apps/client/src/app/pages/landing/landing-page.html + 42 + + + apps/client/src/app/pages/landing/landing-page.html + 405 + + + + Get the full picture of your personal finances across multiple platforms. + Get the full picture of your personal finances across multiple platforms. + + apps/client/src/app/pages/landing/landing-page.html + 217,220 + + + + Get started in only 3 steps + Get started in only 3 steps + + apps/client/src/app/pages/landing/landing-page.html + 350 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index fe645d3d9..29f0ec53c 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -970,6 +970,10 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html 31 + + apps/client/src/app/pages/landing/landing-page.html + 404 + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -1400,7 +1404,7 @@ apps/client/src/app/pages/blog/blog-page.html - 4 + 5 @@ -6742,6 +6746,10 @@ Pulls on Docker Hub + + apps/client/src/app/pages/landing/landing-page.html + 98 + apps/client/src/app/pages/open/open-page.html 114 @@ -6763,6 +6771,10 @@ Stars on GitHub + + apps/client/src/app/pages/landing/landing-page.html + 80 + apps/client/src/app/pages/open/open-page.html 100 @@ -6838,6 +6850,287 @@ 9 + + Discover the latest Ghostfolio updates and insights on personal finance + + apps/client/src/app/pages/blog/blog-page.html + 7,8 + + + + If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + + apps/client/src/app/pages/pricing/pricing-page.html + 24,28 + + + + interested in financial independence + + apps/client/src/app/pages/landing/landing-page.html + 282 + + + + Use Ghostfolio anonymously and own your financial data. + + apps/client/src/app/pages/landing/landing-page.html + 228,230 + + + + caring about diversifying your financial resources + + apps/client/src/app/pages/landing/landing-page.html + 278 + + + + Live Demo + + apps/client/src/app/pages/landing/landing-page.html + 42 + + + apps/client/src/app/pages/landing/landing-page.html + 405 + + + + Manage your wealth like a boss + + apps/client/src/app/pages/landing/landing-page.html + 4,6 + + + + Monthly Active Users + + apps/client/src/app/pages/landing/landing-page.html + 62 + + + + Add any of your historical transactions + + apps/client/src/app/pages/landing/landing-page.html + 369,371 + + + + interested in getting insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 266 + + + + trading stocks, ETFs or cryptocurrencies on multiple platforms + + apps/client/src/app/pages/landing/landing-page.html + 255,256 + + + + Join now or check out the example account + + apps/client/src/app/pages/landing/landing-page.html + 394,397 + + + + Benefit from continuous improvements through a strong community. + + apps/client/src/app/pages/landing/landing-page.html + 238,240 + + + + valuing privacy and data ownership + + apps/client/src/app/pages/landing/landing-page.html + 271 + + + + Get Started + + apps/client/src/app/pages/landing/landing-page.html + 34,36 + + + apps/client/src/app/pages/landing/landing-page.html + 400,402 + + + + into minimalism + + apps/client/src/app/pages/landing/landing-page.html + 274 + + + + 360° View + + apps/client/src/app/pages/landing/landing-page.html + 215 + + + + saying no to spreadsheets in + + apps/client/src/app/pages/landing/landing-page.html + 286 + + + + Learn more about Ghostfolio + + apps/client/src/app/pages/landing/landing-page.html + 294 + + + + still reading this list + + apps/client/src/app/pages/landing/landing-page.html + 289 + + + + Sign up anonymously* + + apps/client/src/app/pages/landing/landing-page.html + 356 + + + + As seen in + + apps/client/src/app/pages/landing/landing-page.html + 106 + + + + Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + + apps/client/src/app/pages/landing/landing-page.html + 204,207 + + + + How does Ghostfolio work? + + apps/client/src/app/pages/landing/landing-page.html + 347,349 + + + + What our users are saying + + apps/client/src/app/pages/landing/landing-page.html + 302,304 + + + + Are you ready? + + apps/client/src/app/pages/landing/landing-page.html + 393 + + + + Ghostfolio is for you if you are... + + apps/client/src/app/pages/landing/landing-page.html + 248,250 + + + + or + + apps/client/src/app/pages/landing/landing-page.html + 39,41 + + + + Protect your assets. Refine your personal investment strategy. + + apps/client/src/app/pages/landing/landing-page.html + 200,203 + + + + Get valuable insights of your portfolio composition + + apps/client/src/app/pages/landing/landing-page.html + 381,383 + + + + Web3 Ready + + apps/client/src/app/pages/landing/landing-page.html + 226 + + + + Why Ghostfolio? + + apps/client/src/app/pages/landing/landing-page.html + 247 + + + + Open Source + + apps/client/src/app/pages/landing/landing-page.html + 236 + + + + * no e-mail address nor credit card required + + apps/client/src/app/pages/landing/landing-page.html + 358 + + + + Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + + apps/client/src/app/pages/landing/landing-page.html + 7,11 + + + + Members from around the globe are using Ghostfolio Premium + + apps/client/src/app/pages/landing/landing-page.html + 332,334 + + + + pursuing a buy & hold strategy + + apps/client/src/app/pages/landing/landing-page.html + 261 + + + + Get the full picture of your personal finances across multiple platforms. + + apps/client/src/app/pages/landing/landing-page.html + 217,220 + + + + Get started in only 3 steps + + apps/client/src/app/pages/landing/landing-page.html + 350 + + From 02dc7c52b1773687b71f76867f68e49674513c28 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 20 Aug 2023 10:01:40 +0200 Subject: [PATCH 17/23] Localize routes (#2250) * Localize about path * Localize faq path * Localize features path * Localize markets path * Localize pricing path * Localize register path * Localize resources path * Extend sitemap --- apps/api/src/assets/sitemap.xml | 22 +- apps/client/src/app/app-routing.module.ts | 61 +- apps/client/src/app/app.component.html | 39 +- apps/client/src/app/app.component.ts | 27 + .../components/header/header.component.html | 56 +- .../app/components/header/header.component.ts | 11 + .../home-summary/home-summary.component.ts | 2 +- ...scription-interstitial-dialog.component.ts | 2 + .../subscription-interstitial-dialog.html | 2 +- apps/client/src/app/core/auth.guard.ts | 24 +- .../src/app/core/http-response.interceptor.ts | 2 +- .../pages/about/about-page-routing.module.ts | 32 +- .../app/pages/about/about-page.component.ts | 10 +- .../about/oss-friends/oss-friends-page.html | 2 +- .../overview/about-overview-page.component.ts | 2 + .../about/overview/about-overview-page.html | 4 +- apps/client/src/app/pages/about/routes.ts | 9 - .../hallo-ghostfolio-page.component.ts | 5 +- .../hallo-ghostfolio-page.html | 4 +- .../hello-ghostfolio-page.component.ts | 5 +- .../hello-ghostfolio-page.html | 4 +- ...st-months-in-open-source-page.component.ts | 4 +- .../first-months-in-open-source-page.html | 2 +- ...get-my-finances-in-order-page.component.ts | 4 +- ...ow-do-i-get-my-finances-in-order-page.html | 6 +- .../500-stars-on-github-page.component.ts | 5 +- .../500-stars-on-github-page.html | 8 +- .../black-friday-2022-page.component.ts | 3 +- .../black-friday-2022-page.html | 7 +- .../1000-stars-on-github-page.component.ts | 5 +- .../1000-stars-on-github-page.html | 8 +- ...otential-with-ghostfolio-page.component.ts | 5 +- ...ancial-potential-with-ghostfolio-page.html | 16 +- ...ploring-the-path-to-fire-page.component.ts | 4 +- .../exploring-the-path-to-fire-page.html | 8 +- .../src/app/pages/faq/faq-page.component.ts | 4 + apps/client/src/app/pages/faq/faq-page.html | 30 +- apps/client/src/app/pages/faq/routes.ts | 10 - .../pages/features/features-page.component.ts | 1 + .../src/app/pages/features/features-page.html | 4 +- apps/client/src/app/pages/features/routes.ts | 8 - .../pages/landing/landing-page.component.ts | 2 + .../src/app/pages/landing/landing-page.html | 16 +- apps/client/src/app/pages/markets/routes.ts | 9 - .../pages/pricing/pricing-page.component.ts | 2 + .../src/app/pages/pricing/pricing-page.html | 6 +- apps/client/src/app/pages/pricing/routes.ts | 10 - apps/client/src/app/pages/register/routes.ts | 10 - ...sonal-finance-tools-page-routing.module.ts | 2 +- .../personal-finance-tools-page.component.ts | 2 + .../personal-finance-tools-page.html | 10 +- .../product-page-template.html | 13 +- .../products/altoo-page.component.ts | 7 + .../products/copilot-money-page.component.ts | 7 + .../products/delta-page.component.ts | 7 + .../products/divvydiary-page.component.ts | 7 + .../products/exirio-page.component.ts | 7 + .../products/folishare-page.component.ts | 7 + .../products/getquin-page.component.ts | 7 + .../products/gospatz-page.component.ts | 7 + .../products/justetf-page.component.ts | 7 + .../products/kubera-page.component.ts | 7 + .../products/markets.sh-page.component.ts | 7 + .../products/maybe-finance-page.component.ts | 7 + .../products/monse-page.component.ts | 7 + .../products/parqet-page.component.ts | 7 + .../products/plannix-page.component.ts | 7 + ...rtfolio-dividend-tracker-page.component.ts | 7 + .../products/portseido-page.component.ts | 7 + .../products/projectionlab-page.component.ts | 7 + .../products/seeking-alpha-page.component.ts | 7 + .../products/sharesight-page.component.ts | 7 + .../simple-portfolio-page.component.ts | 7 + .../snowball-analytics-page.component.ts | 7 + .../products/sumio-page.component.ts | 7 + .../products/utluna-page.component.ts | 7 + .../products/yeekatee-page.component.ts | 7 + .../resources/resources-page.component.ts | 4 + .../app/pages/resources/resources-page.html | 2 +- apps/client/src/app/pages/resources/routes.ts | 9 - .../pages/user-account/user-account-page.html | 2 +- apps/client/src/locales/messages.de.xlf | 2232 ++++++++++------ apps/client/src/locales/messages.es.xlf | 2234 ++++++++++------ apps/client/src/locales/messages.fr.xlf | 2234 ++++++++++------ apps/client/src/locales/messages.it.xlf | 2236 +++++++++++------ apps/client/src/locales/messages.nl.xlf | 2234 ++++++++++------ apps/client/src/locales/messages.pt.xlf | 2234 ++++++++++------ apps/client/src/locales/messages.xlf | 2218 ++++++++++------ 88 files changed, 10932 insertions(+), 5431 deletions(-) delete mode 100644 apps/client/src/app/pages/about/routes.ts delete mode 100644 apps/client/src/app/pages/faq/routes.ts delete mode 100644 apps/client/src/app/pages/features/routes.ts delete mode 100644 apps/client/src/app/pages/markets/routes.ts delete mode 100644 apps/client/src/app/pages/pricing/routes.ts delete mode 100644 apps/client/src/app/pages/register/routes.ts delete mode 100644 apps/client/src/app/pages/resources/routes.ts diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 74457def8..10f20ca46 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -322,6 +322,10 @@ 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 @@ -342,6 +346,10 @@ 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 @@ -396,12 +404,16 @@ 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/informativa-sulla-privacy + https://ghostfol.io/it/informazioni-su/oss-friends ${currentDate}T00:00:00+00:00 @@ -460,6 +472,10 @@ 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 @@ -520,6 +536,10 @@ https://ghostfol.io/pt/sobre/licenca ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/pt/sobre/oss-friends + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/pt/sobre/politica-de-privacidade ${currentDate}T00:00:00+00:00 diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index b5548afd4..f82bad864 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -1,22 +1,27 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes, TitleStrategy } from '@angular/router'; -import { routes as aboutRoutes } from '@ghostfolio/client/pages/about/routes'; -import { routes as faqRoutes } from '@ghostfolio/client/pages/faq/routes'; -import { routes as featuresRoutes } from '@ghostfolio/client/pages/features/routes'; -import { routes as marketsRoutes } from '@ghostfolio/client/pages/markets/routes'; -import { routes as pricingRoutes } from '@ghostfolio/client/pages/pricing/routes'; -import { routes as registerRoutes } from '@ghostfolio/client/pages/register/routes'; -import { routes as resourcesRoutes } from '@ghostfolio/client/pages/resources/routes'; import { PageTitleStrategy } from '@ghostfolio/client/services/page-title.strategy'; import { ModulePreloadService } from './core/module-preload.service'; +export const paths = { + about: $localize`about`, + faq: $localize`faq`, + features: $localize`features`, + license: $localize`license`, + markets: $localize`markets`, + pricing: $localize`pricing`, + privacyPolicy: $localize`privacy-policy`, + register: $localize`register`, + resources: $localize`resources` +}; + const routes: Routes = [ - ...aboutRoutes.map((path) => ({ - path, + { + path: paths.about, loadChildren: () => import('./pages/about/about-page.module').then((m) => m.AboutPageModule) - })), + }, { path: 'account', loadChildren: () => @@ -51,30 +56,30 @@ const routes: Routes = [ loadChildren: () => import('./pages/demo/demo-page.module').then((m) => m.DemoPageModule) }, - ...faqRoutes.map((path) => ({ - path, + { + path: paths.faq, loadChildren: () => import('./pages/faq/faq-page.module').then((m) => m.FaqPageModule) - })), - ...featuresRoutes.map((path) => ({ - path, + }, + { + path: paths.features, loadChildren: () => import('./pages/features/features-page.module').then( (m) => m.FeaturesPageModule ) - })), + }, { path: 'home', loadChildren: () => import('./pages/home/home-page.module').then((m) => m.HomePageModule) }, - ...marketsRoutes.map((path) => ({ - path, + { + path: paths.markets, loadChildren: () => import('./pages/markets/markets-page.module').then( (m) => m.MarketsPageModule ) - })), + }, { path: 'open', loadChildren: () => @@ -94,27 +99,27 @@ const routes: Routes = [ (m) => m.PortfolioPageModule ) }, - ...pricingRoutes.map((path) => ({ - path, + { + path: paths.pricing, loadChildren: () => import('./pages/pricing/pricing-page.module').then( (m) => m.PricingPageModule ) - })), - ...registerRoutes.map((path) => ({ - path, + }, + { + path: paths.register, loadChildren: () => import('./pages/register/register-page.module').then( (m) => m.RegisterPageModule ) - })), - ...resourcesRoutes.map((path) => ({ - path, + }, + { + path: paths.resources, loadChildren: () => import('./pages/resources/resources-page.module').then( (m) => m.ResourcesPageModule ) - })), + }, { path: 'start', loadChildren: () => diff --git a/apps/client/src/app/app.component.html b/apps/client/src/app/app.component.html index af40ec4fb..c9457cfc0 100644 --- a/apps/client/src/app/app.component.html +++ b/apps/client/src/app/app.component.html @@ -19,7 +19,7 @@

-