diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f48f34f9..2ac4272fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the platform icon to the account selectors in the cash balance transfer from one to another account - Added the platform icon to the account selector of the create or edit activity dialog +### Changed + +- Harmonized the name column in the historical market data table of the admin control panel + ## 2.21.0 - 2023-11-09 ### Changed diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 2c8ad34b9..015a6f67b 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -66,6 +66,10 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-altoo ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-basil-finance + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-beanvest ${currentDate}T00:00:00+00:00 @@ -126,6 +130,10 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-kubera ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-magnifi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-markets.sh ${currentDate}T00:00:00+00:00 @@ -368,6 +376,10 @@ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-altoo ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-basil-finance + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-beanvest ${currentDate}T00:00:00+00:00 @@ -428,6 +440,10 @@ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-kubera ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-magnifi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-markets.sh ${currentDate}T00:00:00+00:00 @@ -694,6 +710,10 @@ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-altoo ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-basil-finance + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-beanvest ${currentDate}T00:00:00+00:00 @@ -754,6 +774,10 @@ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-kubera ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-magnifi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-markets.sh ${currentDate}T00:00:00+00:00 @@ -866,6 +890,10 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-altoo ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-basil-finance + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-beanvest ${currentDate}T00:00:00+00:00 @@ -926,6 +954,10 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-kubera ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-magnifi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-markets.sh ${currentDate}T00:00:00+00:00 diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index bcf7679d0..25076ca0a 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -20,6 +20,7 @@ import { Filter, UniqueAsset, User } from '@ghostfolio/common/interfaces'; import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface'; import { translate } from '@ghostfolio/ui/i18n'; import { AssetSubClass, DataSource, Prisma } from '@prisma/client'; +import { isUUID } from 'class-validator'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators'; @@ -83,7 +84,7 @@ export class AdminMarketDataComponent public defaultDateFormat: string; public deviceType: string; public displayedColumns = [ - 'symbol', + 'nameWithSymbol', 'dataSource', 'assetClass', 'assetSubClass', @@ -97,6 +98,7 @@ export class AdminMarketDataComponent ]; public filters$ = new Subject(); public isLoading = false; + public isUUID = isUUID; public placeholder = ''; public pageSize = DEFAULT_PAGE_SIZE; public totalItems = 0; diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.html b/apps/client/src/app/components/admin-market-data/admin-market-data.html index e7e8733e0..4fabde56d 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.html +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -28,6 +28,24 @@ + + + Name + + + {{ element.name }} + + {{ element.symbol | gfSymbol }} + + + + + Data Source diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.module.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.module.ts index 060e8a6b0..bcac613a6 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.module.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.module.ts @@ -6,6 +6,7 @@ import { MatPaginatorModule } from '@angular/material/paginator'; import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; import { RouterModule } from '@angular/router'; +import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module'; import { GfActivitiesFilterModule } from '@ghostfolio/ui/activities-filter/activities-filter.module'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @@ -20,6 +21,7 @@ import { GfCreateAssetProfileDialogModule } from './create-asset-profile-dialog/ GfActivitiesFilterModule, GfAssetProfileDialogModule, GfCreateAssetProfileDialogModule, + GfSymbolModule, MatButtonModule, MatMenuModule, MatPaginatorModule, diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products.ts index 8e4559fa5..0cd32adc3 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/products.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/products.ts @@ -2,6 +2,7 @@ import { Product } from '@ghostfolio/common/interfaces'; import { AllvueSystemsPageComponent } from './products/allvue-systems-page.component'; import { AltooPageComponent } from './products/altoo-page.component'; +import { BasilFinancePageComponent } from './products/basil-finance-page.component'; import { BeanvestPageComponent } from './products/beanvest-page.component'; import { CapitallyPageComponent } from './products/capitally-page.component'; import { CapMonPageComponent } from './products/capmon-page.component'; @@ -18,6 +19,7 @@ import { GoSpatzPageComponent } from './products/gospatz-page.component'; import { IntuitMintPageComponent } from './products/intuit-mint-page.component'; import { JustEtfPageComponent } from './products/justetf-page.component'; import { KuberaPageComponent } from './products/kubera-page.component'; +import { MagnifiPageComponent } from './products/magnifi-page.component'; import { MarketsShPageComponent } from './products/markets.sh-page.component'; import { MaybeFinancePageComponent } from './products/maybe-finance-page.component'; import { MonarchMoneyPageComponent } from './products/monarch-money-page.component'; @@ -84,6 +86,15 @@ export const products: Product[] = [ origin: $localize`Switzerland`, slogan: 'Simplicity for Complex Wealth' }, + { + component: BasilFinancePageComponent, + founded: 2022, + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'basil-finance', + name: 'Basil Finance', + slogan: 'The ultimate solution for tracking and managing your investments' + }, { component: BeanvestPageComponent, founded: 2020, @@ -252,6 +263,17 @@ export const products: Product[] = [ pricingPerYear: '$150', slogan: 'The Time Machine for your Net Worth' }, + { + component: MagnifiPageComponent, + founded: 2018, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'magnifi', + name: 'Magnifi', + origin: $localize`United States`, + pricingPerYear: '$132', + slogan: 'AI Investing Assistant' + }, { component: MarketsShPageComponent, founded: 2022, diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/basil-finance-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/basil-finance-page.component.ts new file mode 100644 index 000000000..c6ec41c55 --- /dev/null +++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/basil-finance-page.component.ts @@ -0,0 +1,31 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { RouterModule } from '@angular/router'; + +import { products } from '../products'; + +@Component({ + host: { class: 'page' }, + imports: [CommonModule, MatButtonModule, RouterModule], + selector: 'gf-basil-finance-page', + standalone: true, + styleUrls: ['../product-page-template.scss'], + templateUrl: '../product-page-template.html' +}) +export class BasilFinancePageComponent { + public product1 = products.find(({ key }) => { + return key === 'ghostfolio'; + }); + + public product2 = products.find(({ key }) => { + return key === 'basil-finance'; + }); + + public routerLinkAbout = ['/' + $localize`about`]; + public routerLinkFeatures = ['/' + $localize`features`]; + public routerLinkResourcesPersonalFinanceTools = [ + '/' + $localize`resources`, + 'personal-finance-tools' + ]; +} diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/products/magnifi-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/products/magnifi-page.component.ts new file mode 100644 index 000000000..63cde2c14 --- /dev/null +++ b/apps/client/src/app/pages/resources/personal-finance-tools/products/magnifi-page.component.ts @@ -0,0 +1,31 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { RouterModule } from '@angular/router'; + +import { products } from '../products'; + +@Component({ + host: { class: 'page' }, + imports: [CommonModule, MatButtonModule, RouterModule], + selector: 'gf-magnifi-page', + standalone: true, + styleUrls: ['../product-page-template.scss'], + templateUrl: '../product-page-template.html' +}) +export class MagnifiPageComponent { + public product1 = products.find(({ key }) => { + return key === 'ghostfolio'; + }); + + public product2 = products.find(({ key }) => { + return key === 'magnifi'; + }); + + public routerLinkAbout = ['/' + $localize`about`]; + public routerLinkFeatures = ['/' + $localize`features`]; + public routerLinkResourcesPersonalFinanceTools = [ + '/' + $localize`resources`, + 'personal-finance-tools' + ]; +}