diff --git a/apps/desktop/src-tauri/src/menu.rs b/apps/desktop/src-tauri/src/menu.rs index 66e272f80..acc467b59 100644 --- a/apps/desktop/src-tauri/src/menu.rs +++ b/apps/desktop/src-tauri/src/menu.rs @@ -37,12 +37,14 @@ fn custom_menu_bar() -> Menu { ); let edit_menu = Menu::new() .add_native_item(MenuItem::Copy) - .add_native_item(MenuItem::Paste); + .add_native_item(MenuItem::Paste) + .add_native_item(MenuItem::SelectAll); let view_menu = Menu::new() - .add_item( - CustomMenuItem::new("command_pallete".to_string(), "Command Pallete") - .accelerator("CmdOrCtrl+P"), - ) + .add_item(CustomMenuItem::new("search".to_string(), "Search").accelerator("CmdOrCtrl+L")) + // .add_item( + // CustomMenuItem::new("command_pallete".to_string(), "Command Pallete") + // .accelerator("CmdOrCtrl+P"), + // ) .add_item(CustomMenuItem::new("layout".to_string(), "Layout").disabled()); let window_menu = Menu::new().add_native_item(MenuItem::EnterFullScreen); diff --git a/packages/interface/src/components/layout/TopBar.tsx b/packages/interface/src/components/layout/TopBar.tsx index 929482595..fc5728f28 100644 --- a/packages/interface/src/components/layout/TopBar.tsx +++ b/packages/interface/src/components/layout/TopBar.tsx @@ -3,7 +3,7 @@ import { AppPropsContext, useExplorerStore, useLibraryMutation } from '@sd/clien import { Dropdown } from '@sd/ui'; import clsx from 'clsx'; import { ArrowsClockwise, IconProps, Key, List, Rows, SquaresFour } from 'phosphor-react'; -import React, { DetailedHTMLProps, HTMLAttributes, useContext } from 'react'; +import React, { DetailedHTMLProps, HTMLAttributes, RefAttributes, useContext } from 'react'; import { useNavigate } from 'react-router-dom'; import { Shortcut } from '../primitive/Shortcut'; @@ -18,7 +18,6 @@ export interface TopBarButtonProps left?: boolean; right?: boolean; } -type SearchBarProps = DefaultProps; const TopBarButton: React.FC = ({ icon: Icon, @@ -48,27 +47,28 @@ const TopBarButton: React.FC = ({ ); }; -const SearchBar: React.FC = (props) => { +const SearchBar = React.forwardRef((props, ref) => { //TODO: maybe pass the appProps, so we can have the context in the TopBar if needed again const appProps = useContext(AppPropsContext); return (
-
+
{/* */}
); -}; +}); export const TopBar: React.FC = (props) => { const { locationId, layoutMode, setLayoutMode } = useExplorerStore(); @@ -91,6 +91,34 @@ export const TopBar: React.FC = (props) => { }); const navigate = useNavigate(); + + //create function to focus on search box when cmd+k is pressed + const searchRef = React.useRef(null); + React.useEffect(() => { + const handler = (e: KeyboardEvent) => { + if (!(e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement)) { + if ( + (e.metaKey && e.key === 'l' && searchRef.current) || + (e.key === '/' && searchRef.current) + ) { + searchRef.current.focus(); + e.preventDefault(); + } + } else { + if (e.key === 'Escape') { + e.target.blur(); + e.preventDefault(); + } + } + }; + + document.addEventListener('keydown', handler); + return () => { + //remove event listener + document.removeEventListener('keydown', handler); + }; + }, []); + return ( <>
= (props) => {
*/} +
= (props) => { onClick={() => setLayoutMode('grid')} />
- +