about summary refs log tree commit diff
path: root/src/view/screens/stacks/Composer.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/screens/stacks/Composer.tsx')
-rw-r--r--src/view/screens/stacks/Composer.tsx50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/view/screens/stacks/Composer.tsx b/src/view/screens/stacks/Composer.tsx
new file mode 100644
index 000000000..e1b36567a
--- /dev/null
+++ b/src/view/screens/stacks/Composer.tsx
@@ -0,0 +1,50 @@
+import React, {useLayoutEffect, useRef} from 'react'
+import {Text, TouchableOpacity} from 'react-native'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {Shell} from '../../shell'
+import type {RootTabsScreenProps} from '../../routes/types'
+import {Composer as ComposerComponent} from '../../com/composer/Composer'
+
+export const Composer = ({
+  navigation,
+  route,
+}: RootTabsScreenProps<'Composer'>) => {
+  const {replyTo} = route.params
+  const ref = useRef<{publish: () => Promise<boolean>}>()
+
+  useLayoutEffect(() => {
+    navigation.setOptions({
+      headerShown: true,
+      headerTitle: replyTo ? 'Reply' : 'New Post',
+      headerLeft: () => (
+        <TouchableOpacity onPress={() => navigation.goBack()}>
+          <FontAwesomeIcon icon="x" />
+        </TouchableOpacity>
+      ),
+      headerRight: () => (
+        <TouchableOpacity
+          onPress={() => {
+            if (!ref.current) {
+              return
+            }
+            ref.current.publish().then(
+              posted => {
+                if (posted) {
+                  navigation.goBack()
+                }
+              },
+              err => console.error('Failed to create post', err),
+            )
+          }}>
+          <Text>Post</Text>
+        </TouchableOpacity>
+      ),
+    })
+  }, [navigation, replyTo, ref])
+
+  return (
+    <Shell>
+      <ComposerComponent ref={ref} replyTo={replyTo} />
+    </Shell>
+  )
+}