From d2e3e44d0d059b996ad121d32e4019599c4c73e8 Mon Sep 17 00:00:00 2001
From: Jed Fox <git@jedfox.com>
Date: Tue, 17 Jan 2023 17:00:13 -0500
Subject: [PATCH] =?UTF-8?q?Move=20the=20=E2=80=9C=E2=80=A6=E2=80=9D=20menu?=
 =?UTF-8?q?=20to=20the=20budget=20name=20(#459)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/components/SidebarWithData.js         | 56 +++++++++++++++++-
 .../loot-design/src/components/sidebar.js     | 57 -------------------
 2 files changed, 53 insertions(+), 60 deletions(-)

diff --git a/packages/desktop-client/src/components/SidebarWithData.js b/packages/desktop-client/src/components/SidebarWithData.js
index 831c7f03d..5ef3125fe 100644
--- a/packages/desktop-client/src/components/SidebarWithData.js
+++ b/packages/desktop-client/src/components/SidebarWithData.js
@@ -1,23 +1,59 @@
 import React, { useState, useEffect } from 'react';
 import { connect } from 'react-redux';
-import { withRouter } from 'react-router-dom';
+import { useDispatch } from 'react-redux';
+import { withRouter, useHistory } from 'react-router';
 
 import { bindActionCreators } from 'redux';
 
 import * as actions from 'loot-core/src/client/actions';
+import { closeBudget } from 'loot-core/src/client/actions/budgets';
+import Platform from 'loot-core/src/client/platform';
 import * as queries from 'loot-core/src/client/queries';
 import { send } from 'loot-core/src/platform/client/fetch';
 import {
   Button,
   Input,
   InitialFocus,
-  Text
+  Text,
+  Tooltip,
+  Menu
 } from 'loot-design/src/components/common';
 import { Sidebar } from 'loot-design/src/components/sidebar';
 import { styles, colors } from 'loot-design/src/style';
+import ExpandArrow from 'loot-design/src/svg/ExpandArrow';
 
 function EditableBudgetName({ prefs, savePrefs }) {
+  let dispatch = useDispatch();
+  let history = useHistory();
   const [editing, setEditing] = useState(false);
+  const [menuOpen, setMenuOpen] = useState(false);
+
+  function onMenuSelect(type) {
+    setMenuOpen(false);
+
+    switch (type) {
+      case 'rename':
+        setEditing(true);
+        break;
+      case 'settings':
+        history.push('/settings');
+        break;
+      case 'help':
+        window.open('https://actualbudget.github.io/docs', '_blank');
+        break;
+      case 'close':
+        dispatch(closeBudget());
+        break;
+      default:
+    }
+  }
+
+  let items = [
+    { name: 'rename', text: 'Rename Budget' },
+    { name: 'settings', text: 'Settings' },
+    ...(Platform.isBrowser ? [{ name: 'help', text: 'Help' }] : []),
+    { name: 'close', text: 'Close File' }
+  ];
 
   if (editing) {
     return (
@@ -53,11 +89,25 @@ function EditableBudgetName({ prefs, savePrefs }) {
           marginLeft: -5,
           flex: '0 auto'
         }}
-        onClick={() => setEditing(true)}
+        onClick={() => setMenuOpen(true)}
       >
         <Text style={{ whiteSpace: 'nowrap', overflow: 'hidden' }}>
           {prefs.budgetName || 'A budget has no name'}
         </Text>
+        <ExpandArrow
+          width={7}
+          height={7}
+          style={{ color: 'inherit', marginLeft: 5 }}
+        />
+        {menuOpen && (
+          <Tooltip
+            position="bottom-left"
+            style={{ padding: 0 }}
+            onClose={() => setMenuOpen(false)}
+          >
+            <Menu onMenuSelect={onMenuSelect} items={items} />
+          </Tooltip>
+        )}
       </Button>
     );
   }
diff --git a/packages/loot-design/src/components/sidebar.js b/packages/loot-design/src/components/sidebar.js
index 5af7b5443..29544d7ca 100644
--- a/packages/loot-design/src/components/sidebar.js
+++ b/packages/loot-design/src/components/sidebar.js
@@ -446,62 +446,6 @@ function ToggleButton({ style, onFloat }) {
   );
 }
 
-const MenuButton = withRouter(function MenuButton({ history }) {
-  let dispatch = useDispatch();
-  let [menuOpen, setMenuOpen] = useState(false);
-
-  function onMenuSelect(type) {
-    setMenuOpen(false);
-
-    switch (type) {
-      case 'settings':
-        history.push('/settings');
-        break;
-      case 'help':
-        window.open('https://actualbudget.github.io/docs', '_blank');
-        break;
-      case 'close':
-        dispatch(closeBudget());
-        break;
-      default:
-    }
-  }
-
-  let items = [
-    { name: 'settings', text: 'Settings' },
-    { name: 'help', text: 'Help' },
-    { name: 'close', text: 'Close File' }
-  ];
-
-  return (
-    <Button
-      bare
-      style={{
-        color: colors.n5,
-        flexShrink: 0
-      }}
-      activeStyle={{ color: colors.p7 }}
-      onClick={() => setMenuOpen(true)}
-      aria-label="Menu"
-    >
-      <DotsHorizontalTriple
-        width={15}
-        height={15}
-        style={{ color: 'inherit', transform: 'rotateZ(0deg)' }}
-      />
-      {menuOpen && (
-        <Tooltip
-          position="bottom-right"
-          style={{ padding: 0 }}
-          onClose={() => setMenuOpen(false)}
-        >
-          <Menu onMenuSelect={onMenuSelect} items={items} />
-        </Tooltip>
-      )}
-    </Button>
-  );
-});
-
 function Tools() {
   let [isOpen, setOpen] = useState(false);
   let onToggle = useCallback(() => setOpen(open => !open), []);
@@ -638,7 +582,6 @@ export function Sidebar({
         <View style={{ flex: 1, flexDirection: 'row' }} />
 
         {!hasWindowButtons && <ToggleButton onFloat={onFloat} />}
-        {Platform.isBrowser && <MenuButton />}
       </View>
 
       <View style={{ overflow: 'auto' }}>
-- 
GitLab