diff --git a/src/view/com/composer/Prompt.tsx b/src/view/com/composer/Prompt.tsx
new file mode 100644
index 000000000..4a84c7160
--- /dev/null
+++ b/src/view/com/composer/Prompt.tsx
@@ -0,0 +1,63 @@
+import React from 'react'
+import {StyleSheet, Text, TouchableOpacity, View} from 'react-native'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {colors} from '../../lib/styles'
+import {useStores} from '../../../state'
+import {UserAvatar} from '../util/UserAvatar'
+
+export function ComposePrompt({onPressCompose}: {onPressCompose: () => void}) {
+ const store = useStores()
+ const onPressAvatar = () => {
+ store.nav.navigate(`/profile/${store.me.handle}`)
+ }
+ return (
+
+
+
+
+
+ What's happening?
+
+
+ Post
+
+
+ )
+}
+
+const styles = StyleSheet.create({
+ container: {
+ borderRadius: 6,
+ margin: 2,
+ marginBottom: 0,
+ paddingHorizontal: 10,
+ paddingVertical: 10,
+ flexDirection: 'row',
+ alignItems: 'center',
+ backgroundColor: colors.white,
+ },
+ avatar: {
+ width: 50,
+ },
+ textContainer: {
+ marginLeft: 10,
+ flex: 1,
+ },
+ text: {
+ color: colors.gray4,
+ fontSize: 17,
+ },
+ btn: {
+ backgroundColor: colors.gray1,
+ paddingVertical: 6,
+ paddingHorizontal: 14,
+ borderRadius: 30,
+ },
+ btnText: {
+ color: colors.gray5,
+ },
+})
diff --git a/src/view/com/posts/Feed.tsx b/src/view/com/posts/Feed.tsx
index d10be821f..3a2bc6189 100644
--- a/src/view/com/posts/Feed.tsx
+++ b/src/view/com/posts/Feed.tsx
@@ -6,23 +6,34 @@ import {EmptyState} from '../util/EmptyState'
import {ErrorMessage} from '../util/ErrorMessage'
import {FeedModel, FeedItemModel} from '../../../state/models/feed-view'
import {FeedItem} from './FeedItem'
+import {ComposePrompt} from '../composer/Prompt'
+
+const COMPOSE_PROMPT_ITEM = {_reactKey: '__prompt__'}
export const Feed = observer(function Feed({
feed,
style,
scrollElRef,
+ onPressCompose,
onPressTryAgain,
}: {
feed: FeedModel
style?: StyleProp
scrollElRef?: MutableRefObject | null>
+ onPressCompose?: () => void
onPressTryAgain?: () => void
}) {
// TODO optimize renderItem or FeedItem, we're getting this notice from RN: -prf
// VirtualizedList: You have a large list that is slow to update - make sure your
// renderItem function renders components that follow React performance best practices
// like PureComponent, shouldComponentUpdate, etc
- const renderItem = ({item}: {item: FeedItemModel}) =>
+ const renderItem = ({item}: {item: FeedItemModel}) => {
+ if (item === COMPOSE_PROMPT_ITEM) {
+ return
+ } else {
+ return
+ }
+ }
const onRefresh = () => {
feed.refresh().catch(err => console.error('Failed to refresh', err))
}
@@ -45,7 +56,7 @@ export const Feed = observer(function Feed({
{feed.hasContent && (
item._reactKey}
renderItem={renderItem}
refreshing={feed.isRefreshing}
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
index 609b1ca38..d90d337ac 100644
--- a/src/view/screens/Home.tsx
+++ b/src/view/screens/Home.tsx
@@ -65,7 +65,7 @@ export const Home = observer(function Home({
}
}, [visible, store])
- const onComposePress = () => {
+ const onPressCompose = () => {
store.shell.openComposer({onPost: onCreatePost})
}
const onCreatePost = () => {
@@ -81,12 +81,12 @@ export const Home = observer(function Home({
return (
-
{defaultFeedView.hasNewLatest ? (
@@ -95,7 +95,6 @@ export const Home = observer(function Home({
Load new posts
) : undefined}
-
)
})
diff --git a/src/view/screens/Notifications.tsx b/src/view/screens/Notifications.tsx
index 7e4de497e..1e7abdb90 100644
--- a/src/view/screens/Notifications.tsx
+++ b/src/view/screens/Notifications.tsx
@@ -1,7 +1,6 @@
import React, {useState, useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
-import {FAB} from '../com/util/FloatingActionButton'
import {Feed} from '../com/notifications/Feed'
import {useStores} from '../../state'
import {NotificationsViewModel} from '../../state/models/notifications-view'
@@ -37,9 +36,6 @@ export const Notifications = ({navIdx, visible}: ScreenParams) => {
}
}, [visible, store])
- const onComposePress = () => {
- store.shell.openComposer({})
- }
const onPressTryAgain = () => {
notesView?.refresh()
}
@@ -48,7 +44,6 @@ export const Notifications = ({navIdx, visible}: ScreenParams) => {
{notesView && }
-
)
}
diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx
index e637c6ad8..1187e626e 100644
--- a/src/view/screens/Profile.tsx
+++ b/src/view/screens/Profile.tsx
@@ -3,7 +3,6 @@ import {StyleSheet, Text, View} from 'react-native'
import {observer} from 'mobx-react-lite'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {ViewSelector} from '../com/util/ViewSelector'
-import {FAB} from '../com/util/FloatingActionButton'
import {ScreenParams} from '../routes'
import {ProfileUiModel, Sections} from '../../state/models/profile-ui'
import {MembershipItem} from '../../state/models/memberships-view'
@@ -86,9 +85,6 @@ export const Profile = observer(({navIdx, visible, params}: ScreenParams) => {
),
)
}
- const onComposePress = () => {
- store.shell.openComposer({})
- }
// rendering
// =
@@ -241,7 +237,6 @@ export const Profile = observer(({navIdx, visible, params}: ScreenParams) => {
) : (
renderHeader()
)}
-
)
})
--
2.51.2
From 3a1013906494fc0399b908b8ffbba548f00ec976 Mon Sep 17 00:00:00 2001
From: Paul Frazee
Date: Sun, 20 Nov 2022 11:32:13 -0600
Subject: [PATCH 2/7] Remove downvotes from the UI
---
src/view/com/post-thread/PostThreadItem.tsx | 34 +---------------
src/view/com/post/Post.tsx | 8 ----
src/view/com/posts/FeedItem.tsx | 8 ----
src/view/com/util/LoadingPlaceholder.tsx | 6 +--
src/view/com/util/PostCtrls.tsx | 43 +--------------------
5 files changed, 5 insertions(+), 94 deletions(-)
diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx
index 0c4565c51..eb420a40e 100644
--- a/src/view/com/post-thread/PostThreadItem.tsx
+++ b/src/view/com/post-thread/PostThreadItem.tsx
@@ -31,8 +31,7 @@ export const PostThreadItem = observer(function PostThreadItem({
const store = useStores()
const [deleted, setDeleted] = useState(false)
const record = item.record as unknown as PostType.Record
- const hasEngagement =
- item.upvoteCount || item.downvoteCount || item.repostCount
+ const hasEngagement = item.upvoteCount || item.repostCount
const itemHref = useMemo(() => {
const urip = new AtUri(item.uri)
@@ -46,11 +45,6 @@ export const PostThreadItem = observer(function PostThreadItem({
return `/profile/${item.author.handle}/post/${urip.rkey}/upvoted-by`
}, [item.uri, item.author.handle])
const upvotesTitle = 'Upvotes on this post'
- const downvotesHref = useMemo(() => {
- const urip = new AtUri(item.uri)
- return `/profile/${item.author.handle}/post/${urip.rkey}/downvoted-by`
- }, [item.uri, item.author.handle])
- const downvotesTitle = 'Downvotes on this post'
const repostsHref = useMemo(() => {
const urip = new AtUri(item.uri)
return `/profile/${item.author.handle}/post/${urip.rkey}/reposted-by`
@@ -73,11 +67,6 @@ export const PostThreadItem = observer(function PostThreadItem({
.toggleUpvote()
.catch(e => console.error('Failed to toggle upvote', record, e))
}
- const onPressToggleDownvote = () => {
- item
- .toggleDownvote()
- .catch(e => console.error('Failed to toggle downvote', record, e))
- }
const onDeletePost = () => {
item.delete().then(
() => {
@@ -188,21 +177,6 @@ export const PostThreadItem = observer(function PostThreadItem({
) : (
<>>
)}
- {item.downvoteCount ? (
-
-
-
- {item.downvoteCount}
- {' '}
- {pluralize(item.downvoteCount, 'downvote')}
-
-
- ) : (
- <>>
- )}
) : (
<>>
@@ -212,14 +186,11 @@ export const PostThreadItem = observer(function PostThreadItem({
replyCount={item.replyCount}
repostCount={item.repostCount}
upvoteCount={item.upvoteCount}
- downvoteCount={item.downvoteCount}
isReposted={!!item.myState.repost}
isUpvoted={!!item.myState.upvote}
- isDownvoted={!!item.myState.downvote}
onPressReply={onPressReply}
onPressToggleRepost={onPressToggleRepost}
onPressToggleUpvote={onPressToggleUpvote}
- onPressToggleDownvote={onPressToggleDownvote}
/>
@@ -301,14 +272,11 @@ export const PostThreadItem = observer(function PostThreadItem({
replyCount={item.replyCount}
repostCount={item.repostCount}
upvoteCount={item.upvoteCount}
- downvoteCount={item.downvoteCount}
isReposted={!!item.myState.repost}
isUpvoted={!!item.myState.upvote}
- isDownvoted={!!item.myState.downvote}
onPressReply={onPressReply}
onPressToggleRepost={onPressToggleRepost}
onPressToggleUpvote={onPressToggleUpvote}
- onPressToggleDownvote={onPressToggleDownvote}
/>
diff --git a/src/view/com/post/Post.tsx b/src/view/com/post/Post.tsx
index a5c084570..10f8048f0 100644
--- a/src/view/com/post/Post.tsx
+++ b/src/view/com/post/Post.tsx
@@ -85,11 +85,6 @@ export const Post = observer(function Post({uri}: {uri: string}) {
.toggleUpvote()
.catch(e => console.error('Failed to toggle upvote', record, e))
}
- const onPressToggleDownvote = () => {
- item
- .toggleDownvote()
- .catch(e => console.error('Failed to toggle downvote', record, e))
- }
const onDeletePost = () => {
item.delete().then(
() => {
@@ -154,14 +149,11 @@ export const Post = observer(function Post({uri}: {uri: string}) {
replyCount={item.replyCount}
repostCount={item.repostCount}
upvoteCount={item.upvoteCount}
- downvoteCount={item.downvoteCount}
isReposted={!!item.myState.repost}
isUpvoted={!!item.myState.upvote}
- isDownvoted={!!item.myState.downvote}
onPressReply={onPressReply}
onPressToggleRepost={onPressToggleRepost}
onPressToggleUpvote={onPressToggleUpvote}
- onPressToggleDownvote={onPressToggleDownvote}
/>
diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx
index 2898deff5..6deb04209 100644
--- a/src/view/com/posts/FeedItem.tsx
+++ b/src/view/com/posts/FeedItem.tsx
@@ -53,11 +53,6 @@ export const FeedItem = observer(function FeedItem({
.toggleUpvote()
.catch(e => console.error('Failed to toggle upvote', record, e))
}
- const onPressToggleDownvote = () => {
- item
- .toggleDownvote()
- .catch(e => console.error('Failed to toggle downvote', record, e))
- }
const onDeletePost = () => {
item.delete().then(
() => {
@@ -150,14 +145,11 @@ export const FeedItem = observer(function FeedItem({
replyCount={item.replyCount}
repostCount={item.repostCount}
upvoteCount={item.upvoteCount}
- downvoteCount={item.downvoteCount}
isReposted={!!item.myState.repost}
isUpvoted={!!item.myState.upvote}
- isDownvoted={!!item.myState.downvote}
onPressReply={onPressReply}
onPressToggleRepost={onPressToggleRepost}
onPressToggleUpvote={onPressToggleUpvote}
- onPressToggleDownvote={onPressToggleDownvote}
/>
diff --git a/src/view/com/util/LoadingPlaceholder.tsx b/src/view/com/util/LoadingPlaceholder.tsx
index c198407de..b08e11595 100644
--- a/src/view/com/util/LoadingPlaceholder.tsx
+++ b/src/view/com/util/LoadingPlaceholder.tsx
@@ -9,7 +9,7 @@ import {
} from 'react-native'
import LinearGradient from 'react-native-linear-gradient'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {UpIcon, DownIcon} from '../../lib/icons'
+import {UpIcon} from '../../lib/icons'
import {s, colors} from '../../lib/styles'
export function LoadingPlaceholder({
@@ -102,9 +102,7 @@ export function PostLoadingPlaceholder({
-
-
-
+
diff --git a/src/view/com/util/PostCtrls.tsx b/src/view/com/util/PostCtrls.tsx
index a3d2085e9..6d766951f 100644
--- a/src/view/com/util/PostCtrls.tsx
+++ b/src/view/com/util/PostCtrls.tsx
@@ -8,27 +8,23 @@ import Animated, {
interpolate,
} from 'react-native-reanimated'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {UpIcon, UpIconSolid, DownIcon, DownIconSolid} from '../../lib/icons'
+import {UpIcon, UpIconSolid} from '../../lib/icons'
import {s, colors} from '../../lib/styles'
interface PostCtrlsOpts {
replyCount: number
repostCount: number
upvoteCount: number
- downvoteCount: number
isReposted: boolean
isUpvoted: boolean
- isDownvoted: boolean
onPressReply: () => void
onPressToggleRepost: () => void
onPressToggleUpvote: () => void
- onPressToggleDownvote: () => void
}
export function PostCtrls(opts: PostCtrlsOpts) {
const interp1 = useSharedValue(0)
const interp2 = useSharedValue(0)
- const interp3 = useSharedValue(0)
const anim1Style = useAnimatedStyle(() => ({
transform: [{scale: interpolate(interp1.value, [0, 1.0], [1.0, 3.0])}],
@@ -38,10 +34,6 @@ export function PostCtrls(opts: PostCtrlsOpts) {
transform: [{scale: interpolate(interp2.value, [0, 1.0], [1.0, 3.0])}],
opacity: interpolate(interp2.value, [0, 1.0], [1.0, 0.0]),
}))
- const anim3Style = useAnimatedStyle(() => ({
- transform: [{scale: interpolate(interp3.value, [0, 1.0], [1.0, 3.0])}],
- opacity: interpolate(interp3.value, [0, 1.0], [1.0, 0.0]),
- }))
const onPressToggleRepostWrapper = () => {
if (!opts.isReposted) {
@@ -59,14 +51,6 @@ export function PostCtrls(opts: PostCtrlsOpts) {
}
opts.onPressToggleUpvote()
}
- const onPressToggleDownvoteWrapper = () => {
- if (!opts.isDownvoted) {
- interp3.value = withTiming(1, {duration: 300}, () => {
- interp3.value = withDelay(100, withTiming(0, {duration: 20}))
- })
- }
- opts.onPressToggleDownvote()
- }
return (
@@ -124,27 +108,7 @@ export function PostCtrls(opts: PostCtrlsOpts) {
-
-
-
- {opts.isDownvoted ? (
-
- ) : (
-
- )}
-
-
- {opts.downvoteCount}
-
-
-
+
)
}
@@ -169,7 +133,4 @@ const styles = StyleSheet.create({
ctrlIconUpvoted: {
color: colors.red3,
},
- ctrlIconDownvoted: {
- color: colors.blue3,
- },
})
--
2.51.2
From 63348807b59ec82a905aa2a1164a1484e61aa29a Mon Sep 17 00:00:00 2001
From: Paul Frazee
Date: Sun, 20 Nov 2022 11:45:31 -0600
Subject: [PATCH 3/7] Adjust post control sizing and alignment
---
src/view/com/util/LoadingPlaceholder.tsx | 6 +++---
src/view/com/util/PostCtrls.tsx | 18 ++++++++----------
src/view/lib/icons.tsx | 4 +++-
3 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/src/view/com/util/LoadingPlaceholder.tsx b/src/view/com/util/LoadingPlaceholder.tsx
index b08e11595..ed94c5502 100644
--- a/src/view/com/util/LoadingPlaceholder.tsx
+++ b/src/view/com/util/LoadingPlaceholder.tsx
@@ -93,14 +93,14 @@ export function PostLoadingPlaceholder({
-
+
-
+
diff --git a/src/view/com/util/PostCtrls.tsx b/src/view/com/util/PostCtrls.tsx
index 6d766951f..b22475086 100644
--- a/src/view/com/util/PostCtrls.tsx
+++ b/src/view/com/util/PostCtrls.tsx
@@ -59,9 +59,9 @@ export function PostCtrls(opts: PostCtrlsOpts) {
- {opts.replyCount}
+ {opts.replyCount}
@@ -74,14 +74,14 @@ export function PostCtrls(opts: PostCtrlsOpts) {
opts.isReposted ? styles.ctrlIconReposted : styles.ctrlIcon
}
icon="retweet"
- size={18}
+ size={20}
/>
{opts.repostCount}
@@ -95,14 +95,14 @@ export function PostCtrls(opts: PostCtrlsOpts) {
{opts.isUpvoted ? (
) : (
-
+
)}
{opts.upvoteCount}
@@ -116,12 +116,10 @@ export function PostCtrls(opts: PostCtrlsOpts) {
const styles = StyleSheet.create({
ctrls: {
flexDirection: 'row',
- paddingRight: 20,
},
ctrl: {
flexDirection: 'row',
alignItems: 'center',
- paddingLeft: 4,
paddingRight: 4,
},
ctrlIcon: {
diff --git a/src/view/lib/icons.tsx b/src/view/lib/icons.tsx
index c160df3cc..b3f52a62e 100644
--- a/src/view/lib/icons.tsx
+++ b/src/view/lib/icons.tsx
@@ -221,9 +221,11 @@ export function UserGroupIcon({
export function UpIcon({
style,
size,
+ strokeWidth = 1.3,
}: {
style?: StyleProp
size?: string | number
+ strokeWidth: number
}) {
return (
@@ -232,6 +234,8 @@ export function UpIconSolid({
strokeWidth={1.3}
stroke="currentColor"
fill="currentColor"
+ strokeLinecap="round"
+ strokeLinejoin="round"
d="M 7 3 L 2 8 L 4.5 8 L 4.5 11.5 L 9.5 11.5 L 9.5 8 L 12 8 L 7 3 Z"
/>
@@ -254,6 +258,8 @@ export function DownIcon({
@@ -277,6 +283,8 @@ export function DownIconSolid({
strokeWidth={1.3}
stroke="currentColor"
fill="currentColor"
+ strokeLinecap="round"
+ strokeLinejoin="round"
d="M 7 11.5 L 2 6.5 L 4.5 6.5 L 4.5 3 L 9.5 3 L 9.5 6.5 L 12 6.5 L 7 11.5 Z"
/>
--
2.51.2
From 7e487fd5ae053ebb4373b85f1b3d7aa66f8a0241 Mon Sep 17 00:00:00 2001
From: Paul Frazee
Date: Sun, 20 Nov 2022 16:29:43 -0600
Subject: [PATCH 7/7] Adjust control alignment
---
src/view/com/util/LoadingPlaceholder.tsx | 2 +-
src/view/com/util/PostCtrls.tsx | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/view/com/util/LoadingPlaceholder.tsx b/src/view/com/util/LoadingPlaceholder.tsx
index ed94c5502..5ccd1bd14 100644
--- a/src/view/com/util/LoadingPlaceholder.tsx
+++ b/src/view/com/util/LoadingPlaceholder.tsx
@@ -100,7 +100,7 @@ export function PostLoadingPlaceholder({
-
+
diff --git a/src/view/com/util/PostCtrls.tsx b/src/view/com/util/PostCtrls.tsx
index b22475086..144351d85 100644
--- a/src/view/com/util/PostCtrls.tsx
+++ b/src/view/com/util/PostCtrls.tsx
@@ -61,7 +61,7 @@ export function PostCtrls(opts: PostCtrlsOpts) {
icon={['far', 'comment']}
size={16}
/>
- {opts.replyCount}
+ {opts.replyCount}
@@ -80,8 +80,8 @@ export function PostCtrls(opts: PostCtrlsOpts) {
{opts.repostCount}
@@ -93,16 +93,16 @@ export function PostCtrls(opts: PostCtrlsOpts) {
onPress={onPressToggleUpvoteWrapper}>
{opts.isUpvoted ? (
-
+
) : (
-
+
)}
{opts.upvoteCount}