Extract, don't fire open composer if already open

This commit is contained in:
Eric Bailey
2024-09-06 17:28:08 -05:00
parent 75eddcf610
commit 38dfb0180b
3 changed files with 20 additions and 12 deletions
+3 -12
View File
@@ -35,7 +35,7 @@ import {
} from '#/state/session' } from '#/state/session'
import {readLastActiveAccount} from '#/state/session/util' import {readLastActiveAccount} from '#/state/session/util'
import {Provider as ShellStateProvider} from '#/state/shell' import {Provider as ShellStateProvider} from '#/state/shell'
import {useComposerControls} from '#/state/shell/composer' import {useComposerKeyboardShortcut} from '#/state/shell/composer/useComposerKeyboardShortcut'
import {Provider as LoggedOutViewProvider} from '#/state/shell/logged-out' import {Provider as LoggedOutViewProvider} from '#/state/shell/logged-out'
import {Provider as ProgressGuideProvider} from '#/state/shell/progress-guide' import {Provider as ProgressGuideProvider} from '#/state/shell/progress-guide'
import {Provider as SelectedFeedProvider} from '#/state/shell/selected-feed' import {Provider as SelectedFeedProvider} from '#/state/shell/selected-feed'
@@ -56,12 +56,13 @@ function InnerApp() {
const [isReady, setIsReady] = React.useState(false) const [isReady, setIsReady] = React.useState(false)
const {currentAccount} = useSession() const {currentAccount} = useSession()
const {resumeSession} = useSessionApi() const {resumeSession} = useSessionApi()
const {openComposer} = useComposerControls()
const theme = useColorModeTheme() const theme = useColorModeTheme()
const {_} = useLingui() const {_} = useLingui()
useIntentHandler() useIntentHandler()
const hasCheckedReferrer = useStarterPackEntry() const hasCheckedReferrer = useStarterPackEntry()
useComposerKeyboardShortcut()
// init // init
useEffect(() => { useEffect(() => {
async function onLaunch(account?: SessionAccount) { async function onLaunch(account?: SessionAccount) {
@@ -88,16 +89,6 @@ function InnerApp() {
}) })
}, [_]) }, [_])
useEffect(() => {
const handleNShortcut = (event: KeyboardEvent) => {
if (event.key === 'n' || event.key === 'N') openComposer({})
}
document.addEventListener('keydown', handleNShortcut)
return () => document.removeEventListener('keydown', handleNShortcut)
}, [openComposer])
// wait for session to resume // wait for session to resume
if (!isReady || !hasCheckedReferrer) return null if (!isReady || !hasCheckedReferrer) return null
@@ -0,0 +1,17 @@
import React from 'react'
import {useComposerControls, useComposerState} from './'
export function useComposerKeyboardShortcut() {
const isOpen = !!useComposerState()
const {openComposer} = useComposerControls()
React.useEffect(() => {
function handler(event: KeyboardEvent) {
if (isOpen) return
if (event.key === 'n' || event.key === 'N') openComposer({})
}
document.addEventListener('keydown', handler)
return () => document.removeEventListener('keydown', handler)
}, [isOpen, openComposer])
}