Bugfix/fix x-axis of investment chart component to adapt on date range change (#3974)
* Fix x-axis of investment chart component to adapt on date range change * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
This commit is contained in:
parent
a0445740c4
commit
3baab79b54
@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## Unreleased
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed an issue with the X-axis scale of the dividend timeline on the analysis page
|
||||||
|
- Fixed an issue with the X-axis scale of the investment timeline on the analysis page
|
||||||
|
- Fixed an issue with the X-axis scale of the portfolio evolution chart on the analysis page
|
||||||
|
|
||||||
## 2.118.0 - 2024-10-23
|
## 2.118.0 - 2024-10-23
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -51,7 +51,6 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
|||||||
@Input() benchmarkDataItems: LineChartItem[] = [];
|
@Input() benchmarkDataItems: LineChartItem[] = [];
|
||||||
@Input() benchmarks: Partial<SymbolProfile>[];
|
@Input() benchmarks: Partial<SymbolProfile>[];
|
||||||
@Input() colorScheme: ColorScheme;
|
@Input() colorScheme: ColorScheme;
|
||||||
@Input() daysInMarket: number;
|
|
||||||
@Input() isLoading: boolean;
|
@Input() isLoading: boolean;
|
||||||
@Input() locale = getLocale();
|
@Input() locale = getLocale();
|
||||||
@Input() performanceDataItems: LineChartItem[];
|
@Input() performanceDataItems: LineChartItem[];
|
||||||
|
@ -39,8 +39,7 @@ import {
|
|||||||
} from 'chart.js';
|
} from 'chart.js';
|
||||||
import 'chartjs-adapter-date-fns';
|
import 'chartjs-adapter-date-fns';
|
||||||
import annotationPlugin from 'chartjs-plugin-annotation';
|
import annotationPlugin from 'chartjs-plugin-annotation';
|
||||||
import { isAfter, isValid, min, subDays } from 'date-fns';
|
import { isAfter } from 'date-fns';
|
||||||
import { first } from 'lodash';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'gf-investment-chart',
|
selector: 'gf-investment-chart',
|
||||||
@ -53,7 +52,6 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
|||||||
@Input() benchmarkDataLabel = '';
|
@Input() benchmarkDataLabel = '';
|
||||||
@Input() colorScheme: ColorScheme;
|
@Input() colorScheme: ColorScheme;
|
||||||
@Input() currency: string;
|
@Input() currency: string;
|
||||||
@Input() daysInMarket: number;
|
|
||||||
@Input() groupBy: GroupBy;
|
@Input() groupBy: GroupBy;
|
||||||
@Input() historicalDataItems: LineChartItem[] = [];
|
@Input() historicalDataItems: LineChartItem[] = [];
|
||||||
@Input() isInPercent = false;
|
@Input() isInPercent = false;
|
||||||
@ -154,23 +152,11 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (this.chartCanvas) {
|
if (this.chartCanvas) {
|
||||||
let scaleXMin: string;
|
|
||||||
|
|
||||||
if (this.daysInMarket) {
|
|
||||||
const minDate = min([
|
|
||||||
parseDate(first(this.investments)?.date),
|
|
||||||
subDays(new Date().setHours(0, 0, 0, 0), this.daysInMarket)
|
|
||||||
]);
|
|
||||||
|
|
||||||
scaleXMin = isValid(minDate) ? minDate.toISOString() : undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.chart) {
|
if (this.chart) {
|
||||||
this.chart.data = chartData;
|
this.chart.data = chartData;
|
||||||
this.chart.options.plugins.tooltip = <unknown>(
|
this.chart.options.plugins.tooltip = <unknown>(
|
||||||
this.getTooltipPluginConfiguration()
|
this.getTooltipPluginConfiguration()
|
||||||
);
|
);
|
||||||
this.chart.options.scales.x.min = scaleXMin;
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
this.savingsRate &&
|
this.savingsRate &&
|
||||||
@ -253,7 +239,6 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
|||||||
grid: {
|
grid: {
|
||||||
display: false
|
display: false
|
||||||
},
|
},
|
||||||
min: scaleXMin,
|
|
||||||
type: 'time',
|
type: 'time',
|
||||||
time: {
|
time: {
|
||||||
tooltipFormat: getDateFormatString(this.locale),
|
tooltipFormat: getDateFormatString(this.locale),
|
||||||
|
@ -15,7 +15,6 @@ import { translate } from '@ghostfolio/ui/i18n';
|
|||||||
|
|
||||||
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
|
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
|
||||||
import { SymbolProfile } from '@prisma/client';
|
import { SymbolProfile } from '@prisma/client';
|
||||||
import { differenceInDays } from 'date-fns';
|
|
||||||
import { isNumber, sortBy } from 'lodash';
|
import { isNumber, sortBy } from 'lodash';
|
||||||
import { DeviceDetectorService } from 'ngx-device-detector';
|
import { DeviceDetectorService } from 'ngx-device-detector';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
@ -32,7 +31,6 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
|
|||||||
public benchmarks: Partial<SymbolProfile>[];
|
public benchmarks: Partial<SymbolProfile>[];
|
||||||
public bottom3: PortfolioPosition[];
|
public bottom3: PortfolioPosition[];
|
||||||
public dateRangeOptions = ToggleComponent.DEFAULT_DATE_RANGE_OPTIONS;
|
public dateRangeOptions = ToggleComponent.DEFAULT_DATE_RANGE_OPTIONS;
|
||||||
public daysInMarket: number;
|
|
||||||
public deviceType: string;
|
public deviceType: string;
|
||||||
public dividendsByGroup: InvestmentItem[];
|
public dividendsByGroup: InvestmentItem[];
|
||||||
public dividendTimelineDataLabel = $localize`Dividend`;
|
public dividendTimelineDataLabel = $localize`Dividend`;
|
||||||
@ -198,7 +196,6 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
|
|||||||
.pipe(takeUntil(this.unsubscribeSubject))
|
.pipe(takeUntil(this.unsubscribeSubject))
|
||||||
.subscribe(({ chart, firstOrderDate, performance }) => {
|
.subscribe(({ chart, firstOrderDate, performance }) => {
|
||||||
this.firstOrderDate = firstOrderDate ?? new Date();
|
this.firstOrderDate = firstOrderDate ?? new Date();
|
||||||
this.daysInMarket = differenceInDays(new Date(), firstOrderDate);
|
|
||||||
|
|
||||||
this.investments = [];
|
this.investments = [];
|
||||||
this.performance = performance;
|
this.performance = performance;
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
[benchmarkDataItems]="benchmarkDataItems"
|
[benchmarkDataItems]="benchmarkDataItems"
|
||||||
[benchmarks]="benchmarks"
|
[benchmarks]="benchmarks"
|
||||||
[colorScheme]="user?.settings?.colorScheme"
|
[colorScheme]="user?.settings?.colorScheme"
|
||||||
[daysInMarket]="daysInMarket"
|
|
||||||
[isLoading]="isLoadingBenchmarkComparator || isLoadingInvestmentChart"
|
[isLoading]="isLoadingBenchmarkComparator || isLoadingInvestmentChart"
|
||||||
[locale]="user?.settings?.locale"
|
[locale]="user?.settings?.locale"
|
||||||
[performanceDataItems]="performanceDataItemsInPercentage"
|
[performanceDataItems]="performanceDataItemsInPercentage"
|
||||||
@ -277,7 +276,6 @@
|
|||||||
[benchmarkDataItems]="investments"
|
[benchmarkDataItems]="investments"
|
||||||
[benchmarkDataLabel]="portfolioEvolutionDataLabel"
|
[benchmarkDataLabel]="portfolioEvolutionDataLabel"
|
||||||
[currency]="user?.settings?.baseCurrency"
|
[currency]="user?.settings?.baseCurrency"
|
||||||
[daysInMarket]="daysInMarket"
|
|
||||||
[historicalDataItems]="performanceDataItems"
|
[historicalDataItems]="performanceDataItems"
|
||||||
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
|
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
|
||||||
[isLoading]="isLoadingInvestmentChart"
|
[isLoading]="isLoadingInvestmentChart"
|
||||||
@ -334,7 +332,6 @@
|
|||||||
[benchmarkDataItems]="investmentsByGroup"
|
[benchmarkDataItems]="investmentsByGroup"
|
||||||
[benchmarkDataLabel]="investmentTimelineDataLabel"
|
[benchmarkDataLabel]="investmentTimelineDataLabel"
|
||||||
[currency]="user?.settings?.baseCurrency"
|
[currency]="user?.settings?.baseCurrency"
|
||||||
[daysInMarket]="daysInMarket"
|
|
||||||
[groupBy]="mode"
|
[groupBy]="mode"
|
||||||
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
|
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
|
||||||
[isLoading]="isLoadingInvestmentTimelineChart"
|
[isLoading]="isLoadingInvestmentTimelineChart"
|
||||||
@ -370,7 +367,6 @@
|
|||||||
[benchmarkDataItems]="dividendsByGroup"
|
[benchmarkDataItems]="dividendsByGroup"
|
||||||
[benchmarkDataLabel]="dividendTimelineDataLabel"
|
[benchmarkDataLabel]="dividendTimelineDataLabel"
|
||||||
[currency]="user?.settings?.baseCurrency"
|
[currency]="user?.settings?.baseCurrency"
|
||||||
[daysInMarket]="daysInMarket"
|
|
||||||
[groupBy]="mode"
|
[groupBy]="mode"
|
||||||
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
|
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
|
||||||
[isLoading]="isLoadingDividendTimelineChart"
|
[isLoading]="isLoadingDividendTimelineChart"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user