import React from 'react' import {View} from 'react-native' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {AppBskyFeedDefs, RichText as BskRichText} from '@atproto/api' import {Text} from 'view/com/util/text/Text' import {RichText} from 'view/com/util/text/RichText' import {Button} from 'view/com/util/forms/Button' import {UserAvatar} from 'view/com/util/UserAvatar' import * as Toast from 'view/com/util/Toast' import {HeartIcon} from 'lib/icons' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {sanitizeHandle} from 'lib/strings/handles' import { usePreferencesQuery, usePinFeedMutation, useRemoveFeedMutation, } from '#/state/queries/preferences' import {logger} from '#/logger' import {useAnalytics} from '#/lib/analytics/analytics' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' export function RecommendedFeedsItem({ item, }: { item: AppBskyFeedDefs.GeneratorView }) { const {isMobile} = useWebMediaQueries() const pal = usePalette('default') const {_} = useLingui() const {data: preferences} = usePreferencesQuery() const { mutateAsync: pinFeed, variables: pinnedFeed, reset: resetPinFeed, } = usePinFeedMutation() const { mutateAsync: removeFeed, variables: removedFeed, reset: resetRemoveFeed, } = useRemoveFeedMutation() const {track} = useAnalytics() if (!item || !preferences) return null const isPinned = !removedFeed?.uri && (pinnedFeed?.uri || preferences.feeds.saved.includes(item.uri)) const onToggle = async () => { if (isPinned) { try { await removeFeed({uri: item.uri}) resetRemoveFeed() } catch (e) { Toast.show(_(msg`There was an issue contacting your server`)) logger.error('Failed to unsave feed', {message: e}) } } else { try { await pinFeed({uri: item.uri}) resetPinFeed() track('Onboarding:CustomFeedAdded') } catch (e) { Toast.show(_(msg`There was an issue contacting your server`)) logger.error('Failed to pin feed', {message: e}) } } } return ( {item.displayName} by {sanitizeHandle(item.creator.handle, '@')} {item.description ? ( ) : null} {item.likeCount || 0} ) }