forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
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}