diff options
author | Eric Bailey <git@esb.lol> | 2024-12-20 13:59:33 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-20 19:59:33 +0000 |
commit | 8116d12c15495fa192e92f5bfb75cb561bb16402 (patch) | |
tree | d8291bc888d6423ccb7f242877c9293283156e83 /src/view/shell/Composer.web.tsx | |
parent | 8a3dfcb9d0860eb8f8112a84dcf32ae522f77069 (diff) | |
download | voidsky-8116d12c15495fa192e92f5bfb75cb561bb16402.tar.zst |
Fix Emoji picker focus (#7217)
* Only portal the emoji picker where needed * Add optional portal prop to emoji picker * Use FocusScope to our advantage * Pare back, add guards, fix focus trap * Don't return focus to emoji button * Set DM input position on emoji insert * Let the caller determine next focus node --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Diffstat (limited to 'src/view/shell/Composer.web.tsx')
-rw-r--r-- | src/view/shell/Composer.web.tsx | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/view/shell/Composer.web.tsx b/src/view/shell/Composer.web.tsx index 47a86ed24..cfd9f6280 100644 --- a/src/view/shell/Composer.web.tsx +++ b/src/view/shell/Composer.web.tsx @@ -9,6 +9,7 @@ import {useModals} from '#/state/modals' import {ComposerOpts, useComposerState} from '#/state/shell/composer' import { EmojiPicker, + EmojiPickerPosition, EmojiPickerState, } from '#/view/com/composer/text-input/web/EmojiPicker.web' import {useBreakpoints, useTheme} from '#/alf' @@ -42,16 +43,19 @@ function Inner({state}: {state: ComposerOpts}) { const {gtMobile} = useBreakpoints() const [pickerState, setPickerState] = React.useState<EmojiPickerState>({ isOpen: false, - pos: {top: 0, left: 0, right: 0, bottom: 0}, + pos: {top: 0, left: 0, right: 0, bottom: 0, nextFocusRef: null}, }) - const onOpenPicker = React.useCallback((pos: DOMRect | undefined) => { - if (!pos) return - setPickerState({ - isOpen: true, - pos, - }) - }, []) + const onOpenPicker = React.useCallback( + (pos: EmojiPickerPosition | undefined) => { + if (!pos) return + setPickerState({ + isOpen: true, + pos, + }) + }, + [], + ) const onClosePicker = React.useCallback(() => { setPickerState(prev => ({ |