Browse Source

Merge branch 'main' into Task/refactor-landing-page-to-standalone

pull/5400/head
Thomas Kaul 3 months ago
committed by GitHub
parent
commit
a34d2a0976
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      CHANGELOG.md
  2. 8
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.module.ts
  3. 10
      apps/client/src/app/components/dialog-footer/dialog-footer.component.ts
  4. 14
      apps/client/src/app/components/dialog-footer/dialog-footer.module.ts
  5. 11
      apps/client/src/app/components/dialog-header/dialog-header.component.ts
  6. 14
      apps/client/src/app/components/dialog-header/dialog-header.module.ts
  7. 8
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  8. 4
      apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts
  9. 8
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  10. 8
      libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts
  11. 9
      test/import/ok/500-activities.json
  12. 9
      test/import/ok/derived-currency.json
  13. 10
      test/import/ok/sample.json
  14. 10
      test/import/ok/vti-buy-long-history.json
  15. 7
      test/import/ok/without-accounts.json

2
CHANGELOG.md

@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Refactored the dialog footer component to standalone
- Refactored the dialog header component to standalone
- Refactored the landing page to standalone - Refactored the landing page to standalone
- Refactored the register page to standalone - Refactored the register page to standalone
- Migrated the login with access token dialog from `ngModel` to form control - Migrated the login with access token dialog from `ngModel` to form control

8
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.module.ts

@ -1,5 +1,5 @@
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { GfInvestmentChartModule } from '@ghostfolio/client/components/investment-chart/investment-chart.module'; import { GfInvestmentChartModule } from '@ghostfolio/client/components/investment-chart/investment-chart.module';
import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances'; import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
@ -22,8 +22,8 @@ import { AccountDetailDialog } from './account-detail-dialog.component';
CommonModule, CommonModule,
GfAccountBalancesComponent, GfAccountBalancesComponent,
GfActivitiesTableComponent, GfActivitiesTableComponent,
GfDialogFooterModule, GfDialogFooterComponent,
GfDialogHeaderModule, GfDialogHeaderComponent,
GfHoldingsTableComponent, GfHoldingsTableComponent,
GfInvestmentChartModule, GfInvestmentChartModule,
GfValueComponent, GfValueComponent,

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

@ -5,18 +5,20 @@ import {
Input, Input,
Output Output
} from '@angular/core'; } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { close } from 'ionicons/icons'; import { close } from 'ionicons/icons';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush,
host: { class: 'justify-content-center' }, host: { class: 'justify-content-center' },
imports: [IonIcon, MatButtonModule],
selector: 'gf-dialog-footer', selector: 'gf-dialog-footer',
changeDetection: ChangeDetectionStrategy.OnPush,
templateUrl: './dialog-footer.component.html',
styleUrls: ['./dialog-footer.component.scss'], styleUrls: ['./dialog-footer.component.scss'],
standalone: false templateUrl: './dialog-footer.component.html'
}) })
export class DialogFooterComponent { export class GfDialogFooterComponent {
@Input() deviceType: string; @Input() deviceType: string;
@Output() closeButtonClicked = new EventEmitter<void>(); @Output() closeButtonClicked = new EventEmitter<void>();

14
apps/client/src/app/components/dialog-footer/dialog-footer.module.ts

@ -1,14 +0,0 @@
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { IonIcon } from '@ionic/angular/standalone';
import { DialogFooterComponent } from './dialog-footer.component';
@NgModule({
declarations: [DialogFooterComponent],
exports: [DialogFooterComponent],
imports: [CommonModule, IonIcon, MatButtonModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class GfDialogFooterModule {}

11
apps/client/src/app/components/dialog-header/dialog-header.component.ts

@ -1,3 +1,4 @@
import { CommonModule } from '@angular/common';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
Component, Component,
@ -5,18 +6,20 @@ import {
Input, Input,
Output Output
} from '@angular/core'; } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { close } from 'ionicons/icons'; import { close } from 'ionicons/icons';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush,
host: { class: 'justify-content-center' }, host: { class: 'justify-content-center' },
imports: [CommonModule, IonIcon, MatButtonModule],
selector: 'gf-dialog-header', selector: 'gf-dialog-header',
changeDetection: ChangeDetectionStrategy.OnPush,
templateUrl: './dialog-header.component.html',
styleUrls: ['./dialog-header.component.scss'], styleUrls: ['./dialog-header.component.scss'],
standalone: false templateUrl: './dialog-header.component.html'
}) })
export class DialogHeaderComponent { export class GfDialogHeaderComponent {
@Input() deviceType: string; @Input() deviceType: string;
@Input() position: 'center' | 'left' = 'left'; @Input() position: 'center' | 'left' = 'left';
@Input() title: string; @Input() title: string;

14
apps/client/src/app/components/dialog-header/dialog-header.module.ts

@ -1,14 +0,0 @@
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { IonIcon } from '@ionic/angular/standalone';
import { DialogHeaderComponent } from './dialog-header.component';
@NgModule({
declarations: [DialogHeaderComponent],
exports: [DialogHeaderComponent],
imports: [CommonModule, IonIcon, MatButtonModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class GfDialogHeaderModule {}

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

@ -1,6 +1,6 @@
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { import {
@ -78,8 +78,8 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces';
GfAccountsTableComponent, GfAccountsTableComponent,
GfActivitiesTableComponent, GfActivitiesTableComponent,
GfDataProviderCreditsComponent, GfDataProviderCreditsComponent,
GfDialogFooterModule, GfDialogFooterComponent,
GfDialogHeaderModule, GfDialogHeaderComponent,
GfHistoricalMarketDataEditorComponent, GfHistoricalMarketDataEditorComponent,
GfLineChartComponent, GfLineChartComponent,
GfPortfolioProportionChartComponent, GfPortfolioProportionChartComponent,

4
apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts

@ -9,14 +9,14 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input'; import { MatInputModule } from '@angular/material/input';
import { IonIcon } from '@ionic/angular/standalone'; import { IonIcon } from '@ionic/angular/standalone';
import { GfDialogHeaderModule } from '../dialog-header/dialog-header.module'; import { GfDialogHeaderComponent } from '../dialog-header/dialog-header.component';
import { LoginWithAccessTokenDialog } from './login-with-access-token-dialog.component'; import { LoginWithAccessTokenDialog } from './login-with-access-token-dialog.component';
@NgModule({ @NgModule({
declarations: [LoginWithAccessTokenDialog], declarations: [LoginWithAccessTokenDialog],
imports: [ imports: [
CommonModule, CommonModule,
GfDialogHeaderModule, GfDialogHeaderComponent,
IonIcon, IonIcon,
MatButtonModule, MatButtonModule,
MatCheckboxModule, MatCheckboxModule,

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

@ -2,8 +2,8 @@ import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto'
import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.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 { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { GfFileDropModule } from '@ghostfolio/client/directives/file-drop/file-drop.module'; import { GfFileDropModule } from '@ghostfolio/client/directives/file-drop/file-drop.module';
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module'; import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
@ -58,8 +58,8 @@ import { ImportActivitiesDialogParams } from './interfaces/interfaces';
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [ imports: [
GfActivitiesTableComponent, GfActivitiesTableComponent,
GfDialogFooterModule, GfDialogFooterComponent,
GfDialogHeaderModule, GfDialogHeaderComponent,
GfFileDropModule, GfFileDropModule,
GfSymbolModule, GfSymbolModule,
IonIcon, IonIcon,

8
libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts

@ -1,5 +1,5 @@
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { DATE_FORMAT } from '@ghostfolio/common/helper';
import { import {
@ -33,8 +33,8 @@ import { BenchmarkDetailDialogParams } from './interfaces/interfaces';
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
host: { class: 'd-flex flex-column h-100' }, host: { class: 'd-flex flex-column h-100' },
imports: [ imports: [
GfDialogFooterModule, GfDialogFooterComponent,
GfDialogHeaderModule, GfDialogHeaderComponent,
GfLineChartComponent, GfLineChartComponent,
GfValueComponent, GfValueComponent,
MatDialogModule MatDialogModule

9
test/import/ok/500-activities.json

@ -13,6 +13,8 @@
"platformId": null "platformId": null
} }
], ],
"platforms": [],
"tags": [],
"activities": [ "activities": [
{ {
"accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", "accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
@ -6014,5 +6016,10 @@
"date": "2022-05-06T03:16:21.371059Z", "date": "2022-05-06T03:16:21.371059Z",
"symbol": "AAPL" "symbol": "AAPL"
} }
] ],
"user": {
"settings": {
"currency": "USD"
}
}
} }

9
test/import/ok/derived-currency.json

@ -13,6 +13,8 @@
"platformId": null "platformId": null
} }
], ],
"platforms": [],
"tags": [],
"activities": [ "activities": [
{ {
"accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", "accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
@ -26,5 +28,10 @@
"date": "2024-06-28T00:00:00.000Z", "date": "2024-06-28T00:00:00.000Z",
"symbol": "JSE.JO" "symbol": "JSE.JO"
} }
] ],
"user": {
"settings": {
"currency": "USD"
}
}
} }

10
test/import/ok/sample.json

@ -21,7 +21,7 @@
"id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", "id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
"isExcluded": false, "isExcluded": false,
"name": "My Online Trading Account", "name": "My Online Trading Account",
"platformId": null "platformId": "9da3a8a7-4795-43e3-a6db-ccb914189737"
} }
], ],
"assetProfiles": [ "assetProfiles": [
@ -70,7 +70,13 @@
"url": null "url": null
} }
], ],
"platforms": [], "platforms": [
{
"id": "9da3a8a7-4795-43e3-a6db-ccb914189737",
"name": "Interactive Brokers",
"url": "https://interactivebrokers.com"
}
],
"tags": [], "tags": [],
"activities": [ "activities": [
{ {

10
test/import/ok/vti-buy-long-history.json

@ -3,6 +3,9 @@
"date": "2023-04-29T00:00:00.000Z", "date": "2023-04-29T00:00:00.000Z",
"version": "dev" "version": "dev"
}, },
"accounts": [],
"platforms": [],
"tags": [],
"activities": [ "activities": [
{ {
"fee": 0, "fee": 0,
@ -34,5 +37,10 @@
"date": "2010-01-04T00:00:00.000Z", "date": "2010-01-04T00:00:00.000Z",
"symbol": "VTI" "symbol": "VTI"
} }
] ],
"user": {
"settings": {
"currency": "USD"
}
}
} }

7
test/import/ok/without-accounts.json

@ -44,5 +44,10 @@
"date": "2021-09-16T00:00:00.000Z", "date": "2021-09-16T00:00:00.000Z",
"symbol": "MSFT" "symbol": "MSFT"
} }
] ],
"user": {
"settings": {
"currency": "USD"
}
}
} }

Loading…
Cancel
Save