From fe70ecb635cd37b7f194518e5234cd5723dc0add Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=20Gonz=C3=A1lez?= <fgzv@outlook.com>
Date: Tue, 23 Jul 2024 19:38:30 +0200
Subject: [PATCH] Fixes #3089: Dismiss pop-over on budget action (#3092)

* Fix no dismissal on budget action

* Add release notes file

* Correct tag

* Remove unnecessary callback

* Linting

* Apply same strategy on reportcomponents

* Rename to onMenuAction
---
 .../budget/report/ReportComponents.tsx         | 18 ++++++++++--------
 .../budget/rollover/RolloverComponents.tsx     | 11 ++++++++---
 upcoming-release-notes/3092.md                 |  6 ++++++
 3 files changed, 24 insertions(+), 11 deletions(-)
 create mode 100644 upcoming-release-notes/3092.md

diff --git a/packages/desktop-client/src/components/budget/report/ReportComponents.tsx b/packages/desktop-client/src/components/budget/report/ReportComponents.tsx
index 00f2c6c5f..5a9fd4b9e 100644
--- a/packages/desktop-client/src/components/budget/report/ReportComponents.tsx
+++ b/packages/desktop-client/src/components/budget/report/ReportComponents.tsx
@@ -163,6 +163,12 @@ export const CategoryMonth = memo(function CategoryMonth({
   const [balanceMenuOpen, setBalanceMenuOpen] = useState(false);
   const triggerBalanceMenuRef = useRef(null);
 
+  const onMenuAction = (...args: Parameters<typeof onBudgetAction>) => {
+    onBudgetAction(...args);
+    setBalanceMenuOpen(false);
+    setMenuOpen(false);
+  };
+
   return (
     <View
       style={{
@@ -225,10 +231,9 @@ export const CategoryMonth = memo(function CategoryMonth({
             >
               <BudgetMenu
                 onCopyLastMonthAverage={() => {
-                  onBudgetAction?.(month, 'copy-single-last', {
+                  onMenuAction(month, 'copy-single-last', {
                     category: category.id,
                   });
-                  setMenuOpen(false);
                 }}
                 onSetMonthsAverage={numberOfMonths => {
                   if (
@@ -239,16 +244,14 @@ export const CategoryMonth = memo(function CategoryMonth({
                     return;
                   }
 
-                  onBudgetAction?.(month, `set-single-${numberOfMonths}-avg`, {
+                  onMenuAction(month, `set-single-${numberOfMonths}-avg`, {
                     category: category.id,
                   });
-                  setMenuOpen(false);
                 }}
                 onApplyBudgetTemplate={() => {
-                  onBudgetAction?.(month, 'apply-single-category-template', {
+                  onMenuAction(month, 'apply-single-category-template', {
                     category: category.id,
                   });
-                  setMenuOpen(false);
                 }}
               />
             </Popover>
@@ -351,11 +354,10 @@ export const CategoryMonth = memo(function CategoryMonth({
             <BalanceMenu
               categoryId={category.id}
               onCarryover={carryover => {
-                onBudgetAction?.(month, 'carryover', {
+                onMenuAction(month, 'carryover', {
                   category: category.id,
                   flag: carryover,
                 });
-                setBalanceMenuOpen(false);
               }}
             />
           </Popover>
diff --git a/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx b/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx
index 28f2553fe..7c4a9ff8c 100644
--- a/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx
+++ b/packages/desktop-client/src/components/budget/rollover/RolloverComponents.tsx
@@ -158,6 +158,11 @@ export const ExpenseCategoryMonth = memo(function ExpenseCategoryMonth({
   const [balanceMenuOpen, setBalanceMenuOpen] = useState(false);
   const [hover, setHover] = useState(false);
 
+  const onMenuAction = (...args: Parameters<typeof onBudgetAction>) => {
+    onBudgetAction(...args);
+    setBudgetMenuOpen(false);
+  };
+
   return (
     <View
       style={{
@@ -221,7 +226,7 @@ export const ExpenseCategoryMonth = memo(function ExpenseCategoryMonth({
             >
               <BudgetMenu
                 onCopyLastMonthAverage={() => {
-                  onBudgetAction?.(month, 'copy-single-last', {
+                  onMenuAction(month, 'copy-single-last', {
                     category: category.id,
                   });
                 }}
@@ -234,12 +239,12 @@ export const ExpenseCategoryMonth = memo(function ExpenseCategoryMonth({
                     return;
                   }
 
-                  onBudgetAction?.(month, `set-single-${numberOfMonths}-avg`, {
+                  onMenuAction(month, `set-single-${numberOfMonths}-avg`, {
                     category: category.id,
                   });
                 }}
                 onApplyBudgetTemplate={() => {
-                  onBudgetAction?.(month, 'apply-single-category-template', {
+                  onMenuAction(month, 'apply-single-category-template', {
                     category: category.id,
                   });
                 }}
diff --git a/upcoming-release-notes/3092.md b/upcoming-release-notes/3092.md
new file mode 100644
index 000000000..889716c3f
--- /dev/null
+++ b/upcoming-release-notes/3092.md
@@ -0,0 +1,6 @@
+---
+category: Bugfix
+authors: [sleepyfran]
+---
+
+Correctly dismiss pop-over when using the copy last month's budget feature
-- 
GitLab