diff options
Diffstat (limited to 'src/view/com/post-thread')
-rw-r--r-- | src/view/com/post-thread/PostThread.tsx | 40 | ||||
-rw-r--r-- | src/view/com/post-thread/PostThreadItem.tsx | 8 |
2 files changed, 31 insertions, 17 deletions
diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx index bc9562ea1..784cc39d2 100644 --- a/src/view/com/post-thread/PostThread.tsx +++ b/src/view/com/post-thread/PostThread.tsx @@ -1,4 +1,4 @@ -import React, {useState, useEffect} from 'react' +import React, {useState, useEffect, useRef} from 'react' import {observer} from 'mobx-react-lite' import {ActivityIndicator, FlatList, Text, View} from 'react-native' import {useFocusEffect} from '@react-navigation/native' @@ -9,6 +9,8 @@ import { } from '../../../state/models/post-thread-view' import {useStores} from '../../../state' import {PostThreadItem} from './PostThreadItem' +import {ShareBottomSheet} from '../sheets/SharePost' +import {s} from '../../lib/styles' const UPDATE_DELAY = 2e3 // wait 2s before refetching the thread for updates @@ -22,6 +24,7 @@ export const PostThread = observer(function PostThread({ const store = useStores() const [view, setView] = useState<PostThreadViewModel | undefined>() const [lastUpdate, setLastUpdate] = useState<number>(Date.now()) + const shareSheetRef = useRef<{open: (uri: string) => void}>() useEffect(() => { if (view?.params.uri === uri) { @@ -41,6 +44,13 @@ export const PostThread = observer(function PostThread({ } }) + const onPressShare = (uri: string) => { + shareSheetRef.current?.open(uri) + } + const onRefresh = () => { + view?.refresh().catch(err => console.error('Failed to refresh', err)) + } + // loading // = if ( @@ -69,22 +79,22 @@ export const PostThread = observer(function PostThread({ // = const posts = view.thread ? Array.from(flattenThread(view.thread)) : [] const renderItem = ({item}: {item: PostThreadViewPostModel}) => ( - <PostThreadItem item={item} onNavigateContent={onNavigateContent} /> + <PostThreadItem + item={item} + onNavigateContent={onNavigateContent} + onPressShare={onPressShare} + /> ) - const onRefresh = () => { - view.refresh().catch(err => console.error('Failed to refresh', err)) - } return ( - <View> - {view.hasContent && ( - <FlatList - data={posts} - keyExtractor={item => item._reactKey} - renderItem={renderItem} - refreshing={view.isRefreshing} - onRefresh={onRefresh} - /> - )} + <View style={s.h100pct}> + <FlatList + data={posts} + keyExtractor={item => item._reactKey} + renderItem={renderItem} + refreshing={view.isRefreshing} + onRefresh={onRefresh} + /> + <ShareBottomSheet ref={shareSheetRef} /> </View> ) }) diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index bd22ecf9a..30a64bc0e 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -21,9 +21,11 @@ function iter<T>(n: number, fn: (_i: number) => T): Array<T> { export const PostThreadItem = observer(function PostThreadItem({ item, onNavigateContent, + onPressShare, }: { item: PostThreadViewPostModel onNavigateContent: OnNavigateContent + onPressShare: (uri: string) => void }) { const record = item.record as unknown as bsky.Post.Record const hasEngagement = item.likeCount || item.repostCount @@ -169,12 +171,14 @@ export const PostThreadItem = observer(function PostThreadItem({ {item.likeCount} </Text> </TouchableOpacity> - <View style={styles.ctrl}> + <TouchableOpacity + style={styles.ctrl} + onPress={() => onPressShare(item.uri)}> <FontAwesomeIcon style={styles.ctrlIcon} icon="share-from-square" /> - </View> + </TouchableOpacity> </View> </View> </View> |