diff --git a/packages/desktop-client/e2e/page-models/settings-page.js b/packages/desktop-client/e2e/page-models/settings-page.js
index dcf838cea5b..110dca4665d 100644
--- a/packages/desktop-client/e2e/page-models/settings-page.js
+++ b/packages/desktop-client/e2e/page-models/settings-page.js
@@ -8,27 +8,10 @@ export class SettingsPage {
}
async useBudgetType(budgetType) {
- await this.enableExperimentalFeature('Budget mode toggle');
-
const switchBudgetTypeButton = this.page.getByRole('button', {
name: `Switch to ${budgetType} budgeting`,
});
await switchBudgetTypeButton.click();
}
-
- async enableExperimentalFeature(featureName) {
- const advancedSettingsButton = this.page.getByTestId('advanced-settings');
- await advancedSettingsButton.click();
-
- const experimentalSettingsButton = this.page.getByTestId(
- 'experimental-settings',
- );
- await experimentalSettingsButton.click();
-
- const featureCheckbox = this.page.getByRole('checkbox', {
- name: featureName,
- });
- await featureCheckbox.click();
- }
}
diff --git a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-1-chromium-linux.png b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-1-chromium-linux.png
index b97876c75fb..4c86c135f63 100644
Binary files a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-1-chromium-linux.png and b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-1-chromium-linux.png differ
diff --git a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-2-chromium-linux.png b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-2-chromium-linux.png
index 1ddcee49cc5..da91ec0a42e 100644
Binary files a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-2-chromium-linux.png and b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-2-chromium-linux.png differ
diff --git a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-3-chromium-linux.png b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-3-chromium-linux.png
index e3b70167236..f6dea23498d 100644
Binary files a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-3-chromium-linux.png and b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-3-chromium-linux.png differ
diff --git a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-4-chromium-linux.png b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-4-chromium-linux.png
index 0f3a4799e2d..d8f0b77169d 100644
Binary files a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-4-chromium-linux.png and b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-4-chromium-linux.png differ
diff --git a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-5-chromium-linux.png b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-5-chromium-linux.png
index 58c44784a1c..85d5c95b923 100644
Binary files a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-5-chromium-linux.png and b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-5-chromium-linux.png differ
diff --git a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-6-chromium-linux.png b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-6-chromium-linux.png
index e744a892d65..ea297f12c65 100644
Binary files a/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-6-chromium-linux.png and b/packages/desktop-client/e2e/settings.mobile.test.js-snapshots/Mobile-Settings-checks-that-settings-page-can-be-opened-6-chromium-linux.png differ
diff --git a/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx b/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx
index 4544517d3da..b40f2bf1c51 100644
--- a/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx
+++ b/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx
@@ -1,6 +1,6 @@
-// @ts-strict-ignore
import React, {
useCallback,
+ type ComponentProps,
type ComponentType,
type CSSProperties,
} from 'react';
@@ -43,6 +43,43 @@ export function MobileNavTabs() {
padding: 10,
};
+ const [{ y }, api] = useSpring(() => ({ y: OPEN_DEFAULT_Y }));
+
+ const openFull = useCallback(
+ ({ canceled }: { canceled?: boolean }) => {
+ // when cancel is true, it means that the user passed the upwards threshold
+ // so we change the spring config to create a nice wobbly effect
+ api.start({
+ y: OPEN_FULL_Y,
+ immediate: false,
+ config: canceled ? config.wobbly : config.stiff,
+ });
+ },
+ [api, OPEN_FULL_Y],
+ );
+
+ const openDefault = useCallback(
+ (velocity = 0) => {
+ api.start({
+ y: OPEN_DEFAULT_Y,
+ immediate: false,
+ config: { ...config.stiff, velocity },
+ });
+ },
+ [api, OPEN_DEFAULT_Y],
+ );
+
+ const hide = useCallback(
+ (velocity = 0) => {
+ api.start({
+ y: HIDDEN_Y,
+ immediate: false,
+ config: { ...config.stiff, velocity },
+ });
+ },
+ [api, HIDDEN_Y],
+ );
+
const navTabs = [
{
name: 'Budget',
@@ -92,50 +129,15 @@ export function MobileNavTabs() {
style: navTabStyle,
Icon: SvgCog,
},
- ].map(tab => );
+ ].map(tab => (
+ openDefault()} {...tab} />
+ ));
const bufferTabsCount = COLUMN_COUNT - (navTabs.length % COLUMN_COUNT);
const bufferTabs = Array.from({ length: bufferTabsCount }).map((_, idx) => (
));
- const [{ y }, api] = useSpring(() => ({ y: OPEN_DEFAULT_Y }));
-
- const openFull = useCallback(
- ({ canceled }) => {
- // when cancel is true, it means that the user passed the upwards threshold
- // so we change the spring config to create a nice wobbly effect
- api.start({
- y: OPEN_FULL_Y,
- immediate: false,
- config: canceled ? config.wobbly : config.stiff,
- });
- },
- [api, OPEN_FULL_Y],
- );
-
- const openDefault = useCallback(
- (velocity = 0) => {
- api.start({
- y: OPEN_DEFAULT_Y,
- immediate: false,
- config: { ...config.stiff, velocity },
- });
- },
- [api, OPEN_DEFAULT_Y],
- );
-
- const hide = useCallback(
- (velocity = 0) => {
- api.start({
- y: HIDDEN_Y,
- immediate: false,
- config: { ...config.stiff, velocity },
- });
- },
- [api, HIDDEN_Y],
- );
-
useScrollListener(({ isScrolling }) => {
if (isScrolling('down')) {
hide();
@@ -237,9 +239,10 @@ type NavTabProps = {
path: string;
Icon: ComponentType;
style?: CSSProperties;
+ onClick: ComponentProps['onClick'];
};
-function NavTab({ Icon: TabIcon, name, path, style }: NavTabProps) {
+function NavTab({ Icon: TabIcon, name, path, style, onClick }: NavTabProps) {
return (
{name}
diff --git a/packages/desktop-client/src/components/settings/Experimental.tsx b/packages/desktop-client/src/components/settings/Experimental.tsx
index d60e50b844b..b4396689a3f 100644
--- a/packages/desktop-client/src/components/settings/Experimental.tsx
+++ b/packages/desktop-client/src/components/settings/Experimental.tsx
@@ -1,5 +1,5 @@
import { type ReactNode, useState } from 'react';
-import { Trans, useTranslation } from 'react-i18next';
+import { Trans } from 'react-i18next';
import type { FeatureFlag } from 'loot-core/src/types/prefs';
@@ -67,23 +67,6 @@ function FeatureToggle({
);
}
-function TrackingBudgetFeature() {
- const { t } = useTranslation();
- const [budgetType = 'rollover'] = useSyncedPref('budgetType');
- const enabled = useFeatureFlag('reportBudget');
- const blockToggleOff = budgetType === 'report' && enabled;
- return (
-
- Budget mode toggle
-
- );
-}
-
export function ExperimentalFeatures() {
const [expanded, setExpanded] = useState(false);
@@ -92,8 +75,6 @@ export function ExperimentalFeatures() {
primaryAction={
expanded ? (
-
-
Goal templates
diff --git a/packages/desktop-client/src/components/settings/index.tsx b/packages/desktop-client/src/components/settings/index.tsx
index 28239f3360e..4a7852e12b0 100644
--- a/packages/desktop-client/src/components/settings/index.tsx
+++ b/packages/desktop-client/src/components/settings/index.tsx
@@ -7,7 +7,6 @@ import { isElectron } from 'loot-core/shared/environment';
import { listen } from 'loot-core/src/platform/client/fetch';
import { useActions } from '../../hooks/useActions';
-import { useFeatureFlag } from '../../hooks/useFeatureFlag';
import { useGlobalPref } from '../../hooks/useGlobalPref';
import { useIsOutdated, useLatestVersion } from '../../hooks/useLatestVersion';
import { useMetadataPref } from '../../hooks/useMetadataPref';
@@ -177,7 +176,7 @@ export function Settings() {
- {useFeatureFlag('reportBudget') && }
+
{isElectron() && }
diff --git a/packages/desktop-client/src/hooks/useFeatureFlag.ts b/packages/desktop-client/src/hooks/useFeatureFlag.ts
index 062a54cd6d8..e5702740257 100644
--- a/packages/desktop-client/src/hooks/useFeatureFlag.ts
+++ b/packages/desktop-client/src/hooks/useFeatureFlag.ts
@@ -3,7 +3,6 @@ import type { FeatureFlag } from 'loot-core/src/types/prefs';
import { useSyncedPref } from './useSyncedPref';
const DEFAULT_FEATURE_FLAG_STATE: Record = {
- reportBudget: false,
goalTemplatesEnabled: false,
dashboards: false,
actionTemplating: false,
diff --git a/packages/loot-core/src/types/prefs.d.ts b/packages/loot-core/src/types/prefs.d.ts
index 0c6f7ea498d..ba1e5424920 100644
--- a/packages/loot-core/src/types/prefs.d.ts
+++ b/packages/loot-core/src/types/prefs.d.ts
@@ -1,6 +1,5 @@
export type FeatureFlag =
| 'dashboards'
- | 'reportBudget'
| 'goalTemplatesEnabled'
| 'actionTemplating'
| 'upcomingLengthAdjustment'
diff --git a/upcoming-release-notes/3833.md b/upcoming-release-notes/3833.md
new file mode 100644
index 00000000000..49ef283f9bb
--- /dev/null
+++ b/upcoming-release-notes/3833.md
@@ -0,0 +1,6 @@
+---
+category: Features
+authors: [MatissJanis]
+---
+
+Release tracking budget feature.