From 757ff527d01427fd129fe598b568cc6c431af775 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 4 Aug 2024 08:35:01 +0200
Subject: [PATCH 01/23] Feature/extend personal finance tools 20240803 (#3634)
* Add Capitalyse
---
libs/common/src/lib/personal-finance-tools.ts | 133 ++++++++++--------
1 file changed, 72 insertions(+), 61 deletions(-)
diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts
index 760629c8f..52ac20e49 100644
--- a/libs/common/src/lib/personal-finance-tools.ts
+++ b/libs/common/src/lib/personal-finance-tools.ts
@@ -15,7 +15,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'allvue-systems',
name: 'Allvue Systems',
- origin: `United States`,
+ origin: 'United States',
slogan: 'Investment Software Suite'
},
{
@@ -30,7 +30,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'altoo',
name: 'Altoo Wealth Platform',
- origin: `Switzerland`,
+ origin: 'Switzerland',
slogan: 'Simplicity for Complex Wealth'
},
{
@@ -40,7 +40,7 @@ export const personalFinanceTools: Product[] = [
key: 'anlage.app',
languages: ['English'],
name: 'Anlage.App',
- origin: `Austria`,
+ origin: 'Austria',
pricingPerYear: '$120',
slogan: 'Analyze and track your portfolio.'
},
@@ -58,16 +58,27 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'beanvest',
name: 'Beanvest',
- origin: `France`,
+ origin: 'France',
pricingPerYear: '$100',
slogan: 'Stock Portfolio Tracker for Smart Investors'
},
+ {
+ founded: 2022,
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'degiro-portfolio-tracker-by-capitalyse',
+ languages: ['English'],
+ name: 'DEGIRO Portfolio Tracker by Capitalyse',
+ origin: 'Netherlands',
+ pricingPerYear: '€24',
+ slogan: 'Democratizing Data Analytics'
+ },
{
hasFreePlan: true,
hasSelfHostingAbility: false,
key: 'capitally',
name: 'Capitally',
- origin: `Poland`,
+ origin: 'Poland',
pricingPerYear: '€50',
slogan: 'Optimize your investments performance'
},
@@ -75,7 +86,7 @@ export const personalFinanceTools: Product[] = [
founded: 2022,
key: 'capmon',
name: 'CapMon.org',
- origin: `Germany`,
+ origin: 'Germany',
note: 'CapMon.org was discontinued in 2023',
slogan: 'Next Generation Assets Tracking'
},
@@ -83,7 +94,7 @@ export const personalFinanceTools: Product[] = [
founded: 2019,
key: 'compound-planning',
name: 'Compound Planning',
- origin: `United States`,
+ origin: 'United States',
slogan: 'Modern Wealth & Investment Management'
},
{
@@ -92,7 +103,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'copilot-money',
name: 'Copilot Money',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$70',
slogan: 'Do money better with Copilot'
},
@@ -110,7 +121,7 @@ export const personalFinanceTools: Product[] = [
key: 'delta',
name: 'Delta Investment Tracker',
note: 'Acquired by eToro',
- origin: `Belgium`,
+ origin: 'Belgium',
slogan: 'The app to track all your investments. Make smart moves only.'
},
{
@@ -120,7 +131,7 @@ export const personalFinanceTools: Product[] = [
key: 'divvydiary',
languages: ['Deutsch', 'English'],
name: 'DivvyDiary',
- origin: `Germany`,
+ origin: 'Germany',
pricingPerYear: '€65',
slogan: 'Your personal Dividend Calendar'
},
@@ -130,7 +141,7 @@ export const personalFinanceTools: Product[] = [
key: 'empower',
name: 'Empower',
note: 'Originally named as Personal Capital',
- origin: `United States`,
+ origin: 'United States',
slogan: 'Get answers to your money questions'
},
{
@@ -138,7 +149,7 @@ export const personalFinanceTools: Product[] = [
founded: 2022,
key: 'eightfigures',
name: '8FIGURES',
- origin: `United States`,
+ origin: 'United States',
slogan: 'Portfolio Tracker Designed by Professional Investors'
},
{
@@ -147,7 +158,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'exirio',
name: 'Exirio',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$100',
slogan: 'All your wealth, in one place.'
},
@@ -158,7 +169,7 @@ export const personalFinanceTools: Product[] = [
key: 'fina',
languages: ['English'],
name: 'Fina',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$115',
slogan: 'Flexible Financial Management'
},
@@ -167,7 +178,7 @@ export const personalFinanceTools: Product[] = [
key: 'finary',
languages: ['Deutsch', 'English', 'Français'],
name: 'Finary',
- origin: `United States`,
+ origin: 'United States',
slogan: 'Real-Time Portfolio Tracker & Stock Tracker'
},
{
@@ -175,7 +186,7 @@ export const personalFinanceTools: Product[] = [
hasFreePlan: true,
key: 'finwise',
name: 'FinWise',
- origin: `South Africa`,
+ origin: 'South Africa',
pricingPerYear: '€69.99',
slogan: 'Personal finances, simplified'
},
@@ -185,7 +196,7 @@ export const personalFinanceTools: Product[] = [
key: 'folishare',
languages: ['Deutsch', 'English'],
name: 'folishare',
- origin: `Austria`,
+ origin: 'Austria',
pricingPerYear: '$65',
slogan: 'Take control over your investments'
},
@@ -196,7 +207,7 @@ export const personalFinanceTools: Product[] = [
key: 'getquin',
languages: ['Deutsch', 'English'],
name: 'getquin',
- origin: `Germany`,
+ origin: 'Germany',
pricingPerYear: '€48',
slogan: 'Portfolio Tracker, Analysis & Community'
},
@@ -205,7 +216,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'gospatz',
name: 'goSPATZ',
- origin: `Germany`,
+ origin: 'Germany',
slogan: 'Volle Kontrolle über deine Investitionen'
},
{
@@ -214,7 +225,7 @@ export const personalFinanceTools: Product[] = [
key: 'holistic-capital',
languages: ['Deutsch'],
name: 'Holistic',
- origin: `Germany`,
+ origin: 'Germany',
slogan: 'Die All-in-One Lösung für dein Vermögen.',
useAnonymously: true
},
@@ -224,7 +235,7 @@ export const personalFinanceTools: Product[] = [
key: 'intuit-mint',
name: 'Intuit Mint',
note: 'Intuit Mint was discontinued in 2023',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$60',
slogan: 'Managing money, made simple'
},
@@ -234,7 +245,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'justetf',
name: 'justETF',
- origin: `Germany`,
+ origin: 'Germany',
pricingPerYear: '€119',
slogan: 'ETF portfolios made simple'
},
@@ -244,7 +255,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'koyfin',
name: 'Koyfin',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$468',
slogan: 'Comprehensive financial data analysis'
},
@@ -254,7 +265,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'kubera',
name: 'Kubera®',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$150',
slogan: 'The Time Machine for your Net Worth'
},
@@ -264,7 +275,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'magnifi',
name: 'Magnifi',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$132',
slogan: 'AI Investing Assistant'
},
@@ -275,9 +286,9 @@ export const personalFinanceTools: Product[] = [
key: 'markets.sh',
languages: ['English'],
name: 'markets.sh',
- origin: `Germany`,
+ origin: 'Germany',
pricingPerYear: '€168',
- regions: [`Global`],
+ regions: ['Global'],
slogan: 'Track your investments'
},
{
@@ -287,9 +298,9 @@ export const personalFinanceTools: Product[] = [
languages: ['English'],
name: 'Maybe Finance',
note: 'Maybe Finance was discontinued in 2023',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$145',
- regions: [`United States`],
+ regions: ['United States'],
slogan: 'Your financial future, in your control'
},
{
@@ -298,7 +309,7 @@ export const personalFinanceTools: Product[] = [
key: 'merlincrypto',
languages: ['English'],
name: 'Merlin',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$204',
regions: ['Canada', 'United States'],
slogan: 'The smartest way to track your crypto'
@@ -309,7 +320,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'monarch-money',
name: 'Monarch Money',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$99.99',
slogan: 'The modern way to manage your money'
},
@@ -327,7 +338,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'navexa',
name: 'Navexa',
- origin: `Australia`,
+ origin: 'Australia',
pricingPerYear: '$90',
slogan: 'The Intelligent Portfolio Tracker'
},
@@ -338,7 +349,7 @@ export const personalFinanceTools: Product[] = [
key: 'parqet',
name: 'Parqet',
note: 'Originally named as Tresor One',
- origin: `Germany`,
+ origin: 'Germany',
pricingPerYear: '€88',
regions: ['Austria', 'Germany', 'Switzerland'],
slogan: 'Dein Vermögen immer im Blick'
@@ -348,7 +359,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'plannix',
name: 'Plannix',
- origin: `Italy`,
+ origin: 'Italy',
slogan: 'Your Personal Finance Hub'
},
{
@@ -358,9 +369,9 @@ export const personalFinanceTools: Product[] = [
key: 'pocketsmith',
languages: ['English'],
name: 'PocketSmith',
- origin: `New Zealand`,
+ origin: 'New Zealand',
pricingPerYear: '$120',
- regions: [`Global`],
+ regions: ['Global'],
slogan: 'Know where your money is going'
},
{
@@ -369,7 +380,7 @@ export const personalFinanceTools: Product[] = [
key: 'portfolio-dividend-tracker',
languages: ['English', 'Nederlands'],
name: 'Portfolio Dividend Tracker',
- origin: `Netherlands`,
+ origin: 'Netherlands',
pricingPerYear: '€60',
slogan: 'Manage all your portfolios'
},
@@ -397,7 +408,7 @@ export const personalFinanceTools: Product[] = [
key: 'portseido',
languages: ['Deutsch', 'English', 'Français', 'Nederlands'],
name: 'Portseido',
- origin: `Thailand`,
+ origin: 'Thailand',
pricingPerYear: '$96',
slogan: 'Portfolio Performance and Dividend Tracker'
},
@@ -407,7 +418,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: true,
key: 'projectionlab',
name: 'ProjectionLab',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$108',
slogan: 'Build Financial Plans You Love.'
},
@@ -416,7 +427,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'rocket-money',
name: 'Rocket Money',
- origin: `United States`,
+ origin: 'United States',
slogan: 'Track your net worth'
},
{
@@ -425,7 +436,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'seeking-alpha',
name: 'Seeking Alpha',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$239',
slogan: 'Stock Market Analysis & Tools for Investors'
},
@@ -433,7 +444,7 @@ export const personalFinanceTools: Product[] = [
founded: 2022,
key: 'segmio',
name: 'Segmio',
- origin: `Romania`,
+ origin: 'Romania',
slogan: 'Wealth Management and Net Worth Tracking'
},
{
@@ -442,9 +453,9 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'sharesight',
name: 'Sharesight',
- origin: `New Zealand`,
+ origin: 'New Zealand',
pricingPerYear: '$135',
- regions: [`Global`],
+ regions: ['Global'],
slogan: 'Stock Portfolio Tracker'
},
{
@@ -459,7 +470,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'simple-portfolio',
name: 'Simple Portfolio',
- origin: `Czech Republic`,
+ origin: 'Czech Republic',
pricingPerYear: '€80',
slogan: 'Stock Portfolio Tracker'
},
@@ -469,7 +480,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'snowball-analytics',
name: 'Snowball Analytics',
- origin: `France`,
+ origin: 'France',
pricingPerYear: '$80',
slogan: 'Simple and powerful portfolio tracker'
},
@@ -478,20 +489,20 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'stock-events',
name: 'Stock Events',
- origin: `Germany`,
+ origin: 'Germany',
slogan: 'Track all your Investments'
},
{
key: 'stockle',
name: 'Stockle',
- origin: `Finland`,
+ origin: 'Finland',
slogan: 'Supercharge your investments tracking experience'
},
{
founded: 2008,
key: 'stockmarketeye',
name: 'StockMarketEye',
- origin: `France`,
+ origin: 'France',
note: 'StockMarketEye was discontinued in 2023',
slogan: 'A Powerful Portfolio & Investment Tracking App'
},
@@ -501,7 +512,7 @@ export const personalFinanceTools: Product[] = [
key: 'stonksfolio',
languages: ['English'],
name: 'Stonksfolio',
- origin: `Bulgaria`,
+ origin: 'Bulgaria',
pricingPerYear: '€49.90',
slogan: 'Visualize all of your portfolios'
},
@@ -510,7 +521,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'sumio',
name: 'Sumio',
- origin: `Czech Republic`,
+ origin: 'Czech Republic',
pricingPerYear: '$20',
slogan: 'Sum up and build your wealth.'
},
@@ -519,7 +530,7 @@ export const personalFinanceTools: Product[] = [
hasFreePlan: false,
key: 'tiller',
name: 'Tiller',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$79',
slogan:
'Your financial life in a spreadsheet, automatically updated each day'
@@ -530,7 +541,7 @@ export const personalFinanceTools: Product[] = [
key: 'utluna',
languages: ['Deutsch', 'English', 'Français'],
name: 'Utluna',
- origin: `Switzerland`,
+ origin: 'Switzerland',
pricingPerYear: '$300',
slogan: 'Your Portfolio. Revealed.',
useAnonymously: true
@@ -540,7 +551,7 @@ export const personalFinanceTools: Product[] = [
hasFreePlan: true,
key: 'vyzer',
name: 'Vyzer',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$348',
slogan: 'Virtual Family Office for Smart Wealth Management'
},
@@ -549,7 +560,7 @@ export const personalFinanceTools: Product[] = [
key: 'wallmine',
languages: ['English'],
name: 'wallmine',
- origin: `Czech Republic`,
+ origin: 'Czech Republic',
pricingPerYear: '$600',
slogan: 'Make Smarter Investments'
},
@@ -567,7 +578,7 @@ export const personalFinanceTools: Product[] = [
key: 'wealthica',
languages: ['English', 'Français'],
name: 'Wealthica',
- origin: `Canada`,
+ origin: 'Canada',
pricingPerYear: '$50',
slogan: 'See all your investments in one place'
},
@@ -577,13 +588,13 @@ export const personalFinanceTools: Product[] = [
key: 'wealthy-tracker',
languages: ['English'],
name: 'Wealthy Tracker',
- origin: `India`,
+ origin: 'India',
slogan: 'One app to manage all your investments'
},
{
key: 'whal',
name: 'Whal',
- origin: `United States`,
+ origin: 'United States',
slogan: 'Manage your investments in one place'
},
{
@@ -594,8 +605,8 @@ export const personalFinanceTools: Product[] = [
languages: ['Deutsch', 'English', 'Español', 'Français', 'Italiano'],
name: 'yeekatee',
note: 'yeekatee was discontinued in 2024',
- origin: `Switzerland`,
- regions: [`Global`],
+ origin: 'Switzerland',
+ regions: ['Global'],
slogan: 'Connect. Share. Invest.'
},
{
@@ -604,7 +615,7 @@ export const personalFinanceTools: Product[] = [
hasSelfHostingAbility: false,
key: 'ynab',
name: 'YNAB (You Need a Budget)',
- origin: `United States`,
+ origin: 'United States',
pricingPerYear: '$99',
slogan: 'Change Your Relationship With Money'
}
From 202e27fe25842734b3634d217fd9841cae65be76 Mon Sep 17 00:00:00 2001
From: Paulina <71526180+paulinek13@users.noreply.github.com>
Date: Sun, 4 Aug 2024 08:56:55 +0200
Subject: [PATCH 02/23] Feature/improve language localization for polish
(#3637)
* Improve language localization for Polish
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/locales/messages.pl.xlf | 64 ++++++++++++-------------
2 files changed, 33 insertions(+), 32 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a6e3b0ca5..4b0ed6df9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the language localization for Polish (`pl`)
- Upgraded `Nx` from version `19.5.1` to `19.5.6`
## 2.101.0 - 2024-08-03
diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf
index 60c134d02..e79f06166 100644
--- a/apps/client/src/locales/messages.pl.xlf
+++ b/apps/client/src/locales/messages.pl.xlf
@@ -607,7 +607,7 @@
Frequently Asked Questions (FAQ)
- Frequently Asked Questions (FAQ)
+ Często Zadawane Pytania (FAQ)
apps/client/src/app/app.component.html
80
@@ -655,7 +655,7 @@
Privacy Policy
- Privacy Policy
+ Polityka Prywatności
apps/client/src/app/app.component.html
100
@@ -3279,7 +3279,7 @@
Privacy Policy
- Privacy Policy
+ Polityka Prywatności
apps/client/src/app/pages/about/about-page.component.ts
62
@@ -4671,7 +4671,7 @@
4% Rule
- 4% Rule
+ Zasada 4%
apps/client/src/app/pages/portfolio/fire/fire-page.html
40
@@ -5939,7 +5939,7 @@
Africa
- Africa
+ Afryka
libs/ui/src/lib/i18n.ts
61
@@ -5947,7 +5947,7 @@
Asia
- Asia
+ Azja
libs/ui/src/lib/i18n.ts
62
@@ -5955,7 +5955,7 @@
Europe
- Europe
+ Europa
libs/ui/src/lib/i18n.ts
63
@@ -5963,7 +5963,7 @@
North America
- North America
+ Ameryka Północna
libs/ui/src/lib/i18n.ts
64
@@ -5971,7 +5971,7 @@
Oceania
- Oceania
+ Oceania
libs/ui/src/lib/i18n.ts
65
@@ -5979,7 +5979,7 @@
South America
- South America
+ Ameryka Południowa
libs/ui/src/lib/i18n.ts
66
@@ -6035,7 +6035,7 @@
No data available
- No data available
+ Brak danych
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
402
@@ -6095,7 +6095,7 @@
Do you really want to delete this account balance?
- Do you really want to delete this account balance?
+ Czy na pewno chcesz usunąć saldo tego konta?
libs/ui/src/lib/account-balances/account-balances.component.ts
101
@@ -6111,7 +6111,7 @@
If a translation is missing, kindly support us in extending it here.
- If a translation is missing, kindly support us in extending it here.
+ Jeżeli brakuje jakiegoś tłumaczenia, uprzejmie prosimy o wsparcie w jego uzupełnieniu tutaj.
apps/client/src/app/components/user-account-settings/user-account-settings.html
50
@@ -6167,7 +6167,7 @@
Oops! Could not grant access.
- Oops! Could not grant access.
+ Ups! Nie udało się przyznać dostępu.
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
88
@@ -6331,7 +6331,7 @@
Reset Filters
- Reset Filters
+ Resetuj Filtry
libs/ui/src/lib/assistant/assistant.html
155
@@ -6363,7 +6363,7 @@
Apply Filters
- Apply Filters
+ Zastosuj Filtry
libs/ui/src/lib/assistant/assistant.html
165
@@ -6371,7 +6371,7 @@
Data Gathering
- Data Gathering
+ Gromadzenie Danych
apps/client/src/app/components/admin-overview/admin-overview.html
141
@@ -6419,7 +6419,7 @@
FAQ
- FAQ
+ FAQ
apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts
13
@@ -6431,7 +6431,7 @@
Oops! It looks like you’re making too many requests. Please slow down a bit.
- Oops! It looks like you’re making too many requests. Please slow down a bit.
+ Ups! Wygląda na to, że wykonujesz zbyt wiele zapytań. Proszę, zwolnij trochę.
apps/client/src/app/core/http-response.interceptor.ts
96
@@ -6471,7 +6471,7 @@
Dividend Yield
- Dividend Yield
+ Dochód z Dywidendy
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
191
@@ -6487,7 +6487,7 @@
Priority
- Priority
+ Priorytet
apps/client/src/app/components/admin-jobs/admin-jobs.html
62
@@ -6495,7 +6495,7 @@
This action is not allowed.
- This action is not allowed.
+ To działanie jest niedozwolone.
apps/client/src/app/core/http-response.interceptor.ts
61
@@ -6503,7 +6503,7 @@
Liquidity
- Liquidity
+ Płynność środków finansowych
libs/ui/src/lib/i18n.ts
44
@@ -6551,7 +6551,7 @@
Internationalization
- Internationalization
+ Internacjonalizacja
apps/client/src/app/app-routing.module.ts
79
@@ -6559,7 +6559,7 @@
Do you really want to close your Ghostfolio account?
- Do you really want to close your Ghostfolio account?
+ Czy na pewno chcesz zamknąć swoje konto Ghostfolio?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
148
@@ -6599,7 +6599,7 @@
Join now or check out the example account
- Join now or check out the example account
+ Dołącz teraz lub sprawdź przykładowe konto
apps/client/src/app/pages/landing/landing-page.html
434
@@ -6607,7 +6607,7 @@
Oops! There was an error setting up biometric authentication.
- Oops! There was an error setting up biometric authentication.
+ Ups! Wystąpił błąd podczas konfigurowania uwierzytelniania biometrycznego.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
302
@@ -6615,7 +6615,7 @@
Show more
- Show more
+ Pokaż więcej
libs/ui/src/lib/top-holdings/top-holdings.component.html
81
@@ -6631,7 +6631,7 @@
Delete Profiles
- Delete Profiles
+ Usuń Profile
apps/client/src/app/components/admin-market-data/admin-market-data.html
190
@@ -6639,7 +6639,7 @@
Do you really want to delete these profiles?
- Do you really want to delete these profiles?
+ Czy na pewno chcesz usunąć te profile?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
34
@@ -6647,7 +6647,7 @@
Oops! Could not delete profiles.
- Oops! Could not delete profiles.
+ Ups! Nie udało się usunąć profili.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
45
@@ -6671,7 +6671,7 @@
Would you like to refine your personal investment strategy?
- Would you like to refine your personal investment strategy?
+ Chcesz udoskonalić swoją osobistą strategię inwestycyjną?
apps/client/src/app/pages/public/public-page.html
155
From 98f3fa9d7c836dec9db66f27ef985bbeccbb695f Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 4 Aug 2024 09:24:48 +0200
Subject: [PATCH 03/23] Feature/improve language localization for de 20240804
(#3639)
* Update translations
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/locales/messages.ca.xlf | 512 ++++++++++++++++------
apps/client/src/locales/messages.de.xlf | 488 ++++++++++++++++-----
apps/client/src/locales/messages.es.xlf | 486 ++++++++++++++++-----
apps/client/src/locales/messages.fr.xlf | 488 ++++++++++++++++-----
apps/client/src/locales/messages.it.xlf | 542 ++++++++++++++++++------
apps/client/src/locales/messages.nl.xlf | 502 +++++++++++++++++-----
apps/client/src/locales/messages.pl.xlf | 488 ++++++++++++++++-----
apps/client/src/locales/messages.pt.xlf | 488 ++++++++++++++++-----
apps/client/src/locales/messages.tr.xlf | 526 +++++++++++++++++------
apps/client/src/locales/messages.xlf | 456 +++++++++++++++-----
apps/client/src/locales/messages.zh.xlf | 488 ++++++++++++++++-----
12 files changed, 4235 insertions(+), 1230 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4b0ed6df9..9582d735e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the language localization for German (`de`)
- Improved the language localization for Polish (`pl`)
- Upgraded `Nx` from version `19.5.1` to `19.5.6`
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index 7ff136408..46c4eecf8 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -278,7 +278,7 @@
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 186
+ 202
@@ -335,7 +335,7 @@
The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term.
- El risc d'assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini.
+ El risc d’assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini.
apps/client/src/app/app.component.html
199
@@ -422,7 +422,7 @@
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 23
+ 24
@@ -550,7 +550,7 @@
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 24
+ 25
@@ -734,7 +734,7 @@
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 26
+ 27
apps/client/src/app/pages/resources/resources-page.component.ts
@@ -978,7 +978,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 137
+ 138
libs/ui/src/lib/activities-table/activities-table.component.html
@@ -1022,7 +1022,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 143
+ 144
libs/ui/src/lib/activities-table/activities-table.component.html
@@ -1046,31 +1046,31 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 203
+ 204
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 206
+ 207
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 209
+ 210
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 273
+ 274
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 276
+ 277
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 279
+ 280
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 282
+ 283
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1106,7 +1106,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 83
+ 78
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1138,11 +1138,11 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 93
+ 88
apps/client/src/app/components/admin-overview/admin-overview.html
- 210
+ 205
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1191,7 +1191,7 @@
Asset Profile
- Perfil d'Actiu
+ Perfil d’Actiu
apps/client/src/app/components/admin-jobs/admin-jobs.html
35
@@ -1246,7 +1246,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 153
+ 154
@@ -1346,7 +1346,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 159
+ 160
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1406,7 +1406,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 426
+ 427
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -1446,7 +1446,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 433
+ 434
@@ -1486,12 +1486,12 @@
Filtra per...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 322
+ 328
Asset Class
- Classe d'Actiu
+ Classe d’Actiu
apps/client/src/app/components/admin-market-data/admin-market-data.html
86
@@ -1510,12 +1510,12 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 353
+ 354
Asset Sub Class
- Subclasse d'Actiu
+ Subclasse d’Actiu
apps/client/src/app/components/admin-market-data/admin-market-data.html
95
@@ -1534,7 +1534,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 369
+ 370
@@ -1559,7 +1559,7 @@
Activities Count
- Nombre d'Activitats
+ Nombre d’Activitats
apps/client/src/app/components/admin-market-data/admin-market-data.html
113
@@ -1631,7 +1631,7 @@
Do you really want to delete this asset profile?
- Realment vol eliminar el perfil d'aquest actiu?
+ Realment vol eliminar el perfil d’aquest actiu?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
18
@@ -1642,23 +1642,23 @@
Realment vol eliminar aquests perfils?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 34
+ 36
Oops! Could not delete profiles.
- Oooh! No s'han pogut eliminar els perfils
+ Oooh! No s’han pogut eliminar els perfils
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 45
+ 49
Oops! Could not parse historical data.
- Oooh! No s'han pogut recopilar les dades históriques.
+ Oooh! No s’han pogut recopilar les dades históriques.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 235
@@ -1666,7 +1666,7 @@
El preu de mercat actual és
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 336
+ 339
@@ -1826,12 +1826,12 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 338
+ 339
Add Asset Profile
- Afegeix el Perfil de l'Actiu
+ Afegeix el Perfil de l’Actiu
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
7
@@ -1862,7 +1862,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 123
+ 124
@@ -1931,7 +1931,7 @@
User Count
- Número d'Usuaris
+ Número d’Usuaris
apps/client/src/app/components/admin-overview/admin-overview.html
13
@@ -1939,10 +1939,10 @@
Activity Count
- Número d'Activitats
+ Número d’Activitats
apps/client/src/app/components/admin-overview/admin-overview.html
- 23
+ 19
@@ -1950,7 +1950,7 @@
per Usuari
apps/client/src/app/components/admin-overview/admin-overview.html
- 33
+ 28
@@ -1958,7 +1958,7 @@
Tipus de Canvi
apps/client/src/app/components/admin-overview/admin-overview.html
- 39
+ 34
@@ -1966,7 +1966,7 @@
Afegir Divisa
apps/client/src/app/components/admin-overview/admin-overview.html
- 109
+ 104
@@ -1974,7 +1974,7 @@
Registrar Usuari
apps/client/src/app/components/admin-overview/admin-overview.html
- 115
+ 110
@@ -1982,7 +1982,7 @@
Mode Només Lecutra
apps/client/src/app/components/admin-overview/admin-overview.html
- 129
+ 124
@@ -1990,7 +1990,7 @@
Recollida de Dades
apps/client/src/app/components/admin-overview/admin-overview.html
- 141
+ 136
@@ -1998,7 +1998,7 @@
Missatge del Sistema
apps/client/src/app/components/admin-overview/admin-overview.html
- 153
+ 148
@@ -2006,7 +2006,7 @@
Estableix el Missatge
apps/client/src/app/components/admin-overview/admin-overview.html
- 175
+ 170
@@ -2014,7 +2014,7 @@
Coupons
apps/client/src/app/components/admin-overview/admin-overview.html
- 183
+ 178
@@ -2022,7 +2022,7 @@
Afegir
apps/client/src/app/components/admin-overview/admin-overview.html
- 243
+ 238
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -2034,7 +2034,7 @@
Ordre
apps/client/src/app/components/admin-overview/admin-overview.html
- 251
+ 246
@@ -2042,7 +2042,7 @@
Depurar el Cache
apps/client/src/app/components/admin-overview/admin-overview.html
- 255
+ 250
@@ -2126,11 +2126,15 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 381
+ 386
+
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 423
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 382
+ 383
libs/ui/src/lib/assistant/assistant.html
@@ -2268,6 +2272,10 @@
apps/client/src/app/pages/portfolio/portfolio-page-routing.module.ts
41
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 95
+
Benchmark
@@ -2311,7 +2319,7 @@
Admin Control
- Panell d'Administració
+ Panell d’Administració
apps/client/src/app/components/header/header.component.html
68
@@ -2486,7 +2494,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 187
+ 188
libs/ui/src/lib/activities-table/activities-table.component.html
@@ -2522,11 +2530,11 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 200
+ 201
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 270
+ 271
@@ -2563,10 +2571,10 @@
Report Data Glitch
- Informar d'un Problema amb les Dades
+ Informar d’un Problema amb les Dades
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 399
+ 441
@@ -2574,7 +2582,7 @@
en Actiiu
apps/client/src/app/components/home-holdings/home-holdings.component.ts
- 36
+ 38
@@ -2582,7 +2590,7 @@
Finalitzat
apps/client/src/app/components/home-holdings/home-holdings.component.ts
- 37
+ 39
@@ -2618,7 +2626,7 @@
libs/ui/src/lib/i18n.ts
- 71
+ 93
@@ -2630,7 +2638,7 @@
libs/ui/src/lib/i18n.ts
- 72
+ 94
@@ -2722,7 +2730,7 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 10
+ 8
@@ -4530,7 +4538,7 @@
Update activity
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 8
+ 10
@@ -4602,7 +4610,7 @@
Update Cash Balance
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 111
+ 112
@@ -4610,11 +4618,11 @@
Unit Price
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 212
+ 213
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 285
+ 286
libs/ui/src/lib/activities-table/activities-table.component.html
@@ -4626,7 +4634,7 @@
Oops! Could not get the historical exchange rate from
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 239
+ 240
@@ -4634,11 +4642,11 @@
Fee
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 305
+ 306
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 329
+ 330
libs/ui/src/lib/activities-table/activities-table.component.html
@@ -4650,7 +4658,7 @@
Oops! Could not get the historical exchange rate from
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
- 317
+ 318
@@ -4658,7 +4666,7 @@
Import Activities
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 44
+ 45
@@ -4690,7 +4698,7 @@
Validating data...
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 233
+ 234
@@ -4992,6 +5000,10 @@
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
56
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 89
+
Monthly
@@ -5522,7 +5534,11 @@
Switzerland
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 58
+ 60
+
+
+ libs/ui/src/lib/i18n.ts
+ 86
@@ -5530,7 +5546,11 @@
Global
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 59
+ 61
+
+
+ libs/ui/src/lib/i18n.ts
+ 14
@@ -5602,7 +5622,7 @@
Available in
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 87
+ 103
@@ -5610,35 +5630,35 @@
✅ Yes
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 115
+ 131
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 122
+ 138
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 134
+ 150
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 141
+ 157
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 153
+ 169
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 160
+ 176
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 172
+ 188
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 179
+ 195
@@ -5646,31 +5666,31 @@
❌ No
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 117
+ 133
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 136
+ 152
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 143
+ 159
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 155
+ 171
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 162
+ 178
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 174
+ 190
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 181
+ 197
@@ -5678,7 +5698,7 @@
❌ No
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 124
+ 140
@@ -5686,7 +5706,7 @@
Self-Hosting
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 129
+ 145
@@ -5694,7 +5714,7 @@
Use anonymously
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 148
+ 164
@@ -5702,7 +5722,7 @@
Free Plan
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 167
+ 183
@@ -5710,11 +5730,11 @@
Starting from
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 188
+ 204
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 193
+ 209
@@ -5722,11 +5742,11 @@
year
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 189
+ 205
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 195
+ 211
@@ -5734,7 +5754,7 @@
Notes
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 201
+ 217
@@ -5742,7 +5762,7 @@
Please note that the information provided in the Ghostfolio vs comparison table is based on our independent research and analysis. This website is not affiliated with or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on GitHub.
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 210
+ 226
@@ -5750,7 +5770,7 @@
Ready to take your investments to the next level?
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 223
+ 239
@@ -5758,7 +5778,7 @@
Effortlessly track, analyze, and visualize your wealth with Ghostfolio.
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 227
+ 243
@@ -5766,7 +5786,7 @@
Get Started
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 232
+ 248
@@ -5774,7 +5794,7 @@
Personal Finance Tools
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
- 308
+ 266
@@ -6298,7 +6318,7 @@
Grant
libs/ui/src/lib/i18n.ts
- 14
+ 15
@@ -6306,7 +6326,7 @@
Higher Risk
libs/ui/src/lib/i18n.ts
- 15
+ 16
@@ -6314,7 +6334,7 @@
This activity already exists.
libs/ui/src/lib/i18n.ts
- 16
+ 17
@@ -6322,7 +6342,7 @@
Japan
libs/ui/src/lib/i18n.ts
- 17
+ 80
@@ -6358,7 +6378,7 @@
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
- 400
+ 403
@@ -6614,7 +6634,7 @@
Extreme Fear
libs/ui/src/lib/i18n.ts
- 69
+ 91
@@ -6622,7 +6642,7 @@
Extreme Greed
libs/ui/src/lib/i18n.ts
- 70
+ 92
@@ -6630,7 +6650,7 @@
Neutral
libs/ui/src/lib/i18n.ts
- 73
+ 95
@@ -6662,11 +6682,11 @@
No data available
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
- 402
+ 405
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
- 415
+ 418
@@ -6677,6 +6697,262 @@
81
+
+ Alternative
+ Alternative
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 83
+
+
+
+ App
+ App
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 84
+
+
+
+ Budgeting
+ Budgeting
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 85
+
+
+
+ Community
+ Community
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 86
+
+
+
+ Family Office
+ Family Office
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 87
+
+
+
+ Investor
+ Investor
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 90
+
+
+
+ Open Source
+ Open Source
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 91
+
+
+
+ Personal Finance
+ Personal Finance
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 93
+
+
+
+ Privacy
+ Privacy
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 94
+
+
+
+ Software
+ Software
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 96
+
+
+
+ Tool
+ Tool
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 97
+
+
+
+ User Experience
+ User Experience
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 98
+
+
+
+ Wealth
+ Wealth
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 99
+
+
+
+ Wealth Management
+ Wealth Management
+
+ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+ 100
+
+
+
+ Australia
+ Australia
+
+ libs/ui/src/lib/i18n.ts
+ 69
+
+
+
+ Austria
+ Austria
+
+ libs/ui/src/lib/i18n.ts
+ 70
+
+
+
+ Belgium
+ Belgium
+
+ libs/ui/src/lib/i18n.ts
+ 71
+
+
+
+ Bulgaria
+ Bulgaria
+
+ libs/ui/src/lib/i18n.ts
+ 72
+
+
+
+ Canada
+ Canada
+
+ libs/ui/src/lib/i18n.ts
+ 73
+
+
+
+ Czech Republic
+ Czech Republic
+
+ libs/ui/src/lib/i18n.ts
+ 74
+
+
+
+ Finland
+ Finland
+
+ libs/ui/src/lib/i18n.ts
+ 75
+
+
+
+ France
+ France
+
+ libs/ui/src/lib/i18n.ts
+ 76
+
+
+
+ Germany
+ Germany
+
+ libs/ui/src/lib/i18n.ts
+ 77
+
+
+
+ India
+ India
+
+ libs/ui/src/lib/i18n.ts
+ 78
+
+
+
+ Italy
+ Italy
+
+ libs/ui/src/lib/i18n.ts
+ 79
+
+
+
+ Netherlands
+ Netherlands
+
+ libs/ui/src/lib/i18n.ts
+ 81
+
+
+
+ New Zealand
+ New Zealand
+
+ libs/ui/src/lib/i18n.ts
+ 82
+
+
+
+ Poland
+ Poland
+
+ libs/ui/src/lib/i18n.ts
+ 83
+
+
+
+ Romania
+ Romania
+
+ libs/ui/src/lib/i18n.ts
+ 84
+
+
+
+ South Africa
+ South Africa
+
+ libs/ui/src/lib/i18n.ts
+ 85
+
+
+
+ Thailand
+ Thailand
+
+ libs/ui/src/lib/i18n.ts
+ 87
+
+
+
+ United States
+ United States
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
about
- about
+ o Ghostfolio
apps/client/src/app/app.component.ts
59
@@ -87,7 +87,7 @@
faq
- faq
+ faq
apps/client/src/app/app.component.ts
66
@@ -119,7 +119,7 @@
features
- features
+ Funkcje
apps/client/src/app/app.component.ts
67
@@ -183,7 +183,7 @@
license
- license
+ licencja
apps/client/src/app/app.component.ts
61
@@ -199,7 +199,7 @@
markets
- markets
+ rynki
apps/client/src/app/app.component.ts
68
@@ -231,7 +231,7 @@
pricing
- pricing
+ cennik
apps/client/src/app/app.component.ts
69
@@ -411,7 +411,7 @@
Create Account
- Create Account
+ Utwórz Konto
apps/client/src/app/app.component.html
13
@@ -427,7 +427,7 @@
Personal Finance
- Personal Finance
+ Finanse Osobiste
apps/client/src/app/app.component.html
54
@@ -435,7 +435,7 @@
Markets
- Markets
+ Rynki
apps/client/src/app/app.component.html
58
@@ -491,7 +491,7 @@
Blog
- Blog
+ Blog
apps/client/src/app/app.component.html
70
@@ -579,7 +579,7 @@
Changelog
- Changelog
+ Dziennik Zmian
apps/client/src/app/app.component.html
74
@@ -631,7 +631,7 @@
Pricing
- Pricing
+ Cennik
apps/client/src/app/app.component.html
94
@@ -667,7 +667,7 @@
Community
- Community
+ Społeczność
apps/client/src/app/app.component.html
118
@@ -727,7 +727,7 @@
Grantee
- Grantee
+ Beneficjent
apps/client/src/app/components/access-table/access-table.component.html
11
@@ -755,7 +755,7 @@
Details
- Details
+ Szczegóły
apps/client/src/app/components/access-table/access-table.component.html
33
@@ -771,7 +771,7 @@
Do you really want to revoke this granted access?
- Do you really want to revoke this granted access?
+ Czy na pewno chcesz cofnąć przyznany dostęp?
apps/client/src/app/components/access-table/access-table.component.ts
50
@@ -779,7 +779,7 @@
Cash Balance
- Cash Balance
+ Saldo Gotówkowe
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
45
@@ -1023,7 +1023,7 @@
Edit
- Edit
+ Edytuj
apps/client/src/app/components/accounts-table/accounts-table.component.html
278
@@ -1051,7 +1051,7 @@
Delete
- Delete
+ Usuń
apps/client/src/app/components/accounts-table/accounts-table.component.html
288
@@ -1251,7 +1251,7 @@
Market Price
- Market Price
+ Cena Rynkowa
apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
26
@@ -1515,7 +1515,7 @@
Oops! Could not parse historical data.
- Oops! Could not parse historical data.
+ Ups! Nie udało się sparsować danych historycznych.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
235
@@ -2091,7 +2091,7 @@
Portfolio
- Portfolio
+ Portfel
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
116
@@ -2227,7 +2227,7 @@
Oops! Incorrect Security Token.
- Oops! Incorrect Security Token.
+ Ups! Nieprawidłowy token bezpieczeństwa.
apps/client/src/app/components/header/header.component.ts
243
@@ -2279,7 +2279,7 @@
Welcome to Ghostfolio
- Welcome to Ghostfolio
+ Witaj w Ghostfolio
apps/client/src/app/components/home-overview/home-overview.html
7
@@ -2287,7 +2287,7 @@
Ready to take control of your personal finances?
- Ready to take control of your personal finances?
+ Jesteś gotów przejąć kontrolę nad swoimi finansami osobistymi?
apps/client/src/app/components/home-overview/home-overview.html
8
@@ -2295,7 +2295,7 @@
Setup your accounts
- Setup your accounts
+ Skonfiguruj swoje konta
apps/client/src/app/components/home-overview/home-overview.html
15
@@ -2303,7 +2303,7 @@
Get a comprehensive financial overview by adding your bank and brokerage accounts.
- Get a comprehensive financial overview by adding your bank and brokerage accounts.
+ Uzyskaj kompleksowy przegląd finansowy, poprzez dodanie swoich rachunków bankowych i maklerskich.
apps/client/src/app/components/home-overview/home-overview.html
17
@@ -2311,7 +2311,7 @@
Capture your activities
- Capture your activities
+ Rejestruj swoje działania
apps/client/src/app/components/home-overview/home-overview.html
24
@@ -2319,7 +2319,7 @@
Record your investment activities to keep your portfolio up to date.
- Record your investment activities to keep your portfolio up to date.
+ Dokumentuj swoje działania inwestycyjne, aby zapewnić aktualność portfela.
apps/client/src/app/components/home-overview/home-overview.html
26
@@ -2327,7 +2327,7 @@
Monitor and analyze your portfolio
- Monitor and analyze your portfolio
+ Monitoruj i analizuj swój portfel
apps/client/src/app/components/home-overview/home-overview.html
33
@@ -2335,7 +2335,7 @@
Track your progress in real-time with comprehensive analysis and insights.
- Track your progress in real-time with comprehensive analysis and insights.
+ Śledź swój postęp w czasie rzeczywistym dzięki kompleksowym analizom i obserwacjom.
apps/client/src/app/components/home-overview/home-overview.html
35
@@ -2343,7 +2343,7 @@
Setup accounts
- Setup accounts
+ Konfiguracja kont
apps/client/src/app/components/home-overview/home-overview.html
44
@@ -2731,7 +2731,7 @@
Are you an ambitious investor who needs the full picture?
- Are you an ambitious investor who needs the full picture?
+ Jesteś ambitnym inwestorem, który potrzebuje pełnego obrazu swojej działalności?
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
12
@@ -2739,7 +2739,7 @@
Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience:
- Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience:
+ Przejdź na Ghostfolio Premium już dziś i uzyskaj dostęp do ekskluzywnych funkcji, które wzbogacą Twoje doświadczenie inwestycyjne:
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
15
@@ -2747,7 +2747,7 @@
Portfolio Summary
- Portfolio Summary
+ Podsumowanie Portfela
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
22
@@ -2799,7 +2799,7 @@
FIRE Calculator
- FIRE Calculator
+ FIRE Kalkulator
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
34
@@ -2827,7 +2827,7 @@
and more Features...
- and more Features...
+ i więcej Funkcji ...
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
42
@@ -2843,7 +2843,7 @@
Get the tools to effectively manage your finances and refine your personal investment strategy.
- Get the tools to effectively manage your finances and refine your personal investment strategy.
+ Uzyskaj narzędzia do skutecznego zarządzania swoimi finansami i udoskonal swoją osobistą strategię inwestycyjną.
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
45
@@ -2851,7 +2851,7 @@
Skip
- Skip
+ Pomiń
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
52
@@ -2971,7 +2971,7 @@
Could not redeem coupon code
- Could not redeem coupon code
+ Nie udało się zrealizować kodu kuponu
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
121
@@ -3039,7 +3039,7 @@
Settings
- Settings
+ Ustawienia
apps/client/src/app/components/user-account-settings/user-account-settings.html
2
@@ -3047,7 +3047,7 @@
Presenter View
- Presenter View
+ Widok Prezentera
apps/client/src/app/components/user-account-settings/user-account-settings.html
7
@@ -3063,7 +3063,7 @@
Base Currency
- Base Currency
+ Waluta Bazowa
apps/client/src/app/components/user-account-settings/user-account-settings.html
27
@@ -3071,7 +3071,7 @@
Language
- Language
+ Język
apps/client/src/app/components/user-account-settings/user-account-settings.html
48
@@ -3079,7 +3079,7 @@
Locale
- Locale
+ Ustawienia Regionalne
apps/client/src/app/components/user-account-settings/user-account-settings.html
127
@@ -3095,7 +3095,7 @@
Appearance
- Appearance
+ Wygląd (tryb)
apps/client/src/app/components/user-account-settings/user-account-settings.html
152
@@ -3103,7 +3103,7 @@
Auto
- Auto
+ Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
166
@@ -3111,7 +3111,7 @@
Light
- Light
+ Jasny
apps/client/src/app/components/user-account-settings/user-account-settings.html
167
@@ -3119,7 +3119,7 @@
Dark
- Dark
+ Ciemny
apps/client/src/app/components/user-account-settings/user-account-settings.html
168
@@ -3127,7 +3127,7 @@
Zen Mode
- Zen Mode
+ Tryb Zen
apps/client/src/app/components/user-account-settings/user-account-settings.html
177
@@ -3147,7 +3147,7 @@
Biometric Authentication
- Biometric Authentication
+ Uwierzytelnianie Biometryczne
apps/client/src/app/components/user-account-settings/user-account-settings.html
194
@@ -3155,7 +3155,7 @@
Sign in with fingerprint
- Sign in with fingerprint
+ Zaloguj się za pomocą linii papilarnych
apps/client/src/app/components/user-account-settings/user-account-settings.html
195
@@ -3163,7 +3163,7 @@
Experimental Features
- Experimental Features
+ Funkcje Eksperymentalne
apps/client/src/app/components/user-account-settings/user-account-settings.html
211
@@ -3171,7 +3171,7 @@
Sneak peek at upcoming functionality
- Sneak peek at upcoming functionality
+ Włącz podgląd nadchodzących funkcji
apps/client/src/app/components/user-account-settings/user-account-settings.html
212
@@ -3179,7 +3179,7 @@
User ID
- User ID
+ ID Użytkownika
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html
45
@@ -3191,7 +3191,7 @@
Export Data
- Export Data
+ Eksportuj Dane
apps/client/src/app/components/user-account-settings/user-account-settings.html
236
@@ -3199,7 +3199,7 @@
This feature is currently unavailable.
- This feature is currently unavailable.
+ Ta funkcja jest obecnie niedostępna.
apps/client/src/app/core/http-response.interceptor.ts
53
@@ -3207,7 +3207,7 @@
Please try again later.
- Please try again later.
+ Spróbuj ponownie później.
apps/client/src/app/core/http-response.interceptor.ts
55
@@ -3223,7 +3223,7 @@
Oops! Something went wrong.
- Oops! Something went wrong.
+ Ups! Coś poszło nie tak.
apps/client/src/app/core/http-response.interceptor.ts
78
@@ -3675,7 +3675,7 @@
Markets
- Markets
+ Rynki
apps/client/src/app/pages/home/home-page-routing.module.ts
38
@@ -4019,7 +4019,7 @@
Are you ready?
- Are you ready?
+ Czy jesteś gotów?
apps/client/src/app/pages/landing/landing-page.html
431
@@ -4035,7 +4035,7 @@
(Last 24 hours)
- (Last 24 hours)
+ (Ostatnie 24 godziny)
apps/client/src/app/pages/open/open-page.html
37
@@ -4043,7 +4043,7 @@
Active Users
- Active Users
+ Aktywni Użytkownicy
apps/client/src/app/pages/open/open-page.html
40
@@ -4055,7 +4055,7 @@
(Last 30 days)
- (Last 30 days)
+ (Ostatnie 30 dni)
apps/client/src/app/pages/open/open-page.html
48
@@ -4067,7 +4067,7 @@
New Users
- New Users
+ Nowi Użytkownicy
apps/client/src/app/pages/open/open-page.html
51
@@ -4091,7 +4091,7 @@
(Last 90 days)
- (Last 90 days)
+ (Ostatnie 90 dni)
apps/client/src/app/pages/open/open-page.html
127
@@ -4223,7 +4223,7 @@
Oops! Could not get the historical exchange rate from
- Oops! Could not get the historical exchange rate from
+ Ups! Nie udało się uzyskać historycznego kursu wymiany z
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
318
@@ -4247,7 +4247,7 @@
Oops! Could not get the historical exchange rate from
- Oops! Could not get the historical exchange rate from
+ Ups! Nie udało się uzyskać historycznego kursu wymiany z
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
240
@@ -4467,7 +4467,7 @@
Developed Markets
- Developed Markets
+ Rynki Rozwinięte
apps/client/src/app/pages/portfolio/allocations/allocations-page.html
222
@@ -4479,7 +4479,7 @@
Emerging Markets
- Emerging Markets
+ Rynki Wschodzące
apps/client/src/app/pages/portfolio/allocations/allocations-page.html
231
@@ -4491,7 +4491,7 @@
Other Markets
- Other Markets
+ Inne Rynki
apps/client/src/app/pages/portfolio/allocations/allocations-page.html
240
@@ -4503,7 +4503,7 @@
No data available
- No data available
+ Brak danych
apps/client/src/app/pages/portfolio/allocations/allocations-page.html
250
@@ -4575,7 +4575,7 @@
Monthly
- Monthly
+ Miesięcznie
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
50
@@ -4583,7 +4583,7 @@
Yearly
- Yearly
+ Corocznie
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
51
@@ -4591,7 +4591,7 @@
Analysis
- Analysis
+ Analiza
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
2
@@ -4671,7 +4671,7 @@
Calculator
- Calculator
+ Kalkulator
apps/client/src/app/pages/portfolio/fire/fire-page.html
7
@@ -4687,7 +4687,7 @@
Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio.
- Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio.
+ Ghostfolio X-ray wykorzystuje analizę statyczną do identyfikacji potencjalnych problemów i zagrożeń w Twoim portfelu.
apps/client/src/app/pages/portfolio/fire/fire-page.html
111
@@ -4731,7 +4731,7 @@
Pricing
- Pricing
+ Cennik
apps/client/src/app/pages/pricing/pricing-page-routing.module.ts
13
@@ -4739,7 +4739,7 @@
Pricing Plans
- Pricing Plans
+ Plany cenowe
apps/client/src/app/pages/pricing/pricing-page.html
4
@@ -4747,7 +4747,7 @@
Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover the costs of the hosting infrastructure and to fund ongoing development.
- Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover the costs of the hosting infrastructure and to fund ongoing development.
+ Nasza oficjalna chmurowa usługa Ghostfolio Premium jest najprostszym sposobem by rozpocząć przygodę z Ghostfolio. To najlepsza opcja dla większości osób ze względu na czas, jaki można dzięki niej zaoszczędzić. Uzyskany przychód jest wykorzystywany do pokrycia kosztów infrastruktury hostingowej i finansowania bieżącego rozwoju.
apps/client/src/app/pages/pricing/pricing-page.html
6
@@ -4755,7 +4755,7 @@
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.
+ Jeżeli wolisz uruchomić Ghostfolio na własnej infrastrukturze, możesz znaleźć kod źródłowy i dalsze instrukcje na naszym GitHubie.
apps/client/src/app/pages/pricing/pricing-page.html
26
@@ -4763,7 +4763,7 @@
For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure.
- For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure.
+ Dla inwestorów obeznanych technicznie, którzy wolą uruchomić Ghostfolio na własnej infrastrukturze.
apps/client/src/app/pages/pricing/pricing-page.html
38
@@ -4771,7 +4771,7 @@
Unlimited Transactions
- Unlimited Transactions
+ Nieograniczona Liczba Transakcji
apps/client/src/app/pages/pricing/pricing-page.html
45
@@ -4787,7 +4787,7 @@
Unlimited Accounts
- Unlimited Accounts
+ Nieograniczona Liczba Rachunków
apps/client/src/app/pages/pricing/pricing-page.html
49
@@ -4803,7 +4803,7 @@
Portfolio Performance
- Portfolio Performance
+ Efektywność Portfela
apps/client/src/app/pages/pricing/pricing-page.html
53
@@ -4819,7 +4819,7 @@
Data Import and Export
- Data Import and Export
+ Importowanie i Eksportowanie Danych
apps/client/src/app/pages/pricing/pricing-page.html
73
@@ -4835,7 +4835,7 @@
Community Support
- Community Support
+ Wsparcie Społeczności
apps/client/src/app/pages/pricing/pricing-page.html
90
@@ -4843,7 +4843,7 @@
Self-hosted, update manually.
- Self-hosted, update manually.
+ Samodzielny hosting, aktualizacja ręczna.
apps/client/src/app/pages/pricing/pricing-page.html
94
@@ -4851,7 +4851,7 @@
Free
- Free
+ Bezpłatnie
apps/client/src/app/pages/pricing/pricing-page.html
95
@@ -4863,7 +4863,7 @@
For new investors who are just getting started with trading.
- For new investors who are just getting started with trading.
+ Dla początkujących inwestorów, którzy dopiero zaczynają swoją przygodę z tradingiem.
apps/client/src/app/pages/pricing/pricing-page.html
123
@@ -4871,7 +4871,7 @@
Fully managed Ghostfolio cloud offering.
- Fully managed Ghostfolio cloud offering.
+ W pełni zarządzana oferta Ghostfolio w chmurze.
apps/client/src/app/pages/pricing/pricing-page.html
152
@@ -4883,7 +4883,7 @@
For ambitious investors who need the full picture of their financial assets.
- For ambitious investors who need the full picture of their financial assets.
+ Dla ambitnych inwestorów, którzy potrzebują pełnego obrazu swoich aktywów finansowych.
apps/client/src/app/pages/pricing/pricing-page.html
184
@@ -4891,7 +4891,7 @@
Email and Chat Support
- Email and Chat Support
+ Wsparcie przez E-mail i Czat
apps/client/src/app/pages/pricing/pricing-page.html
240
@@ -4899,7 +4899,7 @@
Renew Plan
- Renew Plan
+ Odnów Plan
apps/client/src/app/components/header/header.component.html
183
@@ -4915,7 +4915,7 @@
One-time payment, no auto-renewal.
- One-time payment, no auto-renewal.
+ Płatność jednorazowa, bez automatycznego odnawiania.
apps/client/src/app/pages/pricing/pricing-page.html
280
@@ -6335,7 +6335,7 @@
Oops! A data provider is experiencing the hiccups.
- Oops! A data provider is experiencing the hiccups.
+ Ups! Dostawca danych zmaga się teraz z drobnymi przeszkodami.
apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html
8
From 42fe653e1edf7360babc1f6125aacc1304c078be Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 5 Aug 2024 19:43:25 +0200
Subject: [PATCH 05/23] Bugfix/fix cache flush endpoint response (#3641)
* Fix cache flush endpoint response
* Update changelog
---
CHANGELOG.md | 4 ++++
apps/api/src/app/cache/cache.controller.ts | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9582d735e..02b33340b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the language localization for Polish (`pl`)
- Upgraded `Nx` from version `19.5.1` to `19.5.6`
+### Fixed
+
+- Fixed the cache flush endpoint response
+
## 2.101.0 - 2024-08-03
### Changed
diff --git a/apps/api/src/app/cache/cache.controller.ts b/apps/api/src/app/cache/cache.controller.ts
index edfd16c49..4d34a2eff 100644
--- a/apps/api/src/app/cache/cache.controller.ts
+++ b/apps/api/src/app/cache/cache.controller.ts
@@ -14,6 +14,6 @@ export class CacheController {
@Post('flush')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async flushCache(): Promise {
- return this.redisCacheService.reset();
+ await this.redisCacheService.reset();
}
}
From b2ed0b2c805ce06de482cd8a12eb6abf1ad9faea Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 5 Aug 2024 19:44:24 +0200
Subject: [PATCH 06/23] Feature/improve caching of benchmarks in markets
overview (#3640)
* Improve caching
* Update changelog
---
CHANGELOG.md | 1 +
.../src/app/benchmark/benchmark.service.ts | 190 ++++++++++--------
.../interfaces/benchmark-value.interface.ts | 6 +
3 files changed, 112 insertions(+), 85 deletions(-)
create mode 100644 apps/api/src/app/benchmark/interfaces/benchmark-value.interface.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 02b33340b..b16284ab2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the caching of the benchmarks in the markets overview by returning cached data and recalculating in the background when it expires
- Improved the language localization for German (`de`)
- Improved the language localization for Polish (`pl`)
- Upgraded `Nx` from version `19.5.1` to `19.5.6`
diff --git a/apps/api/src/app/benchmark/benchmark.service.ts b/apps/api/src/app/benchmark/benchmark.service.ts
index e9495b44b..b6fdc8ea9 100644
--- a/apps/api/src/app/benchmark/benchmark.service.ts
+++ b/apps/api/src/app/benchmark/benchmark.service.ts
@@ -29,15 +29,19 @@ import { Injectable, Logger } from '@nestjs/common';
import { SymbolProfile } from '@prisma/client';
import { Big } from 'big.js';
import {
+ addHours,
differenceInDays,
eachDayOfInterval,
format,
+ isAfter,
isSameDay,
subDays
} from 'date-fns';
import { isNumber, last, uniqBy } from 'lodash';
import ms from 'ms';
+import { BenchmarkValue } from './interfaces/benchmark-value.interface';
+
@Injectable()
export class BenchmarkService {
private readonly CACHE_KEY_BENCHMARKS = 'BENCHMARKS';
@@ -92,99 +96,26 @@ export class BenchmarkService {
enableSharing = false,
useCache = true
} = {}): Promise {
- let benchmarks: BenchmarkResponse['benchmarks'];
-
if (useCache) {
try {
- benchmarks = JSON.parse(
- await this.redisCacheService.get(this.CACHE_KEY_BENCHMARKS)
+ const cachedBenchmarkValue = await this.redisCacheService.get(
+ this.CACHE_KEY_BENCHMARKS
);
- if (benchmarks) {
- return benchmarks;
- }
- } catch {}
- }
-
- const benchmarkAssetProfiles = await this.getBenchmarkAssetProfiles({
- enableSharing
- });
-
- const promisesAllTimeHighs: Promise<{ date: Date; marketPrice: number }>[] =
- [];
- const promisesBenchmarkTrends: Promise<{
- trend50d: BenchmarkTrend;
- trend200d: BenchmarkTrend;
- }>[] = [];
-
- const quotes = await this.dataProviderService.getQuotes({
- items: benchmarkAssetProfiles.map(({ dataSource, symbol }) => {
- return { dataSource, symbol };
- }),
- requestTimeout: ms('30 seconds'),
- useCache: false
- });
-
- for (const { dataSource, symbol } of benchmarkAssetProfiles) {
- promisesAllTimeHighs.push(
- this.marketDataService.getMax({ dataSource, symbol })
- );
- promisesBenchmarkTrends.push(
- this.getBenchmarkTrends({ dataSource, symbol })
- );
- }
-
- const [allTimeHighs, benchmarkTrends] = await Promise.all([
- Promise.all(promisesAllTimeHighs),
- Promise.all(promisesBenchmarkTrends)
- ]);
- let storeInCache = useCache;
+ const { benchmarks, expiration }: BenchmarkValue =
+ JSON.parse(cachedBenchmarkValue);
- benchmarks = allTimeHighs.map((allTimeHigh, index) => {
- const { marketPrice } =
- quotes[benchmarkAssetProfiles[index].symbol] ?? {};
-
- let performancePercentFromAllTimeHigh = 0;
-
- if (allTimeHigh?.marketPrice && marketPrice) {
- performancePercentFromAllTimeHigh = this.calculateChangeInPercentage(
- allTimeHigh.marketPrice,
- marketPrice
- );
- } else {
- storeInCache = false;
- }
-
- return {
- dataSource: benchmarkAssetProfiles[index].dataSource,
- marketCondition: this.getMarketCondition(
- performancePercentFromAllTimeHigh
- ),
- name: benchmarkAssetProfiles[index].name,
- performances: {
- allTimeHigh: {
- date: allTimeHigh?.date,
- performancePercent:
- performancePercentFromAllTimeHigh >= 0
- ? 0
- : performancePercentFromAllTimeHigh
- }
- },
- symbol: benchmarkAssetProfiles[index].symbol,
- trend50d: benchmarkTrends[index].trend50d,
- trend200d: benchmarkTrends[index].trend200d
- };
- });
+ if (isAfter(new Date(), new Date(expiration))) {
+ this.calculateAndCacheBenchmarks({
+ enableSharing
+ });
+ }
- if (storeInCache) {
- await this.redisCacheService.set(
- this.CACHE_KEY_BENCHMARKS,
- JSON.stringify(benchmarks),
- ms('2 hours') / 1000
- );
+ return benchmarks;
+ } catch {}
}
- return benchmarks;
+ return this.calculateAndCacheBenchmarks({ enableSharing });
}
public async getBenchmarkAssetProfiles({
@@ -422,6 +353,95 @@ export class BenchmarkService {
};
}
+ private async calculateAndCacheBenchmarks({
+ enableSharing = false
+ }): Promise {
+ const benchmarkAssetProfiles = await this.getBenchmarkAssetProfiles({
+ enableSharing
+ });
+
+ const promisesAllTimeHighs: Promise<{ date: Date; marketPrice: number }>[] =
+ [];
+ const promisesBenchmarkTrends: Promise<{
+ trend50d: BenchmarkTrend;
+ trend200d: BenchmarkTrend;
+ }>[] = [];
+
+ const quotes = await this.dataProviderService.getQuotes({
+ items: benchmarkAssetProfiles.map(({ dataSource, symbol }) => {
+ return { dataSource, symbol };
+ }),
+ requestTimeout: ms('30 seconds'),
+ useCache: false
+ });
+
+ for (const { dataSource, symbol } of benchmarkAssetProfiles) {
+ promisesAllTimeHighs.push(
+ this.marketDataService.getMax({ dataSource, symbol })
+ );
+ promisesBenchmarkTrends.push(
+ this.getBenchmarkTrends({ dataSource, symbol })
+ );
+ }
+
+ const [allTimeHighs, benchmarkTrends] = await Promise.all([
+ Promise.all(promisesAllTimeHighs),
+ Promise.all(promisesBenchmarkTrends)
+ ]);
+ let storeInCache = true;
+
+ const benchmarks = allTimeHighs.map((allTimeHigh, index) => {
+ const { marketPrice } =
+ quotes[benchmarkAssetProfiles[index].symbol] ?? {};
+
+ let performancePercentFromAllTimeHigh = 0;
+
+ if (allTimeHigh?.marketPrice && marketPrice) {
+ performancePercentFromAllTimeHigh = this.calculateChangeInPercentage(
+ allTimeHigh.marketPrice,
+ marketPrice
+ );
+ } else {
+ storeInCache = false;
+ }
+
+ return {
+ dataSource: benchmarkAssetProfiles[index].dataSource,
+ marketCondition: this.getMarketCondition(
+ performancePercentFromAllTimeHigh
+ ),
+ name: benchmarkAssetProfiles[index].name,
+ performances: {
+ allTimeHigh: {
+ date: allTimeHigh?.date,
+ performancePercent:
+ performancePercentFromAllTimeHigh >= 0
+ ? 0
+ : performancePercentFromAllTimeHigh
+ }
+ },
+ symbol: benchmarkAssetProfiles[index].symbol,
+ trend50d: benchmarkTrends[index].trend50d,
+ trend200d: benchmarkTrends[index].trend200d
+ };
+ });
+
+ if (storeInCache) {
+ const expiration = addHours(new Date(), 2);
+
+ await this.redisCacheService.set(
+ this.CACHE_KEY_BENCHMARKS,
+ JSON.stringify({
+ benchmarks,
+ expiration: expiration.getTime()
+ }),
+ ms('12 hours') / 1000
+ );
+ }
+
+ return benchmarks;
+ }
+
private getMarketCondition(
aPerformanceInPercent: number
): Benchmark['marketCondition'] {
diff --git a/apps/api/src/app/benchmark/interfaces/benchmark-value.interface.ts b/apps/api/src/app/benchmark/interfaces/benchmark-value.interface.ts
new file mode 100644
index 000000000..eda302f90
--- /dev/null
+++ b/apps/api/src/app/benchmark/interfaces/benchmark-value.interface.ts
@@ -0,0 +1,6 @@
+import { BenchmarkResponse } from '@ghostfolio/common/interfaces';
+
+export interface BenchmarkValue {
+ benchmarks: BenchmarkResponse['benchmarks'];
+ expiration: number;
+}
From 4410040a14730e5920b000a4dcb8df83a873b771 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 6 Aug 2024 16:53:31 +0200
Subject: [PATCH 07/23] Feature/update angular url in README.md (#3566)
Update Angular url
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 6d31b96ba..ecb5276ab 100644
--- a/README.md
+++ b/README.md
@@ -71,7 +71,7 @@ The backend is based on [NestJS](https://nestjs.com) using [PostgreSQL](https://
### Frontend
-The frontend is built with [Angular](https://angular.io) and uses [Angular Material](https://material.angular.io) with utility classes from [Bootstrap](https://getbootstrap.com).
+The frontend is built with [Angular](https://angular.dev) and uses [Angular Material](https://material.angular.io) with utility classes from [Bootstrap](https://getbootstrap.com).
## Self-hosting
From dc1948016f42a2ec0695dde5e4b1a362db6c50a0 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 7 Aug 2024 20:45:03 +0200
Subject: [PATCH 08/23] Feature/clone or edit activity from holding detail
dialog (#3644)
* Clone or edit activity from holding detail dialog
* Update changelog
---
CHANGELOG.md | 5 +++
apps/api/src/app/order/order.controller.ts | 34 ++++++++++++++++++-
apps/client/src/app/app.component.ts | 6 +++-
.../holding-detail-dialog.component.ts | 18 ++++++++++
.../holding-detail-dialog.html | 9 ++++-
.../interfaces/interfaces.ts | 1 +
.../activities/activities-page.component.ts | 27 ++++++++++-----
apps/client/src/app/services/data.service.ts | 16 ++++++++-
8 files changed, 103 insertions(+), 13 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b16284ab2..f5902f217 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Added support to clone an activity from the holding detail dialog (experimental)
+- Added support to edit an activity from the holding detail dialog (experimental)
+
### Changed
- Improved the caching of the benchmarks in the markets overview by returning cached data and recalculating in the background when it expires
diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts
index f9190d1eb..af8a1e296 100644
--- a/apps/api/src/app/order/order.controller.ts
+++ b/apps/api/src/app/order/order.controller.ts
@@ -36,7 +36,7 @@ import { parseISO } from 'date-fns';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { CreateOrderDto } from './create-order.dto';
-import { Activities } from './interfaces/activities.interface';
+import { Activities, Activity } from './interfaces/activities.interface';
import { OrderService } from './order.service';
import { UpdateOrderDto } from './update-order.dto';
@@ -140,6 +140,38 @@ export class OrderController {
return { activities, count };
}
+ @Get(':id')
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ @UseInterceptors(RedactValuesInResponseInterceptor)
+ @UseInterceptors(TransformDataSourceInResponseInterceptor)
+ public async getOrderById(
+ @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
+ @Param('id') id: string
+ ): Promise {
+ const impersonationUserId =
+ await this.impersonationService.validateImpersonationId(impersonationId);
+ const userCurrency = this.request.user.Settings.settings.baseCurrency;
+
+ const { activities } = await this.orderService.getOrders({
+ userCurrency,
+ userId: impersonationUserId || this.request.user.id,
+ withExcludedAccounts: true
+ });
+
+ const activity = activities.find((activity) => {
+ return activity.id === id;
+ });
+
+ if (!activity) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.NOT_FOUND),
+ StatusCodes.NOT_FOUND
+ );
+ }
+
+ return activity;
+ }
+
@HasPermission(permissions.createOrder)
@Post()
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index 4f1464408..b1d9a7f09 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -255,6 +255,10 @@ export class AppComponent implements OnDestroy, OnInit {
colorScheme: this.user?.settings?.colorScheme,
deviceType: this.deviceType,
hasImpersonationId: this.hasImpersonationId,
+ hasPermissionToCreateOrder:
+ !this.hasImpersonationId &&
+ hasPermission(this.user?.permissions, permissions.createOrder) &&
+ !this.user?.settings?.isRestrictedView,
hasPermissionToReportDataGlitch: hasPermission(
this.user?.permissions,
permissions.reportDataGlitch
@@ -262,7 +266,7 @@ export class AppComponent implements OnDestroy, OnInit {
hasPermissionToUpdateOrder:
!this.hasImpersonationId &&
hasPermission(this.user?.permissions, permissions.updateOrder) &&
- !user?.settings?.isRestrictedView,
+ !this.user?.settings?.isRestrictedView,
locale: this.user?.settings?.locale
},
height: this.deviceType === 'mobile' ? '97.5vh' : '80vh',
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
index 5673cd0c0..64c062c7e 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
@@ -48,6 +48,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { SortDirection } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
+import { Router } from '@angular/router';
import { Account, Tag } from '@prisma/client';
import { format, isSameMonth, isToday, parseISO } from 'date-fns';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
@@ -141,6 +142,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public dialogRef: MatDialogRef,
@Inject(MAT_DIALOG_DATA) public data: HoldingDetailDialogParams,
private formBuilder: FormBuilder,
+ private router: Router,
private userService: UserService
) {}
@@ -424,6 +426,14 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
this.tagInput.nativeElement.value = '';
}
+ public onCloneActivity(aActivity: Activity) {
+ this.router.navigate(['/portfolio', 'activities'], {
+ queryParams: { activityId: aActivity.id, createDialog: true }
+ });
+
+ this.dialogRef.close();
+ }
+
public onClose() {
this.dialogRef.close();
}
@@ -456,6 +466,14 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
);
}
+ public onUpdateActivity(aActivity: Activity) {
+ this.router.navigate(['/portfolio', 'activities'], {
+ queryParams: { activityId: aActivity.id, editDialog: true }
+ });
+
+ this.dialogRef.close();
+ }
+
public ngOnDestroy() {
this.unsubscribeSubject.next();
this.unsubscribeSubject.complete();
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
index b7474a7a3..04770837a 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -346,12 +346,19 @@
[hasPermissionToFilter]="false"
[hasPermissionToOpenDetails]="false"
[locale]="data.locale"
- [showActions]="false"
+ [showActions]="
+ !data.hasImpersonationId &&
+ data.hasPermissionToCreateOrder &&
+ user?.settings?.isExperimentalFeatures &&
+ !user?.settings?.isRestrictedView
+ "
[showNameColumn]="false"
[sortColumn]="sortColumn"
[sortDirection]="sortDirection"
[sortDisabled]="true"
[totalItems]="totalItems"
+ (activityToClone)="onCloneActivity($event)"
+ (activityToUpdate)="onUpdateActivity($event)"
(export)="onExport()"
/>
diff --git a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
index 8178838ab..cb98ab3a7 100644
--- a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
@@ -8,6 +8,7 @@ export interface HoldingDetailDialogParams {
dataSource: DataSource;
deviceType: string;
hasImpersonationId: boolean;
+ hasPermissionToCreateOrder: boolean;
hasPermissionToReportDataGlitch: boolean;
hasPermissionToUpdateOrder: boolean;
locale: string;
diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
index d6209cdf8..7cd89d62f 100644
--- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
@@ -16,7 +16,6 @@ import { PageEvent } from '@angular/material/paginator';
import { Sort, SortDirection } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { ActivatedRoute, Router } from '@angular/router';
-import { Order as OrderModel } from '@prisma/client';
import { format, parseISO } from 'date-fns';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, Subscription } from 'rxjs';
@@ -63,14 +62,24 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe((params) => {
if (params['createDialog']) {
- this.openCreateActivityDialog();
+ if (params['activityId']) {
+ this.dataService
+ .fetchActivity(params['activityId'])
+ .pipe(takeUntil(this.unsubscribeSubject))
+ .subscribe((activity) => {
+ this.openCreateActivityDialog(activity);
+ });
+ } else {
+ this.openCreateActivityDialog();
+ }
} else if (params['editDialog']) {
- if (this.dataSource && params['activityId']) {
- const activity = this.dataSource.data.find(({ id }) => {
- return id === params['activityId'];
- });
-
- this.openUpdateActivityDialog(activity);
+ if (params['activityId']) {
+ this.dataService
+ .fetchActivity(params['activityId'])
+ .pipe(takeUntil(this.unsubscribeSubject))
+ .subscribe((activity) => {
+ this.openUpdateActivityDialog(activity);
+ });
} else {
this.router.navigate(['.'], { relativeTo: this.route });
}
@@ -242,7 +251,7 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
this.fetchActivities();
}
- public onUpdateActivity(aActivity: OrderModel) {
+ public onUpdateActivity(aActivity: Activity) {
this.router.navigate([], {
queryParams: { activityId: aActivity.id, editDialog: true }
});
diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts
index e74c3f74e..6de3d327d 100644
--- a/apps/client/src/app/services/data.service.ts
+++ b/apps/client/src/app/services/data.service.ts
@@ -4,7 +4,10 @@ import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto
import { TransferBalanceDto } from '@ghostfolio/api/app/account/transfer-balance.dto';
import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
-import { Activities } from '@ghostfolio/api/app/order/interfaces/activities.interface';
+import {
+ Activities,
+ Activity
+} from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
import { PortfolioHoldingDetail } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-holding-detail.interface';
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
@@ -212,6 +215,17 @@ export class DataService {
);
}
+ public fetchActivity(aActivityId: string) {
+ return this.http.get(`/api/v1/order/${aActivityId}`).pipe(
+ map((activity) => {
+ activity.createdAt = parseISO((activity.createdAt));
+ activity.date = parseISO((activity.date));
+
+ return activity;
+ })
+ );
+ }
+
public fetchDividends({
filters,
groupBy = 'month',
From e85cc0fcfca521e2d42d362d61930a10e2dfe1f7 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 7 Aug 2024 20:45:46 +0200
Subject: [PATCH 09/23] Feature/clone or edit activity from account detail
dialog (#3647)
* Clone or edit activity from holding detail dialog
* Update changelog
---
CHANGELOG.md | 2 ++
.../account-detail-dialog.component.ts | 18 ++++++++++++++++++
.../account-detail-dialog.html | 9 ++++++++-
.../interfaces/interfaces.ts | 1 +
.../pages/accounts/accounts-page.component.ts | 6 +++++-
.../allocations/allocations-page.component.ts | 7 ++++++-
6 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f5902f217..3b4a5c1e7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
+- Added support to clone an activity from the account detail dialog (experimental)
+- Added support to edit an activity from the account detail dialog (experimental)
- Added support to clone an activity from the holding detail dialog (experimental)
- Added support to edit an activity from the holding detail dialog (experimental)
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
index 919b9549d..1cec23aba 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
@@ -23,6 +23,7 @@ import {
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Sort, SortDirection } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
+import { Router } from '@angular/router';
import { Big } from 'big.js';
import { format, parseISO } from 'date-fns';
import { isNumber } from 'lodash';
@@ -66,6 +67,7 @@ export class AccountDetailDialog implements OnDestroy, OnInit {
@Inject(MAT_DIALOG_DATA) public data: AccountDetailDialogParams,
private dataService: DataService,
public dialogRef: MatDialogRef,
+ private router: Router,
private userService: UserService
) {
this.userService.stateChanged
@@ -92,6 +94,14 @@ export class AccountDetailDialog implements OnDestroy, OnInit {
this.fetchPortfolioPerformance();
}
+ public onCloneActivity(aActivity: Activity) {
+ this.router.navigate(['/portfolio', 'activities'], {
+ queryParams: { activityId: aActivity.id, createDialog: true }
+ });
+
+ this.dialogRef.close();
+ }
+
public onClose() {
this.dialogRef.close();
}
@@ -147,6 +157,14 @@ export class AccountDetailDialog implements OnDestroy, OnInit {
this.fetchActivities();
}
+ public onUpdateActivity(aActivity: Activity) {
+ this.router.navigate(['/portfolio', 'activities'], {
+ queryParams: { activityId: aActivity.id, editDialog: true }
+ });
+
+ this.dialogRef.close();
+ }
+
private fetchAccount() {
this.dataService
.fetchAccount(this.data.accountId)
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
index 0f0091ce5..a814a19a8 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
@@ -101,10 +101,17 @@
[hasPermissionToFilter]="false"
[hasPermissionToOpenDetails]="false"
[locale]="user?.settings?.locale"
- [showActions]="false"
+ [showActions]="
+ !data.hasImpersonationId &&
+ data.hasPermissionToCreateOrder &&
+ user?.settings?.isExperimentalFeatures &&
+ !user?.settings?.isRestrictedView
+ "
[sortColumn]="sortColumn"
[sortDirection]="sortDirection"
[totalItems]="totalItems"
+ (activityToClone)="onCloneActivity($event)"
+ (activityToUpdate)="onUpdateActivity($event)"
(export)="onExport()"
(sortChanged)="onSortChanged($event)"
/>
diff --git a/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts
index 016fc3b7d..9ad6a5ba4 100644
--- a/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts
@@ -2,4 +2,5 @@ export interface AccountDetailDialogParams {
accountId: string;
deviceType: string;
hasImpersonationId: boolean;
+ hasPermissionToCreateOrder: boolean;
}
diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts
index 244333243..9f86bf587 100644
--- a/apps/client/src/app/pages/accounts/accounts-page.component.ts
+++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts
@@ -221,7 +221,11 @@ export class AccountsPageComponent implements OnDestroy, OnInit {
data: {
accountId: aAccountId,
deviceType: this.deviceType,
- hasImpersonationId: this.hasImpersonationId
+ hasImpersonationId: this.hasImpersonationId,
+ hasPermissionToCreateOrder:
+ !this.hasImpersonationId &&
+ hasPermission(this.user?.permissions, permissions.createOrder) &&
+ !this.user?.settings?.isRestrictedView
},
height: this.deviceType === 'mobile' ? '97.5vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
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 5af3a3099..89b08ad95 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
@@ -12,6 +12,7 @@ import {
PortfolioPosition,
User
} from '@ghostfolio/common/interfaces';
+import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { Market, MarketAdvanced } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
@@ -584,7 +585,11 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
data: {
accountId: aAccountId,
deviceType: this.deviceType,
- hasImpersonationId: this.hasImpersonationId
+ hasImpersonationId: this.hasImpersonationId,
+ hasPermissionToCreateOrder:
+ !this.hasImpersonationId &&
+ hasPermission(this.user?.permissions, permissions.createOrder) &&
+ !this.user?.settings?.isRestrictedView
},
height: this.deviceType === 'mobile' ? '97.5vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
From 43f5bb777346cda67eb1729c2381aef2dec53f11 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 7 Aug 2024 20:46:57 +0200
Subject: [PATCH 10/23] Release 2.102.0 (#3648)
---
CHANGELOG.md | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3b4a5c1e7..d2114c4be 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
+## 2.102.0 - 2024-08-07
### Added
diff --git a/package.json b/package.json
index ab9b5b812..84f15aa51 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "2.101.0",
+ "version": "2.102.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From 40de0cead5abc58c57bcf3c4549c03999db81e9c Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 8 Aug 2024 17:42:05 +0200
Subject: [PATCH 11/23] Feature/optimize docker image (#3642)
* Remove redundant docker image layers
* Update prisma binary target of prisma
* Update changelog
---
CHANGELOG.md | 7 +++++++
Dockerfile | 20 ++++++++++----------
nx.json | 9 +++++----
prisma/schema.prisma | 2 +-
4 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d2114c4be..9c41a58d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,13 @@ 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).
+## 2.103.0-alpha - 2024-08-08
+
+### Changed
+
+- Optimized the docker image layers to reduce the image size
+- Updated the binary targets of `debian-openssl` for `prisma`
+
## 2.102.0 - 2024-08-07
### Added
diff --git a/Dockerfile b/Dockerfile
index 8ca86a308..e6c38f273 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,6 +3,14 @@ FROM --platform=$BUILDPLATFORM node:20-slim AS builder
# Build application and add additional files
WORKDIR /ghostfolio
+RUN apt-get update && apt-get install -y --no-install-suggests \
+ g++ \
+ git \
+ make \
+ openssl \
+ python3 \
+ && rm -rf /var/lib/apt/lists/*
+
# Only add basic files without the application itself to avoid rebuilding
# layers when files (package.json etc.) have not changed
COPY ./CHANGELOG.md CHANGELOG.md
@@ -11,13 +19,6 @@ COPY ./package.json package.json
COPY ./package-lock.json package-lock.json
COPY ./prisma/schema.prisma prisma/schema.prisma
-RUN apt-get update && apt-get install -y --no-install-suggests \
- g++ \
- git \
- make \
- openssl \
- python3 \
- && rm -rf /var/lib/apt/lists/*
RUN npm install
# See https://github.com/nrwl/nx/issues/6586 for further details
@@ -58,9 +59,8 @@ RUN apt-get update && apt-get install -y --no-install-suggests \
openssl \
&& rm -rf /var/lib/apt/lists/*
-COPY --from=builder /ghostfolio/dist/apps /ghostfolio/apps
-COPY ./docker/entrypoint.sh /ghostfolio/entrypoint.sh
-RUN chown -R node:node /ghostfolio
+COPY --chown=node:node --from=builder /ghostfolio/dist/apps /ghostfolio/apps
+COPY --chown=node:node ./docker/entrypoint.sh /ghostfolio/entrypoint.sh
WORKDIR /ghostfolio/apps/api
EXPOSE ${PORT:-3333}
USER node
diff --git a/nx.json b/nx.json
index 5adb8983b..17123544e 100644
--- a/nx.json
+++ b/nx.json
@@ -61,12 +61,13 @@
"production": [
"default",
"!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
- "!{projectRoot}/tsconfig.spec.json",
- "!{projectRoot}/jest.config.[jt]s",
- "!{projectRoot}/.storybook/**/*",
"!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
+ "!{projectRoot}/.storybook/**/*",
+ "!{projectRoot}/jest.config.[jt]s",
+ "!{projectRoot}/src/test-setup.[jt]s",
"!{projectRoot}/tsconfig.storybook.json",
- "!{projectRoot}/src/test-setup.[jt]s"
+ "!{projectRoot}/tsconfig.spec.json",
+ "!{projectRoot}/webpack.config.js"
]
},
"nxCloudAccessToken": "Mjg0ZGQ2YjAtNGI4NS00NmYwLThhOWEtMWZmNmQzODM4YzU4fHJlYWQ=",
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 9385cb323..c5ced391a 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -1,7 +1,7 @@
generator client {
provider = "prisma-client-js"
previewFeatures = []
- binaryTargets = ["debian-openssl-1.1.x", "linux-arm64-openssl-3.0.x", "native"]
+ binaryTargets = ["debian-openssl-3.0.x", "linux-arm64-openssl-3.0.x", "native"]
}
datasource db {
From b8d9bafef645c072ec094e0cca8bfc6fba93589e Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 9 Aug 2024 19:36:53 +0200
Subject: [PATCH 12/23] Feature/upgrade prisma to version 5.18.0 (#3646)
* Upgrade prisma to version 5.18.0
* Update changelog
---
CHANGELOG.md | 3 +-
package-lock.json | 71 ++++++++++++++++++++++++++---------------------
package.json | 4 +--
3 files changed, 43 insertions(+), 35 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9c41a58d9..e128ec4b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,12 +5,13 @@ 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).
-## 2.103.0-alpha - 2024-08-08
+## Unreleased
### Changed
- Optimized the docker image layers to reduce the image size
- Updated the binary targets of `debian-openssl` for `prisma`
+- Upgraded `prisma` from version `5.17.0` to `5.18.0`
## 2.102.0 - 2024-08-07
diff --git a/package-lock.json b/package-lock.json
index 1a9b0ce52..49eadc623 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -40,7 +40,7 @@
"@nestjs/platform-express": "10.1.3",
"@nestjs/schedule": "3.0.2",
"@nestjs/serve-static": "4.0.0",
- "@prisma/client": "5.17.0",
+ "@prisma/client": "5.18.0",
"@simplewebauthn/browser": "9.0.1",
"@simplewebauthn/server": "9.0.3",
"@stripe/stripe-js": "3.5.0",
@@ -84,7 +84,7 @@
"passport": "0.7.0",
"passport-google-oauth20": "2.0.0",
"passport-jwt": "4.0.1",
- "prisma": "5.17.0",
+ "prisma": "5.18.0",
"reflect-metadata": "0.1.13",
"rxjs": "7.5.6",
"stripe": "15.11.0",
@@ -9646,10 +9646,11 @@
"dev": true
},
"node_modules/@prisma/client": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.17.0.tgz",
- "integrity": "sha512-N2tnyKayT0Zf7mHjwEyE8iG7FwTmXDHFZ1GnNhQp0pJUObsuel4ZZ1XwfuAYkq5mRIiC/Kot0kt0tGCfLJ70Jw==",
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.18.0.tgz",
+ "integrity": "sha512-BWivkLh+af1kqC89zCJYkHsRcyWsM8/JHpsDMM76DjP3ZdEquJhXa4IeX+HkWPnwJ5FanxEJFZZDTWiDs/Kvyw==",
"hasInstallScript": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=16.13"
},
@@ -9663,43 +9664,48 @@
}
},
"node_modules/@prisma/debug": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.17.0.tgz",
- "integrity": "sha512-l7+AteR3P8FXiYyo496zkuoiJ5r9jLQEdUuxIxNCN1ud8rdbH3GTxm+f+dCyaSv9l9WY+29L9czaVRXz9mULfg=="
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.18.0.tgz",
+ "integrity": "sha512-f+ZvpTLidSo3LMJxQPVgAxdAjzv5OpzAo/eF8qZqbwvgi2F5cTOI9XCpdRzJYA0iGfajjwjOKKrVq64vkxEfUw==",
+ "license": "Apache-2.0"
},
"node_modules/@prisma/engines": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.17.0.tgz",
- "integrity": "sha512-+r+Nf+JP210Jur+/X8SIPLtz+uW9YA4QO5IXA+KcSOBe/shT47bCcRMTYCbOESw3FFYFTwe7vU6KTWHKPiwvtg==",
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.18.0.tgz",
+ "integrity": "sha512-ofmpGLeJ2q2P0wa/XaEgTnX/IsLnvSp/gZts0zjgLNdBhfuj2lowOOPmDcfKljLQUXMvAek3lw5T01kHmCG8rg==",
"hasInstallScript": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "5.17.0",
- "@prisma/engines-version": "5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053",
- "@prisma/fetch-engine": "5.17.0",
- "@prisma/get-platform": "5.17.0"
+ "@prisma/debug": "5.18.0",
+ "@prisma/engines-version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169",
+ "@prisma/fetch-engine": "5.18.0",
+ "@prisma/get-platform": "5.18.0"
}
},
"node_modules/@prisma/engines-version": {
- "version": "5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053",
- "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053.tgz",
- "integrity": "sha512-tUuxZZysZDcrk5oaNOdrBnnkoTtmNQPkzINFDjz7eG6vcs9AVDmA/F6K5Plsb2aQc/l5M2EnFqn3htng9FA4hg=="
+ "version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169",
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169.tgz",
+ "integrity": "sha512-a/+LpJj8vYU3nmtkg+N3X51ddbt35yYrRe8wqHTJtYQt7l1f8kjIBcCs6sHJvodW/EK5XGvboOiwm47fmNrbgg==",
+ "license": "Apache-2.0"
},
"node_modules/@prisma/fetch-engine": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.17.0.tgz",
- "integrity": "sha512-ESxiOaHuC488ilLPnrv/tM2KrPhQB5TRris/IeIV4ZvUuKeaicCl4Xj/JCQeG9IlxqOgf1cCg5h5vAzlewN91Q==",
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.18.0.tgz",
+ "integrity": "sha512-I/3u0x2n31rGaAuBRx2YK4eB7R/1zCuayo2DGwSpGyrJWsZesrV7QVw7ND0/Suxeo/vLkJ5OwuBqHoCxvTHpOg==",
+ "license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "5.17.0",
- "@prisma/engines-version": "5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053",
- "@prisma/get-platform": "5.17.0"
+ "@prisma/debug": "5.18.0",
+ "@prisma/engines-version": "5.18.0-25.4c784e32044a8a016d99474bd02a3b6123742169",
+ "@prisma/get-platform": "5.18.0"
}
},
"node_modules/@prisma/get-platform": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.17.0.tgz",
- "integrity": "sha512-UlDgbRozCP1rfJ5Tlkf3Cnftb6srGrEQ4Nm3og+1Se2gWmCZ0hmPIi+tQikGDUVLlvOWx3Gyi9LzgRP+HTXV9w==",
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.18.0.tgz",
+ "integrity": "sha512-Tk+m7+uhqcKDgnMnFN0lRiH7Ewea0OEsZZs9pqXa7i3+7svS3FSCqDBCaM9x5fmhhkufiG0BtunJVDka+46DlA==",
+ "license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "5.17.0"
+ "@prisma/debug": "5.18.0"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
@@ -28732,12 +28738,13 @@
}
},
"node_modules/prisma": {
- "version": "5.17.0",
- "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.17.0.tgz",
- "integrity": "sha512-m4UWkN5lBE6yevqeOxEvmepnL5cNPEjzMw2IqDB59AcEV6w7D8vGljDLd1gPFH+W6gUxw9x7/RmN5dCS/WTPxA==",
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.18.0.tgz",
+ "integrity": "sha512-+TrSIxZsh64OPOmaSgVPH7ALL9dfU0jceYaMJXsNrTkFHO7/3RANi5K2ZiPB1De9+KDxCWn7jvRq8y8pvk+o9g==",
"hasInstallScript": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@prisma/engines": "5.17.0"
+ "@prisma/engines": "5.18.0"
},
"bin": {
"prisma": "build/index.js"
diff --git a/package.json b/package.json
index 84f15aa51..7de22bdc5 100644
--- a/package.json
+++ b/package.json
@@ -84,7 +84,7 @@
"@nestjs/platform-express": "10.1.3",
"@nestjs/schedule": "3.0.2",
"@nestjs/serve-static": "4.0.0",
- "@prisma/client": "5.17.0",
+ "@prisma/client": "5.18.0",
"@simplewebauthn/browser": "9.0.1",
"@simplewebauthn/server": "9.0.3",
"@stripe/stripe-js": "3.5.0",
@@ -128,7 +128,7 @@
"passport": "0.7.0",
"passport-google-oauth20": "2.0.0",
"passport-jwt": "4.0.1",
- "prisma": "5.17.0",
+ "prisma": "5.18.0",
"reflect-metadata": "0.1.13",
"rxjs": "7.5.6",
"stripe": "15.11.0",
From 9f5da976f22a40f753b6441116c1008c4600219f Mon Sep 17 00:00:00 2001
From: Tiago Sousa
Date: Fri, 9 Aug 2024 18:38:03 +0100
Subject: [PATCH 13/23] Feature/improve language localization for portuguese
(#3651)
* Update translations
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/locales/messages.pt.xlf | 120 ++++++++++++------------
2 files changed, 61 insertions(+), 60 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e128ec4b3..59e9e7cc7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the language localization for Portuguese (`pt`)
- Optimized the docker image layers to reduce the image size
- Updated the binary targets of `debian-openssl` for `prisma`
- Upgraded `prisma` from version `5.17.0` to `5.18.0`
diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf
index 90ebd02fd..8218c5d0b 100644
--- a/apps/client/src/locales/messages.pt.xlf
+++ b/apps/client/src/locales/messages.pt.xlf
@@ -459,7 +459,7 @@
Asset Profiles
- Perfil de Ativos
+ Perfil de Ativos
libs/ui/src/lib/assistant/assistant.html
67
@@ -467,7 +467,7 @@
Historical Market Data
- Histórico de Dados de Mercado
+ Histórico de Dados de Mercado
apps/client/src/app/components/admin-jobs/admin-jobs.html
37
@@ -955,7 +955,7 @@
Last Request
- Último Pedido
+ Último Pedido
apps/client/src/app/components/admin-users/admin-users.html
181
@@ -2067,7 +2067,7 @@
Sign in with fingerprint
- Iniciar sessão com impressão digital
+ Iniciar sessão com impressão digital
apps/client/src/app/components/user-account-settings/user-account-settings.html
195
@@ -3451,7 +3451,7 @@
Protection for sensitive information like absolute performances and quantity values
- Proteção para informações sensíveis, como desempenhos absolutos e valores quantitativos
+ Proteção para informações sensíveis, como desempenhos absolutos e valores quantitativos
apps/client/src/app/components/user-account-settings/user-account-settings.html
8
@@ -3459,7 +3459,7 @@
Distraction-free experience for turbulent times
- Experiência sem distrações para tempos turbulentos
+ Experiência sem distrações para tempos turbulentos
apps/client/src/app/components/user-account-settings/user-account-settings.html
178
@@ -3467,7 +3467,7 @@
Sneak peek at upcoming functionality
- Acesso antecipado a funcionalidades futuras
+ Acesso antecipado a funcionalidades futuras
apps/client/src/app/components/user-account-settings/user-account-settings.html
212
@@ -3871,7 +3871,7 @@
Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover the costs of the hosting infrastructure and to fund ongoing development.
- A nossa oferta oficial Ghostfolio Premium na nuvem é a maneira mais fácil de começar. Com o tempo que poupa, esta será a melhor opção para a maioria das pessoas. A receita é utilizada para cobrir a infraestrutura de hospedagem e financiar o desenvolvimento contínuo do Ghostfolio.
+ A nossa oferta oficial Ghostfolio Premium na nuvem é a maneira mais fácil de começar. Com o tempo que poupa, esta será a melhor opção para a maioria das pessoas. A receita é utilizada para cobrir a infraestrutura de hospedagem e financiar o desenvolvimento contínuo do Ghostfolio.
apps/client/src/app/pages/pricing/pricing-page.html
6
@@ -3895,7 +3895,7 @@
Do you really want to delete these activities?
- Deseja mesmo eliminar todas as suas atividades?
+ Deseja mesmo eliminar estas atividades?
libs/ui/src/lib/activities-table/activities-table.component.ts
216
@@ -4167,7 +4167,7 @@
Liabilities
- Liabilities
+ Responsabilidades
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
279
@@ -4179,7 +4179,7 @@
Changelog
- Changelog
+ Registo de alterações
apps/client/src/app/pages/about/about-page.component.ts
49
@@ -4191,7 +4191,7 @@
License
- License
+ Licença
apps/client/src/app/pages/about/about-page.component.ts
54
@@ -4203,7 +4203,7 @@
Stocks
- Stocks
+ Ações
apps/client/src/app/pages/features/features-page.html
15
@@ -4219,7 +4219,7 @@
Bonds
- Bonds
+ Obrigações
apps/client/src/app/pages/features/features-page.html
38
@@ -4227,7 +4227,7 @@
Cryptocurrencies
- Cryptocurrencies
+ Criptomoedas
apps/client/src/app/pages/features/features-page.html
51
@@ -4235,7 +4235,7 @@
Wealth Items
- Wealth Items
+ Artigos de património
apps/client/src/app/pages/features/features-page.html
76
@@ -4243,7 +4243,7 @@
Import and Export
- Import and Export
+ Importação e exportação
apps/client/src/app/pages/features/features-page.html
115
@@ -4251,7 +4251,7 @@
Multi-Accounts
- Multi-Accounts
+ Múltiplas contas
apps/client/src/app/pages/features/features-page.html
127
@@ -4259,7 +4259,7 @@
Portfolio Calculations
- Portfolio Calculations
+ Cálculos do portefólio
apps/client/src/app/pages/features/features-page.html
141
@@ -4267,7 +4267,7 @@
Dark Mode
- Dark Mode
+ Modo escuro
apps/client/src/app/pages/features/features-page.html
178
@@ -4275,7 +4275,7 @@
Market Mood
- Market Mood
+ Humor do mercado
apps/client/src/app/pages/features/features-page.html
206
@@ -4283,7 +4283,7 @@
Static Analysis
- Static Analysis
+ Análise estática
apps/client/src/app/pages/features/features-page.html
225
@@ -4291,7 +4291,7 @@
Multi-Language
- Multi-Language
+ Multilíngua
apps/client/src/app/pages/features/features-page.html
242
@@ -4299,7 +4299,7 @@
Open Source Software
- Open Source Software
+ Software de código aberto
apps/client/src/app/pages/features/features-page.html
278
@@ -4323,7 +4323,7 @@
Add Asset Profile
- Add Asset Profile
+ Adicionar perfil do ativo
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
7
@@ -4331,7 +4331,7 @@
Personal Finance Tools
- Personal Finance Tools
+ Ferramentas de finanças pessoais
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts
14
@@ -4447,7 +4447,7 @@
❌ No
- ❌ No
+ ❌ Não
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
140
@@ -4455,7 +4455,7 @@
Self-Hosting
- Self-Hosting
+ Auto-hospedagem
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
145
@@ -4487,7 +4487,7 @@
Effortlessly track, analyze, and visualize your wealth with Ghostfolio.
- Effortlessly track, analyze, and visualize your wealth with Ghostfolio.
+ Acompanhe, analise e visualize o seu património sem esforço com a Ghostfolio.
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
243
@@ -4495,7 +4495,7 @@
Personal Finance Tools
- Personal Finance Tools
+ Ferramentas de finanças pessoais
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
266
@@ -4503,7 +4503,7 @@
Guides
- Guides
+ Guias
apps/client/src/app/pages/resources/resources-page.html
22
@@ -4511,7 +4511,7 @@
Glossary
- Glossary
+ Glossário
apps/client/src/app/pages/resources/resources-page.html
124
@@ -4531,7 +4531,7 @@
Mortgages, personal loans, credit cards
- Mortgages, personal loans, credit cards
+ Hipotecas, crédito pessoal, cartões de crédito
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
57
@@ -4539,7 +4539,7 @@
Luxury items, real estate, private companies
- Luxury items, real estate, private companies
+ Artigos de luxo, bens imobiliários, empresas privadas
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
73
@@ -4547,7 +4547,7 @@
Buy
- Buy
+ Comprar
libs/ui/src/lib/i18n.ts
31
@@ -4579,7 +4579,7 @@
Assets
- Assets
+ Ativos
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
239
@@ -4587,7 +4587,7 @@
Preset
- Preset
+ Predefinição
libs/ui/src/lib/i18n.ts
22
@@ -4595,7 +4595,7 @@
By Market
- By Market
+ Por mercado
apps/client/src/app/pages/portfolio/allocations/allocations-page.html
175
@@ -4603,7 +4603,7 @@
Asia-Pacific
- Asia-Pacific
+ Ásia-Pacífico
libs/ui/src/lib/i18n.ts
5
@@ -4611,7 +4611,7 @@
Japan
- Japan
+ Japão
libs/ui/src/lib/i18n.ts
80
@@ -4619,7 +4619,7 @@
Welcome to Ghostfolio
- Welcome to Ghostfolio
+ Bem-vindo à Ghostfolio
apps/client/src/app/components/home-overview/home-overview.html
7
@@ -4627,7 +4627,7 @@
Setup your accounts
- Setup your accounts
+ Configurar as suas contas
apps/client/src/app/components/home-overview/home-overview.html
15
@@ -4635,7 +4635,7 @@
Get a comprehensive financial overview by adding your bank and brokerage accounts.
- Get a comprehensive financial overview by adding your bank and brokerage accounts.
+ Obtenha uma visão financeira abrangente adicionando as suas contas bancárias e de corretagem.
apps/client/src/app/components/home-overview/home-overview.html
17
@@ -4651,7 +4651,7 @@
Record your investment activities to keep your portfolio up to date.
- Record your investment activities to keep your portfolio up to date.
+ Registe as suas actividades de investimento para manter a sua carteira actualizada.
apps/client/src/app/components/home-overview/home-overview.html
26
@@ -4659,7 +4659,7 @@
Monitor and analyze your portfolio
- Monitor and analyze your portfolio
+ Monitorizar e analisar a sua carteira
apps/client/src/app/components/home-overview/home-overview.html
33
@@ -4667,7 +4667,7 @@
Track your progress in real-time with comprehensive analysis and insights.
- Track your progress in real-time with comprehensive analysis and insights.
+ Acompanhe o seu progresso em tempo real com análises e conhecimentos abrangentes.
apps/client/src/app/components/home-overview/home-overview.html
35
@@ -4675,7 +4675,7 @@
No data available
- No data available
+ Não há dados disponíveis
apps/client/src/app/pages/portfolio/allocations/allocations-page.html
250
@@ -4691,7 +4691,7 @@
Ready to take control of your personal finances?
- Ready to take control of your personal finances?
+ Pronto para assumir o controlo das suas finanças pessoais?
apps/client/src/app/components/home-overview/home-overview.html
8
@@ -4699,7 +4699,7 @@
Setup accounts
- Setup accounts
+ Configurar contas
apps/client/src/app/components/home-overview/home-overview.html
44
@@ -4707,7 +4707,7 @@
Biometric Authentication
- Biometric Authentication
+ Autenticação biométrica
apps/client/src/app/components/user-account-settings/user-account-settings.html
194
@@ -4723,7 +4723,7 @@
Active Users
- Active Users
+ Utilizadores ativos
apps/client/src/app/pages/open/open-page.html
40
@@ -4735,7 +4735,7 @@
New Users
- New Users
+ Novos utilizadores
apps/client/src/app/pages/open/open-page.html
51
@@ -4743,7 +4743,7 @@
Users in Slack community
- Users in Slack community
+ Utilizadores na comunidade Slack
apps/client/src/app/pages/open/open-page.html
75
@@ -4751,7 +4751,7 @@
Contributors on GitHub
- Contributors on GitHub
+ Colaboradores em GitHub
apps/client/src/app/pages/open/open-page.html
89
@@ -4759,7 +4759,7 @@
Stars on GitHub
- Stars on GitHub
+ Estrelas no GitHub
apps/client/src/app/pages/landing/landing-page.html
88
@@ -4783,7 +4783,7 @@
Uptime
- Uptime
+ Tempo de funcionamento
apps/client/src/app/pages/open/open-page.html
132
@@ -4791,7 +4791,7 @@
Export Data
- Export Data
+ Exportar dados
apps/client/src/app/components/user-account-settings/user-account-settings.html
236
@@ -4799,7 +4799,7 @@
Currencies
- Currencies
+ Moedas
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
85
@@ -4823,7 +4823,7 @@
Discover other exciting Open Source Software projects
- Discover other exciting Open Source Software projects
+ Descubra outros projectos interessantes de software de fonte aberta
apps/client/src/app/pages/about/oss-friends/oss-friends-page.html
9
@@ -4831,7 +4831,7 @@
Frequently Asked Questions (FAQ)
- Frequently Asked Questions (FAQ)
+ Perguntas frequentes (FAQ)
apps/client/src/app/pages/faq/overview/faq-overview-page.html
4
From 0f46ca4db2c7fa98c0befc56a8ca36c13496fd6d Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 10 Aug 2024 07:57:19 +0200
Subject: [PATCH 14/23] Feature/extend personal finance tools 20240809 (#3656)
* Add Sarmaaya.pk
* Add Investify
* Add FINATEKA
* Add Plainzer
---
libs/common/src/lib/personal-finance-tools.ts | 39 +++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts
index 52ac20e49..d8b53203a 100644
--- a/libs/common/src/lib/personal-finance-tools.ts
+++ b/libs/common/src/lib/personal-finance-tools.ts
@@ -181,6 +181,17 @@ export const personalFinanceTools: Product[] = [
origin: 'United States',
slogan: 'Real-Time Portfolio Tracker & Stock Tracker'
},
+ {
+ founded: 2021,
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'finateka',
+ languages: ['English'],
+ name: 'FINATEKA',
+ origin: 'United States',
+ slogan:
+ 'The most convenient mobile application for personal finance accounting'
+ },
{
founded: 2023,
hasFreePlan: true,
@@ -239,6 +250,14 @@ export const personalFinanceTools: Product[] = [
pricingPerYear: '$60',
slogan: 'Managing money, made simple'
},
+ {
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'investify',
+ name: 'Investify',
+ origin: 'Pakistan',
+ slogan: 'Advanced portfolio tracking and stock market information'
+ },
{
founded: 2011,
hasFreePlan: true,
@@ -354,6 +373,17 @@ export const personalFinanceTools: Product[] = [
regions: ['Austria', 'Germany', 'Switzerland'],
slogan: 'Dein Vermögen immer im Blick'
},
+ {
+ founded: 2023,
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'plainzer',
+ languages: ['English'],
+ name: 'Plainzer',
+ origin: 'Poland',
+ pricingPerYear: '$74',
+ slogan: 'Free dividend tracker for your portfolio'
+ },
{
founded: 2023,
hasSelfHostingAbility: false,
@@ -430,6 +460,15 @@ export const personalFinanceTools: Product[] = [
origin: 'United States',
slogan: 'Track your net worth'
},
+ {
+ founded: 2019,
+ hasSelfHostingAbility: false,
+ key: 'sarmaaya.pk',
+ name: 'Sarmaaya.pk Portfolio Tracking',
+ note: 'Sarmaaya.pk Portfolio Tracking was discontinued in 2024',
+ origin: 'Pakistan',
+ slogan: 'Unified platform for financial research and portfolio tracking'
+ },
{
founded: 2004,
hasFreePlan: false,
From 49485f79d24e0097238983c7a660fa9819927262 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 10 Aug 2024 07:57:45 +0200
Subject: [PATCH 15/23] Feature/enable experimental languages in user account
settings (#3655)
* Enable ca and pl as experimental
* Update changelog
---
CHANGELOG.md | 2 ++
.../user-account-settings.html | 20 ++++++++-----------
2 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 59e9e7cc7..34846d691 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Enabled Catalan (`ca`) as an option in the user settings (experimental)
+- Enabled Polish (`pl`) as an option in the user settings (experimental)
- Improved the language localization for Portuguese (`pt`)
- Optimized the docker image layers to reduce the image size
- Updated the binary targets of `debian-openssl` for `prisma`
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.html b/apps/client/src/app/components/user-account-settings/user-account-settings.html
index 8b512ce3f..3896bbb46 100644
--- a/apps/client/src/app/components/user-account-settings/user-account-settings.html
+++ b/apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -73,12 +73,10 @@
Deutsch
English
@if (user?.settings?.isExperimentalFeatures) {
-
+ Català (Community)
}
@if (user?.settings?.isExperimentalFeatures) {
)
@if (user?.settings?.isExperimentalFeatures) {
-
+ Polski (Community)
}
Português (Community
Date: Sat, 10 Aug 2024 07:58:16 +0200
Subject: [PATCH 16/23] Feature/add logging to benchmark service (#3654)
* Add logging
---
apps/api/src/app/benchmark/benchmark.service.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/apps/api/src/app/benchmark/benchmark.service.ts b/apps/api/src/app/benchmark/benchmark.service.ts
index b6fdc8ea9..710eb0212 100644
--- a/apps/api/src/app/benchmark/benchmark.service.ts
+++ b/apps/api/src/app/benchmark/benchmark.service.ts
@@ -105,6 +105,8 @@ export class BenchmarkService {
const { benchmarks, expiration }: BenchmarkValue =
JSON.parse(cachedBenchmarkValue);
+ Logger.debug('Fetched benchmarks from cache', 'BenchmarkService');
+
if (isAfter(new Date(), new Date(expiration))) {
this.calculateAndCacheBenchmarks({
enableSharing
@@ -356,6 +358,8 @@ export class BenchmarkService {
private async calculateAndCacheBenchmarks({
enableSharing = false
}): Promise {
+ Logger.debug('Calculate benchmarks', 'BenchmarkService');
+
const benchmarkAssetProfiles = await this.getBenchmarkAssetProfiles({
enableSharing
});
From c34959896c353ed220da94352348edb5339168fc Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 10 Aug 2024 09:01:28 +0200
Subject: [PATCH 17/23] Feature/improve color assignment with annualized
performance in treemap chart (#3657)
* Improve color assignment
* Update changelog
---
CHANGELOG.md | 1 +
.../src/app/benchmark/benchmark.controller.ts | 4 +-
apps/api/src/app/order/order.controller.ts | 4 +-
.../calculator/portfolio-calculator.ts | 15 ++--
.../src/app/portfolio/portfolio.controller.ts | 4 +-
.../src/app/portfolio/portfolio.service.ts | 14 ++--
apps/api/src/helper/portfolio.helper.ts | 71 -------------------
.../home-holdings/home-holdings.html | 1 +
.../investment-chart.component.ts | 3 +-
.../portfolio/analysis/analysis-page.html | 3 -
libs/common/src/lib/calculation-helper.ts | 71 +++++++++++++++++++
.../treemap-chart/treemap-chart.component.ts | 18 +++--
.../trend-indicator.component.html | 4 +-
.../trend-indicator.component.ts | 2 +-
14 files changed, 112 insertions(+), 103 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 34846d691..74600ab0d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the color assignment in the chart of the holdings tab on the home page (experimental)
- Enabled Catalan (`ca`) as an option in the user settings (experimental)
- Enabled Polish (`pl`) as an option in the user settings (experimental)
- Improved the language localization for Portuguese (`pt`)
diff --git a/apps/api/src/app/benchmark/benchmark.controller.ts b/apps/api/src/app/benchmark/benchmark.controller.ts
index ea9ba8025..66c268b9b 100644
--- a/apps/api/src/app/benchmark/benchmark.controller.ts
+++ b/apps/api/src/app/benchmark/benchmark.controller.ts
@@ -1,8 +1,8 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
-import { getInterval } from '@ghostfolio/api/helper/portfolio.helper';
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
+import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import type {
AssetProfileIdentifier,
BenchmarkMarketDataDetails,
@@ -113,7 +113,7 @@ export class BenchmarkController {
@Param('symbol') symbol: string,
@Query('range') dateRange: DateRange = 'max'
): Promise {
- const { endDate, startDate } = getInterval(
+ const { endDate, startDate } = getIntervalFromDateRange(
dateRange,
new Date(startDateString)
);
diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts
index af8a1e296..7a9cf3d17 100644
--- a/apps/api/src/app/order/order.controller.ts
+++ b/apps/api/src/app/order/order.controller.ts
@@ -1,12 +1,12 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
-import { getInterval } from '@ghostfolio/api/helper/portfolio.helper';
import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.interceptor';
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { DataGatheringService } from '@ghostfolio/api/services/data-gathering/data-gathering.service';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
+import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import {
DATA_GATHERING_QUEUE_PRIORITY_HIGH,
HEADER_KEY_IMPERSONATION
@@ -110,7 +110,7 @@ export class OrderController {
let startDate: Date;
if (dateRange) {
- ({ endDate, startDate } = getInterval(dateRange));
+ ({ endDate, startDate } = getIntervalFromDateRange(dateRange));
}
const filters = this.apiService.buildFiltersFromQueryParams({
diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
index 8c9342e39..697496a1c 100644
--- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
+++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
@@ -4,13 +4,11 @@ import { PortfolioOrder } from '@ghostfolio/api/app/portfolio/interfaces/portfol
import { TransactionPointSymbol } from '@ghostfolio/api/app/portfolio/interfaces/transaction-point-symbol.interface';
import { TransactionPoint } from '@ghostfolio/api/app/portfolio/interfaces/transaction-point.interface';
import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service';
-import {
- getFactor,
- getInterval
-} from '@ghostfolio/api/helper/portfolio.helper';
+import { getFactor } from '@ghostfolio/api/helper/portfolio.helper';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces';
+import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import { MAX_CHART_ITEMS } from '@ghostfolio/common/config';
import {
DATE_FORMAT,
@@ -133,7 +131,7 @@ export abstract class PortfolioCalculator {
this.useCache = useCache;
this.userId = userId;
- const { endDate, startDate } = getInterval(dateRange);
+ const { endDate, startDate } = getIntervalFromDateRange(dateRange);
this.endDate = endDate;
this.startDate = startDate;
@@ -303,7 +301,7 @@ export abstract class PortfolioCalculator {
const feeInBaseCurrency = item.fee.mul(
exchangeRatesByCurrency[`${item.currency}${this.currency}`]?.[
lastTransactionPoint.date
- ]
+ ] ?? 1
);
const marketPriceInBaseCurrency = (
@@ -433,7 +431,10 @@ export abstract class PortfolioCalculator {
dateRange?: DateRange;
withDataDecimation?: boolean;
}): Promise {
- const { endDate, startDate } = getInterval(dateRange, this.getStartDate());
+ const { endDate, startDate } = getIntervalFromDateRange(
+ dateRange,
+ this.getStartDate()
+ );
const daysInMarket = differenceInDays(endDate, startDate) + 1;
const step = withDataDecimation
diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts
index 3c7993c61..7ce0b0847 100644
--- a/apps/api/src/app/portfolio/portfolio.controller.ts
+++ b/apps/api/src/app/portfolio/portfolio.controller.ts
@@ -7,7 +7,6 @@ import {
hasNotDefinedValuesInObject,
nullifyValuesInObject
} from '@ghostfolio/api/helper/object.helper';
-import { getInterval } from '@ghostfolio/api/helper/portfolio.helper';
import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.interceptor';
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
@@ -15,6 +14,7 @@ import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
+import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import {
DEFAULT_CURRENCY,
HEADER_KEY_IMPERSONATION
@@ -247,7 +247,7 @@ export class PortfolioController {
await this.impersonationService.validateImpersonationId(impersonationId);
const userCurrency = this.request.user.Settings.settings.baseCurrency;
- const { endDate, startDate } = getInterval(dateRange);
+ const { endDate, startDate } = getIntervalFromDateRange(dateRange);
const { activities } = await this.orderService.getOrders({
endDate,
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index 67529cc67..52543c16c 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -4,10 +4,7 @@ import { CashDetails } from '@ghostfolio/api/app/account/interfaces/cash-details
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { OrderService } from '@ghostfolio/api/app/order/order.service';
import { UserService } from '@ghostfolio/api/app/user/user.service';
-import {
- getFactor,
- getInterval
-} from '@ghostfolio/api/helper/portfolio.helper';
+import { getFactor } from '@ghostfolio/api/helper/portfolio.helper';
import { AccountClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/account-cluster-risk/current-investment';
import { AccountClusterRiskSingleAccount } from '@ghostfolio/api/models/rules/account-cluster-risk/single-account';
import { CurrencyClusterRiskBaseCurrencyCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/base-currency-current-investment';
@@ -18,7 +15,10 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
-import { getAnnualizedPerformancePercent } from '@ghostfolio/common/calculation-helper';
+import {
+ getAnnualizedPerformancePercent,
+ getIntervalFromDateRange
+} from '@ghostfolio/common/calculation-helper';
import {
DEFAULT_CURRENCY,
EMERGENCY_FUND_TAG_ID,
@@ -912,7 +912,7 @@ export class PortfolioService {
const userId = await this.getUserId(impersonationId, this.request.user.id);
const user = await this.userService.user({ id: userId });
- const { endDate } = getInterval(dateRange);
+ const { endDate } = getIntervalFromDateRange(dateRange);
const { activities } = await this.orderService.getOrders({
endDate,
@@ -1089,7 +1089,7 @@ export class PortfolioService {
)
);
- const { endDate } = getInterval(dateRange);
+ const { endDate } = getIntervalFromDateRange(dateRange);
const { activities } = await this.orderService.getOrders({
endDate,
diff --git a/apps/api/src/helper/portfolio.helper.ts b/apps/api/src/helper/portfolio.helper.ts
index 21b111395..6ebe48d3c 100644
--- a/apps/api/src/helper/portfolio.helper.ts
+++ b/apps/api/src/helper/portfolio.helper.ts
@@ -1,17 +1,4 @@
-import { resetHours } from '@ghostfolio/common/helper';
-import { DateRange } from '@ghostfolio/common/types';
-
import { Type as ActivityType } from '@prisma/client';
-import {
- endOfDay,
- max,
- subDays,
- startOfMonth,
- startOfWeek,
- startOfYear,
- subYears,
- endOfYear
-} from 'date-fns';
export function getFactor(activityType: ActivityType) {
let factor: number;
@@ -30,61 +17,3 @@ export function getFactor(activityType: ActivityType) {
return factor;
}
-
-export function getInterval(
- aDateRange: DateRange,
- portfolioStart = new Date(0)
-) {
- let endDate = endOfDay(new Date(Date.now()));
- let startDate = portfolioStart;
-
- switch (aDateRange) {
- case '1d':
- startDate = max([
- startDate,
- subDays(resetHours(new Date(Date.now())), 1)
- ]);
- break;
- case 'mtd':
- startDate = max([
- startDate,
- subDays(startOfMonth(resetHours(new Date(Date.now()))), 1)
- ]);
- break;
- case 'wtd':
- startDate = max([
- startDate,
- subDays(
- startOfWeek(resetHours(new Date(Date.now())), { weekStartsOn: 1 }),
- 1
- )
- ]);
- break;
- case 'ytd':
- startDate = max([
- startDate,
- subDays(startOfYear(resetHours(new Date(Date.now()))), 1)
- ]);
- break;
- case '1y':
- startDate = max([
- startDate,
- subYears(resetHours(new Date(Date.now())), 1)
- ]);
- break;
- case '5y':
- startDate = max([
- startDate,
- subYears(resetHours(new Date(Date.now())), 5)
- ]);
- break;
- case 'max':
- break;
- default:
- // '2024', '2023', '2022', etc.
- endDate = endOfYear(new Date(aDateRange));
- startDate = max([startDate, new Date(aDateRange)]);
- }
-
- return { endDate, startDate };
-}
diff --git a/apps/client/src/app/components/home-holdings/home-holdings.html b/apps/client/src/app/components/home-holdings/home-holdings.html
index b3ebe941c..bd9e57bb2 100644
--- a/apps/client/src/app/components/home-holdings/home-holdings.html
+++ b/apps/client/src/app/components/home-holdings/home-holdings.html
@@ -38,6 +38,7 @@
diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts
index 429eaae6f..15a4a6f9a 100644
--- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts
+++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts
@@ -14,7 +14,7 @@ import {
} from '@ghostfolio/common/helper';
import { LineChartItem } from '@ghostfolio/common/interfaces';
import { InvestmentItem } from '@ghostfolio/common/interfaces/investment-item.interface';
-import { ColorScheme, DateRange, GroupBy } from '@ghostfolio/common/types';
+import { ColorScheme, GroupBy } from '@ghostfolio/common/types';
import {
ChangeDetectionStrategy,
@@ -58,7 +58,6 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
@Input() isInPercent = false;
@Input() isLoading = false;
@Input() locale = getLocale();
- @Input() range: DateRange = 'max';
@Input() savingsRate = 0;
@ViewChild('chartCanvas') chartCanvas;
diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
index 970a89f75..73817bdcb 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
@@ -282,7 +282,6 @@
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[isLoading]="isLoadingInvestmentChart"
[locale]="user?.settings?.locale"
- [range]="user?.settings?.dateRange"
/>
@@ -340,7 +339,6 @@
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[isLoading]="isLoadingInvestmentTimelineChart"
[locale]="user?.settings?.locale"
- [range]="user?.settings?.dateRange"
[savingsRate]="savingsRate"
/>
@@ -377,7 +375,6 @@
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[isLoading]="isLoadingDividendTimelineChart"
[locale]="user?.settings?.locale"
- [range]="user?.settings?.dateRange"
/>
diff --git a/libs/common/src/lib/calculation-helper.ts b/libs/common/src/lib/calculation-helper.ts
index 7d2ec9099..825282579 100644
--- a/libs/common/src/lib/calculation-helper.ts
+++ b/libs/common/src/lib/calculation-helper.ts
@@ -1,6 +1,19 @@
import { Big } from 'big.js';
+import {
+ endOfDay,
+ endOfYear,
+ max,
+ startOfMonth,
+ startOfWeek,
+ startOfYear,
+ subDays,
+ subYears
+} from 'date-fns';
import { isNumber } from 'lodash';
+import { resetHours } from './helper';
+import { DateRange } from './types';
+
export function getAnnualizedPerformancePercent({
daysInMarket,
netPerformancePercentage
@@ -18,3 +31,61 @@ export function getAnnualizedPerformancePercent({
return new Big(0);
}
+
+export function getIntervalFromDateRange(
+ aDateRange: DateRange,
+ portfolioStart = new Date(0)
+) {
+ let endDate = endOfDay(new Date(Date.now()));
+ let startDate = portfolioStart;
+
+ switch (aDateRange) {
+ case '1d':
+ startDate = max([
+ startDate,
+ subDays(resetHours(new Date(Date.now())), 1)
+ ]);
+ break;
+ case 'mtd':
+ startDate = max([
+ startDate,
+ subDays(startOfMonth(resetHours(new Date(Date.now()))), 1)
+ ]);
+ break;
+ case 'wtd':
+ startDate = max([
+ startDate,
+ subDays(
+ startOfWeek(resetHours(new Date(Date.now())), { weekStartsOn: 1 }),
+ 1
+ )
+ ]);
+ break;
+ case 'ytd':
+ startDate = max([
+ startDate,
+ subDays(startOfYear(resetHours(new Date(Date.now()))), 1)
+ ]);
+ break;
+ case '1y':
+ startDate = max([
+ startDate,
+ subYears(resetHours(new Date(Date.now())), 1)
+ ]);
+ break;
+ case '5y':
+ startDate = max([
+ startDate,
+ subYears(resetHours(new Date(Date.now())), 5)
+ ]);
+ break;
+ case 'max':
+ break;
+ default:
+ // '2024', '2023', '2022', etc.
+ endDate = endOfYear(new Date(aDateRange));
+ startDate = max([startDate, new Date(aDateRange)]);
+ }
+
+ return { endDate, startDate };
+}
diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts
index f65894da3..8915707fa 100644
--- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts
+++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts
@@ -1,8 +1,12 @@
-import { getAnnualizedPerformancePercent } from '@ghostfolio/common/calculation-helper';
+import {
+ getAnnualizedPerformancePercent,
+ getIntervalFromDateRange
+} from '@ghostfolio/common/calculation-helper';
import {
AssetProfileIdentifier,
PortfolioPosition
} from '@ghostfolio/common/interfaces';
+import { DateRange } from '@ghostfolio/common/types';
import { CommonModule } from '@angular/common';
import {
@@ -23,7 +27,7 @@ import { ChartConfiguration } from 'chart.js';
import { LinearScale } from 'chart.js';
import { Chart } from 'chart.js';
import { TreemapController, TreemapElement } from 'chartjs-chart-treemap';
-import { differenceInDays } from 'date-fns';
+import { differenceInDays, max } from 'date-fns';
import { orderBy } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
@@ -41,6 +45,7 @@ export class GfTreemapChartComponent
implements AfterViewInit, OnChanges, OnDestroy
{
@Input() cursor: string;
+ @Input() dateRange: DateRange;
@Input() holdings: PortfolioPosition[];
@Output() treemapChartClicked = new EventEmitter();
@@ -75,6 +80,8 @@ export class GfTreemapChartComponent
private initialize() {
this.isLoading = true;
+ const { endDate, startDate } = getIntervalFromDateRange(this.dateRange);
+
const data: ChartConfiguration['data'] = {
datasets: [
{
@@ -82,8 +89,11 @@ export class GfTreemapChartComponent
const annualizedNetPerformancePercentWithCurrencyEffect =
getAnnualizedPerformancePercent({
daysInMarket: differenceInDays(
- new Date(),
- ctx.raw._data.dateOfFirstActivity
+ endDate,
+ max([
+ ctx.raw._data.dateOfFirstActivity ?? new Date(0),
+ startDate
+ ])
),
netPerformancePercentage: new Big(
ctx.raw._data.netPerformancePercentWithCurrencyEffect
diff --git a/libs/ui/src/lib/trend-indicator/trend-indicator.component.html b/libs/ui/src/lib/trend-indicator/trend-indicator.component.html
index 761b3f232..b9f65a2ea 100644
--- a/libs/ui/src/lib/trend-indicator/trend-indicator.component.html
+++ b/libs/ui/src/lib/trend-indicator/trend-indicator.component.html
@@ -8,9 +8,9 @@
}"
/>
} @else {
- @if (marketState === 'closed' && range === '1d') {
+ @if (marketState === 'closed' && dateRange === '1d') {
- } @else if (marketState === 'delayed' && range === '1d') {
+ } @else if (marketState === 'delayed' && dateRange === '1d') {
} @else if (value <= -0.0005) {
Date: Sat, 10 Aug 2024 09:02:49 +0200
Subject: [PATCH 18/23] Release 2.103.0 (#3658)
---
CHANGELOG.md | 2 +-
package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 74600ab0d..5381d85b1 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
+## 2.103.0 - 2024-08-10
### Changed
diff --git a/package.json b/package.json
index 7de22bdc5..0e38d32a3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "2.102.0",
+ "version": "2.103.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From 475bc3b86da86e24710d930ca9d0b95bbd6804ca Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 11 Aug 2024 11:09:21 +0200
Subject: [PATCH 19/23] Feature/improve language localization for de 20240810
(#3660)
* Update translations
* Update changelog
---
CHANGELOG.md | 6 ++
apps/client/src/locales/messages.ca.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.de.xlf | 84 ++++++++++++++-----------
apps/client/src/locales/messages.es.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.fr.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.it.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.nl.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.pl.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.pt.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.tr.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.xlf | 82 +++++++++++++-----------
apps/client/src/locales/messages.zh.xlf | 82 +++++++++++++-----------
12 files changed, 502 insertions(+), 408 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5381d85b1..df2f9e82d 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`)
+
## 2.103.0 - 2024-08-10
### Changed
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index 46c4eecf8..a0c08c862 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -302,31 +302,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -926,7 +934,7 @@
Balanç de Caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -2074,7 +2082,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2126,11 +2134,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2574,7 +2582,7 @@
Informar d’un Problema amb les Dades
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -2614,7 +2622,7 @@
Gestionar Activitats
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -2746,7 +2754,7 @@
Total Amount
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2754,7 +2762,7 @@
Savings Rate
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -2766,7 +2774,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -3242,7 +3250,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -3398,7 +3406,7 @@
Locale
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -3406,7 +3414,7 @@
Date and number format
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -3414,7 +3422,7 @@
Appearance
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -3422,7 +3430,7 @@
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -3430,7 +3438,7 @@
Light
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -3438,7 +3446,7 @@
Dark
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -3446,7 +3454,7 @@
Zen Mode
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -3458,7 +3466,7 @@
Distraction-free experience for turbulent times
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3466,7 +3474,7 @@
Biometric Authentication
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -3474,7 +3482,7 @@
Sign in with fingerprint
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -3482,7 +3490,7 @@
Experimental Features
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -3490,7 +3498,7 @@
Sneak peek at upcoming functionality
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -3498,7 +3506,7 @@
Export Data
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -3506,7 +3514,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -3514,7 +3522,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
@@ -3670,7 +3678,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -5106,7 +5114,7 @@
Investment Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -5114,7 +5122,7 @@
Current Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -5122,7 +5130,7 @@
Longest Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -5130,7 +5138,7 @@
Dividend Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index ff8a46aa6..19d1b9f3a 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -854,7 +854,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1042,7 +1042,7 @@
Aktivitäten verwalten
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -1070,7 +1070,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -1342,11 +1342,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1362,7 +1362,7 @@
Datenfehler melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -1742,7 +1742,7 @@
Lokalität
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -1750,7 +1750,7 @@
Datums- und Zahlenformat
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -1758,7 +1758,7 @@
Zen Modus
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -1770,7 +1770,7 @@
Einloggen mit Fingerabdruck
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -1782,7 +1782,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -2102,7 +2102,7 @@
Zeitstrahl der Investitionen
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -2874,7 +2874,7 @@
Experimentelle Funktionen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -2922,7 +2922,7 @@
Aussehen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -2930,7 +2930,7 @@
Automatisch
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -2938,7 +2938,7 @@
Hell
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -2946,7 +2946,7 @@
Dunkel
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -2954,7 +2954,7 @@
Gesamtbetrag
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2970,7 +2970,7 @@
Sparrate
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -3210,31 +3210,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -3270,7 +3278,7 @@
Zeitstrahl der Dividenden
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -3462,7 +3470,7 @@
Unbeschwertes Erlebnis für turbulente Zeiten
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3470,7 +3478,7 @@
Vorschau auf kommende Funktionalität
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -4122,7 +4130,7 @@
Aktueller Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4130,7 +4138,7 @@
Längster Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4710,7 +4718,7 @@
Biometrische Authentifizierung
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -4794,7 +4802,7 @@
Daten exportieren
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -6018,7 +6026,7 @@
Ups, der Cash-Bestand Transfer ist fehlgeschlagen.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -6082,7 +6090,7 @@
Cash-Bestände
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6590,7 +6598,7 @@
Gefahrenzone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6598,7 +6606,7 @@
Konto schliessen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
@@ -6795,7 +6803,7 @@
Wealth
- Vermögen
+ Vermögen
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
99
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index 4fb3cfe8c..0a40c8ccc 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -855,7 +855,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1043,7 +1043,7 @@
Gestión de las operaciones
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -1071,7 +1071,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -1343,11 +1343,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1363,7 +1363,7 @@
Reporta un anomalía de los datos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -1743,7 +1743,7 @@
Ubicación
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -1751,7 +1751,7 @@
Formato de fecha y número
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -1759,7 +1759,7 @@
Modo Zen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -1771,7 +1771,7 @@
Iniciar sesión con huella digital
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -1783,7 +1783,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -2103,7 +2103,7 @@
Cronología de la inversión
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -2875,7 +2875,7 @@
Funcionalidades experimentales
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -2923,7 +2923,7 @@
Apariencia
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -2931,7 +2931,7 @@
Automático
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -2939,7 +2939,7 @@
Claro
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -2947,7 +2947,7 @@
Oscuro
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -2955,7 +2955,7 @@
Importe total
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2971,7 +2971,7 @@
Tasa de ahorro
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -3211,31 +3211,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -3283,7 +3291,7 @@
Calendario de dividendos
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -3463,7 +3471,7 @@
Experiencia sin distracciones para tiempos turbulentos
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3471,7 +3479,7 @@
Un adelanto de las próximas funciones
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -4123,7 +4131,7 @@
Current Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4131,7 +4139,7 @@
Longest Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4711,7 +4719,7 @@
Biometric Authentication
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -4795,7 +4803,7 @@
Export Data
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -6019,7 +6027,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -6083,7 +6091,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6591,7 +6599,7 @@
Zona peligrosa
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6599,7 +6607,7 @@
Eliminar cuenta
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf
index 74be9e7a6..3f51b7c7d 100644
--- a/apps/client/src/locales/messages.fr.xlf
+++ b/apps/client/src/locales/messages.fr.xlf
@@ -942,11 +942,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1070,7 +1070,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1362,7 +1362,7 @@
Gérer les Activités
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -1410,7 +1410,7 @@
Montant Total
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -1418,7 +1418,7 @@
Taux d’Épargne
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -1430,7 +1430,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -1710,7 +1710,7 @@
Signaler une Erreur de Données
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -2022,31 +2022,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -2058,7 +2066,7 @@
Paramètres régionaux
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -2066,7 +2074,7 @@
Format de date et d’heure
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -2074,7 +2082,7 @@
Apparence
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -2082,7 +2090,7 @@
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -2090,7 +2098,7 @@
Clair
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -2098,7 +2106,7 @@
Sombre
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -2106,7 +2114,7 @@
Mode Zen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -2118,7 +2126,7 @@
Se connecter avec empreinte
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -2126,7 +2134,7 @@
Fonctionnalités expérimentales
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -2138,7 +2146,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -2762,7 +2770,7 @@
Historique des Investissements
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -2770,7 +2778,7 @@
Historique des Dividendes
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -3462,7 +3470,7 @@
Expérience sans distraction pour les périodes tumultueuses
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3470,7 +3478,7 @@
Avant-première de fonctionnalités futures
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -4122,7 +4130,7 @@
Série en cours
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4130,7 +4138,7 @@
Série la plus longue
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4710,7 +4718,7 @@
Biometric Authentication
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -4794,7 +4802,7 @@
Export Data
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -6018,7 +6026,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -6082,7 +6090,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6590,7 +6598,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6598,7 +6606,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf
index f910e7d90..9eed170d0 100644
--- a/apps/client/src/locales/messages.it.xlf
+++ b/apps/client/src/locales/messages.it.xlf
@@ -855,7 +855,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1043,7 +1043,7 @@
Gestione delle attività
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -1071,7 +1071,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -1343,11 +1343,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1363,7 +1363,7 @@
Segnala un’anomalia dei dati
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -1743,7 +1743,7 @@
Locale
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -1751,7 +1751,7 @@
Formato data e numero
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -1759,7 +1759,7 @@
Modalità Zen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -1771,7 +1771,7 @@
Accesso con impronta digitale
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -1783,7 +1783,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -2103,7 +2103,7 @@
Cronologia degli investimenti
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -2875,7 +2875,7 @@
Funzionalità sperimentali
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -2923,7 +2923,7 @@
Aspetto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -2931,7 +2931,7 @@
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -2939,7 +2939,7 @@
Chiaro
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -2947,7 +2947,7 @@
Scuro
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -2955,7 +2955,7 @@
Importo totale
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2971,7 +2971,7 @@
Tasso di risparmio
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -3211,31 +3211,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -3283,7 +3291,7 @@
Cronologia dei dividendi
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -3463,7 +3471,7 @@
Esperienza priva di distrazioni per i periodi più turbolenti
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3471,7 +3479,7 @@
Un’anteprima delle funzionalità in arrivo
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -4123,7 +4131,7 @@
Serie attuale
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4131,7 +4139,7 @@
Serie più lunga
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4711,7 +4719,7 @@
Autenticazione biometrica
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -4795,7 +4803,7 @@
Esporta dati
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -6019,7 +6027,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -6083,7 +6091,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6591,7 +6599,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6599,7 +6607,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf
index a5e623efa..fef9a6b33 100644
--- a/apps/client/src/locales/messages.nl.xlf
+++ b/apps/client/src/locales/messages.nl.xlf
@@ -854,7 +854,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1042,7 +1042,7 @@
Activiteiten beheren
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -1070,7 +1070,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -1342,11 +1342,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1362,7 +1362,7 @@
Gegevensstoring melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -1742,7 +1742,7 @@
Locatie
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -1750,7 +1750,7 @@
Datum- en getalnotatie
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -1758,7 +1758,7 @@
Zen-modus
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -1770,7 +1770,7 @@
Aanmelden met vingerafdruk
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -1782,7 +1782,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -2102,7 +2102,7 @@
Tijdlijn investeringen
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -2874,7 +2874,7 @@
Experimentele functies
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -2922,7 +2922,7 @@
Weergave
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -2930,7 +2930,7 @@
Automatisch
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -2938,7 +2938,7 @@
Licht
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -2946,7 +2946,7 @@
Donker
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -2954,7 +2954,7 @@
Totaalbedrag
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2970,7 +2970,7 @@
Spaarrente
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -3210,31 +3210,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -3282,7 +3290,7 @@
Tijdlijn dividend
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -3462,7 +3470,7 @@
Afleidingsvrije ervaring voor roerige tijden
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3470,7 +3478,7 @@
Voorproefje van nieuwe functionaliteit
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -4122,7 +4130,7 @@
Huidige reeks
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4130,7 +4138,7 @@
Langste reeks
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4710,7 +4718,7 @@
Biometrische authenticatie
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -4794,7 +4802,7 @@
Exporteer Data
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -6018,7 +6026,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -6082,7 +6090,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6590,7 +6598,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6598,7 +6606,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf
index a2d25dc5e..730d70421 100644
--- a/apps/client/src/locales/messages.pl.xlf
+++ b/apps/client/src/locales/messages.pl.xlf
@@ -674,31 +674,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -1902,7 +1910,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1954,11 +1962,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2242,7 +2250,7 @@
Manage Activities
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -2374,7 +2382,7 @@
Total Amount
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2382,7 +2390,7 @@
Savings Rate
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -2394,7 +2402,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -2726,7 +2734,7 @@
Report Data Glitch
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -3082,7 +3090,7 @@
Ustawienia Regionalne
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -3090,7 +3098,7 @@
Date and number format
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -3098,7 +3106,7 @@
Wygląd (tryb)
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -3106,7 +3114,7 @@
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -3114,7 +3122,7 @@
Jasny
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -3122,7 +3130,7 @@
Ciemny
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -3130,7 +3138,7 @@
Tryb Zen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -3142,7 +3150,7 @@
Distraction-free experience for turbulent times
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3150,7 +3158,7 @@
Uwierzytelnianie Biometryczne
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -3158,7 +3166,7 @@
Zaloguj się za pomocą linii papilarnych
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -3166,7 +3174,7 @@
Funkcje Eksperymentalne
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -3174,7 +3182,7 @@
Włącz podgląd nadchodzących funkcji
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -3186,7 +3194,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -3194,7 +3202,7 @@
Eksportuj Dane
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -3334,7 +3342,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -4626,7 +4634,7 @@
Investment Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -4634,7 +4642,7 @@
Current Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4642,7 +4650,7 @@
Longest Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4650,7 +4658,7 @@
Dividend Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -6082,7 +6090,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6590,7 +6598,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6598,7 +6606,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf
index 8218c5d0b..4a4efb61b 100644
--- a/apps/client/src/locales/messages.pt.xlf
+++ b/apps/client/src/locales/messages.pt.xlf
@@ -934,7 +934,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1226,7 +1226,7 @@
Gerir Atividades
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -1282,7 +1282,7 @@
Valor Total
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -1290,7 +1290,7 @@
Taxa de Poupança
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -1302,7 +1302,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -1650,11 +1650,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1670,7 +1670,7 @@
Dados do Relatório com Problema
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -2010,7 +2010,7 @@
Localidade
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -2018,7 +2018,7 @@
Formato de números e datas
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -2026,7 +2026,7 @@
Modo Zen
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -2038,7 +2038,7 @@
Aparência
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -2046,7 +2046,7 @@
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -2054,7 +2054,7 @@
Claro
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -2062,7 +2062,7 @@
Escuro
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -2070,7 +2070,7 @@
Iniciar sessão com impressão digital
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -2078,7 +2078,7 @@
Funcionalidades Experimentais
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -2090,7 +2090,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -2650,7 +2650,7 @@
Cronograma de Investimento
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -3254,31 +3254,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -3350,7 +3358,7 @@
Cronograma de Dividendos
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -3462,7 +3470,7 @@
Experiência sem distrações para tempos turbulentos
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3470,7 +3478,7 @@
Acesso antecipado a funcionalidades futuras
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -4122,7 +4130,7 @@
Série Atual
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4130,7 +4138,7 @@
Série mais Longa
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4710,7 +4718,7 @@
Autenticação biométrica
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -4794,7 +4802,7 @@
Exportar dados
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -6018,7 +6026,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -6082,7 +6090,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6590,7 +6598,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6598,7 +6606,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf
index 3e9fd38ac..26abf234c 100644
--- a/apps/client/src/locales/messages.tr.xlf
+++ b/apps/client/src/locales/messages.tr.xlf
@@ -650,31 +650,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -1690,11 +1698,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1818,7 +1826,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2094,7 +2102,7 @@
İşlemleri Yönet
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -2226,7 +2234,7 @@
Toplam Tutar
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2234,7 +2242,7 @@
Tasarruf Oranı
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -2246,7 +2254,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -2570,7 +2578,7 @@
Rapor Veri Sorunu
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -3154,7 +3162,7 @@
Zen Modu
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -4114,7 +4122,7 @@
Yatırım Zaman Çizelgesi
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -4122,7 +4130,7 @@
Güncel Seri
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4130,7 +4138,7 @@
En Uzun Seri
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4138,7 +4146,7 @@
Temettü Zaman Çizelgesi
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -4970,7 +4978,7 @@
Yerel Ayarlar
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -4978,7 +4986,7 @@
Tarih ve Sayı Formatları
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -4986,7 +4994,7 @@
Görünüm
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -4994,7 +5002,7 @@
Otomatik
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -5002,7 +5010,7 @@
Açık
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -5010,7 +5018,7 @@
Koyu
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -5018,7 +5026,7 @@
Çalkantılı zamanlar için dikkat dağıtmayan bir deneyim
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -5026,7 +5034,7 @@
Biyometrik Kimlik Doğrulama
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -5034,7 +5042,7 @@
Parmak iziyle oturum aç
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -5042,7 +5050,7 @@
Deneysel Özellikler
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -5050,7 +5058,7 @@
Gelecek özelliklere göz atın
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -5062,7 +5070,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -5070,7 +5078,7 @@
Verileri Dışa Aktar
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -6018,7 +6026,7 @@
Hay Allah, Nakit bakiyesi tranferi başarısız oldu.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -6082,7 +6090,7 @@
Nakit Bakiyeleri
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -6590,7 +6598,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6598,7 +6606,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf
index 24253d03d..00435c0d4 100644
--- a/apps/client/src/locales/messages.xlf
+++ b/apps/client/src/locales/messages.xlf
@@ -652,31 +652,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -828,7 +836,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -1804,7 +1812,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1851,11 +1859,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2110,7 +2118,7 @@
Manage Activities
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -2227,14 +2235,14 @@
Total Amount
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
Savings Rate
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -2245,7 +2253,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -2545,7 +2553,7 @@
Report Data Glitch
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -2867,49 +2875,49 @@
Locale
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
Date and number format
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
Appearance
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
Light
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
Dark
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
Zen Mode
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -2920,35 +2928,35 @@
Distraction-free experience for turbulent times
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
Biometric Authentication
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
Sign in with fingerprint
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
Experimental Features
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
Sneak peek at upcoming functionality
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -2959,14 +2967,14 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
Export Data
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -3093,7 +3101,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -4244,28 +4252,28 @@
Investment Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
Current Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
Longest Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
Dividend Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -5968,7 +5976,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
@@ -5982,7 +5990,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf
index 3092e362e..3692c7b1d 100644
--- a/apps/client/src/locales/messages.zh.xlf
+++ b/apps/client/src/locales/messages.zh.xlf
@@ -675,31 +675,39 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 85
+ 77
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 90
+ 83
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 94
+ 88
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 98
+ 92
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 102
+ 96
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 100
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 118
+ 105
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 110
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 114
apps/client/src/app/pages/features/features-page.html
@@ -863,7 +871,7 @@
现金余额
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 115
+ 122
@@ -1919,7 +1927,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 368
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1971,11 +1979,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 386
+ 393
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 423
+ 430
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2259,7 +2267,7 @@
管理活动
apps/client/src/app/components/home-holdings/home-holdings.html
- 60
+ 61
@@ -2391,7 +2399,7 @@
总金额
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 142
+ 141
@@ -2399,7 +2407,7 @@
储蓄率
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 214
+ 213
@@ -2411,7 +2419,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 255
+ 251
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -2743,7 +2751,7 @@
报告数据故障
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 441
+ 448
@@ -3099,7 +3107,7 @@
语言环境
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 127
+ 123
@@ -3107,7 +3115,7 @@
日期和数字格式
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 129
+ 125
@@ -3115,7 +3123,7 @@
外貌
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 152
+ 148
@@ -3123,7 +3131,7 @@
自动
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 166
+ 162
@@ -3131,7 +3139,7 @@
明亮
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 167
+ 163
@@ -3139,7 +3147,7 @@
黑暗
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 168
+ 164
@@ -3147,7 +3155,7 @@
极简模式
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 177
+ 173
apps/client/src/app/pages/features/features-page.html
@@ -3159,7 +3167,7 @@
动荡时期的无干扰体验
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 178
+ 174
@@ -3167,7 +3175,7 @@
生物识别认证
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 194
+ 190
@@ -3175,7 +3183,7 @@
使用指纹登录
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 195
+ 191
@@ -3183,7 +3191,7 @@
实验性功能
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 211
+ 207
@@ -3191,7 +3199,7 @@
预览即将推出的功能
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 212
+ 208
@@ -3203,7 +3211,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 228
+ 224
@@ -3211,7 +3219,7 @@
导出数据
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 236
+ 232
@@ -3351,7 +3359,7 @@
糟糕,现金余额转账失败。
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 304
+ 308
@@ -4643,7 +4651,7 @@
投资时间表
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 297
+ 296
@@ -4651,7 +4659,7 @@
当前连胜
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 318
+ 317
@@ -4659,7 +4667,7 @@
最长连续纪录
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 327
+ 326
@@ -4667,7 +4675,7 @@
股息时间表
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 354
@@ -6591,7 +6599,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 248
+ 244
@@ -6599,7 +6607,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 283
+ 279
From d1276dc1a700a022a7112fa8a3c9612d051956c3 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sun, 11 Aug 2024 14:31:04 +0200
Subject: [PATCH 20/23] Bugfix/remove read_only true from docker-compose.yml
(#3653)
* Removed read_only: true
* Update changelog
---
CHANGELOG.md | 4 ++++
docker/docker-compose.yml | 1 -
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index df2f9e82d..19504c4a5 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
- Improved the language localization for German (`de`)
+### Fixed
+
+- Removed `read_only: true` from the `docker-compose.yml` file to allow `prisma` to run migrations
+
## 2.103.0 - 2024-08-10
### Changed
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 23d9d6358..0d2166ba8 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -2,7 +2,6 @@ services:
ghostfolio:
image: docker.io/ghostfolio/ghostfolio:latest
init: true
- read_only: true
cap_drop:
- ALL
security_opt:
From 9246a73f410a84c2e107df44f79cf037d4353f65 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 11 Aug 2024 15:43:02 +0200
Subject: [PATCH 21/23] Feature/refactor dark theme css selector (#3662)
* Refactor dark theme CSS selector
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/app/app.component.scss | 2 +-
apps/client/src/app/app.component.ts | 4 ++--
apps/client/src/app/components/header/header.component.scss | 2 +-
apps/client/src/app/components/rule/rule.component.scss | 2 +-
apps/client/src/app/components/toggle/toggle.component.scss | 2 +-
.../components/user-account-access/user-account-access.scss | 2 +-
.../user-account-membership/user-account-membership.scss | 2 +-
.../user-account-settings/user-account-settings.scss | 2 +-
.../components/world-map-chart/world-map-chart.component.scss | 2 +-
apps/client/src/app/pages/about/about-page.scss | 2 +-
apps/client/src/app/pages/about/changelog/changelog-page.scss | 2 +-
apps/client/src/app/pages/about/license/license-page.scss | 2 +-
.../src/app/pages/about/overview/about-overview-page.scss | 2 +-
.../app/pages/about/privacy-policy/privacy-policy-page.scss | 2 +-
apps/client/src/app/pages/admin/admin-page.scss | 2 +-
apps/client/src/app/pages/blog/blog-page.scss | 2 +-
apps/client/src/app/pages/faq/faq-page.scss | 2 +-
apps/client/src/app/pages/features/features-page.scss | 2 +-
apps/client/src/app/pages/home/home-page.scss | 2 +-
apps/client/src/app/pages/landing/landing-page.scss | 2 +-
apps/client/src/app/pages/open/open-page.scss | 2 +-
.../create-or-update-activity-dialog.scss | 2 +-
.../import-activities-dialog/import-activities-dialog.scss | 2 +-
.../src/app/pages/portfolio/allocations/allocations-page.scss | 2 +-
apps/client/src/app/pages/portfolio/portfolio-page.scss | 2 +-
apps/client/src/app/pages/pricing/pricing-page.scss | 2 +-
apps/client/src/app/pages/public/public-page.scss | 2 +-
apps/client/src/app/pages/register/register-page.scss | 2 +-
.../personal-finance-tools/personal-finance-tools-page.scss | 2 +-
.../pages/resources/personal-finance-tools/product-page.scss | 2 +-
apps/client/src/app/pages/resources/resources-page.scss | 2 +-
apps/client/src/app/pages/user-account/user-account-page.scss | 2 +-
apps/client/src/app/pages/zen/zen-page.scss | 2 +-
apps/client/src/styles.scss | 2 +-
apps/client/src/styles/theme.scss | 4 ++--
.../lib/activities-filter/activities-filter.component.scss | 2 +-
libs/ui/src/lib/activity-type/activity-type.component.scss | 2 +-
.../assistant/assistant-list-item/assistant-list-item.scss | 2 +-
libs/ui/src/lib/assistant/assistant.scss | 2 +-
.../ui/src/lib/fire-calculator/fire-calculator.component.scss | 2 +-
.../no-transactions-info/no-transactions-info.component.scss | 2 +-
42 files changed, 44 insertions(+), 43 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 19504c4a5..3a7879844 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Refactored the dark theme CSS selector
- Improved the language localization for German (`de`)
### Fixed
diff --git a/apps/client/src/app/app.component.scss b/apps/client/src/app/app.component.scss
index a23e94fbb..6037e9639 100644
--- a/apps/client/src/app/app.component.scss
+++ b/apps/client/src/app/app.component.scss
@@ -46,7 +46,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
footer {
background-color: rgba(var(--palette-foreground-text-dark), 0.05);
}
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index b1d9a7f09..d432d9619 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -296,9 +296,9 @@ export class AppComponent implements OnDestroy, OnInit {
);
if (isDarkTheme) {
- this.document.body.classList.add('is-dark-theme');
+ this.document.body.classList.add('theme-dark');
} else {
- this.document.body.classList.remove('is-dark-theme');
+ this.document.body.classList.remove('theme-dark');
}
this.document
diff --git a/apps/client/src/app/components/header/header.component.scss b/apps/client/src/app/components/header/header.component.scss
index 6a1521795..d73bf1a8a 100644
--- a/apps/client/src/app/components/header/header.component.scss
+++ b/apps/client/src/app/components/header/header.component.scss
@@ -50,7 +50,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.mat-toolbar {
background-color: var(--dark-background);
diff --git a/apps/client/src/app/components/rule/rule.component.scss b/apps/client/src/app/components/rule/rule.component.scss
index 7246f41de..54ddce823 100644
--- a/apps/client/src/app/components/rule/rule.component.scss
+++ b/apps/client/src/app/components/rule/rule.component.scss
@@ -20,7 +20,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.icon-container {
background-color: rgba(var(--light-primary-text), 0.05);
}
diff --git a/apps/client/src/app/components/toggle/toggle.component.scss b/apps/client/src/app/components/toggle/toggle.component.scss
index 84ca3fd37..b61a02865 100644
--- a/apps/client/src/app/components/toggle/toggle.component.scss
+++ b/apps/client/src/app/components/toggle/toggle.component.scss
@@ -25,7 +25,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.mat-mdc-radio-button {
&.mat-mdc-radio-checked {
background-color: rgba(var(--light-dividers));
diff --git a/apps/client/src/app/components/user-account-access/user-account-access.scss b/apps/client/src/app/components/user-account-access/user-account-access.scss
index 39eb6792e..c19bfd343 100644
--- a/apps/client/src/app/components/user-account-access/user-account-access.scss
+++ b/apps/client/src/app/components/user-account-access/user-account-access.scss
@@ -3,6 +3,6 @@
display: block;
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.scss b/apps/client/src/app/components/user-account-membership/user-account-membership.scss
index bb296c89b..0b66f6ee9 100644
--- a/apps/client/src/app/components/user-account-membership/user-account-membership.scss
+++ b/apps/client/src/app/components/user-account-membership/user-account-membership.scss
@@ -4,6 +4,6 @@
height: 100%;
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.scss b/apps/client/src/app/components/user-account-settings/user-account-settings.scss
index 22555407a..53ea0acb7 100644
--- a/apps/client/src/app/components/user-account-settings/user-account-settings.scss
+++ b/apps/client/src/app/components/user-account-settings/user-account-settings.scss
@@ -17,6 +17,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/components/world-map-chart/world-map-chart.component.scss b/apps/client/src/app/components/world-map-chart/world-map-chart.component.scss
index b317294ef..9fd9418bb 100644
--- a/apps/client/src/app/components/world-map-chart/world-map-chart.component.scss
+++ b/apps/client/src/app/components/world-map-chart/world-map-chart.component.scss
@@ -21,7 +21,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
::ng-deep {
.svgMap-map-wrapper {
.svgMap-country {
diff --git a/apps/client/src/app/pages/about/about-page.scss b/apps/client/src/app/pages/about/about-page.scss
index e87d9a05b..b536ec216 100644
--- a/apps/client/src/app/pages/about/about-page.scss
+++ b/apps/client/src/app/pages/about/about-page.scss
@@ -2,6 +2,6 @@
color: rgb(var(--dark-primary-text));
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/about/changelog/changelog-page.scss b/apps/client/src/app/pages/about/changelog/changelog-page.scss
index aff47b345..6f9de3bcc 100644
--- a/apps/client/src/app/pages/about/changelog/changelog-page.scss
+++ b/apps/client/src/app/pages/about/changelog/changelog-page.scss
@@ -35,6 +35,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/about/license/license-page.scss b/apps/client/src/app/pages/about/license/license-page.scss
index 39eb6792e..c19bfd343 100644
--- a/apps/client/src/app/pages/about/license/license-page.scss
+++ b/apps/client/src/app/pages/about/license/license-page.scss
@@ -3,6 +3,6 @@
display: block;
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.scss b/apps/client/src/app/pages/about/overview/about-overview-page.scss
index df6759442..8b9853f3e 100644
--- a/apps/client/src/app/pages/about/overview/about-overview-page.scss
+++ b/apps/client/src/app/pages/about/overview/about-overview-page.scss
@@ -24,7 +24,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
.about-container {
diff --git a/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.scss b/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.scss
index e3c73e9f2..b90d23078 100644
--- a/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.scss
+++ b/apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.scss
@@ -16,6 +16,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/admin/admin-page.scss b/apps/client/src/app/pages/admin/admin-page.scss
index e87d9a05b..b536ec216 100644
--- a/apps/client/src/app/pages/admin/admin-page.scss
+++ b/apps/client/src/app/pages/admin/admin-page.scss
@@ -2,6 +2,6 @@
color: rgb(var(--dark-primary-text));
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/blog/blog-page.scss b/apps/client/src/app/pages/blog/blog-page.scss
index 9235ed3c2..e576551f2 100644
--- a/apps/client/src/app/pages/blog/blog-page.scss
+++ b/apps/client/src/app/pages/blog/blog-page.scss
@@ -9,6 +9,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/faq/faq-page.scss b/apps/client/src/app/pages/faq/faq-page.scss
index e87d9a05b..b536ec216 100644
--- a/apps/client/src/app/pages/faq/faq-page.scss
+++ b/apps/client/src/app/pages/faq/faq-page.scss
@@ -2,6 +2,6 @@
color: rgb(var(--dark-primary-text));
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/features/features-page.scss b/apps/client/src/app/pages/features/features-page.scss
index 4a8680714..c3109fdf7 100644
--- a/apps/client/src/app/pages/features/features-page.scss
+++ b/apps/client/src/app/pages/features/features-page.scss
@@ -12,6 +12,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/home/home-page.scss b/apps/client/src/app/pages/home/home-page.scss
index e87d9a05b..b536ec216 100644
--- a/apps/client/src/app/pages/home/home-page.scss
+++ b/apps/client/src/app/pages/home/home-page.scss
@@ -2,6 +2,6 @@
color: rgb(var(--dark-primary-text));
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/landing/landing-page.scss b/apps/client/src/app/pages/landing/landing-page.scss
index 5a3e129ca..4c0c14efd 100644
--- a/apps/client/src/app/pages/landing/landing-page.scss
+++ b/apps/client/src/app/pages/landing/landing-page.scss
@@ -120,7 +120,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.button-container {
.mat-mdc-outlined-button {
background-color: var(--dark-background);
diff --git a/apps/client/src/app/pages/open/open-page.scss b/apps/client/src/app/pages/open/open-page.scss
index e58d9f237..65c9b4e3c 100644
--- a/apps/client/src/app/pages/open/open-page.scss
+++ b/apps/client/src/app/pages/open/open-page.scss
@@ -14,6 +14,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss
index 6b1415dcb..5af305f9c 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss
@@ -18,7 +18,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.mat-mdc-dialog-content {
.mat-datepicker-input {
&.mat-mdc-input-element:disabled {
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss
index 2dbbdaefc..54aa8c893 100644
--- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss
+++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss
@@ -53,7 +53,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.drop-area {
border-color: rgba(
var(--palette-foreground-divider-dark),
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.scss b/apps/client/src/app/pages/portfolio/allocations/allocations-page.scss
index c73ac7fc3..28071385c 100644
--- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.scss
+++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.scss
@@ -43,7 +43,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.mat-mdc-progress-bar {
::ng-deep {
.mdc-linear-progress__buffer-bar {
diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.scss b/apps/client/src/app/pages/portfolio/portfolio-page.scss
index e87d9a05b..b536ec216 100644
--- a/apps/client/src/app/pages/portfolio/portfolio-page.scss
+++ b/apps/client/src/app/pages/portfolio/portfolio-page.scss
@@ -2,6 +2,6 @@
color: rgb(var(--dark-primary-text));
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/pricing/pricing-page.scss b/apps/client/src/app/pages/pricing/pricing-page.scss
index 86f4b526f..ad8e97b19 100644
--- a/apps/client/src/app/pages/pricing/pricing-page.scss
+++ b/apps/client/src/app/pages/pricing/pricing-page.scss
@@ -26,6 +26,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/public/public-page.scss b/apps/client/src/app/pages/public/public-page.scss
index 9a6909a98..dbea95e24 100644
--- a/apps/client/src/app/pages/public/public-page.scss
+++ b/apps/client/src/app/pages/public/public-page.scss
@@ -17,6 +17,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/register/register-page.scss b/apps/client/src/app/pages/register/register-page.scss
index 2334b58d4..322a2064f 100644
--- a/apps/client/src/app/pages/register/register-page.scss
+++ b/apps/client/src/app/pages/register/register-page.scss
@@ -24,7 +24,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.button-container {
.mat-mdc-outlined-button {
background-color: var(--dark-background);
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.scss b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.scss
index 00667fe84..90a5a41dc 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.scss
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.scss
@@ -20,6 +20,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.scss b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.scss
index 9726e095f..670cde9a6 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.scss
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.scss
@@ -16,7 +16,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
.call-to-action {
diff --git a/apps/client/src/app/pages/resources/resources-page.scss b/apps/client/src/app/pages/resources/resources-page.scss
index 4a8680714..c3109fdf7 100644
--- a/apps/client/src/app/pages/resources/resources-page.scss
+++ b/apps/client/src/app/pages/resources/resources-page.scss
@@ -12,6 +12,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/user-account/user-account-page.scss b/apps/client/src/app/pages/user-account/user-account-page.scss
index e87d9a05b..b536ec216 100644
--- a/apps/client/src/app/pages/user-account/user-account-page.scss
+++ b/apps/client/src/app/pages/user-account/user-account-page.scss
@@ -2,6 +2,6 @@
color: rgb(var(--dark-primary-text));
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/app/pages/zen/zen-page.scss b/apps/client/src/app/pages/zen/zen-page.scss
index e87d9a05b..b536ec216 100644
--- a/apps/client/src/app/pages/zen/zen-page.scss
+++ b/apps/client/src/app/pages/zen/zen-page.scss
@@ -2,6 +2,6 @@
color: rgb(var(--dark-primary-text));
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
color: rgb(var(--light-primary-text));
}
diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss
index b9b7ce828..2b8644521 100644
--- a/apps/client/src/styles.scss
+++ b/apps/client/src/styles.scss
@@ -214,7 +214,7 @@ body {
}
}
- &.is-dark-theme {
+ &.theme-dark {
background: var(--dark-background);
color: rgba(var(--light-primary-text));
diff --git a/apps/client/src/styles/theme.scss b/apps/client/src/styles/theme.scss
index 40a872c72..f437ec676 100644
--- a/apps/client/src/styles/theme.scss
+++ b/apps/client/src/styles/theme.scss
@@ -3,7 +3,7 @@
$dark-primary-text: rgba(black, 0.87);
$light-primary-text: white;
-$mat-css-dark-theme-selector: '.is-dark-theme';
+$mat-css-dark-theme-selector: '.theme-dark';
$gf-primary: (
50: var(--gf-theme-primary-50),
@@ -99,7 +99,7 @@ $gf-theme-dark: mat.m2-define-dark-theme(
)
);
-.is-dark-theme {
+.theme-dark {
@include mat.all-component-colors($gf-theme-dark);
}
diff --git a/libs/ui/src/lib/activities-filter/activities-filter.component.scss b/libs/ui/src/lib/activities-filter/activities-filter.component.scss
index 07964fdfa..f8b7f88dc 100644
--- a/libs/ui/src/lib/activities-filter/activities-filter.component.scss
+++ b/libs/ui/src/lib/activities-filter/activities-filter.component.scss
@@ -15,7 +15,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.mat-mdc-form-field {
color: rgba(var(--light-primary-text));
}
diff --git a/libs/ui/src/lib/activity-type/activity-type.component.scss b/libs/ui/src/lib/activity-type/activity-type.component.scss
index c6aebbbe2..49889b665 100644
--- a/libs/ui/src/lib/activity-type/activity-type.component.scss
+++ b/libs/ui/src/lib/activity-type/activity-type.component.scss
@@ -40,7 +40,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.activity-type-badge {
background-color: rgba(var(--palette-foreground-text-dark), 0.1) !important;
}
diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.scss b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.scss
index c1679e56b..9f677c1a4 100644
--- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.scss
+++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.scss
@@ -10,7 +10,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
&.has-focus {
a {
color: rgba(var(--dark-primary-text));
diff --git a/libs/ui/src/lib/assistant/assistant.scss b/libs/ui/src/lib/assistant/assistant.scss
index 6ed02f658..2de06824a 100644
--- a/libs/ui/src/lib/assistant/assistant.scss
+++ b/libs/ui/src/lib/assistant/assistant.scss
@@ -26,7 +26,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
.date-range-selector-container {
border-color: rgba(var(--light-dividers));
}
diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.scss b/libs/ui/src/lib/fire-calculator/fire-calculator.component.scss
index d5465964b..5662415da 100644
--- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.scss
+++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.scss
@@ -25,7 +25,7 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
::ng-deep {
.mdc-text-field--disabled {
.mdc-notched-outline__leading,
diff --git a/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.scss b/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.scss
index 4f5588302..14d72b7da 100644
--- a/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.scss
+++ b/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.scss
@@ -11,6 +11,6 @@
}
}
-:host-context(.is-dark-theme) {
+:host-context(.theme-dark) {
border-color: rgba(var(--light-dividers));
}
From 2893d71377073ad6c53acd0230e5b0f9a2cad9d4 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 11 Aug 2024 18:33:33 +0200
Subject: [PATCH 22/23] Feature/set up notification service (#3663)
* Set up notification service
* Update changelog
---
CHANGELOG.md | 4 +
apps/client/src/app/app.component.ts | 1 +
apps/client/src/app/app.module.ts | 2 +
.../accounts-table.component.ts | 21 +++--
.../portfolio-performance.component.ts | 10 ++-
apps/client/src/app/core/layout.service.ts | 25 +++++-
.../alert-dialog/alert-dialog.component.ts | 27 ++++++
.../alert-dialog/alert-dialog.html | 11 +++
.../alert-dialog/alert-dialog.scss | 2 +
.../alert-dialog/interfaces/interfaces.ts | 6 ++
.../confirmation-dialog.component.ts | 41 +++++++++
.../confirmation-dialog.html | 20 +++++
.../confirmation-dialog.scss | 2 +
.../confirmation-dialog.type.ts | 5 ++
.../interfaces/interfaces.ts | 9 ++
.../notification/interfaces/interfaces.ts | 19 +++++
.../core/notification/notification.module.ts | 18 ++++
.../core/notification/notification.service.ts | 83 +++++++++++++++++++
apps/client/src/styles.scss | 4 -
libs/ui/src/lib/i18n.ts | 3 +
20 files changed, 297 insertions(+), 16 deletions(-)
create mode 100644 apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts
create mode 100644 apps/client/src/app/core/notification/alert-dialog/alert-dialog.html
create mode 100644 apps/client/src/app/core/notification/alert-dialog/alert-dialog.scss
create mode 100644 apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts
create mode 100644 apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts
create mode 100644 apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.html
create mode 100644 apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.scss
create mode 100644 apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.type.ts
create mode 100644 apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts
create mode 100644 apps/client/src/app/core/notification/interfaces/interfaces.ts
create mode 100644 apps/client/src/app/core/notification/notification.module.ts
create mode 100644 apps/client/src/app/core/notification/notification.service.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3a7879844..e600373b0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Set up a notification service for alert and confirmation dialogs
+
### Changed
- Refactored the dark theme CSS selector
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index d432d9619..ad6e6e808 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -270,6 +270,7 @@ export class AppComponent implements OnDestroy, OnInit {
locale: this.user?.settings?.locale
},
height: this.deviceType === 'mobile' ? '97.5vh' : '80vh',
+ maxWidth: this.deviceType === 'mobile' ? '95vw' : '50rem',
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
});
diff --git a/apps/client/src/app/app.module.ts b/apps/client/src/app/app.module.ts
index 9a311ac69..04602dd2e 100644
--- a/apps/client/src/app/app.module.ts
+++ b/apps/client/src/app/app.module.ts
@@ -33,6 +33,7 @@ import { GfSubscriptionInterstitialDialogModule } from './components/subscriptio
import { authInterceptorProviders } from './core/auth.interceptor';
import { httpResponseInterceptorProviders } from './core/http-response.interceptor';
import { LanguageService } from './core/language.service';
+import { GfNotificationModule } from './core/notification/notification.module';
export function NgxStripeFactory(): string {
return environment.stripePublicKey;
@@ -47,6 +48,7 @@ export function NgxStripeFactory(): string {
BrowserModule,
GfHeaderModule,
GfLogoComponent,
+ GfNotificationModule,
GfSubscriptionInterstitialDialogModule,
MarkdownModule.forRoot(),
MatAutocompleteModule,
diff --git a/apps/client/src/app/components/accounts-table/accounts-table.component.ts b/apps/client/src/app/components/accounts-table/accounts-table.component.ts
index 702803aa0..d19cd748f 100644
--- a/apps/client/src/app/components/accounts-table/accounts-table.component.ts
+++ b/apps/client/src/app/components/accounts-table/accounts-table.component.ts
@@ -1,3 +1,5 @@
+import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
+import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { getLocale } from '@ghostfolio/common/helper';
import {
@@ -54,7 +56,10 @@ export class AccountsTableComponent implements OnChanges, OnDestroy, OnInit {
private unsubscribeSubject = new Subject();
- public constructor(private router: Router) {}
+ public constructor(
+ private notificationService: NotificationService,
+ private router: Router
+ ) {}
public ngOnInit() {}
@@ -97,13 +102,13 @@ export class AccountsTableComponent implements OnChanges, OnDestroy, OnInit {
}
public onDeleteAccount(aId: string) {
- const confirmation = confirm(
- $localize`Do you really want to delete this account?`
- );
-
- if (confirmation) {
- this.accountDeleted.emit(aId);
- }
+ this.notificationService.confirm({
+ confirmFn: () => {
+ this.accountDeleted.emit(aId);
+ },
+ confirmType: ConfirmationDialogType.Warn,
+ title: $localize`Do you really want to delete this account?`
+ });
}
public onOpenAccountDetailDialog(accountId: string) {
diff --git a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts
index 3083184bb..7ca4677b0 100644
--- a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts
+++ b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts
@@ -1,3 +1,4 @@
+import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import {
getLocale,
getNumberFormatDecimal,
@@ -39,7 +40,7 @@ export class PortfolioPerformanceComponent implements OnChanges {
@ViewChild('value') value: ElementRef;
- public constructor() {}
+ public constructor(private notificationService: NotificationService) {}
public ngOnChanges() {
this.precision = this.precision >= 0 ? this.precision : 2;
@@ -74,12 +75,15 @@ export class PortfolioPerformanceComponent implements OnChanges {
}
public onShowErrors() {
- const errorMessageParts = [$localize`Market data is delayed for`];
+ const errorMessageParts = [];
for (const error of this.errors) {
errorMessageParts.push(`${error.symbol} (${error.dataSource})`);
}
- alert(errorMessageParts.join('\n'));
+ this.notificationService.alert({
+ message: errorMessageParts.join('
'),
+ title: $localize`Market data is delayed for`
+ });
}
}
diff --git a/apps/client/src/app/core/layout.service.ts b/apps/client/src/app/core/layout.service.ts
index 3ba7af91e..a6fb65006 100644
--- a/apps/client/src/app/core/layout.service.ts
+++ b/apps/client/src/app/core/layout.service.ts
@@ -1,16 +1,39 @@
import { Injectable } from '@angular/core';
+import { DeviceDetectorService } from 'ngx-device-detector';
import { Observable, Subject } from 'rxjs';
+import { NotificationService } from './notification/notification.service';
+
@Injectable({
providedIn: 'root'
})
export class LayoutService {
+ public static readonly DEFAULT_NOTIFICATION_MAX_WIDTH = '50rem';
+ public static readonly DEFAULT_NOTIFICATION_WIDTH = '75vw';
+
public shouldReloadContent$: Observable;
private shouldReloadSubject = new Subject();
- public constructor() {
+ public constructor(
+ private deviceService: DeviceDetectorService,
+ private notificationService: NotificationService
+ ) {
this.shouldReloadContent$ = this.shouldReloadSubject.asObservable();
+
+ const deviceType = this.deviceService.getDeviceInfo().deviceType;
+
+ this.notificationService.setDialogWidth(
+ deviceType === 'mobile'
+ ? '95vw'
+ : LayoutService.DEFAULT_NOTIFICATION_WIDTH
+ );
+
+ this.notificationService.setDialogMaxWidth(
+ deviceType === 'mobile'
+ ? '95vw'
+ : LayoutService.DEFAULT_NOTIFICATION_MAX_WIDTH
+ );
}
public getShouldReloadSubject() {
diff --git a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts
new file mode 100644
index 000000000..65439ec42
--- /dev/null
+++ b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts
@@ -0,0 +1,27 @@
+import { CommonModule } from '@angular/common';
+import { Component } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { MatDialogModule, MatDialogRef } from '@angular/material/dialog';
+
+import { IAlertDialogParams } from './interfaces/interfaces';
+
+@Component({
+ imports: [CommonModule, MatButtonModule, MatDialogModule],
+ selector: 'gf-alert-dialog',
+ standalone: true,
+ styleUrls: ['./alert-dialog.scss'],
+ templateUrl: './alert-dialog.html'
+})
+export class GfAlertDialogComponent {
+ public discardLabel: string;
+ public message: string;
+ public title: string;
+
+ public constructor(public dialogRef: MatDialogRef) {}
+
+ public initialize(aParams: IAlertDialogParams) {
+ this.discardLabel = aParams.discardLabel;
+ this.message = aParams.message;
+ this.title = aParams.title;
+ }
+}
diff --git a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.html b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.html
new file mode 100644
index 000000000..6602078d3
--- /dev/null
+++ b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.html
@@ -0,0 +1,11 @@
+@if (title) {
+
+}
+
+@if (message) {
+
+}
+
+
+
+
diff --git a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.scss b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.scss
new file mode 100644
index 000000000..dc9093b45
--- /dev/null
+++ b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.scss
@@ -0,0 +1,2 @@
+:host {
+}
diff --git a/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts b/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts
new file mode 100644
index 000000000..7cff077a7
--- /dev/null
+++ b/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts
@@ -0,0 +1,6 @@
+export interface IAlertDialogParams {
+ confirmLabel?: string;
+ discardLabel?: string;
+ message?: string;
+ title: string;
+}
diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts
new file mode 100644
index 000000000..3545d39b7
--- /dev/null
+++ b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts
@@ -0,0 +1,41 @@
+import { CommonModule } from '@angular/common';
+import { Component, HostListener } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { MatDialogModule, MatDialogRef } from '@angular/material/dialog';
+
+import { ConfirmationDialogType } from './confirmation-dialog.type';
+import { IConfirmDialogParams } from './interfaces/interfaces';
+
+@Component({
+ imports: [CommonModule, MatButtonModule, MatDialogModule],
+ selector: 'gf-confirmation-dialog',
+ standalone: true,
+ styleUrls: ['./confirmation-dialog.scss'],
+ templateUrl: './confirmation-dialog.html'
+})
+export class GfConfirmationDialogComponent {
+ public confirmLabel: string;
+ public confirmType: ConfirmationDialogType;
+ public discardLabel: string;
+ public message: string;
+ public title: string;
+
+ public constructor(
+ public dialogRef: MatDialogRef
+ ) {}
+
+ @HostListener('window:keyup', ['$event'])
+ public keyEvent(event: KeyboardEvent) {
+ if (event.key === 'Enter') {
+ this.dialogRef.close('confirm');
+ }
+ }
+
+ public initialize(aParams: IConfirmDialogParams) {
+ this.confirmLabel = aParams.confirmLabel;
+ this.confirmType = aParams.confirmType;
+ this.discardLabel = aParams.discardLabel;
+ this.message = aParams.message;
+ this.title = aParams.title;
+ }
+}
diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.html b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.html
new file mode 100644
index 000000000..e9e2b693c
--- /dev/null
+++ b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.html
@@ -0,0 +1,20 @@
+@if (title) {
+
+}
+
+@if (message) {
+
+}
+
+
+
+
+
diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.scss b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.scss
new file mode 100644
index 000000000..dc9093b45
--- /dev/null
+++ b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.scss
@@ -0,0 +1,2 @@
+:host {
+}
diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.type.ts b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.type.ts
new file mode 100644
index 000000000..1fe1fc7c9
--- /dev/null
+++ b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.type.ts
@@ -0,0 +1,5 @@
+export enum ConfirmationDialogType {
+ Accent = 'accent',
+ Primary = 'primary',
+ Warn = 'warn'
+}
diff --git a/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts b/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts
new file mode 100644
index 000000000..834988ceb
--- /dev/null
+++ b/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts
@@ -0,0 +1,9 @@
+import { ConfirmationDialogType } from '../confirmation-dialog.type';
+
+export interface IConfirmDialogParams {
+ confirmLabel?: string;
+ confirmType: ConfirmationDialogType;
+ discardLabel?: string;
+ message?: string;
+ title: string;
+}
diff --git a/apps/client/src/app/core/notification/interfaces/interfaces.ts b/apps/client/src/app/core/notification/interfaces/interfaces.ts
new file mode 100644
index 000000000..f5a526c92
--- /dev/null
+++ b/apps/client/src/app/core/notification/interfaces/interfaces.ts
@@ -0,0 +1,19 @@
+import { ConfirmationDialogType } from '../confirmation-dialog/confirmation-dialog.type';
+
+export interface IAlertParams {
+ discardFn?: () => void;
+ discardLabel?: string;
+ message?: string;
+ title: string;
+}
+
+export interface IConfirmParams {
+ confirmFn: () => void;
+ confirmLabel?: string;
+ confirmType?: ConfirmationDialogType;
+ disableClose?: boolean;
+ discardFn?: () => void;
+ discardLabel?: string;
+ message?: string;
+ title: string;
+}
diff --git a/apps/client/src/app/core/notification/notification.module.ts b/apps/client/src/app/core/notification/notification.module.ts
new file mode 100644
index 000000000..542cae928
--- /dev/null
+++ b/apps/client/src/app/core/notification/notification.module.ts
@@ -0,0 +1,18 @@
+import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { MatDialogModule } from '@angular/material/dialog';
+
+import { GfAlertDialogComponent } from './alert-dialog/alert-dialog.component';
+import { GfConfirmationDialogComponent } from './confirmation-dialog/confirmation-dialog.component';
+import { NotificationService } from './notification.service';
+
+@NgModule({
+ imports: [
+ CommonModule,
+ GfAlertDialogComponent,
+ GfConfirmationDialogComponent,
+ MatDialogModule
+ ],
+ providers: [NotificationService]
+})
+export class GfNotificationModule {}
diff --git a/apps/client/src/app/core/notification/notification.service.ts b/apps/client/src/app/core/notification/notification.service.ts
new file mode 100644
index 000000000..2e7d9de6c
--- /dev/null
+++ b/apps/client/src/app/core/notification/notification.service.ts
@@ -0,0 +1,83 @@
+import { translate } from '@ghostfolio/ui/i18n';
+
+import { Injectable } from '@angular/core';
+import { MatDialog } from '@angular/material/dialog';
+import { isFunction } from 'lodash';
+
+import { GfAlertDialogComponent } from './alert-dialog/alert-dialog.component';
+import { GfConfirmationDialogComponent } from './confirmation-dialog/confirmation-dialog.component';
+import { ConfirmationDialogType } from './confirmation-dialog/confirmation-dialog.type';
+import { IAlertParams, IConfirmParams } from './interfaces/interfaces';
+
+@Injectable()
+export class NotificationService {
+ private dialogMaxWidth: string;
+ private dialogWidth: string;
+
+ public constructor(private matDialog: MatDialog) {}
+
+ public alert(aParams: IAlertParams) {
+ if (!aParams.discardLabel) {
+ aParams.discardLabel = translate('CLOSE');
+ }
+
+ const dialog = this.matDialog.open(GfAlertDialogComponent, {
+ autoFocus: false,
+ maxWidth: this.dialogMaxWidth,
+ width: this.dialogWidth
+ });
+
+ dialog.componentInstance.initialize({
+ discardLabel: aParams.discardLabel,
+ message: aParams.message,
+ title: aParams.title
+ });
+
+ return dialog.afterClosed().subscribe((result) => {
+ if (isFunction(aParams.discardFn)) {
+ aParams.discardFn();
+ }
+ });
+ }
+
+ public confirm(aParams: IConfirmParams) {
+ if (!aParams.confirmLabel) {
+ aParams.confirmLabel = translate('YES');
+ }
+
+ if (!aParams.discardLabel) {
+ aParams.discardLabel = translate('CANCEL');
+ }
+
+ const dialog = this.matDialog.open(GfConfirmationDialogComponent, {
+ autoFocus: false,
+ disableClose: aParams.disableClose || false,
+ maxWidth: this.dialogMaxWidth,
+ width: this.dialogWidth
+ });
+
+ dialog.componentInstance.initialize({
+ confirmLabel: aParams.confirmLabel,
+ confirmType: aParams.confirmType || ConfirmationDialogType.Primary,
+ discardLabel: aParams.discardLabel,
+ message: aParams.message,
+ title: aParams.title
+ });
+
+ return dialog.afterClosed().subscribe((result) => {
+ if (result === 'confirm' && isFunction(aParams.confirmFn)) {
+ aParams.confirmFn();
+ } else if (result === 'discard' && isFunction(aParams.discardFn)) {
+ aParams.discardFn();
+ }
+ });
+ }
+
+ public setDialogMaxWidth(aDialogMaxWidth: string) {
+ this.dialogMaxWidth = aDialogMaxWidth;
+ }
+
+ public setDialogWidth(aDialogWidth: string) {
+ this.dialogWidth = aDialogWidth;
+ }
+}
diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss
index 2b8644521..1f068da1b 100644
--- a/apps/client/src/styles.scss
+++ b/apps/client/src/styles.scss
@@ -359,10 +359,6 @@ ngx-skeleton-loader {
.cdk-global-overlay-wrapper {
justify-content: center !important;
}
-
- .cdk-overlay-pane {
- max-width: 95vw !important;
- }
}
.cursor-default {
diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts
index 2c1fd9273..a98cbd704 100644
--- a/libs/ui/src/lib/i18n.ts
+++ b/libs/ui/src/lib/i18n.ts
@@ -6,7 +6,9 @@ const locales = {
ASSET_CLASS: $localize`Asset Class`,
ASSET_SUB_CLASS: $localize`Asset Sub Class`,
BUY_AND_SELL_ACTIVITIES_TOOLTIP: $localize`Buy and sell`,
+ CANCEL: $localize`Cancel`,
CORE: $localize`Core`,
+ CLOSE: $localize`Close`,
DATA_IMPORT_AND_EXPORT_TOOLTIP_BASIC: $localize`Switch to Ghostfolio Premium or Ghostfolio Open Source easily`,
DATA_IMPORT_AND_EXPORT_TOOLTIP_OSS: $localize`Switch to Ghostfolio Premium easily`,
DATA_IMPORT_AND_EXPORT_TOOLTIP_PREMIUM: $localize`Switch to Ghostfolio Open Source or Ghostfolio Basic easily`,
@@ -26,6 +28,7 @@ const locales = {
TAG: $localize`Tag`,
YEAR: $localize`Year`,
YEARS: $localize`Years`,
+ YES: $localize`Yes`,
// Activity types
BUY: $localize`Buy`,
From 18df8cebeba5b50ac56ee054f2dadbe1d4616a56 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 13 Aug 2024 15:31:17 +0200
Subject: [PATCH 23/23] Feature/upgrade zone.js to version 0.14.10 (#3669)
* Upgrade zone.js to version 0.14.10
* Update changelog
---
CHANGELOG.md | 1 +
package-lock.json | 13 +++++++------
package.json | 2 +-
3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e600373b0..c60c62904 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Refactored the dark theme CSS selector
- Improved the language localization for German (`de`)
+- Upgraded `zone.js` from version `0.14.7` to `0.14.10`
### Fixed
diff --git a/package-lock.json b/package-lock.json
index 49eadc623..38589d68e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "2.101.0",
+ "version": "2.103.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "2.101.0",
+ "version": "2.103.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
@@ -92,7 +92,7 @@
"twitter-api-v2": "1.14.2",
"uuid": "9.0.1",
"yahoo-finance2": "2.11.3",
- "zone.js": "0.14.7"
+ "zone.js": "0.14.10"
},
"devDependencies": {
"@angular-devkit/build-angular": "18.1.1",
@@ -34390,9 +34390,10 @@
}
},
"node_modules/zone.js": {
- "version": "0.14.7",
- "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.7.tgz",
- "integrity": "sha512-0w6DGkX2BPuiK/NLf+4A8FLE43QwBfuqz2dVgi/40Rj1WmqUskCqj329O/pwrqFJLG5X8wkeG2RhIAro441xtg=="
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
+ "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
+ "license": "MIT"
}
}
}
diff --git a/package.json b/package.json
index 0e38d32a3..af6bd2a6b 100644
--- a/package.json
+++ b/package.json
@@ -136,7 +136,7 @@
"twitter-api-v2": "1.14.2",
"uuid": "9.0.1",
"yahoo-finance2": "2.11.3",
- "zone.js": "0.14.7"
+ "zone.js": "0.14.10"
},
"devDependencies": {
"@angular-devkit/build-angular": "18.1.1",