From f0ce79f68c82d56d23c16540e32c612ef9a1ab53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pasteau?= <4895034+ClementPasteau@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:27:13 +0100 Subject: [PATCH] Some fixes --- newIDE/app/src/MainFrame/MainFrameCommands.js | 4 +- newIDE/app/src/MainFrame/index.js | 1 - .../ProjectManager/ProjectManagerMainMenu.js | 64 +++++++++---------- newIDE/app/src/ProjectManager/index.js | 14 ++++ 4 files changed, 47 insertions(+), 36 deletions(-) diff --git a/newIDE/app/src/MainFrame/MainFrameCommands.js b/newIDE/app/src/MainFrame/MainFrameCommands.js index 6d94882808e0..ede8541b213d 100644 --- a/newIDE/app/src/MainFrame/MainFrameCommands.js +++ b/newIDE/app/src/MainFrame/MainFrameCommands.js @@ -70,11 +70,11 @@ const useMainFrameCommands = (handlers: CommandHandlers) => { handler: handlers.onCloseApp, }); - useCommand('OPEN_PROFILE', !!handlers.project, { + useCommand('OPEN_PROFILE', true, { handler: handlers.onOpenProfile, }); - useCommand('OPEN_PROJECT_MANAGER', !!handlers.project, { + useCommand('OPEN_PROJECT_MANAGER', true, { handler: handlers.onOpenProjectManager, }); diff --git a/newIDE/app/src/MainFrame/index.js b/newIDE/app/src/MainFrame/index.js index a21f503d123a..b69b752cba00 100644 --- a/newIDE/app/src/MainFrame/index.js +++ b/newIDE/app/src/MainFrame/index.js @@ -3609,7 +3609,6 @@ const MainFrame = (props: Props) => { if (isProjectClosedSoAvoidReloadingExtensions) { return; } - // Check if load is sufficient eventsFunctionsExtensionsState.reloadProjectEventsFunctionsExtensions( currentProject ); diff --git a/newIDE/app/src/ProjectManager/ProjectManagerMainMenu.js b/newIDE/app/src/ProjectManager/ProjectManagerMainMenu.js index e39fd6d17de3..45169e9d5498 100644 --- a/newIDE/app/src/ProjectManager/ProjectManagerMainMenu.js +++ b/newIDE/app/src/ProjectManager/ProjectManagerMainMenu.js @@ -52,6 +52,35 @@ const ProjectManagerMainMenu = ({ const { isMobile } = useResponsiveWindowSize(); const shouldUseNativeMenu = !isNativeMobileApp() && !isMobile; + const enhanceMenuItems = React.useCallback( + (menuItems: Array): Array => + menuItems.map((menuItem, index) => { + if (menuItem.submenu) { + return { + ...menuItem, + submenu: enhanceMenuItems(menuItem.submenu), + }; + } + + if (menuItem.click) { + const originalClick = menuItem.click; + // $FlowFixMe - Flow is not able to make the difference between checkbox & classic item. + const newMenuItem: MenuItemTemplate = { + ...menuItem, + click: () => { + // Close the drawer when an item is clicked, as it's likely to be a navigation action. + originalClick(); + closeDrawer(); + }, + }; + return newMenuItem; + } + + return menuItem; + }), + [closeDrawer] + ); + const visibleMenuItems = React.useMemo( () => { let displayedMenuItems = mainMenuItems; @@ -64,9 +93,9 @@ const ProjectManagerMainMenu = ({ displayedMenuItems = menuItem.submenu; } - return displayedMenuItems; + return enhanceMenuItems(displayedMenuItems); }, - [mainMenuItems, selectedMainMenuItemIndices] + [mainMenuItems, selectedMainMenuItemIndices, enhanceMenuItems] ); const isNavigatingInsideSubMenu = selectedMainMenuItemIndices.length > 0; @@ -86,34 +115,6 @@ const ProjectManagerMainMenu = ({ [selectedMainMenuItemIndices, setSelectedMainMenuItemIndices] ); - const enhanceMenuItems = React.useCallback( - (menuItems: Array): Array => - menuItems.map((menuItem, index) => { - if (menuItem.submenu) { - return { - ...menuItem, - submenu: enhanceMenuItems(menuItem.submenu), - }; - } - - if (menuItem.click) { - const originalClick = menuItem.click; - // $FlowFixMe - TS is not able to make the difference between checkbox & classic item. - const newMenuItem: MenuItemTemplate = { - ...menuItem, - click: () => { - originalClick(); - closeDrawer(); - }, - }; - return newMenuItem; - } - - return menuItem; - }), - [closeDrawer] - ); - const onBuildSubMenuTemplate = React.useCallback( (topMenuIndex: number): MenuItemTemplate[] => { const menuItem = mainMenuItems[topMenuIndex]; @@ -202,9 +203,6 @@ const ProjectManagerMainMenu = ({ if (item.click) { item.click(); - // Close the drawer after clicking on a menu item, - // so the user can see the result of the action. - closeDrawer(); } else if (item.submenu) { setSelectedMainMenuItemIndices([ ...selectedMainMenuItemIndices, diff --git a/newIDE/app/src/ProjectManager/index.js b/newIDE/app/src/ProjectManager/index.js index e474f79b99bd..6c6ec4c9d7d2 100644 --- a/newIDE/app/src/ProjectManager/index.js +++ b/newIDE/app/src/ProjectManager/index.js @@ -83,6 +83,7 @@ import EmptyMessage from '../UI/EmptyMessage'; import { ColumnStackLayout } from '../UI/Layout'; import { isMacLike } from '../Utils/Platform'; import optionalRequire from '../Utils/OptionalRequire'; +import { useShouldAutofocusInput } from '../UI/Responsive/ScreenTypeMeasurer'; const electron = optionalRequire('electron'); export const getProjectManagerItemId = (identifier: string) => @@ -1506,6 +1507,19 @@ const ProjectManagerWithErrorBoundary = React.forwardRef< ProjectManagerInterface >((props, outerRef) => { const projectManagerRef = React.useRef(null); + const shouldAutofocusInput = useShouldAutofocusInput(); + + React.useEffect( + () => { + const timeoutId = setTimeout(() => { + if (props.isOpen && shouldAutofocusInput && projectManagerRef.current) { + projectManagerRef.current.focusSearchBar(); + } + }, 100); + return () => clearTimeout(timeoutId); + }, + [props.isOpen, shouldAutofocusInput] + ); return (