about summary refs log tree commit diff
path: root/src/view/screens/PostThread.tsx
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2023-11-24 22:31:33 +0000
committerGitHub <noreply@github.com>2023-11-24 22:31:33 +0000
commitf2d164ec23247d878f7f019d568a3073a5ae94c4 (patch)
tree7db9131e8b1f642494bb0b626a75a5ec7be36755 /src/view/screens/PostThread.tsx
parent4b59a21cacc36d3c05e68d22379538c0f32550c9 (diff)
downloadvoidsky-f2d164ec23247d878f7f019d568a3073a5ae94c4.tar.zst
PWI: Refactor Shell (#1989)
* Vendor createNativeStackNavigator for further tweaks

* Completely disable withAuthRequired

* Render LoggedOut for protected routes

* Move web shell into the navigator

* Simplify the logic

* Add login modal

* Delete withAuthRequired

* Reset app state on session change

* Move TS suppression
Diffstat (limited to 'src/view/screens/PostThread.tsx')
-rw-r--r--src/view/screens/PostThread.tsx144
1 files changed, 70 insertions, 74 deletions
diff --git a/src/view/screens/PostThread.tsx b/src/view/screens/PostThread.tsx
index 11574e283..4b1f51748 100644
--- a/src/view/screens/PostThread.tsx
+++ b/src/view/screens/PostThread.tsx
@@ -5,7 +5,6 @@ import {useFocusEffect} from '@react-navigation/native'
 import {useQueryClient} from '@tanstack/react-query'
 import {NativeStackScreenProps, CommonNavigatorParams} from 'lib/routes/types'
 import {makeRecordUri} from 'lib/strings/url-helpers'
-import {withAuthRequired} from 'view/com/auth/withAuthRequired'
 import {ViewHeader} from '../com/util/ViewHeader'
 import {PostThread as PostThreadComponent} from '../com/post-thread/PostThread'
 import {ComposePrompt} from 'view/com/composer/Prompt'
@@ -27,85 +26,82 @@ import {CenteredView} from '../com/util/Views'
 import {useComposerControls} from '#/state/shell/composer'
 
 type Props = NativeStackScreenProps<CommonNavigatorParams, 'PostThread'>
-export const PostThreadScreen = withAuthRequired(
-  function PostThreadScreenImpl({route}: Props) {
-    const queryClient = useQueryClient()
-    const {_} = useLingui()
-    const {fabMinimalShellTransform} = useMinimalShellMode()
-    const setMinimalShellMode = useSetMinimalShellMode()
-    const {openComposer} = useComposerControls()
-    const safeAreaInsets = useSafeAreaInsets()
-    const {name, rkey} = route.params
-    const {isMobile} = useWebMediaQueries()
-    const uri = makeRecordUri(name, 'app.bsky.feed.post', rkey)
-    const {data: resolvedUri, error: uriError} = useResolveUriQuery(uri)
+export function PostThreadScreen({route}: Props) {
+  const queryClient = useQueryClient()
+  const {_} = useLingui()
+  const {fabMinimalShellTransform} = useMinimalShellMode()
+  const setMinimalShellMode = useSetMinimalShellMode()
+  const {openComposer} = useComposerControls()
+  const safeAreaInsets = useSafeAreaInsets()
+  const {name, rkey} = route.params
+  const {isMobile} = useWebMediaQueries()
+  const uri = makeRecordUri(name, 'app.bsky.feed.post', rkey)
+  const {data: resolvedUri, error: uriError} = useResolveUriQuery(uri)
 
-    useFocusEffect(
-      React.useCallback(() => {
-        setMinimalShellMode(false)
-      }, [setMinimalShellMode]),
-    )
+  useFocusEffect(
+    React.useCallback(() => {
+      setMinimalShellMode(false)
+    }, [setMinimalShellMode]),
+  )
 
-    const onPressReply = React.useCallback(() => {
-      if (!resolvedUri) {
-        return
-      }
-      const thread = queryClient.getQueryData<ThreadNode>(
-        POST_THREAD_RQKEY(resolvedUri.uri),
-      )
-      if (thread?.type !== 'post') {
-        return
-      }
-      openComposer({
-        replyTo: {
-          uri: thread.post.uri,
-          cid: thread.post.cid,
-          text: thread.record.text,
-          author: {
-            handle: thread.post.author.handle,
-            displayName: thread.post.author.displayName,
-            avatar: thread.post.author.avatar,
-          },
+  const onPressReply = React.useCallback(() => {
+    if (!resolvedUri) {
+      return
+    }
+    const thread = queryClient.getQueryData<ThreadNode>(
+      POST_THREAD_RQKEY(resolvedUri.uri),
+    )
+    if (thread?.type !== 'post') {
+      return
+    }
+    openComposer({
+      replyTo: {
+        uri: thread.post.uri,
+        cid: thread.post.cid,
+        text: thread.record.text,
+        author: {
+          handle: thread.post.author.handle,
+          displayName: thread.post.author.displayName,
+          avatar: thread.post.author.avatar,
         },
-        onPost: () =>
-          queryClient.invalidateQueries({
-            queryKey: POST_THREAD_RQKEY(resolvedUri.uri || ''),
-          }),
-      })
-    }, [openComposer, queryClient, resolvedUri])
+      },
+      onPost: () =>
+        queryClient.invalidateQueries({
+          queryKey: POST_THREAD_RQKEY(resolvedUri.uri || ''),
+        }),
+    })
+  }, [openComposer, queryClient, resolvedUri])
 
-    return (
-      <View style={s.hContentRegion}>
-        {isMobile && <ViewHeader title={_(msg`Post`)} />}
-        <View style={s.flex1}>
-          {uriError ? (
-            <CenteredView>
-              <ErrorMessage message={String(uriError)} />
-            </CenteredView>
-          ) : (
-            <PostThreadComponent
-              uri={resolvedUri?.uri}
-              onPressReply={onPressReply}
-            />
-          )}
-        </View>
-        {isMobile && (
-          <Animated.View
-            style={[
-              styles.prompt,
-              fabMinimalShellTransform,
-              {
-                bottom: clamp(safeAreaInsets.bottom, 15, 30),
-              },
-            ]}>
-            <ComposePrompt onPressCompose={onPressReply} />
-          </Animated.View>
+  return (
+    <View style={s.hContentRegion}>
+      {isMobile && <ViewHeader title={_(msg`Post`)} />}
+      <View style={s.flex1}>
+        {uriError ? (
+          <CenteredView>
+            <ErrorMessage message={String(uriError)} />
+          </CenteredView>
+        ) : (
+          <PostThreadComponent
+            uri={resolvedUri?.uri}
+            onPressReply={onPressReply}
+          />
         )}
       </View>
-    )
-  },
-  {isPublic: true},
-)
+      {isMobile && (
+        <Animated.View
+          style={[
+            styles.prompt,
+            fabMinimalShellTransform,
+            {
+              bottom: clamp(safeAreaInsets.bottom, 15, 30),
+            },
+          ]}>
+          <ComposePrompt onPressCompose={onPressReply} />
+        </Animated.View>
+      )}
+    </View>
+  )
+}
 
 const styles = StyleSheet.create({
   prompt: {