Browse Source

Merge 1593a69ec5 into 0c970e2a14

pull/6309/merge
Karel De Smet 2 months ago
committed by GitHub
parent
commit
744d6c0bd6
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 7
      CHANGELOG.md
  2. 54
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  3. 15
      apps/client/src/app/components/admin-market-data/admin-market-data.html
  4. 8
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  5. 9
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
  6. 10
      apps/client/src/app/pages/admin/admin-page.routes.ts

7
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/), 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). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Changed
- Improved the routing of the asset profile dialog in the market data section of the admin control panel
- Improved the routing of the create asset profile dialog in the market data section of the admin control panel
## 2.238.0 - 2026-02-12 ## 2.238.0 - 2026-02-12
### Changed ### Changed

54
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts

@ -13,6 +13,7 @@ import {
import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface'; import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfSymbolPipe } from '@ghostfolio/common/pipes'; import { GfSymbolPipe } from '@ghostfolio/common/pipes';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter'; import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter';
import { translate } from '@ghostfolio/ui/i18n'; import { translate } from '@ghostfolio/ui/i18n';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
@ -157,6 +158,8 @@ export class GfAdminMarketDataComponent
public isUUID = isUUID; public isUUID = isUUID;
public placeholder = ''; public placeholder = '';
public pageSize = DEFAULT_PAGE_SIZE; public pageSize = DEFAULT_PAGE_SIZE;
public routerLinkAdminControlMarketData =
internalRoutes.adminControl.subRoutes.marketData.routerLink;
public selection: SelectionModel<Partial<SymbolProfile>>; public selection: SelectionModel<Partial<SymbolProfile>>;
public totalItems = 0; public totalItems = 0;
public user: User; public user: User;
@ -203,22 +206,23 @@ export class GfAdminMarketDataComponent
this.displayedColumns.push('comment'); this.displayedColumns.push('comment');
this.displayedColumns.push('actions'); this.displayedColumns.push('actions');
this.route.queryParams if (this.route.snapshot.routeConfig.path === 'market-data/create') {
.pipe(takeUntil(this.unsubscribeSubject)) this.openCreateAssetProfileDialog();
.subscribe((params) => { } else {
if ( this.route.paramMap
params['assetProfileDialog'] && .pipe(takeUntil(this.unsubscribeSubject))
params['dataSource'] && .subscribe((paramMap) => {
params['symbol'] const dataSource = paramMap.get('dataSource') as DataSource;
) { const symbol = paramMap.get('symbol');
this.openAssetProfileDialog({
dataSource: params['dataSource'], if (dataSource && symbol) {
symbol: params['symbol'] this.openAssetProfileDialog({
}); dataSource,
} else if (params['createAssetProfileDialog']) { symbol
this.openCreateAssetProfileDialog(); });
} }
}); });
}
this.userService.stateChanged this.userService.stateChanged
.pipe(takeUntil(this.unsubscribeSubject)) .pipe(takeUntil(this.unsubscribeSubject))
@ -344,15 +348,15 @@ export class GfAdminMarketDataComponent
dataSource, dataSource,
symbol symbol
}: AssetProfileIdentifier) { }: AssetProfileIdentifier) {
this.router.navigate([], { this.router.navigate([dataSource, symbol], {
queryParams: { relativeTo: this.route
dataSource,
symbol,
assetProfileDialog: true
}
}); });
} }
public getRouterLinkToAdminControlMarketData(dataSource, symbol) {
return [...this.routerLinkAdminControlMarketData, dataSource, symbol];
}
public ngOnDestroy() { public ngOnDestroy() {
this.unsubscribeSubject.next(); this.unsubscribeSubject.next();
this.unsubscribeSubject.complete(); this.unsubscribeSubject.complete();
@ -453,7 +457,9 @@ export class GfAdminMarketDataComponent
if (newAssetProfileIdentifier) { if (newAssetProfileIdentifier) {
this.onOpenAssetProfileDialog(newAssetProfileIdentifier); this.onOpenAssetProfileDialog(newAssetProfileIdentifier);
} else { } else {
this.router.navigate(['.'], { relativeTo: this.route }); this.router.navigate(
internalRoutes.adminControl.subRoutes.marketData.routerLink
);
} }
} }
); );
@ -484,7 +490,7 @@ export class GfAdminMarketDataComponent
.pipe(takeUntil(this.unsubscribeSubject)) .pipe(takeUntil(this.unsubscribeSubject))
.subscribe((result) => { .subscribe((result) => {
if (!result) { if (!result) {
this.router.navigate(['.'], { relativeTo: this.route }); this.router.navigate(['..'], { relativeTo: this.route });
return; return;
} }

15
apps/client/src/app/components/admin-market-data/admin-market-data.html

@ -255,12 +255,12 @@
<mat-menu #assetProfileActionsMenu="matMenu" xPosition="before"> <mat-menu #assetProfileActionsMenu="matMenu" xPosition="before">
<a <a
mat-menu-item mat-menu-item
[queryParams]="{ [routerLink]="
assetProfileDialog: true, getRouterLinkToAdminControlMarketData(
dataSource: element.dataSource, element.dataSource,
symbol: element.symbol element.symbol
}" )
[routerLink]="[]" "
> >
<span class="align-items-center d-flex"> <span class="align-items-center d-flex">
<ion-icon class="mr-2" name="create-outline" /> <ion-icon class="mr-2" name="create-outline" />
@ -336,8 +336,7 @@
class="align-items-center d-flex justify-content-center" class="align-items-center d-flex justify-content-center"
color="primary" color="primary"
mat-fab mat-fab
[queryParams]="{ createAssetProfileDialog: true }" [routerLink]="['create']"
[routerLink]="[]"
> >
<ion-icon name="add-outline" size="large" /> <ion-icon name="add-outline" size="large" />
</a> </a>

8
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts

@ -618,6 +618,14 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
} }
} }
public getRouterLinkToAdminControlMarketDataForDataSourceAndSymbol() {
return [
...this.routerLinkAdminControlMarketData,
this.SymbolProfile?.dataSource,
this.SymbolProfile?.symbol
];
}
public onUpdateActivity(aActivity: Activity) { public onUpdateActivity(aActivity: Activity) {
this.router.navigate( this.router.navigate(
internalRoutes.portfolio.subRoutes.activities.routerLink, internalRoutes.portfolio.subRoutes.activities.routerLink,

9
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html

@ -454,12 +454,9 @@
@if (data.hasPermissionToAccessAdminControl) { @if (data.hasPermissionToAccessAdminControl) {
<a <a
mat-stroked-button mat-stroked-button
[queryParams]="{ [routerLink]="
assetProfileDialog: true, getRouterLinkToAdminControlMarketDataForDataSourceAndSymbol()
dataSource: SymbolProfile?.dataSource, "
symbol: SymbolProfile?.symbol
}"
[routerLink]="routerLinkAdminControlMarketData"
(click)="onClose()" (click)="onClose()"
><ion-icon class="mr-1" name="create-outline" /><span i18n ><ion-icon class="mr-1" name="create-outline" /><span i18n
>Manage Asset Profile</span >Manage Asset Profile</span

10
apps/client/src/app/pages/admin/admin-page.routes.ts

@ -29,6 +29,16 @@ export const routes: Routes = [
component: GfAdminMarketDataComponent, component: GfAdminMarketDataComponent,
title: internalRoutes.adminControl.subRoutes.marketData.title title: internalRoutes.adminControl.subRoutes.marketData.title
}, },
{
path: `${internalRoutes.adminControl.subRoutes.marketData.path}/create`,
component: GfAdminMarketDataComponent,
title: internalRoutes.adminControl.subRoutes.marketData.title
},
{
path: `${internalRoutes.adminControl.subRoutes.marketData.path}/:dataSource/:symbol`,
component: GfAdminMarketDataComponent,
title: internalRoutes.adminControl.subRoutes.marketData.title
},
{ {
path: internalRoutes.adminControl.subRoutes.settings.path, path: internalRoutes.adminControl.subRoutes.settings.path,
component: GfAdminSettingsComponent, component: GfAdminSettingsComponent,

Loading…
Cancel
Save