From 3adf88044486df623d9dd1bc3ea6e5f4a1285ff7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:24:52 +0200 Subject: [PATCH 1/2] Task/extend personal finance tools (#6985) * Gustav * MyFinanceTools * Networthy * Rallies * trefolio --- libs/common/src/lib/personal-finance-tools.ts | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index e7d964872..23697e63b 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -518,6 +518,18 @@ export const personalFinanceTools: Product[] = [ origin: 'Germany', slogan: 'Volle Kontrolle über deine Investitionen' }, + { + founded: 2024, + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'gustav', + languages: ['Français'], + name: 'Gustav', + origin: 'France', + pricingPerYear: '€59.99', + slogan: 'Prenez enfin le contrôle de votre argent', + url: 'https://get-gustav.com' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -784,6 +796,16 @@ export const personalFinanceTools: Product[] = [ 'Track your equity, fund, investment trust, ETF and pension investments in one place.', url: 'https://www.morningstar.com/mm' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'myfinancetools', + languages: ['Deutsch', 'English', 'Español', 'Français', 'Português'], + name: 'MyFinanceTools', + pricingPerYear: '$36', + slogan: 'Your Personal Finance Command Center', + url: 'https://myfinancetools.io' + }, { founded: 2020, hasFreePlan: true, @@ -806,6 +828,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'The Intelligent Portfolio Tracker', url: 'https://www.navexa.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'networthy', + name: 'Networthy', + pricingPerYear: '€49.99', + slogan: 'Your Personal Financial Analyst, powered by AI.', + url: 'https://networthy.pro' + }, { founded: 2020, hasSelfHostingAbility: false, @@ -955,6 +986,17 @@ export const personalFinanceTools: Product[] = [ slogan: 'The stock portfolio tracker built for long-term investors', url: 'https://prostocktracker.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'rallies', + languages: ['English'], + name: 'Rallies', + pricingPerYear: '$99.99', + slogan: + 'Your entire financial life in one app, monitored continuously by agents', + url: 'https://rallies.ai' + }, { founded: 2015, hasSelfHostingAbility: false, @@ -1130,6 +1172,25 @@ export const personalFinanceTools: Product[] = [ slogan: 'The Trading Journal to Improve Your Trading Performance', url: 'https://www.tradervue.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'trefolio', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Nederlands', + 'Polski', + 'Português' + ], + name: 'trefolio', + pricingPerYear: '€60', + slogan: 'The Extra Leaf for Your Portfolio', + url: 'https://trefolio.com' + }, { founded: 2020, hasSelfHostingAbility: false, From 7b0ebf1587941f35bf279840a2006fbc7b4e1f27 Mon Sep 17 00:00:00 2001 From: Ankit Singh Date: Fri, 5 Jun 2026 20:55:41 +0530 Subject: [PATCH 2/2] Feature/auto-refresh user table in admin control panel every 30s (#6954) * Auto-refresh user table * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 6 +++++ .../admin-users/admin-users.component.ts | 22 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 451390256..472d0678b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added an automatic refresh every 30 seconds to the users table in the admin control panel + ## 3.7.0 - 2026-06-02 ### Added diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 93899c9ee..f477776a5 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -59,8 +59,10 @@ import { personOutline, trashOutline } from 'ionicons/icons'; +import ms from 'ms'; import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; +import { interval } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; @Component({ @@ -184,6 +186,15 @@ export class GfAdminUsersComponent implements OnInit { public ngOnInit() { this.fetchUsers(); + + interval(ms('30 seconds')) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.fetchUsers({ + pageIndex: this.paginator().pageIndex, + showLoading: false + }); + }); } protected formatDistanceToNow(aDateString: string) { @@ -267,8 +278,13 @@ export class GfAdminUsersComponent implements OnInit { ); } - private fetchUsers({ pageIndex }: { pageIndex: number } = { pageIndex: 0 }) { - this.isLoading = true; + private fetchUsers({ + pageIndex = 0, + showLoading = true + }: { pageIndex?: number; showLoading?: boolean } = {}) { + if (showLoading) { + this.isLoading = true; + } if (pageIndex === 0 && this.paginator()) { this.paginator().pageIndex = 0; @@ -281,7 +297,7 @@ export class GfAdminUsersComponent implements OnInit { }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ count, users }) => { - this.dataSource = new MatTableDataSource(users); + this.dataSource.data = users; this.totalItems = count; this.isLoading = false;