Browse Source

Create or Update Dialog Component

pull/5622/head
ANIR1604 1 month ago
parent
commit
89916c9a09
  1. 1
      apps/client/jest.config.ts
  2. 4
      apps/client/src/app/app.component.ts
  3. 5
      apps/client/src/app/components/access-table/access-table.component.ts
  4. 10
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
  5. 7
      apps/client/src/app/components/admin-jobs/admin-jobs.component.ts
  6. 8
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  7. 7
      apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
  8. 12
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  9. 4
      apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
  10. 13
      apps/client/src/app/components/admin-overview/admin-overview.component.ts
  11. 10
      apps/client/src/app/components/admin-platform/admin-platform.component.ts
  12. 2
      apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.component.ts
  13. 17
      apps/client/src/app/components/admin-settings/admin-settings.component.ts
  14. 8
      apps/client/src/app/components/admin-tag/admin-tag.component.ts
  15. 2
      apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.component.ts
  16. 2
      apps/client/src/app/components/admin-users/admin-users.component.ts
  17. 3
      apps/client/src/app/components/data-provider-status/data-provider-status.component.ts
  18. 23
      apps/client/src/app/components/header/header.component.ts
  19. 8
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  20. 7
      apps/client/src/app/components/home-holdings/home-holdings.component.ts
  21. 7
      apps/client/src/app/components/home-market/home-market.component.ts
  22. 11
      apps/client/src/app/components/home-overview/home-overview.component.ts
  23. 9
      apps/client/src/app/components/home-summary/home-summary.component.ts
  24. 6
      apps/client/src/app/components/home-watchlist/home-watchlist.component.ts
  25. 16
      apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts
  26. 7
      apps/client/src/app/components/markets/markets.component.ts
  27. 3
      apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts
  28. 3
      apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts
  29. 3
      apps/client/src/app/components/rules/rules.component.ts
  30. 6
      apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
  31. 12
      apps/client/src/app/components/user-account-access/user-account-access.component.ts
  32. 9
      apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
  33. 23
      apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
  34. 7
      apps/client/src/app/core/auth.guard.ts
  35. 5
      apps/client/src/app/core/auth.interceptor.ts
  36. 7
      apps/client/src/app/core/http-response.interceptor.ts
  37. 5
      apps/client/src/app/pages/about/about-page.component.ts
  38. 2
      apps/client/src/app/pages/about/about-page.routes.ts
  39. 2
      apps/client/src/app/pages/about/changelog/changelog-page.routes.ts
  40. 2
      apps/client/src/app/pages/about/license/license-page.routes.ts
  41. 2
      apps/client/src/app/pages/about/oss-friends/oss-friends-page.routes.ts
  42. 5
      apps/client/src/app/pages/about/overview/about-overview-page.component.ts
  43. 3
      apps/client/src/app/pages/about/overview/about-overview-page.routes.ts
  44. 2
      apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.routes.ts
  45. 2
      apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.routes.ts
  46. 12
      apps/client/src/app/pages/accounts/accounts-page.component.ts
  47. 2
      apps/client/src/app/pages/accounts/accounts-page.routes.ts
  48. 4
      apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
  49. 12
      apps/client/src/app/pages/admin/admin-page.routes.ts
  50. 12
      apps/client/src/app/pages/auth/auth-page.component.ts
  51. 2
      apps/client/src/app/pages/blog/blog-page-routing.module.ts
  52. 3
      apps/client/src/app/pages/blog/blog-page.component.ts
  53. 7
      apps/client/src/app/pages/demo/demo-page.component.ts
  54. 3
      apps/client/src/app/pages/faq/faq-page.component.ts
  55. 2
      apps/client/src/app/pages/faq/faq-page.routes.ts
  56. 3
      apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
  57. 3
      apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts
  58. 3
      apps/client/src/app/pages/faq/saas/saas-page.component.ts
  59. 2
      apps/client/src/app/pages/faq/saas/saas-page.routes.ts
  60. 2
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts
  61. 5
      apps/client/src/app/pages/features/features-page.component.ts
  62. 5
      apps/client/src/app/pages/home/home-page.component.ts
  63. 14
      apps/client/src/app/pages/home/home-page.routes.ts
  64. 3
      apps/client/src/app/pages/landing/landing-page.component.ts
  65. 2
      apps/client/src/app/pages/landing/landing-page.routes.ts
  66. 4
      apps/client/src/app/pages/markets/markets-page.component.ts
  67. 2
      apps/client/src/app/pages/markets/markets-page.routes.ts
  68. 2
      apps/client/src/app/pages/open/open-page-routing.module.ts
  69. 5
      apps/client/src/app/pages/open/open-page.component.ts
  70. 66
      apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
  71. 2
      apps/client/src/app/pages/portfolio/activities/activities-page.routes.ts
  72. 6
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  73. 12
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  74. 11
      apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
  75. 3
      apps/client/src/app/pages/portfolio/allocations/allocations-page.routes.ts
  76. 11
      apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
  77. 2
      apps/client/src/app/pages/portfolio/analysis/analysis-page.routes.ts
  78. 7
      apps/client/src/app/pages/portfolio/fire/fire-page.component.ts
  79. 3
      apps/client/src/app/pages/portfolio/fire/fire-page.routes.ts
  80. 3
      apps/client/src/app/pages/portfolio/portfolio-page.component.ts
  81. 2
      apps/client/src/app/pages/portfolio/portfolio-page.routes.ts
  82. 9
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts
  83. 3
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.routes.ts
  84. 7
      apps/client/src/app/pages/pricing/pricing-page.component.ts
  85. 3
      apps/client/src/app/pages/pricing/pricing-page.routes.ts
  86. 3
      apps/client/src/app/pages/public/public-page.component.ts
  87. 3
      apps/client/src/app/pages/public/public-page.routes.ts
  88. 6
      apps/client/src/app/pages/register/register-page.component.ts
  89. 2
      apps/client/src/app/pages/register/register-page.routes.ts
  90. 2
      apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts
  91. 3
      apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
  92. 2
      apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.routes.ts
  93. 3
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
  94. 2
      apps/client/src/app/pages/resources/resources-page.routes.ts
  95. 3
      apps/client/src/app/pages/user-account/user-account-page.component.ts
  96. 8
      apps/client/src/app/pages/user-account/user-account-page.routes.ts
  97. 5
      apps/client/src/app/pages/webauthn/webauthn-page.component.ts
  98. 3
      apps/client/src/app/pages/zen/zen-page.component.ts
  99. 6
      apps/client/src/app/pages/zen/zen-page.routes.ts
  100. 3
      apps/client/src/app/services/token-storage.service.ts

1
apps/client/jest.config.ts

@ -1,4 +1,3 @@
/* eslint-disable */
export default {
displayName: 'client',

4
apps/client/src/app/app.component.ts

@ -1,5 +1,3 @@
import { GfHoldingDetailDialogComponent } from '@ghostfolio/client/components/holding-detail-dialog/holding-detail-dialog.component';
import { HoldingDetailDialogParams } from '@ghostfolio/client/components/holding-detail-dialog/interfaces/interfaces';
import { getCssVariable } from '@ghostfolio/common/helper';
import { InfoItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@ -31,6 +29,8 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { GfHoldingDetailDialogComponent } from './components/holding-detail-dialog/holding-detail-dialog.component';
import { HoldingDetailDialogParams } from './components/holding-detail-dialog/interfaces/interfaces';
import { NotificationService } from './core/notification/notification.service';
import { DataService } from './services/data.service';
import { ImpersonationStorageService } from './services/impersonation-storage.service';

5
apps/client/src/app/components/access-table/access-table.component.ts

@ -1,5 +1,3 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { Access, User } from '@ghostfolio/common/interfaces';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -31,6 +29,9 @@ import {
} from 'ionicons/icons';
import ms from 'ms';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

10
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts

@ -1,10 +1,5 @@
import { CreateAccountBalanceDto } from '@ghostfolio/api/app/account-balance/create-account-balance.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config';
import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper';
import {
@ -52,6 +47,11 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { forkJoin, Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { GfDialogFooterComponent } from '../dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '../dialog-header/dialog-header.component';
import { GfInvestmentChartComponent } from '../investment-chart/investment-chart.component';
import { AccountDetailDialogParams } from './interfaces/interfaces';
@Component({

7
apps/client/src/app/components/admin-jobs/admin-jobs.component.ts

@ -1,6 +1,3 @@
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
DATA_GATHERING_QUEUE_PRIORITY_HIGH,
DATA_GATHERING_QUEUE_PRIORITY_LOW,
@ -51,6 +48,10 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { NotificationService } from '../../core/notification/notification.service';
import { AdminService } from '../../services/admin.service';
import { UserService } from '../../services/user/user.service';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

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

@ -1,7 +1,3 @@
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
DEFAULT_PAGE_SIZE,
ghostfolioScraperApiSymbolPrefix
@ -66,6 +62,10 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject } from 'rxjs';
import { distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators';
import { GfSymbolModule } from '../../pipes/symbol/symbol.module';
import { AdminService } from '../../services/admin.service';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { AdminMarketDataService } from './admin-market-data.service';
import { GfAssetProfileDialogComponent } from './asset-profile-dialog/asset-profile-dialog.component';
import { AssetProfileDialogParams } from './asset-profile-dialog/interfaces/interfaces';

7
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts

@ -1,6 +1,3 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/common/config';
import {
getCurrencyFromSymbol,
@ -15,6 +12,10 @@ import {
import { Injectable } from '@angular/core';
import { EMPTY, catchError, finalize, forkJoin } from 'rxjs';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { AdminService } from '../../services/admin.service';
@Injectable()
export class AdminMarketDataService {
public constructor(

12
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts

@ -1,10 +1,4 @@
import { UpdateAssetProfileDto } from '@ghostfolio/api/app/admin/update-asset-profile.dto';
import { AdminMarketDataService } from '@ghostfolio/client/components/admin-market-data/admin-market-data.service';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import {
ASSET_CLASS_MAPPING,
PROPERTY_IS_DATA_GATHERING_ENABLED
@ -82,6 +76,12 @@ import ms from 'ms';
import { EMPTY, Subject } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators';
import { NotificationService } from '../../../core/notification/notification.service';
import { AdminService } from '../../../services/admin.service';
import { DataService } from '../../../services/data.service';
import { UserService } from '../../../services/user/user.service';
import { validateObjectForForm } from '../../../util/form.util';
import { AdminMarketDataService } from '../admin-market-data.service';
import { AssetProfileDialogParams } from './interfaces/interfaces';
@Component({

4
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts

@ -1,5 +1,3 @@
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import {
DEFAULT_CURRENCY,
ghostfolioPrefix,
@ -34,6 +32,8 @@ import { DataSource } from '@prisma/client';
import { isISO4217CurrencyCode } from 'class-validator';
import { Subject, switchMap, takeUntil } from 'rxjs';
import { AdminService } from '../../../services/admin.service';
import { DataService } from '../../../services/data.service';
import { CreateAssetProfileDialogMode } from './interfaces/interfaces';
@Component({

13
apps/client/src/app/components/admin-overview/admin-overview.component.ts

@ -1,9 +1,3 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { CacheService } from '@ghostfolio/client/services/cache.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
PROPERTY_COUPONS,
PROPERTY_IS_DATA_GATHERING_ENABLED,
@ -54,6 +48,13 @@ import ms, { StringValue } from 'ms';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { AdminService } from '../../services/admin.service';
import { CacheService } from '../../services/cache.service';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
@Component({
imports: [
CommonModule,

10
apps/client/src/app/components/admin-platform/admin-platform.component.ts

@ -1,10 +1,5 @@
import { CreatePlatformDto } from '@ghostfolio/api/app/platform/create-platform.dto';
import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform.dto';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import {
@ -33,6 +28,11 @@ import { get } from 'lodash';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, takeUntil } from 'rxjs';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { AdminService } from '../../services/admin.service';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { GfCreateOrUpdatePlatformDialogComponent } from './create-or-update-platform-dialog/create-or-update-platform-dialog.component';
@Component({

2
apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.component.ts

@ -1,6 +1,5 @@
import { CreatePlatformDto } from '@ghostfolio/api/app/platform/create-platform.dto';
import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform.dto';
import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import {
@ -26,6 +25,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { Subject } from 'rxjs';
import { validateObjectForForm } from '../../../util/form.util';
import { CreateOrUpdatePlatformDialogParams } from './interfaces/interfaces';
@Component({

17
apps/client/src/app/components/admin-settings/admin-settings.component.ts

@ -1,11 +1,3 @@
import { GfAdminPlatformComponent } from '@ghostfolio/client/components/admin-platform/admin-platform.component';
import { GfAdminTagComponent } from '@ghostfolio/client/components/admin-tag/admin-tag.component';
import { GfDataProviderStatusComponent } from '@ghostfolio/client/components/data-provider-status/data-provider-status.component';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { PROPERTY_API_KEY_GHOSTFOLIO } from '@ghostfolio/common/config';
import { getDateFormatString } from '@ghostfolio/common/helper';
import {
@ -38,6 +30,15 @@ import { ellipsisHorizontal, trashOutline } from 'ionicons/icons';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { catchError, filter, of, Subject, takeUntil } from 'rxjs';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { AdminService } from '../../services/admin.service';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { GfAdminPlatformComponent } from '../admin-platform/admin-platform.component';
import { GfAdminTagComponent } from '../admin-tag/admin-tag.component';
import { GfDataProviderStatusComponent } from '../data-provider-status/data-provider-status.component';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

8
apps/client/src/app/components/admin-tag/admin-tag.component.ts

@ -1,9 +1,5 @@
import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto';
import { UpdateTagDto } from '@ghostfolio/api/app/endpoints/tags/update-tag.dto';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
ChangeDetectionStrategy,
@ -31,6 +27,10 @@ import { get } from 'lodash';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, takeUntil } from 'rxjs';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { GfCreateOrUpdateTagDialogComponent } from './create-or-update-tag-dialog/create-or-update-tag-dialog.component';
@Component({

2
apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.component.ts

@ -1,6 +1,5 @@
import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto';
import { UpdateTagDto } from '@ghostfolio/api/app/endpoints/tags/update-tag.dto';
import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import {
ChangeDetectionStrategy,
@ -24,6 +23,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { Subject } from 'rxjs';
import { validateObjectForForm } from '../../../util/form.util';
import { CreateOrUpdateTagDialogParams } from './interfaces/interfaces';
@Component({

2
apps/client/src/app/components/admin-users/admin-users.component.ts

@ -1,4 +1,3 @@
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import {
getDateFnsLocale,
@ -48,6 +47,7 @@ import { NotificationService } from '../../core/notification/notification.servic
import { AdminService } from '../../services/admin.service';
import { DataService } from '../../services/data.service';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import { TokenStorageService } from '../../services/token-storage.service';
import { UserService } from '../../services/user/user.service';
@Component({

3
apps/client/src/app/components/data-provider-status/data-provider-status.component.ts

@ -1,5 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { CommonModule } from '@angular/common';
import {
ChangeDetectionStrategy,
@ -12,6 +10,7 @@ import type { DataSource } from '@prisma/client';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { catchError, map, type Observable, of, Subject, takeUntil } from 'rxjs';
import { DataService } from '../../services/data.service';
import { DataProviderStatus } from './interfaces/interfaces';
@Component({

23
apps/client/src/app/components/header/header.component.ts

@ -1,15 +1,4 @@
import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto';
import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component';
import { LayoutService } from '@ghostfolio/client/core/layout.service';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import {
KEY_STAY_SIGNED_IN,
SettingsStorageService
} from '@ghostfolio/client/services/settings-storage.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { Filter, InfoItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
@ -50,6 +39,18 @@ import {
import { EMPTY, Subject } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators';
import { LayoutService } from '../../core/layout.service';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import {
KEY_STAY_SIGNED_IN,
SettingsStorageService
} from '../../services/settings-storage.service';
import { TokenStorageService } from '../../services/token-storage.service';
import { UserService } from '../../services/user/user.service';
import { GfLoginWithAccessTokenDialogComponent } from '../login-with-access-token-dialog/login-with-access-token-dialog.component';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

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

@ -1,8 +1,4 @@
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
NUMERICAL_PRECISION_THRESHOLD_3_FIGURES,
NUMERICAL_PRECISION_THRESHOLD_5_FIGURES,
@ -68,6 +64,10 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject } from 'rxjs';
import { switchMap, takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { GfDialogFooterComponent } from '../dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '../dialog-header/dialog-header.component';
import { HoldingDetailDialogParams } from './interfaces/interfaces';
@Component({

7
apps/client/src/app/components/home-holdings/home-holdings.component.ts

@ -1,6 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
AssetProfileIdentifier,
PortfolioPosition,
@ -33,6 +30,10 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import { UserService } from '../../services/user/user.service';
@Component({
imports: [
CommonModule,

7
apps/client/src/app/components/home-market/home-market.component.ts

@ -1,6 +1,3 @@
import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { ghostfolioFearAndGreedIndexSymbol } from '@ghostfolio/common/config';
import { resetHours } from '@ghostfolio/common/helper';
import {
@ -24,6 +21,10 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { GfFearAndGreedIndexComponent } from '../fear-and-greed-index/fear-and-greed-index.component';
@Component({
imports: [
GfBenchmarkComponent,

11
apps/client/src/app/components/home-overview/home-overview.component.ts

@ -1,8 +1,3 @@
import { GfPortfolioPerformanceComponent } from '@ghostfolio/client/components/portfolio-performance/portfolio-performance.component';
import { LayoutService } from '@ghostfolio/client/core/layout.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config';
import {
AssetProfileIdentifier,
@ -28,6 +23,12 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { LayoutService } from '../../core/layout.service';
import { DataService } from '../../services/data.service';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import { UserService } from '../../services/user/user.service';
import { GfPortfolioPerformanceComponent } from '../portfolio-performance/portfolio-performance.component';
@Component({
imports: [
CommonModule,

9
apps/client/src/app/components/home-summary/home-summary.component.ts

@ -1,7 +1,3 @@
import { GfPortfolioSummaryComponent } from '@ghostfolio/client/components/portfolio-summary/portfolio-summary.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
InfoItem,
PortfolioSummary,
@ -21,6 +17,11 @@ import { MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import { UserService } from '../../services/user/user.service';
import { GfPortfolioSummaryComponent } from '../portfolio-summary/portfolio-summary.component';
@Component({
imports: [GfPortfolioSummaryComponent, MatCardModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],

6
apps/client/src/app/components/home-watchlist/home-watchlist.component.ts

@ -1,6 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
AssetProfileIdentifier,
Benchmark,
@ -28,6 +25,9 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import { UserService } from '../../services/user/user.service';
import { CreateWatchlistItemDialogComponent } from './create-watchlist-item-dialog/create-watchlist-item-dialog.component';
import { CreateWatchlistItemDialogParams } from './create-watchlist-item-dialog/interfaces/interfaces';

16
apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts

@ -1,11 +1,3 @@
import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { InternetIdentityService } from '@ghostfolio/client/services/internet-identity.service';
import {
KEY_STAY_SIGNED_IN,
SettingsStorageService
} from '@ghostfolio/client/services/settings-storage.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
@ -26,6 +18,14 @@ import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons';
import { eyeOffOutline, eyeOutline } from 'ionicons/icons';
import { InternetIdentityService } from '../../services/internet-identity.service';
import {
KEY_STAY_SIGNED_IN,
SettingsStorageService
} from '../../services/settings-storage.service';
import { TokenStorageService } from '../../services/token-storage.service';
import { GfDialogHeaderComponent } from '../dialog-header/dialog-header.component';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

7
apps/client/src/app/components/markets/markets.component.ts

@ -1,6 +1,3 @@
import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { resetHours } from '@ghostfolio/common/helper';
import {
Benchmark,
@ -26,6 +23,10 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
import { GfFearAndGreedIndexComponent } from '../fear-and-greed-index/fear-and-greed-index.component';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

3
apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts

@ -1,4 +1,3 @@
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import {
getLocale,
getNumberFormatDecimal,
@ -26,6 +25,8 @@ import { timeOutline } from 'ionicons/icons';
import { isNumber } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { NotificationService } from '../../core/notification/notification.service';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [CommonModule, GfValueComponent, IonIcon, NgxSkeletonLoaderModule],

3
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts

@ -1,4 +1,3 @@
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { getDateFnsLocale, getLocale } from '@ghostfolio/common/helper';
import { PortfolioSummary, User } from '@ghostfolio/common/interfaces';
import { translate } from '@ghostfolio/ui/i18n';
@ -22,6 +21,8 @@ import {
informationCircleOutline
} from 'ionicons/icons';
import { NotificationService } from '../../core/notification/notification.service';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [CommonModule, GfValueComponent, IonIcon, MatTooltipModule],

3
apps/client/src/app/components/rules/rules.component.ts

@ -1,5 +1,4 @@
import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto';
import { GfRuleComponent } from '@ghostfolio/client/components/rule/rule.component';
import {
PortfolioReportRule,
XRayRulesSettings
@ -15,6 +14,8 @@ import {
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { GfRuleComponent } from '../rule/rule.component';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [GfRuleComponent, MatButtonModule, MatCardModule],

6
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts

@ -1,7 +1,4 @@
import { CreateAccessDto } from '@ghostfolio/api/app/access/create-access.dto';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import {
ChangeDetectionStrategy,
@ -29,6 +26,9 @@ import { MatSelectModule } from '@angular/material/select';
import { StatusCodes } from 'http-status-codes';
import { EMPTY, Subject, catchError, takeUntil } from 'rxjs';
import { NotificationService } from '../../../core/notification/notification.service';
import { DataService } from '../../../services/data.service';
import { validateObjectForForm } from '../../../util/form.util';
import { CreateOrUpdateAccessDialogParams } from './interfaces/interfaces';
@Component({

12
apps/client/src/app/components/user-account-access/user-account-access.component.ts

@ -1,10 +1,4 @@
import { CreateAccessDto } from '@ghostfolio/api/app/access/create-access.dto';
import { GfAccessTableComponent } from '@ghostfolio/client/components/access-table/access-table.component';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { Access, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
@ -30,6 +24,12 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { EMPTY, Subject } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import { TokenStorageService } from '../../services/token-storage.service';
import { UserService } from '../../services/user/user.service';
import { GfAccessTableComponent } from '../access-table/access-table.component';
import { GfCreateOrUpdateAccessDialog } from './create-or-update-access-dialog/create-or-update-access-dialog.component';
@Component({

9
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts

@ -1,7 +1,3 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { getDateFormatString } from '@ghostfolio/common/helper';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@ -25,6 +21,11 @@ import { StripeService } from 'ngx-stripe';
import { EMPTY, Subject } from 'rxjs';
import { catchError, switchMap, takeUntil } from 'rxjs/operators';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

23
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts

@ -1,14 +1,3 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import {
KEY_STAY_SIGNED_IN,
KEY_TOKEN,
SettingsStorageService
} from '@ghostfolio/client/services/settings-storage.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { downloadAsFile } from '@ghostfolio/common/helper';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@ -46,6 +35,18 @@ import ms from 'ms';
import { EMPTY, Subject, throwError } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators';
import { ConfirmationDialogType } from '../../core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import {
KEY_STAY_SIGNED_IN,
KEY_TOKEN,
SettingsStorageService
} from '../../services/settings-storage.service';
import { TokenStorageService } from '../../services/token-storage.service';
import { UserService } from '../../services/user/user.service';
import { WebAuthnService } from '../../services/web-authn.service';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [

7
apps/client/src/app/core/auth.guard.ts

@ -1,6 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { Injectable } from '@angular/core';
@ -12,6 +9,10 @@ import {
import { EMPTY } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { DataService } from '../services/data.service';
import { SettingsStorageService } from '../services/settings-storage.service';
import { UserService } from '../services/user/user.service';
@Injectable({ providedIn: 'root' })
export class AuthGuard {
public constructor(

5
apps/client/src/app/core/auth.interceptor.ts

@ -1,5 +1,3 @@
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import {
HEADER_KEY_IMPERSONATION,
HEADER_KEY_SKIP_INTERCEPTOR,
@ -16,6 +14,9 @@ import {
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { ImpersonationStorageService } from '../services/impersonation-storage.service';
import { TokenStorageService } from '../services/token-storage.service';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
public constructor(

7
apps/client/src/app/core/http-response.interceptor.ts

@ -1,6 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
@ -24,6 +21,10 @@ import ms from 'ms';
import { Observable, throwError } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';
import { DataService } from '../services/data.service';
import { TokenStorageService } from '../services/token-storage.service';
import { WebAuthnService } from '../services/web-authn.service';
@Injectable()
export class HttpResponseInterceptor implements HttpInterceptor {
public info: InfoItem;

5
apps/client/src/app/pages/about/about-page.component.ts

@ -1,5 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -27,6 +25,9 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page has-tabs' },
imports: [IonIcon, MatTabsModule, RouterModule],

2
apps/client/src/app/pages/about/about-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { AboutPageComponent } from './about-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/about/changelog/changelog-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfChangelogPageComponent } from './changelog-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/about/license/license-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfLicensePageComponent } from './license-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/about/oss-friends/oss-friends-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfOpenSourceSoftwareFriendsPageComponent } from './oss-friends-page.component';
export const routes: Routes = [

5
apps/client/src/app/pages/about/overview/about-overview-page.component.ts

@ -1,5 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -26,6 +24,9 @@ import {
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../../services/data.service';
import { UserService } from '../../../services/user/user.service';
@Component({
imports: [CommonModule, IonIcon, MatButtonModule, RouterModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],

3
apps/client/src/app/pages/about/overview/about-overview-page.routes.ts

@ -1,7 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfAboutOverviewPageComponent } from './about-overview-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfPrivacyPolicyPageComponent } from './privacy-policy-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/about/terms-of-service/terms-of-service-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfTermsOfServicePageComponent } from './terms-of-service-page.component';
export const routes: Routes = [

12
apps/client/src/app/pages/accounts/accounts-page.component.ts

@ -1,12 +1,6 @@
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto';
import { TransferBalanceDto } from '@ghostfolio/api/app/account/transfer-balance.dto';
import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto';
import { GfAccountDetailDialogComponent } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component';
import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table';
@ -22,6 +16,12 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { EMPTY, Subject, Subscription } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators';
import { GfAccountDetailDialogComponent } from '../../components/account-detail-dialog/account-detail-dialog.component';
import { AccountDetailDialogParams } from '../../components/account-detail-dialog/interfaces/interfaces';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import { UserService } from '../../services/user/user.service';
import { GfCreateOrUpdateAccountDialogComponent } from './create-or-update-account-dialog/create-or-update-account-dialog.component';
import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-balance-dialog.component';

2
apps/client/src/app/pages/accounts/accounts-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { GfAccountsPageComponent } from './accounts-page.component';
export const routes: Routes = [

4
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts

@ -1,7 +1,5 @@
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto';
import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto';
import { DataService } from '@ghostfolio/client/services/data.service';
import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
@ -34,6 +32,8 @@ import { Platform } from '@prisma/client';
import { Observable, Subject } from 'rxjs';
import { map, startWith } from 'rxjs/operators';
import { DataService } from '../../../services/data.service';
import { validateObjectForForm } from '../../../util/form.util';
import { CreateOrUpdateAccountDialogParams } from './interfaces/interfaces';
@Component({

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

@ -1,13 +1,13 @@
import { GfAdminJobsComponent } from '@ghostfolio/client/components/admin-jobs/admin-jobs.component';
import { GfAdminMarketDataComponent } from '@ghostfolio/client/components/admin-market-data/admin-market-data.component';
import { GfAdminOverviewComponent } from '@ghostfolio/client/components/admin-overview/admin-overview.component';
import { GfAdminSettingsComponent } from '@ghostfolio/client/components/admin-settings/admin-settings.component';
import { GfAdminUsersComponent } from '@ghostfolio/client/components/admin-users/admin-users.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfAdminJobsComponent } from '../../components/admin-jobs/admin-jobs.component';
import { GfAdminMarketDataComponent } from '../../components/admin-market-data/admin-market-data.component';
import { GfAdminOverviewComponent } from '../../components/admin-overview/admin-overview.component';
import { GfAdminSettingsComponent } from '../../components/admin-settings/admin-settings.component';
import { GfAdminUsersComponent } from '../../components/admin-users/admin-users.component';
import { AuthGuard } from '../../core/auth.guard';
import { AdminPageComponent } from './admin-page.component';
export const routes: Routes = [

12
apps/client/src/app/pages/auth/auth-page.component.ts

@ -1,14 +1,14 @@
import {
KEY_STAY_SIGNED_IN,
SettingsStorageService
} from '@ghostfolio/client/services/settings-storage.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import {
KEY_STAY_SIGNED_IN,
SettingsStorageService
} from '../../services/settings-storage.service';
import { TokenStorageService } from '../../services/token-storage.service';
@Component({
selector: 'gf-auth-page',
templateUrl: './auth-page.html',

2
apps/client/src/app/pages/blog/blog-page-routing.module.ts

@ -1,9 +1,9 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { BlogPageComponent } from './blog-page.component';
const routes: Routes = [

3
apps/client/src/app/pages/blog/blog-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { Component, OnDestroy } from '@angular/core';
@ -6,6 +5,8 @@ import { addIcons } from 'ionicons';
import { chevronForwardOutline } from 'ionicons/icons';
import { Subject } from 'rxjs';
import { DataService } from '../../services/data.service';
@Component({
host: { class: 'page' },
selector: 'gf-blog-page',

7
apps/client/src/app/pages/demo/demo-page.component.ts

@ -1,12 +1,13 @@
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
import { Component, OnDestroy } from '@angular/core';
import { Router } from '@angular/router';
import { Subject } from 'rxjs';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import { TokenStorageService } from '../../services/token-storage.service';
@Component({
host: { class: 'page' },
selector: 'gf-demo-page',

3
apps/client/src/app/pages/faq/faq-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { TabConfiguration } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -17,6 +16,8 @@ import { cloudyOutline, readerOutline, serverOutline } from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { DataService } from '../../services/data.service';
@Component({
host: { class: 'page has-tabs' },
imports: [IonIcon, MatTabsModule, RouterModule],

2
apps/client/src/app/pages/faq/faq-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { GfFaqPageComponent } from './faq-page.component';
export const routes: Routes = [

3
apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts

@ -1,4 +1,3 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
@ -13,6 +12,8 @@ import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { Subject, takeUntil } from 'rxjs';
import { UserService } from '../../../services/user/user.service';
@Component({
host: { class: 'page' },
imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule],

3
apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts

@ -1,7 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfFaqOverviewPageComponent } from './faq-overview-page.component';
export const routes: Routes = [

3
apps/client/src/app/pages/faq/saas/saas-page.component.ts

@ -1,4 +1,3 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
@ -13,6 +12,8 @@ import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { Subject, takeUntil } from 'rxjs';
import { UserService } from '../../../services/user/user.service';
@Component({
host: { class: 'page' },
imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule],

2
apps/client/src/app/pages/faq/saas/saas-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfSaasPageComponent } from './saas-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfSelfHostingPageComponent } from './self-hosting-page.component';
export const routes: Routes = [

5
apps/client/src/app/pages/features/features-page.component.ts

@ -1,5 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { InfoItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -11,6 +9,9 @@ import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { Subject, takeUntil } from 'rxjs';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page' },
imports: [

5
apps/client/src/app/pages/home/home-page.component.ts

@ -1,5 +1,3 @@
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
@ -26,6 +24,9 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { ImpersonationStorageService } from '../../services/impersonation-storage.service';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page has-tabs' },
imports: [IonIcon, MatTabsModule, RouterModule],

14
apps/client/src/app/pages/home/home-page.routes.ts

@ -1,14 +1,14 @@
import { GfHomeHoldingsComponent } from '@ghostfolio/client/components/home-holdings/home-holdings.component';
import { HomeMarketComponent } from '@ghostfolio/client/components/home-market/home-market.component';
import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component';
import { GfHomeSummaryComponent } from '@ghostfolio/client/components/home-summary/home-summary.component';
import { HomeWatchlistComponent } from '@ghostfolio/client/components/home-watchlist/home-watchlist.component';
import { MarketsComponent } from '@ghostfolio/client/components/markets/markets.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfHomeHoldingsComponent } from '../../components/home-holdings/home-holdings.component';
import { HomeMarketComponent } from '../../components/home-market/home-market.component';
import { GfHomeOverviewComponent } from '../../components/home-overview/home-overview.component';
import { GfHomeSummaryComponent } from '../../components/home-summary/home-summary.component';
import { HomeWatchlistComponent } from '../../components/home-watchlist/home-watchlist.component';
import { MarketsComponent } from '../../components/markets/markets.component';
import { AuthGuard } from '../../core/auth.guard';
import { GfHomePageComponent } from './home-page.component';
export const routes: Routes = [

3
apps/client/src/app/pages/landing/landing-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Statistics } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -22,6 +21,8 @@ import {
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { DataService } from '../../services/data.service';
@Component({
host: { class: 'page' },
imports: [

2
apps/client/src/app/pages/landing/landing-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { GfLandingPageComponent } from './landing-page.component';
export const routes: Routes = [

4
apps/client/src/app/pages/markets/markets-page.component.ts

@ -1,9 +1,9 @@
import { HomeMarketComponent } from '@ghostfolio/client/components/home-market/home-market.component';
import { CommonModule } from '@angular/common';
import { Component, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
import { HomeMarketComponent } from '../../components/home-market/home-market.component';
@Component({
host: { class: 'page' },
imports: [CommonModule, HomeMarketComponent],

2
apps/client/src/app/pages/markets/markets-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { GfMarketsPageComponent } from './markets-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/open/open-page-routing.module.ts

@ -1,9 +1,9 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { OpenPageComponent } from './open-page.component';
const routes: Routes = [

5
apps/client/src/app/pages/open/open-page.component.ts

@ -1,10 +1,11 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { Statistics, User } from '@ghostfolio/common/interfaces';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { Subject, takeUntil } from 'rxjs';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page' },
selector: 'gf-open-page',

66
apps/client/src/app/pages/portfolio/activities/activities-page.component.ts

@ -1,10 +1,6 @@
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
import { DataService } from '@ghostfolio/client/services/data.service';
import { IcsService } from '@ghostfolio/client/services/ics/ics.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import { downloadAsFile } from '@ghostfolio/common/helper';
import { AssetProfileIdentifier, User } from '@ghostfolio/common/interfaces';
@ -27,7 +23,11 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, Subscription } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { GfCreateOrUpdateActivityDialog } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component';
import { DataService } from '../../../services/data.service';
import { IcsService } from '../../../services/ics/ics.service';
import { ImpersonationStorageService } from '../../../services/impersonation-storage.service';
import { UserService } from '../../../services/user/user.service';
import { GfCreateOrUpdateActivityDialogComponent } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component';
import { GfImportActivitiesDialog } from './import-activities-dialog/import-activities-dialog.component';
import { ImportActivitiesDialogParams } from './import-activities-dialog/interfaces/interfaces';
@ -306,15 +306,18 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit {
}
public openUpdateActivityDialog(aActivity: Activity) {
const dialogRef = this.dialog.open(GfCreateOrUpdateActivityDialog, {
data: {
activity: aActivity,
accounts: this.user?.accounts,
user: this.user
},
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
});
const dialogRef = this.dialog.open(
GfCreateOrUpdateActivityDialogComponent,
{
data: {
activity: aActivity,
accounts: this.user?.accounts,
user: this.user
},
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}
);
dialogRef
.afterClosed()
@ -347,23 +350,26 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit {
.subscribe((user) => {
this.updateUser(user);
const dialogRef = this.dialog.open(GfCreateOrUpdateActivityDialog, {
data: {
accounts: this.user?.accounts,
activity: {
...aActivity,
accountId: aActivity?.accountId,
date: new Date(),
id: null,
fee: 0,
type: aActivity?.type ?? 'BUY',
unitPrice: null
const dialogRef = this.dialog.open(
GfCreateOrUpdateActivityDialogComponent,
{
data: {
accounts: this.user?.accounts,
activity: {
...aActivity,
accountId: aActivity?.accountId,
date: new Date(),
id: null,
fee: 0,
type: aActivity?.type ?? 'BUY',
unitPrice: null
},
user: this.user
},
user: this.user
},
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
});
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
}
);
dialogRef
.afterClosed()

2
apps/client/src/app/pages/portfolio/activities/activities-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfActivitiesPageComponent } from './activities-page.component';
export const routes: Routes = [

6
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts

@ -1,6 +1,5 @@
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { ASSET_CLASS_MAPPING } from '@ghostfolio/common/config';
import { getDateFormatString } from '@ghostfolio/common/helper';
import {
@ -49,6 +48,7 @@ import { EMPTY, Subject } from 'rxjs';
import { catchError, delay, takeUntil } from 'rxjs/operators';
import { DataService } from '../../../../services/data.service';
import { UserService } from '../../../../services/user/user.service';
import { validateObjectForForm } from '../../../../util/form.util';
import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces';
import { ActivityType } from './types/activity-type.type';
@ -76,7 +76,7 @@ import { ActivityType } from './types/activity-type.type';
styleUrls: ['./create-or-update-activity-dialog.scss'],
templateUrl: 'create-or-update-activity-dialog.html'
})
export class GfCreateOrUpdateActivityDialog implements OnDestroy {
export class GfCreateOrUpdateActivityDialogComponent implements OnDestroy {
public activityForm: FormGroup;
public assetClassOptions: AssetClassSelectorOption[] = Object.keys(AssetClass)
@ -110,7 +110,7 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy {
@Inject(MAT_DIALOG_DATA) public data: CreateOrUpdateActivityDialogParams,
private dataService: DataService,
private dateAdapter: DateAdapter<any>,
public dialogRef: MatDialogRef<GfCreateOrUpdateActivityDialog>,
public dialogRef: MatDialogRef<GfCreateOrUpdateActivityDialogComponent>,
private formBuilder: FormBuilder,
@Inject(MAT_DATE_LOCALE) private locale: string,
private userService: UserService

12
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts

@ -2,12 +2,6 @@ import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto'
import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto';
import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { GfFileDropModule } from '@ghostfolio/client/directives/file-drop/file-drop.module';
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImportActivitiesService } from '@ghostfolio/client/services/import-activities.service';
import { PortfolioPosition } from '@ghostfolio/common/interfaces';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
@ -52,6 +46,12 @@ import ms from 'ms';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, takeUntil } from 'rxjs';
import { GfDialogFooterComponent } from '../../../../components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '../../../../components/dialog-header/dialog-header.component';
import { GfFileDropModule } from '../../../../directives/file-drop/file-drop.module';
import { GfSymbolModule } from '../../../../pipes/symbol/symbol.module';
import { DataService } from '../../../../services/data.service';
import { ImportActivitiesService } from '../../../../services/import-activities.service';
import { ImportStep } from './enums/import-step';
import { ImportActivitiesDialogParams } from './interfaces/interfaces';

11
apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts

@ -1,8 +1,3 @@
import { GfAccountDetailDialogComponent } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component';
import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { MAX_TOP_HOLDINGS, UNKNOWN_KEY } from '@ghostfolio/common/config';
import { prettifySymbol } from '@ghostfolio/common/helper';
import {
@ -39,6 +34,12 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { GfAccountDetailDialogComponent } from '../../../components/account-detail-dialog/account-detail-dialog.component';
import { AccountDetailDialogParams } from '../../../components/account-detail-dialog/interfaces/interfaces';
import { DataService } from '../../../services/data.service';
import { ImpersonationStorageService } from '../../../services/impersonation-storage.service';
import { UserService } from '../../../services/user/user.service';
@Component({
imports: [
GfPortfolioProportionChartComponent,

3
apps/client/src/app/pages/portfolio/allocations/allocations-page.routes.ts

@ -1,7 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfAllocationsPageComponent } from './allocations-page.component';
export const routes: Routes = [

11
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts

@ -1,8 +1,3 @@
import { GfBenchmarkComparatorComponent } from '@ghostfolio/client/components/benchmark-comparator/benchmark-comparator.component';
import { GfInvestmentChartComponent } from '@ghostfolio/client/components/investment-chart/investment-chart.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
HistoricalDataItem,
InvestmentItem,
@ -44,6 +39,12 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { GfBenchmarkComparatorComponent } from '../../../components/benchmark-comparator/benchmark-comparator.component';
import { GfInvestmentChartComponent } from '../../../components/investment-chart/investment-chart.component';
import { DataService } from '../../../services/data.service';
import { ImpersonationStorageService } from '../../../services/impersonation-storage.service';
import { UserService } from '../../../services/user/user.service';
@Component({
imports: [
GfBenchmarkComparatorComponent,

2
apps/client/src/app/pages/portfolio/analysis/analysis-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfAnalysisPageComponent } from './analysis-page.component';
export const routes: Routes = [

7
apps/client/src/app/pages/portfolio/fire/fire-page.component.ts

@ -1,6 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfFireCalculatorComponent } from '@ghostfolio/ui/fire-calculator';
@ -15,6 +12,10 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../../services/data.service';
import { ImpersonationStorageService } from '../../../services/impersonation-storage.service';
import { UserService } from '../../../services/user/user.service';
@Component({
imports: [
GfFireCalculatorComponent,

3
apps/client/src/app/pages/portfolio/fire/fire-page.routes.ts

@ -1,7 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfFirePageComponent } from './fire-page.component';
export const routes: Routes = [

3
apps/client/src/app/pages/portfolio/portfolio-page.component.ts

@ -1,4 +1,3 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
@ -17,6 +16,8 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page has-tabs' },
imports: [MatTabsModule, RouterModule],

2
apps/client/src/app/pages/portfolio/portfolio-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { PortfolioPageComponent } from './portfolio-page.component';
export const routes: Routes = [

9
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts

@ -1,8 +1,4 @@
import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto';
import { GfRulesComponent } from '@ghostfolio/client/components/rules/rules.component';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
PortfolioReportResponse,
PortfolioReportRule
@ -23,6 +19,11 @@ import {
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject, takeUntil } from 'rxjs';
import { GfRulesComponent } from '../../../components/rules/rules.component';
import { DataService } from '../../../services/data.service';
import { ImpersonationStorageService } from '../../../services/impersonation-storage.service';
import { UserService } from '../../../services/user/user.service';
@Component({
imports: [
GfPremiumIndicatorComponent,

3
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.routes.ts

@ -1,7 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { GfXRayPageComponent } from './x-ray-page.component';
export const routes: Routes = [

7
apps/client/src/app/pages/pricing/pricing-page.component.ts

@ -1,6 +1,3 @@
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -31,6 +28,10 @@ import { StripeService } from 'ngx-stripe';
import { Subject } from 'rxjs';
import { catchError, switchMap, takeUntil } from 'rxjs/operators';
import { NotificationService } from '../../core/notification/notification.service';
import { DataService } from '../../services/data.service';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page' },
imports: [

3
apps/client/src/app/pages/pricing/pricing-page.routes.ts

@ -1,7 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { GfPricingPageComponent } from './pricing-page.component';
export const routes: Routes = [

3
apps/client/src/app/pages/public/public-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UNKNOWN_KEY } from '@ghostfolio/common/config';
import { prettifySymbol } from '@ghostfolio/common/helper';
import {
@ -32,6 +31,8 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { EMPTY, Subject } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
@Component({
host: { class: 'page' },
imports: [

3
apps/client/src/app/pages/public/public-page.routes.ts

@ -1,7 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { GfPublicPageComponent } from './public-page.component';
export const routes: Routes = [

6
apps/client/src/app/pages/register/register-page.component.ts

@ -1,6 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { InternetIdentityService } from '@ghostfolio/client/services/internet-identity.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { InfoItem, LineChartItem } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfLogoComponent } from '@ghostfolio/ui/logo';
@ -18,6 +15,9 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../services/data.service';
import { InternetIdentityService } from '../../services/internet-identity.service';
import { TokenStorageService } from '../../services/token-storage.service';
import { UserAccountRegistrationDialogParams } from './user-account-registration-dialog/interfaces/interfaces';
import { GfUserAccountRegistrationDialogComponent } from './user-account-registration-dialog/user-account-registration-dialog.component';

2
apps/client/src/app/pages/register/register-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { GfRegisterPageComponent } from './register-page.component';
export const routes: Routes = [

2
apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { ClipboardModule } from '@angular/cdk/clipboard';
@ -30,6 +29,7 @@ import {
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DataService } from '../../../services/data.service';
import { UserAccountRegistrationDialogParams } from './interfaces/interfaces';
@Component({

3
apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -6,6 +5,8 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Component, OnInit } from '@angular/core';
import { RouterModule } from '@angular/router';
import { DataService } from '../../../services/data.service';
@Component({
imports: [RouterModule],
selector: 'gf-resources-glossary',

2
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.routes.ts

@ -1,9 +1,9 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../../core/auth.guard';
import { PersonalFinanceToolsPageComponent } from './personal-finance-tools-page.component';
export const routes: Routes = [

3
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts

@ -1,4 +1,3 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Product } from '@ghostfolio/common/interfaces';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
@ -8,6 +7,8 @@ import { Component, OnInit } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { ActivatedRoute, RouterModule } from '@angular/router';
import { DataService } from '../../../services/data.service';
@Component({
host: { class: 'page' },
imports: [MatButtonModule, RouterModule],

2
apps/client/src/app/pages/resources/resources-page.routes.ts

@ -1,8 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { AuthGuard } from '../../core/auth.guard';
import { ResourcesPageComponent } from './resources-page.component';
export const routes: Routes = [

3
apps/client/src/app/pages/user-account/user-account-page.component.ts

@ -1,4 +1,3 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
@ -17,6 +16,8 @@ import { diamondOutline, keyOutline, settingsOutline } from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject, takeUntil } from 'rxjs';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page has-tabs' },
imports: [IonIcon, MatTabsModule, RouterModule],

8
apps/client/src/app/pages/user-account/user-account-page.routes.ts

@ -1,11 +1,11 @@
import { GfUserAccountAccessComponent } from '@ghostfolio/client/components/user-account-access/user-account-access.component';
import { GfUserAccountMembershipComponent } from '@ghostfolio/client/components/user-account-membership/user-account-membership.component';
import { GfUserAccountSettingsComponent } from '@ghostfolio/client/components/user-account-settings/user-account-settings.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfUserAccountAccessComponent } from '../../components/user-account-access/user-account-access.component';
import { GfUserAccountMembershipComponent } from '../../components/user-account-membership/user-account-membership.component';
import { GfUserAccountSettingsComponent } from '../../components/user-account-settings/user-account-settings.component';
import { AuthGuard } from '../../core/auth.guard';
import { GfUserAccountPageComponent } from './user-account-page.component';
export const routes: Routes = [

5
apps/client/src/app/pages/webauthn/webauthn-page.component.ts

@ -1,5 +1,3 @@
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { GfLogoComponent } from '@ghostfolio/ui/logo';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
@ -9,6 +7,9 @@ import { Router } from '@angular/router';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { TokenStorageService } from '../../services/token-storage.service';
import { WebAuthnService } from '../../services/web-authn.service';
@Component({
host: { class: 'page' },
imports: [GfLogoComponent, MatButtonModule, MatProgressSpinnerModule],

3
apps/client/src/app/pages/zen/zen-page.component.ts

@ -1,4 +1,3 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
@ -13,6 +12,8 @@ import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { UserService } from '../../services/user/user.service';
@Component({
host: { class: 'page has-tabs' },
imports: [CommonModule, IonIcon, MatTabsModule, RouterModule],

6
apps/client/src/app/pages/zen/zen-page.routes.ts

@ -1,10 +1,10 @@
import { GfHomeHoldingsComponent } from '@ghostfolio/client/components/home-holdings/home-holdings.component';
import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfHomeHoldingsComponent } from '../../components/home-holdings/home-holdings.component';
import { GfHomeOverviewComponent } from '../../components/home-overview/home-overview.component';
import { AuthGuard } from '../../core/auth.guard';
import { GfZenPageComponent } from './zen-page.component';
export const routes: Routes = [

3
apps/client/src/app/services/token-storage.service.ts

@ -1,9 +1,8 @@
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { Injectable } from '@angular/core';
import { KEY_TOKEN } from './settings-storage.service';
import { UserService } from './user/user.service';
import { WebAuthnService } from './web-authn.service';
@Injectable({
providedIn: 'root'

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save