Bluesky app fork with some witchin' additions 馃挮
at main 54 lines 1.7 kB view raw
1import React from 'react' 2import {Modal, View} from 'react-native' 3 4import {useDialogStateControlContext} from '#/state/dialogs' 5import {useComposerState} from '#/state/shell/composer' 6import {ComposePost, useComposerCancelRef} from '#/view/com/composer/Composer' 7import {atoms as a, useTheme} from '#/alf' 8import {SheetCompatProvider as TooltipSheetCompatProvider} from '#/components/Tooltip' 9 10export function Composer({}: {winHeight: number}) { 11 const {setFullyExpandedCount} = useDialogStateControlContext() 12 const t = useTheme() 13 const state = useComposerState() 14 const ref = useComposerCancelRef() 15 16 const open = !!state 17 const prevOpen = React.useRef(open) 18 19 React.useEffect(() => { 20 if (open && !prevOpen.current) { 21 setFullyExpandedCount(c => c + 1) 22 } else if (!open && prevOpen.current) { 23 setFullyExpandedCount(c => c - 1) 24 } 25 prevOpen.current = open 26 }, [open, setFullyExpandedCount]) 27 28 return ( 29 <Modal 30 aria-modal 31 accessibilityViewIsModal 32 visible={open} 33 presentationStyle="pageSheet" 34 animationType="slide" 35 onRequestClose={() => ref.current?.onPressCancel()}> 36 <View style={[t.atoms.bg, a.flex_1]}> 37 <TooltipSheetCompatProvider> 38 <ComposePost 39 cancelRef={ref} 40 replyTo={state?.replyTo} 41 onPost={state?.onPost} 42 onPostSuccess={state?.onPostSuccess} 43 quote={state?.quote} 44 mention={state?.mention} 45 text={state?.text} 46 imageUris={state?.imageUris} 47 videoUri={state?.videoUri} 48 openGallery={state?.openGallery} 49 /> 50 </TooltipSheetCompatProvider> 51 </View> 52 </Modal> 53 ) 54}