From 64821e6a64b5928755f1307f5d154a7502997ddd Mon Sep 17 00:00:00 2001
From: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Date: Mon, 3 Jun 2024 19:52:35 -0700
Subject: [PATCH] [Mobile] Auto create 2 child transactions on split (#2821)

* Auto create 2 child transactions on split

* Release notes

* Fix typecheck error
---
 .../mobile/transactions/TransactionEdit.jsx        | 13 ++++++++++---
 packages/loot-core/src/shared/transactions.ts      | 14 ++++++++++++--
 upcoming-release-notes/2821.md                     |  6 ++++++
 3 files changed, 28 insertions(+), 5 deletions(-)
 create mode 100644 upcoming-release-notes/2821.md

diff --git a/packages/desktop-client/src/components/mobile/transactions/TransactionEdit.jsx b/packages/desktop-client/src/components/mobile/transactions/TransactionEdit.jsx
index 033e0045d..e09e5c256 100644
--- a/packages/desktop-client/src/components/mobile/transactions/TransactionEdit.jsx
+++ b/packages/desktop-client/src/components/mobile/transactions/TransactionEdit.jsx
@@ -28,6 +28,7 @@ import {
   splitTransaction,
   addSplitTransaction,
   deleteTransaction,
+  makeChild,
 } from 'loot-core/src/shared/transactions';
 import {
   titleFirst,
@@ -284,6 +285,7 @@ const ChildTransactionEdit = forwardRef(
   (
     {
       transaction,
+      amountFocused,
       amountSign,
       getCategory,
       getPrettyPayee,
@@ -336,7 +338,7 @@ const ChildTransactionEdit = forwardRef(
                 editingField &&
                 editingField !== getFieldName(transaction.id, 'amount')
               }
-              focused={transaction.amount === 0}
+              focused={amountFocused}
               value={amountToInteger(transaction.amount)}
               zeroSign={amountSign}
               style={{ marginRight: 8 }}
@@ -795,10 +797,11 @@ const TransactionEditInner = memo(function TransactionEditInner({
           </View>
         )}
 
-        {childTransactions.map(childTrans => (
+        {childTransactions.map((childTrans, i, arr) => (
           <ChildTransactionEdit
             key={childTrans.id}
             transaction={childTrans}
+            amountFocused={arr.findIndex(c => c.amount === 0) === i}
             amountSign={childAmountSign}
             ref={r => {
               childTransactionElementRefMap.current = {
@@ -1136,7 +1139,11 @@ function TransactionEditUnconnected({
   };
 
   const onSplit = id => {
-    const changes = splitTransaction(transactions, id);
+    const changes = splitTransaction(transactions, id, parent => [
+      makeChild(parent),
+      makeChild(parent),
+    ]);
+
     setTransactions(changes.data);
   };
 
diff --git a/packages/loot-core/src/shared/transactions.ts b/packages/loot-core/src/shared/transactions.ts
index ac3b7356d..96c8a7c3a 100644
--- a/packages/loot-core/src/shared/transactions.ts
+++ b/packages/loot-core/src/shared/transactions.ts
@@ -42,7 +42,7 @@ type GenericTransactionEntity =
 
 export function makeChild<T extends GenericTransactionEntity>(
   parent: T,
-  data: object,
+  data: object = {},
 ) {
   const prefix = parent.id === 'temp' ? 'temp' : '';
 
@@ -277,17 +277,27 @@ export function deleteTransaction(
 export function splitTransaction(
   transactions: TransactionEntity[],
   id: string,
+  createSubtransactions?: (
+    parentTransaction: TransactionEntity,
+  ) => TransactionEntity[],
 ) {
   return replaceTransactions(transactions, id, trans => {
     if (trans.is_parent || trans.is_child) {
       return trans;
     }
 
+    const subtransactions = createSubtransactions?.(trans) || [
+      makeChild(trans),
+    ];
+
     return {
       ...trans,
       is_parent: true,
       error: num(trans.amount) === 0 ? null : SplitTransactionError(0, trans),
-      subtransactions: [makeChild(trans, { amount: 0, sort_order: -1 })],
+      subtransactions: subtransactions.map(t => ({
+        ...t,
+        sort_order: t.sort_order || -1,
+      })),
     } as TransactionEntityWithError;
   });
 }
diff --git a/upcoming-release-notes/2821.md b/upcoming-release-notes/2821.md
new file mode 100644
index 000000000..aa9e44e51
--- /dev/null
+++ b/upcoming-release-notes/2821.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [joel-jeremy]
+---
+
+Auto create two child transactions on mobile instead of one when splitting a transactions.
-- 
GitLab