- @if (dataProvider.name === 'Ghostfolio') {
-
-
-
+
+
+ Name
+ |
+
+
-
+ }
+
@if (isGhostfolioApiKeyValid === true) {
-
-
+
+
+ Valid until
+ {{
+ ghostfolioApiStatus?.subscription?.expiresAt
+ | date: defaultDateFormat
+ }}
+
+
+
+
{{ ghostfolioApiStatus.dailyRequests }}
of
{{ ghostfolioApiStatus.dailyRequestsMax }}
daily requests
-
-
-
-
-
+
- } @else if (isGhostfolioApiKeyValid === false) {
-
}
-
- } @else {
-
-
-
- {{ dataProvider.name }}
-
-
-
- }
+ } @else {
+ {{ element.name }}
+ }
+
- }
-
-
+ |
+
+
+
+ |
+
+
+ @if (isGhostfolioProvider(element)) {
+ @if (isGhostfolioApiKeyValid === true) {
+
+
+
+
+ } @else if (isGhostfolioApiKeyValid === false) {
+
+ }
+ }
+ |
+
+
+
+
+
+ @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..f362d4797 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,11 +37,13 @@ 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 ghostfolioApiStatus: DataProviderGhostfolioStatusResponse;
public isGhostfolioApiKeyValid: boolean;
public pricingUrl: string;
+ public displayedColumns = ['name', 'actions'];
+ public isLoading = false;
private deviceType: string;
private unsubscribeSubject = new Subject();
@@ -119,20 +122,28 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
});
}
+ public isGhostfolioProvider(provider: DataProviderInfo): boolean {
+ return provider.name === 'Ghostfolio';
+ }
+
public ngOnDestroy() {
this.unsubscribeSubject.next();
this.unsubscribeSubject.complete();
}
private initialize() {
+ this.isLoading = true;
+
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
@@ -140,7 +151,7 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
.pipe(
catchError(() => {
this.isGhostfolioApiKeyValid = false;
-
+ this.isLoading = false;
this.changeDetectorRef.markForCheck();
return of(null);
@@ -153,7 +164,7 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
.subscribe((status) => {
this.ghostfolioApiStatus = status;
this.isGhostfolioApiKeyValid = true;
-
+ 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..5fe60b292 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
@@ -8,6 +8,7 @@ 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 { AdminSettingsComponent } from './admin-settings.component';
@@ -23,7 +24,8 @@ import { AdminSettingsComponent } from './admin-settings.component';
MatButtonModule,
MatCardModule,
MatMenuModule,
- RouterModule
+ RouterModule,
+ MatTableModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})