my fork of the bluesky client

Move composer open shortcut to shell (#5723)

* move composer shortcut hook

* put intent handler in same place

* dont allow shortcuts if no session

* revert change

authored by hailey.at and committed by

GitHub 8e164274 eaba6584

+21 -9
-5
src/App.web.tsx
··· 9 9 import {msg} from '@lingui/macro' 10 10 import {useLingui} from '@lingui/react' 11 11 12 - import {useIntentHandler} from '#/lib/hooks/useIntentHandler' 13 12 import {QueryProvider} from '#/lib/react-query' 14 13 import {Provider as StatsigProvider} from '#/lib/statsig/statsig' 15 14 import {ThemeProvider} from '#/lib/ThemeContext' ··· 42 41 import {readLastActiveAccount} from '#/state/session/util' 43 42 import {Provider as ShellStateProvider} from '#/state/shell' 44 43 import {Provider as ComposerProvider} from '#/state/shell/composer' 45 - import {useComposerKeyboardShortcut} from '#/state/shell/composer/useComposerKeyboardShortcut' 46 44 import {Provider as LoggedOutViewProvider} from '#/state/shell/logged-out' 47 45 import {Provider as ProgressGuideProvider} from '#/state/shell/progress-guide' 48 46 import {Provider as SelectedFeedProvider} from '#/state/shell/selected-feed' ··· 72 70 const {resumeSession} = useSessionApi() 73 71 const theme = useColorModeTheme() 74 72 const {_} = useLingui() 75 - useIntentHandler() 76 73 const hasCheckedReferrer = useStarterPackEntry() 77 - 78 - useComposerKeyboardShortcut() 79 74 80 75 // init 81 76 useEffect(() => {
+14 -1
src/state/shell/composer/useComposerKeyboardShortcut.tsx
··· 3 3 import {useDialogStateContext} from '#/state/dialogs' 4 4 import {useLightbox} from '#/state/lightbox' 5 5 import {useModals} from '#/state/modals' 6 + import {useSession} from '#/state/session' 6 7 import {useIsDrawerOpen} from '#/state/shell/drawer-open' 7 8 import {useComposerControls} from './' 8 9 ··· 43 44 const {isModalActive} = useModals() 44 45 const {activeLightbox} = useLightbox() 45 46 const isDrawerOpen = useIsDrawerOpen() 47 + const {hasSession} = useSession() 46 48 47 49 React.useEffect(() => { 50 + if (!hasSession) { 51 + return 52 + } 53 + 48 54 function handler(event: KeyboardEvent) { 49 55 if (shouldIgnore(event)) return 50 56 if ( ··· 60 66 } 61 67 document.addEventListener('keydown', handler) 62 68 return () => document.removeEventListener('keydown', handler) 63 - }, [openComposer, isModalActive, openDialogs, activeLightbox, isDrawerOpen]) 69 + }, [ 70 + openComposer, 71 + isModalActive, 72 + openDialogs, 73 + activeLightbox, 74 + isDrawerOpen, 75 + hasSession, 76 + ]) 64 77 }
+7 -3
src/view/shell/index.web.tsx
··· 4 4 import {useLingui} from '@lingui/react' 5 5 import {useNavigation} from '@react-navigation/native' 6 6 7 + import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle' 8 + import {useIntentHandler} from '#/lib/hooks/useIntentHandler' 7 9 import {useWebBodyScrollLock} from '#/lib/hooks/useWebBodyScrollLock' 10 + import {NavigationProp} from '#/lib/routes/types' 11 + import {colors, s} from '#/lib/styles' 8 12 import {useIsDrawerOpen, useSetDrawerOpen} from '#/state/shell' 13 + import {useComposerKeyboardShortcut} from '#/state/shell/composer/useComposerKeyboardShortcut' 9 14 import {useCloseAllActiveElements} from '#/state/util' 10 - import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle' 11 - import {NavigationProp} from 'lib/routes/types' 12 - import {colors, s} from 'lib/styles' 13 15 import {MutedWordsDialog} from '#/components/dialogs/MutedWords' 14 16 import {SigninDialog} from '#/components/dialogs/Signin' 15 17 import {Outlet as PortalOutlet} from '#/components/Portal' ··· 30 32 const {_} = useLingui() 31 33 32 34 useWebBodyScrollLock(isDrawerOpen) 35 + useComposerKeyboardShortcut() 36 + useIntentHandler() 33 37 34 38 useEffect(() => { 35 39 const unsubscribe = navigator.addListener('state', () => {