import {Pressable, View} from 'react-native' import {msg} from '@lingui/core/macro' import {useLingui} from '@lingui/react' import {useNavigation, useNavigationState} from '@react-navigation/native' import {getCurrentRoute} from '#/lib/routes/helpers' import {type NavigationProp} from '#/lib/routes/types' import {emitSoftReset} from '#/state/events' import { type SavedFeedSourceInfo, usePinnedFeedsInfos, } from '#/state/queries/feed' import {useSelectedFeed, useSetSelectedFeed} from '#/state/shell/selected-feed' import {UserAvatar} from '#/view/com/util/UserAvatar' import {atoms as a, useTheme, web} from '#/alf' import {useInteractionState} from '#/components/hooks/useInteractionState' import {FilterTimeline_Stroke2_Corner0_Rounded as FilterTimeline} from '#/components/icons/FilterTimeline' import {PlusSmall_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus' import {Link} from '#/components/Link' import {Text} from '#/components/Typography' import {useAnalytics} from '#/analytics' export function DesktopFeeds() { const t = useTheme() const {_} = useLingui() const ax = useAnalytics() const {data: pinnedFeedInfos, error, isLoading} = usePinnedFeedsInfos() const selectedFeed = useSelectedFeed() const setSelectedFeed = useSetSelectedFeed() const navigation = useNavigation() const route = useNavigationState(state => { if (!state) { return {name: 'Home'} } return getCurrentRoute(state) }) if (isLoading) { return ( {Array(5) .fill(0) .map((_, i) => ( ))} ) } if (error || !pinnedFeedInfos) { return null } return ( {pinnedFeedInfos.map((feedInfo, index) => { const feed = feedInfo.feedDescriptor const current = route.name === 'Home' && (selectedFeed ? feed === selectedFeed : index === 0) return ( { ax.metric('desktopFeeds:feed:click', { feedUri: feedInfo.uri, feedDescriptor: feed, }) setSelectedFeed(feed) navigation.navigate('Home') if (route.name === 'Home' && feed === selectedFeed) { emitSoftReset() } }} /> ) })} {({hovered}) => { const isActive = route.name === 'Feeds' return ( <> {_(msg`More feeds`)} ) }} ) } function FeedItem({ feedInfo, current, onPress, }: { feedInfo: SavedFeedSourceInfo current: boolean onPress: () => void }) { const t = useTheme() const {_} = useLingui() const { state: hovered, onIn: onHoverIn, onOut: onHoverOut, } = useInteractionState() const isFollowing = feedInfo.feedDescriptor === 'following' return ( {isFollowing ? ( ) : ( )} {feedInfo.displayName} ) }