From b8866aa4151a739c4f761ee793d3dcb58cc04f44 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sat, 20 Aug 2022 21:53:04 +0800 Subject: [PATCH] feat: shortcut for focusing search input --- .../useFocusFileExplorerOnFirstRender.tsx | 8 - src/components/FileExplorer/index.tsx | 14 +- src/components/FocusTarget.tsx | 14 + src/components/SearchBar.tsx | 14 +- src/components/SideBar.tsx | 256 ++++++++++-------- src/components/SidebarContext.tsx | 10 + src/components/settings/SidebarSettings.tsx | 4 + src/utils/DOMHelper.ts | 5 + src/utils/config/helper.ts | 5 +- src/utils/general.ts | 4 + src/utils/hooks/useOnShortcutPressed.tsx | 25 ++ 11 files changed, 232 insertions(+), 127 deletions(-) delete mode 100644 src/components/FileExplorer/hooks/useFocusFileExplorerOnFirstRender.tsx create mode 100644 src/components/FocusTarget.tsx create mode 100644 src/components/SidebarContext.tsx create mode 100644 src/utils/hooks/useOnShortcutPressed.tsx diff --git a/src/components/FileExplorer/hooks/useFocusFileExplorerOnFirstRender.tsx b/src/components/FileExplorer/hooks/useFocusFileExplorerOnFirstRender.tsx deleted file mode 100644 index c3b6072..0000000 --- a/src/components/FileExplorer/hooks/useFocusFileExplorerOnFirstRender.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import * as React from 'react' -import * as DOMHelper from 'utils/DOMHelper' - -export function useFocusFileExplorerOnFirstRender() { - React.useEffect(() => { - DOMHelper.focusFileExplorer() - }, []) -} diff --git a/src/components/FileExplorer/index.tsx b/src/components/FileExplorer/index.tsx index e6d1f43..6d364ba 100644 --- a/src/components/FileExplorer/index.tsx +++ b/src/components/FileExplorer/index.tsx @@ -1,4 +1,5 @@ import { Label, Text } from '@primer/react' +import { useFocusOnPendingTarget } from 'components/FocusTarget' import { LoadingIndicator } from 'components/LoadingIndicator' import { SearchBar } from 'components/SearchBar' import { useConfigs } from 'containers/ConfigsContext' @@ -14,7 +15,6 @@ import { useLoadedContext } from 'utils/hooks/useLoadedContext' import { useOnLocationChange } from 'utils/hooks/useOnLocationChange' import { VisibleNodes, VisibleNodesGenerator } from 'utils/VisibleNodesGenerator' import { SideBarStateContext } from '../../containers/SideBarState' -import { useFocusFileExplorerOnFirstRender } from './hooks/useFocusFileExplorerOnFirstRender' import { useGetCurrentPath } from './hooks/useGetCurrentPath' import { useHandleKeyDown } from './hooks/useHandleKeyDown' import { @@ -23,7 +23,7 @@ import { useRenderFileCommentAmounts, useRenderFileStatus, useRenderFindInFolderButton, - useRenderGoToButton + useRenderGoToButton, } from './hooks/useNodeRenderers' import { useHandleNodeClick } from './hooks/useOnNodeClick' import { useOnSearch } from './hooks/useOnSearch' @@ -153,8 +153,6 @@ function LoadedFileExplorer({ ]) const renderLabelText = useRenderLabelText(searchKey) - useFocusFileExplorerOnFirstRender() - const goToCurrentItem = React.useCallback(() => { const targetPath = platform.getCurrentPath(metaData.branchName) if (targetPath) expandTo(targetPath) @@ -163,8 +161,14 @@ function LoadedFileExplorer({ useOnLocationChange(goToCurrentItem) useAfterRedirect(goToCurrentItem) + const ref = React.useRef(null) + useFocusOnPendingTarget( + 'files', + React.useCallback(() => ref.current?.focus(), []), + ) + return ( -
+
{visibleNodesGenerator?.defer && (