Browse Source

Merge remote-tracking branch 'origin/main' into feature/enable-strict-null-checks-in-ui

pull/6264/head
Kenrick Tandrian 2 weeks ago
parent
commit
8ea92cc2cb
  1. 5
      libs/ui/src/lib/activities-filter/activities-filter.component.ts
  2. 26
      libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
  3. 12
      libs/ui/src/lib/services/admin.service.ts
  4. 33
      libs/ui/src/lib/services/data.service.ts

5
libs/ui/src/lib/activities-filter/activities-filter.component.ts

@ -7,6 +7,7 @@ import {
CUSTOM_ELEMENTS_SCHEMA,
ChangeDetectionStrategy,
Component,
DestroyRef,
ElementRef,
Input,
OnChanges,
@ -69,9 +70,9 @@ export class GfActivitiesFilterComponent implements OnChanges {
protected selectedFilters: Filter[] = [];
protected readonly separatorKeysCodes: number[] = [ENTER, COMMA];
public constructor() {
public constructor(private destroyRef: DestroyRef) {
this.searchControl.valueChanges
.pipe(takeUntilDestroyed())
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((filterOrSearchTerm) => {
if (filterOrSearchTerm) {
const searchTerm =

26
libs/ui/src/lib/fire-calculator/fire-calculator.component.ts

@ -12,6 +12,7 @@ import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
DestroyRef,
ElementRef,
Input,
OnChanges,
@ -123,6 +124,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
public constructor(
private changeDetectorRef: ChangeDetectorRef,
private destroyRef: DestroyRef,
private fireCalculatorService: FireCalculatorService,
private formBuilder: FormBuilder
) {
@ -135,13 +137,13 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
);
this.calculatorForm.valueChanges
.pipe(takeUntilDestroyed())
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
this.initialize();
});
this.calculatorForm.valueChanges
.pipe(debounceTime(500), takeUntilDestroyed())
.pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
const { projectedTotalAmount, retirementDate } =
this.calculatorForm.getRawValue();
@ -156,7 +158,10 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
this.calculatorForm
.get('annualInterestRate')
?.valueChanges.pipe(debounceTime(500), takeUntilDestroyed())
?.valueChanges.pipe(
debounceTime(500),
takeUntilDestroyed(this.destroyRef)
)
.subscribe((annualInterestRate) => {
if (annualInterestRate !== null) {
this.annualInterestRateChanged.emit(annualInterestRate);
@ -164,7 +169,10 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
});
this.calculatorForm
.get('paymentPerPeriod')
?.valueChanges.pipe(debounceTime(500), takeUntilDestroyed())
?.valueChanges.pipe(
debounceTime(500),
takeUntilDestroyed(this.destroyRef)
)
.subscribe((savingsRate) => {
if (savingsRate !== null) {
this.savingsRateChanged.emit(savingsRate);
@ -172,7 +180,10 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
});
this.calculatorForm
.get('projectedTotalAmount')
?.valueChanges.pipe(debounceTime(500), takeUntilDestroyed())
?.valueChanges.pipe(
debounceTime(500),
takeUntilDestroyed(this.destroyRef)
)
.subscribe((projectedTotalAmount) => {
if (projectedTotalAmount !== null) {
this.projectedTotalAmountChanged.emit(projectedTotalAmount);
@ -180,7 +191,10 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy {
});
this.calculatorForm
.get('retirementDate')
?.valueChanges.pipe(debounceTime(500), takeUntilDestroyed())
?.valueChanges.pipe(
debounceTime(500),
takeUntilDestroyed(this.destroyRef)
)
.subscribe((retirementDate) => {
if (retirementDate !== null) {
this.retirementDateChanged.emit(retirementDate);

12
libs/ui/src/lib/services/admin.service.ts

@ -21,11 +21,11 @@ import {
Filter
} from '@ghostfolio/common/interfaces';
import { DateRange } from '@ghostfolio/common/types';
import { GF_ENVIRONMENT, GfEnvironment } from '@ghostfolio/ui/environment';
import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment';
import { DataService } from '@ghostfolio/ui/services';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core';
import { Injectable, inject } from '@angular/core';
import { SortDirection } from '@angular/material/sort';
import { DataSource, MarketData, Platform } from '@prisma/client';
import { JobStatus } from 'bull';
@ -35,11 +35,9 @@ import { isNumber } from 'lodash';
providedIn: 'root'
})
export class AdminService {
public constructor(
private dataService: DataService,
@Inject(GF_ENVIRONMENT) private environment: GfEnvironment,
private http: HttpClient
) {}
private readonly dataService = inject(DataService);
private readonly environment = inject(GF_ENVIRONMENT);
private readonly http = inject(HttpClient);
public addAssetProfile({ dataSource, symbol }: AssetProfileIdentifier) {
return this.http.post<void>(

33
libs/ui/src/lib/services/data.service.ts

@ -65,16 +65,19 @@ import type {
import { translate } from '@ghostfolio/ui/i18n';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Injectable, inject } from '@angular/core';
import { SortDirection } from '@angular/material/sort';
import { utc } from '@date-fns/utc';
import {
Access as AccessModel,
Account,
AccountBalance,
DataSource,
MarketData,
Order,
Tag
SymbolProfile,
Tag,
User as UserModel
} from '@prisma/client';
import { format, parseISO } from 'date-fns';
import { cloneDeep, groupBy, isNumber } from 'lodash';
@ -85,7 +88,7 @@ import { map } from 'rxjs/operators';
providedIn: 'root'
})
export class DataService {
public constructor(private http: HttpClient) {}
private readonly http = inject(HttpClient);
public buildFiltersAsQueryParams({ filters }: { filters?: Filter[] }) {
let params = new HttpParams();
@ -308,45 +311,47 @@ export class DataService {
}
public deleteAccess(aId: string) {
return this.http.delete<any>(`/api/v1/access/${aId}`);
return this.http.delete<AccessModel>(`/api/v1/access/${aId}`);
}
public deleteAccount(aId: string) {
return this.http.delete<any>(`/api/v1/account/${aId}`);
return this.http.delete<Account>(`/api/v1/account/${aId}`);
}
public deleteAccountBalance(aId: string) {
return this.http.delete<any>(`/api/v1/account-balance/${aId}`);
return this.http.delete<AccountBalance>(`/api/v1/account-balance/${aId}`);
}
public deleteActivities({ filters }) {
public deleteActivities({ filters }: { filters?: Filter[] }) {
const params = this.buildFiltersAsQueryParams({ filters });
return this.http.delete<any>('/api/v1/activities', { params });
return this.http.delete<number>('/api/v1/activities', { params });
}
public deleteActivity(aId: string) {
return this.http.delete<any>(`/api/v1/activities/${aId}`);
return this.http.delete<Order>(`/api/v1/activities/${aId}`);
}
public deleteBenchmark({ dataSource, symbol }: AssetProfileIdentifier) {
return this.http.delete<any>(`/api/v1/benchmarks/${dataSource}/${symbol}`);
return this.http.delete<Partial<SymbolProfile>>(
`/api/v1/benchmarks/${dataSource}/${symbol}`
);
}
public deleteOwnUser(aData: DeleteOwnUserDto) {
return this.http.delete<any>(`/api/v1/user`, { body: aData });
return this.http.delete<UserModel>(`/api/v1/user`, { body: aData });
}
public deleteTag(aId: string) {
return this.http.delete<void>(`/api/v1/tags/${aId}`);
return this.http.delete<Tag>(`/api/v1/tags/${aId}`);
}
public deleteUser(aId: string) {
return this.http.delete<any>(`/api/v1/user/${aId}`);
return this.http.delete<UserModel>(`/api/v1/user/${aId}`);
}
public deleteWatchlistItem({ dataSource, symbol }: AssetProfileIdentifier) {
return this.http.delete<any>(`/api/v1/watchlist/${dataSource}/${symbol}`);
return this.http.delete<void>(`/api/v1/watchlist/${dataSource}/${symbol}`);
}
public fetchAccesses() {

Loading…
Cancel
Save