From 2c3e2a34fd34165bdcb94ac2bc703387588c3887 Mon Sep 17 00:00:00 2001 From: Aurora-Flipped <1689454546@qq.com> Date: Tue, 5 May 2026 04:28:19 +0800 Subject: [PATCH] Fix/spending report date range save (#7672) * Fix saved spending report date range * Add release note --- .../components/reports/reportRanges.test.ts | 50 +++++++++++++++++++ .../src/components/reports/reportRanges.ts | 7 ++- upcoming-release-notes/7672.md | 6 +++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 packages/desktop-client/src/components/reports/reportRanges.test.ts create mode 100644 upcoming-release-notes/7672.md diff --git a/packages/desktop-client/src/components/reports/reportRanges.test.ts b/packages/desktop-client/src/components/reports/reportRanges.test.ts new file mode 100644 index 0000000000..c21f434265 --- /dev/null +++ b/packages/desktop-client/src/components/reports/reportRanges.test.ts @@ -0,0 +1,50 @@ +import { describe, expect, it } from 'vitest'; + +import { calculateSpendingReportTimeRange } from './reportRanges'; + +// In test mode, monthUtils.currentMonth() returns '2017-01' +describe('calculateSpendingReportTimeRange', () => { + it('preserves the saved compare month for live average reports', () => { + const [compare, compareTo] = calculateSpendingReportTimeRange({ + compare: '2016-12', + isLive: true, + mode: 'average', + }); + + expect(compare).toBe('2016-12'); + expect(compareTo).toBe('2016-12'); + }); + + it('preserves the saved compare month for live budget reports', () => { + const [compare, compareTo] = calculateSpendingReportTimeRange({ + compare: '2016-12', + isLive: true, + mode: 'budget', + }); + + expect(compare).toBe('2016-12'); + expect(compareTo).toBe('2016-12'); + }); + + it('preserves the saved compare months for live single month reports', () => { + const [compare, compareTo] = calculateSpendingReportTimeRange({ + compare: '2016-12', + compareTo: '2016-11', + isLive: true, + mode: 'single-month', + }); + + expect(compare).toBe('2016-12'); + expect(compareTo).toBe('2016-11'); + }); + + it('defaults live average reports to the current month without a saved compare month', () => { + const [compare, compareTo] = calculateSpendingReportTimeRange({ + isLive: true, + mode: 'average', + }); + + expect(compare).toBe('2017-01'); + expect(compareTo).toBe('2017-01'); + }); +}); diff --git a/packages/desktop-client/src/components/reports/reportRanges.ts b/packages/desktop-client/src/components/reports/reportRanges.ts index e8ba61642c..6766eaf722 100644 --- a/packages/desktop-client/src/components/reports/reportRanges.ts +++ b/packages/desktop-client/src/components/reports/reportRanges.ts @@ -249,7 +249,12 @@ export function calculateSpendingReportTimeRange({ mode?: 'budget' | 'average' | 'single-month'; }): [string, string] { if (['budget', 'average'].includes(mode) && isLive) { - return [monthUtils.currentMonth(), monthUtils.currentMonth()]; + const month = compare ?? monthUtils.currentMonth(); + return [month, month]; + } + + if (mode === 'single-month' && isLive && compare) { + return [compare, compareTo ?? monthUtils.subMonths(compare, 1)]; } const [start, end] = calculateTimeRange( diff --git a/upcoming-release-notes/7672.md b/upcoming-release-notes/7672.md new file mode 100644 index 0000000000..2e1ef49d8e --- /dev/null +++ b/upcoming-release-notes/7672.md @@ -0,0 +1,6 @@ +--- +category: Bugfixes +authors: [Aurora-Flipped] +--- + +Fixed Spending reports not preserving saved date range selections.