From 30f03e8079b84c57c995c604068dae753d284263 Mon Sep 17 00:00:00 2001
From: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
Date: Sun, 4 Feb 2024 11:50:36 -0500
Subject: [PATCH] Save name fields on unfocus (#2327)

---
 .../src/components/accounts/Header.jsx        |  3 ++-
 .../src/components/common/Input.tsx           |  6 +++++
 .../components/sidebar/SidebarWithData.tsx    | 25 +++++++++++--------
 upcoming-release-notes/2327.md                |  6 +++++
 4 files changed, 28 insertions(+), 12 deletions(-)
 create mode 100644 upcoming-release-notes/2327.md

diff --git a/packages/desktop-client/src/components/accounts/Header.jsx b/packages/desktop-client/src/components/accounts/Header.jsx
index 3c4f79a78..4e181a514 100644
--- a/packages/desktop-client/src/components/accounts/Header.jsx
+++ b/packages/desktop-client/src/components/accounts/Header.jsx
@@ -126,7 +126,8 @@ export function AccountHeader({
                 <Input
                   defaultValue={accountName}
                   onEnter={e => onSaveName(e.target.value)}
-                  onBlur={() => onExposeName(false)}
+                  onBlur={e => onSaveName(e.target.value)}
+                  onEscape={() => onExposeName(false)}
                   style={{
                     fontSize: 25,
                     fontWeight: 500,
diff --git a/packages/desktop-client/src/components/common/Input.tsx b/packages/desktop-client/src/components/common/Input.tsx
index 342c1e75c..390473a40 100644
--- a/packages/desktop-client/src/components/common/Input.tsx
+++ b/packages/desktop-client/src/components/common/Input.tsx
@@ -26,6 +26,7 @@ export type InputProps = InputHTMLAttributes<HTMLInputElement> & {
   style?: CSSProperties;
   inputRef?: Ref<HTMLInputElement>;
   onEnter?: (event: KeyboardEvent<HTMLInputElement>) => void;
+  onEscape?: (event: KeyboardEvent<HTMLInputElement>) => void;
   onUpdate?: (newValue: string) => void;
   focused?: boolean;
 };
@@ -34,6 +35,7 @@ export function Input({
   style,
   inputRef,
   onEnter,
+  onEscape,
   onUpdate,
   focused,
   ...nativeProps
@@ -65,6 +67,10 @@ export function Input({
           onEnter(e);
         }
 
+        if (e.key === 'Escape' && onEscape) {
+          onEscape(e);
+        }
+
         nativeProps.onKeyDown?.(e);
       }}
       onChange={e => {
diff --git a/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx b/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx
index 32668b248..af8010f64 100644
--- a/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx
+++ b/packages/desktop-client/src/components/sidebar/SidebarWithData.tsx
@@ -59,6 +59,17 @@ function EditableBudgetName({ prefs, savePrefs }: EditableBudgetNameProps) {
     { name: 'close', text: 'Close file' },
   ];
 
+  const onSaveChanges = async e => {
+    const inputEl = e.target;
+    const newBudgetName = inputEl.value;
+    if (newBudgetName.trim() !== '') {
+      await savePrefs({
+        budgetName: inputEl.value,
+      });
+      setEditing(false);
+    }
+  };
+
   if (editing) {
     return (
       <InitialFocus>
@@ -69,17 +80,9 @@ function EditableBudgetName({ prefs, savePrefs }: EditableBudgetNameProps) {
             fontWeight: 500,
           }}
           defaultValue={prefs.budgetName}
-          onEnter={async e => {
-            const inputEl = e.target as HTMLInputElement;
-            const newBudgetName = inputEl.value;
-            if (newBudgetName.trim() !== '') {
-              await savePrefs({
-                budgetName: inputEl.value,
-              });
-              setEditing(false);
-            }
-          }}
-          onBlur={() => setEditing(false)}
+          onEnter={onSaveChanges}
+          onBlur={onSaveChanges}
+          onEscape={() => setEditing(false)}
         />
       </InitialFocus>
     );
diff --git a/upcoming-release-notes/2327.md b/upcoming-release-notes/2327.md
new file mode 100644
index 000000000..5d1de94fc
--- /dev/null
+++ b/upcoming-release-notes/2327.md
@@ -0,0 +1,6 @@
+---
+category: Bugfix
+authors: [jfdoming]
+---
+
+Save budget/account name fields on blur
-- 
GitLab