diff options
Diffstat (limited to 'src/view/com')
-rw-r--r-- | src/view/com/feed/FeedItem.tsx | 49 | ||||
-rw-r--r-- | src/view/com/post-thread/PostThread.tsx | 2 | ||||
-rw-r--r-- | src/view/com/post-thread/PostThreadItem.tsx | 49 |
3 files changed, 81 insertions, 19 deletions
diff --git a/src/view/com/feed/FeedItem.tsx b/src/view/com/feed/FeedItem.tsx index 5e5a82a77..6ba1401c9 100644 --- a/src/view/com/feed/FeedItem.tsx +++ b/src/view/com/feed/FeedItem.tsx @@ -30,6 +30,16 @@ export const FeedItem = observer(function FeedItem({ name: item.author.name, }) } + const onPressToggleRepost = () => { + item + .toggleRepost() + .catch(e => console.error('Failed to toggle repost', record, e)) + } + const onPressToggleLike = () => { + item + .toggleLike() + .catch(e => console.error('Failed to toggle like', record, e)) + } return ( <TouchableOpacity style={styles.outer} onPress={onPressOuter}> @@ -75,21 +85,34 @@ export const FeedItem = observer(function FeedItem({ /> <Text>{item.replyCount}</Text> </View> - <View style={styles.ctrl}> + <TouchableOpacity style={styles.ctrl} onPress={onPressToggleRepost}> <FontAwesomeIcon - style={styles.ctrlIcon} + style={ + item.myState.hasReposted + ? styles.ctrlIconReposted + : styles.ctrlIcon + } icon="retweet" size={22} /> - <Text>{item.repostCount}</Text> - </View> - <View style={styles.ctrl}> + <Text + style={ + item.myState.hasReposted ? [s.bold, s.green] : undefined + }> + {item.repostCount} + </Text> + </TouchableOpacity> + <TouchableOpacity style={styles.ctrl} onPress={onPressToggleLike}> <FontAwesomeIcon - style={styles.ctrlIcon} - icon={['far', 'heart']} + style={ + item.myState.hasLiked ? styles.ctrlIconLiked : styles.ctrlIcon + } + icon={[item.myState.hasLiked ? 'fas' : 'far', 'heart']} /> - <Text>{item.likeCount}</Text> - </View> + <Text style={item.myState.hasLiked ? [s.bold, s.red] : undefined}> + {item.likeCount} + </Text> + </TouchableOpacity> <View style={styles.ctrl}> <FontAwesomeIcon style={styles.ctrlIcon} @@ -158,4 +181,12 @@ const styles = StyleSheet.create({ marginRight: 5, color: 'gray', }, + ctrlIconReposted: { + marginRight: 5, + color: 'green', + }, + ctrlIconLiked: { + marginRight: 5, + color: 'red', + }, }) diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx index 3623abde4..8f70e1493 100644 --- a/src/view/com/post-thread/PostThread.tsx +++ b/src/view/com/post-thread/PostThread.tsx @@ -56,7 +56,7 @@ export const PostThread = observer(function PostThread({ // loaded // = - const posts = Array.from(flattenThread(view.thread)) + const posts = view.thread ? Array.from(flattenThread(view.thread)) : [] const renderItem = ({item}: {item: PostThreadViewPostModel}) => ( <PostThreadItem item={item} onNavigateContent={onNavigateContent} /> ) diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index 8628f67c1..896eab89f 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -40,6 +40,16 @@ export const PostThreadItem = observer(function PostThreadItem({ name: item.author.name, }) } + const onPressToggleRepost = () => { + item + .toggleRepost() + .catch(e => console.error('Failed to toggle repost', record, e)) + } + const onPressToggleLike = () => { + item + .toggleLike() + .catch(e => console.error('Failed to toggle like', record, e)) + } return ( <TouchableOpacity style={styles.outer} onPress={onPressOuter}> @@ -108,21 +118,34 @@ export const PostThreadItem = observer(function PostThreadItem({ /> <Text>{item.replyCount}</Text> </View> - <View style={styles.ctrl}> + <TouchableOpacity style={styles.ctrl} onPress={onPressToggleRepost}> <FontAwesomeIcon - style={styles.ctrlIcon} + style={ + item.myState.hasReposted + ? styles.ctrlIconReposted + : styles.ctrlIcon + } icon="retweet" size={22} /> - <Text>{item.repostCount}</Text> - </View> - <View style={styles.ctrl}> + <Text + style={ + item.myState.hasReposted ? [s.bold, s.green] : undefined + }> + {item.repostCount} + </Text> + </TouchableOpacity> + <TouchableOpacity style={styles.ctrl} onPress={onPressToggleLike}> <FontAwesomeIcon - style={styles.ctrlIcon} - icon={['far', 'heart']} + style={ + item.myState.hasLiked ? styles.ctrlIconLiked : styles.ctrlIcon + } + icon={[item.myState.hasLiked ? 'fas' : 'far', 'heart']} /> - <Text>{item.likeCount}</Text> - </View> + <Text style={item.myState.hasLiked ? [s.bold, s.red] : undefined}> + {item.likeCount} + </Text> + </TouchableOpacity> <View style={styles.ctrl}> <FontAwesomeIcon style={styles.ctrlIcon} @@ -205,4 +228,12 @@ const styles = StyleSheet.create({ marginRight: 5, color: 'gray', }, + ctrlIconReposted: { + marginRight: 5, + color: 'green', + }, + ctrlIconLiked: { + marginRight: 5, + color: 'red', + }, }) |