From 7d960579f95ce04e5e37c59f2b3670b3d2424bca Mon Sep 17 00:00:00 2001
From: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
Date: Mon, 3 Jun 2024 07:39:57 -0700
Subject: [PATCH] Release 'Splits in rules' feature (#2789)

* Release 'Splits in rules' feature

* Add release notes

* Add missed comment

* Remove unused import

* Fix failing test
---
 packages/desktop-client/e2e/rules.test.js                   | 5 -----
 packages/desktop-client/src/components/modals/EditRule.jsx  | 6 +-----
 .../desktop-client/src/components/settings/Experimental.tsx | 1 -
 packages/desktop-client/src/hooks/useFeatureFlag.ts         | 1 -
 packages/loot-core/src/server/accounts/rules.ts             | 4 ++--
 packages/loot-core/src/types/prefs.d.ts                     | 3 +--
 upcoming-release-notes/2789.md                              | 6 ++++++
 7 files changed, 10 insertions(+), 16 deletions(-)
 create mode 100644 upcoming-release-notes/2789.md

diff --git a/packages/desktop-client/e2e/rules.test.js b/packages/desktop-client/e2e/rules.test.js
index 69f5238fb..20cc4f7d1 100644
--- a/packages/desktop-client/e2e/rules.test.js
+++ b/packages/desktop-client/e2e/rules.test.js
@@ -69,11 +69,6 @@ test.describe('Rules', () => {
   });
 
   test('creates a split transaction rule and makes sure it is applied when creating a transaction', async () => {
-    const settingsPage = await navigation.goToSettingsPage();
-    await settingsPage.enableExperimentalFeature('splits in rules');
-
-    await expect(settingsPage.page.getByLabel('splits in rules')).toBeChecked();
-
     rulesPage = await navigation.goToRulesPage();
 
     await rulesPage.createRule({
diff --git a/packages/desktop-client/src/components/modals/EditRule.jsx b/packages/desktop-client/src/components/modals/EditRule.jsx
index 12ed1a593..104829ec3 100644
--- a/packages/desktop-client/src/components/modals/EditRule.jsx
+++ b/packages/desktop-client/src/components/modals/EditRule.jsx
@@ -30,7 +30,6 @@ import {
 } from 'loot-core/src/shared/util';
 
 import { useDateFormat } from '../../hooks/useDateFormat';
-import { useFeatureFlag } from '../../hooks/useFeatureFlag';
 import { useSelected, SelectedProvider } from '../../hooks/useSelected';
 import { SvgDelete, SvgAdd, SvgSubtract } from '../../icons/v0';
 import { SvgInformationOutline } from '../../icons/v1';
@@ -655,7 +654,6 @@ const conditionFields = [
   ]);
 
 export function EditRule({ modalProps, defaultRule, onSave: originalOnSave }) {
-  const splitsEnabled = useFeatureFlag('splitsInRules');
   const [conditions, setConditions] = useState(
     defaultRule.conditions.map(parse),
   );
@@ -883,9 +881,7 @@ export function EditRule({ modalProps, defaultRule, onSave: originalOnSave }) {
   };
 
   // Enable editing existing split rules even if the feature has since been disabled.
-  const showSplitButton = splitsEnabled
-    ? actionSplits.length > 0
-    : actionSplits.length > 1;
+  const showSplitButton = actionSplits.length > 0;
 
   return (
     <Modal
diff --git a/packages/desktop-client/src/components/settings/Experimental.tsx b/packages/desktop-client/src/components/settings/Experimental.tsx
index c0917d169..41fe8d6e9 100644
--- a/packages/desktop-client/src/components/settings/Experimental.tsx
+++ b/packages/desktop-client/src/components/settings/Experimental.tsx
@@ -90,7 +90,6 @@ export function ExperimentalFeatures() {
               Goal templates
             </FeatureToggle>
             <FeatureToggle flag="simpleFinSync">SimpleFIN sync</FeatureToggle>
-            <FeatureToggle flag="splitsInRules">Splits in rules</FeatureToggle>
           </View>
         ) : (
           <Link
diff --git a/packages/desktop-client/src/hooks/useFeatureFlag.ts b/packages/desktop-client/src/hooks/useFeatureFlag.ts
index d041c17bf..010b172ec 100644
--- a/packages/desktop-client/src/hooks/useFeatureFlag.ts
+++ b/packages/desktop-client/src/hooks/useFeatureFlag.ts
@@ -9,7 +9,6 @@ const DEFAULT_FEATURE_FLAG_STATE: Record<FeatureFlag, boolean> = {
   customReports: false,
   spendingReport: false,
   simpleFinSync: false,
-  splitsInRules: false,
 };
 
 export function useFeatureFlag(name: FeatureFlag): boolean {
diff --git a/packages/loot-core/src/server/accounts/rules.ts b/packages/loot-core/src/server/accounts/rules.ts
index 96e9cd1d8..d164c5309 100644
--- a/packages/loot-core/src/server/accounts/rules.ts
+++ b/packages/loot-core/src/server/accounts/rules.ts
@@ -21,7 +21,6 @@ import {
 import { fastSetMerge } from '../../shared/util';
 import { RuleConditionEntity } from '../../types/models';
 import { RuleError } from '../errors';
-import * as prefs from '../prefs';
 import { Schedule as RSchedule } from '../util/rschedule';
 
 function assert(test, type, msg) {
@@ -509,7 +508,8 @@ export function execActions(actions: Action[], transaction) {
     ) + 1;
 
   let update = execNonSplitActions(parentActions, transaction);
-  if (!prefs.getPrefs()?.['flags.splitsInRules'] || totalSplitCount === 1) {
+  if (totalSplitCount === 1) {
+    // No splits, no need to do anything else.
     return update;
   }
 
diff --git a/packages/loot-core/src/types/prefs.d.ts b/packages/loot-core/src/types/prefs.d.ts
index d3632e030..161c85faa 100644
--- a/packages/loot-core/src/types/prefs.d.ts
+++ b/packages/loot-core/src/types/prefs.d.ts
@@ -5,8 +5,7 @@ export type FeatureFlag =
   | 'goalTemplatesEnabled'
   | 'customReports'
   | 'spendingReport'
-  | 'simpleFinSync'
-  | 'splitsInRules';
+  | 'simpleFinSync';
 
 export type LocalPrefs = Partial<
   {
diff --git a/upcoming-release-notes/2789.md b/upcoming-release-notes/2789.md
new file mode 100644
index 000000000..5ac4832ad
--- /dev/null
+++ b/upcoming-release-notes/2789.md
@@ -0,0 +1,6 @@
+---
+category: Features
+authors: [jfdoming]
+---
+
+Release 'Splits in rules' feature
-- 
GitLab