- @if (dataProvider.name === 'Ghostfolio') {
-
-
-
+
+
+ Name
+
+
+
-
+ }
+
@if (isGhostfolioApiKeyValid === true) {
-
-
+
+
+ Valid until
+ {{
+ ghostfolioApiStatus?.subscription?.expiresAt
+ | date: defaultDateFormat
+ }}
+
+
+
+
{{ ghostfolioApiStatus.dailyRequests }}
of
{{ ghostfolioApiStatus.dailyRequestsMax }}
daily requests
-
-
-
-
-
-
-
-
- Remove API key
-
-
-
+
- } @else if (isGhostfolioApiKeyValid === false) {
-
-
- Set API key
-
}
-
- } @else {
-
-
-
- {{ dataProvider.name }}
-
-
-
- }
+ } @else {
+ {{ element.name }}
+ }
+
- }
-
-
+
+
+
+
+
+
+
+ @if (isGhostfolioDataProvider(element)) {
+ @if (isGhostfolioApiKeyValid === true) {
+
+
+
+
+
+
+
+ Remove API key
+
+
+
+ } @else if (isGhostfolioApiKeyValid === false) {
+
+
+ Set API key
+
+ }
+ }
+
+
+
+
+
+
+ @if (isLoading) {
+
+ }
diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts
index 68c196962..f18e49d10 100644
--- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts
+++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts
@@ -22,6 +22,7 @@ import {
OnInit
} from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
+import { MatTableDataSource } from '@angular/material/table';
import { DeviceDetectorService } from 'ngx-device-detector';
import { catchError, filter, of, Subject, takeUntil } from 'rxjs';
@@ -36,10 +37,12 @@ import { GhostfolioPremiumApiDialogParams } from './ghostfolio-premium-api-dialo
standalone: false
})
export class AdminSettingsComponent implements OnDestroy, OnInit {
- public dataProviders: DataProviderInfo[];
+ public dataSource = new MatTableDataSource();
public defaultDateFormat: string;
+ public displayedColumns = ['name', 'actions'];
public ghostfolioApiStatus: DataProviderGhostfolioStatusResponse;
public isGhostfolioApiKeyValid: boolean;
+ public isLoading = false;
public pricingUrl: string;
private deviceType: string;
@@ -83,6 +86,10 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
this.initialize();
}
+ public isGhostfolioDataProvider(provider: DataProviderInfo): boolean {
+ return provider.dataSource === 'GHOSTFOLIO';
+ }
+
public onRemoveGhostfolioApiKey() {
this.notificationService.confirm({
confirmFn: () => {
@@ -125,14 +132,20 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
}
private initialize() {
+ this.isLoading = true;
+
+ this.dataSource = new MatTableDataSource();
+
this.adminService
.fetchAdminData()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(({ dataProviders, settings }) => {
- this.dataProviders = dataProviders.filter(({ dataSource }) => {
+ const filteredProviders = dataProviders.filter(({ dataSource }) => {
return dataSource !== 'MANUAL';
});
+ this.dataSource = new MatTableDataSource(filteredProviders);
+
this.adminService
.fetchGhostfolioDataProviderStatus(
settings[PROPERTY_API_KEY_GHOSTFOLIO] as string
@@ -157,6 +170,8 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
this.changeDetectorRef.markForCheck();
});
+ this.isLoading = false;
+
this.changeDetectorRef.markForCheck();
});
}
diff --git a/apps/client/src/app/components/admin-settings/admin-settings.module.ts b/apps/client/src/app/components/admin-settings/admin-settings.module.ts
index 79b269a62..c5148f681 100644
--- a/apps/client/src/app/components/admin-settings/admin-settings.module.ts
+++ b/apps/client/src/app/components/admin-settings/admin-settings.module.ts
@@ -6,9 +6,10 @@ import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
-import { MatCardModule } from '@angular/material/card';
import { MatMenuModule } from '@angular/material/menu';
+import { MatTableModule } from '@angular/material/table';
import { RouterModule } from '@angular/router';
+import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { AdminSettingsComponent } from './admin-settings.component';
@@ -21,8 +22,9 @@ import { AdminSettingsComponent } from './admin-settings.component';
GfAssetProfileIconComponent,
GfPremiumIndicatorComponent,
MatButtonModule,
- MatCardModule,
MatMenuModule,
+ MatTableModule,
+ NgxSkeletonLoaderModule,
RouterModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]