Browse Source

feat(client): resolve template errors

pull/8108/head
KenTandrian 5 days ago
parent
commit
ba8007d69c
  1. 15
      apps/client/src/app/components/markets/markets.component.ts
  2. 2
      apps/client/src/app/components/markets/markets.html
  3. 2
      apps/client/src/app/components/rule/rule-settings-dialog/interfaces/interfaces.ts
  4. 26
      apps/client/src/app/components/rule/rule.component.ts
  5. 11
      apps/client/src/app/components/rules/rules.component.ts
  6. 2
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
  7. 2
      apps/client/src/app/pages/portfolio/fire/fire-page.html
  8. 4
      apps/client/src/app/pages/pricing/pricing-page.html

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

@ -3,8 +3,8 @@ import { DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { resetHours } from '@ghostfolio/common/helper'; import { resetHours } from '@ghostfolio/common/helper';
import { import {
Benchmark, Benchmark,
HistoricalDataItem,
InfoItem, InfoItem,
LineChartItem,
MarketDataOfMarketsResponse, MarketDataOfMarketsResponse,
User User
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
@ -66,7 +66,7 @@ export class GfMarketsComponent implements OnInit {
protected fearAndGreedIndexMode: FearAndGreedIndexMode = 'STOCKS'; protected fearAndGreedIndexMode: FearAndGreedIndexMode = 'STOCKS';
protected hasPermissionToAccessFearAndGreedIndex: boolean; protected hasPermissionToAccessFearAndGreedIndex: boolean;
protected hasPermissionToReadMarketDataOfMarkets: boolean; protected hasPermissionToReadMarketDataOfMarkets: boolean;
protected historicalDataItems: HistoricalDataItem[]; protected historicalDataItems: LineChartItem[];
protected isLoadingFearAndGreedIndex = true; protected isLoadingFearAndGreedIndex = true;
protected user: User; protected user: User;
@ -159,11 +159,16 @@ export class GfMarketsComponent implements OnInit {
this.fearAndGreedIndexData[this.fearAndGreedIndexMode]?.marketPrice; this.fearAndGreedIndexData[this.fearAndGreedIndexMode]?.marketPrice;
this.historicalDataItems = [ this.historicalDataItems = [
...(this.fearAndGreedIndexData[this.fearAndGreedIndexMode] ...(
?.historicalData ?? []), this.fearAndGreedIndexData[this.fearAndGreedIndexMode]
?.historicalData ?? []
).map(({ date, value }) => ({
date,
value: value ?? 0
})),
{ {
date: resetHours(new Date()).toISOString(), date: resetHours(new Date()).toISOString(),
value: this.fearAndGreedIndex value: this.fearAndGreedIndex ?? 0
} }
]; ];
} }

2
apps/client/src/app/components/markets/markets.html

@ -29,7 +29,7 @@
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[historicalDataItems]="historicalDataItems" [historicalDataItems]="historicalDataItems"
[isAnimated]="true" [isAnimated]="true"
[locale]="user?.settings?.locale || undefined" [locale]="user?.settings?.locale ?? DEFAULT_LOCALE"
[showXAxis]="true" [showXAxis]="true"
[showYAxis]="true" [showYAxis]="true"
[yMax]="100" [yMax]="100"

2
apps/client/src/app/components/rule/rule-settings-dialog/interfaces/interfaces.ts

@ -5,7 +5,7 @@ import {
export interface RuleSettingsDialogParams { export interface RuleSettingsDialogParams {
categoryName: string; categoryName: string;
locale: string; locale?: string;
rule: PortfolioReportRule; rule: PortfolioReportRule;
settings: XRayRulesSettings['AccountClusterRiskCurrentInvestment']; settings: XRayRulesSettings['AccountClusterRiskCurrentInvestment'];
} }

26
apps/client/src/app/components/rule/rule.component.ts

@ -8,11 +8,10 @@ import {
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
Component, Component,
computed,
DestroyRef, DestroyRef,
EventEmitter,
Input, Input,
OnInit, output
Output
} from '@angular/core'; } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
@ -41,17 +40,20 @@ import { GfRuleSettingsDialogComponent } from './rule-settings-dialog/rule-setti
styleUrls: ['./rule.component.scss'], styleUrls: ['./rule.component.scss'],
templateUrl: './rule.component.html' templateUrl: './rule.component.html'
}) })
export class GfRuleComponent implements OnInit { export class GfRuleComponent {
@Input() categoryName: string; @Input() categoryName: string;
@Input() hasPermissionToUpdateUserSettings: boolean; @Input() hasPermissionToUpdateUserSettings: boolean;
@Input() isLoading: boolean; @Input() isLoading: boolean;
@Input() locale: string; @Input() locale?: string;
@Input() rule: PortfolioReportRule; @Input() rule: PortfolioReportRule;
@Input() settings: XRayRulesSettings['AccountClusterRiskCurrentInvestment']; @Input() settings: XRayRulesSettings['AccountClusterRiskCurrentInvestment'];
@Output() ruleUpdated = new EventEmitter<UpdateUserSettingDto>(); public readonly ruleUpdated = output<UpdateUserSettingDto>();
private readonly deviceType = computed(() => {
return this.deviceDetectorService.deviceInfo().deviceType;
});
private deviceType: string;
public constructor( public constructor(
private destroyRef: DestroyRef, private destroyRef: DestroyRef,
private deviceDetectorService: DeviceDetectorService, private deviceDetectorService: DeviceDetectorService,
@ -67,11 +69,7 @@ export class GfRuleComponent implements OnInit {
}); });
} }
public ngOnInit() { protected onCustomizeRule(rule: PortfolioReportRule) {
this.deviceType = this.deviceDetectorService.getDeviceInfo().deviceType;
}
public onCustomizeRule(rule: PortfolioReportRule) {
const dialogRef = this.dialog.open< const dialogRef = this.dialog.open<
GfRuleSettingsDialogComponent, GfRuleSettingsDialogComponent,
RuleSettingsDialogParams RuleSettingsDialogParams
@ -82,7 +80,7 @@ export class GfRuleComponent implements OnInit {
locale: this.locale, locale: this.locale,
settings: this.settings settings: this.settings
}, },
width: this.deviceType === 'mobile' ? '100vw' : '50rem' width: this.deviceType() === 'mobile' ? '100vw' : '50rem'
}); });
dialogRef dialogRef
@ -99,7 +97,7 @@ export class GfRuleComponent implements OnInit {
}); });
} }
public onUpdateRule(rule: PortfolioReportRule) { protected onUpdateRule(rule: PortfolioReportRule) {
const settings: UpdateUserSettingDto = { const settings: UpdateUserSettingDto = {
xRayRules: { xRayRules: {
[rule.key]: { isActive: !rule.isActive } [rule.key]: { isActive: !rule.isActive }

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

@ -8,9 +8,8 @@ import {
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
Component, Component,
EventEmitter,
Input, Input,
Output output
} from '@angular/core'; } from '@angular/core';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card'; import { MatCardModule } from '@angular/material/card';
@ -26,13 +25,13 @@ export class GfRulesComponent {
@Input() categoryName: string; @Input() categoryName: string;
@Input() hasPermissionToUpdateUserSettings: boolean; @Input() hasPermissionToUpdateUserSettings: boolean;
@Input() isLoading: boolean; @Input() isLoading: boolean;
@Input() locale: string; @Input() locale?: string;
@Input() rules: PortfolioReportRule[]; @Input() rules: PortfolioReportRule[];
@Input() settings: XRayRulesSettings; @Input() settings?: XRayRulesSettings;
@Output() rulesUpdated = new EventEmitter<UpdateUserSettingDto>(); public readonly rulesUpdated = output<UpdateUserSettingDto>();
public onRuleUpdated(event: UpdateUserSettingDto) { protected onRuleUpdated(event: UpdateUserSettingDto) {
this.rulesUpdated.emit(event); this.rulesUpdated.emit(event);
} }
} }

2
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html

@ -128,14 +128,12 @@
[hasPermissionToCreateActivity]="false" [hasPermissionToCreateActivity]="false"
[hasPermissionToDeleteActivity]="false" [hasPermissionToDeleteActivity]="false"
[hasPermissionToExportActivities]="false" [hasPermissionToExportActivities]="false"
[hasPermissionToFilter]="false"
[hasPermissionToOpenDetails]="false" [hasPermissionToOpenDetails]="false"
[locale]="data?.user?.settings?.locale" [locale]="data?.user?.settings?.locale"
[pageIndex]="pageIndex" [pageIndex]="pageIndex"
[pageSize]="pageSize" [pageSize]="pageSize"
[showActions]="false" [showActions]="false"
[showCheckbox]="true" [showCheckbox]="true"
[showSymbolColumn]="false"
[sortColumn]="sortColumn" [sortColumn]="sortColumn"
[sortDirection]="sortDirection" [sortDirection]="sortDirection"
[sortDisabled]="true" [sortDisabled]="true"

2
apps/client/src/app/pages/portfolio/fire/fire-page.html

@ -178,7 +178,7 @@
[isPercent]="true" [isPercent]="true"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[precision]="2" [precision]="2"
[value]="user?.settings?.annualInterestRate / 100" [value]="(user?.settings?.annualInterestRate ?? 0) / 100"
/></span> /></span>
annual interest rate.</ng-container annual interest rate.</ng-container
> >

4
apps/client/src/app/pages/pricing/pricing-page.html

@ -258,7 +258,8 @@
</ul> </ul>
</div> </div>
<p i18n>Fully managed Ghostfolio cloud offering.</p> <p i18n>Fully managed Ghostfolio cloud offering.</p>
<p class="h5 text-right" [hidden]="!price"> @if (price) {
<p class="h5 text-right">
<span class="font-weight-normal"> <span class="font-weight-normal">
@if (coupon) { @if (coupon) {
<del class="text-muted" <del class="text-muted"
@ -273,6 +274,7 @@
<span i18n>per year</span></span <span i18n>per year</span></span
> >
</p> </p>
}
@if ( @if (
hasPermissionToUpdateUserSettings && hasPermissionToUpdateUserSettings &&
user?.subscription?.type === 'Basic' user?.subscription?.type === 'Basic'

Loading…
Cancel
Save