diff options
Diffstat (limited to 'src/view/shell/Composer.web.tsx')
-rw-r--r-- | src/view/shell/Composer.web.tsx | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/view/shell/Composer.web.tsx b/src/view/shell/Composer.web.tsx index 73f9f540e..99e659d62 100644 --- a/src/view/shell/Composer.web.tsx +++ b/src/view/shell/Composer.web.tsx @@ -5,6 +5,11 @@ import {ComposePost} from '../com/composer/Composer' import {useComposerState} from 'state/shell/composer' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' +import {useWebBodyScrollLock} from '#/lib/hooks/useWebBodyScrollLock' +import { + EmojiPicker, + EmojiPickerState, +} from 'view/com/composer/text-input/web/EmojiPicker.web.tsx' const BOTTOM_BAR_HEIGHT = 61 @@ -12,11 +17,33 @@ export function Composer({}: {winHeight: number}) { const pal = usePalette('default') const {isMobile} = useWebMediaQueries() const state = useComposerState() + const isActive = !!state + useWebBodyScrollLock(isActive) + + const [pickerState, setPickerState] = React.useState<EmojiPickerState>({ + isOpen: false, + pos: {top: 0, left: 0, right: 0, bottom: 0}, + }) + + const onOpenPicker = React.useCallback((pos: DOMRect | undefined) => { + if (!pos) return + setPickerState({ + isOpen: true, + pos, + }) + }, []) + + const onClosePicker = React.useCallback(() => { + setPickerState(prev => ({ + ...prev, + isOpen: false, + })) + }, []) // rendering // = - if (!state) { + if (!isActive) { return <View /> } @@ -41,15 +68,18 @@ export function Composer({}: {winHeight: number}) { quote={state.quote} onPost={state.onPost} mention={state.mention} + openPicker={onOpenPicker} /> </Animated.View> + <EmojiPicker state={pickerState} close={onClosePicker} /> </Animated.View> ) } const styles = StyleSheet.create({ mask: { - position: 'absolute', + // @ts-ignore + position: 'fixed', top: 0, left: 0, width: '100%', |