diff --git a/packages/desktop-client/e2e/reports.test.js b/packages/desktop-client/e2e/reports.test.js
index dc052e0698f..6d57c77a5e0 100644
--- a/packages/desktop-client/e2e/reports.test.js
+++ b/packages/desktop-client/e2e/reports.test.js
@@ -30,7 +30,7 @@ test.describe.parallel('Reports', () => {
test('loads net worth and cash flow reports', async () => {
const reports = await reportsPage.getAvailableReportList();
- expect(reports).toEqual(['Net Worth', 'Cash Flow']);
+ expect(reports).toEqual(['Net Worth', 'Cash Flow', 'Monthly Spending']);
await expect(page).toMatchThemeScreenshots();
});
diff --git a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png
index 8e868b42bd5..693e47ae3f8 100644
Binary files a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png and b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png differ
diff --git a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png
index d5344e30dde..f8d7f531f39 100644
Binary files a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png and b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png differ
diff --git a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png
index fdaf3478c8d..f86c357494f 100644
Binary files a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png and b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png differ
diff --git a/packages/desktop-client/src/components/reports/Overview.tsx b/packages/desktop-client/src/components/reports/Overview.tsx
index 36692aea017..c21661e9567 100644
--- a/packages/desktop-client/src/components/reports/Overview.tsx
+++ b/packages/desktop-client/src/components/reports/Overview.tsx
@@ -80,7 +80,6 @@ export function Overview() {
sessionStorage.setItem('url', location.pathname);
const isDashboardsFeatureEnabled = useFeatureFlag('dashboards');
- const spendingReportFeatureFlag = useFeatureFlag('spendingReport');
const baseLayout = widgets
.map(widget => ({
@@ -103,25 +102,7 @@ export function Overview() {
return true;
});
- const layout =
- spendingReportFeatureFlag &&
- !isDashboardsFeatureEnabled &&
- !baseLayout.find(({ type }) => type === 'spending-card')
- ? [
- ...baseLayout,
- {
- i: 'spending',
- type: 'spending-card' as const,
- x: 0,
- y: Math.max(...baseLayout.map(({ y }) => y), 0) + 2,
- w: 4,
- h: 2,
- minW: 3,
- minH: 2,
- meta: null,
- },
- ]
- : baseLayout;
+ const layout = baseLayout;
const closeNotifications = () => {
dispatch(removeNotification('import'));
@@ -407,14 +388,10 @@ export function Overview() {
name: 'net-worth-card' as const,
text: t('Net worth graph'),
},
- ...(spendingReportFeatureFlag
- ? [
- {
- name: 'spending-card' as const,
- text: t('Spending analysis'),
- },
- ]
- : []),
+ {
+ name: 'spending-card' as const,
+ text: t('Spending analysis'),
+ },
{
name: 'markdown-card' as const,
text: t('Text widget'),
diff --git a/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx b/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx
index 306d92dca64..fb5407f237d 100644
--- a/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx
+++ b/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx
@@ -1,5 +1,5 @@
import React, { useState, useMemo } from 'react';
-import { Trans, useTranslation } from 'react-i18next';
+import { useTranslation } from 'react-i18next';
import * as monthUtils from 'loot-core/src/shared/months';
import { amountToCurrency } from 'loot-core/src/shared/util';
@@ -20,8 +20,6 @@ import { calculateSpendingReportTimeRange } from '../reportRanges';
import { createSpendingSpreadsheet } from '../spreadsheets/spending-spreadsheet';
import { useReport } from '../useReport';
-import { MissingReportCard } from './MissingReportCard';
-
type SpendingCardProps = {
widgetId: string;
isEditing?: boolean;
@@ -70,17 +68,6 @@ export function SpendingCard({
data.intervalData[todayDay][selection] -
data.intervalData[todayDay].compare;
- const spendingReportFeatureFlag = useFeatureFlag('spendingReport');
-
- if (!spendingReportFeatureFlag) {
- return (
-
-
- The experimental spending report feature has not been enabled.
-
-
- );
- }
return (
-
- Monthly spending report
-
-
diff --git a/packages/desktop-client/src/hooks/useFeatureFlag.ts b/packages/desktop-client/src/hooks/useFeatureFlag.ts
index c733df9bcdf..fb4e205b2e7 100644
--- a/packages/desktop-client/src/hooks/useFeatureFlag.ts
+++ b/packages/desktop-client/src/hooks/useFeatureFlag.ts
@@ -5,7 +5,6 @@ import { useSyncedPref } from './useSyncedPref';
const DEFAULT_FEATURE_FLAG_STATE: Record = {
reportBudget: false,
goalTemplatesEnabled: false,
- spendingReport: false,
dashboards: false,
actionTemplating: false,
upcomingLengthAdjustment: false,
diff --git a/packages/loot-core/migrations/1722804019000_create_dashboard_table.js b/packages/loot-core/migrations/1722804019000_create_dashboard_table.js
index 228b85ede0d..fbed322fce5 100644
--- a/packages/loot-core/migrations/1722804019000_create_dashboard_table.js
+++ b/packages/loot-core/migrations/1722804019000_create_dashboard_table.js
@@ -17,7 +17,8 @@ export default async function runMigration(db) {
INSERT INTO dashboard (id, type, width, height, x, y)
VALUES
('${uuidv4()}','net-worth-card', 8, 2, 0, 0),
- ('${uuidv4()}', 'cash-flow-card', 4, 2, 8, 0);
+ ('${uuidv4()}', 'cash-flow-card', 4, 2, 8, 0),
+ ('${uuidv4()}', 'spending-card', 4, 2, 0, 2);
`);
// Add custom reports to the dashboard
diff --git a/packages/loot-core/src/shared/dashboard.ts b/packages/loot-core/src/shared/dashboard.ts
index 1479d9b3b4b..e5fbe9da282 100644
--- a/packages/loot-core/src/shared/dashboard.ts
+++ b/packages/loot-core/src/shared/dashboard.ts
@@ -17,4 +17,12 @@ export const DEFAULT_DASHBOARD_STATE: NewWidget[] = [
y: 0,
meta: null,
},
+ {
+ type: 'spending-card',
+ width: 4,
+ height: 2,
+ x: 0,
+ y: 2,
+ meta: null,
+ },
];
diff --git a/packages/loot-core/src/types/prefs.d.ts b/packages/loot-core/src/types/prefs.d.ts
index 8678cb0218c..5d695db083f 100644
--- a/packages/loot-core/src/types/prefs.d.ts
+++ b/packages/loot-core/src/types/prefs.d.ts
@@ -2,7 +2,6 @@ export type FeatureFlag =
| 'dashboards'
| 'reportBudget'
| 'goalTemplatesEnabled'
- | 'spendingReport'
| 'actionTemplating'
| 'upcomingLengthAdjustment';
diff --git a/upcoming-release-notes/3611.md b/upcoming-release-notes/3611.md
new file mode 100644
index 00000000000..a2ab592631c
--- /dev/null
+++ b/upcoming-release-notes/3611.md
@@ -0,0 +1,6 @@
+---
+category: Maintenance
+authors: [carkom]
+---
+
+Removing feature flag from spending reports.