Visually improve the empty state of feeds (#4466)

zio/stable
Paul Frazee 2024-06-10 13:44:21 -07:00 committed by GitHub
parent c2d7d23423
commit 4efd576f6a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 21 deletions

View File

@ -56,7 +56,7 @@ export const ProfileFeedSection = React.forwardRef<
}))
const renderPostsEmpty = React.useCallback(() => {
return <EmptyState icon="feed" message={_(msg`This feed is empty!`)} />
return <EmptyState icon="growth" message={_(msg`No posts yet.`)} />
}, [_])
React.useEffect(() => {

View File

@ -5,10 +5,13 @@ import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
import {Text} from './text/Text'
import {UserGroupIcon} from 'lib/icons'
import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
import {usePalette} from 'lib/hooks/usePalette'
import {UserGroupIcon} from 'lib/icons'
import {isWeb} from 'platform/detection'
import {Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
import {Text} from './text/Text'
export function EmptyState({
testID,
@ -17,32 +20,41 @@ export function EmptyState({
style,
}: {
testID?: string
icon: IconProp | 'user-group'
icon: IconProp | 'user-group' | 'growth'
message: string
style?: StyleProp<ViewStyle>
}) {
const pal = usePalette('default')
const {isTabletOrDesktop} = useWebMediaQueries()
const iconSize = isTabletOrDesktop ? 80 : 64
return (
<View
testID={testID}
style={[styles.container, isWeb && pal.border, style]}>
<View style={styles.iconContainer}>
style={[
styles.container,
isWeb && pal.border,
isTabletOrDesktop && {paddingRight: 20},
style,
]}>
<View
style={[
styles.iconContainer,
isTabletOrDesktop && styles.iconContainerBig,
pal.viewLight,
]}>
{icon === 'user-group' ? (
<UserGroupIcon size="64" style={styles.icon} />
<UserGroupIcon size={iconSize} />
) : icon === 'growth' ? (
<Growth width={iconSize} fill={pal.colors.emptyStateIcon} />
) : (
<FontAwesomeIcon
icon={icon}
size={64}
style={[
styles.icon,
{color: pal.colors.emptyStateIcon} as FontAwesomeIconStyle,
]}
size={iconSize}
style={[{color: pal.colors.emptyStateIcon} as FontAwesomeIconStyle]}
/>
)}
</View>
<Text
type="xl-medium"
style={[{color: pal.colors.textVeryLight}, styles.text]}>
<Text type="xl" style={[{color: pal.colors.textLight}, styles.text]}>
{message}
</Text>
</View>
@ -51,16 +63,23 @@ export function EmptyState({
const styles = StyleSheet.create({
container: {
paddingVertical: 24,
paddingHorizontal: 36,
borderTopWidth: isWeb ? 1 : undefined,
},
iconContainer: {
flexDirection: 'row',
},
icon: {
alignItems: 'center',
justifyContent: 'center',
height: 100,
width: 100,
marginLeft: 'auto',
marginRight: 'auto',
borderRadius: 80,
marginTop: 30,
},
iconContainerBig: {
width: 140,
height: 140,
marginTop: 50,
},
text: {
textAlign: 'center',

View File

@ -468,7 +468,7 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>(
}, [onScrollToTop, isScreenFocused])
const renderPostsEmpty = useCallback(() => {
return <EmptyState icon="feed" message={_(msg`This feed is empty!`)} />
return <EmptyState icon="hashtag" message={_(msg`This feed is empty.`)} />
}, [_])
return (

View File

@ -726,7 +726,7 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>(
}, [onScrollToTop, isScreenFocused])
const renderPostsEmpty = useCallback(() => {
return <EmptyState icon="feed" message={_(msg`This feed is empty!`)} />
return <EmptyState icon="hashtag" message={_(msg`This feed is empty.`)} />
}, [_])
return (