Browse Source
Feature/improve usability to delete currency asset profile (#3541 )
* Improve usability
* Update changelog
pull/3550/head
Thomas Kaul
7 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with
37 additions and
14 deletions
CHANGELOG.md
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
apps/client/src/app/components/admin-market-data/admin-market-data.html
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the allocations by ETF holding on the allocations page for the impersonation mode (experimental)
- Improved the detection of REST APIs (`JSON`) used via the scraper configuration
- Improved the usability to delete an asset profile of type currency in the historical market data table and the asset profile details dialog of the admin control
- Refreshed the cryptocurrencies list
- Refactored the thresholds of the rules in the _X-ray_ section
- Removed the obsolete `version` from the `docker-compose` files
@ -124,7 +124,7 @@ export class AdminMarketDataComponent
private unsubscribeSubject = new Subject < void > ( ) ;
public constructor (
private adminMarketDataService : AdminMarketDataService ,
public adminMarketDataService : AdminMarketDataService ,
private adminService : AdminService ,
private changeDetectorRef : ChangeDetectorRef ,
private dataService : DataService ,
@ -24,11 +24,11 @@
< th * matHeaderCellDef class = "px-1" mat-header-cell > < / th >
< td * matCellDef = "let element" class = "px-1" mat-cell >
@if (
!(
element.activitiesCount !== 0 ||
element.isBenchmark ||
element.symbol.startsWith(ghostfolioScraperApiSymbolPrefix)
)
adminMarketDataService.hasPermissionToDeleteAssetProfile({
activitiesCount: element.activitiesCount,
isBenchmark: element.isBenchmark,
symbol: element.symbol
} )
) {
< mat-checkbox
color="primary"
@ -209,9 +209,11 @@
< button
mat-menu-item
[disabled]="
element.activitiesCount !== 0 ||
element.isBenchmark ||
element.symbol.startsWith(ghostfolioScraperApiSymbolPrefix)
!adminMarketDataService.hasPermissionToDeleteAssetProfile({
activitiesCount: element.activitiesCount,
isBenchmark: element.isBenchmark,
symbol: element.symbol
})
"
(click)="
onDeleteAssetProfile({
@ -1,5 +1,10 @@
import { AdminService } from '@ghostfolio/client/services/admin.service' ;
import { UniqueAsset } from '@ghostfolio/common/interfaces' ;
import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/common/config' ;
import { getCurrencyFromSymbol , isCurrency } from '@ghostfolio/common/helper' ;
import {
AdminMarketDataItem ,
UniqueAsset
} from '@ghostfolio/common/interfaces' ;
import { Injectable } from '@angular/core' ;
import { EMPTY , catchError , finalize , forkJoin , takeUntil } from 'rxjs' ;
@ -50,4 +55,17 @@ export class AdminMarketDataService {
. subscribe ( ( ) = > { } ) ;
}
}
public hasPermissionToDeleteAssetProfile ( {
activitiesCount ,
isBenchmark ,
symbol
} : Pick < AdminMarketDataItem , ' activitiesCount ' | ' isBenchmark ' | ' symbol ' > ) {
return (
activitiesCount === 0 &&
! isBenchmark &&
! isCurrency ( getCurrencyFromSymbol ( symbol ) ) &&
! symbol . startsWith ( ghostfolioScraperApiSymbolPrefix )
) ;
}
}
@ -87,7 +87,7 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
private unsubscribeSubject = new Subject < void > ( ) ;
public constructor (
private adminMarketDataService : AdminMarketDataService ,
public adminMarketDataService : AdminMarketDataService ,
private adminService : AdminService ,
private changeDetectorRef : ChangeDetectorRef ,
@Inject ( MAT_DIALOG_DATA ) public data : AssetProfileDialogParams ,
@ -48,9 +48,11 @@
mat-menu-item
type="button"
[disabled]="
assetProfile?.activitiesCount !== 0 ||
isBenchmark ||
data.symbol.startsWith(ghostfolioScraperApiSymbolPrefix)
!adminMarketDataService.hasPermissionToDeleteAssetProfile({
activitiesCount: assetProfile?.activitiesCount,
isBenchmark: isBenchmark,
symbol: data.symbol
})
"
(click)="
onDeleteProfileData({